diff --git a/ChangeLog b/ChangeLog index 3f6fa84af70..356ac165782 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,3 @@ -2023-07-30 Nick Clifton - - This is the 2.41 release. - * src-release.sh: Add Changelog.git. - * ChangeLog.git: New file. - 2023-07-03 Nick Clifton 2.41 Branch Point. diff --git a/ChangeLog.git b/ChangeLog.git deleted file mode 100644 index 41394cc56f0..00000000000 --- a/ChangeLog.git +++ /dev/null @@ -1,142648 +0,0 @@ -2023-07-30 GDB Administrator - - Automatic date update in version.in - -2023-07-29 GDB Administrator - - Automatic date update in version.in - -2023-07-28 Jan Beulich - - gas: amend X_unsigned uses - PR gas/30688 - - X_unsigned being clear does not indicate a negative number; it merely - indicates a signed one (whose sign may still be clear). Amend two uses - by an actual value check. - -2023-07-28 Tsukasa OI - - RISC-V: Add actual 'Zvkt' extension support - The 'Zvkt' extension is listed on the added extensions in the GNU Binutils - version 2.41 (see binutils/NEWS). However, the support of this extension - was actually missing. - - This commit adds actual support of this extension and adds implications - from 'Zvkn' and 'Zvks' superset extensions. - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_implicit_subsets) Add implications from - 'Zvkn' and 'Zvks'. (riscv_supported_std_z_ext): Add 'Zvkt' to - the supported extension list. - -2023-07-28 YunQiang Su - - MIPS: Support `-gnuabi64' target triplet suffix for 64-bit Linux targets - Make the n64 ABI the default for 64-bit Linux targets specified with - `-gnuabi64' suffix included in the target triplet, for configurations - such as the Debian mips64el and mips64r6el ports. Adjust testsuite - configuration accordingly. - - There are the following regressions with the new target triplet: - - mips64-linux-gnuabi64 +FAIL: readelf -S bintest - mips64-linux-gnuabi64 +FAIL: MIPS reloc estimation 1 - mips64el-linux-gnuabi64 +FAIL: readelf -S bintest - mips64el-linux-gnuabi64 +FAIL: MIPS reloc estimation 1 - - The `readelf' issue comes from a difference in section headers produced - that the `binutils/testsuite/binutils-all/readelf.s-64' pattern template - does not match. While there has been a precedent it does not appear to - me that there is a clear advantage from adding more and more variations - to the template rather than forking the existing template into multiple - ones for a more exact match. So this is best deferred to a separate - discussion. - - The MIPS reloc estimation issue is an actual bug in `objdump', which - discards a number of trailing entries from output here for n64 composed - relocations: - - DYNAMIC RELOCATION RECORDS - OFFSET TYPE VALUE - 0000000000000000 R_MIPS_NONE *ABS* - 0000000000000000 R_MIPS_NONE *ABS* - - and consequently `ld/testsuite/ld-mips-elf/reloc-estimate-1.d' does not - match even though ELF output produced is correct according to `readelf': - - Relocation section '.rel.dyn' at offset 0x10400 contains 2 entries: - Offset Info Type Sym. Value Sym. Name - 000000000000 000000000000 R_MIPS_NONE - Type2: R_MIPS_NONE - Type3: R_MIPS_NONE - 000000010000 000300001203 R_MIPS_REL32 0000000000010010 foo@@V2 - Type2: R_MIPS_64 - Type3: R_MIPS_NONE - - As a genuine bug this has to be handled separately. - - Co-Authored by: Maciej W. Rozycki - - bfd/ - * config.bfd: Add `mips64*el-*-linux*-gnuabi64' and - `mips64*-*-linux*-gnuabi64' targets. - - binutils/ - * testsuite/binutils-all/mips/mips.exp: Handle `*-*-*-gnuabi64' - targets. - * testsuite/binutils-all/objcopy.exp: Handle - `mips64*-*-*-gnuabi64' targets. - * testsuite/binutils-all/remove-relocs-01.d: Likewise. - * testsuite/binutils-all/remove-relocs-04.d: Likewise. - * testsuite/binutils-all/remove-relocs-05.d: Likewise. - * testsuite/binutils-all/remove-relocs-06.d: Likewise. - - gas/ - * configure.ac: Handle `mips64*-linux-gnuabi64' targets. - * configure: Regenerate. - * testsuite/gas/mips/compact-eh-eb-7.d: Handle - `mips64*-*-*-gnuabi64' targets. - * testsuite/gas/mips/compact-eh-el-7.d: Likewise. - - ld/ - * configure.tgt: Add `mips64*el-*-linux-gnuabi64' and - `mips64*-*-linux-gnuabi64' targets. - * testsuite/ld-undefined/undefined.exp: Handle - `mips64*-*-*-gnuabi64' targets. - * testsuite/ld-mips-elf/attr-gnu-4-10.d: Likewise. - * testsuite/ld-mips-elf/compact-eh6.d: Likewise. - * testsuite/ld-mips-elf/mips-elf.exp: Handle `*-*-*-gnuabi64' - targets. - - (cherry picked from commit 29c108c9610640439daa5244a573348b7c47d994) - -2023-07-28 YunQiang Su - - MIPS/GAS/testsuite: Fix n64 compact EH failures - Expect a `.MIPS.options' section alternatively to `.reginfo' and ignore - contents of either as irrelevant for all the affected compact EH tests, - removing these regressions: - - mips64-openbsd -FAIL: Compact EH EB #1 with personality ID and FDE data - mips64-openbsd -FAIL: Compact EH EB #2 with personality routine and FDE data - mips64-openbsd -FAIL: Compact EH EB #3 with personality id and large FDE data - mips64-openbsd -FAIL: Compact EH EB #4 with personality id, FDE data and LSDA - mips64-openbsd -FAIL: Compact EH EB #5 with personality routine, FDE data and LSDA - mips64-openbsd -FAIL: Compact EH EB #6 with personality id, LSDA and large FDE data - mips64-openbsd -FAIL: Compact EH EL #1 with personality ID and FDE data - mips64-openbsd -FAIL: Compact EH EL #2 with personality routine and FDE data - mips64-openbsd -FAIL: Compact EH EL #3 with personality id and large FDE data - mips64-openbsd -FAIL: Compact EH EL #4 with personality id, FDE data and LSDA - mips64-openbsd -FAIL: Compact EH EL #5 with personality routine, FDE data and LSDA - mips64-openbsd -FAIL: Compact EH EL #6 with personality id, LSDA and large FDE data - mips64el-openbsd -FAIL: Compact EH EB #1 with personality ID and FDE data - mips64el-openbsd -FAIL: Compact EH EB #2 with personality routine and FDE data - mips64el-openbsd -FAIL: Compact EH EB #3 with personality id and large FDE data - mips64el-openbsd -FAIL: Compact EH EB #4 with personality id, FDE data and LSDA - mips64el-openbsd -FAIL: Compact EH EB #5 with personality routine, FDE data and LSDA - mips64el-openbsd -FAIL: Compact EH EB #6 with personality id, LSDA and large FDE data - mips64el-openbsd -FAIL: Compact EH EL #1 with personality ID and FDE data - mips64el-openbsd -FAIL: Compact EH EL #2 with personality routine and FDE data - mips64el-openbsd -FAIL: Compact EH EL #3 with personality id and large FDE data - mips64el-openbsd -FAIL: Compact EH EL #4 with personality id, FDE data and LSDA - mips64el-openbsd -FAIL: Compact EH EL #5 with personality routine, FDE data and LSDA - mips64el-openbsd -FAIL: Compact EH EL #6 with personality id, LSDA and large FDE data - - Co-Authored-By: Maciej W. Rozycki - - gas/ - * testsuite/gas/mips/compact-eh-eb-1.d: Accept `.MIPS.options' - section as an alternative to `.reginfo' and ignore contents of - either. - * testsuite/gas/mips/compact-eh-eb-2.d: Likewise. - * testsuite/gas/mips/compact-eh-eb-3.d: Likewise. - * testsuite/gas/mips/compact-eh-eb-4.d: Likewise. - * testsuite/gas/mips/compact-eh-eb-5.d: Likewise. - * testsuite/gas/mips/compact-eh-eb-6.d: Likewise. - * testsuite/gas/mips/compact-eh-el-1.d: Likewise. - * testsuite/gas/mips/compact-eh-el-2.d: Likewise. - * testsuite/gas/mips/compact-eh-el-3.d: Likewise. - * testsuite/gas/mips/compact-eh-el-4.d: Likewise. - * testsuite/gas/mips/compact-eh-el-5.d: Likewise. - * testsuite/gas/mips/compact-eh-el-6.d: Likewise. - - (cherry picked from commit 316be2b229f5bd07ebef48fd1d7b8cb103e4d815) - -2023-07-28 YunQiang Su - - testsuite: Handle composed R_MIPS_NONE relocations - MIPS n64 ABI has a peculiarity where all relocations are composed of - three, with subsequent relocation types set to R_MIPS_NONE if further - calculation is not required. Example output produced by `readelf' and - `objdump' for such relocations is: - - Offset Info Type Sym. Value Sym. Name + Addend - 000000000000 000800000002 R_MIPS_32 0000000000000000 foo + 0 - Type2: R_MIPS_NONE - Type3: R_MIPS_NONE - - and: - - OFFSET TYPE VALUE - 0000000000000000 R_MIPS_32 foo - 0000000000000000 R_MIPS_NONE *ABS* - 0000000000000000 R_MIPS_NONE *ABS* - - respectively. The presence of these extra R_MIPS_NONE entries is not - relevant for generic or even some MIPS tests, so optionally match them - with the respective dump patterns, also discarding `xfail' annotation - for MIPS/OpenBSD targets from gas/elf/missing-build-notes.d, removing - these regressions: - - mips64-openbsd -FAIL: readelf -r bintest - mips64-openbsd -FAIL: forward expression - mips64-openbsd -FAIL: assignment tests - mips64-openbsd -FAIL: gas/all/none - mips64-openbsd -XFAIL: gas/elf/missing-build-notes - mips64-openbsd -FAIL: macro test 2 - mips64-openbsd -FAIL: macro irp - mips64-openbsd -FAIL: macro rept - mips64-openbsd -FAIL: nested irp/irpc/rept - mips64-openbsd -FAIL: macro vararg - mips64-openbsd -FAIL: mips jalx - mips64-openbsd -FAIL: ST Microelectronics Loongson-2F workarounds of Jump Instruction issue - mips64el-openbsd -FAIL: readelf -r bintest - mips64el-openbsd -FAIL: forward expression - mips64el-openbsd -FAIL: assignment tests - mips64el-openbsd -FAIL: gas/all/none - mips64el-openbsd -XFAIL: gas/elf/missing-build-notes - mips64el-openbsd -FAIL: macro test 2 - mips64el-openbsd -FAIL: macro irp - mips64el-openbsd -FAIL: macro rept - mips64el-openbsd -FAIL: nested irp/irpc/rept - mips64el-openbsd -FAIL: macro vararg - mips64el-openbsd -FAIL: mips jalx - mips64el-openbsd -FAIL: ST Microelectronics Loongson-2F workarounds of Jump Instruction issue - - Co-Authored-By: Maciej W. Rozycki - - binutils/ - * testsuite/binutils-all/readelf.r-64: Optionally match extra - R_MIPS_NONE pairs. - - gas/ - * testsuite/gas/all/assign.d: Optionally match extra - R_MIPS_NONE pairs. - * testsuite/gas/all/fwdexp.d: Likewise. - * testsuite/gas/all/none.d: Likewise. - * testsuite/gas/macros/irp.d: Likewise. - * testsuite/gas/macros/repeat.d: Likewise. - * testsuite/gas/macros/rept.d: Likewise. - * testsuite/gas/macros/test2.d: Likewise. - * testsuite/gas/macros/vararg.d: Likewise. - * testsuite/gas/mips/compact-eh-eb-1.d: Likewise. - * testsuite/gas/mips/compact-eh-eb-2.d: Likewise. - * testsuite/gas/mips/compact-eh-eb-3.d: Likewise. - * testsuite/gas/mips/compact-eh-eb-4.d: Likewise. - * testsuite/gas/mips/compact-eh-eb-5.d: Likewise. - * testsuite/gas/mips/compact-eh-eb-6.d: Likewise. - * testsuite/gas/mips/compact-eh-el-1.d: Likewise. - * testsuite/gas/mips/compact-eh-el-2.d: Likewise. - * testsuite/gas/mips/compact-eh-el-3.d: Likewise. - * testsuite/gas/mips/compact-eh-el-4.d: Likewise. - * testsuite/gas/mips/compact-eh-el-5.d: Likewise. - * testsuite/gas/mips/compact-eh-el-6.d: Likewise. - * testsuite/gas/mips/loongson-2f-3.d: Likewise. - * testsuite/gas/mips/mips-jalx.d: Likewise. - * testsuite/gas/elf/missing-build-notes.d: Likewise. Remove - the `xfail' tag. - - ld/ - * testsuite/ld-mips-elf/reloc-estimate-1.d: Optionally match - extra R_MIPS_NONE pairs. - - (cherry picked from commit ed4dca900c0dbc1317917cb289255d2f8d03f732) - -2023-07-28 YunQiang Su - - MIPS/testsuite: Handle 64-bit addresses - Several MIPS test cases are suitable for the n64 ABI if not for the - extra leading zeros or spaces in addresses not handled by dump patterns. - Match the characters then, removing these regressions: - - mips64-openbsd -FAIL: .set arch=FOO - mips64-openbsd -FAIL: ST Microelectronics Loongson-2F workarounds of nop issue - mips64-openbsd -FAIL: MIPS DSP ASE for MIPS64 - mips64-openbsd -FAIL: gas/mips/align2 - mips64-openbsd -FAIL: gas/mips/align2-el - mips64-openbsd -FAIL: Locally-resolvable PC-relative code references - mips64-openbsd -FAIL: MIPS jalx-1 - mips64-openbsd -FAIL: JAL overflow 2 - mips64el-openbsd -FAIL: .set arch=FOO - mips64el-openbsd -FAIL: ST Microelectronics Loongson-2F workarounds of nop issue - mips64el-openbsd -FAIL: MIPS DSP ASE for MIPS64 - mips64el-openbsd -FAIL: gas/mips/align2 - mips64el-openbsd -FAIL: gas/mips/align2-el - mips64el-openbsd -FAIL: Locally-resolvable PC-relative code references - mips64el-openbsd -FAIL: MIPS jalx-1 - mips64el-openbsd -FAIL: JAL overflow 2 - - Co-Authored-By: Maciej W. Rozycki - - gas/ - * testsuite/gas/mips/align2-el.d: Match extra leading zeros - with addresses. - * testsuite/gas/mips/align2.d: Likewise. - * testsuite/gas/mips/compact-eh-eb-1.d: Likewise. - * testsuite/gas/mips/compact-eh-eb-2.d: Likewise. - * testsuite/gas/mips/compact-eh-eb-3.d: Likewise. - * testsuite/gas/mips/compact-eh-eb-4.d: Likewise. - * testsuite/gas/mips/compact-eh-eb-5.d: Likewise. - * testsuite/gas/mips/compact-eh-eb-6.d: Likewise. - * testsuite/gas/mips/compact-eh-el-1.d: Likewise. - * testsuite/gas/mips/compact-eh-el-2.d: Likewise. - * testsuite/gas/mips/compact-eh-el-3.d: Likewise. - * testsuite/gas/mips/compact-eh-el-4.d: Likewise. - * testsuite/gas/mips/compact-eh-el-5.d: Likewise. - * testsuite/gas/mips/compact-eh-el-6.d: Likewise. - * testsuite/gas/mips/loongson-2f-2.d: Likewise. - * testsuite/gas/mips/loongson-2f-3.d: Likewise. - * testsuite/gas/mips/mips-jalx.d: Likewise. - * testsuite/gas/mips/mips64-dsp.d: Likewise. - * testsuite/gas/mips/pcrel-1.d: Likewise. - * testsuite/gas/mips/set-arch.d: Likewise. - - ld/ - * testsuite/ld-mips-elf/jaloverflow-2.d: Match extra leading - zeros and spaces with addresses as appropriate. - * testsuite/ld-mips-elf/jalx-1.d: Likewise. - * testsuite/ld-mips-elf/reloc-estimate-1.d: Likewise. - - (cherry picked from commit ec76a6172f7b6d61f7d76c2bcf766122132116b8) - -2023-07-28 YunQiang Su - - testsuite: Also discard the `.MIPS.options' section - Also discard the `.MIPS.options' section, used with n64 MIPS binaries, - along with similar other MIPS sections (`.reginfo', `.MIPS.abiflags') - not relevant for the test cases concerned, fixing these regressions: - - mips64-openbsd -FAIL: ld-elf/group3a - mips64-openbsd -FAIL: ld-elf/group3b - mips64-openbsd -FAIL: Place orphan sections (map file check) - mips64-openbsd -FAIL: ld-elf/orphan-region - mips64-openbsd -FAIL: ld-elf/orphan - mips64-openbsd -FAIL: overlay size (map file check) - mips64-openbsd -FAIL: overlay size - mips64el-openbsd -FAIL: ld-elf/group3a - mips64el-openbsd -FAIL: ld-elf/group3b - mips64el-openbsd -FAIL: Place orphan sections (map file check) - mips64el-openbsd -FAIL: ld-elf/orphan-region - mips64el-openbsd -FAIL: ld-elf/orphan - mips64el-openbsd -FAIL: overlay size (map file check) - mips64el-openbsd -FAIL: overlay size - - Co-Authored-By: Maciej W. Rozycki - - binutils/ - * testsuite/binutils-all/strip-3.d: Add `-R .MIPS.options' to - the `strip' tag. - - ld/ - * testsuite/ld-elf/group.ld: Also discard `.MIPS.options'. - * testsuite/ld-elf/orphan-region.ld: Likewise. - * testsuite/ld-elf/orphan.ld: Likewise. - * testsuite/ld-mips-elf/got-page-1.ld: Likewise. - * testsuite/ld-scripts/overlay-size.t: Likewise. - - (cherry picked from commit 60ec8306db150e687fc05870949056bae6c8d635) - -2023-07-28 Maciej W. Rozycki - - MIPS/LD/testsuite: Fix MIPS16 interlinking test IRIX 6 regressions - IRIX 6 does not have MIPS16 stub section support in its n32 linker - scripts, causing such input sections to be propagated to the respective - output sections rather than `.text', causing dump pattern mismatches. - - Expect IRIX 6 to fail with n32 testing then, removing this regression: - - mips-sgi-irix6 -FAIL: MIPS16 interlinking for local functions 1 (n32) - - We may choose to update IRIX 6 n32 linker scripts sometime, as it seems - a harmless change. - - ld/ - * testsuite/ld-mips-elf/mips-elf.exp: Expect IRIX 6 to fail with - n32 `mips16-local-stubs-1' testing. - - (cherry picked from commit ec3205bbc6f2018c9907bfd6e6c6ae51a2e01432) - -2023-07-28 YunQiang Su - - MIPS/LD/testsuite: Fix MIPS16 interlinking test n64 regressions - The MIPS16 interlinking test for local functions expects to be assembled - with 32-bit addressing, otherwise causing assembly warnings: - - .../ld/testsuite/ld-mips-elf/mips16-local-stubs-1.s: Assembler messages: - .../ld/testsuite/ld-mips-elf/mips16-local-stubs-1.s:16: Warning: la used to load 64-bit address; recommend using dla instead - - Use the per-ABI framework then to run the test explicitly for o32 and - n32 ABIs only, replacing the `-mips4' option from the `as' tag with - `.module mips4' pseudo-op within the source itself so as to avoid - assembly errors: - - Assembler messages: - Error: -mips4 conflicts with the other architecture options, which imply -mips3 - - with n32 testing for some targets, and ultimately removing these - regressions: - - mips64-openbsd -FAIL: MIPS16 interlinking for local functions 1 - mips64el-openbsd -FAIL: MIPS16 interlinking for local functions 1 - - Co-Authored-By: Maciej W. Rozycki - - ld/ - * testsuite/ld-mips-elf/mips16-local-stubs-1.d: Remove `-mips4' - from the `as' tag. - * testsuite/ld-mips-elf/mips16-local-stubs-1.s: Add `.module - mips4'. - * testsuite/ld-mips-elf/mips-elf.exp: Run `mips16-local-stubs-1' - for o32 and n32 ABIs only. - - (cherry picked from commit 3c8ed624caf3317b2155a8c00a7af6a8bb6a3c10) - -2023-07-28 YunQiang Su - - MIPS/GAS/testsuite: Force o32 for tests expecting 32-bit addressing - A few GAS tests expect to be assembled with 32-bit addressing, otherwise - causing an assembly warning: - - .../gas/testsuite/gas/mips/fix-rm7000-2.s:11: Warning: la used to load 64-bit address; recommend using dla instead - - or pattern dump mismatches against 32-bit address calculations, however - these tests do not enforce their expectation in any. For none of them - the specific ABI used is of any relevance however, so select the o32 ABI - unconditionally, removing these failures with OpenBSD targets: - - mips64-openbsd -FAIL: MIPS RM7000 workarounds test 2 (micromips) - mips64-openbsd -FAIL: MIPS RM7000 workarounds test 2 (mips3) - mips64-openbsd -FAIL: MIPS RM7000 workarounds test 2 (mips4) - mips64-openbsd -FAIL: MIPS RM7000 workarounds test 2 (mips5) - mips64-openbsd -FAIL: MIPS RM7000 workarounds test 2 (mips64) - mips64-openbsd -FAIL: MIPS RM7000 workarounds test 2 (mips64r2) - mips64-openbsd -FAIL: MIPS RM7000 workarounds test 2 (mips64r3) - mips64-openbsd -FAIL: MIPS RM7000 workarounds test 2 (mips64r5) - mips64-openbsd -FAIL: MIPS RM7000 workarounds test 2 (octeon) - mips64-openbsd -FAIL: MIPS RM7000 workarounds test 2 (octeon2) - mips64-openbsd -FAIL: MIPS RM7000 workarounds test 2 (octeon3) - mips64-openbsd -FAIL: MIPS RM7000 workarounds test 2 (octeonp) - mips64-openbsd -FAIL: MIPS RM7000 workarounds test 2 (r4000) - mips64-openbsd -FAIL: MIPS RM7000 workarounds test 2 (sb1) - mips64-openbsd -FAIL: MIPS RM7000 workarounds test 2 (vr5400) - mips64-openbsd -FAIL: MIPS RM7000 workarounds test 2 (xlr) - mips64-openbsd -FAIL: MIPS-OCTEON octeon_saa_saad (octeon2) - mips64-openbsd -FAIL: MIPS-OCTEON octeon_saa_saad (octeon3) - mips64-openbsd -FAIL: MIPS-OCTEON octeon_saa_saad (octeonp) - mips64-openbsd -FAIL: Full MIPS R5900 - mips64-openbsd -FAIL: MIPS R5900 VU0 - mips64-openbsd -FAIL: Paired LL/SC for mips64r6 (mips64r6) - mips64el-openbsd -FAIL: MIPS RM7000 workarounds test 2 (micromips) - mips64el-openbsd -FAIL: MIPS RM7000 workarounds test 2 (mips3) - mips64el-openbsd -FAIL: MIPS RM7000 workarounds test 2 (mips4) - mips64el-openbsd -FAIL: MIPS RM7000 workarounds test 2 (mips5) - mips64el-openbsd -FAIL: MIPS RM7000 workarounds test 2 (mips64) - mips64el-openbsd -FAIL: MIPS RM7000 workarounds test 2 (mips64r2) - mips64el-openbsd -FAIL: MIPS RM7000 workarounds test 2 (mips64r3) - mips64el-openbsd -FAIL: MIPS RM7000 workarounds test 2 (mips64r5) - mips64el-openbsd -FAIL: MIPS RM7000 workarounds test 2 (octeon) - mips64el-openbsd -FAIL: MIPS RM7000 workarounds test 2 (octeon2) - mips64el-openbsd -FAIL: MIPS RM7000 workarounds test 2 (octeon3) - mips64el-openbsd -FAIL: MIPS RM7000 workarounds test 2 (octeonp) - mips64el-openbsd -FAIL: MIPS RM7000 workarounds test 2 (r4000) - mips64el-openbsd -FAIL: MIPS RM7000 workarounds test 2 (sb1) - mips64el-openbsd -FAIL: MIPS RM7000 workarounds test 2 (vr5400) - mips64el-openbsd -FAIL: MIPS RM7000 workarounds test 2 (xlr) - mips64el-openbsd -FAIL: MIPS-OCTEON octeon_saa_saad (octeon2) - mips64el-openbsd -FAIL: MIPS-OCTEON octeon_saa_saad (octeon3) - mips64el-openbsd -FAIL: MIPS-OCTEON octeon_saa_saad (octeonp) - mips64el-openbsd -FAIL: Full MIPS R5900 - mips64el-openbsd -FAIL: MIPS R5900 VU0 - mips64el-openbsd -FAIL: Paired LL/SC for mips64r6 (mips64r6) - - Co-Authored-By: Maciej W. Rozycki - - gas/ - * testsuite/gas/mips/fix-rm7000-2.d: Add `-32' to the `as' tag. - * testsuite/gas/mips/micromips@fix-rm7000-2.d: Likewise. - * testsuite/gas/mips/r5900-full.d: Likewise. - * testsuite/gas/mips/r5900-vu0.d: Likewise. - * testsuite/gas/mips/llpscp-64.d: Add `as' tag with `-32'. - * testsuite/gas/mips/octeon-saa-saad.d: Likewise. - - (cherry picked from commit ce0077a2e724146285c282037a41c68de6c0608d) - -2023-07-28 Maciej W. Rozycki - - MIPS/LD/testsuite: Run `got-dump-1' for o32/n32 ABIs - The `got-dump-1' test case uses 32-bit addressing, so it makes no sense - to run it with the n64 ABI. And there is a corresponding `got-dump-2' - test already for the n64 ABI. - - Use the per-ABI framework then to run the `got-dump-1' test explicitly - for o32 and n32 ABIs only. - - ld/ - * testsuite/ld-mips-elf/mips-elf.exp: Run `got-dump-1' for o32 - and n32 ABIs only. - - (cherry picked from commit 70116eb5e6c74f9b526b1fec4e39f11238cb6a34) - -2023-07-28 Maciej W. Rozycki - - MIPS/LD/testsuite: Fix `attr-gnu-4-10' failures with OpenBSD targets - OpenBSD targets produce ELF64 files while the pattern dump expects ELF32 - output and specific header sizes. Disable it for `mips64*-*-openbsd*' - for these targets then, removing these failures: - - mips64-openbsd -FAIL: ld-mips-elf/attr-gnu-4-10 - mips64el-openbsd -FAIL: ld-mips-elf/attr-gnu-4-10 - - ld/ - * testsuite/ld-mips-elf/attr-gnu-4-10.d: Add `notarget' tag with - `mips64*-*-openbsd*'. - - (cherry picked from commit b50c220d179d239eacd7d7e120f7466e2ea47170) - -2023-07-28 Maciej W. Rozycki - - MIPS/LD/testsuite: Fix `attr-gnu-4-10' failures with IRIX targets - IRIX targets do not enable the production of a `.pdr' section in GAS by - default, which causes a failure with the `attr-gnu-4-10' test case due - to a difference resulting in the number and indices of sections produced - in linker output. - - As the presence or absence of this section is not relevant to this test - case, just enable it unconditionally, fixing these regressions: - - mips-sgi-irix5 -FAIL: ld-mips-elf/attr-gnu-4-10 - mips-sgi-irix6 -FAIL: ld-mips-elf/attr-gnu-4-10 - - ld/ - * testsuite/ld-mips-elf/attr-gnu-4-10.d: Add `as' tag with - `-mpdr'. - - (cherry picked from commit d4e5281f03764a985b1229e9417a4fd1bebcea17) - -2023-07-28 Maciej W. Rozycki - - MIPS/LD/testsuite: Fix JALR relaxation test failure with IRIX 6 - The `mips-sgi-irix6' target only supports IRIX linker emulations, but - most JALR relaxation tests request the relevant traditional emulation - instead, causing a link failure: - - ./ld-new: unrecognised emulation mode: elf32btsmipn32 - Supported emulations: elf32bmipn32 elf32bsmip elf64bmip - - This is clearly an omission from the conversion to use the per-ABI - framework made with commit 78da84f99405 ("MIPS/LD/testsuite: Correct - mips-elf.exp test ABI/emul/endian arrangement"). These tests are also - endianness agnostic, which was missed in the conversion as well. - - Remove the unnecessary explicit ABI and endianness options then and rely - on the per-ABI framework to get things right, removing this regression: - - mips-sgi-irix6 -FAIL: MIPS relax-jalr-shared n32 - - ld/ - * testsuite/ld-mips-elf/relax-jalr-n32-shared.d: Remove flags - related to ABI and endianness selection from the `as' and `ld' - tags. - * testsuite/ld-mips-elf/relax-jalr-n64.d: Likewise. - * testsuite/ld-mips-elf/relax-jalr-n64-shared.d: Likewise. - * testsuite/ld-mips-elf/mips-elf.exp: Remove `as' and `ld' tag - additions from the invocation of JALR relaxation tests. - - (cherry picked from commit 94052ee4ccf0ac64b5f55da59878f13d567ef3cf) - -2023-07-28 Maciej W. Rozycki - - MIPS/LD/testsuite: Fix unaligned JALX failures with OpenBSD targets - There are only n64 linker emulations included with `mips64*-*-openbsd*' - targets, however the unaligned JALX tests insist on running across all - targets and force the n32 ABI, causing link errors with the targets - concerned, e.g.: - - ./ld-new: tmpdir/unaligned-jalx-0.o: ABI is incompatible with that of the selected emulation - ./ld-new: failed to merge target specific data of file tmpdir/unaligned-jalx-0.o - ./ld-new: tmpdir/unaligned-insn.o: ABI is incompatible with that of the selected emulation - ./ld-new: failed to merge target specific data of file tmpdir/unaligned-insn.o - - Convert the tests then to use the per-ABI framework and run them for the - o32 and n32 ABIs, removing these regressions: - - mips64-openbsd -FAIL: MIPS JALX to unaligned symbol 0 - mips64-openbsd -FAIL: MIPS JALX to unaligned symbol 1 - mips64-openbsd -FAIL: MIPS JALX to unaligned symbol 2 - mips64-openbsd -FAIL: MIPS JALX to unaligned symbol 3 - mips64-openbsd -FAIL: MIPS16 JALX to unaligned symbol 0 - mips64-openbsd -FAIL: MIPS16 JALX to unaligned symbol 1 - mips64-openbsd -FAIL: microMIPS JALX to unaligned symbol 0 - mips64-openbsd -FAIL: microMIPS JALX to unaligned symbol 1 - mips64el-openbsd -FAIL: MIPS JALX to unaligned symbol 0 - mips64el-openbsd -FAIL: MIPS JALX to unaligned symbol 1 - mips64el-openbsd -FAIL: MIPS JALX to unaligned symbol 2 - mips64el-openbsd -FAIL: MIPS JALX to unaligned symbol 3 - mips64el-openbsd -FAIL: MIPS16 JALX to unaligned symbol 0 - mips64el-openbsd -FAIL: MIPS16 JALX to unaligned symbol 1 - mips64el-openbsd -FAIL: microMIPS JALX to unaligned symbol 0 - mips64el-openbsd -FAIL: microMIPS JALX to unaligned symbol 1 - - Similar tests for the n64 ABI can be added separately, using suitable - dump patterns. - - ld/ - * testsuite/ld-mips-elf/unaligned-jalx-0.d: Remove `-32' from - the `as' tag. - * testsuite/ld-mips-elf/unaligned-jalx-1.d: Likewise. - * testsuite/ld-mips-elf/unaligned-jalx-2.d: Likewise. - * testsuite/ld-mips-elf/unaligned-jalx-3.d: Likewise. - * testsuite/ld-mips-elf/unaligned-jalx-mips16-0.d: Likewise. - * testsuite/ld-mips-elf/unaligned-jalx-mips16-1.d: Likewise. - * testsuite/ld-mips-elf/unaligned-jalx-micromips-0.d: Likewise. - * testsuite/ld-mips-elf/unaligned-jalx-micromips-1.d: Likewise. - * testsuite/ld-mips-elf/mips-elf.exp: Run unaligned JALX tests - with `run_dump_test_o32' and `run_dump_test_n32' rather than - `run_dump_test'. - - (cherry picked from commit 67e789ae32fadc540c10839f08ad53ff01e2d732) - -2023-07-28 Maciej W. Rozycki - - MIPS/GAS/testsuite: Disable compact EH #7 tests with OpenBSD targets - Compact EH #7 tests use output templates that are not suitable for the - n64 ABI, which `mips64*-*-openbsd*' targets use by default, because the - contents of the sections examined are expected to be differnt. Disable - the tests then, removing these regressions: - - mips64-openbsd -FAIL: Compact EH EB #7 with personality id and fallback FDE - mips64-openbsd -FAIL: Compact EH EL #7 with personality id and fallback FDE - mips64el-openbsd -FAIL: Compact EH EB #7 with personality id and fallback FDE - mips64el-openbsd -FAIL: Compact EH EL #7 with personality id and fallback FDE - - Suitable corresponding tests for the n64 ABI can be added separately. - - gas/ - * testsuite/gas/mips/compact-eh-eb-7.d: Exclude for - `mips64*-*-openbsd*'. - * testsuite/gas/mips/compact-eh-el-7.d: Likewise. - - (cherry picked from commit 2b4a60ab59f14a8fc1039c0cea41d22674447c1e) - -2023-07-28 YunQiang Su - - MIPS/LD: Include n64 `.interp' with INITIAL_READONLY_SECTIONS - In ld/emulparams/elf64bmip-defs.sh there is no explicit handling of the - `.interp' section, which causes it to be positioned in output at an odd - place. - - Let's include it with INITIAL_READONLY_SECTIONS, just like o32/n32 do, - fixing a regression from commit 5a8e7be242f3 ("INITIAL_READONLY_SECTIONS - in elf.sc"), where the handling of n64 was missed due to an unfortunate - sequence of events where ld/emulparams/elf64bmip-defs.sh was only added - with commit 94bb04b3c611 ("Use .reginfo rather than .MIPS.options in n32 - linker scripts") the day before. - - Add test cases covering section ordering across the three ABIs. This - change also fixes ld/pr23658-2: - - FAIL: Build pr23658-2 - - Co-Authored-By: Maciej W. Rozycki - - ld/ChangeLog: - * emulparams/elf64bmip-defs.sh: Include `.interp' with - INITIAL_READONLY_SECTIONS. - * testsuite/ld-mips-elf/pie-n64.d: Adjust addresses. - * testsuite/ld-mips-elf/sections-1-o32.rd: New test. - * testsuite/ld-mips-elf/sections-1-o32t.rd: New test. - * testsuite/ld-mips-elf/sections-1-n32.rd: New test. - * testsuite/ld-mips-elf/sections-1-n32t.rd: New test. - * testsuite/ld-mips-elf/sections-1-n32p.rd: New test. - * testsuite/ld-mips-elf/sections-1-n64.rd: New test. - * testsuite/ld-mips-elf/sections-1-n64t.rd: New test. - * testsuite/ld-mips-elf/sections-2-o32.rd: New test. - * testsuite/ld-mips-elf/sections-2-o32t.rd: New test. - * testsuite/ld-mips-elf/sections-2-n32.rd: New test. - * testsuite/ld-mips-elf/sections-2-n32t.rd: New test. - * testsuite/ld-mips-elf/sections-2-n32p.rd: New test. - * testsuite/ld-mips-elf/sections-2-n64.rd: New test. - * testsuite/ld-mips-elf/sections-2-n64t.rd: New test. - * testsuite/ld-mips-elf/sections.s: New test source. - * testsuite/ld-mips-elf/mips-elf.exp: Run the new tests. - - (cherry picked from commit f625926792da741ab196ef71c16e481331965b6f) - -2023-07-28 Maciej W. Rozycki - - Revert "MIPS: support mips*64 as CPU and gnuabi64 as ABI" - This reverts commit 32f1c80375ebe8ad25d9805ee5889f0006c51e59. It had - two unrelated changes lumped together, one of which changed the meaning - of the `mipsisa64*-*-linux*' target triplets, which was not properly - evaluated. - - (cherry picked from commit cc66ad2d2a63cec2eaafd7bbc6a9204490816c0b) - -2023-07-28 GDB Administrator - - Automatic date update in version.in - -2023-07-27 GDB Administrator - - Automatic date update in version.in - -2023-07-26 GDB Administrator - - Automatic date update in version.in - -2023-07-25 GDB Administrator - - Automatic date update in version.in - -2023-07-24 mengqinggang - - LoongArch: Fix immediate overflow check bug - * elfnn-loongarch.c (RELOCATE_CALC_PC32_HI20): Redefined. - (RELOCATE_CALC_PC64_HI32): Redefined. - * elfxx-loongarch.c (reloc_bits_pcrel20_s2): Delete. - (reloc_bits_b16): Delete. - (reloc_bits_b21): Delete. - (reloc_bits_b26): Delete. - (reloc_sign_bits): New. - -2023-07-24 Nick Clifton - - Updated Serbian translations for bfd, gold and opcodes - -2023-07-24 GDB Administrator - - Automatic date update in version.in - -2023-07-23 GDB Administrator - - Automatic date update in version.in - -2023-07-22 GDB Administrator - - Automatic date update in version.in - -2023-07-21 Alan Modra - - MIPS: Don't move __gnu_lto_slim to .scommon - * elfxx-mips.c (_bfd_mips_elf_symbol_processing): Don't treat - __gnu_lto_slim as SHN_MIPS_SCOMMON. - (_bfd_mips_elf_add_symbol_hook): Likewise. - -2023-07-21 GDB Administrator - - Automatic date update in version.in - -2023-07-20 GDB Administrator - - Automatic date update in version.in - -2023-07-19 Nick Clifton - - merged - - Updated Romanian translation for the opcodes directory - - Updated Romainian translation for the opcodes directory - -2023-07-19 Alan Modra - - [GOLD, PowerPC64] Debug info relocation overflow - It is possible to build huge binaries on powerpc64, where 32-bit - addresses in debug info are insufficient to descibe locations in the - binary. Help out the user, and only warn about debug overflows. - - * powerpc.cc (Target_powerpc::Relocate::relocate): Warn on - relocation overflows in debug info. - - (cherry picked from commit 03c02b696e90714a0ae2c0200d3c65cfffcaa1ee) - -2023-07-19 Alan Modra - - PR10957, Missing option to really print section+offset - Many of the reloc error messages have already been converted from - using %C to using %H in ld.bfd, to print section+offset as well as - file/line/function. This catches a few remaining, and changes gold to - do the same. - - PR 10957 - bfd/ - * elf32-sh.c (sh_elf_relocate_section): Use %H in error messages. - gold/ - * object.cc (Relocate_info::location): Always report section+offset. - * testsuite/debug_msg.sh: Adjust to suit. - * testsuite/x32_overflow_pc32.sh: Likewise. - * testsuite/x86_64_overflow_pc32.sh: Likewise. - ld/ - * emultempl/pe.em (read_addend): Use %H in error message. - * emultempl/pep.em (read_addend): Likewise. - * ldcref.c (check_reloc_refs): Likewise. - * ldmain.c (warning_find_reloc, undefined_symbol): Likewise. - * pe-dll.c (pe_create_import_fixup): Likewise. - * testsuite/ld-cris/undef2.d: Adjust expected output to suit. - * testsuite/ld-cris/undef3.d: Likewise. - * testsuite/ld-elf/shared.exp: Likewise. - * testsuite/ld-i386/compressed1.d: Likewise. - * testsuite/ld-ia64/line.exp: Likewise. - * testsuite/ld-plugin/lto.exp: Likewise. - * testsuite/ld-undefined/undefined.exp: Likewise. - * testsuite/ld-x86-64/compressed1.d: Likewise. - * testsuite/ld-x86-64/line.exp: Likewise. - * testsuite/ld-x86-64/pr27587.err: Likewise. - - (cherry picked from commit 02d2a36902c7b0fefe05e8d9bdbf11e846ac71fe) - -2023-07-19 Alan Modra - - Fix loongarch build with gcc-4.5 - * loongarch-opc.c (loongarch_alias_opcodes): Don't trigger - gcc-4.5 bug in handling of struct initialisation. - - (cherry picked from commit 4993e5cc1e2e1e192f56f5788453c1b6f9cca894) - -2023-07-19 Alan Modra - - elf_object_p load of dynamic symbols - This fixes an uninitialised memory access on a fuzzed file: - 0 0xf22e9b in offset_from_vma /src/binutils-gdb/bfd/elf.c:1899:2 - 1 0xf1e90f in _bfd_elf_get_dynamic_symbols /src/binutils-gdb/bfd/elf.c:2099:13 - 2 0x10e6a54 in bfd_elf32_object_p /src/binutils-gdb/bfd/elfcode.h:851:9 - - Hopefully it will also stop any attempt to load dynamic symbols from - eu-strip debug files. - - * elfcode.h (elf_object_p): Do not attempt to load dynamic - symbols for a file with no section headers until all the - program headers are swapped in. Do not fail on eu-strip debug - files. - - (cherry picked from commit 22e90ac5af46c01ee4972cf04e835266862bbb35) - -2023-07-19 GDB Administrator - - Automatic date update in version.in - -2023-07-18 Vladimir Mezentsev - - gprofng: 30602 [2.41] gprofng test hangs on i686-linux-gnu - There were several problems in the gprofng testing: - - we did not catch a timeout for each test. - - we used exit() to stop a failed test. But this stops all other tests. - - we used a time_t (long) type in smalltest.c instead of a long long type. - - PR gprofng/30602 - * configure.ac: Launch only native testing. - * configure: Rebuild. - * testsuite/config/default.exp: Set TEST_TIMEOUT. - * testsuite/gprofng.display/setpath_map.exp: Use return instead of exit. - * testsuite/gprofng.display/gp-archive.exp: Likewise. - * testsuite/gprofng.display/gp-collect-app_F.exp: Likewise. - * testsuite/gprofng.display/display.exp: Delete an unnecessary test - for native testing. - * testsuite/lib/display-lib.exp (run_native_host_cmd): Add timeout. - * testsuite/lib/smalltest.c: Use a long long type instead of time_t. - -2023-07-18 Nick Clifton - - Updated Swedish translation for the binutils subdirectory - -2023-07-18 Pter Chubb - - PR 30632 - ld segfaults if linker script includes a STARTUP line. - -2023-07-18 GDB Administrator - - Automatic date update in version.in - -2023-07-17 Mark Harmstone - - ld/PDB: fix off-by-1 in add_globals_ref() - -2023-07-17 GDB Administrator - - Automatic date update in version.in - -2023-07-16 GDB Administrator - - Automatic date update in version.in - -2023-07-15 GDB Administrator - - Automatic date update in version.in - -2023-07-14 GDB Administrator - - Automatic date update in version.in - -2023-07-13 GDB Administrator - - Automatic date update in version.in - -2023-07-12 Alan Modra - - Re: Keeping track of rs6000-coff archive element pointers - bfd/ - * coff-rs6000.c (add_range): Revise comment, noting possible fail. - (_bfd_xcoff_openr_next_archived_file): Start with clean ranges. - binutils/ - * bfdtest1.c: Enhance to catch errors on second scan. - - (cherry picked from commit 1052fb3ecb1ae46bcf22634c48739c12e585196a) - -2023-07-12 Alan Modra - - Use run_host_cmd to run $CC and other no-section-header test fixes - We should be using run_host_cmd everywhere we invoke a compiler in the - ld testsuite, if we want to use ld/ld-new just built. run_host_cmd - properly inserts $gcc_B_opt in cases where a user wants to test - binutils with a newly built compiler, ie. when $CC specifies -B itself. - - Also, it is not good practice to exclude tests when non-native except - of course those tests that run a target binary. Compiling and linking - often shows up problems. - - * testsuite/ld-elf/no-section-header.exp (binutils_run_test): - Use run_host_cmd to invoke $CC_FOR_TARGET. Run all tests - non-native too, except for attempting to run the binaries. - Run tests for ELF in general, not just linux. - * testsuite/ld-elf/pr25617-1-no-sec-hdr.rd: Allow localentry - symbol decoration, and support either sorting of symbols. - * testsuite/ld-elf/pr25617-1a-no-sec-hdr.rd: Likewise. - * testsuite/ld-elf/pr25617-1a-sec-hdr.rd: Likewise. - * testsuite/ld-elf/pr25617-1a-no-sec-hdr.nd: Accept D function syms. - * testsuite/ld-elf/start-shared-noheader-sysv.rd: Accept - mips-sgi-irix symbol output. - * testsuite/ld-elf/start-shared-noheader.nd: Likewise. - - (cherry picked from commit 46f51ac38b81df4bf890e13824427c69285fdcaa) - -2023-07-12 YunQiang Su - - ld: Use run_host_cmd_yesno in indirect.exp instead of catch exec - Catch "exec $CC_FOR_TARGET" won't use the gas/ld that we just build, - and in fact run_host_cmd_yesno is a better choice for it. - - ld/ChangeLog: - - * testsuite/ld-elf/indirect.exp: use run_host_cmd_yesno - instead of handwrite catch exec $CC_FOR_TARGET. - - (cherry picked from commit 0f5cb49f68ae1be4b9702e71c3a9b80ee46b310a) - -2023-07-12 YunQiang Su - - ld: Use [list ] syntax to define run_tests in indirect.exp - Currently, the var run_tests is defined by syntax {{}}, - while in this case, variables cannot be used. - Thus $NOPIE_CFLAGS and $NOPIE_LDFLAGS are passed to cmd as names - instead of values: - gcc ... $NOPIE_CFLAGS -c .../indirect5a.c -o tmpdir/indirect5a.o - - Let's use [list [list ]] syntax instead. - - ld/ChangeLog: - - * testsuite/ld-elf/indirect.exp(run_tests): use [list [list]] - syntax instead of {{}}. - - (cherry picked from commit 96a73f2cb2a1b4c47e49ff194a94f7394308956b) - -2023-07-12 Alan Modra - - Re: Stop the linker's --dependency-file option from including temporary lto files. - PR 30568 - * ldfile.c (ldfile_try_open_bfd): Fix build failure when - !BFD_SUPPORTS_PLUGINS. - - (cherry picked from commit 5f60df9974516867c02562b56c3a98cf4714a915) - -2023-07-12 GDB Administrator - - Automatic date update in version.in - -2023-07-11 GDB Administrator - - Automatic date update in version.in - -2023-07-10 GDB Administrator - - Automatic date update in version.in - -2023-07-09 GDB Administrator - - Automatic date update in version.in - -2023-07-08 GDB Administrator - - Automatic date update in version.in - -2023-07-07 Nick Clifton - - Replace local variable called 'rename' with 'renamed' - - Udated Freach and Romainian translations for various sub-directories - -2023-07-07 YunQiang Su - - ld: fix plugin tests for MIPS PIC - On MIPS, for PIC objects, symbols may reference 2 times: - once from the caller, and once from GOT. - Thus ld may complains 2 times about "undefined reference". - - So we add a new "#?" line to every effected testsuite. - -2023-07-07 GDB Administrator - - Automatic date update in version.in - -2023-07-06 GDB Administrator - - Automatic date update in version.in - -2023-07-05 GDB Administrator - - Automatic date update in version.in - -2023-07-04 Nick Clifton - - Updated Ukranian, Romanian and German translations for various sub-directories - -2023-07-04 GDB Administrator - - Automatic date update in version.in - -2023-07-03 Nick Clifton - - Change version number to 2.40.90 and regenerate files - - Add markers for the 2.41 branch - -2023-07-03 WANG Xuerui - - gas: NEWS: Announce LoongArch changes in the 2.41 cycle - gas/ChangeLog: - - * NEWS: Mention LoongArch changes for 2.41. - -2023-07-03 WANG Xuerui - - binutils: NEWS: Announce LoongArch changes in the 2.41 cycle - binutils/ChangeLog: - - * NEWS: Mention LoongArch changes for 2.41. - -2023-07-03 WANG Xuerui - - LoongArch: gas: Fix shared builds - Formerly an include of libbfd.h was added in commit 56576f4a722 - ("LoongArch: gas: Add support for linker relaxation."), in order to - allow calling _bfd_read_unsigned_leb128 from gas, but doing so broke - shared builds. Commit d2fddb6d783 fixed this reference but did not - remove the now unnecessary inclusion of libbfd.h. The gas_assert macro - expands into a conditional call to abort(), but "abort" is re-defined to - _bfd_abort in libbfd.h, so the extra include breaks any gas_assert - usage, and should be removed. - - gas/ChangeLog: - - * config/tc-loongarch.c: Don't include libbfd.h. - - Fixes: d2fddb6d783 ("LoongArch: Fix ld "undefined reference" error with --enable-shared") - -2023-07-03 WANG Xuerui - - opcodes/loongarch: Mark address offset operands of LVZ/LBT insns as such - opcodes/ChangeLog: - - * loongarch-opc.c: Mark the offset operands as "so" for - {,x}v{ld,st}, {,x}v{ldrepl,stelm}.[bhwd], and {ld,st}[lr].[wd]. - -2023-07-03 GDB Administrator - - Automatic date update in version.in - -2023-07-02 GDB Administrator - - Automatic date update in version.in - -2023-07-01 Vladimir Mezentsev - - gprofng: fix data race - In our GUI project (https://savannah.gnu.org/projects/gprofng-gui), we use - the output of gprofng to display the data. Sometimes this data is corrupted. - - gprofng/ChangeLog - 2023-06-29 Vladimir Mezentsev - - * src/ipc.cc (ipc_doWork): Fix data race. - * src/ipcio.cc (IPCresponse::print): Fix data race. - Remove unused variables and functions. - * src/ipcio.h: Declare two variables. - * src/StringBuilder.cc (StringBuilder::write): New function. - * src/StringBuilder.h: Likewise. - -2023-07-01 Christoph Müllner - - binutils: NEWS: Announce new RISC-V vector crypto extensions - This commit adds the recently added support of the RISC-V vector crypto - extensions to the NEWS file. - - binutils/ChangeLog: - - * NEWS: Announce new RISC-V vector crypto extensions. - -2023-07-01 Nathan Huckleberry - - RISC-V: Add support for the Zvksc ISA extension - Zvksc is part of the vector crypto extensions. - - Zvksc is shorthand for the following set of extensions: - - Zvks - - Zvbc - - bfd/ChangeLog: - - * elfxx-riscv.c: Define Zvksc extension. - - gas/ChangeLog: - - * testsuite/gas/riscv/zvksc.d: New test. - * testsuite/gas/riscv/zvksc.s: New test. - -2023-07-01 Nathan Huckleberry - - RISC-V: Add support for the Zvknc ISA extension - Zvknc is part of the vector crypto extensions. - - Zvknc is shorthand for the following set of extensxions: - - Zvkn - - Zvbc - - bfd/ChangeLog: - - * elfxx-riscv.c: Define Zvknc extension. - - gas/ChangeLog: - - * testsuite/gas/riscv/zvknc.d: New test. - * testsuite/gas/riscv/zvknc.s: New test. - -2023-07-01 Nathan Huckleberry - - RISC-V: Add support for the Zvksg ISA extension - Zvksg is part of the vector crypto extensions. - - Zvksg is shorthand for the following set of extensions: - - Zvks - - Zvkg - - bfd/ChangeLog: - - * elfxx-riscv.c: Define Zvksg extension. - - gas/ChangeLog: - - * testsuite/gas/riscv/zvksg.d: New test. - * testsuite/gas/riscv/zvksg.s: New test. - -2023-07-01 Christoph Müllner - - RISC-V: Add support for the Zvks ISA extension - Zvks is part of the vector crypto extensions. - - Zvks is shorthand for the following set of extensions: - - Zvksed - - Zvksh - - Zvbb - - Zvkt - - bfd/ChangeLog: - - * elfxx-riscv.c: Define Zvks extension. - - gas/ChangeLog: - - * testsuite/gas/riscv/zvks.d: New test. - * testsuite/gas/riscv/zvks.s: New test. - -2023-07-01 Nathan Huckleberry - - RISC-V: Add support for the Zvkng ISA extension - Zvkng is part of the vector crypto extensions. - - Zvkng is shorthand for the following set of extensions: - - Zvkn - - Zvkg - - bfd/ChangeLog: - - * elfxx-riscv.c: Define Zvkng extension. - - gas/ChangeLog: - - * testsuite/gas/riscv/zvkng.d: New test. - * testsuite/gas/riscv/zvkng.s: New test. - -2023-07-01 Nathan Huckleberry - - RISC-V: Allow nested implications for extensions - Certain extensions require two levels of implications. For example, - zvkng implies zvkn and zvkn implies zvkned. Enabling zvkng should also - enable zvkned. - - This patch fixes this behavior. - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_parse_add_implicit_subsets): Allow nested - implications for extensions. - -2023-07-01 Christoph Müllner - - RISC-V: Add support for the Zvkn ISA extension - Zvkn is part of the vector crypto extensions. - - Zvkn is shorthand for the following set of extensions: - - Zvkned - - Zvknhb - - Zvbb - - Zvkt - - bfd/ChangeLog: - - * elfxx-riscv.c: Define Zvkn extension. - - gas/ChangeLog: - - * testsuite/gas/riscv/zvkn.d: New test. - * testsuite/gas/riscv/zvkn.s: New test. - -2023-07-01 Christoph Müllner - - RISC-V: Add support for the Zvksh ISA extension - Zvksh is part of the vector crypto extensions. - - This extension adds the following instructions: - - vsm3me.vv - - vsm3c.vi - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_multi_subset_supports): Add instruction - class support for Zvksh. - (riscv_multi_subset_supports_ext): Likewise. - - gas/ChangeLog: - - * testsuite/gas/riscv/zvksh.d: New test. - * testsuite/gas/riscv/zvksh.s: New test. - - include/ChangeLog: - - * opcode/riscv-opc.h (MATCH_VSM3C_VI): New. - (MASK_VSM3C_VI): New. - (MATCH_VSM3ME_VV): New. - (MASK_VSM3ME_VV): New. - (DECLARE_INSN): New. - * opcode/riscv.h (enum riscv_insn_class): Add instruction class - support for Zvksh. - - opcodes/ChangeLog: - - * riscv-opc.c: Add Zvksh instructions. - -2023-07-01 Christoph Müllner - - RISC-V: Add support for the Zvksed ISA extension - Zvksed is part of the vector crypto extensions. - - This extension adds the following instructions: - - vsm4k.vi - - vsm4r.[vv,vs] - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_multi_subset_supports): Add instruction - class support for Zvksed. - (riscv_multi_subset_supports_ext): Likewise. - - gas/ChangeLog: - - * testsuite/gas/riscv/zvksed.d: New test. - * testsuite/gas/riscv/zvksed.s: New test. - - include/ChangeLog: - - * opcode/riscv-opc.h (MATCH_VSM4K_VI): New. - (MASK_VSM4K_VI): New. - (MATCH_VSM4R_VS): New. - (MASK_VSM4R_VS): New. - (MATCH_VSM4R_VV): New. - (MASK_VSM4R_VV): New. - (DECLARE_INSN): New. - * opcode/riscv.h (enum riscv_insn_class): Add instruction class - support for Zvksed. - - opcodes/ChangeLog: - - * riscv-opc.c: Add Zvksed instructions. - -2023-07-01 Christoph Müllner - - RISC-V: Add support for the Zvknh[a,b] ISA extensions - Zvknh[a,b] are parts of the vector crypto extensions. - - This extension adds the following instructions: - - vsha2ms.vv - - vsha2c[hl].vv - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_multi_subset_supports): Add instruction - class support for Zvknh[a,b]. - (riscv_multi_subset_supports_ext): Likewise. - - gas/ChangeLog: - - * testsuite/gas/riscv/zvknha.d: New test. - * testsuite/gas/riscv/zvknha_zvknhb.s: New test. - * testsuite/gas/riscv/zvknhb.d: New test. - - include/ChangeLog: - - * opcode/riscv-opc.h (MATCH_VSHA2CH_VV): New. - (MASK_VSHA2CH_VV): New. - (MATCH_VSHA2CL_VV): New. - (MASK_VSHA2CL_VV): New. - (MATCH_VSHA2MS_VV): New. - (MASK_VSHA2MS_VV): New. - (DECLARE_INSN): New. - * opcode/riscv.h (enum riscv_insn_class): Add instruction class - support for Zvknh[a,b]. - - opcodes/ChangeLog: - - * riscv-opc.c: Add Zvknh[a,b] instructions. - -2023-07-01 Christoph Müllner - - RISC-V: Add support for the Zvkned ISA extension - Zvkned is part of the vector crypto extensions. - - This extension adds the following instructions: - - vaesef.[vv,vs] - - vaesem.[vv,vs] - - vaesdf.[vv,vs] - - vaesdm.[vv,vs] - - vaeskf1.vi - - vaeskf2.vi - - vaesz.vs - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_multi_subset_supports): Add instruction - class support for Zvkned. - (riscv_multi_subset_supports_ext): Likewise. - - gas/ChangeLog: - - * testsuite/gas/riscv/zvkned.d: New test. - * testsuite/gas/riscv/zvkned.s: New test. - - include/ChangeLog: - - * opcode/riscv-opc.h (MATCH_VAESDF_VS): New. - (MASK_VAESDF_VS): New. - (MATCH_VAESDF_VV): New. - (MASK_VAESDF_VV): New. - (MATCH_VAESDM_VS): New. - (MASK_VAESDM_VS): New. - (MATCH_VAESDM_VV): New. - (MASK_VAESDM_VV): New. - (MATCH_VAESEF_VS): New. - (MASK_VAESEF_VS): New. - (MATCH_VAESEF_VV): New. - (MASK_VAESEF_VV): New. - (MATCH_VAESEM_VS): New. - (MASK_VAESEM_VS): New. - (MATCH_VAESEM_VV): New. - (MASK_VAESEM_VV): New. - (MATCH_VAESKF1_VI): New. - (MASK_VAESKF1_VI): New. - (MATCH_VAESKF2_VI): New. - (MASK_VAESKF2_VI): New. - (MATCH_VAESZ_VS): New. - (MASK_VAESZ_VS): New. - (DECLARE_INSN): New. - * opcode/riscv.h (enum riscv_insn_class): Add instruction class - support for Zvkned. - - opcodes/ChangeLog: - - * riscv-opc.c: Add Zvkned instructions. - -2023-07-01 Christoph Müllner - - RISC-V: Add support for the Zvkg ISA extension - Zvkg is part of the vector crypto extensions. - - This extension adds the following instructions: - - vghsh.vv - - vgmul.vv - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_multi_subset_supports): Add instruction - class support for Zvkg. - (riscv_multi_subset_supports_ext): Likewise. - - gas/ChangeLog: - - * testsuite/gas/riscv/zvkg.d: New test. - * testsuite/gas/riscv/zvkg.s: New test. - - include/ChangeLog: - - * opcode/riscv-opc.h (MATCH_VGHSH_VV): New. - (MASK_VGHSH_VV): New. - (MATCH_VGMUL_VV): New. - (MASK_VGMUL_VV): New. - (DECLARE_INSN): New. - * opcode/riscv.h (enum riscv_insn_class): Add instruction class - support for Zvkg. - - opcodes/ChangeLog: - - * riscv-opc.c: Add Zvkg instructions. - -2023-07-01 Nathan Huckleberry - - RISC-V: Add support for the Zvbc extension - Zvbc is part of the crypto vector extensions. - - This extension adds the following instructions: - - vclmul.[vv,vx] - - vclmulh.[vv,vx] - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_multi_subset_supports): Add instruction - class support for Zvbc. - (riscv_multi_subset_supports_ext): Likewise. - - gas/ChangeLog: - - * testsuite/gas/riscv/zvbc.d: New test. - * testsuite/gas/riscv/zvbc.s: New test. - - include/ChangeLog: - - * opcode/riscv-opc.h (MATCH_VCLMUL_VV): New. - (MASK_VCLMUL_VV): New. - (MATCH_VCLMUL_VX): New. - (MASK_VCLMUL_VX): New. - (MATCH_VCLMULH_VV): New. - (MASK_VCLMULH_VV): New. - (MATCH_VCLMULH_VX): New. - (MASK_VCLMULH_VX): New. - (DECLARE_INSN): New. - * opcode/riscv.h (enum riscv_insn_class): Add instruction class - support for Zvbc. - - opcodes/ChangeLog: - - * riscv-opc.c: Add Zvbc instruction. - -2023-07-01 Christoph Müllner - - RISC-V: Add support for the Zvbb ISA extension - Zvbb is part of the vector crypto extensions. - - This extension adds the following instructions: - - vandn.[vv,vx] - - vbrev.v - - vbrev8.v - - vrev8.v - - vclz.v - - vctz.v - - vcpop.v - - vrol.[vv,vx] - - vror.[vv,vx,vi] - - vwsll.[vv,vx,vi] - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_multi_subset_supports): Add instruction - class support for Zvbb. - (riscv_multi_subset_supports_ext): Likewise. - - gas/ChangeLog: - - * config/tc-riscv.c (validate_riscv_insn): Add 'l' as new format - string directive. - (riscv_ip): Likewise. - * testsuite/gas/riscv/zvbb.d: New test. - * testsuite/gas/riscv/zvbb.s: New test. - - include/ChangeLog: - - * opcode/riscv-opc.h (MATCH_VANDN_VV): New. - (MASK_VANDN_VV): New. - (MATCH_VANDN_VX): New. - (MASK_VANDN_VX): New. - (MATCH_VBREV8_V): New. - (MASK_VBREV8_V): New. - (MATCH_VBREV_V): New. - (MASK_VBREV_V): New. - (MATCH_VCLZ_V): New. - (MASK_VCLZ_V): New. - (MATCH_VCPOP_V): New. - (MASK_VCPOP_V): New. - (MATCH_VCTZ_V): New. - (MASK_VCTZ_V): New. - (MATCH_VREV8_V): New. - (MASK_VREV8_V): New. - (MATCH_VROL_VV): New. - (MASK_VROL_VV): New. - (MATCH_VROL_VX): New. - (MASK_VROL_VX): New. - (MATCH_VROR_VI): New. - (MASK_VROR_VI): New. - (MATCH_VROR_VV): New. - (MASK_VROR_VV): New. - (MATCH_VROR_VX): New. - (MASK_VROR_VX): New. - (MATCH_VWSLL_VI): New. - (MASK_VWSLL_VI): New. - (MATCH_VWSLL_VV): New. - (MASK_VWSLL_VV): New. - (MATCH_VWSLL_VX): New. - (MASK_VWSLL_VX): New. - (DECLARE_INSN): New. - * opcode/riscv.h (EXTRACT_RVV_VI_UIMM6): New. - (ENCODE_RVV_VI_UIMM6): New. - (enum riscv_insn_class): Add instruction class for Zvbb. - - opcodes/ChangeLog: - - * riscv-dis.c (print_insn_args): Add 'l' as new format string - directive. - * riscv-opc.c: Add Zvbb instructions. - -2023-07-01 GDB Administrator - - Automatic date update in version.in - -2023-06-30 Tom Tromey - - Fix regressions caused by agent expression C++-ification - Simon pointed out that my agent expression C++-ification patches - caused a regression with the native-gdbserver target board. The bug - is that append_const is supposed to write in big-endian order, but I - switched this by mistake. - -2023-06-30 Philipp Tomsich - - binutils: NEWS: announce new RISC-V extensions - We picked up support for a few new extensions over the last weeks - (this may need further updating prior to the next release), list them - in the NEWS file. - - binutils/ChangeLog: - - * binutils/NEWS: announce suuport for the new RISC-V - extensions (Zicond, Zfa, XVentanaCondOps). - -2023-06-30 Christoph Müllner - - RISC-V: Add support for the Zfa extension - This patch adds support for the RISC-V Zfa extension, - which introduces additional floating-point instructions: - * fli (load-immediate) with pre-defined immediates - * fminm/fmaxm (like fmin/fmax but with different NaN behaviour) - * fround/froundmx (round to integer) - * fcvtmod.w.d (Modular Convert-to-Integer) - * fmv* to access high bits of FP registers in case XLEN < FLEN - * fleq/fltq (quiet comparison instructions) - - Zfa defines its instructions in combination with the following - extensions: - * single-precision floating-point (F) - * double-precision floating-point (D) - * quad-precision floating-point (Q) - * half-precision floating-point (Zfh) - - This patch is based on an earlier version from Tsukasa OI: - https://sourceware.org/pipermail/binutils/2022-September/122939.html - Most significant change to that commit is the switch from the rs1-field - value to the actual floating-point value in the last operand of the fli* - instructions. Everything that strtof() can parse is accepted and - the '%a' printf specifier is used to output hex floating-point literals - in the disassembly. - - The Zfa specification is frozen (and has passed public review). It is - available as a chapter in "The RISC-V Instruction Set Manual: Volume 1": - https://github.com/riscv/riscv-isa-manual/releases - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_multi_subset_supports): Add instruction - class support for 'Zfa' extension. - (riscv_multi_subset_supports_ext): Likewise. - (riscv_implicit_subsets): Add 'Zfa' -> 'F' dependency. - - gas/ChangeLog: - - * config/tc-riscv.c (flt_lookup): New helper to lookup a float value - in an array. - (validate_riscv_insn): Add 'Wfv' as new format string directive. - (riscv_ip): Likewise. - * doc/c-riscv.texi: Add floating-point chapter and describe - limiations of the Zfa FP literal parsing. - * testsuite/gas/riscv/zfa-32.d: New test. - * testsuite/gas/riscv/zfa-32.s: New test. - * testsuite/gas/riscv/zfa-64.d: New test. - * testsuite/gas/riscv/zfa-64.s: New test. - * testsuite/gas/riscv/zfa-fail.d: New test. - * testsuite/gas/riscv/zfa-fail.l: New test. - * testsuite/gas/riscv/zfa-fail.s: New test. - * testsuite/gas/riscv/zfa.d: New test. - * testsuite/gas/riscv/zfa.s: New test. - * testsuite/gas/riscv/zfa.s: New test. - - * opcode/riscv-opc.h (MATCH_FLI_H): New. - (MASK_FLI_H): New. - (MATCH_FMINM_H): New. - (MASK_FMINM_H): New. - (MATCH_FMAXM_H): New. - (MASK_FMAXM_H): New. - (MATCH_FROUND_H): New. - (MASK_FROUND_H): New. - (MATCH_FROUNDNX_H): New. - (MASK_FROUNDNX_H): New. - (MATCH_FLTQ_H): New. - (MASK_FLTQ_H): New. - (MATCH_FLEQ_H): New. - (MASK_FLEQ_H): New. - (MATCH_FLI_S): New. - (MASK_FLI_S): New. - (MATCH_FMINM_S): New. - (MASK_FMINM_S): New. - (MATCH_FMAXM_S): New. - (MASK_FMAXM_S): New. - (MATCH_FROUND_S): New. - (MASK_FROUND_S): New. - (MATCH_FROUNDNX_S): New. - (MASK_FROUNDNX_S): New. - (MATCH_FLTQ_S): New. - (MASK_FLTQ_S): New. - (MATCH_FLEQ_S): New. - (MASK_FLEQ_S): New. - (MATCH_FLI_D): New. - (MASK_FLI_D): New. - (MATCH_FMINM_D): New. - (MASK_FMINM_D): New. - (MATCH_FMAXM_D): New. - (MASK_FMAXM_D): New. - (MATCH_FROUND_D): New. - (MASK_FROUND_D): New. - (MATCH_FROUNDNX_D): New. - (MASK_FROUNDNX_D): New. - (MATCH_FLTQ_D): New. - (MASK_FLTQ_D): New. - (MATCH_FLEQ_D): New. - (MASK_FLEQ_D): New. - (MATCH_FLI_Q): New. - (MASK_FLI_Q): New. - (MATCH_FMINM_Q): New. - (MASK_FMINM_Q): New. - (MATCH_FMAXM_Q): New. - (MASK_FMAXM_Q): New. - (MATCH_FROUND_Q): New. - (MASK_FROUND_Q): New. - (MATCH_FROUNDNX_Q): New. - (MASK_FROUNDNX_Q): New. - (MATCH_FLTQ_Q): New. - (MASK_FLTQ_Q): New. - (MATCH_FLEQ_Q): New. - (MASK_FLEQ_Q): New. - (MATCH_FCVTMOD_W_D): New. - (MASK_FCVTMOD_W_D): New. - (MATCH_FMVH_X_D): New. - (MASK_FMVH_X_D): New. - (MATCH_FMVH_X_Q): New. - (MASK_FMVH_X_Q): New. - (MATCH_FMVP_D_X): New. - (MASK_FMVP_D_X): New. - (MATCH_FMVP_Q_X): New. - (MASK_FMVP_Q_X): New. - (DECLARE_INSN): New. - * opcode/riscv.h (enum riscv_insn_class): Add instruction - classes for the Zfa extension. - - opcodes/ChangeLog: - - * riscv-dis.c (print_insn_args): Add support for - new format string directive 'Wfv'. - * riscv-opc.c: Add Zfa instructions. - - Co-Developed-by: Tsukasa OI - Co-Developed-by: Philipp Tomsich - Acked-by: Palmer Dabbelt - -2023-06-30 Nick Clifton - - strings: Improve code to detect excessively large minimum string lengths. - PR 30598 - * strings.c (set_string_min): New function. (main): Use it. (print_unicode_stream): Calculate buffer size using a size_t. - - Prevent an illegal memory access when running the strings program with an excessively lerge minimum string length. - PR 30595 - * strings.c (main): Check for an excessively large minimum string length. - - Fix used-before-initialized warnings when compiling elf.c with Clang-16. - -2023-06-30 mengqinggang - - LoongArch: gas: Fix code style issues - Blocks of 8 spaces be replaced with tabs. - Fix alignment issues. - -2023-06-30 mengqinggang - - LoongArch: gas: Add LVZ and LBT instructions support - gas/ChangeLog: - * config/tc-loongarch.c (md_parse_option): Add LARCH_opts.ase_lvz and - LARCH_opts.ase_lbt. - * testsuite/gas/loongarch/uleb128.d: Regenerated. - * testsuite/gas/loongarch/lvz-lbt.d: New test. - * testsuite/gas/loongarch/lvz-lbt.s: New test. - - include/ChangeLog: - * opcode/loongarch.h (ase_lvz): New. - (ase_lbt): New. - - opcodes/ChangeLog: - * loongarch-dis.c (set_default_loongarch_dis_options): Add - LARCH_opts.ase_lvz and LARCH_opts.ase_lbt. - * loongarch-opc.c (struct loongarch_ase): Add LVZ and LBT instructions. - -2023-06-30 WANG Xuerui - - LoongArch: Deprecate $v[01], $fv[01] and $x names per spec - As outlined in the LoongArch ELF psABI spec [1], it is actually already - 2 versions after the initial LoongArch support, and the $v[01] and - $fv[01] names should really get sunset by now. - - In addition, the "$x" name for $r21 was never included in any released - version of the ABI spec, and such usages are all fixed to say just $r21 - for every project I could think of that accepted a LoongArch port. - - Plus, the upcoming LSX/LASX support makes use of registers named - "$vrNN" and "$xrNN", so having "$vN" and "$x" alongside would almost - certainly create confusion for developers. - - Issue warnings for such usages per the deprecation procedure detailed - in the spec, so we can finally remove support in the next release cycle - after this. - - [1]: https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html - - gas/ChangeLog: - - * config/tc-loongarch.c: Init canonical register ABI name - mappings and deprecated register names. - (loongarch_args_parser_can_match_arg_helper): Warn in case of - deprecated register name usage. - * testsuite/gas/loongarch/deprecated_reg_aliases.d: New test. - * testsuite/gas/loongarch/deprecated_reg_aliases.l: Likewise. - * testsuite/gas/loongarch/deprecated_reg_aliases.s: Likewise. - - include/ChangeLog: - - * opcode/loongarch.h: Rename global variables. - - opcodes/ChangeLog: - - * loongarch-opc.c: Rename the alternate/deprecated register name - mappings, and move $x to the deprecated name map. - -2023-06-30 WANG Xuerui - - opcodes/loongarch: print unrecognized insn words with the .word directive - For better round-trip fidelity and readability in general. - - gas/ChangeLog: - - * testsuite/gas/loongarch/uleb128.d: Update test case. - * testsuite/gas/loongarch/raw-insn.d: New test. - * testsuite/gas/loongarch/raw-insn.s: Likewise. - - opcodes/ChangeLog: - - * loongarch-dis.c (disassemble_one): Print ".word" if !opc. - -2023-06-30 WANG Xuerui - - opcodes/loongarch: do not print hex notation for signed immediates - The additional hex notation was minimally useful when one had to - inspect code with heavy bit manipulation, or of unclear signedness, but - it clutters the output, and the style is not regular assembly language - syntax either. - - Precisely how one approaches the original use case is not taken care of - in this patch (maybe we want a disassembler option forcing a certain - style for immediates, like for example printing every immediate in - decimal or hexadecimal notation), but at least let's stop the current - practice. - - ChangeLog: - - * testsuite/gas/loongarch/imm_ins.d: Update test case. - * testsuite/gas/loongarch/imm_ins_32.d: Likewise. - * testsuite/gas/loongarch/imm_op.d: Likewise. - * testsuite/gas/loongarch/jmp_op.d: Likewise. - * testsuite/gas/loongarch/load_store_op.d: Likewise. - * testsuite/gas/loongarch/macro_op.d: Likewise. - * testsuite/gas/loongarch/macro_op_32.d: Likewise. - * testsuite/gas/loongarch/privilege_op.d: Likewise. - * testsuite/gas/loongarch/uleb128.d: Likewise. - * testsuite/gas/loongarch/vector.d: Likewise. - - ld/ChangeLog: - - * testsuite/ld-loongarch-elf/jmp_op.d: Update test case. - * testsuite/ld-loongarch-elf/macro_op.d: Likewise. - * testsuite/ld-loongarch-elf/macro_op_32.d: Likewise. - - opcodes/ChangeLog: - - * loongarch-dis.c (dis_one_arg): Remove the "(0x%x)" part from - disassembly output of signed immediate operands. - -2023-06-30 WANG Xuerui - - opcodes/loongarch: style disassembled address offsets as such - Add a modifier char 'o' telling the disassembler to print the immediate - using the address offset style, and mark the memory access instructions' - offset operands as such. - - opcodes/ChangeLog: - - * loongarch-dis.c (dis_one_arg): Style disassembled address - offsets as such when the operand has a modifier char 'o'. - * loongarch-opc.c: Add 'o' to operands that represent address - offsets. - -2023-06-30 WANG Xuerui - - opcodes/loongarch: implement style support in the disassembler - Update the LoongArch disassembler to supply style information to the - disassembler output. The output formatting remains unchanged. - - opcodes/ChangeLog: - - * disassemble.c: Mark LoongArch as created_styled_output=true. - * loongarch-dis.c (dis_one_arg): Use fprintf_styled_func - throughout with proper styles. - -2023-06-30 WANG Xuerui - - opcodes/loongarch: remove unused code - Remove some unused declarations and code. - - include/ChangeLog: - - * opcode/loongarch.h: Remove unused declarations. - - opcodes/ChangeLog: - - * loongarch-dis.c (loongarch_parse_dis_options): Remove. - (my_print_address_func): Likewise. - (loongarch_disassemble_one): Likewise. - -2023-06-30 WANG Xuerui - - LoongArch: support disassembling certain pseudo-instructions - Add a flag in the pinfo field for being able to mark certain specialized - matchers as disassembler-only, so some degree of isolation between - assembler-side and disassembler-side can be achieved. - - This isolation is necessary, firstly because some pseudo-instructions - cannot be fully described in the opcode table, like `li.[wd]`, so the - corresponding opcode entry cannot have meaningful match/mask values. - Secondly, some of these pseudo-instructions can be realized in more than - one plausible ways; e.g. `li.w rd, ` can - be realized on LA64 with any of `addi.w`, `addi.d` or `ori`. If we tie - disassembly of such aliases with the corresponding GAS support, only one - canonical form among the above would be recognized as `li.w`, and it - would mildly impact the readability of disassembly output. - People wanting the exact disassembly can always set `-M no-aliases` to - get the original behavior back. - - In addition, in certain cases, information is irreversibly lost after - assembling, so perfect round-trip would not be possible in such cases. - For example, `li.w` and `li.d` of immediates within int32_t range - produce the same code; in this patch, `addi.d rd, $zero, imm` is treated - as `li.d`, while `addi.w` and `ori` immediate loads are shown as `li.w`, - due to the expressible value range well within 32 bits. - - gas/ChangeLog: - - * config/tc-loongarch.c (get_loongarch_opcode): Ignore - disassembler-only aliases. - * testsuite/gas/loongarch/64_pcrel.d: Update test case. - * testsuite/gas/loongarch/imm_ins.d: Likewise. - * testsuite/gas/loongarch/imm_ins_32.d: Likewise. - * testsuite/gas/loongarch/jmp_op.d: Likewise. - * testsuite/gas/loongarch/li.d: Likewise. - * testsuite/gas/loongarch/macro_op.d: Likewise. - * testsuite/gas/loongarch/macro_op_32.d: Likewise. - * testsuite/gas/loongarch/macro_op_large_abs.d: Likewise. - * testsuite/gas/loongarch/macro_op_large_pc.d: Likewise. - * testsuite/gas/loongarch/nop.d: Likewise. - * testsuite/gas/loongarch/relax_align.d: Likewise. - * testsuite/gas/loongarch/reloc.d: Likewise. - - include/ChangeLog: - - * opcode/loongarch.h (INSN_DIS_ALIAS): Add. - - ld/ChangeLog: - - * testsuite/ld-loongarch-elf/jmp_op.d: Update test case. - * testsuite/ld-loongarch-elf/macro_op.d: Likewise. - * testsuite/ld-loongarch-elf/macro_op_32.d: Likewise. - * testsuite/ld-loongarch-elf/relax-align.dd: Likewise. - - opcodes/ChangeLog: - - * loongarch-dis.c: Move register name map declarations to top. - (get_loongarch_opcode_by_binfmt): Consider aliases when - disassembling without the no-aliases option. - (parse_loongarch_dis_option): Support the no-aliases option. - * loongarch-opc.c: Collect pseudo instructions into a new - dedicated table. - -2023-06-30 GDB Administrator - - Automatic date update in version.in - -2023-06-30 Indu Bhagat - - binutils/NEWS: announce SFrame version 2 as the new default - -2023-06-30 Indu Bhagat - - doc: sframe: update specification for SFRAME_VERSION_2 - Add details for the changes made from Version 1 to Version 2 of the format. - - Also add details about alignment in the SFrame format. A portion of the - SFrame stack trace format has an unaligned on-disk representation. Add - description at relevant points in the specificatin to clarify the - alignment related details. - -2023-06-30 Indu Bhagat - - sframe: bfd: gas: ld: format bump to SFrame version 2 - SFrame version 2 encodes the size of repetitive insn block explicitly - in the format. Add information in the SFrame FDE to convey the size - of the block of repeating instructions. This information is used only - for SFrame FDEs of type SFRAME_FDE_TYPE_PCMASK. - - Introduce two extra bytes for padding: this ensures that the memory - accesses to the members of the SFrame Frame Descriptor Entry (FDE) are - naturally aligned. - - gas generates SFrame section with version SFRAME_VERSION_2 by default. - - libsframe provides two new APIs to: - - get an SFrame FDE data from the decoder context, and - - add an SFrame FDE to the encoder context. - The additional argument (for rep_block_size) is useful for SFrame FDEs - where FDE type is SFRAME_FDE_TYPE_PCMASK. - - The linker will generate the output SFrame sections in the - SFRAME_VERSION_2 format. If the input sections offered to the linker - are not all in the SFRAME_VERSION_2 format, the linker issues an error - to the user. - - objdump/readelf will show the following message to the user if .sframe - section in SFRAME_VERSION_1 format is seen: - - "No further information can be displayed. SFrame version not - supported." - - In other words, like the rest of the binutils, only the current SFrame - format version, i.e., SFRAME_VERSION_2 is supported by the textual dump - facilities. - - bfd/ - * elf-sframe.c (_bfd_elf_merge_section_sframe): Generate an - output SFrame section with version SFRAME_VERSION_2. Also, - error out if the SFrame sections do not all have - SFRAME_VERSION_2. - * elfxx-x86.c (_bfd_x86_elf_create_sframe_plt): Generate SFrame - section for plt entries with version SFRAME_VERSION_2. - gas/ - * gen-sframe.c (sframe_set_version): Update to SFRAME_VERSION_2. - (output_sframe): Likewise. - gas/testsuite/ - * gas/cfi-sframe/cfi-sframe-aarch64-1.d: Use SFRAME_VERSION_2. - * gas/cfi-sframe/cfi-sframe-aarch64-2.d: Likewise. - * gas/cfi-sframe/cfi-sframe-aarch64-pac-ab-key-1.d: Likewise. - * gas/cfi-sframe/cfi-sframe-common-1.d: Likewise. - * gas/cfi-sframe/cfi-sframe-common-2.d: Likewise. - * gas/cfi-sframe/cfi-sframe-common-3.d: Likewise. - * gas/cfi-sframe/cfi-sframe-common-4.d: Likewise. - * gas/cfi-sframe/cfi-sframe-common-5.d: Likewise. - * gas/cfi-sframe/cfi-sframe-common-6.d: Likewise. - * gas/cfi-sframe/cfi-sframe-common-7.d: Likewise. - * gas/cfi-sframe/cfi-sframe-common-8.d: Likewise. - * gas/cfi-sframe/cfi-sframe-x86_64-1.d: Likewise. - * gas/cfi-sframe/common-empty-1.d: Likewise. - * gas/cfi-sframe/common-empty-2.d: Likewise. - * gas/cfi-sframe/common-empty-3.d: Likewise. - ld/testsuite/ - * ld-aarch64/sframe-simple-1.d: Adjust for SFRAME_VERSION_2. - * ld-x86-64/sframe-plt-1.d: Likewise. - * ld-x86-64/sframe-simple-1.d: Likewise. - libsframe/ - * libsframe.ver: Add the new APIs. - * sframe.c (sframe_decoder_get_funcdesc_v2): New definition. - (sframe_encoder_add_funcdesc_v2): Likewise. - (sframe_header_sanity_check_p): Include SFRAME_VERSION_2. - (sframe_fre_check_range_p): Get rep_block_size info from SFrame - FDE. - * sframe-dump.c (dump_sframe_header): Add support for - SFRAME_VERSION_2. - (dump_sframe): Inform user if SFrame section in SFRAME_VERSION_1 - format is seen. - libsframe/testsuite/ - * libsframe.decode/DATA-BE: Regenerated data file. - * libsframe.decode/DATA1: Likewise. - * libsframe.decode/DATA2: Likewise. - * libsframe.find/plt-findfre-1.c: Use new API in the testcase. - include/ - * sframe.h: Add member to encode size of the code block of - repeating instructions. Add 2 bytes of padding. - * sframe-api.h (sframe_decoder_get_funcdesc_v2): New - declaration. - (sframe_encoder_add_funcdesc_v2): Likewise. - -2023-06-30 Indu Bhagat - - libsframe: add new APIs to get SFrame version - While the SFrame preamble is guaranteed to not change between versions, - providing these access APIs from the SFrame decoder and encoder APIs is - for convenience only. The linker may want to use these APIs as the - format evolves. - - include/ - * sframe-api.h (sframe_decoder_get_version): New declaration. - (sframe_encoder_get_version): Likewise. - - libsframe/ - * libsframe/libsframe.ver: Add new APIs. - * libsframe/sframe.c (sframe_decoder_get_version): New - definition. - (sframe_encoder_get_version): Likewise. - -2023-06-29 Indu Bhagat - - libsframe: fix sframe_find_fre for pltN entries - For a toy application on x86_64, for example, following is the SFrame - stack trace information for the 3 pltN entries of 16 bytes each: - - func idx [1]: pc = 0x401030, size = 48 bytes - STARTPC[m] CFA FP RA - 0000000000000000 sp+8 u u - 000000000000000b sp+16 u u - - The data in first column is the start_ip_offset. Also note that the FDE - is of type SFRAME_FDE_TYPE_PCMASK (denoted by the [m] on LHS). - - Where each pltN (note: excluding plt0 entry) entry looks like: - - 401030: jmp *0x2fca(%rip) - 401036: push $0x0 - 40103b: jmp 401020<_init+0x20> - - 401040: jmp *0x2fc2(%rip) - 401046: push $0x1 - 40104b: jmp 401020<_init+0x20> - - 401050: jmp *0x2fba(%rip) - 401056: push $0x2 - 40105b: jmp 401020<_init+0x20> - - Now, to find SFrame stack trace information from an FDE of type - SFRAME_FDE_TYPE_PCMASK, sframe_find_fre () was doing an operation - like, - (start_ip_offset & 0xf) >= (pc & 0xf) - - This works for pltN entry of size, say, less than 16 bytes. But if the - pltN entries or similar code stubs (for which SFrame FDE of type - SFRAME_FDE_TYPE_PCMASK may be used), evolve to be of size > 16 bytes, - this will cease to work. - - To match the range covered by the SFrame FRE, one should instead perform - a modulo operation. The constant for the modulo operation must be the - size of the pltN entry. Further, this constant should ideally be - encoded in the format, as it may be different for each ABI. - - In SFrame Version 2 of the format, we will move towards encoding it - explicitly in the SFrame FDE. For now, fix up the logic to at least - move towards modulo operation. - - libsframe/ - * sframe.c (sframe_fre_check_range_p): New definition. - (sframe_find_fre): Refactor a bit and use the new definition - above. - include/ - * sframe.h (SFRAME_FDE_TYPE_PCMASK): Update comment. - libsframe/doc/ - * sframe-spec.texi: Fix the text for SFRAME_FDE_TYPE_PCMASK FDE - type. - -2023-06-29 H.J. Lu - - ld: Add -z nosectionheader test to bootstrap.exp - PR ld/25617 - * testsuite/ld-bootstrap/bootstrap.exp: Add -z nosectionheader - test. - -2023-06-29 H.J. Lu - - ld: Add tests for -z nosectionheader and --strip-section-headers - Add tests to verify that the linker option, -z nosectionheader and - objcopy and strip option, --strip-section-headers, work correctly as well - as linker issues an error when dynamic symbol table from PT_DYNAMIC - segment is used. - - PR ld/25617 - * testsuite/ld-elf/hash-2.d: New file. - * testsuite/ld-elf/no-section-header.exp: Likewise. - * testsuite/ld-elf/pr25617-1-no-sec-hdr.nd: Likewise. - * testsuite/ld-elf/pr25617-1-no-sec-hdr.rd: Likewise. - * testsuite/ld-elf/pr25617-1-static-no-sec-hdr.rd: Likewise. - * testsuite/ld-elf/pr25617-1a-no-sec-hdr.nd: Likewise. - * testsuite/ld-elf/pr25617-1a-no-sec-hdr.rd: Likewise. - * testsuite/ld-elf/pr25617-1a-sec-hdr.rd: Likewise. - * testsuite/ld-elf/pr25617-1a.c: Likewise. - * testsuite/ld-elf/pr25617-1b.c: Likewise. - * testsuite/ld-elf/start-noheader.rd: Likewise. - * testsuite/ld-elf/start-shared-noheader-gnu.rd: Likewise. - * testsuite/ld-elf/start-shared-noheader-sysv.rd: Likewise. - * testsuite/ld-elf/start-shared-noheader.nd: Likewise. - -2023-06-29 H.J. Lu - - binutils: Add a --strip-section-headers test - PR ld/25617 - * testsuite/binutils-all/objcopy.exp: Run strip-section-headers-1. - * testsuite/binutils-all/strip-section-headers-1.d: New file. - -2023-06-29 Kaylee Blake - - ld: Add simple tests for -z nosectionheader - 2020-06-06 Kaylee Blake - H.J. Lu - - PR ld/25617 - * testsuite/ld-elf/nosectionheader-1.d: New file. - * testsuite/ld-elf/nosectionheader-2.d: Likewise. - -2023-06-29 H.J. Lu - - bfd: Improve nm and objdump without section header - When there is no section header in an executable or shared library, we - reconstruct dynamic symbol table from the PT_DYNAMIC segment, which - contains DT_HASH/DT_GNU_HASH/DT_MIPS_XHASH, DT_STRTAB, DT_SYMTAB, - DT_STRSZ, and DT_SYMENT entries, to improve nm and objdump. For DT_HASH, - the number of dynamic symbol table entries equals the number of chains. - For DT_GNU_HASH/DT_MIPS_XHASH, only defined symbols with non-STB_LOCAL - indings are in hash table. Since DT_GNU_HASH/DT_MIPS_XHASH place all - symbols with STB_LOCAL binding before symbols with other bindings and - all undefined symbols defined ones in dynamic symbol table, the highest - symbol index in DT_GNU_HASH/DT_MIPS_XHASH is the highest dynamic symbol - table index. We can also get symbol version from DT_VERSYM, DT_VERDEF - and DT_VERNEED entries. - - dt_symtab, dt_versym, dt_verdef, dt_verneed, dt_symtab_count, - dt_verdef_count, dt_verneed_count and dt_strtab are added to - elf_obj_tdata to store dynamic symbol table information. - - PR ld/25617 - * elf-bfd.h (elf_obj_tdata): Add dt_symtab, dt_verdef, dt_verneed, - dt_symtab_count, dt_verdef_count, dt_verneed_count and dt_strtab. - (elf_use_dt_symtab_p): New. - (_bfd_elf_get_dynamic_symbols): Likewise. - (_bfd_elf_get_section_from_dynamic_symbol): Likewise. - * elf.c (bfd_elf_get_elf_syms): Use dynamic symbol table if - neeeded. - (_bfd_elf_get_dynamic_symtab_upper_bound): Likewise. - (_bfd_elf_slurp_version_tables): Likewise. - (offset_from_vma): New function. - (get_hash_table_data): Likewise. - (_bfd_elf_get_dynamic_symbols): Likewise. - (_bfd_elf_get_section_from_dynamic_symbol): Likewise. - (_bfd_elf_get_symbol_version_name): Likewise. - * elfcode.h (elf_object_p): Call _bfd_elf_get_dynamic_symbols - to reconstruct dynamic symbol table from PT_DYNAMIC segment if - there is no section header. - (elf_slurp_symbol_table): Use dynamic symbol table if neeeded. - Don't free isymbuf when dynamic symbol table is used. - * elflink.c (elf_link_is_defined_archive_symbol): Return wrong - format error when dynamic symbol table is used. - (elf_link_add_object_symbols): Likewise. - -2023-06-29 H.J. Lu - - ELF: Discard non-alloc sections without section header - Discard non-alloc sections when section headers are stripped. - - bfd/ - - PR ld/25617 - * elf.c (_bfd_elf_assign_file_positions_for_non_load): Skip - non-load sections without section header. - (_bfd_elf_write_object_contents): Don't set the sh_name field - without section header. Write out the .shstrtab section only - if its sh_offset field isn't -1. - - binutils/ - - PR ld/25617 - * objcopy.c (is_strip_section_1): Remove non-alloc sections for - --strip-section-headers. - - ld/ - - PR ld/25617 - * ldlang.c (lang_discard_section_p): Discard non-alloc sections - if we are stripping section headers. - -2023-06-29 Kaylee Blake - - ELF: Strip section header in ELF objects - Section header isn't mandatory on ELF executable nor shared library. - This patch adds a new linker option, -z nosectionheader, to omit ELF - section header, a new objcopy and strip option, --strip-section-headers, - to remove ELF section headers. - - bfd/ - - 2023-06-06 H.J. Lu - Kaylee Blake - - PR ld/25617 - * bfd.c (BFD_NO_SECTION_HEADER): New. - (BFD_FLAGS_SAVED): Add BFD_NO_SECTION_HEADER. - (BFD_FLAGS_FOR_BFD_USE_MASK): Likewise. - * elfcode.h (elf_swap_ehdr_out): Omit section header with - BFD_NO_SECTION_HEADER. - (elf_write_shdrs_and_ehdr): Likewise. - * elfxx-target.h (TARGET_BIG_SYM): Add BFD_NO_SECTION_HEADER - to object_flags. - (TARGET_LITTLE_SYM): Likewise. - * bfd-in2.h: Regenerated. - - binutils/ - - 2023-06-06 H.J. Lu - - PR ld/25617 - * NEWS: Mention --strip-section-headers for objcopy and strip. - * objcopy.c (strip_section_headers): New. - (command_line_switch): Add OPTION_STRIP_SECTION_HEADERS. - (strip_options): Add --strip-section-headers. - (copy_options): Likewise. - (copy_usage): Add --strip-section-headers. - (strip_usage): Likewise. - (copy_object): Handle --strip-section-headers for ELF files. - (strip_main): Handle OPTION_STRIP_SECTION_HEADERS. - (copy_main): Likewise. - * doc/binutils.texi: Document --strip-section-headers for objcopy - and strip. - - ld/ - - 2023-06-06 H.J. Lu - Kaylee Blake - - PR ld/25617 - * NEWS: Mention -z nosectionheader. - * emultempl/elf.em: Support -z sectionheader and - -z nosectionheader. - * ld.h (ld_config_type): Add no_section_header. - * ld.texi: Document -z sectionheader and -z nosectionheader. - * ldlang.c (ldlang_open_output): Handle - config.no_section_header. - * lexsup.c (parse_args): Enable --strip-all with - -z nosectionheader. Disallow -r with -z nosectionheader. - (elf_static_list_options): Add -z sectionheader and - -z nosectionheader. - -2023-06-29 Matthias Klose - - Ignore --prefix-file-map compiler option whist running testsuite. - - ignore lto-wrapper warnings for lto builds. - I see these warnings from time to time, when configuring a build with --enable-pgo-build=lto, I haven't yet found out why I see these sometime, and why not. E.g. https://gcc.gnu.org/PR109241. Just ignore these when they appear in test cases. lto-wrapper: warning: using serial compilation of N LTRANS jobs - -2023-06-29 GDB Administrator - - Automatic date update in version.in - -2023-06-28 Vladimir Mezentsev - - gprofng: Add new tests - gprofng/ChangeLog - 2023-06-26 Vladimir Mezentsev - - * Makefile.am: Pass CLOCK_GETTIME_LINK to the testsuite - * Makefile.in: Rebuild. - * testsuite/gprofng.display/gp-archive.exp: New file. - * testsuite/gprofng.display/gp-collect-app_F.exp: New file. - * testsuite/gprofng.display/setpath_map.exp: New file. - * testsuite/lib/smalltest.c: New file. - -2023-06-28 Andrew Carlotti - - aarch64: Remove version dependencies from features - Many instructions were enabled only when both a feature flag and a minimum - architecture version are specified. This behaviour differs from GCC, which (in - most cases) allows features to be enabled at any architecture version. - - There is no need for the toolchain to restrict combinations of unrelated - features in this way, so this patch removes the unnecessary dependencies. - -2023-06-28 Tom Tromey - - Remove Python 2 from gdb documentation - GDB can't be built using Python 2 any more, so remove the remaining - vestiges of this from the documentation. - - Approved-By: Eli Zaretskii - -2023-06-28 Michael Matz - - section-match: Check parent archive name as well - rewriting the section matching routines lost a special case - of matching: section statements of the form - - NAME(section-glob) - - normally match against NAME being an object file, but like in - the exclude list we happened to accept archive names as NAME - (undocumented). The documented way to specify (all) archive members - is by using e.g. - - lib.a:(section-glob) - - (that does work also with the prefix tree matcher). - - But I intended to not actually change behaviour with the prefix - tree implementation. So, let's also implement checking against - archive names with a similar FIXME comment we already have in - walk_wild_file_in_exclude_list. - - PR 30590 - - ld/ - * ldlang.c (walk_wild_section_match): Also look at archive - parents for a name match. - -2023-06-28 Tom Tromey - - Fix handling of DW_TAG_unspecified_type for Ada - Commit 80eaec735e ("[gdb/symtab] Handle named DW_TAG_unspecified_type - DIE") changed the handling of DW_TAG_unspecified_type. Before this - change, such types were not entered into the symbol table. - - It turns out that, when such a type is in the symtab, it can cause - failures in Ada. In particular, a private type in another package may - be seen locally as "void". - - Now, it would probably be better to fix this via check_typedef. - However, that is somewhat difficult given the state of the DWARF - reader -- in particular with gdb_index, this would require expanding - potentially many CUs to find the correct type. - - Instead, this patch changes gdb to not enter a symbol for an - unspecified type -- but only for Ada. - -2023-06-28 Tom Tromey - - Remove some Python 2 code - I found some Python 2 compatibility code in gdb's Python library. - There's no need for this any more, so this removes it. There is still - a bit more of this remaining in __init__.py, but I haven't tried - removing that yet. - - Reviewed-By: Bruno Larsen - -2023-06-28 Nick Clifton - - Stop the linker's --dependency-file option from including temporary lto files. - PR 30568 - * ldfile.c (ldfile_try_open_bfd): Do not track lto generated temporary files. - - Updated French translation for the gold sub-directory - -2023-06-28 mengqinggang - - LoongArch: gas: Add LSX and LASX instructions test - gas/ChangeLog: - - * testsuite/gas/loongarch/vector.d: New test. - * testsuite/gas/loongarch/vector.s: New test. - -2023-06-28 mengqinggang - - LoongArch: gas: Add lsx and lasx instructions support - gas/ChangeLog: - - * config/tc-loongarch.c (md_parse_option): Add lsx and lasx option. - (loongarch_after_parse_args): Add lsx and lasx option. - - opcodes/ChangeLog: - - * loongarch-opc.c (struct loongarch_ase): Add lsx and lasx - instructions. - -2023-06-28 mengqinggang - - LoongArch: Add R_LARCH_64_PCREL relocation support - Gas defaults to emit R_LARCH_ADD64/R_LARCH_SUB64 unless explcitly declared - to emit R_LARCH_64_PCREL. - - The LoongArch ABI at here: - https://github.com/loongson/la-abi-specs/blob/release/la-abi.adoc - - bfd/ChangeLog: - - * bfd-in2.h (not): Add R_LARCH_64_PCREL - * elfnn-loongarch.c (perform_relocation): Likewise. - * elfxx-loongarch.c: Likewise. - * libbfd.h: Likewise. - * reloc.c: Likewise. - - gas/ChangeLog: - - * config/tc-loongarch.c (loongarch_args_parser_can_match_arg_helper): - (md_apply_fix): Add R_LARCH_64_PCREL. - * testsuite/gas/loongarch/64_pcrel.d: New test. - * testsuite/gas/loongarch/64_pcrel.s: New test. - - include/ChangeLog: - - * elf/loongarch.h (RELOC_NUMBER): Add R_LARCH_64_PCREL. - - ld/ChangeLog: - - * testsuite/ld-loongarch-elf/ld-loongarch-elf.exp: Add test. - * testsuite/ld-loongarch-elf/64_pcrel.d: New test. - * testsuite/ld-loongarch-elf/64_pcrel.s: New test. - -2023-06-28 GDB Administrator - - Automatic date update in version.in - -2023-06-27 Indu Bhagat - - binutils/NEWS: add note about upcoming libsframe changes - Some of these changes update the ABI in an incompatible way. - -2023-06-27 Indu Bhagat - - libsframe: bfd: use uint32_t for return type of get_num_fidx APIs - Keep the data types usage in libsframe look consistent. - - bfd/ - * elf-sframe.c (_bfd_elf_merge_section_sframe): Use uint32_t - type alias. - * libsframe/sframe.c (sframe_decoder_get_funcdesc_at_index): - Likewise. - (sframe_decoder_get_num_fidx): Likewise. - (sframe_encoder_get_num_fidx): Likewise. - include/ - * sframe-api.h (sframe_decoder_get_num_fidx): Likewise. - (sframe_encoder_get_num_fidx): Likewise. - -2023-06-27 Indu Bhagat - - libsframe: use appropriate data types for args of sframe_encode - include/ - * sframe-api.h (sframe_encode): Use of uint8_t is more - appropriate. - libsframe/ - * sframe.c (sframe_encode): Likewise. - -2023-06-27 Indu Bhagat - - libsframe: use uint8_t for return type of sframe_fre_get_base_reg_id - Use a more appropriate data type. - - include/ - * sframe-api.h (sframe_fre_get_base_reg_id): Use uint8_t as - return type. - libsframe/ - * sframe-dump.c (dump_sframe_func_with_fres): Use uint8_t type - for base reg id. - * sframe.c (sframe_fre_get_base_reg_id): Use uin8_t as return - type. - -2023-06-27 Indu Bhagat - - libsframe: use uint8_t instead of unsigned char for abi_arch - Use uint8_t consistently for identifying ABI/arch in SFrame format. - - bfd/ - * elf-sframe.c (_bfd_elf_merge_section_sframe): - libsframe/ - * sframe-dump.c (is_sframe_abi_arch_aarch64): Use uint8_t for - local variable. - * sframe.c (sframe_decoder_get_abi_arch): Update return type to - uint8_t. - (sframe_encoder_get_abi_arch): Likewise. - include/ - * sframe-api.h (sframe_decoder_get_abi_arch): Likewise. - (sframe_encoder_get_abi_arch): Likewise. - -2023-06-27 Indu Bhagat - - libsframe: bfd: use uint32_t for return type of sframe_calc_fre_type - Use uint32_t type alias consistently for all APIs in libsframe. - - bfd/ - * elfxx-x86.c (_bfd_x86_elf_create_sframe_plt): Adjust for the - changed return type. - libsframe/ - * sframe.c (sframe_calc_fre_type): Use uint32_t for return type. - include/ - * sframe-api.h (sframe_calc_fre_type): Likewise. - -2023-06-27 Indu Bhagat - - libsframe: use uint32_t for fre_type and fde_type function args - The API sframe_fde_create_func_info is provided by libsframe. Current - users are the bfd linker. Adjust the argument type for the variables - carrying the SFrame FRE type and SFrame FDE type to consistenly use - uint32_t type alias. - - include/ - * sframe-api.h (sframe_fde_create_func_info): Use uint32_t - instead of unsigned int. - libsframe/ - * sframe.c (sframe_get_fre_type): Likewise. - (sframe_get_fde_type): Likewise. - (flip_fre_start_address): Likewise. - (sframe_fre_start_addr_size): Likewise. - (sframe_fre_entry_size): Likewise. - (flip_fre): Likewise. - (flip_sframe): Likewise. - (sframe_fde_create_func_info): Likewise. - (sframe_calc_fre_type): Likewise. - (sframe_decode_fre_start_address): Likewise. - (sframe_decode_fre): Likewise. - (sframe_find_fre): Likewise. - (sframe_decoder_get_fre): Likewise. - (sframe_encoder_add_fre): Likewise. - (sframe_encoder_write_fre_start_addr): Likewise. - (sframe_encoder_write_fre): Likewise. - (sframe_encoder_write_sframe): Likewise. - -2023-06-27 Indu Bhagat - - libsframe: update the semantics of sframe_fre_get_fp_offset - Until now, sframe_fre_get_fp_offset () would return - SFRAME_ERR_FREOFFSET_NOPRESENT if the ABI uses fixed FP offset. A stack - tracer, then, would call an explicit sframe_decoder_get_fixed_fp_offset () - to get the FP offset. - - On second look, it appears to make sense to hide these details of - whether the FP offset is fixed or not in an ABI from the consumer. Now, - with the changed semantics, the call to sframe_fre_get_fp_offset () will - fetch the fixed FP offset if applicable, or get the FP offset from FRE - when there is no fixed FP offset. - - This patch changes the behavior of sframe_fre_get_fp_offset (): it turns - an error into non-error. This change will be included with the next - release of libsframe, where all the exposed symbols will be versioned - with version node LIBSFRAME_1.0 for the first time. - - libsframe/ - * sframe.c (sframe_fre_get_fp_offset): Return the fixed offset, if - applicable. Else return the FP offset from the FRE. - -2023-06-27 Indu Bhagat - - libsframe: update the semantics of sframe_fre_get_ra_offset - Until now, sframe_fre_get_ra_offset () would return - SFRAME_ERR_FREOFFSET_NOPRESENT if the ABI uses fixed RA offset (e.g., - AMD64). A stack tracer, then, will call an explicit - sframe_decoder_get_fixed_ra_offset () to get the RA offset. - - On second look, it appears to make sense to hide these details of - whether the RA offset is fixed or not from the consumer. Now, with the - changed semantics, the call to sframe_fre_get_ra_offset () will fetch - the fixed RA offset if applicable, or get the RA offset from FRE when - there is no fixed RA offset. - - Adjustments need to be made to ensure the textual dump remains the same - as preivous. Currently, e.g., if RA is not being tracked per FRE, - following is seen with objdump --sframe: - - STARTPC CFA FP RA - 000000000000NNNN sp+X u u - - This patch changes the behavior of sframe_fre_get_ra_offset: it turns an - error into non-error. This change will be included with the next - release of libsframe, where all exposed symbols will be versioned for - the first time. - - libsframe/ - * sframe.c (sframe_fre_get_ra_offset): Return the fixed offset, - if applicable. Else return the RA offset from the FRE. - * sframe-dump.c (dump_sframe_func_with_fres): Make adjustments - to keep the textual dump same as previous. - -2023-06-27 Indu Bhagat - - libsframe: add symbol versioning - Define an empty base version LIBSFRAME_0.0 and add all symbols to - version LIBSFRAME_1.0. - - The previous release of libsframe (libsframe.so.0) did not have - versioned symbols. Adding a libsframe.ver file so that future releases - of the library (and its consumers) can manage the changes better. - - For Solaris ld, use -M mapfile command line option. libsframe does not - restrict the set of exported symbols, so at this time there is no need - to fall back on the libtool's -export-symbols option for platforms where - some other linker (with a different command line option for symbol - versioning) may be used. - - libsframe/ - * Makefile.am: Use symbol versioning for libsframe. - * Makefile.in: Regenerated. - * configure: Check for Solaris ld. - * configure.ac: Regenerated. - * libsframe.ver: New file. - -2023-06-27 Indu Bhagat - - libsframe: remove sframe_get_funcdesc_with_addr API - This is an incompatible ABI change in libsframe. - - The interface provided by this function is not a healthy abstraction to - expose: the return type sframe_func_desc_entry, which is defined in - include/sframe.h (the SFrame binary format definition). This ties up - the library in a undesirable way. Most importantly, this function - should technically not be directly necessary for a stack tracer. A - stack tracer will likely only need to do a sframe_find_fre (). - - Rename the API to continue to use the functionality internally in the - library. bfd/linker does not use this function. - - Change the return type of the previous definition and make a note about - its planned deprecation. - - include/ - * sframe-api.h: Change return type of sframe_get_funcdesc_with_addr. - Add comment for intention to deprecate. - libsframe/ - *sframe.c (sframe_get_funcdesc_with_addr): Change return type - and set error code. This API is deprecated. - (sframe_get_funcdesc_with_addr_internal): New definition for - internal use. - (sframe_find_fre): Use sframe_get_funcdesc_with_addr_internal - instead. - -2023-06-27 Indu Bhagat - - libsframe: add library versioning - lisbframe was first released with Bintuils 2.40. As the library - evolves, some changes will break the ABI. Add library versioning for - users to manage these changes. - - For the next release of the library (libsframe.so.1), incompatible ABI - changes are planned. These will include: - - Deprecation of some APIs, like sframe_get_funcdesc_with_addr (), and - - Change in the contract of some APIs (e.g., return type, behavior). - - In libtool-version, set the current to 1 to prepare for the upcoming - release. Reset revision and age to 0. - - Add libtool-version file to EXTRA_DIST. - - libsframe/ - * Makefile.am: Use libtool versioning. - * Makefile.in: Regenerated. - * libtool-version: New file. - -2023-06-27 Philipp Tomsich - - RISC-V: Support Zicond extension - This implements the Zicond (conditional integer operations) extension, - as of version 1.0-rc2. - - The Zicond extension acts as a building block for branchless sequences - including conditional-arithmetic, conditional-logic and - conditional-select/move. - The following instructions constitute Zicond: - - czero.eqz rd, rs1, rs2 => rd = (rs2 == 0) ? 0 : rs1 - - czero.nez rd, rs1, rs2 => rd = (rs2 != 0) ? 0 : rs1 - - See - https://github.com/riscv/riscv-zicond/releases/download/v1.0-rc2/riscv-zicond-v1.0-rc2.pdf - for the proposed specification and usage details. - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_multi_subset_supports): Recognize - INSN_CLASS_ZICOND. - (riscv_multi_subset_supports_ext): Recognize INSN_CLASS_ZICOND. - - gas/ChangeLog: - - * testsuite/gas/riscv/zicond.d: New test. - * testsuite/gas/riscv/zicond.s: New test. - - include/ChangeLog: - - * opcode/riscv-opc.h (MATCH_CZERO_EQZ): Define. - (MASK_CZERO_EQZ): Define. - (MATCH_CZERO_NEZ): Define, - (MASK_CZERO_NEZ): Define. - (DECLARE_INSN): Add czero.eqz and czero.nez. - * opcode/riscv.h (enum riscv_insn_class): Add - INSN_CLASS_ZICOND. - - opcodes/ChangeLog: - - * riscv-opc.c: Add czero.eqz and czero.nez. - - Signed-off-by: Philipp Tomsich - -2023-06-27 Nick Clifton - - Add note about adding ChangeLog.git to src-release.sh - -2023-06-27 Cui, Lili - - gprofng: Update intel url - Since the old software.intel.com has been removed, update a new one. - - gprofng/ChangeLog - 2023-06-27 Lili Cui - - * gp-display-html/gp-display-html.in: Update intel url. - -2023-06-27 GDB Administrator - - Automatic date update in version.in - -2023-06-26 Nick Clifton - - Fix gas tests for aarch64-pe - - Synchromize libiberty sources with master version in gcc repository - - Sync config.guess and config.sub with upstream master versions. - - Updated French translation for the gprof sub-directory - -2023-06-26 GDB Administrator - - Automatic date update in version.in - -2023-06-25 Feiyang Chen - - LoongArch: Support referring to FCSRs as $fcsrX - Previously, FCSRs were referred to as $rX, which seemed strange. - We refer to FCSRs as $fcsrX, which ensures compatibility with LLVM - IAS as well. - - gas/ChangeLog: - - * config/tc-loongarch.c: - (loongarch_fc_normal_name): New definition. - (loongarch_fc_numeric_name): New definition. - (loongarch_single_float_opcodes): Modify `movgr2fcsr` and - `movfcsr2gr`. - testsuite/gas/loongarch/float_op.d: Likewise. - testsuite/gas/loongarch/float_op.s: Likewise. - - include/ChangeLog: - - * opcode/loongarch.h: - (loongarch_fc_normal_name): New extern. - (loongarch_fc_numeric_name): New extern. - - opcodes/ChangeLog: - - * opcodes/loongarch-dis.c (loongarch_after_parse_args): Support - referring to FCSRs as $fcsrX. - * opcodes/loongarch-opc.c (loongarch_args_parser_can_match_arg_helper): - Likewise. - -2023-06-25 GDB Administrator - - Automatic date update in version.in - -2023-06-24 GDB Administrator - - Automatic date update in version.in - -2023-06-23 Thiago Jung Bauermann - - gdb/testsuite: Avoid infinite loop in gdb.reverse/step-reverse.exp - This testcase sometimes gets stuck in a loop for hours when running in our - CI. The problem is that due to an issue unrelated to reverse debugging the - inferior exits early, and because of the overly generic ".*" pattern the - testcase keeps sending the "next" command without noticing that the - inferior is gone. - - gdb_test_multiple has a pattern to detect that "The program is not being - run.", but since it is placed after the patterns from the caller it won't - be triggered. It also has a timeout pattern but because it is triggered - between successful matches, each time the test matches the '-re -wrap ".*"' - this counts as a successful match and the timeout is reset. - - Since the test binary is compiled with debug information, fix by changing - one of the generic patterns to match entering the main function and the - other one to match the source code line number that is shown by GDB right - after the "step" command. - - Also, as a precaution add a maximum number of times the "next" command will - be sent. - - Co-Authored-By: Tom de Vries - Reviewed-By: Bruno Larsen - Approved-By: Tom de Vries - -2023-06-23 Alan Modra - - [GOLD] PowerPC64 huge branch dynamic relocs - PowerPC64 gold and ld.bfd implement an indirect branch trampoline, - used when the destination of a branch exceeds a bounce through another - "b" instruction. When generating PIEs or shared libraries, the - addresses need dynamic relocations. This was implemented in gold - using a dedicated relocation section, but this means the relative - relocations for these addresses are not sorted properly with other - dynamic relative relocations: gold doesn't support merging relocation - sections, then sorting. Instead we need to use a single .rela.dyn - section. - - This is done by increasing the size of rela_dyn_ during do_relax to - account for needed dynamic relocations, delaying adding the actual - relocations until the end of relaxation once the layout has - stabilised. - - * powerpc.cc (Target_powerpc): Add rela_dyn_size_; - (update_current_size): New function. - (Target_powerpc::do_relax): Capture the size of rela_dyn_ at - the start of relaxation. Artifically increase its size during - relaxation to account for needed indirect branches, and add - those relocations at the end. - (Output_data_brlt_powerpc::rel_, reset_brlt_sizes), - (finalize_brlt_sizes, add_reloc, set_current_size): Delete. - (Target_powerpc::make_brlt_section): Don't make reloc section. - -2023-06-23 Alan Modra - - [GOLD] Support setting DT_RELACOUNT late - PowerPC gold adds relative dynamic relocs in do_relax. These aren't - accounted for in the value set in add_target_dynamic_tags, which is - called before do_relax. Provide a way of setting DT_RELCOUNT and - DT_RELACOUNT at the point where .dynamic is written. - - * layout.cc (Layout::add_target_dynamic_tags): Add custom_relcount - parameter. Emit DT_RELCOUNT/RELACOUNT as a custom target handled - dynamic tag if set. - * layout.h(Layout::add_target_dynamic_tags): Update prototype. - * aarch64.cc (Target_aarch64::do_finalize_sections): Adjust - add_target_dynamic_tags call. - * arm.cc (Target_arm::do_finalize_sections): Likewise. - * i386.cc (Target_i386::do_finalize_sections): Likewise. - * mips.cc (Target_mips::do_finalize_sections): Likewise. - * s390.cc (Target_s390::do_finalize_sections): Likewise. - * sparc.cc (Target_sparc::do_finalize_sections): Likewise. - * tilegx.cc (Target_tilegx::do_finalize_sections): Likewise. - * x86_64.cc (Target_x86_64::do_finalize_sections): Likewise. - * powerpc.cc (Target_powerpc::do_finalize_sections): Likewise. - (Target_powerpc::do_dynamic_tag_custom_value): New function. - -2023-06-23 Alan Modra - - [GOLD] powerpc DT_RELACOUNT - DT_RELACOUNT was calculated incorrectly, and relative relocs not - sorted as they should be to the start of .rela.dyn, due to adding one - particular class of dynamic reloc using the wrong "add" method. - - * powerpc.cc (Target_powerpc::Scan::global): Add relative - dyn relocs for ADDR64 and similar using add_global_relative. - -2023-06-23 Alan Modra - - lto test fails with -fno-inline in CFLAGS - Putting -fno-inline in CFLAGS results in these failures. - FAIL: Build liblto-17b.so 1 - FAIL: PR ld/12365 - FAIL: PR ld/13183 - - * ld-plugin/lto.exp: Add -finline to compiler flags in some tests. - -2023-06-23 Tom Tromey - - Fix off-by-one error - Simon pointed out that commit a2bbca9fa5e ("Use std::vector for - agent_expr::reg_mask") caused a regression in libstdc++ debug mode. - This was due to an off-by-one error in a vector resize. This patch - fixes the problem. - -2023-06-23 GDB Administrator - - Automatic date update in version.in - -2023-06-22 Ilya Leoshkevich - - gdb/testsuite: fix gdb.python/py-unwind.exp with python >= 3.11 - Python 3.11 changed the AttributeError message - see commit - 0cb765b2cec9 ("bpo-46730: Add more info to @property AttributeError - messages (GH-31311)"). Add the new message to the expectations. - - Approved-By: Tom Tromey - Link: https://sourceware.org/pipermail/gdb-patches/2023-June/200433.html - -2023-06-22 H.J. Lu - - Revert "x86: Don't check if AVX512 template requires AVX512VL" - This reverts commit c7face14225296a2f5d3ebeb8ace88c166d80c3e. - -2023-06-22 Tom de Vries - - [gdb/testsuite] Clean or check standard_output_file dir in gdb_init - In commit e2adba909e7 ("[gdb/testsuite] Clean up before compilation in - gdb.ada/call-no-debug.exp") I added some code in the test-case to remove some - files at the start of the test-case: - ... - remote_file host delete [standard_output_file prog.o] - remote_file host delete [standard_output_file prog.ali] - ... - - Then in commit b7b77500dc5 ("[gdb/testsuite] Clean standard_output_file dir in - gdb_init") I tried to do this more structurally, by cleaning up the entire - standard_output_file directory, for all test-cases. - - This caused a regression when using "make check -j 2", due to the cleanup - removing the active gdb.log, so I reverted the commit. - - Try again, this time handling the two cases separately. - - If the standard_output_file directory contains an active gdb.log, check that - the directory contains no files other than gdb.log and gdb.sum. This puts - the reponsibility for the cleanup at the callers in gdb/testsuite/Makefile.in - which use --outdir. - - If the standard_output_file directory doesn't contain an active gdb.log, clean - it by removing the entire directory. - - An exception is made for performance tests, where cleaning up the - standard_output_file dir is the wrong thing to do, because an invocation with - GDB_PERFTEST_MODE == run is intended to reuse binaries left there by an - earlier invocation with GDB_PERFTEST_MODE == compile. - - Tested on x86_64-linux. - - Suggested-By: Tom Tromey - Reviewed-By: Tom Tromey - Tested-By: Luis Machado - -2023-06-22 Tom Tromey - - Implement DAP "hover" context - A DAP client can request that an expression be evaluated in "hover" - context, meaning that it should not cause side effects. In gdb, this - can be implemented by temporarily setting a few "may-" parameters to - "off". - - In order to make this work, I had to also change "may-write-registers" - so that it can be changed while the program is running. I don't think - there was any reason for this prohibition in the first place. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30476 - -2023-06-22 Tom Tromey - - Implement DAP logging breakpoints - DAP allows a source breakpoint to specify a log message. When this is - done, the breakpoint acts more like gdb's dprintf: it logs a message - but does not cause a stop. - - I looked into implement this using dprintf with the new %V printf - format. However, my initial attempt at this did not work, because - when the inferior is continued, the dprintf output is captured by the - gdb.execute call. Maybe this could be fixed by having all - inferior-continuation commands use the "&" form; the main benefit of - this would be that expressions are only parsed a single time. - -2023-06-22 Tom Tromey - - Handle supportsVariablePaging in DAP - A bug report about the supportsVariablePaging capability in DAP - resulted in a clarification: when this capability is not present, DAP - implementations should ignore the paging parameters to the "variables" - request. This patch implements this clarification. - - Implement type checking for DAP breakpoint requests - I realized that with a small refactoring, it is possible to type-check - the parameters to the various DAP breakpoint requests. This would - have caught the earlier bug involving hitCondition. - - Handle exceptions when creating DAP breakpoints - When creating a DAP breakpoint, a failure should be returned by - setting "verified" to False. gdb didn't properly implement this, and - there was a FIXME comment to this effect. This patch fixes the - problem. - - Reuse breakpoints more frequently in DAP - The DAP breakpoint code tries to reuse a breakpoint when possible. - Currently it uses the condition and the hit condition (aka ignore - count) when making this determination. However, these attributes are - just going to be reset anyway, so this patch changes the code to - exclude these from the reuse decision. - - Fix type of DAP hitCondition - DAP specifies a breakpoint's hitCondition as a string, meaning it is - an expression to be evaluated. However, gdb implemented this as if it - were an integer instead. This patch fixes this oversight. - -2023-06-22 Simon Farre - - gdb/DAP Few bug fixes & Evaluate Array Watch vars - v2. - - EvaluateResult does not need a name, just as what Tom pointed out in - previous review. It's only the *children* that need to be made sure that - their names are valid. An identifier for a variable, can't ever have an - integer as a name, anyhow (not as far as I am aware, no programming - languages allow for that). - - Removed the f-strings and use str() instead as pointed out that - f-strings might not be supported fully. - - v1. - - This patch fixes a few bugs. - - First of all, name of VariableReferences must always be of string type. - This patch makes sure that this is the case by formatting the name. If - (when) the name is an integer, this will cause clients to fail or throw - errors. - - Fixes a bug in NoOpArrayPrinter that calculated children to be N, but - only ever retrieves N-1 children, which makes Python at some time later - (during fetch_children -> fetch_one_child(N) ) raise an exception (out - of list index) which makes the entire request go bad. - - The result[self.result_name] also f-strings the printer.to_string() - value, because this can potentially be a LazyString (which is a Python - object, not a string) and is not serializable by json.dumps. - - Approved-By: Tom Tromey - -2023-06-22 GDB Administrator - - Automatic date update in version.in - -2023-06-21 H.J. Lu - - x86: Free the symbol buffer and the relocation buffer after use - When --no-keep-memory is used, the symbol buffer and the relocation - buffer aren't cached. When packing relative relocations, we may - allocate a new symbol buffer and a new relocation buffer for each - eligible section in an object file. If there are many sections, - memory may be exhausted. In this case, we should free the symbol - buffer and the relocation buffer after use. If symbol buffer entries - are used to track relative relocations against local symbols for later - use, the symbol buffer should be cached. - - PR ld/30566 - * elfxx-x86.c (elf_x86_relative_reloc_record_add): Add an - argument to inform caller if the symbol buffer should be kept. - (_bfd_x86_elf_link_relax_section): Call - _bfd_elf_link_info_read_relocs instead of - _bfd_elf_link_read_relocs. Free the symbol buffer and the - relocation buffer after use. Cache the symbol buffer if it - is used. - -2023-06-21 Tom Tromey - - Add missing backslash to update-gnulib.sh - A user on irc noticed a missing backslash on one line in - update-gnulib.sh. This patch adds it. - - Re-running update-gnulib.sh causes a few copyright notices to change. - Presumably these are from upstream gnulib and shouldn't be touched by - our yearly update. I've updated the script to account for this, but I - did not want to try testing it... - -2023-06-21 Tom de Vries - - [gdb/testsuite] Add have_host_locale - With test-case gdb.tui/pr30056.exp, I run into: - ... - sh: warning: setlocale: LC_ALL: cannot change locale (C.UTF-8)^M - ... - and then subsequently into: - ... - WARNING: timeout in accept_gdb_output - FAIL: gdb.tui/pr30056.exp: Control-C - ... - - This is on a CentOS 7 distro for powerpc64le. - - Either it has no C.UTF-8 support, or it's not installed: - ... - $ locale -a | grep ^C - C - $ - ... - - Fix this by: - - adding a new proc have_host_locale, and - - using it in all test-cases using setenv LC_ALL. - - Tested on powerpc64le-linux and x86_64-linux. - -2023-06-21 Tom de Vries - - [gdb/testsuite] Fix gdb.tui/wrap-line.exp - PR testsuite/30458 reports the following FAIL: - ... - PASS: gdb.tui/wrap-line.exp: width-auto-detected: cli: wrap - ^CQuit - (gdb) WARNING: timeout in accept_gdb_output - Screen Dump (size 50 columns x 24 rows, cursor at column 6, row 3): - 0 Quit - 1 (gdb) 7890123456789012345678901234567890123456789 - 2 W^CQuit - 3 (gdb) - ... - FAIL: gdb.tui/wrap-line.exp: width-auto-detected: cli: prompt after wrap - ... - - The problem is that the regexp doesn't account for the ^C: - ... - gdb_assert { [Term::wait_for "^WQuit"] } "prompt after wrap" - ... - - The ^C occurs occasionally. This is something we'd like to fix. It's - reported as a readline problem here ( - https://lists.gnu.org/archive/html/bug-readline/2023-06/msg00000.html ). - - For now, fix this by updating the regexp, and likewise in another place in the - test-case where we use ^C. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30458 - -2023-06-21 Alan Modra - - PR30536, ppc64el gold linker produces unusable clang-16 binary - In commit 0961e631575b, the fix for PR30217, make_lplt_section and - make_brlt_section were changed to use rela_dyn_ rather than their own - separate dynamic reloc sections. This fails miserably whenever brlt_ - is needed for long branches, due to needing to iterate sizing and thus - reset brlt_ sizes. - - PR 30536 - PR 30217 - * powerpc.cc (Target_powerpc::make_brlt_section): Don't use - rela_dyn_. - -2023-06-21 Tom de Vries - - [gdb/testsuite] Reimplement Term::command_no_prompt_prefix - Say we run test-case gdb.tui/basic.exp. It calls Term::enter_tui, which does: - ... - command_no_prompt_prefix "tui enable" - ... - - The proc command_no_prompt_prefix is documented as: - ... - # As proc command, but don't wait for an initial prompt. This is used for - # initial terminal commands, where there's no prompt yet. - ... - - Indeed, before the "tui enable" command, the tuiterm is empty, so there is no - prompt and just before switching to TUI we have in the tuiterm: - ... - tui enable - ... - - The reason that there is no prompt, is that: - - in order for tuiterm to show something, its input processing procs need to - be called, and - - the initial gdb prompt, and subsequent prompts generated by gdb_test-style - procs, are all consumed by those procs instead. - - This is in principle not a problem, but the absence of a prompt makes a - tuiterm session look less like a session on an actual xterm. - - Add a new proc gen_prompt, that: - - generates a prompt using echo - - consumes the response before the prompt using gdb_expect - - consumes the prompt using Term::wait_for "". - - This allows us to reimplement Term::command_no_prompt_prefix using - Term::command, and just before switching to TUI we have in the tuiterm: - ... - (gdb) tui enable - ... - - Tested on x86_64-linux. - -2023-06-21 Tom de Vries - - [gdb/testsuite] Make Term::wait_for "" match only a prompt - The semantics of Term::wait_for is: - ... - # Accept some output from gdb and update the screen. WAIT_FOR is - # a regexp matching the line to wait for. Return 0 on timeout, 1 - # on success. - proc wait_for {wait_for} { - ... - - Note that besides the regexp, also a subsequent gdb prompt is matched. - - I recently used wait_for "" in a few test-cases, thinking that this would - match just a prompt, but in fact that's not the case. - - Fix this in wait_for, and add a corresponding test in gdb.tui/tuiterm-2.exp. - - Tested on x86_64-linux. - -2023-06-21 Nick Clifton - - Prune linker warnings about an executable stack being created with the -z execstack option. - * testsuite/lib/binutils-common.exp (prune_warnings_extra): Prune warnings about -z execstack creating an executable stack. - - For test for PR 29072 when the linker is configured with --enable-default-execstack=no. - PR 29072 - * testsuite/ld-elf/elf.exp (target_defaults_to_execstack): Always return false for linkers configured with the --enable-default-execstack=no option. - -2023-06-21 Tankut Baris Aktemur - - gdbserver: use target_waitstatus::to_string in 'prepare_resume_reply' - Use the to_string method of target_waitstatus in - 'prepare_resume_reply' for a more readable log message. - - Approved-By: Tom Tromey - -2023-06-21 Jan Beulich - - x86: fix expansion of %XV - Only %LV should continue on to S handling; avoid emitting a stray 'l' - (typically) in suffix-always mode. - -2023-06-21 Alan Modra - - elf32_arm_get_synthetic_symtab memory leak - ARM get_synthetic_symtab reads .plt and caches that data. Caching the - data doesn't make a lot of sense since get_synthetic_symtab is only - called once per bfd, and the memory might be put to better use. It - also leaks on closing the bfd. - - * elf32-arm.c (elf32_arm_get_synthetic_symtab): Don't cache - plt contents. Free plt data before returning. - -2023-06-21 Alan Modra - - macho-o.c don't leak strtab - * mach-o.c (bfd_mach_o_write_symtab_content): Free strtab on - success path. - -2023-06-21 GDB Administrator - - Automatic date update in version.in - -2023-06-20 Tom Tromey - - Use ARRAY_SIZE in ax-general.c - This changes a couple of spots in ax-general.c to use ARRAY_SIZE. - While making this change, I noticed that one of the bounds checks was - incorrect. - - Reviewed-by: John Baldwin - -2023-06-20 Tom Tromey - - Remove aop_last - aop_last is only used for an assertion. However, due to the '.def' - construct in the sources, this assert could never plausibly trigger - (the assert predates the use of a .def file here). This patch removes - the constant and the assert. - - Reviewed-by: John Baldwin - -2023-06-20 Tom Tromey - - Make aop_map 'static' - This changes aop_map to be 'static'. - - Reviewed-by: John Baldwin - -2023-06-20 Tom Tromey - - Use bool for agent_expr::tracing - This changese agent_expr::tracing to have type bool, allowing inline - initialization and cleaning up the code a little. - - Reviewed-by: John Baldwin - -2023-06-20 Tom Tromey - - Simplify agent_expr constructor - This simplifies the agent_expr constructor a bit, and removes the - destructor entirely. - - Reviewed-by: John Baldwin - -2023-06-20 Tom Tromey - - Use std::vector for agent_expr::reg_mask - agent_expr::reg_mask implements its own packed boolean vector. This - patch replaces it with a std::vector, simplifying the code. - - Reviewed-by: John Baldwin - -2023-06-20 Tom Tromey - - Use gdb::byte_vector in agent_expr - This changes agent_expr to use gdb::byte_vector rather than manually - reimplementing a vector. - - Reviewed-by: John Baldwin - -2023-06-20 Tom Tromey - - Remove mem2hex - tracepoint.c has a 'mem2hex' function that is functionally equivalent - to bin2hex. This patch removes the redundancy. - - Reviewed-by: John Baldwin - -2023-06-20 H.J. Lu - - x86: Don't check if AVX512 template requires AVX512VL - If the ZMM operand in an AVX12 template also allows XMM or ZMM, this - template must require AVX512VL. Drop the AVX512VL requirement check - on such AVX512 templates. - - * config/tc-i386.c (check_VecOperands): Don't check if AVX512 - template requires AVX512VL. - -2023-06-20 Tom Tromey - - Use std::string in do_set_command - do_set_command manually updates a string, only to copy it to a - std::string and free the working copy. This patch changes this code - to use std::string for everything, simplifying the code and removing a - copy. - - Reviewed-by: John Baldwin - -2023-06-20 Tom Tromey - - Use byte_vector in remote.c:readahead_cache - This patch changes the remote.c readahead_cache to use - gdb::byte_vector. This simplifies the code by removing manual memory - management. - - Reviewed-by: John Baldwin - -2023-06-20 Tom Tromey - - Use std::string in linux-osdata.c - I found some code in linux-osdata that manually managed a string. - Replacing this with std::string simplifies it. - - Reviewed-by: John Baldwin - -2023-06-20 Tom Tromey - - Use unique_xmalloc_ptr for mi_parse::command - This changes mi_parse::command to be a unique_xmalloc_ptr and fixes up - all the uses. This avoids some manual memory management. std::string - is not used here due to how the Python API works -- this approach - avoids an extra copy there. - - Reviewed-by: Keith Seitz - -2023-06-20 Tom Tromey - - Use std::string for MI token - This changes the MI "token" to be a std::string, removing some manual - memory management. It also makes current_token 'const' in order to - support this change. - - Reviewed-by: Keith Seitz - -2023-06-20 Alan Modra - - Don't segfault in mips reloc special_functions - A symbol defined in a section from a shared library will have a NULL - section->output_section during linking. - - * elf32-mips.c (gprel32_with_gp): Don't segfault on NULL - symbol->section->output_section. - * elf64-mips.c (mips_elf64_gprel32_reloc): Likewise. - * elfn32-mips.c (mips_elf_gprel16_reloc): Likewise. - (mips_elf_literal_reloc, mips_elf_gprel32_reloc): Likewise. - (gprel32_with_gp, mips16_gprel_reloc): Likewise. - * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Likewise. - (_bfd_mips_elf_generic_reloc): Likewise. - -2023-06-20 GDB Administrator - - Automatic date update in version.in - -2023-06-19 Tom de Vries - - Revert "[gdb/testsuite] Clean standard_output_file dir in gdb_init" - This reverts commit b7b77500dc56e5bc21473dd4f3dde2543d894557. - -2023-06-19 Simon Farre - - Fixes 28ab59607ef40b9571c0702ffba8f6aa6fb1b033 - Python formatting errors fixed, introduced by this commit. - - Fixes f1a614dc8f015743e9fe7fe5f3f019303f8db718 - Fixes failure reported by buildbot regarding ill-formatted Python code. - -2023-06-19 Simon Farre - - gdb/Python: Added ThreadExitedEvent - v6: - Fix comments. - Fix copyright - Remove unnecessary test suite stuff. save_var had to stay, as it mutates - some test suite state that otherwise fails. - - v5: - Did what Tom Tromey requested in v4; which can be found here: https://pi.simark.ca/gdb-patches/87pmjm0xar.fsf@tromey.com/ - - v4: - Doc formatting fixed. - - v3: - Eli: - Updated docs & NEWS to reflect new changes. Added - a reference from the .ptid attribute of the ThreadExitedEvent - to the ptid attribute of InferiorThread. To do this, - I've added an anchor to that attribute. - - Tom: - Tom requested that I should probably just emit the thread object; - I ran into two issues for this, which I could not resolve in this patch; - - 1 - The Thread Object (the python type) checks it's own validity - by doing a comparison of it's `thread_info* thread` to nullptr. This - means that any access of it's attributes may (probably, since we are - in "async" land) throw Python exceptions because the thread has been - removed from the thread object. Therefore I've decided in v3 of this - patch to just emit most of the same fields that gdb.InferiorThread has, namely - global_num, name, num and ptid (the 3-attribute tuple provided by - gdb.InferiorThread.ptid). - - 2 - A python user can hold a global reference to an exiting thread. Thus - in order to have a ThreadExit event that can provide attribute access - reliably (both as a global reference, but also inside the thread exit - handler, as we can never guarantee that it's executed _before_ the - thread_info pointer is removed from the gdbpy thread object), - the `thread_info *` thread pointer must not be null. However, this - comes at the cost of gdb.InferiorThread believing it is "valid" - which means, - that if a user holds takes a global reference to that - exiting event thread object, they can some time later do `t.switch()` at which - point GDB will 'explode' so to speak. - - v2: - Fixed white space issues and NULL/nullptr stuff, - as requested by Tom Tromey. - - v1: - Currently no event is emitted for a thread exit. - - This adds this functionality by emitting a new gdb.ThreadExitedEvent. - - It currently provides four attributes: - - global_num: The GDB assigned global thread number - - num: the per-inferior thread number - - name: name of the thread or none if not set - - ptid: the PTID of the thread, a 3-attribute tuple, identical to - InferiorThread.ptid attribute - - Added info to docs & the NEWS file as well. - - Added test to test suite. - - Fixed formatting. - - Feedback wanted and appreciated. - -2023-06-19 Simon Farre - - gdb/dap - Getting thread names - Renamed thread_name according to convention (_ first) - - When testing firefox tests, it is apparent that - _get_threads returns threads with name field = None. - - I had initially thought that this was due to Firefox setting the names - using /proc/pid/task/tid/comm, by writing directly to the proc fs the - names, but apparently GDB seems to catch this, because I re-wrote - the basic-dap.exp/c to do this specifically and it saw the changes. - - So I couldn't determine right now, what operation of name change that - GDB does not pick up, but with this patch, GDB will pick up the thread - names for an applications that set the name of a thread in ways that - aren't obvious. - -2023-06-19 Nick Clifton - - Fix illegal memory access implementing relocs in a fuzzed x86_64 object file. - PR 30560 - * elf64-x86-64.c (elf_x86_64_relocate_section): Add more checks for a valid relocation offset. - -2023-06-19 Tom de Vries - - [gdb/testsuite] Add shared_gnat_runtime_has_debug_info - Test-case gdb.ada/catch_ex_std.exp passes for me with package - libada7-debuginfo installed, but after removing it I get: - ... - (gdb) catch exception some_kind_of_error^M - Your Ada runtime appears to be missing some debugging information.^M - Cannot insert Ada exception catchpoint in this configuration.^M - (gdb) FAIL: gdb.ada/catch_ex_std.exp: catch exception some_kind_of_error - ... - - The test-case contains a require gnat_runtime_has_debug_info to deal with - this, but the problem is that this checks the static gnat runtime, while this - test-case uses the shared one. - - Fix this by introducing shared_gnat_runtime_has_debug_info, and requiring that - one instead. - - Tested on x86_64-linux. - - PR testsuite/30094 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30094 - -2023-06-19 Tom de Vries - - [gdb/tui] Simplify tui_update_variables - Simplify tui_update_variables by using template function - assign_return_if_changed. - - Tested on x86_64-linux. - -2023-06-19 Tom de Vries - - [gdb] Add template functions assign_return/set_if_changed - Add template functions assign_return_if_changed and assign_set_if_changed in - gdb/utils.h: - ... - template void assign_set_if_changed (T &lval, const T &val, bool &changed) - { ... } - template bool assign_return_if_changed (T &lval, const T &val) - { ... } - ... - - This allows us to rewrite code like this: - ... - if (tui_border_attrs != entry->value) - { - tui_border_attrs = entry->value; - need_redraw = true; - } - ... - into this: - ... - need_redraw |= assign_return_if_changed (tui_border_attrs, entry->value); - ... - or: - ... - assign_set_if_changed (tui_border_attrs, entry->value, need_redraw); - ... - - The names are a composition of the functionality. The functions: - - assign VAL to LVAL, and either - - return true if the assignment changed LVAL, or - - set CHANGED to true if the assignment changed LVAL. - - Tested on x86_64-linux. - -2023-06-19 Andreas Schwab - - riscv: Use run-time endianess for floating point literals - gas/ - PR binutils/30551 - * config/tc-riscv.c (md_atof): Use target_big_endian instead of - TARGET_BYTES_BIG_ENDIAN. - * testsuite/gas/riscv/float-be.d: New file. - * testsuite/gas/riscv/float-le.d: New file. - * testsuite/gas/riscv/float.s: New file. - -2023-06-19 GDB Administrator - - Automatic date update in version.in - -2023-06-18 Tom de Vries - - [gdb/testsuite] Clean standard_output_file dir in gdb_init - In commit e2adba909e7 ("[gdb/testsuite] Clean up before compilation in - gdb.ada/call-no-debug.exp") I added some code in the test-case to remove some - files at the start of the test-case: - ... - remote_file host delete [standard_output_file prog.o] - remote_file host delete [standard_output_file prog.ali] - ... - - Replace this with cleaning up the entire directory instead, for all - test-cases. - - Tested on x86_64-linux. - - Suggested-By: Tom Tromey - Reviewed-By: Tom Tromey - -2023-06-18 GDB Administrator - - Automatic date update in version.in - -2023-06-17 Tom de Vries - - [gdb/testsuite] Remove f-string in gdb.python/py-unwind.py - on openSUSE Leap 42.3, with python 3.4, I run into a - "SyntaxError: invalid syntax" due to usage of an f-string in test-case - gdb.python/py-unwind.py. - - Fix this by using string concatenation using '+' instead. - - Tested on x86_64-linux. - -2023-06-17 Tom de Vries - - [gdb/testsuite] Add nopie in a few test-cases - When running test-case gdb.arch/i386-disp-step.exp with target board - unix/-m32/-fPIE/-pie we run into: - ... - gdb compile failed, ld: i386-disp-step0.o: warning: relocation in read-only section `.text' - ld: warning: creating DT_TEXTREL in a PIE - ... - - Fix this by adding nopie in the compilation flags. - - Likewise in a few other test-cases. - - Tested on x86_64-linux. - -2023-06-17 Tom de Vries - - [gdb/testsuite] Use require in gdb.dwarf2/implptr.exp - In test-case gdb.dwarf2/implptr.exp I noticed: - ... - } elseif {![is_x86_like_target]} { - # This test can only be run on x86 targets. - unsupported "needs x86-like target" - return 0 - } - ... - - Use instead "require is_x86_like_target". - - Tested on x86_64-linux. - -2023-06-17 GDB Administrator - - Automatic date update in version.in - -2023-06-16 Tom de Vries - - [gdb/testsuite] Clean up before compilation in gdb.ada/call-no-debug.exp - Running test-case gdb.ada/call-no-debug.exp with target board unix/-m64 works - fine, but if we run it again with target board unix-m32, we run into: - ... - gnatlink prog.ali -m32 -g -o prog^M - ld: i386:x86-64 architecture of input file `b~prog.o' is incompatible with \ - i386 output^M - ... - - This is due to compiling with no-force. - - The test-case: - - first compiles pck.adb into pck.o (without debug info), and - - then compiles prog.adb and pck.o into prog (with debug info). - - Using no-force in the second compilation make sure that pck.adb is not - compiled again, with debug info. - - But it also means it will pick up intermediate files related to prog.adb from - a previous compilation. - - Fix this by removing prog.o and prog.ali before compilation. - - Tested on x86_64-linux. - -2023-06-16 Tom de Vries - - [gdb/testsuite] Use %progbits in gdb.arch/thumb*.S - In commit 0f2cd53cf4f ("[gdb/testsuite] Handle missing .note.GNU-stack") I - updated a gdb.arch/arm*.S test-case to use %progbits rather than @progbits, - but failed to do so for gdb.arch/thumb*.S. Fix this oversight. - - Tested on arm-linux-gnueabihf. - -2023-06-16 mengqinggang - - LoongArch: Fix ld "undefined reference" error with --enable-shared - Because _bfd_read_unsigned_leb128 is hidden visibility, so it can't - be referenced out of shared object. - - The new function loongarch_get_uleb128_length just used to call - _bfd_read_unsigned_leb128. - - bfd/ChangeLog: - - * elfxx-loongarch.c (loongarch_get_uleb128_length): New function. - * elfxx-loongarch.h (loongarch_get_uleb128_length): New function. - - gas/ChangeLog: - - * config/tc-loongarch.c (md_apply_fix): Use - loongarch_get_uleb128_length. - -2023-06-16 Andrew Burgess - - gdb: update IRC reference from Freenode to Libera.Chat - It's been some time since the switch from Freenode to Libera.Chat, - however, there's still a reference to Freenode in the 'gdb --help' - output. Lets update that. - -2023-06-16 Jan Beulich - - x86: shrink Masking insn attribute to a single bit (boolean) - The logic can actually be expressed with less code that way, utilizing - that there are common patterns of when which form of masking is - permitted. This then also eliminates the large set of open-codings of - BOTH_MASKING in the opcode table. - -2023-06-16 Alan Modra - - Correct ld-elf/eh5 test for hppa64 - Commit 3c0afdb78988 regressed this test for hppa64, because the test - had been enabled for hppa64 in the time between the mips changes and - their reversion. This patch isn't just a simple reapply, I recreated - the testsuite change by hand for hppa64: Two lines in eh5.d might need - further changes for mips. - -2023-06-16 GDB Administrator - - Automatic date update in version.in - -2023-06-15 Maciej W. Rozycki - - binutils/NEWS: Mention Sony Allegrex MIPS CPU support - Mention the addition of Sony Allegrex processor support to the MIPS port. - - binutils/ - * NEWS: Mention Sony Allegrex MIPS CPU support. - -2023-06-15 Maciej W. Rozycki - - MIPS/GAS/testsuite: Fix `-modd-spreg'/`-mno-odd-spreg' test invocations - Reformat `-modd-spreg'/`-mno-odd-spreg' test invocations in mips.exp to - fit in 79 columns - - gas/ - * testsuite/gas/mips/mips.exp: Reformat - `-modd-spreg'/`-mno-odd-spreg' test invocations. - -2023-06-15 David Guillen Fandos - - Add additional missing Allegrex CPU instructions - Allegrex supports some MIPS32 and MIPS32r2 instructions (albeit with - some encoding differences) such as bit manipulation (ins/ext) and MLA - (madd/msub). It also features some new instructions like wsbw and - min/max or device-specific ones such as mfic. - - Add rotation instructions to MIPS Allegrex CPU - The Allegrex CPU supports bit rotation instructions as described in the - MIPS32 release 2 CPU (even though it is a MIPS-2 based CPU). - - Add MIPS Allegrex CPU as a MIPS2-based CPU - The Allegrex CPU was created by Sony Interactive Entertainment to power - their portable console, the PlayStation Portable. - The pspdev organization maintains all sorts of tools to create software - for said device including documentation. - -2023-06-15 Maciej W. Rozycki - - GAS/doc: Correct Tag_GNU_MIPS_ABI_MSA attribute description - Rewrite the paragraph to match the style of Tag_GNU_MIPS_ABI_FP text - immediately above, correcting grammar and formatting at the same time. - - gas/ - * doc/as.texi (MIPS Attributes): Correct Tag_GNU_MIPS_ABI_MSA - attribute description. - -2023-06-15 Maciej W. Rozycki - - Revert "MIPS: gas: alter 64 or 32 for mipsisa triples if march is implicit" - This reverts commit 094025a30bb2da19df3990e0c0ff8167af823aa1. It was - applied unapproved. - - Revert "MIPS: default r6 if vendor is img" - This reverts commit be0d391f22fe6009c3be907753975a984cbbcc23. It was - applied unapproved. - - Revert "MIPS: fix r6 testsuites" - This reverts commit ffc528aed56b9e2c171137da28690a9bb6861b0b. It was - applied unapproved. - - Revert "MIPS: fix -gnuabi64 testsuite" - This reverts commit cb81e84c72933a7fad10b75b7e270d92d8d65251. It was - applied unapproved. - - Revert "MIPS: fix some ld testcases with compiler" - This reverts commit a0631c1501c113c04891c9a24a9ff5276257f28d. It was - applied unapproved. - - Revert "MIPS: add MT ASE support for micromips32" - This reverts commit acce83dacff0ce43677410c67aaae32817afe991. It was - applied unapproved. - - Revert "MIPS: sync oprand char usage between mips and micromips" - This reverts commit 5b207b919483f67311a73dfc1de8897ecfd8e776. It was - applied unapproved. - -2023-06-15 Alan Modra - - Re: Add some expected failures for bfin linker tests - After commit 7ade0f1582c4 I was seeing bfin-elf +XPASS: weak symbols, - and on looking into the bfin targets a little, discovered we have two - bfin-linux targets. One, bfin-uclinux, is like bfin-elf in that - ld -m elf32bfin is the default, and the other, bfin-linux-uclibc where - ld -m elf32bfinfd is the default. So putting bfin-*-*linux* in test - xfails or elsewhere is wrong. We want bfin-*-linux* instead to just - select the fdpic bfin target. - - This patch corrects wrong bfin target triples in the ld testsuite, - not just the recent change but others I'd added to xfails too. - It also fixes the bfin-linux-uclibc ld-elf/64ksec fail - -2023-06-15 Alan Modra - - vms write_archive memory leaks - This fixes two memory leaks in the vms archive handling. - - * vms-lib.c (_bfd_vms_lib_build_map): Free input symbols. - (_bfd_vms_lib_write_archive_contents): Free archive map symbols. - -2023-06-15 GDB Administrator - - Automatic date update in version.in - -2023-06-14 Tom de Vries - - [gdb/testsuite] Fix gdb.base/step-over-exit.exp with glibc debuginfo - In test-case gdb.base/step-over-exit.exp, we set a breakpoint on _exit and - continue, expecting to hit the breakpoint. - - Without glibc debug info installed, we have with target board unix/-m64: - ... - Thread 2.1 "step-over-exit" hit Breakpoint 2.2, 0x00007ffff7d46aee in \ - _exit () from /lib64/libc.so.6^M - (gdb) PASS: gdb.base/step-over-exit.exp: continue to exit - ... - and with target board unix/-m32: - ... - Thread 2.1 "step-over-exit" hit Breakpoint 2.2, 0xf7d84c25 in _exit () from \ - /lib/libc.so.6^M - (gdb) PASS: gdb.base/step-over-exit.exp: continue to exit - ... - - However after installing debug info (packages glibc-debuginfo and - glibc-32bit-debuginfo), we have for -m64 (note: __GI__exit instead of _exit): - ... - Thread 2.1 "step-over-exit" hit Breakpoint 2.2, \ - __GI__exit (status=) at \ - ../sysdeps/unix/sysv/linux/_exit.c:27^M - 27 {^M - (gdb) PASS: gdb.base/step-over-exit.exp: continue to exit - ... - and -m32 (note: _Exit instead of _exit): - ... - Thread 2.1 "step-over-exit" hit Breakpoint 2.2, _Exit () at \ - ../sysdeps/unix/sysv/linux/i386/_exit.S:24^M - 24 ../sysdeps/unix/sysv/linux/i386/_exit.S: No such file or directory.^M - (gdb) FAIL: gdb.base/step-over-exit.exp: continue to exit - ... - - The gdb_test allows for both _exit and __GI__exit, but not _Exit: - ... - gdb_test "continue" \ - "Continuing\\..*Breakpoint $decimal.*_exit \\(.*\\).*" \ - "continue to exit" - ... - - Fix this by allowing _Exit as well. - - Tested on x86_64-linux. - -2023-06-14 Nick Clifton - - Add some expected failures for bfin linker tests - - Add --remap-inputs option to the BFD linker. - PR 30374 - * ldfile.c (struct input_remap): New structure. (ldfile_add_remap): New function. (ldfile_remap_input_free): New function. (ldfile_add_remap_file): New function. (ldfile_possibly_remap_input): New function. (ldfile_print_input_remaps): New function. * ldfile.h: Add prototypes for new functions. - * ldlang.c (new_afile): Call ldfile_possibly_remap_input. (lang_finish): Call ldfile_remap_input_free. (lang_map): Call ldfile_print_input_remaps. - * ldlex.h (OPTION_REMAP_INPUTS, OPTION_REMAP_INPUTS_FILE): Define. - * lexsup.c (ld_options): Add --remap-inputs-file and --remap-inputs. (parse_args): Handle new options. - * NEWS: Mention the new feature. - * ld.texi: Document the new options. - * testsuite/ld-misc/input-remap.exp: New test driver. - * testsuite/ld-misc/remaps.r: New file: Expected linker output. - * testsuite/ld-misc/remaps.txt: New file. Input remaps file. - -2023-06-14 Alan Modra - - asprintf memory leaks - A number of backends want to return bfd_reloc_dangerous messaqes from - relocation special_function, and construct the message using asprintf. - Such messages are not freed anywhere, leading to small memory leaks - inside libbfd. To limit the leaks, I'd implemented a static buffer in - the ppc backends that was freed before use in asprintf output. This - patch extends that scheme to other backends using a shared static - buffer and goes further in freeing the buffer on any bfd_close. - - The patch also fixes a few other cases where asprintf output was not - freed after use. - - bfd/ - * bfd.c (_input_error_msg): Make global and rename to.. - (_bfd_error_buf): ..this. - (bfd_asprintf): New function. - (bfd_errmsg): Use bfd_asprintf. - * opncls.c (bfd_close_all_done): Free _buf_error_buf. - * elf32-arm.c (find_thumb_glue, find_arm_glue): Use bfd_asprintf. - * elf32-nios2.c (nios2_elf32_relocate_section): Likewise. - * elf32-ppc.c (ppc_elf_unhandled_reloc): Likewise. - * elf64-ppc.c (ppc64_elf_unhandled_reloc): Likewise. - * elfnn-riscv.c (riscv_resolve_pcrel_lo_relocs): Likewise. - (riscv_elf_relocate_section): Likewise. - * libbfd.h: Regenerate. - gas/ - * read.c (read_end): Free current_name and current_label. - (do_s_func): Likewise on error path. strdup label. - ld/ - * pe-dll.c (make_head, make_tail, make_one), - (make_singleton_name_thunk, make_import_fixup_entry), - (make_runtime_pseudo_reloc), - (pe_create_runtime_relocator_reference: Free oname after use. - -2023-06-14 Alan Modra - - Re: bfd/elf.c strtab memory leak - There are other places that leak the strtab. - - * elf.c (_bfd_elf_compute_section_file_positions): Free strtab - on error paths. - -2023-06-14 GDB Administrator - - Automatic date update in version.in - -2023-06-13 Tom de Vries - - [gdb/testsuite] Fix gdb.tui/long-prompt.exp with read1 - When running test-case gdb.tui/long-prompt.exp with check-read1, we get: - ... - (gdb) FAIL: gdb.tui/long-prompt.exp: prompt size == width + 1: \ - end of screen: at last line - ... - - The problem is in these commands: - ... - Term::command "echo \\n" - Term::command "echo \\n" - Term::command "echo \\n" - Term::command "echo \\n" - ... - - The last one makes the terminal scroll, and the scrolling makes the expected - output match on a different line. - - Fix this by replacing the sequence with a single command: - ... - Term::command "echo \\n\\n\\n\\n\\n\\n" - ... - which avoids scrolling. - - Tested on x86_64-linux. - -2023-06-13 Tom de Vries - - [gdb/testsuite] Fix and add prompt anchoring in tuiterm - There is a test-case that contains a unit test for tuiterm: - gdb.tui/tuiterm.exp. - - However, this only excercises the tuiterm itself, and not the functions that - interact with it, like Term::command. - - Add a new test-case gdb.tui/tuiterm-2.exp that: - - overrides proc accept_gdb_output (to be able simulate incorrect responses - while avoiding the timeout), - - overrides proc send_gdb (to be able to call Term::command without a gdb - instance, such that all tuiterm input is generated by the test-case). - - issues Term::command calls, and - - checks whether they behave correctly. - - This exposes a problem in Term::command. The "prompt before command" regexp - starts with a bit that is supposed to anchor the prompt to the border: - ... - set str "(^|\|)$gdb_prompt $str" - ... - but that doesn't work due to insufficient escaping. Fix this by adding the - missing escape: - ... - set str "(^|\\|)$gdb_prompt $str" - ... - - Futhermore, the "prompt after command" regexp in Term::wait_for has no - anchoring at all: - ... - set prompt_wait_for "$gdb_prompt \$" - ... - so add that as well. - - Tested on x86_64-linux. - -2023-06-13 Tom de Vries - - [gdb/testsuite] Allow procs with default value args in with_override - Currently proc with_override does not work with procs with default value args. - - Fix this, and add a test-case excercising this scenario. - - Tested on x86_64-linux. - -2023-06-13 Tom de Vries - - [gdb/testsuite] Fix gdb.dap/type_check.exp with older python - On openSUSE Leap 15.4 with system python 3.6, I run into: - ... - (gdb) python check_everything()^M - (gdb) FAIL: gdb.dap/type_check.exp: type checker - ... - - In check_everything, the hasattr test fails silently: - ... - def check_everything(): - # Older versions of Python can't really implement this. - if hasattr(typing, "get_origin"): - ... - and that makes the gdb_test in the test-case fail. - - Fix this by emitting UNSUPPORTED instead in check_everything, and detecting - this in the test-case. - - Tested on x86_64-linux. - -2023-06-13 Lancelot SIX - - gdb/testsuite: use proper int size for gdb.dwarf2/symbol_needs_eval*.exp - We recently realized that symbol_needs_eval_fail.exp and - symbol_needs_eval_timeout.exp invalidly dereference an int (4 bytes on - x86_64) by reading 8 bytes (the size of a pointer). - - Here how it goes: - - In gdb/testsuite/gdb.dwarf2/symbol_needs_eval.c a global variable is - defined: - - int exec_mask = 1; - - and later both tests build some DWARF using the assembler doing: - - set exec_mask_var [gdb_target_symbol exec_mask] - ... - DW_TAG_variable { - {DW_AT_name a} - {DW_AT_type :$int_type_label} - {DW_AT_location { - DW_OP_addr $exec_mask_var - DW_OP_deref - ... - } - } - - The definition of the DW_OP_deref (from Dwarf5 2.5.1.3 Stack Operations) - says that "The size of the data retrieved from the dereferenced address - is the size of an address on the target machine." - - On x86_64, the size of an int is 4 while the size of an address is 8. - The result is that when evaluating this expression, the debugger reads - outside of the `a` variable. - - Fix this by using `DW_OP_deref_size $int_size` instead. To achieve - this, this patch adds the necessary steps so we can figure out what - `sizeof(int)` evaluates to for the current target. - - While at it, also change the definition of the int type in the assembled - DWARF information so we use the actual target's size for an int instead - of the literal 4. - - Tested on x86_64 Linux. - - Approved-By: Tom Tromey - -2023-06-13 GDB Administrator - - Automatic date update in version.in - -2023-06-13 Kevin Buettner - - Simplify case DW_OP_GNU_uninit in dwarf_expr_context::execute_stack_op - Tom Tromey pointed out that the test and call to error() for the - DW_OP_GNU_uninit case in dwarf_expr_context::execute_stack_op (in - gdb/dwarf2/expr.c)... - - if (op_ptr != op_end && *op_ptr != DW_OP_piece - && *op_ptr != DW_OP_bit_piece) - error (_("DWARF-2 expression error: DW_OP_GNU_uninit must always " - "be the very last op in a DWARF expression or " - "DW_OP_piece/DW_OP_bit_piece piece.")); - - ...could be replaced by a call to dwarf_expr_require_composition which - performs a similar check and outputs a suitable error message. - -2023-06-12 Simon Farre - - Added self to W.A.A. maintainers - -2023-06-12 Richard Bunt - - gdb/testsuite: Testing with the armflang compiler - Currently the Fortran test suite does not run with armflang because the - compiler detection fails. This in turn means fortran_runto_main does not - know which main method to use to start a test case. - - Fortran compiler detection was added in 44d469c5f85; however, the commit - message notes that it was not tested with armflang. - - This commit tests and fixes up a minor issue to get the detection - working. - - The goal here is to get the tests running and preventing further - regressions during future work. This change does not do anything to fix - existing failures. - - >From what I can understand, the auto detection leverages the - preprocessor to extract the Fortran compiler identity from the defines. - This preprocessor output is then evaluated by the test suite to import - these defines. - - In the case of armflang, this evaluation step is disrupted by the - presence of the following warning: - - $ armflang -E -fdiagnostics-color=never testsuite/lib/compiler.F90 -o compiler.exp - $ clang-13: warning: argument unused during compilation: '-fdiagnostics-color=never' [-Wunused-command-line-argument] - - The evaluation logic is already set up to filter this warning, but the - prefix differs. - - This commit fixes the issue by updating the filter to exclude the - armflang flavour of warning. - - gdb.fortran regression tests run with GNU, Intel and Intel LLVM. No - regressions detected. - - The gdb.fortran test results with ACfL 23.04.1 are as follows. - - Before: - - # of expected passes 560 - # of unexpected failures 113 - # of unresolved testcases 2 - # of untested testcases 5 - # of duplicate test names 2 - - After: - - # of expected passes 5388 - # of unexpected failures 628 - # of known failures 10 - # of untested testcases 8 - # of unsupported tests 5 - # of duplicate test names 5 - - As can be seen from the above, there are now considerably more passing - assertions. - - Reviewed-By: Luis Machado - Approved-By: Tom Tromey - -2023-06-12 Tom Tromey - - Remove f-strings from DAP - Kévin pointed out that gdb claims a minimum Python version of 3.2, but - the DAP code uses f-strings, which were added in 3.6. - - This patch removes the uses of f-strings from the DAP code. I can't - test an older version of Python, but I did confirm that this still - works with the version I have. - -2023-06-12 Tom Tromey - - Implement DAP conditional breakpoints - I realized that I had only implemented DAP breakpoint conditions for - exception breakpoints, and not other kinds of breakpoints. This patch - corrects the oversight. - -2023-06-12 Tom Tromey - - Do not report totalFrames from DAP stackTrace request - Currently, gdb will unwind the entire stack in response to the - stackTrace request. I had erroneously thought that the totalFrames - attribute was required in the response. However, the spec says: - - If omitted or if `totalFrames` is larger than the available - frames, a client is expected to request frames until a request - returns less frames than requested (which indicates the end of the - stack). - - This patch removes this from the response in order to improve - performance when the stack trace is very long. - -2023-06-12 Tom Tromey - - Implement DAP breakpointLocations request - This implements the DAP breakpointLocations request. - -2023-06-12 Tom Tromey - - Add "stop at main" extension to DAP launch request - Co-workers who work on a program that uses DAP asked for the ability - to have gdb stop at the main subprogram when launching. This patch - implements this extension. - - Reviewed-By: Eli Zaretskii - -2023-06-12 Tom Tromey - - Add "target" parameter to DAP attach request - This adds a new "target" to the DAP attach request. This is passed to - "target remote". I thought "attach" made the most sense for this, - because in some sense gdb is attaching to a running process. It's - worth noting that all DAP "attach" parameters are defined by the - implementation. - - Reviewed-By: Eli Zaretskii - -2023-06-12 Tom Tromey - - Handle DAP supportsVariableType capability - A DAP client can report the supportsVariableType capability in the - initialize request. In this case, gdb can include the type of a - variable or expression in various results. - - Implement DAP setExpression request - This implements the DAP setExpression request. - -2023-06-12 Tom Tromey - - Add gdb.Value.assign method - This adds an 'assign' method to gdb.Value. This allows for assignment - without requiring the use of parse_and_eval. - - Reviewed-By: Eli Zaretskii - -2023-06-12 Tom Tromey - - Add type-checking to DAP requests - It occurred to me recently that gdb's DAP implementation should - probably check the types of objects coming from the client. This - patch implements this idea by reusing Python's existing type - annotations, and supplying a decorator that verifies these at runtime. - - Python doesn't make it very easy to do runtime type-checking, so the - core of the checker is written by hand. I haven't tried to make a - fully generic runtime type checker. Instead, this only checks the - subset that is needed by DAP. For example, only keyword-only - functions are handled. - - Furthermore, in a few spots, it wasn't convenient to spell out the - type that is accepted. I've added a couple of comments to this effect - in breakpoint.py. - - I've tried to make this code compatible with older versions of Python, - but I've only been able to try it with 3.9 and 3.10. - -2023-06-12 Tom Tromey - - Use tuples for default arguments in DAP - My co-worker Kévin taught me that using a mutable object as a default - argument in Python is somewhat dangerous, because the object is - created a single time (when the function is defined), and so if it is - mutated in the body of the function, the changes will stick around. - - This patch changes the cases like this in DAP to use () rather than [] - as the default. This patch is merely preventative, as no bugs like - this are in the code. - -2023-06-12 Tom Tromey - - Fix a latent bug in DAP request decorator - The 'request' decorator is intended to also ensure that the request - function runs in the DAP thread. However, the unwrapped function is - installed in the global request map, so the wrapped version is never - called. This patch fixes the bug. - - Add test for DAP pause request - I neglected to write a test for the DAP "pause" request. This patch - adds one. - - Rename one DAP function - When I first started implementing DAP, I had some vague plan of having - the implementation functions use the same name as the request. I - abandoned this idea, but one vestige remained. This patch renames the - one remaining function to be gdb-ish. - - Add singleThread support to some DAP requests - A few DAP requests support a "singleThread" parameter, which is - somewhat similar to scheduler-locking. This patch implements support - for this. - - Implement DAP stepOut request - This implements the DAP "stepOut" request. - -2023-06-12 Tom Tromey - - Implement DAP attach request - This implements the DAP "attach" request. - - Note that the copyright dates on the new test source file are not - incorrect -- this was copied verbatim from another directory. - - Reviewed-By: Eli Zaretskii - -2023-06-12 Tom Tromey - - Implement DAP setExceptionBreakpoints request - This implements the DAP setExceptionBreakpoints request for Ada. This - is a somewhat minimal implementation, in that "exceptionOptions" are - not implemented (or advertised) -- I wasn't completely sure how this - feature is supposed to work. - - I haven't added C++ exception handling here, but it's easy to do if - needed. - - This patch relies on the new MI command execution support to do its - work. - -2023-06-12 Tom Tromey - - Don't require inferior execution for Ada catchpoints - Currently, Ada catchpoints require that the inferior be running. - However, there's no deep reason for this -- for example, C++ exception - catchpoints do not have this requirement. Instead, those work like - ordinary breakpoints: they are pending until the needed runtime - locations are seen. - - This patch changes Ada catchpoints to work the same way. - -2023-06-12 Tom Tromey - - Mark members of ada_catchpoint "private" - This changes the members of ada_catchpoint to be private. - - Turn should_stop_exception into a method of ada_catchpoint - This turns the should_stop_exception function in ada-lang.c into a - method of ada_catchpoint. - - Combine create_excep_cond_exprs and ada_catchpoint::re_set - This patch merges create_excep_cond_exprs into ada_catchpoint::re_set. - This is less verbose and is also a step toward making ada_catchpoint - work more like the other code_breakpoint-based exception catchpoints. - - Transfer ownership of exception string to ada_catchpoint - This changes the ada_catchpoint to require an rvalue ref, so that - ownership of the exception string can be transferred to the catchpoint - object. - - Pass tempflag to ada_catchpoint constructor - This is a minor cleanup to pass tempflag to the ada_catchpoint - constructor. - - Use gnat_runtime_has_debug_info in Ada catchpoint tests - This changes the Ada catchpoint tests to use - gnat_runtime_has_debug_info. This simplifies the code. - - Stop gdb in gnat_runtime_has_debug_info - gnat_runtime_has_debug_info starts a new gdb to do its work. However, - it also leaves this gdb running, which can potentially confuse the - calling test -- I encountered this when writing a new DAP test. This - patch changes the proc to shut down gdb. - -2023-06-12 Tom de Vries - - [gdb/testsuite] Relax breakpoint count check in gdb.python/py-rbreak.exp - With a gdb 13.2 based package on SLE-15 aarch64, I run into: - ... - (gdb) PASS: gdb.python/py-rbreak.exp: nosharedlibrary - py sl = gdb.rbreak("^[^_]",minsyms=False)^M - Breakpoint 2 at 0x4004ac: file ../sysdeps/aarch64/crti.S, line 63.^M - ... - (gdb) py print(len(sl))^M - 12^M - (gdb) FAIL: gdb.python/py-rbreak.exp: check number of returned breakpoints is 11 - ... - - The FAIL is due to: - - the glibc object crti.o containing debug information for function - call_weak_fn, and - - the test-case not expecting this. - - The debug information is there due to compiling glibc using a binutils which - contains commit 591cc9fbbfd ("gas/Dwarf: record functions"). - - I've run into a similar issue before, see commit 3fbbcf473a5 ("[gdb/testsuite] - Fix regexp in py-rbreak.exp"). - - The fix I applied there was to use a regexp "^[^_]" to filter out - __libc_csu_fini and __libc_csu_init, but that doesn't work for call_weak_fn. - - Fix this by: - - reverting the regexp to "", and - - rewriting the check to require at least 11 functions, rather than a precise - match. - - Tested on x86_64-linux. - - PR testsuite/30538 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30538 - -2023-06-12 Tom de Vries - - [gdb/testsuite] Fix breakpoint regexp in gdb.ada/out_of_line_in_inlined.exp - With a gdb 13.2 based package on openSUSE Tumbleweed i586, I ran into: - ... - (gdb) run ^M - Starting program: out_of_line_in_inlined/foo_o224_021-all ^M - [Thread debugging using libthread_db enabled]^M - Using host libthread_db library "/lib/libthread_db.so.1".^M - ^M - Breakpoint 1.1, foo_o224_021.child1.child2 (s=...) at foo_o224_021.adb:26^M - 26 for C of S loop^M - (gdb) FAIL: gdb.ada/out_of_line_in_inlined.exp: scenario=all: \ - run to foo_o224_021.child1.child2 - ... - - I can reproduce the same issue with gdb trunk on x86_64, by using optimize=-O3 - instead of optimize=-O2. - - Fix this by using $bkptno_num_re. - - Tested on x86_64-linux. - - PR testsuite/30539 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30539 - -2023-06-12 Tom de Vries - - [gdb/tui] Replace macro HELP_ATTRIBUTE_MODE with std::string - Replace macro HELP_ATTRIBUTE_MODE with a std::string. - - Tested on x86_64-linux. - - Reviewed-By: Bruno Larsen - Reviewed-By: Tom Tromey - -2023-06-12 mengqinggang - - LoongArch: gas: Relocations simplification when -mno-relax - Gas does not emit ADD/SUB relocation pairs for label differences - when -mno-relax. - -2023-06-12 GDB Administrator - - Automatic date update in version.in - -2023-06-11 Kevin Buettner - - Permit DW_OP_GNU_uninit to be used with DW_OP_piece - This commit implements a fix for a bug reported against GDB on - Fedora bugzilla... - - https://bugzilla.redhat.com/show_bug.cgi?id=2166796 - - The test case in that bug report involved running gdb against the 'jq' - program (which is a command-line JSON processor) on Fedora 37. Since - the debug info is compiler (and compile-time option) dependent, it - won't necessarily show up in other distributions or even past or - future versions of Fedora. (E.g. when trying the example shown below - on Fedora 38, GDB says that the value of 'value' has been optimized - out. I.e. it does not demonstrate the same DWARF error that can be - see when using Fedora 37.) - - That said, on Fedora 37, the bug could be reproduced as follows: - - [kev@f37-1 ~]$ gdb jq -q -ex 'b src/util.c:415' -ex 'r - Enable debuginfod for this session? (y or [n]) y - Debuginfod has been enabled. - To make this setting permanent, add 'set debuginfod enabled on' to .gdbinit. - Reading symbols from /home/kev/.cache/debuginfod_client/9d3c8b4197350a190a74972d481de32abf641aa4/debuginfo... - No source file named src/util.c. - Make breakpoint pending on future shared library load? (y or [n]) y - Breakpoint 1 (src/util.c:415) pending. - Starting program: /usr/bin/jq parser == NULL) { - (gdb) p value - DWARF-2 expression error: DW_OP_GNU_uninit must always be the very last op. - - This is undesirable - rather than output an error about the DWARF - info, we'd prefer to see a value, even if it is uninitialized. - - Examination of the debuginfo showed the following: - - <1><468f1>: Abbrev Number: 112 (DW_TAG_subprogram) - <468f2> DW_AT_external : 1 - <468f2> DW_AT_name : (indirect string, offset: 0x4781): jq_util_input_next_input - <468f6> DW_AT_decl_file : 10 - <468f6> DW_AT_decl_line : 411 - <468f8> DW_AT_decl_column : 4 - <468f9> DW_AT_prototyped : 1 - <468f9> DW_AT_type : <0x3f2> - <468fd> DW_AT_sibling : <0x4692e> - ... - <2><46921>: Abbrev Number: 102 (DW_TAG_variable) - <46922> DW_AT_name : (indirect string, offset: 0x8cb): value - <46926> DW_AT_decl_file : 10 - <46926> DW_AT_decl_line : 414 - <46928> DW_AT_decl_column : 6 - <46929> DW_AT_type : <0x3f2> - - Note that there's no DW_AT_location, so I looked for an abstract origin entry: - - <2><2dfa0>: Abbrev Number: 90 (DW_TAG_variable) - <2dfa1> DW_AT_abstract_origin: <0x46921> - <2dfa5> DW_AT_location : 0x27cf1 (location list) - <2dfa9> DW_AT_GNU_locviews: 0x27ce1 - - (Note that the DW_AT_abstract_origin attribute's value is 0x46921 which - is the DIE for the local variable "value".) - - Looking at the location list, I see: - - 00027cf1 v000000000000000 v000000000000000 views at 00027ce1 for: - 000000000002f8fe 000000000002f92e (DW_OP_reg13 (r13); DW_OP_GNU_uninit; DW_OP_piece: 8; DW_OP_reg12 (r12); DW_OP_GNU_uninit; DW_OP_piece: 8) - - While DW_OP_GNU_uninit is not the very last op, it is the last op - prior to DW_OP_piece. The fix involved changing the DW_OP_GNU_uninit - case in dwarf_expr_context::execute_stack_op in gdb/dwarf2/expr.c so - that DW_OP_GNU_uninit may appear just before DW_OP_piece. - - With the fix in place, attempting to print 'value' now looks like - this: - - (gdb) p value - $1 = [uninitialized] {kind_flags = 0 '\000', pad_ = 0 '\000', offset = 0, - size = 0, u = {ptr = 0x0, number = 0}} - - Note that "[uninitialized]" is part of the output. (But also note - that there's an extra space character.) - - I've made a new test case, - gdb.dwarf2/DW_OP_piece_with_DW_OP_GNU_uninit.exp, by adapting an - existing one, gdb.dwarf2/opt-out-not-implptr.exp. Since it uses the - DWARF assembler, the test case does not depend on a specific compiler - version or compiler options. - - Tested on Fedora 37 and Fedora 38. - -2023-06-11 GDB Administrator - - Automatic date update in version.in - -2023-06-10 GDB Administrator - - Automatic date update in version.in - -2023-06-09 Indu Bhagat - - libsframe: testsuite: add sframe_find_fre tests for pltN entries - Add a new test plt-findfre-1 to ensure lookup of SFrame stack trace - information for pltN entries is correct. - - In this test, a dummy SFrame FDE of type SFRAME_FDE_TYPE_PCMASK is - created. The size of the 'function code block' covered by the SFrame - FDE is equivalent to 5 pltN entries of 16 bytes each. - - The test first looks up SFrame FREs for some addresses in the first pltN - entry, followed by lookups for some addresses in the fourth pltN entry. - - libsframe/ - * Makefile.in: Regenerated. - * testsuite/libsframe.find/find.exp: Add new test. - * testsuite/libsframe.find/local.mk: Likewise. - * testsuite/libsframe.find/plt-findfre-1.c: New test. - -2023-06-09 Indu Bhagat - - libsframe: fix sframe_find_fre for pltN entries - To find SFrame stack trace information from an FDE of type - SFRAME_FDE_TYPE_PCMASK, sframe_find_fre () was doing an operation - like, - (start_ip_offset & 0xff) >= (pc & 0xff), etc. - - This is buggy and needs correction. The mask 0xff should be 0xf (to - work for a pltN entry of size say, 16 bytes). - - At this time, the size of the pltN entry is implicitly assumed to be 16 - bytes by libsframe. In next version of the SFrame format, we can encode - this information explicitly in the SFrame FDE. - - For now, we should fix the code to at least behave correctly for the - generated code and the generated SFrame stack trace information for the - pltN entries on x86_64. - - libsframe/ - * sframe.c (sframe_find_fre): Correct the bitmask used for - SFrame FDEs of type SFRAME_FDE_TYPE_PCMASK. - -2023-06-09 Luis Machado - - [AArch64,arm] Fix some formatting issues in the aarch64/arm codebase - As noted by Tom Tromey, there are some formatting issues with the ternary - operator in the aarch64/arm codebase. This patch fixes those. - - Reviewed-By: Tom Tromey - -2023-06-09 Tom de Vries - - [gdb/tui] Simplify tui_puts_internal - Simplify tui_puts_internal by using continue, as per this [1] coding standard - rule, making the function more readable and easier to understand. - - No functional changes. - - Tested on x86_64-linux. - - [1] https://llvm.org/docs/CodingStandards.html#use-early-exits-and-continue-to-simplify-code - - Reviewed-By: Tom Tromey - -2023-06-09 Tom de Vries - - [gdb/tui] Delete line buffer when switching to singlekey - Say we're in TUI mode, and type "sun": - ... - (gdb) sun - ... - - After switching to SingleKey mode using C-x s, we have just: - ... - sun - ... - - After typing "d", we get: - ... - sun - Undefined command: "sundown". Try "help". - ... - - The SingleKey "d" is supposed run the "down" command. - - Fix this by clearing the readline line buffer when switching to SingleKey - mode. - - Tested on x86_64-linux. - - PR tui/30522 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30522 - - Reviewed-By: Tom Tromey - -2023-06-09 Tom de Vries - - [gdb/testsuite] Add test-case gdb.tui/single-key.exp - I noticed that there's no test-case excercising SingleKey mode, so add a test-case. - - Tested on x86_64-linux. - - Reviewed-By: Tom Tromey - -2023-06-09 Andrew Burgess - - gdb/debuginfod: cleanup debuginfod earlier - A GDB crash was discovered on Fedora GDB that was tracked back to an - issue with the way that debuginfod is cleaned up. - - The bug was reported on Fedora 37, 38, and 39. Here are the steps to - reproduce: - - 1. The file /etc/ssl/openssl.cnf contains the following lines: - - [provider_sect] - default = default_sect - ##legacy = legacy_sect - ## - [default_sect] - activate = 1 - - ##[legacy_sect] - ##activate = 1 - - The bug will occur when the '##' characters are removed so that the - lines in question look like this: - - [provider_sect] - default = default_sect - legacy = legacy_sect - - [default_sect] - activate = 1 - - [legacy_sect] - activate = 1 - - 2. Clean up any existing debuginfod cache data: - - > rm -rf $HOME/.cache/debuginfod_client - - 3. Run GDB: - - > gdb -nx -q -iex 'set trace-commands on' \ - -iex 'set debuginfod enabled on' \ - -iex 'set confirm off' \ - -ex 'start' -ex 'quit' /bin/ls - +set debuginfod enabled on - +set confirm off - Reading symbols from /bin/ls... - Downloading separate debug info for /usr/bin/ls - ... snip ... - Temporary breakpoint 1, main (argc=1, argv=0x7fffffffde38) at ../src/ls.c:1646 - 1646 { - +quit - - Fatal signal: Segmentation fault - ----- Backtrace ----- - ... snip ... - - So GDB ends up crashing during exit. - - What's happening is that when debuginfod is initialised - debuginfod_begin is called (this is in the debuginfod library), this - in turn sets up libcurl, which makes use of openssl. Somewhere during - this setup process an at_exit function is registered to cleanup some - state. - - Back in GDB the debuginfod_client object is managed using this code: - - /* Deleter for a debuginfod_client. */ - - struct debuginfod_client_deleter - { - void operator() (debuginfod_client *c) - { - debuginfod_end (c); - } - }; - - using debuginfod_client_up - = std::unique_ptr; - - And then a global debuginfod_client_up is created to hold a pointer to - the debuginfod_client object. As a global this will be cleaned up - using the standard C++ global object destructor mechanism, which is - run after the at_exit handlers. - - However, it is expected that when debuginfod_end is called the - debuginfod_client object will still be in a usable state, that is, we - don't expect the at_exit handlers to have run and started cleaning up - the library state. - - To fix this issue we need to ensure that debuginfod_end is called - before the at_exit handlers have a chance to run. - - This commit removes the debuginfod_client_up type, and instead has GDB - hold a raw pointer to the debuginfod_client object. We then make use - of GDB's make_final_cleanup to register a function that will call - debuginfod_end. - - As GDB's final cleanups are called before exit is called, this means - that debuginfod_end will be called before the at_exit handlers are - called, and the crash identified above is resolved. - - It's not obvious how this issue can easily be tested for. The bug does - not appear to manifest when using a local debuginfod server, so we'd - need to setup something more involved. For now I'm proposing this - patch without any associated tests. - - Co-Authored-By: Mark Wielaard - Co-Authored-By: Simon Marchi - Reviewed-By: Tom Tromey - Reviewed-By: Aaron Merey - -2023-06-09 Andrew Burgess - - gdb: fix ASan failure after recent string changes - After this commit: - - commit baab375361c365afee2577c94cbbd3fdd443d6da - Date: Tue Jul 13 14:44:27 2021 -0400 - - gdb: building inferior strings from within GDB - - It was pointed out that a new ASan failure had been introduced which - was triggered by gdb.base/internal-string-values.exp: - - (gdb) PASS: gdb.base/internal-string-values.exp: test_setting: all langs: lang=ada: ptype "foo" - print $_gdb_maint_setting("test-settings string") - ================================================================= - ==80377==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x603000068034 at pc 0x564785cba682 bp 0x7ffd20644620 sp 0x7ffd20644610 - READ of size 1 at 0x603000068034 thread T0 - #0 0x564785cba681 in find_command_name_length(char const*) /tmp/src/binutils-gdb/gdb/cli/cli-decode.c:2129 - #1 0x564785cbacb2 in lookup_cmd_1(char const**, cmd_list_element*, cmd_list_element**, std::__cxx11::basic_string, std::allocator >*, int, bool) /tmp/src/binutils-gdb/gdb/cli/cli-decode.c:2186 - #2 0x564785cbb539 in lookup_cmd_1(char const**, cmd_list_element*, cmd_list_element**, std::__cxx11::basic_string, std::allocator >*, int, bool) /tmp/src/binutils-gdb/gdb/cli/cli-decode.c:2248 - #3 0x564785cbbcf3 in lookup_cmd(char const**, cmd_list_element*, char const*, std::__cxx11::basic_string, std::allocator >*, int, int) /tmp/src/binutils-gdb/gdb/cli/cli-decode.c:2339 - #4 0x564785c82df2 in setting_cmd /tmp/src/binutils-gdb/gdb/cli/cli-cmds.c:2219 - #5 0x564785c84274 in gdb_maint_setting_internal_fn /tmp/src/binutils-gdb/gdb/cli/cli-cmds.c:2348 - #6 0x564788167b3b in call_internal_function(gdbarch*, language_defn const*, value*, int, value**) /tmp/src/binutils-gdb/gdb/value.c:2321 - #7 0x5647854b6ebd in expr::ada_funcall_operation::evaluate(type*, expression*, noside) /tmp/src/binutils-gdb/gdb/ada-lang.c:11254 - #8 0x564786658266 in expression::evaluate(type*, noside) /tmp/src/binutils-gdb/gdb/eval.c:111 - #9 0x5647871242d6 in process_print_command_args /tmp/src/binutils-gdb/gdb/printcmd.c:1322 - #10 0x5647871244b3 in print_command_1 /tmp/src/binutils-gdb/gdb/printcmd.c:1335 - #11 0x564787125384 in print_command /tmp/src/binutils-gdb/gdb/printcmd.c:1468 - #12 0x564785caac44 in do_simple_func /tmp/src/binutils-gdb/gdb/cli/cli-decode.c:95 - #13 0x564785cc18f0 in cmd_func(cmd_list_element*, char const*, int) /tmp/src/binutils-gdb/gdb/cli/cli-decode.c:2735 - #14 0x564787c70c68 in execute_command(char const*, int) /tmp/src/binutils-gdb/gdb/top.c:574 - #15 0x564786686180 in command_handler(char const*) /tmp/src/binutils-gdb/gdb/event-top.c:543 - #16 0x56478668752f in command_line_handler(std::unique_ptr >&&) /tmp/src/binutils-gdb/gdb/event-top.c:779 - #17 0x564787dcb29a in tui_command_line_handler /tmp/src/binutils-gdb/gdb/tui/tui-interp.c:104 - #18 0x56478668443d in gdb_rl_callback_handler /tmp/src/binutils-gdb/gdb/event-top.c:250 - #19 0x7f4efd506246 in rl_callback_read_char (/usr/lib/libreadline.so.8+0x3b246) (BuildId: 092e91fc4361b0ef94561e3ae03a75f69398acbb) - #20 0x564786683dea in gdb_rl_callback_read_char_wrapper_noexcept /tmp/src/binutils-gdb/gdb/event-top.c:192 - #21 0x564786684042 in gdb_rl_callback_read_char_wrapper /tmp/src/binutils-gdb/gdb/event-top.c:225 - #22 0x564787f1b119 in stdin_event_handler /tmp/src/binutils-gdb/gdb/ui.c:155 - #23 0x56478862438d in handle_file_event /tmp/src/binutils-gdb/gdbsupport/event-loop.cc:573 - #24 0x564788624d23 in gdb_wait_for_event /tmp/src/binutils-gdb/gdbsupport/event-loop.cc:694 - #25 0x56478862297c in gdb_do_one_event(int) /tmp/src/binutils-gdb/gdbsupport/event-loop.cc:264 - #26 0x564786df99f0 in start_event_loop /tmp/src/binutils-gdb/gdb/main.c:412 - #27 0x564786dfa069 in captured_command_loop /tmp/src/binutils-gdb/gdb/main.c:476 - #28 0x564786dff61f in captured_main /tmp/src/binutils-gdb/gdb/main.c:1320 - #29 0x564786dff75c in gdb_main(captured_main_args*) /tmp/src/binutils-gdb/gdb/main.c:1339 - #30 0x564785381b6d in main /tmp/src/binutils-gdb/gdb/gdb.c:32 - #31 0x7f4efbc3984f (/usr/lib/libc.so.6+0x2384f) (BuildId: 2f005a79cd1a8e385972f5a102f16adba414d75e) - #32 0x7f4efbc39909 in __libc_start_main (/usr/lib/libc.so.6+0x23909) (BuildId: 2f005a79cd1a8e385972f5a102f16adba414d75e) - #33 0x564785381934 in _start (/tmp/build/binutils-gdb/gdb/gdb+0xabc5934) (BuildId: 90de353ac158646e7dab501b76a18a76628fca33) - - 0x603000068034 is located 0 bytes after 20-byte region [0x603000068020,0x603000068034) allocated by thread T0 here: - #0 0x7f4efcee0cd1 in __interceptor_calloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:77 - #1 0x5647856265d8 in xcalloc /tmp/src/binutils-gdb/gdb/alloc.c:97 - #2 0x564788610c6b in xzalloc(unsigned long) /tmp/src/binutils-gdb/gdbsupport/common-utils.cc:29 - #3 0x56478815721a in value::allocate_contents(bool) /tmp/src/binutils-gdb/gdb/value.c:929 - #4 0x564788157285 in value::allocate(type*, bool) /tmp/src/binutils-gdb/gdb/value.c:941 - #5 0x56478815733a in value::allocate(type*) /tmp/src/binutils-gdb/gdb/value.c:951 - #6 0x5647854ae81c in expr::ada_string_operation::evaluate(type*, expression*, noside) /tmp/src/binutils-gdb/gdb/ada-lang.c:10675 - #7 0x5647854b63b8 in expr::ada_funcall_operation::evaluate(type*, expression*, noside) /tmp/src/binutils-gdb/gdb/ada-lang.c:11184 - #8 0x564786658266 in expression::evaluate(type*, noside) /tmp/src/binutils-gdb/gdb/eval.c:111 - #9 0x5647871242d6 in process_print_command_args /tmp/src/binutils-gdb/gdb/printcmd.c:1322 - #10 0x5647871244b3 in print_command_1 /tmp/src/binutils-gdb/gdb/printcmd.c:1335 - #11 0x564787125384 in print_command /tmp/src/binutils-gdb/gdb/printcmd.c:1468 - #12 0x564785caac44 in do_simple_func /tmp/src/binutils-gdb/gdb/cli/cli-decode.c:95 - #13 0x564785cc18f0 in cmd_func(cmd_list_element*, char const*, int) /tmp/src/binutils-gdb/gdb/cli/cli-decode.c:2735 - #14 0x564787c70c68 in execute_command(char const*, int) /tmp/src/binutils-gdb/gdb/top.c:574 - #15 0x564786686180 in command_handler(char const*) /tmp/src/binutils-gdb/gdb/event-top.c:543 - #16 0x56478668752f in command_line_handler(std::unique_ptr >&&) /tmp/src/binutils-gdb/gdb/event-top.c:779 - #17 0x564787dcb29a in tui_command_line_handler /tmp/src/binutils-gdb/gdb/tui/tui-interp.c:104 - #18 0x56478668443d in gdb_rl_callback_handler /tmp/src/binutils-gdb/gdb/event-top.c:250 - #19 0x7f4efd506246 in rl_callback_read_char (/usr/lib/libreadline.so.8+0x3b246) (BuildId: 092e91fc4361b0ef94561e3ae03a75f69398acbb) - - The problem is in cli/cli-cmds.c, in the function setting_cmd, where - we do this: - - const char *a0 = (const char *) argv[0]->contents ().data (); - - Here argv[0] is a value* which we know is either a TYPE_CODE_ARRAY or - a TYPE_CODE_STRING. The problem is that the above line is casting the - value contents directly to a C-string, i.e. one that is assumed to - have a null-terminator at the end. - - After the above commit this can no longer be assumed to be true. A - string value will be represented just as it would be in the current - language, so for Ada and Fortran the string will be an array of - characters with no null-terminator at the end. - - My proposed solution is to copy the string contents into a std::string - object, and then use the std::string::c_str() value, this will ensure - that a null-terminator has been added. - - I had a check through GDB at places TYPE_CODE_STRING was used and - couldn't see any other obvious places where this type of assumption - was being made, so hopefully this is the only offender. - - Running the above test with ASan compiled in no longer gives an error. - - Reviewed-By: Tom Tromey - -2023-06-09 Tom Tromey - - Use scoped_value_mark in two more places - I found a couple of spots that could use scoped_value_mark. One of - them is a spot that didn't consider the possibility that value_mark - can return NULL. I tend to doubt this can be seen in this context, - but nevertheless this is safer. - - Regression tested on x86-64 Fedora 36. - -2023-06-09 Tom de Vries - - [gdb] Fix typos - Fix typos: - - reponse -> response - - inital -> initial - - a -> an - -2023-06-09 Alan Modra - - readelf/objdump remember_state memory leaks - * dwarf.c (display_debug_frames ): Do free - invalid remember_state. - -2023-06-09 Alan Modra - - ecoff find_nearest_line and final link leaks - Freeing ecoff_debug_info "pointers to the unswapped symbolic info" - isn't a simple matter, due to differing allocation strategies. In - _bfd_ecoff_slurp_symbolic_info the pointers are to objalloc memory. - In the ecoff linker they are to separately malloc'd memory. In gas we - have most (obj-elf) or all (obj-ecoff) into a single malloc'd buffer. - - This patch fixes the leaks for binutils and ld, leaving the gas leaks - for another day. The mips elf backend already had this covered, and - the ecoff backend had a pointer, raw_syments used as a flag, so most - of the patch is moving these around a little so they are accessible - for both ecoff and elf. - - include/ - * coff/ecoff.h (struct ecoff_debug_info): Add alloc_syments. - bfd/ - * libecoff.h (struct ecoff_tdata): Delete raw_syments. - * elfxx-mips.c (free_ecoff_debug): Delete. Replace uses with - _bfd_ecoff_free_ecoff_debug_info. - (_bfd_mips_elf_final_link): Init debug.alloc_syments. - * ecofflink.c (_bfd_ecoff_free_ecoff_debug_info): New function. - * ecoff.c (_bfd_ecoff_bfd_free_cached_info): Call - _bfd_ecoff_free_ecoff_debug_info. - (_bfd_ecoff_slurp_symbolic_info): Replace uses of raw_syments - with alloc_syments. - (ecoff_final_link_debug_accumulate): Likewise. Use - _bfd_ecoff_free_ecoff_debug_info. - (_bfd_ecoff_bfd_copy_private_bfd_data): Set alloc_syments for - copied output. - * elf64-alpha.c (elf64_alpha_read_ecoff_info): Use - _bfd_ecoff_free_ecoff_debug_info. - * libbfd-in.h (_bfd_ecoff_free_ecoff_debug_info): Declare. - * libbfd.h: Regenerate. - gas/ - * config/obj-ecoff.c (ecoff_frob_file): Set alloc_syments. - * config/obj-elf.c (elf_frob_file_after_relocs): Likewise. - -2023-06-09 GDB Administrator - - Automatic date update in version.in - -2023-06-08 Tom de Vries - - [gdb/testsuite] Add test-case gdb.tui/long-prompt.exp - I noticed that the test-suite doesn't excercise the case in - tui_redisplay_readline that height (initially 1) is changed by this call: - ... - tui_puts_internal (w, prompt, &height); - ... - - Add a test-case that excercises this. - - Tested on x86_64-linux. - -2023-06-08 Lancelot SIX - - gdb/corelow.c: do not try to reopen a file if open failed once - In the current implementation, core_target::build_file_mappings will try - to locate and open files which were mapped in the process for which the - core dump was produced. If the file cannot be found or cannot be - opened, GDB will re-try to open it once for each time it was mapped in - the process's address space. - - This patch makes it so GDB recognizes that it has already failed to open - a given file once and does not re-try the process for each mapping. - - Reviewed-By: John Baldwin - Approved-By: Andrew Burgess - -2023-06-08 Lancelot SIX - - gdb/corelow.c: avoid repeated warnings in build_file_mappings - When GDB opens a coredump it tries to locate and then open all files - which were mapped in the process. - - If a file is found but cannot be opened with BFD (bfd_open / - bfd_check_format fails), then a warning is printed to the user. If the - same file was mapped multiple times in the process's address space, the - warning is printed once for each time the file was mapped. I find this - un-necessarily noisy. - - This patch makes it so the warning message is printed only once per - file. - - There was a comment in the code assuming that if the file was found on - the system, opening it (bfd_open + bfd_check_format) should always - succeed. A recent change in BFD (014a602b86f "Don't optimise bfd_seek - to same position") showed that this assumption is not valid. For - example, it is possible to have a core dump of a process which had - mmaped an IO page from a DRI render node (/dev/dri/runderD$NUM). In - such case the core dump does contain the information that portions of - this special file were mapped in the host process, but trying to seek to - position 0 will fail, making bfd_check_format fail. This patch removes - this comment. - - Reviewed-By: John Baldwin - Approved-By: Andrew Burgess - -2023-06-08 Lancelot SIX - - gdb/corelow.c: fix use-after-free in build_file_mappings - In core_target::build_file_mappings, GDB tries to open files referenced - in the core dump. - - The process goes like this: - - struct bfd *bfd = bfd_map[filename]; - if (bfd == nullptr) - { - bfd = bfd_map[filename] - = bfd_openr (expanded_fname.get (), "binary"); - if (bfd == nullptr || !bfd_check_format (bfd, bfd_object)) - { - if (bfd != nullptr) - bfd_close (bfd); - return; - } - } - asection *sec = bfd_make_section_anyway (bfd, "load"); - ... - - The problem is that if bfd_check_format fails, we close the bfd but keep - a reference to it in the bfd_map. - - If the same filename appears another time in the NT_FILE note, we enter - this code again. The second time, bfd_map[filename] is not nullptr and - we try to call bfd_make_section_anyway on an already closed BFD, which - is a use-after-free error. - - This patch makes sure that the bfd is only saved in the bfd_map if it - got opened successfully. - - This error got exposed by a recent change in BFD (014a602b86f "Don't - optimise bfd_seek to same position"). Since this change, opening a - coredump which contains mapping to some special files such as a DRI - render node (/dev/dri/renderD$NUM) exposes the issue. This happens for - example for processes using AMDGPU devices to offload compute tasks. - - Reviewed-By: John Baldwin - Approved-By: Andrew Burgess - -2023-06-08 Alan Modra - - Re: _bfd_free_cached_info - Oops, another leak caused by not defining the correct macro. - - * elf32-mips.c: Define bfd_elf32_bfd_free_cached_info. - * elfn32-mips.c: Likewise. - * elf64-mips.c: Define bfd_elf64_bfd_free_cached_info. - -2023-06-08 Alan Modra - - Re: _bfd_free_cached_info - ELF targets with target-specific free_cache_info functions need to - call _bfd_elf_free_cached_info, not _bfd_generic_bfd_free_cached_info. - - * elf64-ppc.c (ppc64_elf_free_cached_info): Call - _bfd_elf_free_cached_info. - * elfnn-aarch64.c (elfNN_aarch64_bfd_free_cached_info): Likewise. - -2023-06-08 GDB Administrator - - Automatic date update in version.in - -2023-06-07 Indu Bhagat - - libsframe: reuse static function sframe_decoder_get_funcdesc_at_index - sframe_decoder_get_funcdesc_at_index () is the function to access SFrame - FDEs in the SFrame decoder context. Use it consistently. - - Avoid unnecessary type cast and include minor enhancements as the code - is moved around. - - libsframe/ - * sframe.c (sframe_decoder_get_funcdesc_at_index): Move some - checks here. Move the static function definition before the new - use. - (sframe_decoder_get_funcdesc): Use - sframe_decoder_get_funcdesc_at_index instead. - -2023-06-07 Tom Tromey - - Simplify ada_lookup_struct_elt_type - This patch simplifies ada_lookup_struct_elt_type by changing it to - call find_struct_field. The two functions were substantially similar, - even to the point of having identical comments. - - I tested this using both the gdb test suite and the internal AdaCore - test suite. Given this and the fact that it is Ada-specific, I am - checking it in. - -2023-06-07 Nick Clifton - - Add extra linker warning message about discrepancies between normal and common symbols. - PR 30499 - bfd * elflink.c (elf_link_add_object_symbols): Add a message indicating that alignment and size discrepancies between the definition of common symbols and normal symbols are serious and should be investigated. - ld * testsuite/ld-elfcomm/elfcomm.exp: Update regexps to match new output from the linker. - -2023-06-07 Tom de Vries - - [gdb/tui] Factor out border-mode help text - I noticed that the help texts for tui border-mode and tui active-border-mode - are similar. - - Factor out the common part into macro HELP_ATTRIBUTE_MODE. - - Tested on x86_64-linux. - -2023-06-07 Tom de Vries - - [gdb/cli] Handle pending ^C after rl_callback_read_char for readline 7 - In commit faf01aee1d0 ("[gdb] Handle pending ^C after rl_callback_read_char") - we handled a problem (described in detail in that commit) for readline >= 8 - using public readline functions rl_pending_signal and rl_check_signals. - - For readline 7 (note that we require at least readline 7 so there's no need to - worry about readline 6), there was no fix though, because rl_check_signals was - not available. - - Fix this by instead using the private readline function _rl_signal_handler. - - There is precedent for using private readline variables and functions, but - it's something we want to get rid of (PR build/10723). Nevertheless, I think - we can allow this specific instance because it's not used when building - against readline >= 8. - - [ In the meanwhile, a fix was committed in the devel branch of the readline - repo, contained in commit 8d0c439 ("rollup of changes since readline-8.2"), - first proposed here ( - https://lists.gnu.org/archive/html/bug-readline/2022-10/msg00008.html ). ] - - Tested on x86_64-linux, against system readline 7.0 on openSUSE Leap 15.4. - - PR cli/27813 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=27813 - -2023-06-07 Tom de Vries - - Fix PR30369 regression on aarch64/arm (PR30506) - The gdb.dwarf2/dw2-prologue-end-2.exp test was failing for both AArch64 and - Arm. - - As Tom pointed out here (https://inbox.sourceware.org/gdb-patches/6663707c-4297-c2f2-a0bd-f3e84fc62aad@suse.de/), - there are issues with both the prologue skipper for AArch64 and Arm and an - incorrect assumption by the testcase. - - This patch fixes both of AArch64's and Arm's prologue skippers to not skip past - the end of a function. It also incorporates a fix to the testcase so it - doesn't assume the prologue skipper will stop at the first instruction of the - functions/labels. - - Regression-tested on aarch64-linux/arm-linux Ubuntu 20.04/22.04 and - x86_64-linux Ubuntu 20.04. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30506 - - Co-Authored-By: Tom de Vries - Co-Authored-By: Luis Machado - -2023-06-07 Tom de Vries - - [gdb/testsuite] Add missing wait in gdb.python/tui-window-disabled.exp - While working on PR tui/30526, I noticed a bug in test-case - gdb.python/tui-window-disabled.exp. - - Here we send "tui enable" to gdb, but don't wait for it to arrive before - checking for a window box: - ... - send_gdb "tui enable\n" - Term::check_box "check for python window" 0 0 80 16 - ... - - Fix this by waiting for the prompt to be issued in TUI before doing the check. - - Tested on x86_64-linux. - -2023-06-07 Tom de Vries - - [gdb/testsuite] Fix two typos in gdb.python/tui-window-disabled.exp - Fix two typos in test-case gdb.python/tui-window-disabled.exp. - -2023-06-07 Tom de Vries - - [gdb/testsuite] Handle output after prompt in gdb.threads/step-N-all-progress.exp - Using "taskset -c 0" I run into this timeout: - ... - (gdb) PASS: gdb.threads/step-N-all-progress.exp: non-stop=on: \ - target-non-stop=on: continue to breakpoint: break here - next 3^M - [New Thread 0x7ffff7dbd6c0 (LWP 10202)]^M - 50 return 0;^M - (gdb) [Thread 0x7ffff7dbd6c0 (LWP 10202) exited]^M - FAIL: gdb.threads/step-N-all-progress.exp: non-stop=on: target-non-stop=on: \ - next 3 (timeout) - ... - - The problem is that this test: - ... - gdb_test "next 3" "return 0;" - ... - expects no output after the prompt. - - Fix this by using -no-prompt-anchor. - - Tested on x86_64-linux. - -2023-06-07 Alan Modra - - ld-elf/eh5 remove xfail hppa64 - Commit cb81e84c72 resulted in an xpass for hppa64-hp-hpux11, but the - test still fails on hpp64-linux. Let's make it pass for hppa64-linux - too, by accepting pcrel sdata8 encoding in the augmentation data. - -2023-06-07 Luis Machado - - Fix gdb.base/memtag.exp failure - While running this test on an emulator, I noticed we're failing to match the - output message when "memory-tag check" is issued with no arguments. That's - because I coded the message using "error" and missed a period at the end. Other - similar messages are issued with error_no_arg. - - This patch changes that call to use error_no_arg. - - Tested on aarch64-linux Ubuntu 20.04/22.04. - -2023-06-07 Alan Modra - - _bfd_free_cached_info - doc/bfdint.texi and comments in the aout and som code about this - function are just wrong, and its name is not very apt. Better would - be _bfd_mostly_destroy, and we certainly should not be saying anything - about the possibility of later recreating anything lost by this - function. What's more, if _bfd_free_cached_info is called when - creating an archive map to reduce memory usage by throwing away - symbols, the target _close_and_cleanup function won't have access to - tdata or section bfd_user_data to tidy memory. This means most of the - target _close_and_cleanup function won't do anything, and therefore - sometimes will result in memory leaks. - - This patch fixes the documentation problems and moves most of the - target _close_and_cleanup code to target _bfd_free_cached_info. - Another notable change is that bfd_generic_bfd_free_cached_info is now - defined as _bfd_free_cached_info rather than _bfd_bool_bfd_true, - ie. the default now frees objalloc memory. - -2023-06-07 Alan Modra - - Memory leaks in bfd/vms-lib.c - * vms-lib.c (vms_lib_read_index): Free malloc'd memory on error - return paths. - (vms_write_index, _bfd_vms_lib_write_archive_contents): Likewise. - - bfd/elf.c strtab memory leak - * elf.c (_bfd_elf_compute_section_file_positions): Free strtab - on set_group_contents failure return path. - -2023-06-07 Alan Modra - - objcopy memory leaks after errors - These aren't important at all, but tidy them in case they obscure - other more important leaks. - - * objcopy (copy_file): Close input bfd after errors. - -2023-06-07 GDB Administrator - - Automatic date update in version.in - -2023-06-06 Indu Bhagat - - libsframe: fix cosmetic issues and typos - include/ - * sframe-api.h (sframe_decoder_get_num_fidx): Use extern. - libsframe/ - * sframe-dump.c (dump_sframe_func_with_fres): Fix line length. - * sframe.c (sframe_frame_row_entry_copy): Likewise. - (sframe_decode_fre_start_address): Use the intended type uint32_t. - -2023-06-06 Alan Modra - - Re: loongarch readelf support - Commit 89c70cd358b8 apparently results in a bogus "value may be used - uninitialized" warning with some combination of compiler and - optimisation options. - - * readelf.c (target_specific_reloc_handling): Init value. - -2023-06-06 GDB Administrator - - Automatic date update in version.in - -2023-06-05 Indu Bhagat - - libsframe: avoid unnecessary type casts - Change the data type of some of the members of the sframe_decoder_ctx - and sframe_encoder_ctx data structures to use the applicable data types - explicitly. Current implementation in libsframe does type casts, which - seem unnecessary. - - libsframe/ - * libsframe/sframe-impl.h (struct sframe_decoder_ctx): Use - applicable data type explicitly. - (struct sframe_encoder_ctx): Likewise. Use same style of - comments consistently. - * libsframe/sframe.c (struct sf_fde_tbl): Define without - typedef. - (struct sf_fre_tbl): Likewise. - (sframe_decode): Remove unnecessary type casts. - (sframe_encoder_get_funcdesc_at_index): Likewise. - (sframe_encoder_add_fre): Likewise. - (sframe_encoder_add_funcdesc): Likewise. - (sframe_sort_funcdesc): Likewise. - (sframe_encoder_write_sframe): Likewise. - -2023-06-05 H.J. Lu - - ELF: Add "#pass" to ld-elf/pr30508.d - Add "#pass" to ld-elf/pr30508.d to allow extra segments. - - PR binutils/30508 - * testsuite/ld-elf/pr30508.d: Add "#pass". - -2023-06-05 Tom Tromey - - Use unrelocated_addr in dwarf2_fde - This changes dwarf2_fde to use the unrelocated_addr type. This - pointed out a latent bug in dwarf2_frame_cache, where a relocated - address is compared to an unrelocated address. - -2023-06-05 Tom Tromey - - Use local "text offset" variable in dwarf2_frame_cache - A few spots in dwarf2_frame_cache use: - - cache->per_objfile->objfile->text_section_offset () - - ... and a subsequent patch will add more, so move this into a local - variable. - -2023-06-05 Tom Tromey - - Constify dwarf2_cie::augmentation - I noticed that dwarf2_cie::augmentation could be 'const'. - - Use "unrelocated" terminology in linetable_entry - I forgot to convert struct linetable_entry to use the "unrelocated" - (as opposed to "raw") terminology. This patch corrects the oversight. - - Fix comment in address_class - enum address_class has a stale comment referring to - MSYMBOL_VALUE_RAW_ADDRESS, which no longer exists. This patch updates - the comment. - - Use unrelocated_addr in dwarf_decode_lines - This changes dwarf_decode_lines to accept an unrelocated_addr and - fixes up the fallout. - - Use unrelocated_addr in the DWARF reader - This changes various spots in the DWARF reader to use - unrelocated_addr. - - Move unrelocated_addr to common-types.h - unrelocated_addr is currently defined in symtab.h, but in order to - avoid having to include that in more places, I wanted to move the type - elsewhere. I considered defs.h, but it seemed reasonable to have it - next to CORE_ADDR, which is what this patch does. - - Minor cleanup in loclist_describe_location - loclist_describe_location already has a per_objfile local variable, so - use it consistently. - - Remove baseaddr parameter from dwarf2_record_block_ranges - dwarf2_record_block_ranges is only ever called with the text section - offset, so this patch removes the parameter entirely. This makes a - subsequent patch a little simpler. - -2023-06-05 H.J. Lu - - ELF: Don't warn an empty PT_LOAD with the program headers - When rewriting the program headers, don't warn an empty PT_LOAD with the - program headers. - - bfd/ - - PR binutils/30508 - * elf.c (rewrite_elf_program_header): Don't warn if an empty - PT_LOAD contains the program headers. - - ld/ - - PR binutils/30508 - * testsuite/ld-elf/pr30508.d: New file. - * testsuite/ld-elf/pr30508.s: Likewise. - -2023-06-05 Andrew Burgess - - gdb: building inferior strings from within GDB - History Of This Patch - ===================== - - This commit aims to address PR gdb/21699. There have now been a - couple of attempts to fix this issue. Simon originally posted two - patches back in 2021: - - https://sourceware.org/pipermail/gdb-patches/2021-July/180894.html - https://sourceware.org/pipermail/gdb-patches/2021-July/180896.html - - Before Pedro then posted a version of his own: - - https://sourceware.org/pipermail/gdb-patches/2021-July/180970.html - - After this the conversation halted. Then in 2023 I (Andrew) also took - a look at this bug and posted two versions: - - https://sourceware.org/pipermail/gdb-patches/2023-April/198570.html - https://sourceware.org/pipermail/gdb-patches/2023-April/198680.html - - The approach taken in my first patch was pretty similar to what Simon - originally posted back in 2021. My second attempt was only a slight - variation on the first. - - Pedro then pointed out his older patch, and so we arrive at this - patch. The GDB changes here are mostly Pedro's work, but updated by - me (Andrew), any mistakes are mine. - - The tests here are a combinations of everyone's work, and the commit - message is new, but copies bits from everyone's earlier work. - - Problem Description - =================== - - Bug PR gdb/21699 makes the observation that using $_as_string with - GDB's printf can cause GDB to print unexpected data from the - inferior. The reproducer is pretty simple: - - #include - static char arena[100]; - - /* Override malloc() so value_coerce_to_target() gets a known - pointer, and we know we"ll see an error if $_as_string() gives - a string that isn't null terminated. */ - void - *malloc (size_t size) - { - memset (arena, 'x', sizeof (arena)); - if (size > sizeof (arena)) - return NULL; - return arena; - } - - int - main () - { - return 0; - } - - And then in a GDB session: - - $ gdb -q test - Reading symbols from /tmp/test... - (gdb) start - Temporary breakpoint 1 at 0x4004c8: file test.c, line 17. - Starting program: /tmp/test - - Temporary breakpoint 1, main () at test.c:17 - 17 return 0; - (gdb) printf "%s\n", $_as_string("hello") - "hello"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - (gdb) quit - - The problem above is caused by how value_cstring is used within - py-value.c, but once we understand the issue then it turns out that - value_cstring is used in an unexpected way in many places within GDB. - - Within py-value.c we have a null-terminated C-style string. We then - pass a pointer to this string, along with the length of this - string (so not including the null-character) to value_cstring. - - In value_cstring GDB allocates an array value of the given character - type, and copies in requested number of characters. However - value_cstring does not add a null-character of its own. This means - that the value created by calling value_cstring is only - null-terminated if the null-character is included in the passed in - length. In py-value.c this is not the case, and indeed, in most uses - of value_cstring, this is not the case. - - When GDB tries to print one of these strings the value contents are - pushed to the inferior, and then read back as a C-style string, that - is, GDB reads inferior memory until it finds a null-terminator. For - the py-value.c case, no null-terminator is pushed into the inferior, - so GDB will continue reading inferior memory until a null-terminator - is found, with unpredictable results. - - Patch Description - ================= - - The first thing this patch does is better define what the arguments - for the two function value_cstring and value_string should represent. - The comments in the header file are updated to describe whether the - length argument should, or should not, include a null-character. - Also, the data argument is changed to type gdb_byte. The functions as - they currently exist will handle wide-characters, in which case more - than one 'char' would be needed for each character. As such using - gdb_byte seems to make more sense. - - To avoid adding casts throughout GDB, I've also added an overload that - still takes a 'char *', but asserts that the character type being used - is of size '1'. - - The value_cstring function is now responsible for adding a null - character at the end of the string value it creates. - - However, once we start looking at how value_cstring is used, we - realise there's another, related, problem. Not every language's - strings are null terminated. Fortran and Ada strings, for example, - are just an array of characters, GDB already has the function - value_string which can be used to create such values. - - Consider this example using current GDB: - - (gdb) set language ada - (gdb) p $_gdb_setting("arch") - $1 = (97, 117, 116, 111) - (gdb) ptype $ - type = array (1 .. 4) of char - (gdb) p $_gdb_maint_setting("test-settings string") - $2 = (0) - (gdb) ptype $ - type = array (1 .. 1) of char - - This shows two problems, first, the $_gdb_setting and - $_gdb_maint_setting functions are calling value_cstring using the - builtin_char character, rather than a language appropriate type. In - the first call, the 'arch' case, the value_cstring call doesn't - include the null character, so the returned array only contains the - expected characters. But, in the $_gdb_maint_setting example we do - end up including the null-character, even though this is not expected - for Ada strings. - - This commit adds a new language method language_defn::value_string, - this function takes a pointer and length and creates a language - appropriate value that represents the string. For C, C++, etc this - will be a null-terminated string (by calling value_cstring), and for - Fortran and Ada this can be a bounded array of characters with no null - terminator. Additionally, this new language_defn::value_string - function is responsible for selecting a language appropriate character - type. - - After this commit the only calls to value_cstring are from the C - expression evaluator and from the default language_defn::value_string. - - And the only calls to value_string are from Fortan, Ada, and ObjectC - related code. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=21699 - - Co-Authored-By: Simon Marchi - Co-Authored-By: Andrew Burgess - Co-Authored-By: Pedro Alves - Approved-By: Simon Marchi - -2023-06-05 Tom de Vries - - [gdb] Fix grammar in comments and docs - Fix grammar in some comments and docs: - - machines that doesn't -> machines that don't - - its a -> it's a - - its the -> it's the - - if does its not -> if it does it's not - - one more instructions if doesn't match -> - one more instruction if it doesn't match - - it's own -> its own - - it's first -> its first - - it's pointer -> its pointer - - I also came across "it's performance" in gdb/stubs/*-stub.c in the HP public - domain notice, I've left that alone. - - Tested on x86_64-linux. - -2023-06-05 Tom de Vries - - [gdb] Fix more typos - Fix some more typos: - - distinquish -> distinguish - - actualy -> actually - - singe -> single - - frash -> frame - - chid -> child - - dissassembler -> disassembler - - uninitalized -> uninitialized - - precontidion -> precondition - - regsiters -> registers - - marge -> merge - - sate -> state - - garanteed -> guaranteed - - explictly -> explicitly - - prefices (nonstandard plural) -> prefixes - - bondary -> boundary - - formated -> formatted - - ithe -> the - - arrav -> array - - coresponding -> corresponding - - owend -> owned - - fials -> fails - - diasm -> disasm - - ture -> true - - tpye -> type - - There's one code change, the name of macro SIG_CODE_BONDARY_FAULT changed to - SIG_CODE_BOUNDARY_FAULT. - - Tested on x86_64-linux. - -2023-06-05 Alan Modra - - bfd_error_on_input messages - bfd_errmsg uses asprintf for bfd_error_on_input, which means we - currently leak memory. Keep a static pointer to the message and free - it in various places to minimise the leaks. - bfd_set_input_error (NULL, bfd_error_no_error) is a way to free up the - last string if that matters. - - * bfd.c (input_error_msg): New static var. - (bfd_set_input_error): Free it here.. - (bfd_init): ..and here.. - (bfd_errmsg): ..and here. Use it for asprintf output. - -2023-06-05 Alan Modra - - Yet another ecoff fuzzed object fix - * ecoff.c (_bfd_ecoff_slurp_symbol_table): Sanity check fdr_ptr - csym against remaining space for symbols. Error on out of bounds - fdr_ptr fields. - -2023-06-05 YunQiang Su - - MIPS: sync oprand char usage between mips and micromips - We should try our best to make mips32 using the same - oprand char with micromips. So for mips32, we use: - - ^ is added for 5bit sa oprand for some new DSPr2 instructions: - APPEND, PREPEND, PRECR_SRA[_R].PH.W - the LSB bit is 11, like RD. - +t is removed for coprocessor 0 destination register. - 'E' does the samething. - +t is now used for RX oprand for MFTR/MTTR (MT ASE) - ? is added for sel oprand for MFTR/MTTR (MT ASE) - For mips32, the position of sel in MFTR/MTTR is same with mfc0 etc, - while for micromips, they are different. - - We also add an extesion format of cftc2/cttc2/mftc2/mfthc2/mttc2/mtthc2: - concatenating rs with rx as the index of control or data. - -2023-06-05 YunQiang Su - - MIPS: add MT ASE support for micromips32 - These instructions are descripted in MD00768. - - MIPS® Architecture for Programmers - Volume IV-f: The MIPS® MT Module for - the microMIPS32™ Architecture - - Document Number: MD00768 - Revision 1.12 - July 16, 2013 - - https://s3-eu-west-1.amazonaws.com/downloads-mips/documents/MD00768-1C-microMIPS32MT-AFP-01.12.pdf - -2023-06-05 YunQiang Su - - Revert "MIPS: add MT ASE support for micromips32" - This reverts commit 783a5f46b0583e9ed3a63acd3361009f46de5c17. - -2023-06-05 YunQiang Su - - MIPS: add MT ASE support for micromips32 - These instructions are descripted in MD00768. - - MIPS® Architecture for Programmers - Volume IV-f: The MIPS® MT Module for - the microMIPS32™ Architecture - - Document Number: MD00768 - Revision 1.12 - July 16, 2013 - - https://s3-eu-west-1.amazonaws.com/downloads-mips/documents/MD00768-1C-microMIPS32MT-AFP-01.12.pdf - -2023-06-05 YunQiang Su - - MIPS: fix some ld testcases with compiler - 1. config/default.exp: - use -mabi=32 not for -gnuabi64 - xfail_from_runlist: remove an element and mark it xfail. - 2. ld-elf/indirect.exp: xfail - indirect5a indirect5b indirect6a indirect6b - indirect5c indirect5d indirect6c indirect6d - 3. ld-elf/pr23658-2: mips output is not common - 4. ld-elf/shared.exp: non-run on mips: Build libpr16496b.so - 5. ld-elfvers/vers.exp: - xfail vers4, vers4b - no-run on mips: vers24a, vers24b, vers24c - 6. ld-gc/gc.exp: add -KPIC into asflags for pr13683, pr14265, pr19161 - 7. ld-mips-elf/mips-elf.exp: - use noarch for mips16-local-stubs-1, since it use -mips4 - 8. ld-plugin/lto.exp: - no-run on mips/linux: PR ld/12982 - add -KPIC into asflags for lto-3r, lto-5r, PR ld/19317 (2) - xfail PR ld/15323 (4), PR ld/19317 (3) - 9. ld-plugin/plugin.exp: xfail - plugin claimfile lost symbol - plugin claimfile replace symbol - plugin claimfile replace symbol - plugin claimfile lost symbol with source - plugin claimfile replace symbol with source - plugin claimfile resolve symbol with source - plugin 2 with source lib - load plugin 2 with source - plugin 3 with source lib - load plugin 3 with source - 11. ld-selective/selective.exp: add -fno-PIC, which is needed for -mno-abicalls - 12. ld-shared/shared.exp: xfail shared (non PIC), shared (PIC main, non PIC so) - - MIPS: fix -gnuabi64 testsuite - Test on: - mips64-linux-gnuabi64 - mips64el-linux-gnuabi64 - mipsisa64-linux-gnuabi64 - mipsisa64el-linux-gnuabi64 - mipsisa64r2-linux-gnuabi64 - mipsisa64r2el-linux-gnuabi64 - mipsisa64r6-linux-gnuabi64 - mipsisa64r6el-linux-gnuabi64 - -2023-06-05 YunQiang Su - - MIPS: fix r6 testsuites - Introduce - run_dump_test_o32l - run_dump_test_n32l - run_dump_test_n64l - Which use `-march=from-abi` for pre-R6 testcases, - like micromips/mips16e etc. - - For cases doesn't use run_dump_test_*, we use - -mips32r2 for micromips32 - -mips1 for mips16-32 - -march=from-abi for testcases to o32/n32/n64 both/all. - - Replace `addi` with `addiu` for some cases for both r6 and pre-R6. - - Introduce some new testcases for r6 with FPXX/FP64. - Introduce new testcase: comdat-reloc-r6. - - Skip `default` in mips_arch_list_matching if triple is mipsisa*, due to: - 1)it will cannot match mipsr6@*.d: since mips32rN/mips64rN - will always be used, it won't be a problem. - 2)some test think -march=mips64rN will alway true for mipsisa64rN, - which is not true now. - - This patch fix testsuite for all r6-default gnu triples: - mipsisa32r6-linux-gnu - mipsisa32r6el-linux-gnu - mips-img-linux-gnu - mipsel-img-linux-gnu - mipsisa64r6-linux-gnu - mipsisa64r6el-linux-gnu - -2023-06-05 YunQiang Su - - MIPS: default r6 if vendor is img - This behavior is used by downstream toolchain since 2014. - We also set the default ABI for mips*-img-elf to O32. - The previous value is NO_ABI, which is not good default ABI. - - We don't support mips64*-img* due to GCC doesn't support it, - and We believe that the multilib should be used for this case. - -2023-06-05 YunQiang Su - - MIPS: gas: alter 64 or 32 for mipsisa triples if march is implicit - When configure with triples mipsisa[32,64]rN[el,], the march value - is pinned to a fix value if not given explicitly. for example - 1) mipsisa32r6-linux-gnu -n32 xx.s will complains that: - -march=mips32r6 is not compatible with the selected ABI - 2) mipsisa64r2el-linux-gnu -o32 generates objects with 64bit CPU: - ELF 32-bit LSB relocatable, MIPS, MIPS64 rel2 version 1 (SYSV) - They are not good default behaviors: Let's alter the CPU info - - Since we are using these triples as a regular linux distributions, - let's alter march according to ABI. - -2023-06-05 GDB Administrator - - Automatic date update in version.in - -2023-06-04 GDB Administrator - - Automatic date update in version.in - -2023-06-03 Tom de Vries - - [gdb] Fix typos - Fix a few typos: - - implemention -> implementation - - convertion(s) -> conversion(s) - - backlashes -> backslashes - - signoring -> ignoring - - (un)ambigious -> (un)ambiguous - - occured -> occurred - - hidding -> hiding - - temporarilly -> temporarily - - immediatelly -> immediately - - sillyness -> silliness - - similiar -> similar - - porkuser -> pokeuser - - thats -> that - - alway -> always - - supercede -> supersede - - accomodate -> accommodate - - aquire -> acquire - - priveleged -> privileged - - priviliged -> privileged - - priviledges -> privileges - - privilige -> privilege - - recieve -> receive - - (p)refered -> (p)referred - - succesfully -> successfully - - successfuly -> successfully - - responsability -> responsibility - - wether -> whether - - wich -> which - - disasbleable -> disableable - - descriminant -> discriminant - - construcstor -> constructor - - underlaying -> underlying - - underyling -> underlying - - structureal -> structural - - appearences -> appearances - - terciarily -> tertiarily - - resgisters -> registers - - reacheable -> reachable - - likelyhood -> likelihood - - intepreter -> interpreter - - disassemly -> disassembly - - covnersion -> conversion - - conviently -> conveniently - - atttribute -> attribute - - struction -> struct - - resonable -> reasonable - - popupated -> populated - - namespaxe -> namespace - - intialize -> initialize - - identifer(s) -> identifier(s) - - expection -> exception - - exectuted -> executed - - dungerous -> dangerous - - dissapear -> disappear - - completly -> completely - - (inter)changable -> (inter)changeable - - beakpoint -> breakpoint - - automativ -> automatic - - alocating -> allocating - - agressive -> aggressive - - writting -> writing - - reguires -> requires - - registed -> registered - - recuding -> reducing - - opeartor -> operator - - ommitted -> omitted - - modifing -> modifying - - intances -> instances - - imbedded -> embedded - - gdbaarch -> gdbarch - - exection -> execution - - direcive -> directive - - demanged -> demangled - - decidely -> decidedly - - argments -> arguments - - agrument -> argument - - amespace -> namespace - - targtet -> target - - supress(ed) -> suppress(ed) - - startum -> stratum - - squence -> sequence - - prompty -> prompt - - overlow -> overflow - - memember -> member - - languge -> language - - geneate -> generate - - funcion -> function - - exising -> existing - - dinking -> syncing - - destroh -> destroy - - clenaed -> cleaned - - changep -> changedp (name of variable) - - arround -> around - - aproach -> approach - - whould -> would - - symobl -> symbol - - recuse -> recurse - - outter -> outer - - freeds -> frees - - contex -> context - - Tested on x86_64-linux. - - Reviewed-By: Tom Tromey - -2023-06-03 Tom de Vries - - [gdb/tdep] Fix typo in debug message - In microblaze_analyze_prologue in gdb/microblaze-tdep.c I came across: - ... - microblaze_debug ("got addi r1,r1,%d; contnuing\n", imm); - ... - - Fix this by using "continuing". - - Reviewed-By: Tom Tromey - -2023-06-03 Tom de Vries - - [gdb/python] Fix doc string of valpy_const_value - In gdb/python/py-value.c, in the value_object_methods array I noticed: - ... - { "const_value", valpy_const_value, METH_NOARGS, - "Return a 'const' qualied version of the same value." }, - ... - - Fix the qualied -> qualified typo. - - Reviewed-By: Tom Tromey - -2023-06-03 Tom de Vries - - [gdb/guile] Fix doc string for value-optimized-out? - In gdb/guile/scm-value.c, I noticed in the value_functions array initializer: - ... - { "value-optimized-out?", 1, 0, 0, - as_a_scm_t_subr (gdbscm_value_optimized_out_p), - "\ - Return #t if the value has been optimizd out." }, - ... - There's a typo in the doc string. - - Fix this by using "optimized". - - Reviewed-By: Tom Tromey - -2023-06-03 Tom de Vries - - [gdb/tui] Fix help text of show tui tab-width - I noticed: - ... - (gdb) help show tui tab-width - Show the tab witdh, in characters, for the TUI. - This variable controls how many spaces are used to display a tab character. - ... - a typo: "witdh". - - Fix this by using "width" instead. - - Reviewed-By: Tom Tromey - -2023-06-03 Tom de Vries - - [gdb/cli] Fix help text of maint info target-sections - I noticed a typo: - ... - (gdb) help maint info target-sections - List GDB's internal section table. - - Print the current targets section list. This is a sub-set of all - sections, from all objects currently loaded. Usually the ALLOC - sectoins. - ... - - Fix this by using "sections". - - Reviewed-By: Tom Tromey - -2023-06-03 Tom de Vries - - [gdb/cli] Fix help text of maint set ignore-prologue-end-flag - I noticed here: - ... - (gdb) help maint set ignore-prologue-end-flag - Set 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. - ... - a typo in "Disabeling" and accidental word repetition "use use". - - Fix by replacing with "Disabling" and "use". - - Reviewed-By: Tom Tromey - -2023-06-03 Tom de Vries - - [gdb/compile] Fix typo in debug message - In compile_object_load in gdb/compile/compile-object-load.c I came across: - ... - "Connectiong ELF symbol \"%s\" to the .toc section (%s)\n", - ... - - Fix this typo by using "Connecting" instead. - - Reviewed-By: Tom Tromey - -2023-06-03 Tom de Vries - - [gdbserver] Fix typo in debug message - I noticed in emit_ops_insns in gdbserver/linux-aarch64-low.cc: - ... - threads_debug_printf ("Adding %d instrucions at %s", - ... - - Fix the typo by using "instructions" instead. - - Reviewed-By: Tom Tromey - -2023-06-03 Tom de Vries - - [gdb/ada] Fix argument name misspelling - Two functions use the argument name bounds_prefered_p. - - This misspells "preferred". - - Fix this by using bounds_preferred_p instead. - - Tested on x86_64-linux. - - Reviewed-By: Tom Tromey - -2023-06-03 Alan Modra - - Re: loongarch readelf support - Another segfault. - - * readelf.c (target_specific_reloc_handling): Sanity check - loongarch reloc r_offset. - -2023-06-03 Alan Modra - - Re: More ecoff sanity checks - Yet another fuzzer fix. - - * ecoff.c (ecoff_slurp_symbolic_header ): Zero counts when - associated pointer is zero. - (_bfd_ecoff_slurp_symbolic_info): Remove now unnecessary check. - -2023-06-03 GDB Administrator - - Automatic date update in version.in - -2023-06-02 Luis Machado - - [AArch64] Fix architecture debug version constant thinkos - Caught this during emulator testing. - - Fix the constants. They should be 0xa and 0xb as opposed to 0x10 and - 0x11. There was a thinko while defining them. - - Obvious enough. - - Tested on aarch64-linux Ubuntu 20.04/22.04. - -2023-06-02 Alan Modra - - Re: bfd_close and target free_cached_memory - _bfd_delete_bfd can be called early, before the target xvec is set up. - - * opncls.c (_bfd_delete_bfd): Don't segfault on NULL xvec. - -2023-06-02 Alan Modra - - Re: More ecoff sanity checks - Another fix for fuzzed object files, exhibiting as a segfault in - nm.c filter_symbols when accessing a symbol name. - - * ecoff.c (_bfd_ecoff_slurp_symbol_table): Sanity check - fdr_ptr->issBase, and tighten sym.iss check. - -2023-06-02 Alan Modra - - loongarch readelf support - This fixes two buffer overflows found by fuzzers. - - * readelf.c (target_specific_reloc_handling): Sanity check - loongarch reloc symbol index. Don't apply reloc after errors. - Reduce translation work of "invalid symbol index" error message. - -2023-06-02 Alan Modra - - Minor objcopy optimisation for copy_relocations_in_section - * objcopy (copy_relocations_in_section): Don't read the relocs - for STRIP_ALL if keep_specific_htab is empty. - -2023-06-02 GDB Administrator - - Automatic date update in version.in - -2023-06-01 Indu Bhagat - - libsframe: avoid using magic number - Define a new constant for the maximum number of stack offsets handled in - libsframe, and use it. Note that the SFrame format does not define such - a constant (limit). This is an implmentation-defined constant in - libsframe. - - include/ - * sframe-api.h (MAX_NUM_STACK_OFFSETS): New definition. - libsframe/ - * sframe.c (sframe_fre_sanity_check_p): Use it. - -2023-06-01 Indu Bhagat - - libsframe: minor fixups in flip_fre related functions - libsframe/ - * sframe.c (flip_fre_start_address): Remove unnecessary type - cast. Use uint16_t instead of unsigned short. - (flip_fre_stack_offsets): Likewise. - -2023-06-01 Jim Wilson - - RISC-V: PR30449, Add lga assembler macro support. - Originally discussion, https://github.com/riscv/riscv-isa-manual/pull/539 - - Added new load address pseudo instruction which is always expanded to GOT - access, no matter the .option rvc is set or not. - - gas/ - PR 30449 - * config/tc-riscv.c (macro): Add M_LGA support. - * testsuite/gas/riscv/la-variants.d: New. - * testsuite/gas/riscv/la-variants.s: New. - include/ - PR 30449 - * opcode/riscv.h (M_LGA): New. - opcodes/ - PR 30449 - * riscv-opc.c (riscv_opcodes): Add lga support. - -2023-06-01 Nelson Chu - - [PR ld/22263][PR ld/24676] RISC-V: Avoid spurious R_RISCV_NONE for TLS GD/IE. - For TLS GD/IE, add the same condition with the relocate_section in the - allocate_dynrelocs, to make sure we won't reserve redundant spaces - for dynamic relocations since the conservative estimatation. - - After applying this patch, ld seems no longer generate the spurious - R_RISCV_NONE for pr22263-1 test, and the test in pr24676. - - bfd/ - PR ld/22263 - PR ld/24676 - * elfnn-riscv.c (RISCV_TLS_GD_IE_NEED_DYN_RELOC): New defined. - Set NEED_RELOC to true if TLS GD/IE needs dynamic relocations, - and INDX will be the dynamic index. - (allocate_dynrelocs): Don't reserve extra spaces in the rela.got - if RISCV_TLS_GD_IE_NEED_DYN_RELOC set need_reloc to false. This - condition needs to be same as relocate_section. - (relocate_section): Likewise, use the same condition as - allocate_dynrelocs. - -2023-06-01 Alan Modra - - Harden PowerPC64 OPD handling against fuzzers - PowerPC64 ELFv1 object files should have at most one .opd section, and - OPD handling in elf64-ppc.c makes use of this fact by caching some - .opd section info in the per-object bfd.tdata. This was done to avoid - another word in the target specific section data. Of course, fuzzers - don't respect the ABI, and even non-malicious users can accidentally - create multiple .opd sections. So it is better to avoid possible - buffer overflows and other confusion when OPD handling for a second - .opd section references data for the first .opd section, by keeping - the data per-section. - - The patch also fixes a memory leak, and a corner case where I think we - could hit an assertion in opd_entry_value or read out of bounds in - ppc64_elf_branch_reloc doing a final link producing non-ppc64 output. - (It's a really rare corner case because not only would you need to be - linking ppc64 objects to non-ppc64 output, you'd also need a branch - reloc symbol to be defined in a .opd section of a non-ppc64 input.) - - * elf64-ppc.c (is_ppc64_elf): Move earlier in file. - (ppc64_elf_branch_reloc): Check symbol bfd before accessing - ppc64 elf specific data structures. - (struct ppc64_elf_obj_tdata): Move opd union.. - (struct _ppc64_elf_section_data): ..to here. - (ppc64_elf_before_check_relocs): Allow for opd sec_type - already set to sec_opd. - (ppc64_elf_check_relocs): Only set sec_type to sec_toc when - unset. Error for unexpected toc relocs. - (opd_entry_value): Return -1 when non-ppc64 rather than - asserting. Check and set sec_type too. Adjust for changed - location of contents and relocs. - (ppc64_elf_relocate_section): Adjust for changed location of - cached .opd relocs. - (ppc64_elf_free_cached_info): New function. - (bfd_elf64_bfd_free_cached_info): Define. - -2023-06-01 Alan Modra - - bfd_close and target free_cached_memory - bfd_free_cached_info is used in just one place in archive.c, which - means most times we reach bfd_close the function isn't called. On the - other hand, if bfd_free_cached_info is called we can't do much on the - bfd since it loses all its obj_alloc memory. This restricts what can - be done in a target _close_and_cleanup. In particular you can't look - at sections, which leads to duplication of code in target - close_and_cleanup and free_cached_info, eg. elfnn-aarch64.c. - - * opncls.c (_bfd_delete_bfd): Call bfd_free_cached_info. - * elfnn-aarch64.c (elfNN_aarch64_close_and_cleanup): Delete. - (bfd_elfNN_close_and_cleanup): Don't define. - * som.c (som_bfd_free_cached_info): Don't call - _bfd_generic_close_and_cleanup here. - (som_close_and_cleanup): Define as _bfd_generic_close_and_cleanup. - -2023-06-01 Alan Modra - - section_by_target_index memory leak - The rs6000 backend can call coff_section_from_bfd_index from its - object_p function via coff_set_alignment_hook. If the object doesn't - match, or another target matches too, then the hash table needs to be - freed via a cleanup. - - * coffgen.c (coff_object_cleanup): New function. - (coff_real_object_p): Return coff_object_cleanup, and call on - failure path. Move declaration to.. - * libcoff-in.h: ..here. - (coff_object_cleanup): Declare. - * coff-stgo32.c (go32exe_cleanup): Call coff_object_cleanup. - (go32exe_check_format): Adjust assertion. - * libcoff.h: Regenerate. - -2023-06-01 Alan Modra - - Remove BFD_FAIL in cpu-sh.c - The assertions in cpu-sh.c can be triggered by passing bogus values - in disassemble_info.mach. This doesn't cause any bfd misbehaviour. - - * cpu-sh.c (sh_get_arch_from_bfd_mach): Remove BFD_FAIL. - (sh_get_arch_up_from_bfd_mach): Likewise. - -2023-06-01 GDB Administrator - - Automatic date update in version.in - -2023-05-31 Vladimir Mezentsev - - gprofng: Fix -Wsign-compare warning - gprofng/ChangeLog - 2023-05-25 Vladimir Mezentsev - - PR gprofng/30490 - * src/LoadObject.cc: Fix -Wsign-compare warning. - -2023-05-31 Vladimir Mezentsev - - gprofng: 29470 The test suite should be made more flexible - I add two new targets (check-extra, check-install) for gprofng testing: - `make check` runs sanity testing for gprofng and takes ~30 secunds. - `make check-extra` runs all gprofng tests and takes ~20 minutus. - `make check-install` runs all gprofng tests and uses gprofng installation. - - On aarch64, there are unwind problems in libgp-collector.so. - I set ACCT_FILTER to temporarily ignore problematic functions. - - gprofng/ChangeLog - 2023-05-25 Vladimir Mezentsev - - PR gprofng/29470 - * Makefile.am: Add check-extra, check-install. - * Makefile.in: Rebuild - * testsuite/config/default.exp: Set the GPROFNG variable. - * testsuite/gprofng.display/display.exp: Updated the test list. - * testsuite/gprofng.display/jsynprog/Intface.java: Correct copyright. - * testsuite/gprofng.display/jsynprog/Launcher.java: Likewise. - * testsuite/gprofng.display/jsynprog/Makefile: Likewise. - * testsuite/gprofng.display/jsynprog/Routine.java: Likewise. - * testsuite/gprofng.display/jsynprog/Sub_Routine.java: Likewise. - * testsuite/gprofng.display/jsynprog/cloop.cc: Likewise. - * testsuite/gprofng.display/jsynprog/jsynprog.h: Likewise. - * testsuite/gprofng.display/jsynprog/jsynprog.java: Correct copyright. - Add the -j option to run the selected functions. - * testsuite/gprofng.display/synprog/check_results.pl: - Remove unused environment variable. - * testsuite/gprofng.display/synprog/synprog.c: Updated DEFAULT_COMMAND. - * testsuite/lib/Makefile.skel: Apply $(ACCT_FILTER). - * testsuite/lib/acct.pm: Ignore errors when $(ACCT_FILTER) is set. - * testsuite/lib/display-lib.exp: Add TARGET_FLAGS in make_args. - -2023-05-31 Tom Tromey - - Improve MI -dprintf-insert documentation - I found the documentation for -dprintf-insert a bit unclear. It - didn't mention the possibility of multiple arguments, and I also - noticed that it implied that the format parameter is optional, which - it is not. - - While looking into this I also noticed a few comments in the - implementation that could also be improved. - - Then, I noticed a repeated call to strlen in a loop condition, so I - fixed this up as well. - - Reviewed-By: Eli Zaretskii - -2023-05-31 Tom Tromey - - Pass correct name to @value in gdb.texinfo - I noticed a couple instance of this warning when rebuilding the gdb - info files: - - warning: undefined flag: GDB - - The problem is that the wrong argument was passed to @value. This - patch fixes the problem. - -2023-05-31 Tom de Vries - - [gdb/testsuite] Fix gdb.tui/wrap-line.exp with --disable-tui - When running the test-case gdb.tui/wrap-line.exp with a build configured with - --disable-tui, we run into: - ... - (gdb) PASS: gdb.tui/wrap-line.exp: width-hard-coded: set width 50 - tui new-layout command-layout cmd 1^M - Undefined command: "tui". Try "help".^M - (gdb) ERROR: Undefined command "tui new-layout command-layout cmd 1". - ... - - Fix this by guarding the command with allow_tui_tests. - - Tested on x86_64-linux. - -2023-05-31 Tom de Vries - - [gdb/testsuite] Fix gdb.tui/pr30056.exp for native-extended-gdbserver - When running test-case gdb.tui/pr30056.exp with target board - native-extended-gdbserver, I run into: - ... - Quit^[[K^M^[[B(gdb) PASS: gdb.tui/pr30056.exp: Control-C - Remote debugging from host ::1, port 38810^M - ^M(failed reverse-i-search)`xyz': ^M(gdb) target extended-remote \ - localhost:2346^[[7GWARNING: Timed out waiting for EOF in server after \ - monitor exit - ... - - This is due to the fact that ^C doesn't abort the reverse-i-search. This - appears to be due to a readline problem. A PR is open about this: PR - cli/30498. - - Add a KFAIL for the PR, and ensure that the isearch is aborted by using ^G, - such that we have a responsive prompt to handle the "monitor exit" command - that native-extended-gdbserver issues. - - Tested on x86_64-linux. - -2023-05-31 Tristan Gingold - - pe/coff - add support for base64 encoded long section names - PR 30444 - * coffcode.h (coff_write_object_contents): Handle base64 encoding on PE. Also check for too large string table. - * coffgen.c (extract_long_section_name): New function extracted from ... (make_a_section_from_file): ... here. Add support for base64 long section names. (decode_base64): New function. - -2023-05-31 Nick Clifton - - Fix printf formating issues in elfxx-loongarch64.c - -2023-05-31 Felix Willgerodt - - python, btrace: Fix some small formatting issues. - Reviewed-By: Tom Tromey - -2023-05-31 Tom de Vries - - [gdb/tui] Fix fingerprint for cmd-only layout - I added a cmd-only layout: - ... - (gdb) tui new-layout cmd cmd 1 - ... - and set it: - ... - (gdb) layout cmd - ... - which gave me the expect result: only the cmd window in the screen. - - However, after going back to layout src: - ... - (gdb) layout src - ... - I got a source window with only one line in it, and the cmd window taking most - of the screen. - - I traced this back to tui_set_layout, where for both the old and the new - layout the fingerprint of the cmd window in the layout is taken. If the - fingerprint is the same, an effort will be done to preserve the command - window size. - - The fingerprint is "VC" for both the old (cmd) and new (src) layouts, which - explains the behaviour. - - I think this is essentially a bug in the finger print calculation, and it - should be "C" for the cmd layout. - - Fix this by not adding a V or H in the fingerprint if the list size is one. - - Tested on x86_64-linux. - - Reviewed-By: Tom Tromey - -2023-05-31 GDB Administrator - - Automatic date update in version.in - -2023-05-30 Andrew Burgess - - gdb: add support for %V to printf command - This commit adds a new format for the printf and dprintf commands: - '%V'. This new format takes any GDB expression and formats it as a - string, just as GDB would for a 'print' command, e.g.: - - (gdb) print a1 - $a = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20} - (gdb) printf "%V\n", a1 - {2, 4, 6, 8, 10, 12, 14, 16, 18, 20} - (gdb) - - It is also possible to pass the same options to %V as you might pass - to the print command, e.g.: - - (gdb) print -elements 3 -- a1 - $4 = {2, 4, 6...} - (gdb) printf "%V[-elements 3]\n", a1 - {2, 4, 6...} - (gdb) - - This new feature would effectively replace an existing feature of GDB, - the $_as_string builtin convenience function. However, the - $_as_string function has a few problems which this new feature solves: - - 1. $_as_string doesn't currently work when the inferior is not - running, e.g: - - (gdb) printf "%s", $_as_string(a1) - You can't do that without a process to debug. - (gdb) - - The reason for this is that $_as_string returns a value object with - string type. When we try to print this we call value_as_address, - which ends up trying to push the string into the inferior's address - space. - - Clearly we could solve this problem, the string data exists in GDB, so - there's no reason why we have to push it into the inferior, but this - is an existing problem that would need solving. - - 2. $_as_string suffers from the fact that C degrades arrays to - pointers, e.g.: - - (gdb) printf "%s\n", $_as_string(a1) - 0x404260 - (gdb) - - The implementation of $_as_string is passed a gdb.Value object that is - a pointer, it doesn't understand that it's actually an array. Solving - this would be harder than issue #1 I think. The whole array to - pointer transformation is part of our expression evaluation. And in - most cases this is exactly what we want. It's not clear to me how - we'd (easily) tell GDB that we didn't want this reduction in _some_ - cases. But I'm sure this is solvable if we really wanted to. - - 3. $_as_string is a gdb.Function sub-class, and as such is passed - gdb.Value objects. There's no super convenient way to pass formatting - options to $_as_string. By this I mean that the new %V feature - supports print formatting options. Ideally, we might want to add this - feature to $_as_string, we might imagine it working something like: - - (gdb) printf "%s\n", $_as_string(a1, - elements = 3, - array_indexes = True) - - where the first item is the value to print, while the remaining - options are the print formatting options. However, this relies on - Python calling syntax, which isn't something that convenience - functions handle. We could possibly rely on strictly positional - arguments, like: - - (gdb) printf "%s\n", $_as_string(a1, 3, 1) - - But that's clearly terrible as there's far more print formatting - options, and if you needed to set the 9th option you'd need to fill in - all the previous options. - - And right now, the only way to pass these options to a gdb.Function is - to have GDB first convert them all into gdb.Value objects, which is - really overkill for what we want. - - The new %V format solves all these problems: the string is computed - and printed entirely on the GDB side, we are able to print arrays as - actual arrays rather than pointers, and we can pass named format - arguments. - - Finally, the $_as_string is sold in the manual as allowing users to - print the string representation of flag enums, so given: - - enum flags - { - FLAG_A = (1 << 0), - FLAG_B = (1 << 1), - FLAG_C = (1 << 1) - }; - - enum flags ff = FLAG_B; - - We can: - - (gdb) printf "%s\n", $_as_string(ff) - FLAG_B - - This works just fine with %V too: - - (gdb) printf "%V\n", ff - FLAG_B - - So all functionality of $_as_string is replaced by %V. I'm not - proposing to remove $_as_string, there might be users currently - depending on it, but I am proposing that we don't push $_as_string in - the documentation. - - As %V is a feature of printf, GDB's dprintf breakpoints naturally gain - access to this feature too. dprintf breakpoints can be operated in - three different styles 'gdb' (use GDB's printf), 'call' (call a - function in the inferior), or 'agent' (perform the dprintf on the - remote). - - The use of '%V' will work just fine when dprintf-style is 'gdb'. - - When dprintf-style is 'call' the format string and arguments are - passed to an inferior function (printf by default). In this case GDB - doesn't prevent use of '%V', but the documentation makes it clear that - support for '%V' will depend on the inferior function being called. - - I chose this approach because the current implementation doesn't place - any restrictions on the format string when operating in 'call' style. - That is, the user might already be calling a function that supports - custom print format specifiers (maybe including '%V') so, I claim, it - would be wrong to block use of '%V' in this case. The documentation - does make it clear that users shouldn't expect this to "just work" - though. - - When dprintf-style is 'agent' then GDB does no support the use of - '%V' (right now). This is handled at the point when GDB tries to - process the format string and send the dprintf command to the remote, - here's an example: - - Reading symbols from /tmp/hello.x... - (gdb) dprintf call_me, "%V", a1 - Dprintf 1 at 0x401152: file /tmp/hello.c, line 8. - (gdb) set sysroot / - (gdb) target remote | gdbserver --once - /tmp/hello.x - Remote debugging using | gdbserver --once - /tmp/hello.x - stdin/stdout redirected - Process /tmp/hello.x created; pid = 3088822 - Remote debugging using stdio - Reading symbols from /lib64/ld-linux-x86-64.so.2... - (No debugging symbols found in /lib64/ld-linux-x86-64.so.2) - 0x00007ffff7fd3110 in _start () from /lib64/ld-linux-x86-64.so.2 - (gdb) set dprintf-style agent - (gdb) c - Continuing. - Unrecognized format specifier 'V' in printf - Command aborted. - (gdb) - - This is exactly how GDB would handle any other invalid format - specifier, for example: - - Reading symbols from /tmp/hello.x... - (gdb) dprintf call_me, "%Q", a1 - Dprintf 1 at 0x401152: file /tmp/hello.c, line 8. - (gdb) set sysroot / - (gdb) target remote | gdbserver --once - /tmp/hello.x - Remote debugging using | gdbserver --once - /tmp/hello.x - stdin/stdout redirected - Process /tmp/hello.x created; pid = 3089193 - Remote debugging using stdio - Reading symbols from /lib64/ld-linux-x86-64.so.2... - (No debugging symbols found in /lib64/ld-linux-x86-64.so.2) - 0x00007ffff7fd3110 in _start () from /lib64/ld-linux-x86-64.so.2 - (gdb) set dprintf-style agent - (gdb) c - Continuing. - Unrecognized format specifier 'Q' in printf - Command aborted. - (gdb) - - The error message isn't the greatest, but improving that can be put - off for another day I hope. - - Reviewed-By: Eli Zaretskii - Acked-By: Simon Marchi - -2023-05-30 Simon Marchi - - gdb: add interp::on_memory_changed method - Same idea as previous patches, but for memory_changed. - - Change-Id: Ic19f20c24d8a6431d4a89c5625e8ef4898f76e82 - -2023-05-30 Simon Marchi - - gdb: add interp::on_param_changed method - Same idea as previous patches, but for command_param_changed. - - Change-Id: I7c2196343423360da05f016f8ffa871c064092bb - -2023-05-30 Simon Marchi - - gdb: add interp::on_breakpoint_modified method - Same idea as previous patches, but for breakpoint_modified. - - Change-Id: I4f0a9edea912de431e32451d74224b2022a7c328 - -2023-05-30 Simon Marchi - - gdb: add interp::on_breakpoint_deleted method - Same idea as previous patches, but for breakpoint_deleted. - - Change-Id: I59c231ce963491bb1eee1432ee1090138f09e19c - -2023-05-30 Simon Marchi - - gdb: add interp::on_breakpoint_created method - Same idea as previous patches, but for breakpoint_created. - - Change-Id: I614113c924edc243590018b8fb3bf69cb62215ef - -2023-05-30 Simon Marchi - - gdb: add interp::on_tsv_modified method - Same idea as previous patches, but for tsv_modified. - - Change-Id: I55454a2386d5450040b3a353909b26f389a43682 - -2023-05-30 Simon Marchi - - gdb: add interp::on_tsv_deleted method - Same idea as previous patches, but for tsv_deleted. - - Change-Id: I71b0502b493da7b6e293bee02aeca98de83d4b75 - -2023-05-30 Simon Marchi - - gdb: add interp::on_tsv_created method - Same idea as previous patches, but for tsv_created. - - Change-Id: I9c30ecfdbd78ca015d613f43a0c0aef6c7eb32b5 - -2023-05-30 Simon Marchi - - gdb: add interp::on_traceframe_changed method - Same idea as previous patches, but for traceframe_changed. - - Change-Id: Ia473f07d70d57b30aca0094d0e0585d7e0d95637 - -2023-05-30 Simon Marchi - - gdb: add interp::on_about_to_proceed method - Same idea as previous patches, but for about_to_proceed. We only need - (and want, as far as the mi_interp implementation is concerned) to - notify the interpreter that caused the proceed. - - Change-Id: Id259bca10dbc3d43d46607ff7b95243a9cbe2f89 - -2023-05-30 Simon Marchi - - gdb: add interp::on_solib_unloaded method - Same idea as previous patches, but for solib_unloaded. - - Change-Id: Iad847de93f0b38b5c90679a173d3beeaed7af6c5 - -2023-05-30 Simon Marchi - - gdb: add interp::on_solib_loaded method - Same idea as previous patches, but for solib_loaded - - Change-Id: I85edb0a4b377f4b2c39ffccf31cb75f38bae0f55 - -2023-05-30 Simon Marchi - - gdb: add interp::on_target_resumed method - Same idea as previous patches, but for target_resumed. - - Change-Id: I66fa28d1d41a1f3c4fb0d6a470137d493eac3c8c - -2023-05-30 Simon Marchi - - gdb: add interp::on_record_changed method - Same idea as previous patches, but for record_changed - - Change-Id: I5eeeacd703af8401c315060514c94e8e6439cc40 - -2023-05-30 Simon Marchi - - gdb: add interp::on_inferior_removed method - Same idea as previous patches, but for inferior_removed. - - Change-Id: I7971840bbbdcfabf77e2ded7584830c9dfdd10d0 - -2023-05-30 Simon Marchi - - gdb: add interp::on_inferior_disappeared method - Same idea as previous patches, but for inferior_disappeared. - - For symmetry with on_inferior_appeared, I named this one - on_inferior_disappeared, despite the observer being called - inferior_exit. This is called when detaching an inferior, so I think - that calling it "disappeared" is a bit less misleading (the observer - should probably be renamed later). - - Change-Id: I372101586bc9454997953c1e540a2a6685f53ef6 - -2023-05-30 Simon Marchi - - gdb: add interp::on_inferior_appeared method - Same idea as previous patches, but for inferior_appeared. - - Change-Id: Ibe4feba34274549a886b1dfb5b3f8d59ae79e1b5 - -2023-05-30 Simon Marchi - - gdb: add interp::on_inferior_added method - Same idea as previous patches, but for inferior_added. - - mi_interp::init avoided using mi_inferior_added, since, as the comment - used to say, it would notify all MI interpreters. Now, it's easy to - only notify the new interpreter, so it's possible to just call the - on_inferior_added method in mi_interp::init. - - Change-Id: I0eddbd5367217d1c982516982089913019ef309f - -2023-05-30 Simon Marchi - - gdb: add interp::on_thread_exited method - Same idea as previous patches, but for thread_exited. - - Change-Id: I4be974cbe58cf635453fef503c2d77c82522cbd9 - -2023-05-30 Simon Marchi - - gdb: add interp::on_new_thread method - Same idea as previous patches, but for new_thread. - - Change-Id: Ib70ae3421b736fd69d86c4e7c708bec349aa256c - -2023-05-30 Simon Marchi - - gdb: add interp::on_user_selected_context_changed method - Same as previous patches, but for user_selected_context_changed. - - Change-Id: I40de15be897671227d4bcf3e747f0fd595f0d5be - -2023-05-30 Simon Marchi - - gdb: add interp::on_command_error method - Same idea as the previous patches, but for command_error. - - Change-Id: If6098225dd72fad8be13b3023b35bc8bc48efb9d - -2023-05-30 Simon Marchi - - gdb: add interp::on_sync_execution_done method - Same as previous patches, but for sync_execution_done. Except that - here, we only want to notify the interpreter that is executing the - command, not all interpreters. - - Change-Id: I729c719447b5c5f29af65dbf6fed9132e2cd308b - -2023-05-30 Simon Marchi - - gdb: add interp::on_no_history method - Same as previous patches, but for no_history. - - Change-Id: I06930fe7cb4082138c6c5496c5118fe4951c10da - -2023-05-30 Simon Marchi - - gdb: add interp::on_exited method - Same as previous patch, but for exited. Remove the exited observable, - since nothing uses it anymore, and we don't have anything coming that - will use it. - - Change-Id: I358cbea0159af56752dfee7510d6a86191e722bb - -2023-05-30 Simon Marchi - - gdb: add interp::on_signal_exited method - Same as previous patch, but for signal_exited. Remove the signal_exited - observable, since nothing uses it anymore, and we don't have anything - coming that will use it. - - Change-Id: I0dca1eab76338bf27be755786e3dad3241698b10 - -2023-05-30 Simon Marchi - - gdb: add interp::on_normal_stop method - Same idea as the previous patch, but for the normal_stop event. - - Change-Id: I4fc8ca8a51c63829dea390a2b6ce30b77f9fb863 - -2023-05-30 Simon Marchi - - gdb: add interp::on_signal_received method - Instead of having the interpreter code registering observers for the - signal_received observable, add a "signal_received" virtual method to - struct interp. Add a interps_notify_signal_received function that loops - over all UIs and calls the signal_received method on the interpreter. - Finally, add a notify_signal_received function that calls - interps_notify_signal_received and then notifies the observers. Replace - all existing notifications to the signal_received observers with calls - to notify_signal_received. - - Before this patch, the CLI and MI code both register a signal_received - observer. These observer go over all UIs, and, for those that have a - interpreter of the right kind, print the stop notifiation. - - After this patch, we have just one "loop over all UIs", inside - interps_notify_signal_received. Since the interp::on_signal_received - method gets called once for each interpreter, the implementations only - need to deal with the current interpreter (the "this" pointer). - - The motivation for this patch comes from a future patch, that makes the - amdgpu code register an observer to print a warning after the CLI's - signal stop message. Since the amdgpu and the CLI code both use - observers, the order of the two messages is not stable, unless we define - the priority using the observer dependency system. However, the - approach of using virtual methods on the interpreters seems like a good - change anyway, I think it's more straightforward and simple to - understand than the current solution that uses observers. We are sure - that the amdgpu message gets printed after the CLI message, since - observers are notified after interpreters. - - Keep the signal_received, even if nothing uses if, because we will be - using it in the upcoming amdgpu patch implementing the warning described - above. - - Change-Id: I4d8614bb8f6e0717f4bfc2a59abded3702f23ac4 - -2023-05-30 Tom de Vries - - [gdb] Mention --with/without-system-readline for --configuration - Simon reported that the new test-case gdb.tui/pr30056.exp fails with system - readline. - - This is because the test-case requires a fix in readline that's present in our - in-repo copy of readline, but most likely not in any system readline yet. - - Fix this by: - - mentioning --with-system-readline or --without-system-readline in the - configuration string. - - adding a new proc with_system_readline that makes this information available - in the testsuite. - - using this in test-case gdb.tui/pr30056.exp to declare it unsupported for - --with-system-readline. - - Tested on x86_64-linux. - - Reported-By: Simon Marchi - Approved-By: Simon Marchi - -2023-05-30 Nick Clifton - - Slight wording improvement for the -Ur documentation - - Improve header information displayed with objdump -P for PE binaries. - * od-pe.c (targ_info): New array. - (get_target_specific_info): New function. - (decode_machine_number): Retire. Use get_target_specific_info instead. - (is_pe_object_magic): Likewise. - (dump_pe_file_header): Display more information. - Rework layout to be similar to that from 'objdump -p'. - Add code to handle larger than normnal AOUT headers. - -2023-05-30 mengqinggang - - LoongArch: ld: Add support for linker relaxation. - Add ld relax support and testsuits. - - ld/ChangeLog: - - * emultempl/loongarchelf.em: Regenerated. - * testsuite/ld-elf/compressed1d.d: Xfail loongarch*-*. - * testsuite/ld-elf/pr26936.d: Likewise. - * testsuite/ld-loongarch-elf/disas-jirl.d: Regenerated. - * testsuite/ld-loongarch-elf/disas-jirl-32.d: Regenerated. - * testsuite/ld-loongarch-elf/jmp_op.d: Likewise. - * testsuite/ld-loongarch-elf/macro_op.d: Likewise. - * testsuite/ld-loongarch-elf/macro_op_32.d: Likewise. - * testsuite/ld-loongarch-elf/relax-align.dd: New test. - * testsuite/ld-loongarch-elf/relax-align.s: New test. - * testsuite/ld-loongarch-elf/relax.exp: New test. - * testsuite/ld-loongarch-elf/relax.s: New test. - * testsuite/ld-loongarch-elf/uleb128.dd: New test. - * testsuite/ld-loongarch-elf/uleb128.s: New test. - -2023-05-30 mengqinggang - - LoongArch: gas: Add support for linker relaxation. - Add gas -mrelax and -mno-relax option. - Add R_LARCH_RELAX reloc for instrction if it can be relaxed. - ADD R_LARCH_ALIGN reloc for align pseudo instruction because relax. - Add ADD/SUB reloc pair for debug and exception data to calculate symbol - substraction because relax. - - gas/ChangeLog: - - * config/tc-loongarch.c: - (struct loongarch_cl_insn): New macro_id member. - (enum options): New OPTION_RELAX and OPTION_NO_RELAX. - (struct option): New mrelax and mno-relax. - (md_parse_option): Likewise. - (get_internal_label): - (loongarch_args_parser_can_match_arg_helper): Generate relax reloc. - (move_insn): Set fx_frag and fx_where if exist. - (append_fixp_and_insn): Call frag_wane and frag_new for linker relax - relocs. - (loongarch_assemble_INSNs): New loongarch_cl_insn pointer parameter. - (md_assemble): Fix function call. - (fix_reloc_insn): Likewise. - (md_apply_fix): Generate ADD/SUB reloc pair for debug and exception - data. - (loongarch_fix_adjustable): Delete. - (md_convert_frag): Generate new fix. - (loongarch_pre_output_hook): New function. - (loongarch_make_nops): Likewise. - (loongarch_frag_align_code): Likewise. - (loongarch_insert_uleb128_fixes): Likewise. - (loongarch_md_finish): Likewise. - * config/tc-loongarch.h - (md_allow_local_subtract): New macro define. - (loongarch_frag_align_code): New declare. - (md_do_align): Likewise. - (loongarch_fix_adjustable): Delete. - (tc_fix_adjustable): New macro define. - (TC_FORCE_RELOCATION_SUB_SAME): Likewise. - (TC_LINKRELAX_FIXUP): Likewise. - (TC_FORCE_RELOCATION_LOCAL): Likewise. - (DWARF2_USE_FIXED_ADVANCE_PC): Likewise. - (MD_APPLY_SYM_VALUE): Likewise. - (tc_symbol_new_hook): New extern. - (NOP_OPCODE): Delete. - (loongarch_pre_output_hook): New macro define. - (md_pre_output_hook): Likewise. - (md_finish): Likewise. - (loongarch_md_finish): New extern. - * testsuite/gas/all/align.d: Mark as unsupported on LoongArch. - * testsuite/gas/all/gas.exp: Xfail loongarch*-*. - * testsuite/gas/all/relax.d: Likewise. - * testsuite/gas/elf/dwarf-5-irp.d: Likewise. - * testsuite/gas/elf/dwarf-5-loc0.d: Likewise. - * testsuite/gas/elf/dwarf-5-macro-include.d: Likewise. - * testsuite/gas/elf/dwarf-5-macro.d: Likewise. - * testsuite/gas/elf/dwarf2-11.d: Likewise. - * testsuite/gas/elf/dwarf2-15.d: Likewise. - * testsuite/gas/elf/dwarf2-16.d: Likewise. - * testsuite/gas/elf/dwarf2-17.d: Likewise. - * testsuite/gas/elf/dwarf2-18.d: Likewise. - * testsuite/gas/elf/dwarf2-19.d: Likewise. - * testsuite/gas/elf/dwarf2-5.d: Likewise. - * testsuite/gas/elf/ehopt0.d: Likewise. - * testsuite/gas/elf/elf.exp: Likewise. - * testsuite/gas/elf/section11.d: Likewise. - * testsuite/gas/lns/lns.exp: Likewise. - * testsuite/gas/loongarch/jmp_op.d: Regenerated. - * testsuite/gas/loongarch/li.d: Likewise. - * testsuite/gas/loongarch/macro_op.d: Likewise. - * testsuite/gas/loongarch/macro_op_32.d: Likewise. - * testsuite/gas/loongarch/macro_op_large_abs.d: Likewise. - * testsuite/gas/loongarch/macro_op_large_pc.d: Likewise. - * testsuite/gas/loongarch/relax_align.d: New test. - * testsuite/gas/loongarch/relax_align.s: New test. - * testsuite/gas/loongarch/uleb128.d: New test. - * testsuite/gas/loongarch/uleb128.s: New test. - -2023-05-30 mengqinggang - - LoongArch: binutils: Add support for linker relaxation. - Add support for relocs related to relax to readelf. - - binutils/ChangeLog: - - * readelf.c (target_specific_reloc_handling): Handle ULEB128 reloc. - (is_32bit_inplace_add_reloc): Handle new reloc. - (is_32bit_inplace_sub_reloc): Likewise. - (is_64bit_inplace_add_reloc): Likewise. - (is_64bit_inplace_sub_reloc): Likewise. - (is_16bit_inplace_add_reloc): Likewise. - (is_16bit_inplace_sub_reloc): Likewise. - (is_8bit_inplace_add_reloc): Likewise. - (is_8bit_inplace_sub_reloc): Likewise. - (is_6bit_inplace_sub_reloc): Likewise. - (is_6bit_inplace_add_reloc): New function. - (apply_relocations): Handle new reloc. - * testsuite/binutils-all/readelf.exp: Add -mno-relax option - for LoongArch. - -2023-05-30 mengqinggang - - LoongArch: opcodes: Add support for linker relaxation. - Set gas default to enable relax. - - opcodes/ChangeLog: - - * loongarch-opc.c (struct loongarch_ASEs_option): New member relax - with the default value 1. - -2023-05-30 mengqinggang - - LoongArch: bfd: Add support for linker relaxation. - Add relax support and related relocs in bfd. - - bfd/ChangeLog: - - * bfd-in2.h: Add relocs related to relax. - * elfnn-loongarch.c (struct loongarch_elf_link_hash_table): New integer - pointer (data_segment_phase) to monitor the data segment phase. - (loongarch_elf_check_relocs): Swap B21/B26 reloc sequence. - (loongarch_elf_adjust_dynamic_symbol): Fix code format. - (loongarch_reloc_rewrite_imm_insn): Fix function call. - (perform_relocation): Handle new relocs related to relax. - (RELOCATE_CALC_PC32_HI20): Fix code format. - (RELOCATE_CALC_PC64_HI32): Likewise. - (loongarch_elf_relocate_section): Handle new relocs related to relax. - (loongarch_relax_delete_bytes): New function. - (loongarch_relax_pcala_addi): Likewise. - (loongarch_relax_pcala_ld): Likewise. - (bfd_elfNN_loongarch_set_data_segment_info): Likewise. - (loongarch_relax_align): Likewise. - (loongarch_elf_relax_section): Likewise. - (bfd_elfNN_bfd_relax_section): New macro define. - * elfxx-loongarch.c (reloc_bits): New bfd point parameter. - (reloc_bits_b16): Likewise. - (reloc_bits_b21): Likewise. - (reloc_bits_b26): Likewise. - (loongarch_adjust_reloc_bitsfield): Likewise. - (reloc_bits_pcrel20_s2): New function. - (loongarch_elf_add_sub_reloc): Likewise. - (loongarch_elf_add_sub_reloc_uleb128): Likewise. - (loongarch_write_unsigned_leb128): New function. - * elfxx-loongarch.h (loongarch_adjust_reloc_bitsfield): New bfd point - parameter. - (bfd_elf32_loongarch_set_data_segment_info): New declare. - (bfd_elf64_loongarch_set_data_segment_info): Likewise. - (loongarch_write_unsigned_leb128): Likewise. - * libbfd.h: Add relocs related to relax. - * reloc.c: Add relocs related to relax. - -2023-05-30 mengqinggang - - LoongArch: include: Add support for linker relaxation. - Add relocs and gas LARCH_opts.relax option. - - include/ChangeLog: - - * elf/loongarch.h: Add relocs. - * opcode/loongarch.h: Add LARCH_opts.relax and macro LARCH_NOP. - -2023-05-30 Nick Clifton - - Add support for an ARMMAGIC value of 0xa00 to the PE dumper. - -2023-05-30 Alan Modra - - arm-pe objdump -P - arm-pe looks to be a very old PE implementation, incompatible with - current arm-wince-pe. arm-pe has different relocations and uses - ARMMAGIC which has this comment: "I just made this up". Well, OK, I - don't know the history but it was probably before Microsoft "just made - up" their constants for ARM windows CE. - - This patch supports objdump -P for arm-pe, and another magic constant - that may appear in object files. (I don't think binutils generates - files using ARMV7PEMAGIC aka IMAGE_FILE_MACHINE_ARMNT.) - - * od-pe.c (is_pe_object_magic): Handle IMAGE_FILE_MACHINE_ARMNT - and ARMMAGIC. - -2023-05-30 Alan Modra - - Define IMAGE_FILE_MACHINE_ARMNT - Same value as ARMV7PEMAGIC. - https://learn.microsoft.com/en-us/windows/win32/sysinfo/image-file-machine-constants - - * coff/pe.h (IMAGE_FILE_MACHINE_ARMNT): Define. - -2023-05-30 Alan Modra - - Don't define COFF_MAGIC - This macro was unused apart from aout/encap.h, which has been deleted. - - * config/tc-arm.h (COFF_MAGIC): Don't define. - * config/tc-sh.h (COFF_MAGIC): Don't define. - * config/tc-z80.h (COFF_MAGIC): Don't define. - * config/tc-z8k.h (COFF_MAGIC): Don't define. - -2023-05-30 Alan Modra - - Delete include/aout/encap.h - This file is unused and as the header comment says, obsolete. - - Regen binutils POTFILES.in - for od-pe.c - -2023-05-30 GDB Administrator - - Automatic date update in version.in - -2023-05-29 Tom de Vries - - [gdb/testsuite] Fix linefeed scrolling in tuiterm - I came across a bug in the implementation of line feed in tuiterm, and added a - unit test that exposes it. - - Before sending the line feed we have: - ... - Screen Dump (size 8 columns x 4 rows, cursor at column 0, row 3): - 0 abcdefgh - 1 ijklmnop - 2 qrstuvwx - 3 yz01234 - ... - and after it we have: - ... - Screen Dump (size 8 columns x 4 rows, cursor at column 0, row 1): - 0 ijklmnop - 1 qrstuvwx - 2 yz01234 - 3 yz01234 - ... - - Note how the cursor started at row 3 and after the line feed ended up at - row 1, while it should have stayed in row 3. - - Fix this by moving "incr _cur_row -1" one level up in the loop nest in - proc _ctl_0x0a. - - Tested on x86_64-linux. - -2023-05-29 Simon Marchi - - gdb/mi: fix ^running record with multiple MI interpreters - I stumbled on the mi_proceeded and running_result_record_printed - globals, which are shared by all MI interpreter instances (it's unlikely - that people use multiple MI interpreter instances, but it's possible). - After poking at it, I found this bug: - - 1. Start GDB in MI mode - 2. Add a second MI interpreter with the new-ui command - 3. Use -exec-run on the second interpreter - - This is the output I get on the first interpreter: - - =thread-group-added,id="i1" - ~"Reading symbols from a.out...\n" - ~"New UI allocated\n" - (gdb) - =thread-group-started,id="i1",pid="94718" - =thread-created,id="1",group-id="i1" - ^running - *running,thread-id="all" - - And this is the output I get on the second intepreter: - - =thread-group-added,id="i1" - (gdb) - -exec-run - =thread-group-started,id="i1",pid="94718" - =thread-created,id="1",group-id="i1" - *running,thread-id="all" - - The problem here is that the `^running` reply to the -exec-run command - is printed on the wrong UI. It is printed on the first one, it should - be printed on the second (the one on which we sent the -exec-run). - - What happens under the hood is that captured_mi_execute_command, while - executing a command for the second intepreter, clears the - running_result_record_printed and mi_proceeded globals. - mi_about_to_proceed then sets mi_proceeded. Then, mi_on_resume_1 gets - called for the first intepreter first. Since the - - !running_result_record_printed && mi_proceeded - - condition is true, it prints a ^running, and sets - running_result_record_printed. When mi_on_resume_1 gets called for the - second interpreter, running_result_record_printed is already set, so - ^running is not printed there. - - It took me a while to understand the relationship between these two - variables. I think that in the end, this is what we want to track: - - 1. When executing an MI command, take note if that command causes a - "proceed". This is done in mi_about_to_proceed. - 2. In mi_on_resume_1, if the command indeed caused a "proceed", we want - to output a ^running record. And we want to remember that we did, - because... - 3. Back in captured_mi_execute_command, if we did not output a - ^running, we want to output a ^done. - - Moving those two variables to the mi_interp struture appears to fix it. - Only for the interpreter doing the -exec-run command does the - running_result_record_printed flag get cleared, and therefore only or - that one does the ^running record get printed. - - Add a new test for this, that does pretty much what the reproducer above - shows. Without the fix, the test fails because - mi_send_resuming_command_raw never sees the ^running record. - - Change-Id: I63ea30e6cb61a8e1dd5ef03377e6003381a9209b - Tested-By: Alexandra Petlanova Hajkova - -2023-05-29 GDB Administrator - - Automatic date update in version.in - -2023-05-28 Tom de Vries - - [readline] Fix double free in _rl_scxt_dispose - Consider the following scenario. We start gdb in TUI mode: - ... - $ gdb -q -tui - ... - and type ^R which gives us the reverse-isearch prompt in the cmd window: - ... - (reverse-i-search)`': - ... - and then type "foo", right-arrow-key, and ^C. - - In TUI mode, gdb uses a custom rl_getc_function tui_getc. - - When pressing the right-arrow-key, tui_getc: - - attempts to scroll the TUI src window, without any effect, and - - returns 0. - - The intention of returning 0 is mentioned here in tui_dispatch_ctrl_char: - ... - /* We intercepted the control character, so return 0 (which readline - will interpret as a no-op). */ - return 0; - ... - - However, after this 0 is returned by the rl_read_key () call in - _rl_search_getchar, _rl_read_mbstring is called, which incorrectly interprets - 0 as the first part of an utf-8 multibyte char, and tries to read the next - char. - - In this state, the ^C takes effect and we run into a double free because - _rl_isearch_cleanup is called twice. - - Both these issues need fixing independently, though after fixing the first we - no longer trigger the second. - - The first issue is caused by the subtle difference between: - - a char array containing 0 chars, which is zero-terminated, and - - a char array containing 1 char, which is zero. - - In mbrtowc terms, this is the difference between: - ... - mbrtowc (&wc, "", 0, &ps); - ... - which returns -2, and: - ... - mbrtowc (&wc, "", 1, &ps); - ... - which returns 0. - - Note that _rl_read_mbstring calls _rl_get_char_len without passing it an - explicit length parameter, and consequently it cannot distinguish between the - two, and defaults to the "0 chars" choice. - - Note that the same problem doesn't exist in _rl_read_mbchar. - - Fix this by defaulting to the "1 char" choice in _rl_get_char_len: - ... - - if (_rl_utf8locale && l > 0 && UTF8_SINGLEBYTE(*src)) - + if (_rl_utf8locale && l >= 0 && UTF8_SINGLEBYTE(*src)) - ... - - The second problem happens when the call to _rl_search_getchar in - _rl_isearch_callback returns. At that point _rl_isearch_cleanup has already - been called from the signal handler, but we proceed regardless, using a cxt - pointer that has been freed. - - Fix this by checking for "RL_ISSTATE (RL_STATE_ISEARCH)" after the call to - _rl_search_getchar: - ... - c = _rl_search_getchar (cxt); - + if (!RL_ISSTATE (RL_STATE_ISEARCH)) - + return 1; - ... - - Tested on x86_64-linux. - - Approved-By: Chet Ramey - - PR tui/30056 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30056 - -2023-05-28 GDB Administrator - - Automatic date update in version.in - -2023-05-27 Nelson Chu - - [PR ld/22263][PR ld/25694] RISC-V: Avoid dynamic TLS relocs in PIE. - Lots of targets already fixed the TEXTREL problem for TLS in PIE. - - * For PR ld/25694, - In the check_reloc, refer to spare and loongarch, they don't need to reserve - any local dynamic reloc for TLS LE in pie/pde, and similar to other targets. - So it seems like riscv was too conservative to estimate the TLS LE before. - Just break and don't goto static_reloc for TLS LE in pie/pde can fix the - TEXTREL problem. - - * For PR ld/22263, - The risc-v code for TLS GD/IE in the relocate_section seems same as MIPS port. - So similar to MIPS, pr22570, commits 9143e72c6d4d and 1cb83cac9a89, it seems - also the right way to do the same thing for risc-v. - - On risc-v, fixes - FAIL: Build pr22263-1 - - RISC-V haven't supported the TLS transitions, so will need the same fix (use - bfd_link_dll) in the future. - - bfd/ - PR ld/22263 - PR ld/25694 - * elfnn-riscv.c (riscv_elf_check_relocs): Replace bfd_link_pic with - bfd_link_dll for TLS IE. Don't need to reserve the local dynamic - relocation for TLS LE in pie/pde, and report error in pic just like - before. - (riscv_elf_relocate_section): For TLS GD/IE, use bfd_link_dll rather - than !bfd_link_pic in determining the dynamic symbol index. Avoid - the index of -1. - -2023-05-27 GDB Administrator - - Automatic date update in version.in - -2023-05-26 Nick Clifton - - Enhance objdump's --private option so that it can display the contents of PE format files. - * od-pe.c: New file: Dumps fields in PE format headers. - * configure.ac (od_vectors): Add objdump_private_desc_pe for PE format targets. (od_files): Add od-pe for PE format targets. - * configure: Regenerate. - * Makefile.am (CFILES): Add od-pe.c (EXTRA_objdump_SOURCE): Likewise. - * Makefile.in: Generate. - * NEWS: Mention the new feature. - * doc/binutils.texi: Document the new support. - * objdump.c (wide_output): Change from local to global. - * objdump.h (wide_output): Prototype. (objdump_private_desc_pe): Prototype. - * testsuite/binutils-all/objdump.exp: Add a test of the new feature. - -2023-05-26 Andreas Schwab - - Remove duplicate definition - * coff/pe.h (IMAGE_FILE_MACHINE_AMD64): Remove duplicate - definition. Alphabetize. - -2023-05-26 Jan Beulich - - x86: fix disassembler build after 1a3b4f90bc5f - In commit 1a3b4f90bc5f ("x86: convert two pointers to (indexing) - integers") I neglected the fact that compilers may warn about comparing - ptrdiff_t (signed long) with size_t (unsigned long) values. Since just - before we've checked that the value is positive, simply add a cast - (despite my dislike for casts). - -2023-05-26 Tom de Vries - - [gdb/testsuite] Add test-case gdb.tui/color-prompt.exp - Add a test-case that sets a prompt with color in TUI. - - The line containing the prompt is shown by get_line_with_attrs as follows: - ... - (gdb) - ... - - The 31 means red, but only for foreground colors, for background colors 41 - means red. - - Make this more readable by using color names for both foreground and - background, such that we have instead: - .... - (gdb) - ... - - Tested on x86_64-linux. - -2023-05-26 Tom de Vries - - [gdb/testsuite] Add invisible and blinking attributes in tuiterm - I noticed curses using the invisible and blinking attributes. - - Add these in tuiterm. - - Tested on x86_64-linux. - -2023-05-26 Tom de Vries - - [gdb/testsuite] Fix reverse attribute in tuiterm - I noticed in proc Term::_csi_m arguments that while parameters 7 and 27 are - supposed to set the reverse attribute to 1 and 0, in fact it's set to 1 in - both cases: - ... - 7 { - set _attrs(reverse) 1 - } - ... - 27 { - set _attrs(reverse) 1 - } - ... - - Fix this and add a regression test in gdb.tui/tuiterm.exp. - - Tested on x86_64-linux. - -2023-05-26 Jan Beulich - - iamcu: suppress tests which can't possibly work - With neither --32 nor --64 passed to gas, advanced features like AVX - aren't available without explicitly enabling them. - - x86-64: improve gas diagnostic when no 32-bit target is configured - Make this similar to --64 and --x32: Check whether a suitable target - exists. - - x86-64: conditionalize tests using --32 - Using this option doesn't really work when no support for any 32-bit - target was configured in (as is the case for at least cloudabi and - rdos). - - x86: split gas testsuite .exp file - The set of 32-bit-only and 64-bit-only tests has grown quite large. In - particular when one's after only the results for the 64-bit set, having - them live in a separate .exp file is easier / faster. - - x86: convert two pointers to (indexing) integers - This in particular reduces the number of pointers to non-const that we - have (and that could potentially be used for undue modification of - state). As a result, fetch_code()'s 2nd parameter can then also become - pointer-to-const. - -2023-05-26 Jan Beulich - - x86: disassembling over-long insns - The present way of dealing with them - misusing MAX_MNEM_SIZE, which has - nothing to do with insn length - leads to inconsistent results. Since we - allow for up to MAX_CODE_LENGTH - 1 prefix bytes (which then could be - followed by another MAX_CODE_LENGTH "normal" insn bytes until we're done - decoding), size the_buffer[] accordingly. - - Move struct dis_private down to be able to use MAX_CODE_LENGTH without - moving its #define. While doing this also alter the order to have the - potentially large array last. - -2023-05-26 Jan Beulich - - x86: use fixed-width type for codep and friends - This first of all removes a dependency on bfd_byte and unsigned char - being the same types. It further eliminates the need to mask by 0xff - when fetching values (which wasn't done fully consistently anyway), - improving code legibility. - - While there, where possible add const. - -2023-05-26 Jan Beulich - - x86: figure braces aren't really part of mnemonics - Instead they're separators for pseudo-prefixes. Don't insert them in - mnemonic_chars[], handling them explicitly in parse_insn() instead. Note - that this eliminates the need for another separator after a pseudo- - prefix. While maybe not overly interesting for a following real - mnemonic, I view this as quite desirable between multiple successive - pseudo-prefixes (bringing things in line with the other use of figure - braces in AVX512's zeroing-masking). - - Drop the unused is_mnemonic_char() at this occasion. - -2023-05-26 Jan Beulich - - x86: de-duplicate operand_special_chars[] wrt extra_symbol_chars[] - Having to add characters to both arrays can easily lead to oversights. - Consuming extra_symbol_chars[] when populating operand_chars[] also - allows to drop two special cases in md_begin(). - - Constify operand_special_chars[] at this occasion. - -2023-05-26 Indu Bhagat - - sframe/doc: minor improvements for readability - libsframe/ - * sframe-spec.texi: Cosmetic fixes. - -2023-05-26 Indu Bhagat - - libsframe: revisit sframe_find_fre API - Inspite of implementing a rather simple functionality, this function was - relatively difficult to follow, and maintain. Some changes are done now - to address that - refactor the function and use better names to make it - more readable. - - The changes to the implementation do not cause any change in the - contract of the API. - - libsframe/ - * sframe.c (sframe_fre_get_end_ip_offset): to here... - (sframe_find_fre): Refactor some bits from... - -2023-05-26 Indu Bhagat - - libsframe: use const char * consistently for immutable FRE buffers - libsframe/ - * sframe.c (sframe_decode_fre): Use const char * datatype when - handling buffer containing the FREs. - (sframe_fre_get_end_ip_offset): Likewise. - (sframe_find_fre): Likewise. - (sframe_decoder_get_fre): Likewise. - - libsframe: use uint8_t data type for FRE info related stubs - libsframe/ - * sframe.c: Use uint8_t for FRE offset count and FRE offset - size. Use uint8_t for FRE info word as well. - -2023-05-26 Alan Modra - - PR22263 ld test - A number of targets that I test regularly fail the "Build pr22263-1" - test for various reasons. - - arm-linux-gnueabi: "undefined reference to `__aeabi_read_tp'" - ia64-linux-gnu: "Explicit stops are ignored in auto mode" - m68k-linux-gnu: "undefined reference to `__m68k_read_tp'" - microblaze-linux-gnu: "undefined reference to `__tls_get_addr'" - nios2-linux-gnu, s390-linux-gnu and sh4-linux-gnu have a tprel reloc in .got - riscv64-linux-gnu has a dynamic relocation in text - - So only riscv really fails the pr. The rest fail due to test issues - or lack of a linker optimisation. Lack of an optimisation isn't - really a fail, but it's worth keeping the test to ensure those - optimisations don't regress. The xfail targets may not be an - exhaustive list. This just tidies test results for those for which I - have cross compilers installed. - - PR 22263 - * testsuite/ld-elf/tls.exp: Split pr22263 test into two parts, - one to check for -z text errors, the other to check tprel - linker optimisation. Supply needed symbols and assembler flags. - xfail the linker optimisation on targets known to fail. - -2023-05-26 Tom Tromey - - Make MI commands const-correct - I've had this patch for a while now and figured I'd update it and send - it. It changes MI commands to use a "const char * const" for their - argv parameter. - - Regression tested on x86-64 Fedora 36. - - Acked-By: Simon Marchi - -2023-05-26 GDB Administrator - - Automatic date update in version.in - -2023-05-25 Ciaran Woodward - - Fix scoped_value_mark not working with empty value chain - The scoped_value_mark helper class was setting its internal - mark value to NULL to indicate that the value chain had already - been freed to mark. - - However, value_mark() also returns NULL if the value chain is - empty at the time of call. - - This lead to the situation that if the value chain was empty - at the time the scoped_value_mark was created, the class - would not correctly clean up the state when it was destroyed, - because it believed it had already been freed. - - I noticed this because I was setting a watchpoint very early - in my debug session, and it was becoming a software watchpoint - rather than hardware. Running any command that called evaluate() - beforehand (such as 'x 0') would mean that a hardware watchpoint - was correctly used. After some careful examination of the - differences in execution, I noticed that values were being freed - later in the 'bad case', which lead me to notice the issue with - scoped_value_mark. - -2023-05-25 Simon Marchi - - gdb: remove breakpoint_pointer_iterator - Remove the breakpoint_pointer_iterator layer. Adjust all users of - all_breakpoints and all_tracepoints to use references instead of - pointers. - - Change-Id: I376826f812117cee1e6b199c384a10376973af5d - Reviewed-By: Andrew Burgess - -2023-05-25 Simon Marchi - - gdbsupport: make filtered_iterator::operator* return the same thing as underlying iterator - This is the same idea as the previous patch, but for filtered_iterator. - Without this patch, I would see this when applying the patch that - removes reference_to_pointer_iterator from breakpoint_range: - - CXX breakpoint.o - /home/smarchi/src/binutils-gdb/gdb/breakpoint.c: In function ‘void download_tracepoint_locations()’: - /home/smarchi/src/binutils-gdb/gdb/breakpoint.c:11007:41: error: cannot allocate an object of abstract type ‘breakpoint’ - 11007 | for (breakpoint &b : all_tracepoints ()) - | ^ - In file included from /home/smarchi/src/binutils-gdb/gdb/gdbthread.h:26, - from /home/smarchi/src/binutils-gdb/gdb/infrun.h:21, - from /home/smarchi/src/binutils-gdb/gdb/gdbarch.h:28, - from /home/smarchi/src/binutils-gdb/gdb/arch-utils.h:23, - from /home/smarchi/src/binutils-gdb/gdb/breakpoint.c:21: - /home/smarchi/src/binutils-gdb/gdb/breakpoint.h:619:8: note: because the following virtual functions are pure within ‘breakpoint’: - 619 | struct breakpoint : public intrusive_list_node - | ^~~~~~~~~~ - /home/smarchi/src/binutils-gdb/gdb/breakpoint.c:250:1: note: ‘virtual breakpoint::~breakpoint()’ - 250 | breakpoint::~breakpoint () - | ^~~~~~~~~~ - - Change-Id: I05285ff27d21cb0ab80cba392ec4e959167e3cd7 - Reviewed-By: Andrew Burgess - -2023-05-25 Simon Marchi - - gdbsupport: make basic_safe_iterator::operator* return the same thing as underlying iterator - Using the following patch that removes the reference_to_pointer_iterator - from breakpoint_range, I would get: - - CXX breakpoint.o - /home/smarchi/src/binutils-gdb/gdb/breakpoint.c: In function ‘void breakpoint_program_space_exit(program_space*)’: - /home/smarchi/src/binutils-gdb/gdb/breakpoint.c:3030:46: error: cannot allocate an object of abstract type ‘breakpoint’ - 3030 | for (breakpoint &b : all_breakpoints_safe ()) - | ^ - In file included from /home/smarchi/src/binutils-gdb/gdb/gdbthread.h:26, - from /home/smarchi/src/binutils-gdb/gdb/infrun.h:21, - from /home/smarchi/src/binutils-gdb/gdb/gdbarch.h:28, - from /home/smarchi/src/binutils-gdb/gdb/arch-utils.h:23, - from /home/smarchi/src/binutils-gdb/gdb/breakpoint.c:21: - /home/smarchi/src/binutils-gdb/gdb/breakpoint.h:619:8: note: because the following virtual functions are pure within ‘breakpoint’: - 619 | struct breakpoint : public intrusive_list_node - | ^~~~~~~~~~ - /home/smarchi/src/binutils-gdb/gdb/breakpoint.c:250:1: note: ‘virtual breakpoint::~breakpoint()’ - 250 | breakpoint::~breakpoint () - | ^~~~~~~~~~ - - This is because the operator* method of the basic_safe_iterator iterator - wrapper returns a value_type. So, even if the method of the underlying - iterator (breakpoint_iterator, an intrusive_list iterator) returns a - `breakpoint &`, the method of the wrapper returns a `breakpoint`. - - I think it would make sense for iterator wrappers such as - basic_safe_iterator to return the exact same thing as the iterator they - wrap. At least, it fixes my problem. - - Change-Id: Ibbcd390ac03d2fb6ae4854923750c8d7c3c04e8a - Reviewed-By: Andrew Burgess - -2023-05-25 Simon Marchi - - gdb: link breakpoints with intrusive_list - Change-Id: I043d8d6f3dd864d80d5088f6ffc2c098337249ea - Reviewed-By: Andrew Burgess - -2023-05-25 Simon Marchi - - gdb: remove bp_location_pointer_iterator - Remove the bp_location_pointer_iterator layer. Adjust all users of - breakpoint::locations to use references instead of pointers. - - Change-Id: Iceed34f5e0f5790a9cf44736aa658be6d1ba1afa - Reviewed-By: Andrew Burgess - -2023-05-25 Simon Marchi - - gdb: use intrusive_list for breakpoint locations - Replace the hand-maintained linked lists of breakpoint locations with - and intrusive list. - - - Remove breakpoint::loc, add breakpoint::m_locations. - - - Add methods for the various manipulations that need to be done on the - location list, while maintaining reasonably good encapsulation. - - - bp_location currently has a default constructor because of one use - in hoist_existing_locations. hoist_existing_locations now returns a - bp_location_list, and doesn't need the default-constructor - bp_location anymore, so remove the bp_location default constructor. - - - I needed to add a call to clear_locations in delete_breakpoint to - avoid a use-after-free. - - - Add a breakpoint::last_loc method, for use in - set_breakpoint_condition. - - bp_location_range uses reference_to_pointer_iterator, so that all - existing callers of breakpoint::locations don't need to change right - now. It will be removed in the next patch. - - The rest of the changes are to adapt the call sites to use the new - methods, of breakpoint::locations, rather than breakpoint::loc directly. - - Change-Id: I25f7ee3d66a4e914a0540589ac414b3b820b6e70 - Reviewed-By: Andrew Burgess - -2023-05-25 Simon Marchi - - gdbsupport: add missing increment/decrement operators to reference_to_pointer_iterator - Using the following patch, I would get this build failure: - - CXX breakpoint.o - In file included from /usr/include/c++/13.1.1/bits/stl_algobase.h:66, - from /usr/include/c++/13.1.1/bits/hashtable_policy.h:36, - from /usr/include/c++/13.1.1/bits/hashtable.h:35, - from /usr/include/c++/13.1.1/bits/unordered_map.h:33, - from /usr/include/c++/13.1.1/unordered_map:41, - from /usr/include/c++/13.1.1/functional:63, - from /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/ptid.h:35, - from /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/common-defs.h:206, - from /home/smarchi/src/binutils-gdb/gdb/defs.h:26, - from /home/smarchi/src/binutils-gdb/gdb/breakpoint.c:20: - /usr/include/c++/13.1.1/bits/stl_iterator_base_funcs.h: In instantiation of ‘constexpr void std::__advance(_BidirectionalIterator&, _Distance, bidirectional_iterator_tag) [with _BidirectionalIterator = reference_to_pointer_iterator > >; _Distance = long int]’: - /usr/include/c++/13.1.1/bits/stl_iterator_base_funcs.h:224:21: required from ‘constexpr void std::advance(_InputIterator&, _Distance) [with _InputIterator = reference_to_pointer_iterator > >; _Distance = long int]’ - /usr/include/c++/13.1.1/bits/stl_iterator_base_funcs.h:237:19: required from ‘constexpr _InputIterator std::next(_InputIterator, typename iterator_traits<_Iter>::difference_type) [with _InputIterator = reference_to_pointer_iterator > >; typename iterator_traits<_Iter>::difference_type = long int]’ - /home/smarchi/src/binutils-gdb/gdb/breakpoint.c:1073:19: required from here - /usr/include/c++/13.1.1/bits/stl_iterator_base_funcs.h:179:11: error: no match for ‘operator--’ (operand type is ‘reference_to_pointer_iterator > >’) - 179 | --__i; - | ^~~~~ - - This points out that while intrusive_list_iterator has an operator--, - the reference_to_pointer_iterator wrapper does not. I'm not to sure why - the compiler chooses the overload of __advance that accepts a - _BidirectionalIterator, given that reference_to_pointer_iterator can't - be decremented, but adding those operators seems like the right thing to - do in any case, for completeness. - - Change-Id: I8e2044b6734fadf0f21093047cf35bb7080dbdc3 - Reviewed-By: Andrew Burgess - -2023-05-25 Simon Marchi - - gdb: add breakpoint::first_loc methods - Add convenience first_loc methods to struct breakpoint (const and - non-const overloads). A subsequent patch changes the list of locations - to be an intrusive_list and makes the actual list private, so these - spots would need to change from: - - b->loc - - to something ugly like: - - *b->locations ().begin () - - That would make the code much heavier and not readable. There is a - surprisingly big number of places that access the first location of - breakpoints. Whether this is correct, or these spots fail to consider - the possibility of multi-location breakpoints, I don't know. But - anyhow, I think that using this instead: - - b->first_loc () - - conveys the intention better than the other two forms. - - Change-Id: Ibbefe3e4ca6cdfe570351fe7e2725f2ce11d1e95 - Reviewed-By: Andrew Burgess - -2023-05-25 Simon Marchi - - gdb: add breakpoint "has locations" methods - Add three convenience methods to struct breakpoint: - - - has_locations: returns true if the breakpoint has at least one - location - - has_single_location: returns true if the breakpoint has exactly one - location - - has_multiple_locations: returns true if the breakpoint has more than - one location - - A subsequent patch changes the list of breakpoints to be an - intrusive_list, so all these spots would need to change. But in any - case, I think that this: - - if (b->has_multiple_locations ()) - - conveys the intention better than: - - if (b->loc != nullptr && b->loc->next != nullptr) - - Change-Id: Ib18c3605fd35d425ef9df82cb7aacff1606c6747 - Reviewed-By: Andrew Burgess - -2023-05-25 Simon Marchi - - gdb: constify breakpoint::print_it parameter - The print_it method itself is const. In a subsequent patch, the - locations that come out of a const breakpoint will be const as well. It - will therefore be needed to make the last_loc output parameter const as - well. Make that change now to reduce the size of the following patches. - - Change-Id: I7ed962950bc9582646e31e2e42beca2a1c9c5105 - Reviewed-By: Andrew Burgess - -2023-05-25 Simon Marchi - - gdb: make some breakpoint methods use `this` - Some implementations of breakpoint::check_status and - breakpoint::print_it do this: - - struct breakpoint *b = bs->breakpoint_at; - - bs->breakpoint_at is always the same as `this` (we can get convinced by - looking at the call sites of check_status and print_it), so it would - just be clearer to access fields through `this` instead. - - Change-Id: Ic542a64fcd88e31ae2aad6feff1da278c7086891 - Reviewed-By: Alexandra Petlanova Hajkova - Reviewed-By: Andrew Burgess - -2023-05-25 Simon Marchi - - gdb: get gdbarch from syscall_catchpoint instead of location - I noticed some methods of syscall_catchpoint doing this: - - struct gdbarch *gdbarch = loc->owner->gdbarch; - - `loc` is the list of locations of this catchpoint. Logically, the owner - the locations are this catchpoint. So this just ends up getting - this->gdbarch. Remove the unnecessary indirection through the loc. - - syscall_catchpoint::print_recreate does something slightly different, - getting its arch from the loc: - - struct gdbarch *gdbarch = loc->gdbarch; - - I suppose it's always going to be the same arch, so get it from the - catchpoint there too. - - Change-Id: I6f6a6f8e0cd7cfb754cecfb6249e71ec12ba4855 - Reviewed-By: Alexandra Petlanova Hajkova - Reviewed-By: Andrew Burgess - -2023-05-25 Alan Modra - - PR29189, dlltool delaylibs corrupt float/double arguments - PR 29189 - * dlltool.c (i386_x64_trampoline): Save and restore xmm0-5. Make - use of parameter save area for integer arg regs. Comment. - -2023-05-25 GDB Administrator - - Automatic date update in version.in - -2023-05-24 Simon Marchi - - gdbsupport: add support for references to checked_static_cast - Add a checked_static_cast overload that works with references. A bad - dynamic cast with references throws std::bad_cast, it would be possible - to implement the new overload based on that, but it seemed simpler to - just piggy back off the existing function. - - I found some potential uses of this new overload in amd-dbgapi-target.c, - update them to illustrate the use of the new overload. To build - amd-dbgapi-target.c, on needs the amd-dbgapi library, which I don't - expect many people to have. But I have it, and it builds fine here. I - did test the new overload by making a purposely bad cast and it did - catch it. - - Change-Id: Id6b6a7db09fe3b4aa43cddb60575ff5f46761e96 - Reviewed-By: Lancelot SIX - Reviewed-By: Andrew Burgess - -2023-05-24 Andrew Burgess - - gdb/testsuite: fix race in gdb.server/multi-ui-errors.exp - After this commit: - - commit ed32754a8c7919feffc6ddb66ff1c532e4a4d1cd - Date: Thu Mar 9 10:45:03 2023 +0100 - - [gdb/testsuite] Fix gdb.server/multi-ui-errors.exp for remote target - - I noticed the occasional failure in gdb.server/multi-ui-errors.exp, - which looked like this: - - (gdb) PASS: gdb.server/multi-ui-errors.exp: interact with GDB's main UI - interrupt - (gdb) - Program received signal SIGINT, Interrupt. - 0x00007ffff7d501e7 in nanosleep () from /lib64/libc.so.6 - FAIL: gdb.server/multi-ui-errors.exp: interrupt (timeout) - PASS: gdb.server/multi-ui-errors.exp: interrupt arrived - p server_pid - $1 = 718174 - (gdb) PASS: gdb.server/multi-ui-errors.exp: p server_pid - - This is triggered by this code in gdb.server/multi-ui-errors.exp: - - gdb_test "interrupt" - - gdb_test_multiple "" "interrupt arrived" { - -re "Program received signal SIGINT, Interrupt\\.\r\n" { - pass $gdb_test_name - } - } - - The problem here is that the first interrupt will trigger the prompt - to be printed, and then, after some time the inferior will be - interrupted. - - However the default pattern for gdb_test includes a '$' end anchor. - If expect sees the prompt with nothing following it then everything is - fine, and the test passes. - - However, if the interrupt is quick and so what expect sees is this: - - (gdb) - Program received signal SIGINT, Interrupt. - 0x00007ffff7d501e7 in nanosleep () from /lib64/libc.so.6 - - In this case the end anchor means that the gdb_test fails to match, - and eventually times out. - - Fix this by passing -no-prompt-anchor to gdb_test. - - Reviewed-By: Tom de Vries - -2023-05-24 Matti Puputti - - gdb, infcmd: Support jump command with same line in multiple symtabs - If a header file defining a static function is included in multiple source - files, each calling the function, and GDB is asked to jump to a line inside - that function, there would be multiple locations matching the target. The - solution in this commit is to select the location in the current symtab. - - Reviewed-By: Eli Zaretskii - Approved-By: Andrew Burgess - -2023-05-24 Tom Tromey - - Add "args" and "env" parameters to DAP launch request - This patch augments the DAP launch request with some optional new - parameters that let the client control the command-line arguments and - the environment of the inferior. - - Reviewed-By: Andrew Burgess - Reviewed-By: Eli Zaretskii - -2023-05-24 Tom Tromey - - Add attributes and methods to gdb.Inferior - This adds two new attributes and three new methods to gdb.Inferior. - - The attributes let Python code see the command-line arguments and the - name of "main". Argument setting is also supported. - - The methods let Python code manipulate the inferior's environment - variables. - - Reviewed-By: Eli Zaretskii - -2023-05-24 Andreas Schwab - - Remove accidentally added file - -2023-05-24 Alan Modra - - Don't optimise bfd_seek to same position - It's not worth avoiding an fseek to the same position, and can cause - problems if the linker's output file (which is opened "w+") is read, - because that can result in writing, reading, then writing again. - - POSIX.1-2017 (IEEE Std 1003.1) says of fopen: - "When a file is opened with update mode ('+' as the second or third - character in the mode argument), both input and output may be - performed on the associated stream. However, the application shall - ensure that output is not directly followed by input without an - intervening call to fflush() or to a file positioning function - (fseek(), fsetpos(), or rewind()), and input is not directly followed - by output without an intervening call to a file positioning function, - unless the input operation encounters end-of-file." - - * bfdio.c (bfd_seek): Always call iovec->bseek. - -2023-05-24 GDB Administrator - - Automatic date update in version.in - -2023-05-23 Tom Tromey - - Handle DAP evaluate request without a frame ID - DAP specifies that if an evaluate request does not have a frameID - parameter, then the expression is evaluated in the global scope. - -2023-05-23 Tom Tromey - - Add global_context parameter to gdb.parse_and_eval - This adds a 'global_context' parse_and_eval to gdb.parse_and_eval. - This lets users request a parse that is done at "global scope". - - I considered letting callers pass in a block instead, with None - meaning "global" -- but then there didn't seem to be a clean way to - express the default for this parameter. - - Reviewed-By: Eli Zaretskii - -2023-05-23 Tom Tromey - - Add flags to parse_and_eval - This adds a flags parameter to parse_and_eval. - - Add PARSER_LEAVE_BLOCK_ALONE flag - This adds a PARSER_LEAVE_BLOCK_ALONE flag, and changes the parse API - to respect it. This flag lets callers avoid any change to the - passed-in block and expression PC, letting them specify the context - exactly. In particular, now nullptr can be used to indicate that the - parse should not examine any local variables. - - Add PARSER_DEBUG flag - This adds a new PARSER_DEBUG constant and changes the parser code to - use it. This lets us make the 'parser_debug' global 'static'. - - Rearrange parser_state - This patch mildly rearranges parser_state, moving all the bool fields - together. - - Boolify parser_state::comma_terminates - parser_state::comma_terminates ought to be boolean, and changing it - does not require any other changes. - - Simplify parser_state constructor - This simplifies the parser_state constructor by having it accept a - parser_flags parameter. - - Introduce and use parser flags - This patch adds a new parser_flags type and changes the parser APIs to - use it rather than a collection of 'int' and 'bool'. More flags will - be added in subsquent patches. - - Move innermost_block_tracker to expression.h - I think parser-defs.h should hold declarations that can be used by - parser implementations, whereas expression.h should hold declarations - that are used by code that wants to call a parser. Following this - logic, this patch moves innermost_block_tracker to expression.h. - - Avoid forward declaration in parse.c - This minorly rearranges parse.c to avoid the need for a forward - declaration. - - Implement DAP loadedSources request - This implements the DAP loadedSources request, using gdb.execute_mi to - avoid having to write another custom Python API. - -2023-05-23 Tom Tromey - - Implement gdb.execute_mi - This adds a new Python function, gdb.execute_mi, that can be used to - invoke an MI command but get the output as a Python object, rather - than a string. This is done by implementing a new ui_out subclass - that builds a Python object. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=11688 - Reviewed-By: Eli Zaretskii - -2023-05-23 Tom Tromey - - Add second mi_parse constructor - This adds a second mi_parse constructor. This constructor takes a - command name and vector of arguments, and does not do any escape - processing. This also changes mi_parse::args to handle parse objects - created this new way. - - Introduce mi_parse helper methods - This introduces some helper methods for mi_parse that handle some of - the details of parsing. This approach lets us reuse them later. - - Introduce "static constructor" for mi_parse - Change the mi_parse function to be a static method of mi_parse. This - lets us remove the 'set_args' setter function. - - Change mi_parse_argv to a method - This changes mi_parse_argv to be a method of mi_parse. This is just a - minor cleanup. - - Use accessor for mi_parse::args - This changes mi_parse::args to be a private member, retrieved via - accessor. It also changes this member to be a std::string. This - makes it simpler for a subsequent patch to implement different - behavior for argument parsing. - - Use member initializers in mi_parse - This changes mi_parse to use member initializers rather than a - constructor. This is easier to follow. - - Use field_signed from Python MI commands - If an MI command written in Python includes a number in its output, - currently that is simply emitted as a string. However, it's - convenient for a later patch if these are emitted using field_signed. - This does not make a difference to ordinary MI clients. - -2023-05-23 Aaron Merey - - gdb/cli-out.c: clear_current_line shouldn't trigger pagination prompt - clear_current_line overwrites the current line with chars_per_line - blank spaces. Printing the final space triggers a condition in - pager_file::puts that causes lines_printed to be incremented. If - lines_printed becomes greater than or equal to lines_allowed, the - pagination prompt will appear if enabled. - - In this case the prompt is unnecessary since after printing the final - space clear_current_line immediately moves the cursor to the beginning - of the line with '\r'. A new line isn't actually started, so the prompt - ends up being spurious. - - Additionally it's possible for gdb to crash during this pagination prompt. - Answering the prompt with 'q' throws an exception intended to bring gdb - back to the main event loop. But since commit 0fea10f32746, - clear_current_line may be called under the progress_update destructor. - The exception will try to propagate through the destructor, causing an abort. - - To fix this, pagination is disabled for the duration for clear_current_line. - clear_current_line is also renamed to clear_progress_notify to help - indicate that it is a special purpose function intended for use with - do_progress_notify. - - Acked-by: Eli Zaretskii - -2023-05-23 Michael Matz - - PR30437 aarch64: make RELA relocs idempotent - normally RELA relocs in BFD should not consider the contents of the - relocated place. The aarch64 psABI is even stricter, it specifies - (section 5.7.16) that all RELA relocs _must_ be idempotent. - - Since the inception of the aarch64 BFD backend all the relocs have a - non-zero src_mask, and hence break this invariant. It's normally not - a very visible problem as one can see it only when the relocated place - already contains a non-zero value, which usually only happens sometimes - when using 'ld -r' (or as in the testcase when jumping through hoops to - generate the relocations). Or with alternative toolchains that do encode - stuff in the relocated places with the assumption that a relocation - to that place ignores whatever is there (as they can according to - the psABI). - - Golang is such a toolchain and https://github.com/golang/go/issues/39927 - is ultimately caused by this problem: the testcase testGCData failing - is caused by the garbage collection data-structure to describe a type - containing pointers to be wrong. It's wrong because a field that's - supposed to contain a file-relative offset (to some gcbits) has a - relocation applied and that relocation has an addend which also is - already part of the go-produced object file (so the addend is - implicitely applied twice). - - bfd/ - PR ld/30437 - * elfnn-aarch64.c (elfNN_aarch64_howto_table): Clear src_mask - if all relocation descriptors. - - ld/ - * testsuite/ld-aarch64/rela-idempotent.s: New testcase. - * testsuite/ld-aarch64/rela-idempotent.d: New. - * testsuite/ld-aarch64/aarch64-elf.exp: Run it. - -2023-05-23 Nick Clifton - - Updated Swedish translation for the opcodes directory - -2023-05-23 Bruno Larsen - - gdb/testsuite: change hardcoded assembly in gdb.arch/disp-step-insn-reloc.exp - When testing gdb.arch/disp-step-insn-reloc.exp with clang in an x86_64 - machine, the compiled test case would segfault when returning from - the function can_relocate_call, with a suggestion of a broken stack. - The example assembly in the commment was the following: - - f: - MOV $1, %[ok] - JMP end - set_point0: - CALL f ; tracepoint here. - end: - - And the segmentation fault happening at the final "ret" instruction of - can_relocate_call. Looking at the disassembled version of the later - half of the important function, we see: - - Clang version (f starting at 11a4): - 00000000000011ae : - 11ae: e8 f1 ff ff ff callq 11a4 - 11b3: 89 45 fc mov %eax,-0x4(%rbp) - 11b6: 83 7d fc 01 cmpl $0x1,-0x4(%rbp) - 11ba: 0f 85 0a 00 00 00 jne 11ca - 11c0: e8 5b 00 00 00 callq 1220 - 11c5: e9 05 00 00 00 jmpq 11cf - 11ca: e8 61 00 00 00 callq 1230 - 11cf: 48 83 c4 10 add $0x10,%rsp - 11d3: 5d pop %rbp - 11d4: c3 retq - 11d5: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1) - 11dc: 00 00 00 00 - - gcc version (f starting at 401125): - 000000000040112c : - 40112c: e8 f4 ff ff ff callq 401125 - 401131: 89 45 fc mov %eax,-0x4(%rbp) - 401134: 83 7d fc 01 cmpl $0x1,-0x4(%rbp) - 401138: 75 07 jne 401141 - 40113a: e8 c7 ff ff ff callq 401106 - 40113f: eb 05 jmp 401146 - 401141: e8 c7 ff ff ff callq 40110d - 401146: 90 nop - 401147: c9 leaveq - 401148: c3 retq - - The epilogue of set_point0 (11cf for clang, 401146 for gcc) is the main - difference: GCC's version uses the leaveq instruction, which resets rsp - based on rbp, while clang adds the same constant to rsp that it - subtracted in the prologue. Clang fails because the return address that - is added by the "call f" instruction isn't accounted for. - - This commit fixes that by adding a return instruction to f, which leaves - the rsp as the compilers would expect. - - Approved-By: Andrew Burgess - -2023-05-23 Jan Beulich - - x86/Intel: address quoted-symbol related FIXMEs - If in a "word ptr
" or alike construct the "ptr" part is - double-quoted, it shouldn't be recognized as the specific keyword we're - looking for (just like we don't recognize double-quoted operator or - register names anymore). Be careful though to tell closing from opening - double-quotes, as a quoted symbol may follow right afterwards. - -2023-05-23 Jan Beulich - - x86: don't recognize quoted symbol names as registers or operators - The concept of quoted symbols names was introduced pretty late. Utilize - it to allow access to symbols with names matching that of a register (or, - in Intel syntax, also an identifier-like operator). - - This is primarily to aid gcc when generating Intel syntax output; see - their bug target/53929. - -2023-05-23 Zhang, Jun - - Support Intel FRED LKGS - gas/ChangeLog: - - * NEWS: Support Intel FRED LKGS. - * config/tc-i386.c: Add fred lkgs - * doc/c-i386.texi: Document .fred, .lkgs. - * testsuite/gas/i386/i386.exp: Add FRED LKGS tests - * testsuite/gas/i386/x86-64-fred-intel.d: Ditto. - * testsuite/gas/i386/x86-64-fred.d: Ditto. - * testsuite/gas/i386/x86-64-fred.s: Ditto. - * testsuite/gas/i386/x86-64-lkgs-intel.d: Ditto. - * testsuite/gas/i386/x86-64-lkgs-inval.l: Ditto. - * testsuite/gas/i386/x86-64-lkgs-inval.s: Ditto. - * testsuite/gas/i386/x86-64-lkgs.d: Ditto. - * testsuite/gas/i386/x86-64-lkgs.s: Ditto. - - opcodes/ChangeLog: - - * i386-dis.c: New entry for fred, lkgs. - * i386-gen.c: Add CPU_FRED CPU_LKGS. - * i386-init.h : Regenerated. - * i386-mnem.h : Regenerated. - * i386-opc.h: Add fred, lkgs. - * i386-opc.tbl: Add FRED, LKGS instructions. - * i386-tbl.h: Regenerated. - -2023-05-23 liuhongt - - Revert "Support Intel FRED LKGS" - This reverts commit e5a497fe38e0ab19e16bdd9e4b4ed5e4d0056478. - -2023-05-23 Zhang, Jun - - Support Intel FRED LKGS - gas/ChangeLog: - - * NEWS: Support Intel FRED LKGS. - * config/tc-i386.c: Add fred lkgs - * doc/c-i386.texi: Document .fred, .lkgs. - * testsuite/gas/i386/i386.exp: Add FRED LKGS tests - * testsuite/gas/i386/x86-64-fred-intel.d: Ditto. - * testsuite/gas/i386/x86-64-fred.d: Ditto. - * testsuite/gas/i386/x86-64-fred.s: Ditto. - * testsuite/gas/i386/x86-64-lkgs-intel.d: Ditto. - * testsuite/gas/i386/x86-64-lkgs-inval.l: Ditto. - * testsuite/gas/i386/x86-64-lkgs-inval.s: Ditto. - * testsuite/gas/i386/x86-64-lkgs.d: Ditto. - * testsuite/gas/i386/x86-64-lkgs.s: Ditto. - - opcodes/ChangeLog: - - * i386-dis.c: New entry for fred, lkgs. - * i386-gen.c: Add CPU_FRED CPU_LKGS. - * i386-init.h : Regenerated. - * i386-mnem.h : Regenerated. - * i386-opc.h: Add fred, lkgs. - * i386-opc.tbl: Add FRED, LKGS instructions. - * i386-tbl.h: Regenerated. - -2023-05-23 GDB Administrator - - Automatic date update in version.in - -2023-05-22 Tom de Vries - - [gdb/tui] Fix buglet in tui_update_variables - I noticed a buglet in tui_update_variables: - ... - entry = translate (tui_border_kind, tui_border_kind_translate_lrcorner); - if (tui_border_lrcorner != (chtype) entry->value) - { - tui_border_lrcorner = (entry->value < 0) ? ACS_LRCORNER : entry->value; - ... - - When assigning the new value to tui_border_lrcorner, an entry->value of -1 is - taken into account, but not when comparing to the current value of - tui_border_lrcorner. - - Fix this by introducing: - ... - int val = (entry->value < 0) ? ACS_LRCORNER : entry->value; - ... - and using this in both comparison and assignment. - - Tested on x86_64-linux. - -2023-05-22 Tom Tromey - - Remove some FIXME comments from DAP - I recently added a 'dap' component to bugzilla, and I filed a few bugs - there. This patch removes the corresponding FIXME comments. - - A few such comments still exist. In at least one case, I have a fix - I'll be submitting eventually; in others I think I need to do a bit of - investigation to properly file a bug report. - -2023-05-22 Richard Bunt - - gdb: add Richard Bunt to gdb/MAINTAINERS - -2023-05-22 Tom de Vries - - [gdb/testsuite] Add Term::get_line_with_attrs - Add a new proc Term::get_line_with_attrs, similar to Term::get_line, that - annotates a tuiterm line with the active attributes. - - For instance, the line representing the TUI status window with attribute mode - standout looks like this with Term::get_line: - ... - exec No process In: ... L?? PC: ?? - ... - but like this with Term::get_line_with_attrs: - ... - exec No process In: ... L?? PC: ?? - ... - - Also add Term::dump_screen_with_attrs, a Term::dump_screen variant that uses - Term::get_line_with_attrs instead of Term::get_line. - - Tested by re-running the TUI test-cases (gdb.tui/*.exp and gdb.python/tui*.exp) - on x86_64-linux. - -2023-05-22 Tom de Vries - - [gdb/testsuite] Factor out Term::_reset_attrs - Factor out new proc Term::_reset_attrs. - - Tested by re-running the TUI test-cases (gdb.tui/*.exp and gdb.python/tui*.exp) - on x86_64-linux. - -2023-05-22 Alan Modra - - Re: readelf: Support SHT_RELR/DT_RELR for -r - Revert value of DT_ENCODING to as it was before commit a7fd118627, and - adjust readelf. - - include/ - * elf/common.h (DT_ENCODING): Set back to 32. - binutils/ - * readelf.c (struct filedata): Don't size dynamic_info array - using DT_ENCODING. - -2023-05-22 Alan Modra - - PowerPC64 report number of stub iterations - As a developer it is sometimes useful to know how many times stubs - have been resized. Report the count for users too, in ld --stats. - -2023-05-22 GDB Administrator - - Automatic date update in version.in - -2023-05-21 GDB Administrator - - Automatic date update in version.in - -2023-05-20 Alan Modra - - Re: Bug 23686, two segment faults in nm - The fix for pr23686 had a hole in the reloc address sanity check, - the calculation could overflow. Note that stabsize is known to be a - non-zero multiple of 12 so stabsize - 4 can't underflow. - - PR 23686 - * syms.c (_bfd_stab_section_find_nearest_line): Correct - r->address sanity check. - -2023-05-20 Alan Modra - - coffcode.h handle_COMDAT tidy - I started down the path of attempting to fix - https://sourceware.org/pipermail/binutils/2023-April/127263.html but - decided after a while that I didn't want to mess with this code.. - - This patch is a just a few things that I thought worth doing, the main - one being reporting of errors up the call chain. The while loop to - for loop change is shamelessly stolen from Oleg. - - * coffcode.h (handle_COMDAT): Return bool. Make sec_flags a - flagword*, and adjust to suit. Replace while loop with for - loop. Check isym.n_numaux before reading aux entries. Alloc - coff_comdat_info and name in one call to bfd_alloc. Remove - goto breakloop. - (styp_to_sec_flags): Adjust handle_COMDAT call. - -2023-05-20 Alan Modra - - tic54x set_arch_mach - The tic54x backend provides its own coff_set_arch_mach, but wants to - use the standard coff_set_section_contents. BFD_JUMP_TABLE_WRITE - defines both of these functions, so the code also provides a wrapper - for coff_set_section_contents. This is all quite OK, but I was on a - mission to remove unnecessary declarations in coffcode.h, and on - deleting the one for coff_set_arch_mach ran into a warning about the - function being unused. I could have kept that declaration with its - ATTRIBUTE_UNUSED or written "static bool ATTRIBUTE_UNUSED" on the - definition but the latter is not usual and looks odd to me. So I - had a closer look at tic54x_set_arch_mach and decided the function is - very likely wrong to allow bfd_arch_unknown. Thus the backend should - be using the standard coff_set_arch_mach. - - * coff-tic54x.c: Use BFD_JUMP_TABLE_WRITE (coff) in target vecs. - (tic54x_coff_set_arch_mach): Delete. - (tic54x_set_section_contents): Delete. - * coffcode.h: Delete unnecessary forward declarations. - -2023-05-20 GDB Administrator - - Automatic date update in version.in - -2023-05-19 Tom Tromey - - Update documentation for Python Frame.older and Frame.newer - I noticed that Frame.older and Frame.newer don't document that they - return None at the ends of the stack. This patch updates the - documentation, and also fixes a somewhat related typo in a comment - that I noticed while digging into this. - - Approved-By: Eli Zaretskii - -2023-05-19 Jan Beulich - - ld: drop stray blank from ld.texi - At least older makeinfo complains about it. Also fix an apparent typo - while touching that line. - -2023-05-19 Jan Vrany - - gdb: fix post-hook execution for remote targets - Commit b5661ff2 ("gdb: fix possible use-after-free when - executing commands") attempted to fix possible use-after-free - in case command redefines itself. - - Commit 37e5833d ("gdb: fix command lookup in execute_command ()") - updated the previous fix to handle subcommands as well by using the - original command string to lookup the command again after its execution. - - This fixed the test in gdb.base/define.exp but it turned out that it - does not work (at least) for "target remote" and "target extended-remote". - - The problem is that the command buffer P passed to execute_command () - gets overwritten in dont_repeat () while executing "target remote" - command itself: - - #0 dont_repeat () at top.c:822 - #1 0x000055555730982a in target_preopen (from_tty=1) at target.c:2483 - #2 0x000055555711e911 in remote_target::open_1 (name=0x55555881c7fe ":1234", from_tty=1, extended_p=0) - at remote.c:5946 - #3 0x000055555711d577 in remote_target::open (name=0x55555881c7fe ":1234", from_tty=1) at remote.c:5272 - #4 0x00005555573062f2 in open_target (args=0x55555881c7fe ":1234", from_tty=1, command=0x5555589d0490) - at target.c:853 - #5 0x0000555556ad22fa in cmd_func (cmd=0x5555589d0490, args=0x55555881c7fe ":1234", from_tty=1) - at cli/cli-decode.c:2737 - #6 0x00005555573487fd in execute_command (p=0x55555881c802 "4", from_tty=1) at top.c:688 - - Therefore the second call to lookup_cmd () at line 697 fails to find - command because the original command string is gone. - - This commit addresses this particular problem by creating a *copy* of - original command string for the sole purpose of using it after command - execution to lookup the command again. It may not be the most efficient - way but it's safer given that command buffer is shared and overwritten - in hard-to-foresee situations. - - Tested on x86_64-linux. - - PR 30249 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30249 - - Approved-By: Tom Tromey - -2023-05-19 Richard Bunt - - gdb: Remove redundant frame switching - 547ce8f00b fixed an issue where dynamic types were not being resolved - correctly prior to printing a value. The same issue was discovered when - printing the value using mi-mode, which was not covered by the fix. - Porting the fix to the mi-mode code path resolved the issue. - - However, it was discovered that a later patch series, ending - 2fc3b8a4cb8, independently fixed the issue in both the cli- and mi-mode - code paths, making the original fix unneeded. - - This commit removes this extra frame switch and adds test coverage for - the mi-mode scenario to protect against any future divergence in this - area. - - GDB built with GCC 11. - - No test suite regressions detected. Compilers: GCC 12.1.0, ACfL 22.1, - Intel 22.1; Platforms: x86_64, aarch64. - - Approved-By: Tom Tromey - -2023-05-19 Andrew Burgess - - gdb: safety checks in skip_prologue_using_sal - While working on the previous patch I reverted this commit: - - commit e86e87f77fd5d8afb3e714f1d9e09e0ff5b4e6ff - Date: Tue Nov 28 16:23:32 2006 +0000 - - * symtab.c (find_pc_sect_line): Do not return a line before - the start of a symtab. - - When I re-ran the testsuite I saw some GDB crashes in the tests: - - gdb.dwarf2/dw2-line-number-zero.exp - gdb.dwarf2/dw2-lines.exp - gdb.dwarf2/dw2-vendor-extended-opcode.exp - - GDB was reading beyond the end of an array in the function - skip_prologue_using_sal. - - Now, without the above commit reverted I don't believe that this - should ever happen. Reverting the above commit effectively breaks - GDB's symtab_and_line lookup, we try to find a result for an address, - and return the wrong symtab and line-table. In - skip_prologue_using_sal we then walk the line table looking for an - appropriate entry, except we never find one, and GDB just keeps going, - wandering off the end of the array. - - However, I think adding extra protection to prevent walking off the - end of the array is pretty cheap, and if something does go wrong in - the future then this should prevent a random crash. - - Obviously, I have no reproducer for this, as I said, I don't think - this should impact GDB at all, this is just adding a little extra - caution. - - Reviewed-By: Tom Tromey - -2023-05-19 Andrew Burgess - - gdb/testsuite: test for a function with no line table - This commit adds a test for the following commit: - - commit e86e87f77fd5d8afb3e714f1d9e09e0ff5b4e6ff - Date: Tue Nov 28 16:23:32 2006 +0000 - - * symtab.c (find_pc_sect_line): Do not return a line before - the start of a symtab. - - We have been carrying a test for that commit in the Fedora GDB tree - since that commit was added to GDB. I don't know why the test wasn't - added along with the original commit, but as was written, the test is - pretty gross, it uses objcopy to pull the .text section from an object - file, which was then injected into another source file within a .asm - statement... - - ... these days we can just make use of the DWARF assembler to achieve - the same results, so I've rewritten the test and think it is worth - adding this to upstream GDB. - - The original patch was about about how we find the best symtab and - line table entry, and what to do when GDB can't find a good match. - - The new test creates a CU with two functions, only one of which is - covered by the line table. With the above patch reverted GDB returns - an invalid address. - - With the above patch reverted I did run the testsuite to see what - other tests might already be exercising this functionality, and I - found two tests: - - gdb.dwarf2/dw2-step-out-of-function-no-stmt.exp - gdb.dwarf2/dw2-vendor-extended-opcode.exp - - These are pretty similar, they either create minimal, or no line table - for one of the functions in the source file, and as a consequence GDB - returns an unexpected address at some point during the test. - - However, both of those tests are really focused on other issues, so I - think this new test does add some value. Plus the new test is not - large, so it's not a huge cost to also run this new test. - - Reviewed-By: Tom Tromey - -2023-05-19 Andrew Burgess - - gdb/breakpoint: use warning function instead of gdb_printf - Noticed that in breakpoint.c, in one place, we do this: - - gdb_printf (_("warning: Error removing " - "breakpoint %d\n"), - old_loc->owner->number); - - Instead of using the `warning` function. There are a number of - differences between using gdb_printf like this and calling `warning`, - the main one is probably that real warnings are sent to gdb_stderr, - while the above gdb_printf call will go to gdb_stdout. - - In this commit I: - - 1. Change to call `warning`, we can drop the "warning: " prefix from - the string in breakpoint.c, - - 2. Update the warning text, I now start with a lower case 'e', which - I believe is the GDB style for warnings, - - 3. And I have included the address of the bp_location in the warning - messsage, - - 4. Finally, I update all the tests (2) that include this error - message. - - Reviewed-By: Tom Tromey - -2023-05-19 Andrew Burgess - - gdb/testsuite: handle older Python versions in gdb.python/py-disasm.exp - It was pointed out on the mailing list that the new tests added in - this commit: - - commit 4de4e48514fc47aeb4ca95cd4091e2a333fbe9e1 - Date: Tue Jan 24 15:35:45 2023 +0000 - - gdb/python: extend the Python Disassembler API to allow for styling - - will fail when GDB is built with Python 3.6 or earlier. This is - because the error that is emitted when a function argument is missing - changed in Python 3.7, instead of an error like this: - - Python Exception : function missing required argument 'style' (pos 1) - - earlier versions of Python emit: - - Python Exception : Required argument 'style' (pos 1) not found - - and the new tests didn't allow for this. - - This commit fixes this by allowing either pattern. I've tested this - building GDB against Python 3.7.9 and 3.6.15, with this commit all - tests in gdb.python/py-disasm.exp now pass. - -2023-05-19 Kuan-Lin Chen - - RISC-V: Support subtraction of .uleb128. - https://github.com/riscv-non-isa/riscv-elf-psabi-doc/commit/96d6e190e9fc04a8517f9ff7fb9aed3e9876cbd6 - - There are some known limitations for now, - - * Do not shrink the length of the uleb128 value, even if the value is reduced - after relaxations. Also reports error if the length grows up. - - * The R_RISCV_SET_ULEB128 needs to be paired with and be placed before the - R_RISCV_SUB_ULEB128. - - bfd/ - * bfd-in2.h: Regenerated. - * elfnn-riscv.c (perform_relocation): Perform R_RISCV_SUB_ULEB128 and - R_RISCV_SET_ULEB128 relocations. Do not shrink the length of the - uleb128 value, and report error if the length grows up. Called the - generic functions, _bfd_read_unsigned_leb128 and _bfd_write_unsigned_leb128, - to encode the uleb128 into the section contents. - (riscv_elf_relocate_section): Make sure that the R_RISCV_SET_ULEB128 - must be paired with and be placed before the R_RISCV_SUB_ULEB128. - * elfxx-riscv.c (howto_table): Added R_RISCV_SUB_ULEB128 and - R_RISCV_SET_ULEB128. - (riscv_reloc_map): Likewise. - (riscv_elf_ignore_reloc): New function. - * libbfd.h: Regenerated. - * reloc.c (BFD_RELOC_RISCV_SET_ULEB128, BFD_RELOC_RISCV_SUB_ULEB128): - New relocations to support .uleb128 subtraction. - gas/ - * config/tc-riscv.c (md_apply_fix): Added BFD_RELOC_RISCV_SET_ULEB128 - and BFD_RELOC_RISCV_SUB_ULEB128. - (s_riscv_leb128): Updated to allow uleb128 subtraction. - (riscv_insert_uleb128_fixes): New function, scan uleb128 subtraction - expressions and insert fixups for them. - (riscv_md_finish): Called riscv_insert_uleb128_fixes for all sections. - include/ - * elf/riscv.h ((R_RISCV_SET_ULEB128, (R_RISCV_SUB_ULEB128): Defined. - ld/ - * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated. - * testsuite/ld-riscv-elf/uleb128*: New testcase for uleb128 subtraction. - binutils/ - * testsuite/binutils-all/nm.exp: Updated since RISCV supports .uleb128. - -2023-05-19 Nelson Chu - - RISC-V: Minor improvements for dis-assembler. - * Extract all private_data initializations into riscv_init_disasm_info, which - called from print_insn_riscv rather than riscv_disassemble_insn. - - * The disassemble_free_target seems like the right place to release all target - private_data, also including the internal data structures, like riscv_subsets. - Therefore, add a new function, disassemble_free_riscv, to release them for safe. - - opcodes/ - * disassemble.c (disassemble_free_target): Called disassemble_free_riscv - for riscv to release private_data and internal data structures. - * disassemble.h: Added extern disassemble_free_riscv. - * riscv-dis.c (riscv_init_disasm_info): New function, used to init - riscv_private_data. - (riscv_disassemble_insn): Moved riscv_private_data initializations - into riscv_init_disasm_info. - (print_insn_riscv): Called riscv_init_disasm_info to init - riscv_private_data once time. - (disassemble_free_riscv): New function, used to free the internal data - structures, like riscv_subsets. - -2023-05-19 Jan Beulich - - x86: permit all relational operators in insn operands - Oddly enough == and != were not permitted, because of '=' not having - been listed in operand_special_chars[]. - -2023-05-19 Jan Beulich - - x86: further adjust extend-to-32bit-address conditions - While a442cac5084e ("ix86: wrap constants") helped address a number of - inconsistencies between BFD64 and !BFD64 builds, it has also resulted in - certain bogus uses of constants to no longer be warned about. Leverage - the md_optimize_expr() hook to adjust when to actually truncate - expressions to 32 bits - any involvement of binary expressions (which - would be evaluated in 32 bits only when !BFD64) signals the need for - doing so. Plain constants (or ones merely subject to unary operators) - should remain un-truncated - they would be handled as bignums when - !BFD64, and hence are okay to permit. - - To compensate - - slightly extend optimize_imm() (to be honest I never understood why - the code being added - or something similar - wasn't there in the - first place), - - adjust expectations of the disp-imm-32 testcase (there are now - warnings, as there should be for any code which won't build [warning- - free] when !BFD64, and Disp8/Imm8 are no longer used in the warned - about cases). - -2023-05-19 Jan Beulich - - gas: invoke md_optimize_expr() also for unary expressions - Give backends a chance to see these, just as they can see binary ones. - Most of those which use this hook already cope with NULL being passed - for the left operand (typically because of checking the operator first). - Adjust the two which don't. - - Take the opportunity and also document the hook. - -2023-05-19 Jan Beulich - - gas: maintain O_constant signedness in more cases - Unary '~' doesn't really produce an unsigned result. Neither does - subtraction (unless taking operand values into consideration). And an - abstract operator applied to two operands which aren't both unsigned - can't be assumed to yield an unsigned result; exceptions are - - shifts, where only signedness of the left hand operand matters, - - comparisons, which - unlike unary '!' - produce signed results (they - deliver 0 or ~0, as opposed to '!', which yields 0 or 1), - - logical operators (yielding 0 or 1 and hence treated like unary '!'). - - While doing this (specifically while extending the all/quad testcase), - update .quad and .8byte documentation: With 64-bit architectures now - being common, it is highly inappropriate to state that these directives - unconditionally require bignums. - -2023-05-19 Jan Beulich - - x86: tighten extend-to-32bit-address conditions - In a442cac5084e ("ix86: wrap constants") I made the truncation condition - too relaxed: Any indication of a mode that's possible with BFD64 only - should avoid the truncation. Therefore, like in the other two cases of - calls to extend_to_32bit_address(), also check whether we're generating - a 64-bit object. - -2023-05-19 GDB Administrator - - Automatic date update in version.in - -2023-05-18 Tom Tromey - - Use lower-case in @sc in the documentation - Eli pointed out that @sc only produces small caps for lower case - letters in its argument, so it's weird to write it using upper-case - letters. This patch fixes the instances I found. - - Approved-By: Eli Zaretskii - -2023-05-18 Simon Marchi - - gdb.fortran/lbound-ubound.exp: read expected lbound and ubound from function parameters (PR 30414) - gdb.fortran/lbound-ubound.exp reads the expected lbound and ubound - values by reading some output from the inferior. This is racy when - running on boards where the inferior I/O is on a separate TTY than - GDB's, such as native-gdbserver. - - I sometimes see this behavior: - - (gdb) continue - Continuing. - - Breakpoint 2, do_test (lb=..., ub=...) at /home/jenkins/workspace/binutils-gdb_master_linuxbuild/platform/jammy-amd64/target_board/nati - ve-gdbserver/src/binutils-gdb/gdb/testsuite/gdb.fortran/lbound-ubound.F90:45 - 45 print *, "" ! Test Breakpoint - (gdb) Remote debugging from host ::1, port 37496 - - Expected GDB Output: - - LBOUND = (-8, -10) - UBOUND = (-1, -2) - APB: Run a test here - APB: Expected lbound '(-8, -10)' - APB: Expected ubound '' - - What happened is that expect read the output from GDB before the output - from the inferior, triggering this gdb_test_multiple clause: - - -re "$gdb_prompt $" { - set found_prompt true - - if {$found_dealloc_breakpoint - || ($expected_lbound != "" && $expected_ubound != "")} { - # We're done. - } else { - exp_continue - } - } - - So it set found_prompt, but the gdb_test_multiple kept going because - found_dealloc_breakpoint is false (this is the flag indicating that the - test is finished) and we still don't have expected_lbound and - expected_ubound. Then, expect reads in the inferior I/O, triggering - this clause: - - -re ".*LBOUND = (\[^\r\n\]+)\r\n" { - set expected_lbound $expect_out(1,string) - if {!$found_prompt} { - exp_continue - } - } - - This sets expected_lbound, but since found_prompt is true, we don't do - exp_continue, and exit the gdb_test_multiple, without having an - expected_ubound. - - Change the test to read the values from the lb and ub function - parameters instead. As far as I understand, this still exercises what - we want to test. These variables contain the return values of the - lbound and ubound functions as computed by the program. We'll use them - to check the return values of the lbound and ubound functions as - computed by GDB. - - Change-Id: I3c4d3d17d9291870a758a42301d15a007821ebb5 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30414 - -2023-05-18 Hui Li - - gdb/elfread.c: Add plt symbol check for _PROCEDURE_LINKAGE_TABLE_ - In the current code, when execute the following test on LoongArch: - - $ make check-gdb TESTS="gdb.base/gnu-ifunc.exp" - === gdb Summary === - - # of expected passes 111 - # of unexpected failures 62 - - According to IFUNC's working process [1]. first time the IFUNC function - is called, the dynamic linker will not simply fill the .got.plt entry - with the actual address of IFUNC symbol, it will call the IFUNC resolver - function and take the return address, uses it as the sym-bound address - and puts it in the .got.plt entry. Initial address in .got.plt entry is - not a real function addresss. Depending on the compiler implementation, - some different addresses will be filled in. Most architectures will use - a .plt entry address to fill in the corresponding .got.plt entry. - - In gdb, elf_gnu_ifunc_resolve_addr() will be called to return a real - IFUNC function addresss. First check to see if the real address for - the IFUNC symbol has been resolved by the following function: - - elf_gnu_ifunc_resolve_name (const char *name, CORE_ADDR *addr_p) - { - if (elf_gnu_ifunc_resolve_by_cache (name, addr_p)) - return true; - - if (elf_gnu_ifunc_resolve_by_got (name, addr_p)) - return true; - - return false; - } - - in elf_gnu_ifunc_resolve_by_got(), it gets the contents of the - .got.plt entry and determines if the contents is the correct address - by calling elf_gnu_ifunc_record_cache(). Based on the IFUNC working - principle analysis above, the address filled in the .got.plt entry is - not the actual target function address initially, it would be a .plt - entry address corresponding symbol like *@plt. In this case, gdb just - go back to execute the resolver function and puts the return address - in the .got.plt entry. After that, gdb can get a real ifun address via - .got.plt entry. - - On LoongArch, initially, each address filled in the .got.plt entries - is the first .plt entry address. Some architectures such as LoongArch - define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the .plt - section. This symbol is the first plt entry, so gdb needs to check - this symbol in elf_gnu_ifunc_record_cache(). - - On LoongArch .got.plt and .plt section as follow: - - $objdump -D gdb/testsuite/outputs/gdb.base/gnu-ifunc/gnu-ifunc-0-0-0 - ... - 0000000120010008 <.got.plt>: - 120010008: ffffffff 0xffffffff - 12001000c: ffffffff 0xffffffff - ... - 120010018: 20004000 ll.w $zero, $zero, 64(0x40) - 12001001c: 00000001 0x00000001 - 120010020: 20004000 ll.w $zero, $zero, 64(0x40) - 120010024: 00000001 0x00000001 - 120010028: 20004000 ll.w $zero, $zero, 64(0x40) - 12001002c: 00000001 0x00000001 - 120010030: 20004000 ll.w $zero, $zero, 64(0x40) - 120010034: 00000001 0x00000001 - - ... - Disassembly of section .plt: - - 0000000120004000 <_PROCEDURE_LINKAGE_TABLE_>: - 120004000: 1c00018e pcaddu12i $t2, 12(0xc) - 120004004: 0011bdad sub.d $t1, $t1, $t3 - 120004008: 28c021cf ld.d $t3, $t2, 8(0x8) - 12000400c: 02ff51ad addi.d $t1, $t1, -44(0xfd4) - 120004010: 02c021cc addi.d $t0, $t2, 8(0x8) - 120004014: 004505ad srli.d $t1, $t1, 0x1 - 120004018: 28c0218c ld.d $t0, $t0, 8(0x8) - 12000401c: 4c0001e0 jirl $zero, $t3, 0 - - 0000000120004020 <__libc_start_main@plt>: - 120004020: 1c00018f pcaddu12i $t3, 12(0xc) - 120004024: 28ffe1ef ld.d $t3, $t3, -8(0xff8) - 120004028: 4c0001ed jirl $t1, $t3, 0 - 12000402c: 03400000 andi $zero, $zero, 0x0 - - 0000000120004030 : - 120004030: 1c00018f pcaddu12i $t3, 12(0xc) - 120004034: 28ffc1ef ld.d $t3, $t3, -16(0xff0) - 120004038: 4c0001ed jirl $t1, $t3, 0 - 12000403c: 03400000 andi $zero, $zero, 0x0 - - 0000000120004040 : - 120004040: 1c00018f pcaddu12i $t3, 12(0xc) - 120004044: 28ffa1ef ld.d $t3, $t3, -24(0xfe8) - 120004048: 4c0001ed jirl $t1, $t3, 0 - 12000404c: 03400000 andi $zero, $zero, 0x0 - ... - - With this patch: - - $make check-gdb TESTS="gdb.base/gnu-ifunc.exp" - === gdb Summary === - - #of expected passes 173 - - [1] https://sourceware.org/glibc/wiki/GNU_IFUNC - -2023-05-18 Alan Modra - - Re: Add section caches to coff_data_type - Another thing, section target_index is renumbered in - coff_compute_section_file_positions and _bfd_xcoff_bfd_final_link. I - don't know that there is currently any way that the output bfd - section_by_target_index could be populated before this point but - clear them out so no one need worry about it. - - * coffcode.h (coff_compute_section_file_positions): Clear - section_by_target_index hash table when changing target_index. - (_bfd_xcoff_bfd_final_link): Likewise. - -2023-05-18 Tom de Vries - - [gdb/testsuite] Fix whitespace and indentation in lib/tuiterm.exp - I noticed a trailing whitespace and some indentation errors in lib/tuiterm.exp. - - Fix these. - - Tested by re-running the TUI test-cases (gdb.tui/*.exp and gdb.python/tui*.exp) - on x86_64-linux. - -2023-05-18 Indu Bhagat - - libsframe: testsuite: add tests for sframe_get_funcdesc_with_addr API - sframe_get_funcdesc_with_addr API is currently used internally by the - sframe_find_fre (). - - In this test, we create three dummy SFrame FDEs with 4 FREs each. Then, - we use few negative tests to lookup FREs with PCs not in the range of - PCs covered by the FDEs, ensuring graceful return from - sframe_get_funcdesc_with_addr in all cases. Some positive tests are - also added that exercise further scenarios as well. - - libsframe/ - * Makefile.in: Regenerated. - * testsuite/libsframe.find/find.exp: Include new test. - * testsuite/libsframe.find/findfunc-1.c: New Test. - * testsuite/libsframe.find/local.mk: Include new test. - -2023-05-18 Indu Bhagat - - libsframe: testsuite: add new tests for sframe_find_fre API - libsframe provides an API to find the FRE associated with a given PC in - the program. This patch adds a direct test of this API. - - In this test, we create two dummy SFrame FDEs with 4 FREs each. Then we - test that sframe_find_fre () works for the first, second, third and the - last FRE from one of the FDEs. Such a test ensures better regression - testing for the sframe_find_fre () function which is going to be the - bread and butter of an SFrame based stack tracer. - - libsframe/ - * Makefile.in: Regenerated. - * testsuite/libsframe.find/find.exp: New test. - * testsuite/libsframe.find/findfre-1.c: New test. - * testsuite/libsframe.find/local.mk: Build new test. - * testsuite/local.mk: Include libsframe.find. - -2023-05-18 Alan Modra - - Re: Add section caches to coff_data_type - Commit 0e759f232b6d regressed these tests: - rs6000-aix7.2 +FAIL: Garbage collection test 1 (32-bit) - rs6000-aix7.2 +FAIL: Garbage collection test 1 (64-bit) - rs6000-aix7.2 +FAIL: Glink test 1 (32-bit) - rs6000-aix7.2 +FAIL: Glink test 1 (64-bit) - - Investigation showed segfaults in coff_section_from_bfd_index called - by xcoff_write_global_symbol due to the hash table pointer being - NULL. Well, yes, the hash table isn't initialised for the output bfd. - mkobject_hook is the wrong place to do that. - - * coffcode.h: Revert 0e759f232b6d changes. - * peicode.h: Likewise. - * coff-x86_64.c (htab_hash_section_index, htab_eq_section_index): - Moved here from coffcode.h. - (coff_amd64_rtype_to_howto): Create section_by_index htab. - * coffgen.c (htab_hash_section_target_index), - (htab_eq_section_target_index): Moved here from coffcode.h. - (coff_section_from_bfd_index): Create section_by_target_index - htab. Stash newly created sections in htab. - -2023-05-18 Alan Modra - - PR11601, Solaris assembler compatibility doesn't work - Well, it doesn't work on x86 or ppc, which both have # starting - comments anywhere on a line. I think it is therefore only useful on - sparc. - - PR 11601 - * config/obj-elf.c (obj_elf_section_word): Only compile for sparc. - (obj_elf_section): Only support solaris .section directive on - sparc. - * doc/as.texi (Section): Mention that solaris .section - directive is only supported for sparc. - -2023-05-18 GDB Administrator - - Automatic date update in version.in - -2023-05-17 Tom Tromey - - Special case "&str" in Rust parser - "&str" is an important type in Rust -- it's the type of string - literals. However, the compiler puts it in the DWARF in a funny way. - The slice itself is present and named "&str". However, the Rust - parser doesn't look for types with names like this, but instead tries - to construct them from components. In this case it tries to make a - pointer-to-"str" -- but "str" isn't always available, and in any case - that wouldn't yield the best result. - - This patch adds a special case for &str. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22251 - Reviewed-By: Andrew Burgess - -2023-05-17 Luca Bacci - - Decorated symbols in import libs (BUG 30421) - PR 30421 - * cofflink.c (_decoration_hash_newfunc): New function. (_bfd_coff_link_hash_table_init): Call it. - * libcoff-in.h (struct coff_link_hash_table): Add decoration_hash field. (struct decoration_hash_entry): Declare. (_decoration_hash_newfunc): Prototype. - * libcoff.h: Regenerate. - - * emultempl/pe.em (set_decoration): New function. (pe_fixup_stdcalls): Call the new function. - * emultempl/pep.em (set_decoration): New function. (pep_fixup_stdcalls): Call the new function. - * pe-dll.c (make_one): Check for decoated symbols. - -2023-05-17 Alan Modra - - PR29961, plugin-api.h: "Could not detect architecture endianess" - Found when attempting to build binutils on sparc sunos-5.8 where - sys/byteorder.h defines _BIG_ENDIAN but not any of the BYTE_ORDER - variants. This patch adds the extra tests to cope with the old - machine, and tidies the header a little. - - PR 29961 - plugin-api.h: When handling non-gcc or gcc < 4.6.0 include - necessary header files before testing macros. Make more use - of #elif. Test _LITTLE_ENDIAN and _BIG_ENDIAN in final tests. - -2023-05-17 Alan Modra - - gcc-4.5 build fixes - Trying to build binutils with an older gcc currently fails. Working - around these gcc bugs is not onerous so let's fix them. - - bfd/ - * elf32-csky.c (csky_elf_size_dynamic_sections): Don't type-pun - pointer. - * elf32-rl78.c (rl78_compute_complex_reloc): Rename "stat" - variable to "status". - gas/ - * compress-debug.c (compress_finish): Supply all fields in - ZSTD_inBuffer initialisation. - include/ - * xtensa-dynconfig.h (xtensa_isa_internal): Delete unnecessary - forward declaration. - opcodes/ - * loongarch-opc.c: Supply all fields of zero struct initialisation - in various opcode tables. - -2023-05-17 GDB Administrator - - Automatic date update in version.in - -2023-05-16 Vladimir Mezentsev - - gprofng: include a new function in the right place - Static function name is not available in stripped libraries. - In this case, gprofng maps PC to a fake function like @0xPC (). - Sometimes gprofng creates two functions instead of one. - Also FUNC_FLAG_SIMULATED is needed for these fake functions. - - gprofng/ChangeLog - 2023-05-11 Vladimir Mezentsev - - * src/LoadObject.cc (LoadObject::find_function): Set FUNC_FLAG_SIMULATED. - Include a new function in the right place. - -2023-05-16 Tom de Vries - - [gdb/tui] Don't show line number for lines not in source file - Currently, for a source file containing only 5 lines, we also show line - numbers 6 and 7 if they're in scope of the source window: - ... - 0 +-compact-source.c----------------+ - 1 |___3_{ | - 2 |___4_ return 0; | - 3 |___5_} | - 4 |___6_ | - 5 |___7_ | - 6 +---------------------------------+ - ... - - Fix this by not showing line numbers not in a source file, such that we have instead: - ... - 0 +-compact-source.c----------------+ - 1 |___3_{ | - 2 |___4_ return 0; | - 3 |___5_} | - 4 | | - 5 | | - 6 +---------------------------------+ - ... - - Tested on x86_64-linux. - - Suggested-By: Simon Marchi - Approved-By: Tom Tromey - -2023-05-16 Nick Clifton - - Document how to use the linker to create a resource only DLL. - PR 30359 - * ld.texi (WIN32): Document how to create a resource only DLL. - -2023-05-16 Oleg Tolmatcev - - Add section caches to coff_data_type - * libcoff-in.h (struct coff_tdata): Add section_by_index and section_by_target_index hash tables. - * libcoff.h: Regenerate. - * coffcode.h (htab_hash_section_index): New function. (htab_eq_section_index): New function. (htab_hash_section_target_index): New function. (htab_eq_section_target_index): New function. (coff_mkobject_hool): Create the hash tables. - * peicode.h: Add the same new functions. (pe_mkobject_hook): Create the hash tables. - * coff-x86_64.c (coff_amd64_rtype_to_howto): Use the new tables to speed up lookups. - * coffgen.c (coff_section_from_bfd_index): Likewise. (_bfd_coff_close_and_cleanup): Delete the hash tables. - -2023-05-16 Paul Pluzhnikov - - Update comments for the gdb/24331 fix. - Approved-by: Andrew Burgess - -2023-05-16 Andrew Burgess - - gdb/testsuite: fix formatting of gdb.python/py-disasm.py - Run black on gdb.python/py-disasm.py file and commit the changes. - -2023-05-16 Andrew Burgess - - gdb/testsuite: make gdb_supported_languages a caching proc - Rewrite gdb_supported_languages as a caching proc that actually - queries GDB for the list of supported languages, rather than just - containing a hard-coded list of languages. - - There's only one test that uses this proc right now, - gdb.python/py-function.exp, and that still passes after this change, - with no changes in the test names. - -2023-05-16 Nick Clifton - - -Ur option documentation - * ld.texi (-Ur): Clarify the actions of this option. - -2023-05-16 Andrew Burgess - - gdb/testsuite: fix regressions in break-main-file-remove-fail.exp - After this commit: - - commit a68f7e9844208ad8cd498f89b5100084ece7d0f6 - Date: Tue May 9 10:28:42 2023 +0100 - - gdb/testsuite: extend special '^' handling to gdb_test_multiple - - buildbot notified me of a regression on s390 in the test: - - gdb.base/break-main-file-remove-fail.exp - - the failure looks like this: - - print /d ((int (*) (void *, size_t)) munmap) (16781312, 4096) - warning: Error removing breakpoint 0 - $2 = 0 - (gdb) FAIL: gdb.base/break-main-file-remove-fail.exp: cmdline: get integer valueof "((int (*) (void *, size_t)) munmap) (16781312, 4096)" - - On the mailing list it has been reported that this failure also - impacts arm, aarch64, and possibly ppc/ppc64 too. - - The above commit changed get_integer_valueof so that no output is - expected between the command and the '$2 = 0' line. In this case the - 'warning: Error removing breakpoint 0' output is causing the - get_integer_valueof call to fail. - - The reason for this warning is that this test deliberately calls - munmap on a page of the inferior's code. The test is checking that - GDB can handle the situation where a s/w breakpoint can't be - removed (due to the page no longer being readable/writable). - - The test that is supposed to trigger the warning is later in the test - script when we delete a breakpoint. - - So why do some targets trigger the warning earlier during the inferior - call? - - The impacted targets use AT_ENTRY_POINT as their strategy for handling - inferior calls, that is, the trampoline that calls the inferior - function is placed at the program's entry point, e.g. often the _start - label. - - If this location happens to be on the same page as the page that the - test script unmaps then, when the inferior function call returns, GDB - will not be able to remove the temporary breakpoint that is inserted - to catch the inferior function call returning! As a result we end up - seeing the warning earlier than expected. - - I did wonder if this means I should relax the pattern in - get_integer_valueof - just accept that there might be additional - output from GDB which we should ignore. - - However, I don't think this the right way to go. With the change in - a68f7e984420 we are now stricter for GDB emitting additional, - unexpected, output, and I think that is a good thing. - - So, I think, in this case, in order to handle the possible extra - output, we should implement something like get_integer_valueof - directly in the gdb.base/break-main-file-remove-fail.exp test script. - This local version will handle the possible warning output. - - After this the test should pass again on the impacted targets. - -2023-05-16 Andrew Burgess - - gdb/python: extend the Python Disassembler API to allow for styling - This commit extends the Python Disassembler API to allow for styling - of the instructions. - - Before this commit the Python Disassembler API allowed the user to do - two things: - - - They could intercept instruction disassembly requests and return a - string of their choosing, this string then became the disassembled - instruction, or - - - They could call builtin_disassemble, which would call back into - libopcode to perform the disassembly. As libopcode printed the - instruction GDB would collect these print requests and build a - string. This string was then returned from the builtin_disassemble - call, and the user could modify or extend this string as needed. - - Neither of these approaches allowed for, or preserved, disassembler - styling, which is now available within libopcodes for many of the more - popular architectures GDB supports. - - This commit aims to fill this gap. After this commit a user will be - able to do the following things: - - - Implement a custom instruction disassembler entirely in Python - without calling back into libopcodes, the custom disassembler will - be able to return styling information such that GDB will display - the instruction fully styled. All of GDB's existing style - settings will affect how instructions coming from the Python - disassembler are displayed in the expected manner. - - - Call builtin_disassemble and receive a result that represents how - libopcode would like the instruction styled. The user can then - adjust or extend the disassembled instruction before returning the - result to GDB. Again, the instruction will be styled as expected. - - To achieve this I will add two new classes to GDB, - DisassemblerTextPart and DisassemblerAddressPart. - - Within builtin_disassemble, instead of capturing the print calls from - libopcodes and building a single string, we will now create either a - text part or address part and store these parts in a vector. - - The DisassemblerTextPart will capture a small piece of text along with - the associated style that should be used to display the text. This - corresponds to the disassembler calling - disassemble_info::fprintf_styled_func, or for disassemblers that don't - support styling disassemble_info::fprintf_func. - - The DisassemblerAddressPart is used when libopcodes requests that an - address be printed, and takes care of printing the address and - associated symbol, this corresponds to the disassembler calling - disassemble_info::print_address_func. - - These parts are then placed within the DisassemblerResult when - builtin_disassemble returns. - - Alternatively, the user can directly create parts by calling two new - methods on the DisassembleInfo class: DisassembleInfo.text_part and - DisassembleInfo.address_part. - - Having created these parts the user can then pass these parts when - initializing a new DisassemblerResult object. - - Finally, when we return from Python to gdbpy_print_insn, one way or - another, the result being returned will have a list of parts. Back in - GDB's C++ code we walk the list of parts and call back into GDB's core - to display the disassembled instruction with the correct styling. - - The new API lives in parallel with the old API. Any existing code - that creates a DisassemblerResult using a single string immediately - creates a single DisassemblerTextPart containing the entire - instruction and gives this part the default text style. This is also - what happens if the user calls builtin_disassemble for an architecture - that doesn't (yet) support libopcode styling. - - This matches up with what happens when the Python API is not involved, - an architecture without disassembler styling support uses the old - libopcodes printing API (the API that doesn't pass style info), and - GDB just prints everything using the default text style. - - The reason that parts are created by calling methods on - DisassembleInfo, rather than calling the class constructor directly, - is DisassemblerAddressPart. Ideally this part would only hold the - address which the part represents, but in order to support backwards - compatibility we need to be able to convert the - DisassemblerAddressPart into a string. To do that we need to call - GDB's internal print_address function, and to do that we need an - gdbarch. - - What this means is that the DisassemblerAddressPart needs to take a - gdb.Architecture object at creation time. The only valid place a user - can pull this from is from the DisassembleInfo object, so having the - DisassembleInfo act as a factory ensures that the correct gdbarch is - passed over each time. I implemented both solutions (the one - presented here, and an alternative where parts could be constructed - directly), and this felt like the cleanest solution. - - Reviewed-By: Eli Zaretskii - Reviewed-By: Tom Tromey - -2023-05-16 Andrew Burgess - - gdb/python: rework how the disassembler API reads the result object - This commit is a refactor ahead of the next change which will make - disassembler styling available through the Python API. - - Unfortunately, in order to make the styling support available, I think - the easiest solution is to make a very small change to the existing - API. - - The current API relies on returning a DisassemblerResult object to - represent each disassembled instruction. Currently GDB allows the - DisassemblerResult class to be sub-classed, which could mean that a - user tries to override the various attributes that exist on the - DisassemblerResult object. - - This commit removes this ability, effectively making the - DisassemblerResult class final. - - Though this is a change to the existing API, I'm hoping this isn't - going to cause too many issues: - - - The Python disassembler API was only added in the previous release - of GDB, so I don't expect it to be widely used yet, and - - - It's not clear to me why a user would need to sub-class the - DisassemblerResult type, I allowed it in the original patch - because at the time I couldn't see any reason to NOT allow it. - - Having prevented sub-classing I can now rework the tail end of the - gdbpy_print_insn function; instead of pulling the results out of the - DisassemblerResult object by calling back into Python, I now cast the - Python object back to its C++ type (disasm_result_object), and access - the fields directly from there. In later commits I will be reworking - the disasm_result_object type in order to hold information about the - styled disassembler output. - - The tests that dealt with sub-classing DisassemblerResult have been - removed, and a new test that confirms that DisassemblerResult can't be - sub-classed has been added. - - Reviewed-By: Eli Zaretskii - Reviewed-By: Tom Tromey - -2023-05-16 GDB Administrator - - Automatic date update in version.in - -2023-05-15 Tom Tromey - - Correctly handle forward DIE references in scanner - The cooked index scanner has special code to handle forward DIE - references. However, a bug report lead to the discovery that this - code does not work -- the "deferred_entry::spec_offset" field is - written to but never used, i.e., the lookup is done using the wrong - key. - - This patch fixes the bug and adds a regression test. - - The test in the bug itself used a thread_local variable, which - provoked a failure at runtime. This test instead uses "maint print - objfiles" and then inspects to ensure that the entry in question has a - parent. This lets us avoid a clang dependency in the test. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30271 - -2023-05-15 mengqinggang - - LoongArch: Fix PLT entry generate bug - If a function symbol only get its address by la.global, without - directly called by bl instruction, the PLT entry is not required. - - bfd/ChangeLog: - - * elfnn-loongarch.c (loongarch_elf_adjust_dynamic_symbol): Fix PLT - entry generate bug. - - ld/ChangeLog: - - * testsuite/ld-elf/shared.exp: Clear xfail for LoongArch. - -2023-05-15 GDB Administrator - - Automatic date update in version.in - -2023-05-14 GDB Administrator - - Automatic date update in version.in - -2023-05-13 Paul Pluzhnikov - - Fix bad interaction between element limit and repeated values (BZ#24331). - Currently - - print -elements=3 -- "AAAAAA" - - prints complete string, which is not what the user asked for. - - Fix two buggy tests exposed by the fix, and add a new test. - - Reviewed-by: Keith Seitz - -2023-05-13 Alan Modra - - PR28955 mips gas segfault - Testing for NULL in pic_need_relax fixes the other call to this - function in md_estimate_size_before_relax. - - PR 28955 - * config/tc-mips.c (mips_frob_file): Move NULL sym test to.. - (pic_need_relax): ..here. - -2023-05-13 Alan Modra - - PR28902, -T script with INSERT ordering - The answer to PR28902 may be deduced from the existing INSERT - documentation that says the default script is parsed after the -T - INSERT script, if you assume (correctly) that nothing special is done - when inserting into -T scripts overriding the default script. In both - cases INSERT handling looks for the specified output section later on - the internal list of parsed script commands. This isn't obvious - though, so make the ordering explicit, and mention that section - assignments are the same too. - - PR 28902 - * ld.texi (INSERT): Specify ordering when -T is used both to - override the default script and to augment. - -2023-05-13 GDB Administrator - - Automatic date update in version.in - -2023-05-12 Tom Tromey - - Fix regression due to Pragma Import series - A co-worker here at AdaCore discovered that the Pragma Import series - caused a rgression. When debugging gnat1, gdb started asking for - overload resolution like: - - (gdb) call pp(n) - Multiple matches for pp - [0] cancel - [1] pp (types.union_id) at ../../gcc/gcc/ada/treepr.adb:511 - [2] treepr.pp (types.union_id) at ../../gcc/gcc/ada/treepr.adb:511 - - This worked before the series, and is strange anyway, because the - matches refer to the same function. - - This patch adds a test case for this situation and fixes the bug by - pruning identical functions in remove_extra_symbols. - -2023-05-12 Tom Tromey - - Use bool and early loop exit in remove_extra_symbols - This changes remove_extra_symbols to use bool rather than int, and - changes the nested loops to exit early when "remove_p" is set. - - Use reference parameter in remove_extra_symbols - Changing ada-lang.c:remove_extra_symbols to take a reference parameter - makes the code a bit easier to read, by replacing "(*syms)" with plain - "syms". - - Handle Ada Pragma Import and Pragma Export - Ada can import C APIs and also export Ada constructs to C via Pragma - Import and Pragma Export. This patch adds support for these to gdb, - by arranging to either defer some aspects of a symbol to the - underlying C symbol (for Import) or by introducing a second symbol - (for Export). A somewhat tricky approach is needed, both because gdb - doesn't generally handle symbol aliasing, and because Ada treats - symbol names in an unusual way (as compared to the rest of gdb). - - Introduce symbol_block_ops::get_block_value - This adds a new callback to symbol_block_ops. This callback lets a - LOC_BLOCK symbol implement its own function to find the underlying - block. - - Define symbol::value_block separately - This moves the definition of symbol::value_block outside of the class. - A subsequent patch will change this method to use SYMBOL_BLOCK_OPS, - and it seemed simplest to move this method out-of-line, and cleaner to - do this as a separate change. - - Bump MAX_SYMBOL_IMPLS - A subsequent patch will introduce more aclass registrations, causing - the number to go over the current maximum. This bumps the number. - Note that there's a separate static assert that ensures that this - number doesn't get too large for the field size in the symbol. - - Introduce lookup_minimal_symbol_linkage - This introduces a new function, lookup_minimal_symbol_linkage, and - refactors a couple other existing functions to call it. This function - will be used in a subsequent patch. - -2023-05-12 Simon Marchi - - gdb: remove unnecessary call to std::string constructor - I spotted this explicit call to std::string, which creates an - unnecessary temporary extra std::string, while calling emplace_back. - I'm not sure if it has any impact in an optimized build, maybe the - compiler elides it. But still, it's unnecessary. - - Change-Id: I873337ea91db29ac06267aff8fc12dcf52824cac - Approved-By: Tom Tromey - -2023-05-12 Tom Tromey - - Add dynamic_prop::is_constant - I noticed many spots checking whether a dynamic property's kind is - PROP_CONST. Some spots, I think, are doing a slightly incorrect check - -- checking for != PROP_UNDEFINED where == PROP_CONST is actually - required, the key thing being that const_val may only be called for - PROP_CONST properties. - - This patch adds dynamic::is_constant and then updates these checks to - use it. - - Regression tested on x86-64 Fedora 36. - -2023-05-12 Tom Tromey - - Implement DAP register scope - I noticed that gdb's DAP code did not provide a way to see register - values. DAP defines a "register" scope, which this patch implements. - This patch also adds the missing (and optional) "presentationHint" to - scopes. - -2023-05-12 Tom Tromey - - Fix calling debuginfo-less functions in Ada - A co-worker at AdaCore noticed that calling a function without - debuginfo yields: - - (gdb) print plus_one(23) - 'pck.plus_one' has unknown return type; cast the call to its declared return type - - However, this also happens if you follow the directions and add the - cast. - - This patch fixes the problem and adds a regression test. - -2023-05-12 Andrew Burgess - - gdb/python: implement DisassemblerResult.__str__ method - Add the DisassemblerResult.__str__ method. This gives the same result - as the DisassemblerResult.string attribute, but can be useful - sometimes depending on how the user is trying to print the object. - - There's a test for the new functionality. - -2023-05-12 Andrew Burgess - - gdb/python: implement __repr__ methods for py-disasm.c types - Add a __repr__ method for the DisassembleInfo and DisassemblerResult - types, and add some tests for these new methods. - -2023-05-12 Andrew Burgess - - gdb/doc: improve Python Disassembler API documentation - Some small improvements to the Python Disassembler API documentation: - - * Be consistent about using the package scope in the @deftp lines, - - * Rework the description of the DisassemblerResult class to include - mention of builtin_disassemble. - -2023-05-12 Andrew Burgess - - gdb/testsuite: extend special '^' handling to gdb_test_multiple - The commit: - - commit 08ec06d6440745ef9204d39197aa1e732df41056 - Date: Wed Mar 29 10:41:07 2023 +0100 - - gdb/testsuite: special case '^' in gdb_test pattern - - Added some special handling of '^' to gdb_test -- a leading '^' will - cause the command regexp to automatically be included in the expected - output pattern. - - It was pointed out that the '-wrap' flag of gdb_test_multiple is - supposed to work in the same way as gdb_test, and that the recent - changes for '^' had not been replicated for gdb_test_multiple. This - patch addresses this issue. - - So, after this commit, the following two constructs should have the - same meaning: - - gdb_test "command" "^output" "test name" - - gdb_test_multiple "command" "test name" { - -re -wrap "^output" { - pass $gdb_test_name - } - } - - In both cases the '^' will case gdb.exp to inject a regexp that - matches 'command' after the '^' and before the 'output', this is in - addition to adding the $gdb_prompt pattern after 'output' in the - normal way. - - The special '^' handling is only applied when '-wrap' is used, as this - is the only mode that aims to mimic gdb_test. - - While working on this patch I realised that I could actually improve - the logic for the special '^' handling in the case where the expected - output pattern is empty. I replicated these updates for both gdb_test - and gdb_test_multiple in order to keep these two paths in sync. - - There were a small number of tests that needed adjustment after this - change, mostly just removing command regexps that are now added - automatically, but the gdb.base/settings.exp case was a little weird - as it turns out trying to match a single blank line is probably harder - now than it used to be -- still, I suspect this is a pretty rare case, - so I think the benefits (improved anchoring) outweigh this small - downside (IMHO). - -2023-05-12 Andrew Burgess - - gdb: fix error message for $_gdb_maint_setting - I spotted this behaviour: - - (gdb) p $_gdb_maint_setting("xxx") - First argument of $_gdb_maint_setting must be a valid setting of the 'show' command. - - Notice that GDB claims I need to use a setting from the 'show' - command, which isn't correct for $_gdb_maint_setting, in this case I - need to use a setting from 'maintenance show'. - - This same issue is present for $_gdb_maint_setting_str. - - This commit fixes this minor issue. - - Approved-By: Simon Marchi - -2023-05-12 Tom de Vries - - [gdb/testsuite] Fix gdb.dwarf2/opt-out-not-implptr.exp for -m32 - When running test-case gdb.dwarf2/opt-out-not-implptr.exp with target board - unix/-m32 we have: - ... - (gdb) print noptr^M - $1 = {0, , , }^M - (gdb) FAIL: gdb.dwarf2/opt-out-not-implptr.exp: print noptr - ... - - The problem happens when evaluating this dwarf expression: - ... - <45> DW_AT_location : 13 byte block: 10 86 ea d7 d0 96 8e cf 92 5c 9f 93 8 \ - (DW_OP_constu: 6639779683436459270; DW_OP_stack_value; DW_OP_piece: 8) - ... - - The DW_OP_constu pushes a value with "generic type" on to the DWARF stack, and - the "generic type" has the size of an address on the target machine, which for - target board unix/-m32 is 4 bytes. Consequently, the constant is abbreviated. - - Next, the DW_OP_piece declares that the resulting 4-byte value is 8 bytes - large, and we hit this clause in rw_pieced_value: - ... - /* Use zeroes if piece reaches beyond stack value. */ - if (p->offset + p->size > stack_value_size_bits) - break; - ... - and consequently get a zero. - - We could just add require is_target_64 to the test-case, but instead, add a - 32-bit case and require is_target_64 just for the 64-bit case. - - Tested on x86_64-linux. - -2023-05-12 Tom de Vries - - [gdb/testsuite] Make is_64_target more robust - I ran test-case gdb.dwarf2/opt-out-not-implptr.exp with make-check-all.sh, and - with target board dwarf64 ran into: - ... - FAIL: gdb.dwarf2/opt-out-not-implptr.exp: print noptr - ... - due to is_target_64 failing because of: - ... - builtin_spawn -ignore SIGHUP gcc -fno-stack-protector \ - -fdiagnostics-color=never -w -c -gdwarf64 -g -o is_64_target.o \ - is_64_target.c^M - gcc: error: '-gdwarf64' is ambiguous; use '-gdwarf-64' for DWARF version or \ - '-gdwarf -g64' for debug level^M - compiler exited with status 1 - ... - - The FAIL is the same FAIL I run into with target board unix/-m32: is_target_64 - fails for both cases. - - The reason that is_target_64 is failing for target board dwarf64, is because - of using system compiler 7.5.0 which doesn't support -gdwarf64. - - Fix this by making is_target_64 use nodebug instead of debug for compilation. - - Tested on x86_64-linux. - -2023-05-12 Tom de Vries - - [gdb/cli] Fix wrapping for TERM=ansi - I. Auto-detected width (xterm vs. ansi) - - Say we have a terminal with a width of 40 chars: - ... - $ echo $COLUMNS - 40 - ... - - With TERM=xterm, we report a width of 40 chars: - ... - $ TERM=xterm gdb - (gdb) show width - Number of characters gdb thinks are in a line is 40. - ... - - And with TERM=ansi, a width of 39 chars: - ... - $ TERM=ansi gdb - (gdb) show width - Number of characters gdb thinks are in a line is 39. - ... - - Gdb uses readline to auto-detect screen size, and readline decides in the - TERM=ansi case that the terminal does not have reliable auto-wrap, and - consequently decides to hide the last terminal column from the readline user - (in other words GDB), hence we get 39 instead of 40. - - II. Types of wrapping - - Looking a bit more in detail inside gdb, it seems there are two types of - wrapping: - - readline wrapping (in other words, prompt edit wrapping), and - - gdb output wrapping (can be observed by issuing "info sources"). - This type of wrapping attempts to wrap some of the gdb output earlier - than the indicated width, to not break lines in inconvenient places. - - III. Readline wrapping, auto-detected screen size - - Let's investigate readline wrapping with the auto-detected screen widths. - - First, let's try with xterm: - ... - $ TERM=xterm gdb - (gdb) 7890123456789012345678901234567890 - 123 - ... - That looks as expected, wrapping occurs after 40 chars. - - Now, let's try with ansi: - ... - $ TERM=ansi gdb - (gdb) 78901234567890123456789012345678 - 90123 - ... - It looks like wrapping occurred after 38, while readline should be capable of - wrapping after 39 chars. - - This is caused by readline hiding the last column, twice. - - In more detail: - - readline detects the screen width: 40, - - readline hides the last column, setting the readline screen width to 39, - - readline reports 39 to gdb as screen width, - - gdb sets its width setting to 39, - - gdb sets readline screen width to 39, - - readline hides the last column, again, setting the readline screen width to - 38. - - This is reported as PR cli/30346. - - IV. gdb output wrapping, auto-detected screen size - - Say we set the terminal width to 56. With TERM=xterm, we have: - ... - /home/abuild/rpmbuild/BUILD/glibc-2.31/csu/elf-init.c, - /data/vries/hello.c, - ... - but with TERM=ansi: - ... - /home/abuild/rpmbuild/BUILD/glibc-2.31/csu/elf-init.c, / - data/vries/hello.c, - ... - - So what happened here? With TERM=ansi, the width setting is auto-detected to - 55, and gdb assumes the terminal inserts a line break there, which it doesn't - because the terminal width is 56. - - This is reported as PR cli/30411. - - V. Fix PRs - - Fix both mentioned PRs by taking into account the hidden column when readline - reports the screen width in init_page_info, and updating chars_per_line - accordingly. - - Note that now we report the same width for both TERM=xterm and TERM=ansi, - which is much clearer. - - The point where readline respectively expects or ensures wrapping is still - indicated by "maint info screen", for xterm: - ... - Number of characters readline reports are in a line is 40. - ... - and ansi: - ... - Number of characters readline reports are in a line is 39. - ... - - VI. Testing - - PR cli/30346 is covered by existing regression tests gdb.base/wrap-line.exp - and gdb.tui/wrap-line.exp, so remove the KFAILs there. - - I didn't manage to come up with a regression test for PR cli/30411. Perhaps - that would be easier if we had a maintenance command that echoes its arguments - while applying gdb output wrapping. - - Tested on x86_64-linux. - - PR cli/30346 - PR cli/30411 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30346 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30411 - -2023-05-12 Jan Beulich - - x86: move a few more disassembler helper functions - ... such that they wouldn't need forward declarations anymore. Note that - append_seg() already was suitably placed. - - x86: move get() disassembler helper functions - ... such that none of them would need forward declarations anymore. - - x86: slightly simplify i386_parse_name() - With the switch to parse_real_register() (commit 4faaa10f3fab) "bad_reg" - cannot come back anymore. Drop the respective check. - -2023-05-12 Jan Beulich - - gas: equates of registers - There are two problems: symbol_equated_p() doesn't recognize equates of - registers, and S_CAN_BE_REDEFINED() goes by section rather than by - expression type. Both together undermine .eqv and .equiv clearly meaning - to guard the involved symbols against re-definition (both ways). - - To compensate pseudo_set() now using O_symbol and S_CAN_BE_REDEFINED() - now checking for O_register, - - for targets creating register symbols through symbol_{new,create}() -> - symbol_init() -> S_SET_VALUE() (alpha, arc, dlx, ia64, m68k, mips, - mmix, tic4x, tic54x, plus anything using cgen or itbl-ops), have - symbol_init() set their expressions to O_register, - - x86'es parse_register() also can't go by section anymore when - trying to "look through" equates; probably symbol_equated_p() should - have been used there from the beginning, if only that had worked for - equates of registers, - - various targets need to "look through" equates when parsing insn - operands (which also helps transitive forward equates); perhaps even - more ought to, but many don't look to consider the possibility of - register equates in the first place. - - This was uncovered by code reported in PR gas/30274 (duplicating - PR gas/30272), except that there .eqv was used when really .equ was - meant. Therefore that bug report is addressed here only in so far as - gas wouldn't crash anymore; the code there still won't assemble - successfully, just that now the issues there are properly diagnosed. - -2023-05-12 GDB Administrator - - Automatic date update in version.in - -2023-05-11 Tom Tromey - - Do not print when piece is optimized out - A user reported a bug where printing a certain array of integer types - would result in the nonsensical: - - (gdb) p l_126 - $1 = {6639779683436459270, , , } - - I tracked this down to some issues in the DWARF expression code. - First, check_pieced_synthetic_pointer did not account for the - situation where a location expression does not describe all the bits - of a value -- in this case it returned true, meaning there is a - synthetic pointer, but in fact these bits are optimized out. (It - turns out this incorrect output had already been erroneously tested - for as well.) - - Next, rw_pieced_value did not mark these bits as optimized-out, - either. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30296 - -2023-05-11 Aaron Merey - - gdb/testsuite: Match file size in gdb.debuginfod/crc_mismatch.exp - gdb's debuginfod progress messages include the size of the file being - downloaded if the size information is available at the time the message - is printed. For example: - - Downloading 10 MB separate debug info for /lib64/libxyz.so - - This size information is omitted if it's not available at the time of - printing: - - Downloading separate debug info for /lib64/libxyz.so - - A pattern in crc_mismatch.exp fails to be matched if a progress message - includes a file size. Add a wildcard to the pattern so that it matches - the progress message whether or not it includes the file size. - -2023-05-11 Johnson Sun - - Disable out-of-scope watchpoints - Currently, when a local software watchpoint goes out of scope, GDB sets - the watchpoint's disposition to `delete at next stop' and then normal - stops (i.e., stop and wait for the next GDB command). When GDB normal - stops, it automatically deletes the breakpoints with their disposition - set to `delete at next stop'. - - Suppose a Python script decides not to normal stop when a local - software watchpoint goes out of scope, the watchpoint will not be - automatically deleted even when its disposition is set to - `delete at next stop'. - - Since GDB single-steps the program and tests the watched expression - after each instruction, not deleting the watchpoint causes the - watchpoint to be hit many more times than it should, as reported in - PR python/29603. - - This was happening because the watchpoint is not deleted or disabled - when going out of scope. - - This commit fixes this issue by disabling the watchpoint when going out - of scope. It also adds a test to ensure this feature isn't regressed in - the future. - - Calling `breakpoint_auto_delete' on all kinds of stops (in - `fetch_inferior_event') seem to solve this issue, but is in fact - inappropriate, since `breakpoint_auto_delete' goes over all breakpoints - instead of just going through the bpstat chain (which only contains the - breakpoints that were hit right now). - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29603 - Change-Id: Ia85e670b2bcba2799219abe4b6be3b582387e383 - -2023-05-11 Tom Tromey - - Add "scheduler-locking" to documentation index - I noticed that "scheduler-locking" does not appear in the index of the - gdb manual. This patch corrects this oversight. - -2023-05-11 Joseph Myers - - Add LDPT_REGISTER_CLAIM_FILE_HOOK_V2 linker plugin hook [GCC PR109128] - This is one part of the fix for GCC PR109128, along with a - corresponding GCC change. Without this patch, what happens in the - linker, when an unused object in a .a file has offload data, is that - elf_link_is_defined_archive_symbol calls bfd_link_plugin_object_p, - which ends up calling the plugin's claim_file_handler, which then - records the object as one with offload data. That is, the linker never - decides to use the object in the first place, but use of this _p - interface (called as part of trying to decide whether to use the - object) results in the plugin deciding to use its offload data (and a - consequent mismatch in the offload data present at runtime). - - The new hook allows the linker plugin to distinguish calls to - claim_file_handler that know the object is being used by the linker - (from ldmain.c:add_archive_element), from calls that don't know it's - being used by the linker (from elf_link_is_defined_archive_symbol); in - the latter case, the plugin should avoid recording the object as one - with offload data. - - bfd/ - * plugin.c (struct plugin_list_entry): Add claim_file_v2. - (register_claim_file_v2): New. - (try_load_plugin): Use LDPT_REGISTER_CLAIM_FILE_HOOK_V2. - (ld_plugin_object_p): Take second argument. - (bfd_link_plugin_object_p): Update call to ld_plugin_object_p. - (register_ld_plugin_object_p): Update argument prototype. - (bfd_plugin_object_p): Update call to ld_plugin_object_p. - * plugin.h (register_ld_plugin_object_p): Update argument - prototype. - - include/ - * plugin.api.h (ld_plugin_claim_file_handler_v2) - (ld_plugin_register_claim_file_v2) - (LDPT_REGISTER_CLAIM_FILE_HOOK_V2): New. - (struct ld_plugin_tv): Add tv_register_claim_file_v2. - - ld/ - * plugin.c (struct plugin): Add claim_file_handler_v2. - (LDPT_REGISTER_CLAIM_FILE_HOOK_V2): New. - (plugin_object_p): Add second argument. Update call to - plugin_call_claim_file. - (register_claim_file_v2): New. - (set_tv_header): Handle LDPT_REGISTER_CLAIM_FILE_HOOK_V2. - (plugin_call_claim_file): Add argument known_used. - (plugin_maybe_claim): Update call to plugin_object_p. - * testplug.c, testplug2.c, testplug3.c, testplug4.c: Handle - LDPT_REGISTER_CLAIM_FILE_HOOK_V2. - * testsuite/ld-plugin/plugin-1.d, testsuite/ld-plugin/plugin-10.d, - testsuite/ld-plugin/plugin-11.d, testsuite/ld-plugin/plugin-13.d, - testsuite/ld-plugin/plugin-14.d, testsuite/ld-plugin/plugin-15.d, - testsuite/ld-plugin/plugin-16.d, testsuite/ld-plugin/plugin-17.d, - testsuite/ld-plugin/plugin-18.d, testsuite/ld-plugin/plugin-19.d, - testsuite/ld-plugin/plugin-2.d, testsuite/ld-plugin/plugin-26.d, - testsuite/ld-plugin/plugin-3.d, testsuite/ld-plugin/plugin-30.d, - testsuite/ld-plugin/plugin-4.d, testsuite/ld-plugin/plugin-5.d, - testsuite/ld-plugin/plugin-6.d, testsuite/ld-plugin/plugin-7.d, - testsuite/ld-plugin/plugin-8.d, testsuite/ld-plugin/plugin-9.d: - Update test expectations. - -2023-05-11 GDB Administrator - - Automatic date update in version.in - -2023-05-10 Tom de Vries - - [gdb/tui] Fix tui compact-source a bit more - Andrew pointed out that the behaviour as tested in gdb.tui/compact-source.exp - is incorrect: - ... - 0 +-compact-source.c--------------------------------------------------------+ - 1 |___3_{ | - 2 |___4_ return 0; | - 3 |___5_} | - 4 |___6_ | - 5 |___7_ | - 6 |___8_ | - 7 |___9_ | - 8 +-------------------------------------------------------------------------+ - ... - - The last line number in the source file is 5, and there are 7 lines to display - source lines, so if we'd scroll all the way down, the first line number in the - source window would be 5, and the last one would be 11. - - To represent 11 we'd need 2 digits, so we expect to see ___04_ here instead of - ___4_, even though all line numbers currently in the src window (3-9) can be - represented with only 1 digit. - - Fix this in tui_source_window::set_contents, by updating the computation of - max_line_nr: - ... - - int max_line_nr = std::max (lines_in_file, last_line_nr_in_window); - + int max_line_nr = lines_in_file + nlines - 1; - ... - - Tested on x86_64-linux. - - Co-Authored-By: Andrew Burgess - Approved-By: Tom Tromey - -2023-05-10 Andrew Burgess - - gdb/rust: fix crash for expression debug with strings - While working on another patch I did this: - - (gdb) set debug expression 1 - (gdb) set language rust - (gdb) p "foo" - Operation: OP_AGGREGATE - Type: &str - - Fatal signal: Segmentation fault - ... etc ... - - The problem is that the second field of the rust_aggregate_operation - is created as a nullptr, this can be seen in rust-parse.c. in the - function rust_parser::parse_string(). - - However, in expop.h, in the function dump_for_expression, we make the - assumption that the expressions will never be nullptr. - - I did consider moving the nullptr handling into a new function - rust_aggregate_operation::dump, however, as the expression debug - dumping code is not exercised as much as it might be, I would rather - that this code be hardened and able to handle a nullptr without - crashing, so I propose that we add nullptr handling into the general - dump_for_expression function. The behaviour is now: - - (gdb) set debug expression 1 - (gdb) set language rust - (gdb) p "foo" - Operation: OP_AGGREGATE - Type: &str - nullptr - Vector: - String: data_ptr - Operation: UNOP_ADDR - Operation: OP_STRING - String: foo - String: length - Operation: OP_LONG - Type: usize - Constant: 3 - evaluation of this expression requires the target program to be active - (gdb) - - There's a new test to check for this case. - - Reviewed-By: Tom Tromey - -2023-05-10 Alan Modra - - Re: stack overflow in debug_write_type - Apparently u.kindirect->slot can point at a NULL. - - * debug.c (debug_write_type): Don't segfault on NULL indirect. - -2023-05-10 Luca Bonissi - - or1k relocation truncated to fit: R_OR1K_GOT16 even when using -mcmodel=large - PR 30422 - * elf32-or1k.c (or1k_elf_relocate_section): Prescan for R_OR1K_GOT_AHI16 relocs as they may occur after R_OR1K_GOT16 relocs. - -2023-05-10 Nick Clifton - - Add linker option to include local symbols in the linker map. - PR 16566 - * ldlang.c (ld_is_local_symbol): New function. (print_input_section): Add code to display local symbols in the section. - * ldlex.h (enum option_values): Add OPTION_PRINT_MAP_LOCALS and OPTION_PRINT_MAP_LOCALS. - * lexsup.c (ld_options[]): Add entries for --print-map-locals and --no-print-map-locals. - * NEWS: Mention the new feature. - * ld.h (struct ld_config_type): Add print_map_locals field. - * ld.texi: Document the new command line option. - * testsuite/ld-scripts/sizeof.s: Add a local symbol. - * testsuite/ld-scripts/map-locals.d: New test control file. - * testsuite/ld-scripts/map-address.exp: Run the new test. - -2023-05-10 Tom de Vries - - [gdb/tui] Fix tui compact-source - Consider a hello.c, with less than 10 lines: - ... - $ wc -l hello.c - 8 hello.c - ... - and compiled with -g into an a.out. - - With compact-source off: - ... - $ gdb -q a.out \ - -ex "set tui border-kind ascii" \ - -ex "maint set tui-left-margin-verbose on" \ - -ex "set tui compact-source off" \ - -ex "tui enable" - ... - we get: - ... - +-./data/hello.c-----------------------+ - |___000005_{ | - |___000006_ printf ("hello\n"); | - |___000007_ return 0; | - |___000008_} | - |___000009_ | - |___000010_ | - |___000011_ | - ... - but with compact-source on: - ... - +-./data/hello.c-----------------------+ - |___5{ | - |___6 printf ("hello\n"); | - |___7 return 0; | - |___8} | - |___9 | - |___1 | - |___1 | - ... - - There are a couple of problems with compact-source. - - First of all the documentation mentions: - ... - 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. - ... - - The bit about the default display and the next tab stop looks incorrect. The - source doesn't start at a tab stop, instead it uses a single space to separate - the line numbers from the source. - - Then the documentation mentions that there's single space in the compact - display, but evidently that's missing. - - Then there's the fact that the line numbers "10" and "11" are both abbreviated - to "1" in the compact case. - - The abbreviation is due to allocating space for , which is - 8 for this example, and takes a single digit. The line numbers though - continue past the end of the file, so fix this by allocating space for - max (, ), which in this example takes 2 - digits. - - The missing space is due to some confusion about what the "1" here in - tui_source_window::set_contents represent: - ... - double l = log10 ((double) offsets->size ()); - m_digits = 1 + (int) l; - ... - - It could be the trailing space that's mentioned in tui-source.h: - ... - /* How many digits to use when formatting the line number. This - includes the trailing space. */ - int m_digits; - ... - - Then again, it could be part of the calculation for the number of digits - needed for printing. With this minimal example: - ... - int main () { - for (int i = 8; i <= 11; ++i) { - double l = log10 ((double) i); - printf ("%d %d\n", i, (int)l); - } - return 0; - } - ... - we get: - ... - $ ./a.out - 8 0 - 9 0 - 10 1 - 11 1 - ... - which shows that the number of digits needed for printing i is - "1 + (int)log10 ((double) i)". - - Fix this by introducing named variables needed_digits and trailing_space, each - adding 1. - - With the fixes, we get for compact-source on: - ... - +-./data/hello.c-----------------------+ - |___05_{ | - |___06_ printf ("hello\n"); | - |___07_ return 0; | - |___08_} | - |___09_ | - |___10_ | - |___11_ | - |... - - Also fix the documentation and help text to actually match effect of - compact-source. - - Tested on x86_64-linux. - -2023-05-10 GDB Administrator - - Automatic date update in version.in - -2023-05-09 Dan Callaghan - - Support higher baud rates when they are defined - On Linux at least, baud rate codes are defined up to B4000000. Allow the - user to select them if they are present in the system headers. - - Change-Id: I393ff32e4a4b6127bdf97e3306ad5b6ebf7c934e - -2023-05-09 Simon Marchi - - gdb: fix use-after-free in check_longjmp_breakpoint_for_call_dummy - Commit 7a8de0c33019 ("Remove ALL_BREAKPOINTS_SAFE") introduced a - use-after-free in the breakpoints iterations (see below for full ASan - report). This makes gdb.base/stale-infcall.exp fail when GDB is build - with ASan. - - check_longjmp_breakpoint_for_call_dummy iterates on all breakpoints, - possibly deleting the current breakpoint as well as related breakpoints. - The problem arises when a breakpoint in the B->related_breakpoint chain - is also B->next. In that case, deleting that related breakpoint frees - the breakpoint that all_breakpoints_safe has saved. - - The old code worked around that by manually changing B_TMP, which was - the next breakpoint saved by the "safe iterator": - - while (b->related_breakpoint != b) - { - if (b_tmp == b->related_breakpoint) - b_tmp = b->related_breakpoint->next; - delete_breakpoint (b->related_breakpoint); - } - - (Note that this seemed to assume that b->related_breakpoint->next was - the same as b->next->next, not sure this is guaranteed.) - - The new code kept the B_TMP variable, but it's not useful in that - context. We can't go change the next breakpoint as saved by the safe - iterator, like we did before. I suggest fixing that by saving the - breakpoints to delete in a map and deleting them all at the end. - - Here's the full ASan report: - - (gdb) PASS: gdb.base/stale-infcall.exp: continue to breakpoint: break-run1 - print infcall () - ================================================================= - ==47472==ERROR: AddressSanitizer: heap-use-after-free on address 0x611000034980 at pc 0x563f7012c7bc bp 0x7ffdf3804d70 sp 0x7ffdf3804d60 - READ of size 8 at 0x611000034980 thread T0 - #0 0x563f7012c7bb in next_iterator::operator++() /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/next-iterator.h:66 - #1 0x563f702ce8c0 in basic_safe_iterator >::operator++() /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/safe-iterator.h:84 - #2 0x563f7021522a in check_longjmp_breakpoint_for_call_dummy(thread_info*) /home/smarchi/src/binutils-gdb/gdb/breakpoint.c:7611 - #3 0x563f714567b1 in process_event_stop_test /home/smarchi/src/binutils-gdb/gdb/infrun.c:6881 - #4 0x563f71454e07 in handle_signal_stop /home/smarchi/src/binutils-gdb/gdb/infrun.c:6769 - #5 0x563f7144b680 in handle_inferior_event /home/smarchi/src/binutils-gdb/gdb/infrun.c:6023 - #6 0x563f71436165 in fetch_inferior_event() /home/smarchi/src/binutils-gdb/gdb/infrun.c:4387 - #7 0x563f7136ff51 in inferior_event_handler(inferior_event_type) /home/smarchi/src/binutils-gdb/gdb/inf-loop.c:42 - #8 0x563f7168038d in handle_target_event /home/smarchi/src/binutils-gdb/gdb/linux-nat.c:4219 - #9 0x563f72fccb6d in handle_file_event /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:573 - #10 0x563f72fcd503 in gdb_wait_for_event /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:694 - #11 0x563f72fcaf2b in gdb_do_one_event(int) /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:217 - #12 0x563f7262b9bb in wait_sync_command_done() /home/smarchi/src/binutils-gdb/gdb/top.c:426 - #13 0x563f7137a7c3 in run_inferior_call /home/smarchi/src/binutils-gdb/gdb/infcall.c:650 - #14 0x563f71381295 in call_function_by_hand_dummy(value*, type*, gdb::array_view, void (*)(void*, int), void*) /home/smarchi/src/binutils-gdb/gdb/infcall.c:1332 - #15 0x563f7137c0e2 in call_function_by_hand(value*, type*, gdb::array_view) /home/smarchi/src/binutils-gdb/gdb/infcall.c:780 - #16 0x563f70fe5960 in evaluate_subexp_do_call(expression*, noside, value*, gdb::array_view, char const*, type*) /home/smarchi/src/binutils-gdb/gdb/eval.c:649 - #17 0x563f70fe6617 in expr::operation::evaluate_funcall(type*, expression*, noside, char const*, std::__debug::vector >, std::allocator > > > const&) /home/smarchi/src/binutils-gdb/gdb/eval.c:677 - #18 0x563f6fd19668 in expr::operation::evaluate_funcall(type*, expression*, noside, std::__debug::vector >, std::allocator > > > const&) /home/smarchi/src/binutils-gdb/gdb/expression.h:136 - #19 0x563f70fe6bba in expr::var_value_operation::evaluate_funcall(type*, expression*, noside, std::__debug::vector >, std::allocator > > > const&) /home/smarchi/src/binutils-gdb/gdb/eval.c:689 - #20 0x563f704b71dc in expr::funcall_operation::evaluate(type*, expression*, noside) /home/smarchi/src/binutils-gdb/gdb/expop.h:2219 - #21 0x563f70fe0f02 in expression::evaluate(type*, noside) /home/smarchi/src/binutils-gdb/gdb/eval.c:110 - #22 0x563f71b1373e in process_print_command_args /home/smarchi/src/binutils-gdb/gdb/printcmd.c:1319 - #23 0x563f71b1391b in print_command_1 /home/smarchi/src/binutils-gdb/gdb/printcmd.c:1332 - #24 0x563f71b147ec in print_command /home/smarchi/src/binutils-gdb/gdb/printcmd.c:1465 - #25 0x563f706029b8 in do_simple_func /home/smarchi/src/binutils-gdb/gdb/cli/cli-decode.c:95 - #26 0x563f7061972a in cmd_func(cmd_list_element*, char const*, int) /home/smarchi/src/binutils-gdb/gdb/cli/cli-decode.c:2735 - #27 0x563f7262d0ef in execute_command(char const*, int) /home/smarchi/src/binutils-gdb/gdb/top.c:572 - #28 0x563f7100ed9c in command_handler(char const*) /home/smarchi/src/binutils-gdb/gdb/event-top.c:543 - #29 0x563f7101014b in command_line_handler(std::unique_ptr >&&) /home/smarchi/src/binutils-gdb/gdb/event-top.c:779 - #30 0x563f72777942 in tui_command_line_handler /home/smarchi/src/binutils-gdb/gdb/tui/tui-interp.c:104 - #31 0x563f7100d059 in gdb_rl_callback_handler /home/smarchi/src/binutils-gdb/gdb/event-top.c:250 - #32 0x7f5a80418246 in rl_callback_read_char (/usr/lib/libreadline.so.8+0x3b246) (BuildId: 092e91fc4361b0ef94561e3ae03a75f69398acbb) - #33 0x563f7100ca06 in gdb_rl_callback_read_char_wrapper_noexcept /home/smarchi/src/binutils-gdb/gdb/event-top.c:192 - #34 0x563f7100cc5e in gdb_rl_callback_read_char_wrapper /home/smarchi/src/binutils-gdb/gdb/event-top.c:225 - #35 0x563f728c70db in stdin_event_handler /home/smarchi/src/binutils-gdb/gdb/ui.c:155 - #36 0x563f72fccb6d in handle_file_event /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:573 - #37 0x563f72fcd503 in gdb_wait_for_event /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:694 - #38 0x563f72fcb15c in gdb_do_one_event(int) /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:264 - #39 0x563f7177ec1c in start_event_loop /home/smarchi/src/binutils-gdb/gdb/main.c:412 - #40 0x563f7177f12e in captured_command_loop /home/smarchi/src/binutils-gdb/gdb/main.c:476 - #41 0x563f717846e4 in captured_main /home/smarchi/src/binutils-gdb/gdb/main.c:1320 - #42 0x563f71784821 in gdb_main(captured_main_args*) /home/smarchi/src/binutils-gdb/gdb/main.c:1339 - #43 0x563f6fcedfbd in main /home/smarchi/src/binutils-gdb/gdb/gdb.c:32 - #44 0x7f5a7e43984f (/usr/lib/libc.so.6+0x2384f) (BuildId: 2f005a79cd1a8e385972f5a102f16adba414d75e) - #45 0x7f5a7e439909 in __libc_start_main (/usr/lib/libc.so.6+0x23909) (BuildId: 2f005a79cd1a8e385972f5a102f16adba414d75e) - #46 0x563f6fcedd84 in _start (/home/smarchi/build/binutils-gdb/gdb/gdb+0xafb0d84) (BuildId: 50bd32e6e9d5e84543e9897b8faca34858ca3995) - - 0x611000034980 is located 0 bytes inside of 208-byte region [0x611000034980,0x611000034a50) - freed by thread T0 here: - #0 0x7f5a7fce312a in operator delete(void*, unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:164 - #1 0x563f702bd1fa in momentary_breakpoint::~momentary_breakpoint() /home/smarchi/src/binutils-gdb/gdb/breakpoint.c:304 - #2 0x563f702771c5 in delete_breakpoint(breakpoint*) /home/smarchi/src/binutils-gdb/gdb/breakpoint.c:12404 - #3 0x563f702150a7 in check_longjmp_breakpoint_for_call_dummy(thread_info*) /home/smarchi/src/binutils-gdb/gdb/breakpoint.c:7673 - #4 0x563f714567b1 in process_event_stop_test /home/smarchi/src/binutils-gdb/gdb/infrun.c:6881 - #5 0x563f71454e07 in handle_signal_stop /home/smarchi/src/binutils-gdb/gdb/infrun.c:6769 - #6 0x563f7144b680 in handle_inferior_event /home/smarchi/src/binutils-gdb/gdb/infrun.c:6023 - #7 0x563f71436165 in fetch_inferior_event() /home/smarchi/src/binutils-gdb/gdb/infrun.c:4387 - #8 0x563f7136ff51 in inferior_event_handler(inferior_event_type) /home/smarchi/src/binutils-gdb/gdb/inf-loop.c:42 - #9 0x563f7168038d in handle_target_event /home/smarchi/src/binutils-gdb/gdb/linux-nat.c:4219 - #10 0x563f72fccb6d in handle_file_event /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:573 - #11 0x563f72fcd503 in gdb_wait_for_event /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:694 - #12 0x563f72fcaf2b in gdb_do_one_event(int) /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:217 - #13 0x563f7262b9bb in wait_sync_command_done() /home/smarchi/src/binutils-gdb/gdb/top.c:426 - #14 0x563f7137a7c3 in run_inferior_call /home/smarchi/src/binutils-gdb/gdb/infcall.c:650 - #15 0x563f71381295 in call_function_by_hand_dummy(value*, type*, gdb::array_view, void (*)(void*, int), void*) /home/smarchi/src/binutils-gdb/gdb/infcall.c:1332 - #16 0x563f7137c0e2 in call_function_by_hand(value*, type*, gdb::array_view) /home/smarchi/src/binutils-gdb/gdb/infcall.c:780 - #17 0x563f70fe5960 in evaluate_subexp_do_call(expression*, noside, value*, gdb::array_view, char const*, type*) /home/smarchi/src/binutils-gdb/gdb/eval.c:649 - #18 0x563f70fe6617 in expr::operation::evaluate_funcall(type*, expression*, noside, char const*, std::__debug::vector >, std::allocator > > > const&) /home/smarchi/src/binutils-gdb/gdb/eval.c:677 - #19 0x563f6fd19668 in expr::operation::evaluate_funcall(type*, expression*, noside, std::__debug::vector >, std::allocator > > > const&) /home/smarchi/src/binutils-gdb/gdb/expression.h:136 - #20 0x563f70fe6bba in expr::var_value_operation::evaluate_funcall(type*, expression*, noside, std::__debug::vector >, std::allocator > > > const&) /home/smarchi/src/binutils-gdb/gdb/eval.c:689 - #21 0x563f704b71dc in expr::funcall_operation::evaluate(type*, expression*, noside) /home/smarchi/src/binutils-gdb/gdb/expop.h:2219 - #22 0x563f70fe0f02 in expression::evaluate(type*, noside) /home/smarchi/src/binutils-gdb/gdb/eval.c:110 - #23 0x563f71b1373e in process_print_command_args /home/smarchi/src/binutils-gdb/gdb/printcmd.c:1319 - #24 0x563f71b1391b in print_command_1 /home/smarchi/src/binutils-gdb/gdb/printcmd.c:1332 - #25 0x563f71b147ec in print_command /home/smarchi/src/binutils-gdb/gdb/printcmd.c:1465 - #26 0x563f706029b8 in do_simple_func /home/smarchi/src/binutils-gdb/gdb/cli/cli-decode.c:95 - #27 0x563f7061972a in cmd_func(cmd_list_element*, char const*, int) /home/smarchi/src/binutils-gdb/gdb/cli/cli-decode.c:2735 - #28 0x563f7262d0ef in execute_command(char const*, int) /home/smarchi/src/binutils-gdb/gdb/top.c:572 - #29 0x563f7100ed9c in command_handler(char const*) /home/smarchi/src/binutils-gdb/gdb/event-top.c:543 - - previously allocated by thread T0 here: - #0 0x7f5a7fce2012 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95 - #1 0x563f7029a9a3 in new_momentary_breakpoint /home/smarchi/src/binutils-gdb/gdb/breakpoint.c:8129 - #2 0x563f702212f6 in momentary_breakpoint_from_master /home/smarchi/src/binutils-gdb/gdb/breakpoint.c:8169 - #3 0x563f70212db1 in set_longjmp_breakpoint_for_call_dummy() /home/smarchi/src/binutils-gdb/gdb/breakpoint.c:7582 - #4 0x563f713804db in call_function_by_hand_dummy(value*, type*, gdb::array_view, void (*)(void*, int), void*) /home/smarchi/src/binutils-gdb/gdb/infcall.c:1260 - #5 0x563f7137c0e2 in call_function_by_hand(value*, type*, gdb::array_view) /home/smarchi/src/binutils-gdb/gdb/infcall.c:780 - #6 0x563f70fe5960 in evaluate_subexp_do_call(expression*, noside, value*, gdb::array_view, char const*, type*) /home/smarchi/src/binutils-gdb/gdb/eval.c:649 - #7 0x563f70fe6617 in expr::operation::evaluate_funcall(type*, expression*, noside, char const*, std::__debug::vector >, std::allocator > > > const&) /home/smarchi/src/binutils-gdb/gdb/eval.c:677 - #8 0x563f6fd19668 in expr::operation::evaluate_funcall(type*, expression*, noside, std::__debug::vector >, std::allocator > > > const&) /home/smarchi/src/binutils-gdb/gdb/expression.h:136 - #9 0x563f70fe6bba in expr::var_value_operation::evaluate_funcall(type*, expression*, noside, std::__debug::vector >, std::allocator > > > const&) /home/smarchi/src/binutils-gdb/gdb/eval.c:689 - #10 0x563f704b71dc in expr::funcall_operation::evaluate(type*, expression*, noside) /home/smarchi/src/binutils-gdb/gdb/expop.h:2219 - #11 0x563f70fe0f02 in expression::evaluate(type*, noside) /home/smarchi/src/binutils-gdb/gdb/eval.c:110 - #12 0x563f71b1373e in process_print_command_args /home/smarchi/src/binutils-gdb/gdb/printcmd.c:1319 - #13 0x563f71b1391b in print_command_1 /home/smarchi/src/binutils-gdb/gdb/printcmd.c:1332 - #14 0x563f71b147ec in print_command /home/smarchi/src/binutils-gdb/gdb/printcmd.c:1465 - #15 0x563f706029b8 in do_simple_func /home/smarchi/src/binutils-gdb/gdb/cli/cli-decode.c:95 - #16 0x563f7061972a in cmd_func(cmd_list_element*, char const*, int) /home/smarchi/src/binutils-gdb/gdb/cli/cli-decode.c:2735 - #17 0x563f7262d0ef in execute_command(char const*, int) /home/smarchi/src/binutils-gdb/gdb/top.c:572 - #18 0x563f7100ed9c in command_handler(char const*) /home/smarchi/src/binutils-gdb/gdb/event-top.c:543 - #19 0x563f7101014b in command_line_handler(std::unique_ptr >&&) /home/smarchi/src/binutils-gdb/gdb/event-top.c:779 - #20 0x563f72777942 in tui_command_line_handler /home/smarchi/src/binutils-gdb/gdb/tui/tui-interp.c:104 - #21 0x563f7100d059 in gdb_rl_callback_handler /home/smarchi/src/binutils-gdb/gdb/event-top.c:250 - #22 0x7f5a80418246 in rl_callback_read_char (/usr/lib/libreadline.so.8+0x3b246) (BuildId: 092e91fc4361b0ef94561e3ae03a75f69398acbb) - - Change-Id: Id00c17ab677f847fbf4efdf0f4038373668d3d88 - Approved-By: Tom Tromey - -2023-05-09 Enze Li - - Correct a spelling mistake in the binutils README file. - -2023-05-09 Alan Modra - - stack overflow in debug_write_type - Another fuzzer attack. This one was a "set" with elements using an - indirect type pointing back at the set. The existing recursion check - only prevented simple recursion. - - * debug.c (struct debug_type_s): Add mark. - (debug_write_type): Set mark and check before recursing into - indirect types. - -2023-05-09 Alan Modra - - alpha-vms reloc sanity check - Stops fuzzed files triggering reads past the end of the reloc buffer. - - * vms-alpha.c (alpha_vms_slurp_relocs): Sanity check reloc records. - -2023-05-09 Alan Modra - - regen ld/Makefile.in - -2023-05-09 GDB Administrator - - Automatic date update in version.in - -2023-05-08 John Baldwin - - gdbserver: Clear upper ZMM registers in the right location. - This was previously clearing the upper 32 bytes of ZMM0-15 rather than - ZMM16-31. - - Approved-By: Simon Marchi - -2023-05-08 John Baldwin - - x86-fbsd-nat: Add missing public label. - These two methods are both overrides of public methods in base - classes. - -2023-05-08 Felix Willgerodt - - gdb: Avoid warning for the jump command inside an inline function. - When stopped inside an inline function, trying to jump to a different line - of the same function currently results in a warning about jumping to another - function. Fix this by taking inline functions into account. - - Before: - Breakpoint 1, function_inline (x=510) at jump-inline.cpp:22 - 22 a = a + x; /* inline-funct */ - (gdb) j 21 - Line 21 is not in `function_inline(int)'. Jump anyway? (y or n) - - After: - Breakpoint 2, function_inline (x=510) at jump-inline.cpp:22 - 22 a = a + x; /* inline-funct */ - (gdb) j 21 - Continuing at 0x400679. - - Breakpoint 1, function_inline (x=510) at jump-inline.cpp:21 - 21 a += 1020 + a; /* increment-funct */ - - This was regression-tested on X86-64 Linux. - - Co-Authored-by: Cristian Sandu - Approved-By: Andrew Burgess - -2023-05-08 Alan Modra - - pe.em and pep.em make_import_fixup - This is a little cleanup that I made when looking at pr30343 that - makes it more obvious that make_import_fixup in both files are - identical (and in fact the new pep.em read_addend could be used in - both files). - - * emultempl/pep.em (read_addend): Extract from.. - (make_import_fixup): ..here. - * emultempl/pe.em (read_addend): Similarly. - (make_import_fixup): Similarly. Add debug code from pep.em. - -2023-05-08 Alan Modra - - PR30343, LTO ignores linker reference to _pei386_runtime_relocator - Make a reference to _pei386_runtime_relocator before LTO recompilation. - This is done regardless of whether such a reference will be used, - because it can't be known whether it is needed before LTO. - - I also found it necessary to enable long section names for the bfd - created in make_runtime_pseudo_reloc, because otherwise when writing - it out to the bfd-in-memory we get the section written as .rdata_r - which when read back in leads to a linker warning ".rdata_r: section - below image base" and likely runtime misbehaviour. - - PR 30343 - * emultempl/pe.em (make_runtime_ref): New function. - (gld${EMULATION_NAME}_before_plugin_all_symbols_read): New function. - (LDEMUL_BEFORE_PLUGIN_ALL_SYMBOLS_READ): Define. - * emultempl/pep.em: Similarly to pe.em. - * pe-dll.c (make_runtime_pseudo_reloc): Set long section names. - -2023-05-08 GDB Administrator - - Automatic date update in version.in - -2023-05-07 Tom Tromey - - Remove parameter from select_source_symtab - I noticed that select_source_symtab is only ever called with nullptr - as an argument, so this patch removes the parameter and associated - logic. - - Reviewed-By: Bruno Larsen - -2023-05-07 Tom Tromey - - Remove ALL_BREAKPOINTS_SAFE - There's just a single remaining use of the ALL_BREAKPOINTS_SAFE macro; - this patch replaces it with a for-each and an explicit temporary - variable. - - Remove ALL_DICT_SYMBOLS - This replaces ALL_DICT_SYMBOLS with an iterator so that for-each can - be used. - - Remove ALL_OBJFILE_OSECTIONS - This replaces ALL_OBJFILE_OSECTIONS with an iterator so that for-each - can be used. - - Rename objfile::sections - I think objfile::sections makes sense as the name of the method to - iterate over an objfile's sections, so this patch renames the existing - field to objfile::sections_start in preparation for that. - -2023-05-07 GDB Administrator - - Automatic date update in version.in - -2023-05-06 Tom Tromey - - Allow pretty-print of static members - Python pretty-printers haven't applied to static members for quite - some time. I tracked this down to the call to cp_print_value_fields - in cp_print_static_field -- it doesn't let pretty-printers have a - chance to print the value. This patch fixes the problem. - - The way that static members are handled is very weird to me. I tend - to think this should be done more globally, like in value_print. - However, I haven't made any big change. - - Reviewed-by: Keith Seitz - Tested-by: Keith Seitz - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30057 - -2023-05-06 YunQiang Su - - gas: documents .gnu_attribute Tag_GNU_MIPS_ABI_MSA - It is added since 2016 by - Add support for .MIPS.abiflags and .gnu.attributes sections - b52717c0e104eb603e8189c3c0d3658ef5d903f5 - But never documented. - -2023-05-06 GDB Administrator - - Automatic date update in version.in - -2023-05-05 Tom Tromey - - Filter out types from DAP scopes request - The DAP scopes request examines the symbols in a block tree, but - neglects to omit types. This patch fixes the problem. - -2023-05-05 Tom Tromey - - Use discrete_position in ada-valprint.c - I found a couple of spots in ada-valprint.c that use an explicit loop, - but where discrete_position could be used instead. - - Reviewed-by: Keith Seitz - -2023-05-05 Andrew Burgess - - gdb/python: add mechanism to manage Python initialization functions - Currently, when we add a new python sub-system to GDB, - e.g. py-inferior.c, we end up having to create a new function like - gdbpy_initialize_inferior, which then has to be called from the - function do_start_initialization in python.c. - - In some cases (py-micmd.c and py-tui.c), we have two functions - gdbpy_initialize_*, and gdbpy_finalize_*, with the second being called - from finalize_python which is also in python.c. - - This commit proposes a mechanism to manage these initialization and - finalization calls, this means that adding a new Python subsystem will - no longer require changes to python.c or python-internal.h, instead, - the initialization and finalization functions will be registered - directly from the sub-system file, e.g. py-inferior.c, or py-micmd.c. - - The initialization and finalization functions are managed through a - new class gdbpy_initialize_file in python-internal.h. This class - contains a single global vector of all the initialization and - finalization functions. - - In each Python sub-system we create a new gdbpy_initialize_file - object, the object constructor takes care of registering the two - callback functions. - - Now from python.c we can call static functions on the - gdbpy_initialize_file class which take care of walking the callback - list and invoking each callback in turn. - - To slightly simplify the Python sub-system files I added a new macro - GDBPY_INITIALIZE_FILE, which hides the need to create an object. We - can now just do this: - - GDBPY_INITIALIZE_FILE (gdbpy_initialize_registers); - - One possible problem with this change is that there is now no - guaranteed ordering of how the various sub-systems are initialized (or - finalized). To try and avoid dependencies creeping in I have added a - use of the environment variable GDB_REVERSE_INIT_FUNCTIONS, this is - the same environment variable used in the generated init.c file. - - Just like with init.c, when this environment variable is set we - reverse the list of Python initialization (and finalization) - functions. As there is already a test that starts GDB with the - environment variable set then this should offer some level of - protection against dependencies creeping in - though for full - protection I guess we'd need to run all gdb.python/*.exp tests with - the variable set. - - I have tested this patch with the environment variable set, and saw no - regressions, so I think we are fine right now. - - One other change of note was for gdbpy_initialize_gdb_readline, this - function previously returned void. In order to make this function - have the correct signature I've updated its return type to int, and we - now return 0 to indicate success. - - All of the other initialize (and finalize) functions have been made - static within their respective sub-system files. - - There should be no user visible changes after this commit. - -2023-05-05 Andrew Burgess - - gdb/testsuite: more newline pattern cleanup - After this commit: - - commit e2f620135d92f7cd670af4e524fffec7ac307666 - Date: Thu Mar 30 13:26:25 2023 +0100 - - gdb/testsuite: change newline patterns used in gdb_test - - It was pointed out in PR gdb/30403 that the same patterns can be found - in other lib/gdb.exp procs and that it would probably be a good idea - if these procs remained in sync with gdb_test. Actually, the bug - specifically calls out gdb_test_multiple when using with '-wrap', but - I found a couple of other locations in gdb_continue_to_breakpoint, - gdb_test_multiline, get_valueof, and get_local_valueof. - - In all these locations one or both of the following issues are - addressed: - - 1. A leading pattern of '[\r\n]*' is pointless. If there is a - newline it will be matched, but if there is not then the testsuite - doesn't care. Also, as expect is happy to skip non-matched output - at the start of a pattern, if there is a newline expect is happy to - skip over it before matching the rest. As such, this leading - pattern is removed. - - 2. Using '\[\r\n\]*$gdb_prompt' means that we will swallow - unexpected blank lines at the end of a command's output, but also, - if the pattern from the test script ends with a '\r', '\n', or '.' - then these will partially match the trailing newline, with the - remainder of the newline matched by the pattern from gdb.exp. This - split matching doesn't add any value, it's just something that has - appeared as a consequence of how gdb.exp was originally written. In - this case the '\[\r\n\]*' is replaced with '\r\n'. - - I've rerun the testsuite and fixed the regressions that I saw, these - were places where GDB emits a blank line at the end of the command - output, which we now need to explicitly match in the test script, this - was for: - - gdb.dwarf2/dw2-out-of-range-end-of-seq.exp - gdb.guile/guile.exp - gdb.python/python.exp - - Or a location where the test script was matching part of the newline - sequence, while gdb.exp was previously matching the remainder of the - newline sequence. Now we rely on gdb.exp to match the complete - newline sequence, this was for: - - gdb.base/commands.exp - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30403 - -2023-05-05 Tom de Vries - - [gdb/testsuite] Generate long string in gdb.base/page.exp - I noticed in gdb.base/page.exp: - ... - set fours [string repeat 4 40] - ... - but then shortly afterwards: - ... - [list 1\r\n 2\r\n 3\r\n 444444444444444444444444444444] - ... - - Summarize the long string in the same way using string repeat: - ... - [list 1\r\n 2\r\n 3\r\n [string repeat 4 30]] - ... - - Tested on x86_64-linux. - -2023-05-05 Andrew Burgess - - gdb/testsuite: tighten patterns in build-id-no-debug-warning.exp - Tighten the expected output pattern in the test script: - - gdb.debuginfod/build-id-no-debug-warning.exp - - While working on some other patch I broke GDB such that this warning: - - warning: "FILENAME": separate debug info file has no debug info - - (which is generated in build-id.c) didn't actually include the - FILENAME any more -- yet this test script continued to pass. It turns - out that this script doesn't actually check for FILENAME. - - This commit extends the test pattern to check for the full warning - string, including FILENAME, and also removes some uses of '.*' to make - the test stricter. - -2023-05-05 Tom Tromey - - Simplify decode_locdesc - While looking into another bug, I noticed that the DWARF cooked - indexer picks up an address for this symbol: - - <1><82>: Abbrev Number: 2 (DW_TAG_variable) - <83> DW_AT_specification: <0x9f> - <87> DW_AT_location : 10 byte block: e 0 0 0 0 0 0 0 0 e0 (DW_OP_const8u: 0 0; DW_OP_GNU_push_tls_address or DW_OP_HP_unknown) - <92> DW_AT_linkage_name: (indirect string, offset: 0x156): _ZN9container8tlsvar_0E - - This happens because decode_locdesc allows the use of - DW_OP_GNU_push_tls_address. - - This didn't make sense to me. I looked into it a bit more, and I - think decode_locdesc is used in three ways: - - 1. Find a constant address of a symbol that happens to be encoded as a - location expression. - - 2. Find the offset of a function in a virtual table. (This one should - probably be replaced by code to just evaluate the expression in - gnu-v3-abi.c -- but there's no point yet because no compiler - actually seems to emit correct DWARF here, see the bug linked in - the patch.) - - 3. Find the offset of a field, if the offset is a constant. - - None of these require TLS. - - This patch simplifies decode_locdesc by removing any opcodes that - don't fit into the above. It also changes the API a little, to make - it less difficult to use. - - Regression tested on x86-64 Fedora 36. - -2023-05-05 Tom Tromey - - Simplify auto_load_expand_dir_vars and remove substitute_path_component - This simplifies auto_load_expand_dir_vars to first split the string, - then do any needed substitutions. This was suggested by Simon, and is - much simpler than the current approach. - - Then this patch also removes substitute_path_component, as it is no - longer called. This is nice because it helps with the long term goal - of removing utils.h. - - Regression tested on x86-64 Fedora 36. - -2023-05-05 Tom de Vries - - [gdb/testsuite] Add gdb.base/wrap-line.exp - Add a test-case that tests prompt edit wrapping in CLI, both - for TERM=xterm and TERM=ansi, both with auto-detected and hard-coded width. - - In the TERM=ansi case with auto-detected width we run into PR cli/30346, so - add a KFAIL for that failure mode. - - Tested on x86_64-linux. - -2023-05-05 Tom de Vries - - [gdb/testsuite] Add gdb.tui/wrap-line.exp - Add a test-case that tests prompt edit wrapping behaviour in the tuiterm, both - for CLI and TUI, both with auto-detected and hard-coded width. - - In the CLI case with auto-detected width we run into PR cli/30411, so add a - KFAIL for that failure mode. - - Tested on x86_64-linux. - -2023-05-05 Nick Clifton - - Debug info is lost for functions only called from functions marked with cmse_nonsecure_entr - PR 30354 - * elf32-arm.c (elf32_arm_gc_mark_extra_sections): If any debug sections are marked then rerun the extra marking in order to pick up any dependencies. - -2023-05-05 GDB Administrator - - Automatic date update in version.in - -2023-05-04 Bruno Larsen - - Revert "gdb/testsuite: add KFAILs to gdb.reverse/step-reverse.exp" - This reverts commit 476410b3bca1389ee69e9c8fa18aaee16793a56d. - - One of Simon's recent commits (2a740b3ba4c9f39c86dd75e0914ee00942cab471) - changed the way recording a remote target works and fixed the underlying - issue of the bug, so the KFails can be removed from the test. - - Approved-By: Tom Tromey - -2023-05-04 Gareth Rees - - Don't treat references to compound values as "simple". - SUMMARY - - The '--simple-values' argument to '-stack-list-arguments' and similar - GDB/MI commands does not take reference types into account, so that - references to arbitrarily large structures are considered "simple" and - printed. This means that the '--simple-values' argument cannot be used - by IDEs when tracing the stack due to the time taken to print large - structures passed by reference. - - DETAILS - - Various GDB/MI commands ('-stack-list-arguments', '-stack-list-locals', - '-stack-list-variables' and so on) take a PRINT-VALUES argument which - may be '--no-values' (0), '--all-values' (1) or '--simple-values' (2). - In the '--simple-values' case, the command is supposed to print the - name, type, and value of variables with simple types, and print only the - name and type of variables with compound types. - - The '--simple-values' argument ought to be suitable for IDEs that need - to update their user interface with the program's call stack every time - the program stops. However, it does not take C++ reference types into - account, and this makes the argument unsuitable for this purpose. - - For example, consider the following C++ program: - - struct s { - int v[10]; - }; - - int - sum(const struct s &s) - { - int total = 0; - for (int i = 0; i < 10; ++i) total += s.v[i]; - return total; - } - - int - main(void) - { - struct s s = { { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } }; - return sum(s); - } - - If we start GDB in MI mode and continue to 'sum', the behaviour of - '-stack-list-arguments' is as follows: - - (gdb) - -stack-list-arguments --simple-values - ^done,stack-args=[frame={level="0",args=[{name="s",type="const s &",value="@0x7fffffffe310: {v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}}"}]},frame={level="1",args=[]}] - - Note that the value of the argument 's' was printed, even though 's' is - a reference to a structure, which is not a simple value. - - See https://github.com/microsoft/MIEngine/pull/673 for a case where this - behaviour caused Microsoft to avoid the use of '--simple-values' in - their MIEngine debug adapter, because it caused Visual Studio Code to - take too long to refresh the call stack in the user interface. - - SOLUTIONS - - There are two ways we could fix this problem, depending on whether we - consider the current behaviour to be a bug. - - 1. If the current behaviour is a bug, then we can update the behaviour - of '--simple-values' so that it takes reference types into account: - that is, a value is simple if it is neither an array, struct, or - union, nor a reference to an array, struct or union. - - In this case we must add a feature to the '-list-features' command so - that IDEs can detect that it is safe to use the '--simple-values' - argument when refreshing the call stack. - - 2. If the current behaviour is not a bug, then we can add a new option - for the PRINT-VALUES argument, for example, '--scalar-values' (3), - that would be suitable for use by IDEs. - - In this case we must add a feature to the '-list-features' command - so that IDEs can detect that the '--scalar-values' argument is - available for use when refreshing the call stack. - - PATCH - - This patch implements solution (1) as I think the current behaviour of - not printing structures, but printing references to structures, is - contrary to reasonable expectation. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29554 - -2023-05-04 Nick Clifton - - Stop the linker from loosing the entry point for COFF/PE code when compiling with LTO enabled. - PR 30300 - * emultempl/pep.em (set_entry_point): Add an undefined reference to the entry point if it has been constructed heuristically. - * emultempl/pe.em (set_entry_point): Likewise. - -2023-05-04 Dimitar Dimitrov - - ld: pru: Place exception-handling sections correctly - * scripttempl/pru.sc (OUTPUT_SECTION_ALIGN): New helper variable to place at end of DMEM output sections. - (.data): Use the helper variable. - (.eh_frame): New output section. - (.gnu_extab): Ditto. - (.gcc_except_table): Ditto. - (.resource_table): Use the helper variable. - -2023-05-04 Jan Beulich - - RISC-V: tighten post-relocation-operator separator expectation - As per the spec merely a blank isn't okay as a separator, the operand - to the relocation function ought to be parenthesized. Enforcing this - then also eliminates an inconsistency in that - - lui t0, %hi sym - lui t0, %hi 0x1000 - - were accepted, but - - lui t0, %hi +sym - lui t0, %hi -0x1000 - - were not. - -2023-05-04 Ilya Leoshkevich - - gas: fix building tc-bpf.c on s390x - char is unsigned on s390x, so there are a lot of warnings like: - - gas/config/tc-bpf.c: In function 'get_token': - gas/config/tc-bpf.c:900:14: error: comparison is always false due to limited range of data type [-Werror=type-limits] - 900 | if (ch == EOF || len > MAX_TOKEN_SZ) - | ^~ - - Change its type to int, like in the other similar code. - - There is also: - - gas/config/tc-bpf.c:735:30: error: 'bpf_endianness' may be used uninitialized in this function [-Werror=maybe-uninitialized] - 735 | dst, be ? size[endianness - BPF_BE16] : size[endianness - BPF_LE16]); - | ~~~~~~~~~~~^~~~~~~~~~ - - -Wmaybe-uninitialized doesn't seem to understand the FSM; just - initialize bpf_endianness to silence it. Add an assertion to - build_bpf_endianness() in order to catch potential bugs. - -2023-05-04 YunQiang Su - - MIPS: revert "default r6 if vendor is img" - In commit: 9171de358f230b64646bbb525a74e5f8e3dbe0dc, - The default output is set to r6 if the vendor is img, - It is ugly and should not be in upstream. - - Let's revert it. - -2023-05-04 GDB Administrator - - Automatic date update in version.in - -2023-05-03 Tom de Vries - - [gdb/build] Fix frame_list position in frame.c - In commit 995a34b1772 ("Guard against frame.c destructors running before - frame-info.c's") the following problem was addressed. - - The frame_info_ptr destructor: - ... - ~frame_info_ptr () - { - frame_list.erase (frame_list.iterator_to (*this)); - } - ... - uses frame_list, which is a static member of class frame_info_ptr, - instantiated in frame-info.c: - ... - intrusive_list frame_info_ptr::frame_list; - ... - - Then there's a static frame_info_pointer variable named selected_frame in - frame.c: - ... - static frame_info_ptr selected_frame; - ... - - Because the destructor of selected_frame uses frame_list, its destructor needs - to be called before the destructor of frame_list. - - But because they're in different compilation units, the initialization order and - consequently destruction order is not guarantueed. - - The commit fixed this by handling the case that the destructor of frame_list - is called first, adding a check on is_linked (): - ... - ~frame_info_ptr () - { - - frame_list.erase (frame_list.iterator_to (*this)); - + /* If this node has static storage, it may be deleted after - + frame_list. Attempting to erase ourselves would then trigger - + internal errors, so make sure we are still linked first. */ - + if (is_linked ()) - + frame_list.erase (frame_list.iterator_to (*this)); - } - ... - - However, since then frame_list has been moved into frame.c, and - initialization/destruction order is guarantueed inside a compilation unit. - - Revert aforementioned commit, and fix the destruction order problem by moving - frame_list before selected_frame. - - Reverting the commit is another way of fixing the already fixed - Wdangling-pointer warning reported in PR build/30413, in a different way than - commit 9b0ccb1ebae ("Pass const frame_info_ptr reference for - skip_[language_]trampoline"). - - Approved-By: Simon Marchi - Tested on x86_64-linux. - PR build/30413 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30413 - -2023-05-03 Lancelot SIX - - gdb/show_args_command: print to the ui_file argument - The show_args_command uses gdb_printf without specifying the ui_file. - This means that it prints to gdb_stdout instead of the stream given as - an argument to the function. - - This commit fixes this. - - Reviewed-By: Tom Tromey - -2023-05-03 Oleg Tolmatcev - - Make ar faster - * archive.c (_bfd_write_archive_contents): Use a larger buffer in order to improve efficiency. - -2023-05-03 Mark Wielaard - - Pass const frame_info_ptr reference for skip_[language_]trampoline - g++ 13.1.1 produces a -Werror=dangling-pointer= - - In file included from ../../binutils-gdb/gdb/frame.h:75, - from ../../binutils-gdb/gdb/symtab.h:40, - from ../../binutils-gdb/gdb/language.c:33: - In member function ‘void intrusive_list::push_empty(T&) [with T = frame_info_ptr; AsNode = intrusive_base_node]’, - inlined from ‘void intrusive_list::push_back(reference) [with T = frame_info_ptr; AsNode = intrusive_base_node]’ at gdbsupport/intrusive_list.h:332:24, - inlined from ‘frame_info_ptr::frame_info_ptr(const frame_info_ptr&)’ at gdb/frame.h:241:26, - inlined from ‘CORE_ADDR skip_language_trampoline(frame_info_ptr, CORE_ADDR)’ at gdb/language.c:530:49: - gdbsupport/intrusive_list.h:415:12: error: storing the address of local variable ‘’ in ‘frame_info_ptr::frame_list.intrusive_list::m_back’ [-Werror=dangling-pointer=] - 415 | m_back = &elem; - | ~~~~~~~^~~~~~~ - gdb/language.c: In function ‘CORE_ADDR skip_language_trampoline(frame_info_ptr, CORE_ADDR)’: - gdb/language.c:530:49: note: ‘’ declared here - 530 | CORE_ADDR real_pc = lang->skip_trampoline (frame, pc); - | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~ - gdb/frame.h:359:41: note: ‘frame_info_ptr::frame_list’ declared here - 359 | static intrusive_list frame_list; - | ^~~~~~~~~~ - - Each new frame_info_ptr is being pushed on a static frame list and g++ - cannot see why that is safe in case the frame_info_ptr is created and - destroyed immediately when passed as value. - - It isn't clear why only in this one place g++ sees the issue (probably - because it can inline enough code in this specific case). - - Since passing the frame_info_ptr as const reference is cheaper, use - that as workaround for this warning. - - PR build/30413 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30413 - - Tested-by: Kevin Buettner - Reviewed-by: Kevin Buettner - Reviewed-by: Tom Tromey - -2023-05-03 Oleg Tolmatcev - - Improve the speed of computing checksums for COFF binaries. - * coffcode.h (coff_read_word_from_buffer): New function. - * coffcode.h (COFF_CHECKSUM_BUFFER_SIZE): New constant. - * coffcode.h (coff_compute_checksum): Improve speed by reducing the number of seeks and reads used. - -2023-05-03 Alan Modra - - Remove unused args from bfd_make_debug_symbol - The ptr and size args are unused. Make the function look the same as - bfd_make_empty_symbol. - - Generated docs and include files - bfd/doc/chew.c extracts documentation from source code comments - annotated with keywords, and generates much of bfd.h and libbfd.h from - those same comments. The docs have suffered from people (me too) - adding things like CODE_FRAGMENT to the source to put code into bfd.h - without realising that CODE_FRAGMENT also puts @example around said - code into the docs. So we have random senseless things in the docs. - This patch fixes that problem (well, the senseless things from - CODE_FRAGMENT), moves most of the code out of bfd-in.h, and improves a - few chew.c features. libbfd.h now automatically gets ATTRIBUTE_HIDDEN - prototypes, and indentation in bfd.h and libbfd.h is better. - -2023-05-03 Alan Modra - - Move bfd_alloc, bfd_zalloc and bfd_release to libbfd.c - These functions don't belong in opncls.c. - - * libbfd-in.h (bfd_release): Delete prototype. - * opncls.c (bfd_alloc, bfd_zalloc, bfd_release): Move to.. - * libbfd.c: ..here. Include objalloc.c and provide bfd_release - with a FUNCTION comment. - * bfd-in2.h: Regenerate. - * libbfd.h: Regenerate. - -2023-05-03 Alan Modra - - Move bfd_elf_bfd_from_remote_memory to opncls.c - bfd_elf_bfd_from_remote_memory is just a wrapper, and the function - could be implemented for other formats. Move it to opncls.c because - it acts a little like some of the other bfd_open* routines. Also give - it the usual FUNCTION etc. comment so prototypes and docs are handled - automatically. - - * elf.c (bfd_elf_bfd_from_remote_memory): Move to.. - * opncls.c: ..here, add FUNCTION comment. - * bfd-in.h (bfd_elf_bfd_from_remote_memory): Delete prototype. - * bfd-in2.h: Regenerate. - -2023-05-03 Alan Modra - - hash.c: replace some unsigned long with unsigned int - * hash.c (higher_prime_number): Use uint32_t param, return value, - tables and variables. - (bfd_default_hash_table_size): Make it an unsigned int. - (bfd_hash_set_default_size): Use unsigned int param and return. - * bfd-in.h (bfd_hash_set_default_size): Update prototype. - * bfd-in2.h: Regenerate. - - libbfc.c: Use stdint types for unsigned char and unsigned long - * libbfd.c (bfd_put_8): Use bfd_byte rather than unsigned char. - (bfd_get_8, bfd_get_signed_8): Likewise. - (_bfd_read_unsigned_leb128, _bfd_safe_read_leb128): Likewise. - (_bfd_read_signed_leb128): Likewise. - (bfd_getb24, bfd_getl24): Replace unsigned long with uint32_t. - (bfd_getb32, bfd_getl32): Likewise. - (bfd_getb_signed_32, bfd_getl_signed_32): Likewise. - -2023-05-03 Alan Modra - - Change signature of bfd crc functions - The crc calculated is 32 bits. Replace uses of unsigned long with - uint32_t. Also use bfd_byte* for buffers. - - bfd/ - * opncls.c (bfd_calc_gnu_debuglink_crc32): Use stdint types. - (bfd_get_debug_link_info_1, bfd_get_debug_link_info): Likewise. - (separate_debug_file_exists, bfd_follow_gnu_debuglink): Likewise. - (bfd_fill_in_gnu_debuglink_section): Likewise. - * bfd-in2.h: Regenerate. - gdb/ - * auto-load.c (auto_load_objfile_script): Update type of - bfd_get_debug_link_info argument. - * symfile.c (find_separate_debug_file_by_debuglink): Likewise. - * gdb_bfd.c (get_file_crc): Update type of - bfd_calc_gnu_debuglink_crc32 argument. - -2023-05-03 Alan Modra - - _bfd_mips_elf_lo16_reloc vallo comment - This explains exactly why the high reloc adjustment is as it is, - replacing the rather nebulous existing comment. I've also changed the - expression from (lo+0x8000)&0xffff to (lo&0xffff)^0x8000 which better - matches part of the standard 16-bit sign extension (resulting in - exactly the same value), and hoisted the calculation out of the loop. - - * elfxx-mips.c (_bfd_mips_elf_lo16_reloc): Expand vallo - comment. Hoist calculation out of loop. - -2023-05-02 Alexandra Hájková - - gdb.base/watchpoint-unaligned.exp: Always initialize wpoffset_to_wpnum - Initialize wpoffset_to_wpnumto avoid TCL error which happens in some aarch64 types. - - ERROR: in testcase /root/build/gdb/testsuite/../../../binutils-gdb/gdb/testsuite/gdb.base/watchpoint-unaligned.exp - ERROR: can't read "wpoffset_to_wpnum(1)": no such element in array - ERROR: tcl error code TCL READ VARNAME - ERROR: tcl error info: - can't read "wpoffset_to_wpnum(1)": no such element in array - while executing - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30340 - - Reviewed-by: Luis Machado - Reviewed-By: Andrew Burgess - -2023-05-02 Mark Wielaard - - xcoffread.c: Fix -Werror=dangling-pointer= issue with main_subfile. - GCC 13 points out that main_subfile has local function scope, but a - pointer to it is assigned to the global inclTable array subfile - element field: - - In function ‘void process_linenos(CORE_ADDR, CORE_ADDR)’, - inlined from ‘void aix_process_linenos(objfile*)’ at xcoffread.c:727:19, - inlined from ‘void aix_process_linenos(objfile*)’ at xcoffread.c:720:1: - xcoffread.c:629:37: error: storing the address of local variable ‘main_subfile’ in ‘*inclTable.19_45 + _28._inclTable::subfile’ [-Werror=dangling-pointer=] - 629 | inclTable[ii].subfile = &main_subfile; - | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~ - xcoffread.c: In function ‘void aix_process_linenos(objfile*)’: - xcoffread.c:579:18: note: ‘main_subfile’ declared here - 579 | struct subfile main_subfile; - | ^~~~~~~~~~~~ - xcoffread.c:496:19: note: ‘inclTable’ declared here - 496 | static InclTable *inclTable; /* global include table */ - | ^~~~~~~~~ - - Fix this by making main_subfile file static. And allocate and - deallocated together with inclTable in allocate_include_entry and - xcoff_symfile_finish. Adjust the use of main_subfile in - process_linenos to take a pointer to the subfile. - -2023-05-02 Tom de Vries - - [gdb/testsuite] Use set in lmap in gdb.dwarf2/dw2-abs-hi-pc.exp - In gdb.dwarf2/dw2-abs-hi-pc.exp we do: - ... - set sources [lmap i $sources { expr { "$srcdir/$subdir/$i" } }] - ... - - The use of expr is not idiomatic. Fix this by using set instead: - ... - set sources [lmap i $sources { set tmp $srcdir/$subdir/$i }] - ... - - Reported-By: Tom Tromey - Reviewed-By: Andreas Schwab - -2023-05-02 Aditya Kamath - - Fix Assertion pid != 0 failure in AIX. - In AIX if there is a main and a thread created from it , then once the - program completed execution and goes to pd_disable () inferior_ptid - had pid 0 leading to an assertion failure while finding the thread's data - in aix-thread.c file. - - This patch is a fix for the same. - -2023-05-02 Tom Tromey - - Remove error_stream - error_stream is trivial and only used in a couple of spots in - breakpoint.c. This patch removes it in favor of just writing it out - at the spots where it was used. - -2023-05-02 Nick Clifton - - Remove Dimity Diky as MSP430 maintainer. - -2023-05-02 Andrew Burgess - - gdb/testsuite: compile gdb.linespec/cp-completion-aliases.exp as C++ - Noticed in passing that the prepare_for_testing call in - gdb.linespec/cp-completion-aliases.exp does not pass the 'c++' flag, - despite this being a C++ test. - - I guess, as the source file has the '.cc' extension, all the compilers - are doing the right thing anyway -- the source file uses templates, so - is definitely being compiled as C++. - - I noticed this when I tried to set CXX_FOR_TARGET (but not - CC_FOR_TARGET) and spotted that this script was still using the C - compiler. - - Fixed in this commit by adding the 'c++' flag for prepare_for_testing. - -2023-05-02 GDB Administrator - - Automatic date update in version.in - -2023-05-01 Tom Tromey - - Document DAP 'launch' parameter - The Debugger Adapter Protocol defines a "launch" request but leaves - the parameters up to the implementation: - - Since launching is debugger/runtime specific, the arguments for - this request are not part of this specification. - - This patch adds some documentation for the parameter GDB currently - defines. Note that I plan to add more parameters here, and perhaps - there will be other extensions in time as well. - - Reviewed-By: Eli Zaretskii - -2023-05-01 Simon Marchi - - gdb: remove ui_interp_info - I don't think that having struct ui_interp_info separated from struct ui - is very useful. As of today, it looks like an unnecessary indirection - layer. Move the contents of ui_interp_info directly into struct ui, and - update all users. - - Change-Id: I817ba6e047dbcc4ba15b666af184b40bfed7e521 - -2023-05-01 Simon Marchi - - gdb: store interps in an intrusive_list - Use intrusive_list, instead of hand-made linked list. - - Change-Id: Idc857b40dfa3e3c35671045898331cca2c928097 - -2023-05-01 Simon Marchi - - gdb: move struct ui and related things to ui.{c,h} - I'd like to move some things so they become methods on struct ui. But - first, I think that struct ui and the related things are big enough to - deserve their own file, instead of being scattered through top.{c,h} and - event-top.c. - - Change-Id: I15594269ace61fd76ef80a7b58f51ff3ab6979bc - -2023-05-01 Tom Tromey - - Turn set_inferior_args_vector into method of inferior - This patch turns set_inferior_args_vector into an overload of - inferior::set_args. - - Regression tested on x86-64 Fedora 36. - -2023-05-01 Tom Tromey - - Remove evaluate_type - Like evaluate_expression, evaluate_type is also just a simple wrapper. - Removing it makes the code a little nicer. - - Remove evaluate_expression - evaluate_expression is just a little wrapper for a method on - expression. Removing it also removes a lot of ugly (IMO) calls to - get(). - - Remove op_name - op_name is only needed in a single place, so remove it and inline it - there. - -2023-05-01 Tom Tromey - - Fix crash in Rust expression parser - A user found that an array expression with just a single value (like - "[23]") caused the Rust expression parser to crash. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30410 - -2023-05-01 Tom Tromey - - Replace field_is_static with a method - This changes field_is_static to be a method on struct field, and - updates all the callers. Most of this patch was written by script. - - Regression tested on x86-64 Fedora 36. - -2023-05-01 GDB Administrator - - Automatic date update in version.in - -2023-04-30 Tom de Vries - - [gdb/tui] Fix TUI resizing for TERM=ansi - With TERM=ansi, when resizing a TUI window from LINES/COLUMNS 31/118 - (maximized) to 20/78 (de-maximized), I get a garbled screen (that ^L doesn't - fix) and a message: - ... - @@ resize done 0, size = 77x20 - ... - with the resulting width being 77 instead of the expected 78. - - [ The discrepancy also manifests in CLI, filed as PR30346. ] - - The discrepancy comes from tui_resize_all, where we ask readline for the - screen size: - ... - rl_get_screen_size (&screenheight, &screenwidth); - ... - - As it happens, when TERM is set to ansi, readline decides that the terminal - cannot auto-wrap lines, and reserves one column to deal with that, and as a - result reports back one less than the actual screen width: - ... - $ echo $COLUMNS - 78 - $ TERM=xterm gdb -ex "show width" -ex q - Number of characters gdb thinks are in a line is 78. - $ TERM=ansi gdb -ex "show width" -ex q - Number of characters gdb thinks are in a line is 77. - ... - - In tui_resize_all, we need the actual screen width, and using a screenwidth of - one less than the actual value garbles the screen. - - This is currently not causing trouble in testing because we have a workaround - in place in proc Term::resize. If we disable the workaround: - ... - - stty columns [expr {$_cols + 1}] < $::gdb_tty_name - + stty columns $_cols < $::gdb_tty_name - ... - and dump the screen we get the same type of screen garbling: - ... - 0 +---------------------------------------+| - 1 || - 2 || - 3 || - ... - - Another way to reproduce the problem is using command "maint info screen". - After starting gdb with TERM=ansi, entering TUI, and issuing the command, we - get: - ... - Number of characters curses thinks are in a line is 78. - ... - and after maximizing and demaximizing the window we get: - ... - Number of characters curses thinks are in a line is 77. - ... - If we use TERM=xterm, we do get the expected 78. - - Fix this by: - - detecting when readline will report back less than the actual screen width, - - accordingly setting a new variable readline_hidden_cols, - - using readline_hidden_cols in tui_resize_all to fix the resize problem, and - - removing the workaround in Term::resize. - - The test-case gdb.tui/empty.exp serves as regression test. - - I've applied the same fix in tui_async_resize_screen, the new test-case - gdb.tui/resize-2.exp serves as a regression test for that change. Without - that fix, we have: - ... - FAIL: gdb.tui/resize-2.exp: again: gdb width 80 - ... - - Tested on x86_64-linux. - - PR tui/30337 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30337 - -2023-04-30 GDB Administrator - - Automatic date update in version.in - -2023-04-29 Tom de Vries - - [gdb/testsuite] Fix gdb.base/readline.exp with stub-termcap - When doing a build which uses stub-termcap, we run into: - ... - (gdb) set width 7 - - - gdb: Fix building with latest libc++ - Latest libc++[1] causes transitive include to when - or header is included. This causes - gdb to not build[2] since defines isupper/islower etc. - functions that are explicitly macroed-out in safe-ctype.h to - prevent their use. - Use the suggestion from libc++ to include internally when - building in C++ mode to avoid build errors. - Use safe-gdb-ctype.h as the include instead of "safe-ctype.h" - to keep this isolated to gdb since rest of binutils - does not seem to use much C++. - - [1]: https://reviews.llvm.org/D144331 - [2]: https://issuetracker.google.com/issues/277967395 - -2023-04-29 Tom de Vries - - [gdb/testsuite] Fix gdb.ada/excep_handle.exp for updated gdb_test - Test-case gdb.ada/excep_handle.exp fails since commit e2f620135d9 - ("gdb/testsuite: change newline patterns used in gdb_test"): - ... - (gdb) continue^M - Continuing.^M - ^M - Catchpoint 2, exception at 0x00000000004020b6 in foo () at foo.adb:26^M - 26 when Constraint_Error =>^M - (gdb) FAIL: gdb.ada/excep_handle.exp: continuing to first Constraint_Error \ - exception handlers - ... - - The output is supposed to be matched by: - ... - gdb_test "continue" \ - "Continuing\.$eol$catchpoint_constraint_error_msg$eol.*" \ - "continuing to first Constraint_Error exception handlers" - ... - but the $eol bit no longer matches due to the stricter matching introduced - in aforementioned commit. - - Fix this by dropping the "$eol.*" bit. - - Tested on x86_64-linux. - - PR testsuite/30399 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30399 - -2023-04-29 Tom de Vries - - [gdb/build] Fix build without ncurses in maintenance_info_screen - With a build without ncurses we run into: - ... - src/gdb/utils.c: In function ‘void maintenance_info_screen(const char*, int)’: - src/gdb/utils.c:1310:7: error: ‘COLS’ was not declared in this scope - COLS); - ^~~~ - src/gdb/utils.c:1331:8: error: ‘LINES’ was not declared in this scope - LINES); - ^~~~~ - ... - - Fix this by using HAVE_LIBCURSES. - - Tested on x86_64-linux. - - PR build/30391 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30391 - -2023-04-29 Tom de Vries - - [gdb/testsuite] Fix gdb.tui/main.exp without TUI - With a build with --disable-tui, we get: - ... - (gdb) PASS: gdb.tui/main.exp: set interactive-mode off - maint set tui-left-margin-verbose on^M - Undefined maintenance set command: "tui-left-margin-verbose on". \ - Try "help maintenance set".^M - (gdb) FAIL: gdb.tui/main.exp: maint set tui-left-margin-verbose on - ... - - Fix this by adding the missing "require allow_tui_tests". - - Tested on x86_64-linux. - -2023-04-29 GDB Administrator - - Automatic date update in version.in - -2023-04-29 Andrew Burgess - - gdb/mi: check thread exists when creating thread-specific b/p - I noticed the following behaviour: - - $ gdb -q -i=mi /tmp/hello.x - =thread-group-added,id="i1" - =cmd-param-changed,param="print pretty",value="on" - ~"Reading symbols from /tmp/hello.x...\n" - (gdb) - -break-insert -p 99 main - ^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x0000000000401198",func="main",file="/tmp/hello.c",fullname="/tmp/hello.c",line="18",thread-groups=["i1"],thread="99",times="0",original-location="main"} - (gdb) - info breakpoints - &"info breakpoints\n" - ~"Num Type Disp Enb Address What\n" - ~"1 breakpoint keep y 0x0000000000401198 in main at /tmp/hello.c:18\n" - &"../../src/gdb/thread.c:1434: internal-error: print_thread_id: Assertion `thr != nullptr' failed.\nA problem internal to GDB has been detected,\nfurther debugging may prove unreliable." - &"\n" - &"----- Backtrace -----\n" - &"Backtrace unavailable\n" - &"---------------------\n" - &"\nThis is a bug, please report it." - &" For instructions, see:\n" - &".\n\n" - Aborted (core dumped) - - What we see here is that when using the MI a user can create - thread-specific breakpoints for non-existent threads. Then if we try - to use the CLI 'info breakpoints' command GDB throws an assertion. - The assert is a result of the print_thread_id call when trying to - build the 'stop only in thread xx.yy' line; print_thread_id requires a - valid thread_info pointer, which we can't have for a non-existent - thread. - - In contrast, when using the CLI we see this behaviour: - - $ gdb -q /tmp/hello.x - Reading symbols from /tmp/hello.x... - (gdb) break main thread 99 - Unknown thread 99. - (gdb) - - The CLI doesn't allow a breakpoint to be created for a non-existent - thread. So the 'info breakpoints' command is always fine. - - Interestingly, the MI -break-info command doesn't crash, this is - because the MI uses global thread-ids, and so never calls - print_thread_id. However, GDB does support using CLI and MI in - parallel, so we need to solve this problem. - - One option would be to change the CLI behaviour to allow printing - breakpoints for non-existent threads. This would preserve the current - MI behaviour. - - The other option is to pull the MI into line with the CLI and prevent - breakpoints being created for non-existent threads. This is good for - consistency, but is a breaking change for the MI. - - In the end I figured that it was probably better to retain the - consistent CLI behaviour, and just made the MI reject requests to - place a breakpoint on a non-existent thread. The only test we had - that depended on the old behaviour was - gdb.mi/mi-thread-specific-bp.exp, which was added by me in commit: - - commit 2fd9a436c8d24eb0af85ccb3a2fbdf9a9c679a6c - Date: Fri Feb 17 10:48:06 2023 +0000 - - gdb: don't duplicate 'thread' field in MI breakpoint output - - I certainly didn't intend for this test to rely on this feature of the - MI, so I propose to update this test to only create breakpoints for - threads that exist. - - Actually, I've added a new test that checks the MI rejects creating a - breakpoint for a non-existent thread, and I've also extended the test - to run with the separate MI/CLI UIs, and then tested 'info - breakpoints' to ensure this command doesn't crash. - - I've extended the documentation of the `-p` flag to explain the - constraints better. - - I have also added a NEWS entry just in case someone runs into this - issue, at least then they'll know this change in behaviour was - intentional. - - One thing that I did wonder about while writing this patch, is whether - we should treat requests like this, on both the MI and CLI, as another - form of pending breakpoint, something like: - - (gdb) break foo thread 9 - Thread 9 does not exist. - Make breakpoint pending on future thread creation? (y or [n]) y - Breakpoint 1 (foo thread 9) pending. - (gdb) info breakpoints - Num Type Disp Enb Address What - 1 breakpoint keep y foo thread 9 - - Don't know if folk think that would be a useful idea or not? Either - way, I think that would be a separate patch from this one. - - Reviewed-By: Eli Zaretskii - -2023-04-28 Andrew Burgess - - gdb: make deprecated_show_value_hack static - The deprecated_show_value_hack function is now only used inside - cli-setshow.c, so lets make the function static to discourage its use - anywhere else. - - There should be no user visible changes after this commit - - Reviewed-By: Tom Tromey - -2023-04-28 Andrew Burgess - - gdb: make set/show inferior-tty work with $_gdb_setting_str - Like the previous two commits, this commit fixes set/show inferior-tty - to work with $_gdb_setting_str. - - Instead of using a scratch variable which is then pushed into the - current inferior from a set callback, move to the API that allows for - getters and setters, and store the value directly within the current - inferior. - - Update an existing test to check the inferior-tty setting. - - Reviewed-By: Tom Tromey - -2023-04-28 Andrew Burgess - - gdb: make set/show cwd work with $_gdb_setting_str - The previous commit fixed set/show args when used with - $_gdb_setting_str, this commit fixes set/show cwd. - - Instead of using a scratch variable which is then pushed into the - current inferior from a set callback, move to the API that allows for - getters and setters, and store the value directly within the current - inferior. - - Update the existing test to check the cwd setting. - -2023-04-28 Andrew Burgess - - gdb: make set/show args work with $_gdb_setting_str - I noticed that $_gdb_setting_str was not working with 'args', e.g.: - - $ gdb -q --args /tmp/hello.x arg1 arg2 arg3 - Reading symbols from /tmp/hello.x... - (gdb) show args - Argument list to give program being debugged when it is started is "arg1 arg2 arg3". - (gdb) print $_gdb_setting_str("args") - $1 = "" - - This is because the 'args' setting is implemented using a scratch - variable ('inferior_args_scratch') which is updated when the user does - 'set args ...'. There is then a function 'set_args_command' which is - responsible for copying the scratch area into the current inferior. - - However, when the user sets the arguments via the command line the - scratch variable is not updated, instead the arguments are pushed - straight into the current inferior. - - There is a second problem, when the current inferior changes the - scratch area is not updated, which means that the value returned will - only ever reflect the last call to 'set args ...' regardless of which - inferior is currently selected. - - Luckily, the fix is pretty easy, set/show variables have an - alternative API which requires we provide some getter and setter - functions. With this done the scratch variable can be removed and the - value returned will now always reflect the current inferior. - - While working on set/show args I also rewrote show_args_command to - remove the use of deprecated_show_value_hack. - - Reviewed-By: Tom Tromey - -2023-04-28 Andrew Burgess - - gdb: cleanup command creation in infcmd.c - In infcmd.c, in order to add command completion to some of the 'set' - commands, we are currently creating the command, then looking up the - command by calling lookup_cmd. - - This is no longer necessary, we already return the relevant - cmd_list_element object when the set/show command is created, and we - can use that to set the command completion callback. - - I don't know if there's actually any tests for completion of these - commands, but I manually checked, and each command still appears to - offer the expected filename completion. - - There should be no user visible changes after this commit. - - Reviewed-By: Tom Tromey - -2023-04-28 Simon Marchi - - gdb/record-full: disable range stepping when resuming threads - I see these failures, when running with the native-gdbserver of - native-extended-gdbserver boards: - - Running /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.reverse/finish-reverse-next.exp ... - FAIL: gdb.reverse/finish-reverse-next.exp: reverse next 1 LEP from function body - FAIL: gdb.reverse/finish-reverse-next.exp: reverse next 2 at b = 5, from function body - FAIL: gdb.reverse/finish-reverse-next.exp: reverse next 1 GEP call from function body - FAIL: gdb.reverse/finish-reverse-next.exp: reverse next 2 at b = 50 from function body - - Let's use this simpler program to illustrate the problem: - - int main() - { - int a = 362; - a = a * 17; - return a; - } - - It compiles down to: - - int a = 362; - 401689: c7 45 fc 6a 01 00 00 movl $0x16a,-0x4(%rbp) - a = a * 17; - 401690: 8b 55 fc mov -0x4(%rbp),%edx - 401693: 89 d0 mov %edx,%eax - 401695: c1 e0 04 shl $0x4,%eax - 401698: 01 d0 add %edx,%eax - 40169a: 89 45 fc mov %eax,-0x4(%rbp) - return a; - 40169d: 8b 45 fc mov -0x4(%rbp),%eax - - When single stepping these lines, debugging locally, while recording, - these are the recorded instructions (basically one for each instruction - shown above): - - (gdb) maintenance print record-instruction 0 - 4 bytes of memory at address 0x00007fffffffdc5c changed from: 6a 01 00 00 - Register rip changed: (void (*)()) 0x40169a - (gdb) maintenance print record-instruction -1 - Register rax changed: 5792 - Register eflags changed: [ PF AF IF ] - Register rip changed: (void (*)()) 0x401698 - (gdb) maintenance print record-instruction -2 - Register rax changed: 362 - Register eflags changed: [ PF ZF IF ] - Register rip changed: (void (*)()) 0x401695 - (gdb) maintenance print record-instruction -3 - Register rax changed: 4200069 - Register rip changed: (void (*)()) 0x401693 - (gdb) maintenance print record-instruction -4 - Register rdx changed: 140737488346696 - Register rip changed: (void (*)()) 0x401690 - (gdb) maintenance print record-instruction -5 - 4 bytes of memory at address 0x00007fffffffdc5c changed from: 00 00 00 00 - Register rip changed: (void (*)()) 0x401689 - (gdb) maintenance print record-instruction -6 - Not enough recorded history - - But when debugging remotely: - - (gdb) maintenance print record-instruction 0 - Register rdx changed: 140737488346728 - Register rip changed: (void (*)()) 0x401690 - (gdb) maintenance print record-instruction -1 - 4 bytes of memory at address 0x00007fffffffdc7c changed from: 00 00 00 00 - Register rip changed: (void (*)()) 0x401689 - (gdb) maintenance print record-instruction -2 - Not enough recorded history - - In this list, we only have entries for the beginning of each line. This - is because of the remote target's support for range stepping. The - record-full layer can only record instructions when the underlying - process target reports a stop. With range stepping, the remote target - single-steps multiple instructions at a time, so the record-full target - doesn't get to see and record them all. - - Fix this by making the record-full layer disable range-stepping - before handing the resume request to the beneath layer, forcing the - remote target to report stops for each instruction. - - Change-Id: Ia95ea62720bbcd0b6536a904360ffbf839eb823d - -2023-04-28 Keith Seitz - - Allow strings with printf/eval - PR 13098 explains that if a user attempts to use a string with either - `printf' (or `eval'), gdb returns an error (inferior not running): - - (gdb) printf "%s\n", "hello" - evaluation of this expression requires the target program to be active - - However, the parser can certainly handle this case: - - (gdb) p "hello" - $1 = "hello" - - This discrepancy occurs because printf_c_string does not handle - this specific case. The passed-in value that we are attempting to print - as a string is TYPE_CODE_ARRAY but it's lval type is not_lval. - - printf_c_string will only attempt to print a string from the value's - contents when !TYPE_CODE_PTR, lval is lval_internalvar, and the value's - type is considered a string type: - - if (value->type ()->code () != TYPE_CODE_PTR - && value->lval () == lval_internalvar - && c_is_string_type_p (value->type ())) - { - ... - } - - Otherwise, it attempts to read the value of the string from the target's - memory (which is what actually generates the "evaluation of this ..." - error message). - -2023-04-28 Tom Tromey - - Move find_minimal_symbol_address to minsyms.c - I found find_minimal_symbol_address in parse.c, but it seems to me - that it belongs in minsyms.c. - - Reviewed-By: Andrew Burgess - -2023-04-28 Tom Tromey - - Do not change type in get_discrete_low_bound - get_discrete_low_bound has this code: - - /* Set unsigned indicator if warranted. */ - if (low >= 0) - type->set_is_unsigned (true); - - It's bad to modify a type in a getter like this, so this patch removes - this code. FWIW I looked and this code has been there since at least - 1999 (it was in the initial sourceware import). - - Types in general would benefit from const-ification, which would - probably reveal more code like this, but I haven't attempted that. - - Regression tested on x86-64 Fedora 36. - - Reviewed-by: Kevin Buettner - -2023-04-28 Tom Tromey - - Remove @var from @defun in Python documentation - Eli pointed out that @var isn't needed in @defun in Texinfo. This - patch removes the cases I found in python.texi. I also renamed some - variables in one spot, because "-" isn't valid in a Python variable - name. - -2023-04-28 Andrew Burgess - - gdb/testsuite: additional test fixes after gdb_test changes - After this commit: - - commit e2f620135d92f7cd670af4e524fffec7ac307666 - Date: Thu Mar 30 13:26:25 2023 +0100 - - gdb/testsuite: change newline patterns used in gdb_test - - There were some regressions in gdb.trace/*.exp tests when run with the - native-gdbserver board. This commit fixes these regressions. - - All the problems are caused by unnecessary trailing newline characters - included in the patterns passed to gdb_test. After the above commit - the testsuite is stricter when matching trailing newlines, and so the - additional trailing newline characters are now causing the test to - fail. Fix by removing all the excess trailing newline characters. - - In some cases this cleanup means we should use gdb_test_no_output, - I've done that where appropriate. In a couple of other places I've - made use of multi_line to better build the expected output pattern. - -2023-04-28 H.J. Lu - - ld: Use run_cc_link_tests for PR ld/26391 tests - Use run_cc_link_tests for PR ld/26391 tests to compile PR ld/26391 tests - in C. - - PR ld/30002 - * testsuite/ld-elf/elf.exp: Use run_cc_link_tests for PR ld/26391 - tests. - -2023-04-28 Eli Zaretskii - - Fix a typo in gdb.texinfo. - -2023-04-28 Nelson Chu - - RISC-V: Enable x0 base relaxation for relax_pc even if --no-relax-gp. - Let --no-relax-gp only disable the gp relaxation for lui and pcrel - relaxations, since x0 base and gp relaxations are different optimizations - in fact, but just use the same function to handle. - - bfd/ - * elfnn-riscv.c (_bfd_riscv_relax_pc): Like _bfd_riscv_relax_lui, - set gp to zero when --no-relax-gp, then we should still keep the - x0 base relaxation. - (_bfd_riscv_relax_section): Enable _bfd_riscv_relax_pc when - --no-relax-gp, we will disable the gp relaxation in the - _bfd_riscv_relax_pc. - -2023-04-28 Nelson Chu - - RISC-V: Relax R_RISCV_[PCREL_]LO12_I/S to R_RISCV_GPREL_I/S for undefined weak. - bfd/ - *elfnn-riscv.c (_bfd_riscv_relax_lui): For undefined weak symbol, - just relax the R_RISCV_LO12_I/S to R_RISCV_GPREL_I/S, and then don't - update the rs1 to zero until relocate_section. - (_bfd_riscv_relax_pc): Likewise, but for R_RISCV_PCREL_LO12_I/S. - -2023-04-28 Jan Beulich - - x86: limit data passed to i386_dis_printf() - The function doesn't use "ins" for other than retrieving "info". Remove - a thus pointless level of indirection. - - x86: limit data passed to prefix_name() - Make apparent that neither what "ins" points to nor, in particular, that - "ins->info->private_data" is actually used in the function. - - x86/Intel: reduce ELF/PE conditional scope in x86_cons() - All the Intel syntax related state adjustments apply independent of - target or object format. - - gas: move shift count check - ... out of mainline code, grouping together the two case labels. This - then also make more obvious that the comment there applies to both forms - of shifts. - - x86: rework AMX control insn disassembly - Consistently do 64-bit first, VEX.L second, VEX.W third, ModR/M fourth, - and only then prefix, resulting in fewer table entries. Note that in the - course of the re-work - - TILEZERO has a previously missing decode step through rm_table[] - added, - - a wrong M_0 suffix for TILEZERO is also corrected to be M_1 (now an - infix). - -2023-04-28 Jan Beulich - - x86: rework AMX multiplication insn disassembly - Consistently do 64-bit first, ModR/M second, VEX.L third, VEX.W fourth, - and prefix last, resulting in fewer table entries. Note that in the - course of the re-work wrong M_0 suffixes are also corrected to be M_1 - (partly infixes now). - - Since it ended up confusing while testing the change, also adjust the - test name in x86-64-amx-bad.d (to be distinct from x86-64-amx.d's). - -2023-04-28 Alan Modra - - Re: Keeping track of rs6000-coff archive element pointers - Commit de7b90610e9e left a hole in the element checking, explained by - the comment added to _bfd_xcoff_openr_next_archived_file. While - fixing this, tidy some types used to hold unsigned values so that - casts are not needed to avoid signed/unsigned comparison warnings. - Also tidy a few things in xcoff.h. - - bfd/ - * coff-rs6000.c (_bfd_xcoff_openr_next_archived_file): Check - that we aren't pointing back at the last element. Make - filestart a ufile_ptr. Update for xcoff_artdata change. - (_bfd_strntol, _bfd_strntoll): Return unsigned values. - (_bfd_xcoff_slurp_armap): Make off a ufile_ptr. - (add_ranges): Update for xcoff_artdata change. - * libbfd-in.h (struct artdata): Make first_file_filepos a - ufile_ptr. - * libbfd.h: Regenerate. - include/ - * coff/xcoff.h (struct xcoff_artdata): Replace min_elt with - ar_hdr_size. - (xcoff_big_format_p): In the !SMALL_ARCHIVE case return true - for anything but a small archive. - -2023-04-28 Alan Modra - - Remove deprecated bfd_read - 20+ years is long enough to warn. - - * bfd-in.h (bfd_read, bfd_write): Don't define - (_bfd_warn_deprecated): Don't declare. - * bfd-in2.h: Regenerate. - * libbfd.c (_bfd_warn_deprecated): Delete. - -2023-04-28 Alan Modra - - Make bfd_byte an int8_t, flagword a uint32_t - * bfd-in.h (bfd_byte): Typedef as int8_t. - (flagword): Typedef as uint32_t. - (bfd_vma, bfd_signed_vma, bfd_size_type, symvalue): Use stdint - types in !BFD64 case. - * bfd-in2.h: Regenerate. - -2023-04-28 GDB Administrator - - Automatic date update in version.in - -2023-04-27 Jose E. Marchesi - - gas: bpf: fix tests for pseudo-c syntax - This patch fixes the GAS BPF testsuite so the tests for pseudo-c - syntax are actually executed. - - 2023-04-27 Jose E. Marchesi - - * testsuite/gas/bpf/mem.dump: New file. - * testsuite/gas/bpf/mem-pseudoc.d: Likewise. - * testsuite/gas/bpf/mem.d: #dump mem.dump. - * testsuite/gas/bpf/lddw.dump: New file. - * testsuite/gas/bpf/lddw-pseudoc.d: Likewise. - * testsuite/gas/bpf/lddw.d: #dump lddw.dump. - * testsuite/gas/bpf/jump.dump: New file. - * testsuite/gas/bpf/jump-pseudoc.d: Likewise - * testsuite/gas/bpf/jump.d: #dump jump.dump. - * testsuite/gas/bpf/jump32.dump: New file. - * testsuite/gas/bpf/jump32-pseudoc.d: Likewise. - * testsuite/gas/bpf/jump32.d: #dump jump32.dump. - * testsuite/gas/bpf/lddw-be.dump: New file. - * testsuite/gas/bpf/lddw-be-pseudoc.d: Likewise. - * testsuite/gas/bpf/lddw-be.d: #dump lddw-be.dump. - * testsuite/gas/bpf/indcall-1.dump: New file. - * testsuite/gas/bpf/indcall-1-pseudoc.d: Likewise. - * testsuite/gas/bpf/indcall-1.d: #dump indcall-1.dump. - * testsuite/gas/bpf/indcall-1-pseudoc.s (main): Fix lddw - instruction. - * testsuite/gas/bpf/atomic.dump: New file. - * testsuite/gas/bpf/atomic-pseudoc.d: Likewise. - * testsuite/gas/bpf/atomic.d: #dump atomic.dump. - * testsuite/gas/bpf/alu32.dump: New file. - * testsuite/gas/bpf/alu32-pseudoc.d: Likewise. - * testsuite/gas/bpf/alu32.d: #dump alu32.dump. - * testsuite/gas/bpf/alu.dump: New file. - * testsuite/gas/bpf/alu-pseudoc.d: Likewise. - * testsuite/gas/bpf/alu.d: #dump alu.dump. - - * testsuite/gas/bpf/alu-be.dump: New file. - * testsuite/gas/bpf/alu-be-pseudoc.d: Likewise. - * testsuite/gas/bpf/alu-be.d: #dump alu-be.dump. - * testsuite/gas/bpf/alu32-be-pseudoc.d: New file. - * testsuite/gas/bpf/alu32-be-dump: Likewise. - * testsuite/gas/bpf/alu32-be.d: #dump alu32-be-dump. - * testsuite/gas/bpf/bpf.exp: Run *-pseudoc tests. - -2023-04-27 Tom Tromey - - Avoid some compiler warnings in gdb.ada - Running gdb.ada/verylong.exp shows a warning from the Ada compiler: - - prog.adb:16:11: warning: file name does not match unit name, should be "main.adb" [enabled by default] - - This patch fixes the problem, and another similar one in - unchecked_union.exp. - -2023-04-27 Michael Matz - - Fix PR30358, performance with --sort-section - since af31506c we only use the binary tree when section sorting is - required. While its unbalanced and hence can degrade to a linear list - it should otherwise have been equivalent to the old code relying on - insertion sort. Unfortunately it was not. The old code directly used - lang_add_section to populate the sorted list, the new code first - populates the tree and only then does lang_add_section on the sorted - result. - - In the testcase we have very many linkonce section groups, and hence - lang_add_section won't actually insert anything for most of them. That - limited the to-be-sorted list length previously. The tree-sorting code - OTOH first created a tree of all candidates sections, including those - that wouldn't be inserted by lang_add_section, hence increasing the size - of the sorting problem. In the testcase the chain length went from - about 1500 to 106000, and in the degenerated case (as in the testcase) - that goes in quadratically. - - This splits out most of the early-out code from lang_add_section to its - own function and uses the latter to avoid inserting into the tree. This - refactoring slightly changes the order of early-out tests (the ones - based on section flags is now done last, and only in lang_add_section). - The new function is not a pure predicate: it can give warnings and it - might change output_section, like the old early-out code did. I have - also added a skip-warning case in the first discard case, whose - non-existence seemed to have been an oversight. - - PR 30358 - * ldlang.c (wont_add_section_p): Split out from ... - (lang_add_section): ... here. - (output_section_callback_sort): Use wont_add_section_p to not - always add sections to the sort tree. - -2023-04-27 Andrew Burgess - - gdb/doc: extend the documentation of the jump command - This commit addresses PR gdb/7946. While checking for bugs relating - to the jump command I noticed a long standing bug that points out a - deficiency with GDB's documentation of the jump command. - - The bug points out that 'jump 0x...' is not always the same as 'set - $pc = 0x...' and then 'continue'. Writing directly to the $pc - register does not update any auxiliary state, e.g. $npc on SPARC, - while using 'jump' does. - - It felt like this would be an easy issue to address by adding a - paragraph to the docs, so I took a stab at writing something suitable. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7946 - - Approved-By: Eli Zaretskii - -2023-04-27 Andrew Burgess - - gdb/testsuite: special case '^' in gdb_test pattern - In this commit I propose that we add special handling for the '^' when - used at the start of a gdb_test pattern. Consider this usage: - - gdb_test "some_command" "^command output pattern" - - I think the intention here is pretty clear - run 'some_command', and - the output from the command should be exactly 'command output - pattern'. - - After the previous commit which tightened up how gdb_test matches the - final newline and prompt we know that the only thing after the output - pattern will be a single newline and prompt, and the leading '^' - ensures that there's no output before 'command output pattern', so - this will do what I want, right? - - ... except it doesn't. The command itself will also needs to be - matched, so I should really write: - - gdb_test "some_command" "^some_command\r\ncommand output pattern" - - which will do what I want, right? Well, that's fine until I change - the command and include some regexp character, then I have to write: - - gdb_test "some_command" \ - "^[string_to_regexp some_command]\r\ncommand output pattern" - - but this all gets a bit verbose, so in most cases I simply don't - bother anchoring the output with a '^', and a quick scan of the - testsuite would indicate that most other folk don't both either. - - What I propose is this: the *only* thing that can appear immediately - after the '^' is the command converted into a regexp, so lets do that - automatically, moving the work into gdb_test. Thus, when I write: - - gdb_test "some_command" "^command output pattern" - - Inside gdb_test we will spot the leading '^' in the pattern, and - inject the regexp version of the command after the '^', followed by a - '\r\n'. - - My hope is that given this new ability, folk will be more inclined to - anchor their output patterns when this makes sense to do so. This - should increase our ability to catch any unexpected output from GDB - that appears as a result of running a particular command. - - There is one problem case we need to consider, sometime people do - this: - - gdb_test "" "^expected output pattern" - - In this case no command is sent to GDB, but we are still expecting - some output from GDB. This might be a result of some asynchronous - event for example. As there is no command sent to GDB (from the - gdb_test) there will be no command text to parse. - - In this case my proposed new feature injects the command regexp, which - is the empty string (as the command itself is empty), but still - injects the '\r\n' after the command regexp, thus we end up with this - pattern: - - ^\r\nexpected output pattern - - This extra '\r\n' is not what we should expected here, and so there is - a special case inside gdb_test -- if the command is empty then don't - add anything after the '^' character. - - There are a bunch of tests that do already use '^' followed by the - command, and these can all be simplified in this commit. - - I've tried to run all the tests that I can to check this commit, but I - am certain that there will be some tests that I manage to miss. - Apologies for any regressions this commit causes, hopefully fixing the - regressions will not be too hard. - - Reviewed-By: Tom Tromey - -2023-04-27 Andrew Burgess - - gdb/testsuite: change newline patterns used in gdb_test - This commit makes two changes to how we match newline characters in - the gdb_test proc. - - First, for the newline pattern between the command output and the - prompt, I propose changing from '[\r\n]+' to an explicit '\r\n'. - - The old pattern would spot multiple newlines, and so there are a few - places where, as part of this commit, I've needed to add an extra - trailing '\r\n' to the pattern in the main test file, where GDB's - output actually includes a blank line. - - But I think this is a good thing. If a command produces a blank line - then we should be checking for it, the current gdb_test doesn't do - that. But also, with the current gdb_test, if a blank line suddenly - appears in the output, this is going to be silently ignored, and I - think this is wrong, the test should fail in that case. - - Additionally, the existing pattern will happily match a partial - newline. There are a strangely large number of tests that end with a - random '.' character. Not matching a literal period, but matching any - single character, this is then matching half of the trailing newline - sequence, while the \[\r\n\]+ in gdb_test is matching the other half - of the sequence. I can think of no reason why this would be - intentional, I suspect that the expected output at one time included a - period, which has since been remove, but I haven't bothered to check - on this. In this commit I've removed all these unneeded trailing '.' - characters. - - The basic rule of gdb_test after this is that the expected pattern - needs to match everything up to, but not including the newline - sequence immediately before the GDB prompt. This is generally how the - proc is used anyway, so in almost all cases, this commit represents no - significant change. - - Second, while I was cleaning up newline matching in gdb_test, I've - also removed the '[\r\n]*' that was added to the start of the pattern - passed to gdb_test_multiple. - - The addition of this pattern adds no value. If the user pattern - matches at the start of a line then this would match against the - newline sequence. But, due to the '*', if the user pattern doesn't - match at the start of a line then this group doesn't care, it'll - happily match nothing. - - As such, there's no value to it, it just adds more complexity for no - gain, so I'm removing it. No tests will need updating as a - consequence of this part of the patch. - - Reviewed-By: Tom Tromey - -2023-04-27 Andrew Burgess - - gdb/testsuite: use 'return' in gdb_test_no_output - A TCL proc will return the return value of the last command executed - within the proc's body if there is no explicit return call, so - gdb_test_no_output is already returning the return value of - gdb_test_multiple. - - However, I'm not a fan of (relying on) this implicit return value - behaviour -- I prefer to be explicit about what we are doing. So in - this commit I have extended the comment on gdb_test_no_output to - document the possible return values (just as gdb_test does), and - explicitly call return. - - This should make no different to our testing, but I think it's clearer - now what the gdb_test_no_output proc is expected to do. - - The two tests gdb.base/auxv.exp and gdb.base/list.exp both rely on the - return value of gdb_test_no_output, and continue to pass after this - change. - - I also spotted that gdb.base/watchpoint.exp could be updated to make - use of gdb_test_no_output, so I did that. - - Reviewed-By: Tom Tromey - -2023-04-27 Andrew Burgess - - gdb: remove some trailing newlines from warning messages - While working on a later patch in this series, which tightens up some - of our pattern matching when using gdb_test, I ran into some failures - caused by some warnings having a trailing newline character. - - The warning function already adds a trailing newline, and it is my - understanding that we should not be adding a second by including a - newline at the end of any warning message. - - The problem cases I found were in language.c and remote.c, in this - patch I fix the cases I hit, but I also checked all the other warning - calls in these two files and removed any additional trailing newlines - I found. - - In remote.c the warning actually had a newline character in the middle - of the warning message (in addition to the trailing newline), which - I've removed. I don't think it's helpful to forcibly split a warning - as was done here -- in the middle of a sentence. Additionally, the - message isn't even that long (71 characters), so I think removing this - newline is an improvement. - - None of the expected test result need updating with this commit, - currently the patterns in gdb_test will match one or more newline - sequences, so the tests are as happy with one newline (after this - commit) as they are with two newlines (before this commit). A later - commit will change gdb_test so that it is not so forgiving, and these - warnings would have caused some failures. - - Reviewed-By: Tom Tromey - -2023-04-27 Andrew Burgess - - gdb/testsuite: fix occasional failure in gdb.base/clear_non_user_bp.exp - I noticed that the gdb.base/clear_non_user_bp.exp test would sometimes - fail when run from a particular directory. - - The test tries to find the number of the first internal breakpoint - using this proc: - - 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 "" - } - - The problem is, at the time we issue 'maint info break' there are both - internal breakpoint and non-internal (user created) breakpoints in - place. The user created breakpoints include the path to the source - file. - - Sometimes, I'll be working from a directory that includes a number, - like '/tmp/blah-1/gdb/etc', in which case the pattern above actually - matches the '-1' from 'blah-1'. In this case there's no significant - problem as it turns out that -1 is the number of the first internal - breakpoint. - - Sometimes my directory name might be '/tmp/blah-4/gdb/etc', in which - case the above pattern patches '-4' from 'blah-4'. It turns out this - is also not a problem -- the test doesn't actually need the first - internal breakpoint number, it just needs the number of any internal - breakpoint. - - But sometimes my directory name might be '/tmp/blah-0/gdb/etc', in - which case the pattern above matches '-0' from 'blah-0', and in this - case the test fails - there is no internal breakpoint '-0'. - - Fix this by spotting that the internal breakpoint numbers always - occurs after a '\r\n', and that they never start with a 0. Our - pattern becomes: - - -re -wrap "\r\n(-\[1-9\]\[0-9\]*).*" { - return $expect_out(1,string) - } - - After this I'm no longer seeing any failures. - - Reviewed-By: Tom Tromey - -2023-04-27 Tankut Baris Aktemur - - gdb, doc: add index entry for the $_inferior_thread_count convenience var - Add a marker in the documentation for indexing the $_inferior_thread_count - variable. - - Approved-By: Eli Zaretskii - -2023-04-27 Nick Clifton - - Add support for %x and %lx formats to the linker's vinfo() function. - -2023-04-27 GDB Administrator - - Automatic date update in version.in - -2023-04-26 Philipp Tomsich - - RISC-V: Support XVentanaCondOps extension - Ventana Micro has published the specification for their - XVentanaCondOps ("conditional ops") extension at - https://github.com/ventanamicro/ventana-custom-extensions/releases/download/v1.0.0/ventana-custom-extensions-v1.0.0.pdf - which contains two new instructions - - vt.maskc - - vt.maskcn - that can be used in constructing branchless sequences for - various conditional-arithmetic, conditional-logical, and - conditional-select operations. - - To support such vendor-defined instructions in the mainline binutils, - this change also adds a riscv_supported_vendor_x_ext secondary - dispatch table (but also keeps the behaviour of allowing any unknow - X-extension to be specified in addition to the known ones from this - table). - - As discussed, this change already includes the planned/agreed future - requirements for X-extensions (which are likely to be captured in the - riscv-toolchain-conventions repository): - - a public specification document is available (see above) and is - referenced from the gas-documentation - - the naming follows chapter 27 of the RISC-V ISA specification - - instructions are prefixed by a vendor-prefix (vt for Ventana) - to ensure that they neither conflict with future standard - extensions nor clash with other vendors - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_get_default_ext_version): Add riscv_supported_vendor_x_ext. - (riscv_multi_subset_supports): Recognize INSN_CLASS_XVENTANACONDOPS. - - gas/ChangeLog: - - * doc/c-riscv.texi: Add section to list custom extensions and - their documentation URLs. - * testsuite/gas/riscv/x-ventana-condops.d: New test. - * testsuite/gas/riscv/x-ventana-condops.s: New test. - - include/ChangeLog: - - * opcode/riscv-opc.h Add vt.maskc and vt.maskcn. - * opcode/riscv.h (enum riscv_insn_class): Add INSN_CLASS_XVENTANACONDOPS. - - opcodes/ChangeLog: - - * riscv-opc.c: Add vt.maskc and vt.maskcn. - - Series-version: 1 - Series-to: binutils@sourceware.org - Series-cc: Kito Cheng - Series-cc: Nelson Chu - Series-cc: Greg Favor - Series-cc: Christoph Muellner - -2023-04-26 Jose E. Marchesi - - gas: documentation for the BPF pseudo-c asm syntax - This patch expands the GAS manual in order to specify the alternate - pseudo-C assembly syntax used in BPF, and now supported by the - assembler. - - gas/ChangeLog: - - 2023-04-19 Jose E. Marchesi - - PR gas/29757 - * doc/c-bpf.texi (BPF Pseudo-C Syntax): New section. - -2023-04-26 Guillermo E. Martinez - - gas: BPF pseudo-c syntax tests - This patch expands the GAS BPF testsuite in order to also test the - alternative pseudo-C syntax used in BPF assembly. - - This includes three main changes: - - - Some general GAS tests involving assignment and equality operands in - expressions (such as = and ==) are disabled in bpf-* targets, - because the syntax collides with the pseudo-C BPF assembly syntax. - - - New tests are added to the BPF GAS testsuite that test the pseudo-c - syntax. Tests for all BPF instructions are included. - - - New tests are added to the BPF GAS testsuite that test the support - for both syntaxes in the same source. - - gas/ChangeLog: - - 2023-04-20 Guillermo E. Martinez - - PR gas/29728 - * testsuite/gas/all/assign-bad-recursive.d: Skip test in bpf-* - targets. - * testsuite/gas/all/eqv-dot.d: Likewise. - * testsuite/gas/all/gas.exp: Skip other assignment tests in bpf-*. - * testsuite/gas/bpf/alu-pseudoc.s: New file. - * testsuite/gas/bpf/pseudoc-normal.s: Likewise. - * testsuite/gas/bpf/pseudoc-normal.d: Likewise. - * testsuite/gas/bpf/pseudoc-normal-be.d: Likewise. - * testsuite/gas/bpf/mem-pseudoc.s: Likewise. - * testsuite/gas/bpf/lddw-pseudoc.s: Likewise. - * testsuite/gas/bpf/jump32-pseudoc.s: Likewise. - * testsuite/gas/bpf/jump-pseudoc.s: Likewise. - * testsuite/gas/bpf/indcall-1-pseudoc.s: Likewise. - * testsuite/gas/bpf/atomic-pseudoc.s: Likewise. - * testsuite/gas/bpf/alu32-pseudoc.s: Likewise. - * testsuite/gas/bpf/*.d: Add -pseudoc variants of the tests. - -2023-04-26 Guillermo E. Martinez - - gas: support for the BPF pseudo-c assembly syntax - This patch adds support to the GNU assembler for an alternative - assembly syntax used in BPF. This syntax is C-like and very - unconventional for an assembly language, but it is generated by - clang/llvm and is also used in inline asm templates in kernel code, so - we ought to support it. - - After this patch, the assembler is able to parse instructions in both - supported syntax: the normal assembly-like syntax and the pseudo-C - syntax. Instruction formats can be mixed in the source program: the - assembler recognizes the right syntax to use. - - gas/ChangeLog: - - 2023-04-20 Guillermo E. Martinez - - PR gas/29728 - * config/tc-bpf.h (TC_EQUAL_IN_INSN): Define. - * config/tc-bpf.c (LEX_IS_SYMBOL_COMPONENT): Define. - (LEX_IS_WHITESPACE): Likewise. - (LEX_IS_NEWLINE): Likewise. - (LEX_IS_ARITHM_OP): Likewise. - (LEX_IS_STAR): Likewise. - (LEX_IS_CLSE_BR): Likewise. - (LEX_IS_OPEN_BR): Likewise. - (LEX_IS_EQUAL): Likewise. - (LEX_IS_EXCLA): Likewise. - (ST_EOI): Likewise. - (MAX_TOKEN_SZ): Likewise. - (init_pseudoc_lex): New function. - (md_begin): Call init_pseudoc_lex. - (valid_expr): New function. - (build_bpf_non_generic_load): Likewise. - (build_bpf_atomic_insn): Likewise. - (build_bpf_jmp_insn): Likewise. - (build_bpf_arithm_insn): Likewise. - (build_bpf_endianness): Likewise. - (build_bpf_load_store_insn): Likewise. - (look_for_reserved_word): Likewise. - (is_register): Likewise. - (is_cast): Likewise. - (get_token): Likewise. - (bpf_pseudoc_to_normal_syntax): Likewise. - (md_assemble): Try pseudo-C syntax if an instruction cannot be - parsed. - -2023-04-26 Jose E. Marchesi - - sim: bpf: update to new BPF relocations - This patch updates the BPF GNU sim testsuite in order to match the new - BPF relocations introduced in binutils in a recent patch [1]. - - [1] https://sourceware.org/pipermail/binutils/2023-March/126429.html - -2023-04-26 Tom de Vries - - [gdb/tui] Fix length of status line string - In commit 5d10a2041eb ("gdb: add string_file::release method") this was added: - ... - + std::string string_val = string.release (); - ... - without updating subsequent uses of string.size (), which returns 0 after the - string.release () call. - - Fix this by: - - using string_val.size () instead of string.size (), and - - adding an assert that would have caught this regression. - - Tested on x86_64-linux. - - Reviewed-By: Simon Marchi - PR tui/30389 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30389 - -2023-04-26 Tom Tromey - - Rewrite gdb_mpz::operator== - Simon pointed out that the recent changes to gdb_mpz caused a build - failure on amd64 macOS. It turns out to be somewhat difficult to - overload a method in a way that will work "naturally" for all integer - types; especially in a case like gdb_mpz::operator==, where it's - desirable to special case all integer types that are no wider than - 'long'. - - After a false start, I came up with this patch, which seems to work. - It applies the desirable GMP special cases directly in the body, - rather than via overloads. - - Approved-By: Simon Marchi - -2023-04-26 Luis Machado - - Updated debug architecture version checks for fbsd - There are two new debug architecture version entries. I updated the - code for Linux, but fbsd also needs updating. - - This patch does this, and should be pretty straightforward. - - I can't test this on native fbsd, but I'm fairly confident it should - work. - -2023-04-26 Luis Machado - - Add new debug architecture version - Teach gdb about a new debug architecture version for AArch64 (0x11). - - No user-visible changes. - - Regression-tested on aarch64-linux Ubuntu 20.04/22.04. - -2023-04-26 Alan Modra - - i386-dis.c UB shift and other tidies - 1) i386-dis.c:12055:11: runtime error: left shift of negative value -1 - Bit twiddling is best done unsigned, due to UB on overflow of signed - expressions. Fix this by using bfd_vma rather than bfd_signed_vma - everywhere in i386-dis.c except print_displacement. - - 2) Return get32s and get16 value in a bfd_vma, reducing the need for - temp variables. - - 3) Introduce get16s and get8s functions to simplify the code. - - 4) With some optimisation options gcc-13 legitimately complains about - a fall-through in OP_I. Fix that. OP_I also doesn't need to use - "mask" which was wrong for w_mode anyway. - - 5) Masking with & 0xffffffff is better than casting to unsigned. We - don't know for sure that unsigned int is 32-bit. - - 6) We also don't know that unsigned char is 8 bits. Mask codep - accesses everywhere. I don't expect binutils will work on anything - other than an 8-bit char host, but if we are masking codep accesses in - some places we might as well be consistent. (Better would be to use - stdint.h types more in binutils.) - -2023-04-26 Alan Modra - - binutils runtest $CC - I noticed in the binutile Makefile that runtest is being invoked with - CC, CC_FOR_BUILD and other compiler related flags in the environment. - That doesn't work. Those variables ought to be passed on the runtest - command line. - - After fixing that I had some fails due to binutils testprog.c now - being compiled with the default "-g -O2" picked up in - CFLAGS_FOR_TARGET. Hack around that by passing -O0. - - Also, with the binutils testsuite now taking notice of CC_FOR_TARGET, - I found a couple of debuginfod.exp fails with one of my compilers that - happened to be built without --debug-id being enabled by default. - - * Makefile.am (check-DEJAGNU): Pass $CC and other variable on - the runtest command line rather than futilely in the - environment. Add -O0 to CFLAGS_FOR_TARGET. - * Makefile.in: Regenerate. - * testsuite/binutils-all/debuginfod.exp: Compile testprog.c - with -Wl,--build-id. - -2023-04-26 Alan Modra - - Avoid another -Werror=dangling-pointer - write.c:415:7: error: dangling pointer ‘prev_frag’ to ‘dummy’ may be used - - * write.c (chain_frchains_together_1): Rewrite loop as a do - while to avoid false positive -Wdangling-pointer. - -2023-04-26 GDB Administrator - - Automatic date update in version.in - -2023-04-25 Tom Tromey - - Use scoped_restore in varobj.c - One spot in varobj.c should use scoped_restore to save and restore - input_radix. Note that the current code may fail to restore it on - error, so this patch fixes a latent bug. - - Approved-By: Simon Marchi - -2023-04-25 Tom Tromey - - Remove some "goto"s from parse.c - parser_state::push_dollar has some unnecessary "goto"s. Replacing - them cleans up the code. Regression tested on x86-64 Fedora 36. - - Approved-By: Simon Marchi - -2023-04-25 Michael Matz - - section-select: Fix performance problem (PR30367) - when using many wild-statements with non-wildcard filenames we - were running into quadraticness via repeatedly using lookup_name - on a long list of loaded files. I've originally retained using - lookup_name because that preserved existing behaviour most obviously. - In particular in matching wild-statements when using a non-wildcard - filename it matches against local_sym_name, not the filename member. - If the wildspec would have an archive-spec or a wildcard it would use - the filename member, though. Also it would load the named file - (and ignore it, as being not equal to the currently considered - input-statement). - - Rewrite this to not use lookup_name but retain the comparison - against local_sym_name with a comment to that effect. - - PR 30367 - * ldlang.c (walk_wild_section_match): Don't use lookup_name - but directly compare spec and local_sym_name. - -2023-04-25 Jan Beulich - - RISC-V: adjust logic to avoid register name symbols - Special casing GPR names in my_getSmallExpression() leads to a number of - inconsistencies. Generalize this by utilizing the md_parse_name() hook, - limited to when instruction operands are being parsed (really: probed). - Then both the GPR lookup there and the yet more ad hoc workaround for - PR/gas 29940 can be removed (including its extension needed for making - the compressed form JAL work again). - - RISC-V: test for expected / no unexpected symbols - Both the temporary workaround for PR/gas 29940 and the existing special - casing of GPRs in my_getSmallExpression() aren't really tested anywhere - (i.e. with the workarounds remove testing would still succeed). Nor is - there any test for uses of symbols with names matching GPRs, where such - is permitted. Before altering how this is to be dealt with, install two - testcases covering the expected behavior. (For now this includes only - known affected insns; re-ordering of entries in riscv_opcodes[] could, - however, yield more of them.) - - RISC-V: don't recognize bogus relocations - With my_getSmallExpression() consistently and silently failing on - relocation operators not fitting an insn, it is no longer necessary to - hand it percent_op_itype[] "just in case" (i.e. to avoid errors when a - subsequent parsing attempt for another operand combination might - succeed). This also eliminates the latent problem of percent_op_itype[] - and percent_op_stype[] growing a non-identical set of recognized - relocation operators. - - RISC-V: avoid redundant and misleading/wrong error messages - The use of a wrong (for the insn) relocation operator (or a future one - which simply isn't recognized by older gas yet) doesn't render the (rest - of the) expression "bad". Furthermore alongside the error from - expression() in most cases the parser would emit another error then - anyway. Suppress the call to my_getExpression() in such a case, - arranging for a guaranteed subsequent error message by marking the - expression "illegal". - - RISC-V: drop "percent_op" parameter from my_getOpcodeExpression() - Both callers check for no relocations, so there's no point parsing for - some. Have the function pass percent_op_null into - my_getSmallExpression(). Note that there's no point passing - percent_op_itype: Elsewhere, especially when processing compressed alias - insns ahead of non-alias ones, this has the effect of avoiding "bad - expression" errors when another parsing pass may follow (and succeed). - Here, however, all alternative forms of an insn type will again start - with the same O4 or O2, so avoiding errors earlier on doesn't really - help. Plus constructs with a relocation specifier (as percent_op_itype - would permit) can't be specified anyway, as the scrubber eats the - whitespace between .insn's type and the O4 or O2 expression when that - starts with % or ( - i.e. these will be seen as e.g. "i%lo(x)", and - riscv_ip() looks only for whitespace when finding the end of a mnemonic. - - RISC-V: minor effort reduction in relocation specifier parsing - The sole caller of parse_relocation() has already checked for the % - prefix, so there's no need to check for it again in the strncasecmp() - and there's also no reason to make the involved string literals longer - than necessary. - -2023-04-25 Tom de Vries - - [gdb/testsuite] Fix timeout in gdb.tui/empty.exp - In test-case gdb.tui/empty.exp we run into: - ... - WARNING: timeout in accept_gdb_output - PASS: gdb.tui/empty.exp: src: 90x40: box 1 - ... - - We timeout here in Term::resize: - ... - # Due to the strange column resizing behavior, and because we - # don't care about this intermediate resize, we don't check - # the size here. - wait_for "@@ resize done $_resize_count" - ... - because the string we're trying to match is split over two lines: - ... - 25 -----------------------------------------------------------------------------+No - 26 ne No process In: L?? PC: ?? @@ - 27 resize done 0, size = 79x40 - 28 (gdb) - ... - - Fix this by dropping the "@@ " prefix. - - Tested on x86_64-linux. - -2023-04-25 Tom de Vries - - [gdb/testsuite] Fix timeout in gdb.tui/completion.exp - With test-case gdb.tui/completion.exp, we run into: - ... - WARNING: timeout in accept_gdb_output - PASS: gdb.tui/completion.exp: check focus completions - ... - - The timeout happens in this command: - ... - Term::command "layout src" - ... - which waits for: - - "(gdb) layout src", and then - - "(gdb) ". - - Because the "layout src" command enables the TUI there's just a prompt. - - Fix this by using Term::command_no_prompt_prefix. - - Tested on x86_64-linux. - -2023-04-25 Tom de Vries - - [gdb/testsuite] Fix timeout in gdb.tui/new-layout.exp - In test-case gdb.tui/new-layout.exp we run into: - ... - WARNING: timeout in accept_gdb_output - PASS: gdb.tui/new-layout.exp: layout=cmd_only {cmd 1} {} {}: \ - bottom of cmd window is blank - ... - - The timeout happens here: - ... - Term::command "layout src" - ... - - Before the "layout src" command we have: - ... - Screen Dump (size 80 columns x 24 rows, cursor at column 46, row 7): - 0 +-tui-layout.c-------------------------+(gdb) layout example3 - 1 | 20 { |(gdb) layout src - 2 | 21 return 0; |(gdb) winheight cmd 8 - 3 | 22 } |(gdb) layout example4 - 4 | 23 |(gdb) layout src - 5 | 24 |(gdb) winheight cmd 8 - 6 | 25 |(gdb) layout example5 - 7 | 26 |(gdb) - 8 | 27 | - 9 | 28 | - 10 | 29 | - 11 | 30 | - 12 | 31 | - 13 | 32 | - 14 | 33 | - 15 | 34 | - 16 | 35 | - 17 | 36 | - 18 | 37 | - 19 | 38 | - 20 | 39 | - 21 | 40 | - 22 +--------------------------------------+ - 23 exec No process In: L?? PC: ?? - ... - and after: - ... - Screen Dump (size 80 columns x 24 rows, cursor at column 6, row 16): - 0 +-tui-layout.c-----------------------------------------------------------------+ - 1 | 20 { | - 2 | 21 return 0; | - 3 | 22 } | - 4 | 23 | - 5 | 24 | - 6 | 25 | - 7 | 26 | - 8 | 27 | - 9 | 28 | - 10 | 29 | - 11 | 30 | - 12 | 31 | - 13 | 32 | - 14 +------------------------------------------------------------------------------+ - 15 exec No process In: L?? PC: ?? - 16 (gdb) - 17 - 18 - 19 - 20 - 21 - 22 - 23 - ... - - The Term::command "layout src" is waiting to match: - - "(gdb) layout src", and then - - "(gdb) ". - - The first part fails to match on a line: - ... - | 26 |(gdb) layout src - ... - because it expects the prompt at the start of the line. - - Fix this by allowing the prompt at the start of a window as well. - - Tested by x86_64-linux. - -2023-04-25 Tom de Vries - - [gdb/testsuite] Fix timeout in gdb.tui/main.exp - With test-case gdb.tui/main.exp we run into: - ... - WARNING: timeout in accept_gdb_output - PASS: gdb.tui/main.exp: show main after file - ... - - The problem is that this command: - ... - Term::command "file [standard_output_file $testfile]" - ... - tries to match "(gdb) $cmd", but due to the long file name, $cmd is split up - over two lines: - ... - 16 (gdb) file /data/vries/gdb/leap-15-4/build/gdb/testsuite/outputs/gdb.tui/main/ma - 17 in - 18 Reading symbols from /data/vries/gdb/leap-15-4/build/gdb/testsuite/outputs/gdb.t - 19 ui/main/main... - 20 (gdb) - ... - - Fix this by matching "Reading symbols from" instead. - - Tested on x86_64-linux. - -2023-04-25 Tom de Vries - - [gdb/testsuite] Fix timeout in gdb.tui/corefile-run.exp - With test-case gdb.tui/corefile-run.exp we run into: - ... - WARNING: timeout in accept_gdb_output - PASS: gdb.tui/corefile-run.exp: load corefile - ... - - The timeout happens in this command: - ... - Term::command "core-file $core" - ... - because it tries to match "(gdb) $cmd" but $cmd is split over two lines: - ... - 16 (gdb) core-file /data/vries/gdb/leap-15-4/build/gdb/testsuite/outputs/gdb.tui/co - 17 refile-run/corefile-run.core - 18 [New LWP 5370] - 19 Core was generated by `/data/vries/gdb/leap-15-4/build/gdb/testsuite/outputs/gdb - 20 .tui/corefile-run/coref'. - 21 Program terminated with signal SIGTRAP, Trace/breakpoint trap. - 22 #0 main () at tui-layout.c:21 - 23 (gdb) - ... - - Fix this by using send_gdb "$cmd\n" and wait_for "Program terminated" instead. - - Tested on x86_64-linux. - -2023-04-25 Tom de Vries - - [gdb/testsuite] Add debug prints in Term::wait_for - The semantics of wait_for are non-trivial, and a bit hard to understand - sometimes. - - Add some debug prints in wait_for that make it clear: - - what regexps we're trying to match, - - what strings we compare to the regexps, and - - whether there's a match or mismatch. - - I've added this ad-hoc a couple of times, and it seems that it's worth having - readily available. - - The debug prints are enabled by adding DEBUG_TUI_MATCHING=1 to the - RUNTESTFLAGS: - ... - $ make check RUNTESTFLAGS="gdb.tui/empty.exp DEBUG_TUI_MATCHING=1" - ... - - Tested on x86_64-linux. - -2023-04-25 Tom de Vries - - [gdb/testsuite] Add warning for timeout in accept_gdb_output - In accept_gdb_output we have: - ... - timeout { - # Assume a timeout means we somehow missed the - # expected result, and carry on. - return 0 - } - ... - - The timeout is silent, and though in some places the return value is checked, - this is not done consistently, and consequently there are silent timeouts - when running the TUI testsuite (gdb.tui/*.exp and gdb.python/tui*.exp). - - Each timeout is 10 seconds, and there are 5 in total in the TUI tests, taking - 50 seconds overall: - ... - real 1m0.275s - user 0m10.440s - sys 0m1.343s - ... - - With an entire testsuite run taking about 30 minutes, that is about 2.5% of - the time spent waiting in TUI tests. - - Let's make the timeouts visible using a warning, such that they can be fixed. - - Tested on x86_64-linux. - -2023-04-25 GDB Administrator - - Automatic date update in version.in - -2023-04-24 Tom de Vries - - [gdb/testsuite] Fix auto-indent in gdb.gdb/python-helper.exp - When editing gdb.gdb/python-helper.exp, auto-indent is broken in my editor - (emacs). - - The problem is that this: - ... - if { 1 } { - foo "{" "}"bar - } - ... - produces this: - ... - if { 1 } { - foo "{" "}" - bar - } - ... - - Note that this doesn't happen for "{}". - - Fix this by using "\{" and "\}". - - Tested on x86_64-linux. - -2023-04-24 Tom de Vries - - [gdb/testsuite] Fix gdb.gdb/python-helper.exp with -O2 -flto - On openSUSE Leap 15.4, with gcc 7.5.0, when building gdb with - -O2 -g -flto=auto, I run into: - ... - FAIL: gdb.gdb/python-helper.exp: hit breakpoint in outer gdb - FAIL: gdb.gdb/python-helper.exp: print integer from DWARF info - FAIL: gdb.gdb/python-helper.exp: print *type->main_type - ... - - Fix the first two FAILs by using $bkptno_numopt_re. - - The last FAIL is due to: - ... - (outer-gdb) print *type->main_type^M - A syntax error in expression, near `->main_type'.^M - (outer-gdb) FAIL: gdb.gdb/python-helper.exp: print *type->main_type - ... - because: - ... - (outer-gdb) print type^M - Attempt to use a type name as an expression^M - ... - - Fix this by making the test unresolved if "print type" or - "print type->main_type" doesn't succeed. - - On openSUSE Tumbleweed, with gcc 13.0.1, when building gdb with - -O2 -g -flto=auto, I run into timeouts due to the breakpoint in c_print_type - not hitting. Fix this by detecting the situation and bailing out. - - Tested on x86_64-linux. - -2023-04-24 Tom de Vries - - [gdb/testsuite] Fix -wrap in presence of -prompt in gdb_test_multiple - While writing a gdb_test_multiple call in a test-case I tried to use -wrap in - combination with -prompt and found out that it doesn't work, because -wrap uses - "$gdb_prompt $" instead of $prompt_regexp. - - Fix this by making -wrap use $prompt_regexp. - - Tested on x86_64-linux. - -2023-04-24 Simon Marchi - - gdb: remove end_stepping_range observable - I noticed that this observable was never notified, which means we can - probably safely remove it. The notification was removed in: - - commit 243a925328f8e3184b2356bee497181049c0174f - Author: Pedro Alves - Date: Wed Sep 9 18:23:24 2015 +0100 - - Replace "struct continuation" mechanism by something more extensible - - print_end_stepping_range_reason in turn becomes unused, so remote it as - well. - - Change-Id: If5da5149276c282d2540097c8c4327ce0f70431a - -2023-04-24 Tom de Vries - - [gdb/testsuite] Use -std=gnu99 for gdb.server/attach-flag.exp - When using a compiler defaulting to -std=gnu90, we run into: - ... - Running gdb.server/attach-flag.exp ... - gdb compile failed, attach-flag.c: In function 'main': - attach-flag.c:22:3: error: 'for' loop initial declarations are only allowed \ - in C99 or C11 mode - for (int i = 0; i < NTHREADS; i++) - ^~~ - attach-flag.c:22:3: note: use option -std=c99, -std=gnu99, -std=c11 or \ - -std=gnu11 to compile your code - ... - - Fix this by using -std=gnu99. - - Tested on x86_64-linux. - -2023-04-24 Tom de Vries - - [gdb/testsuite] Require GCC >= 5.x.x in gdb.base/utf8-identifiers.exp - Test-case gdb.base/utf8-identifiers.exp compiles starting with GCC 5, so - require this. - - Tested on x86_64-linux. - -2023-04-24 Tom de Vries - - [gdb/testsuite] Fix gdb.multi/multi-arch.exp on powerpc64le - When running test-case gdb.multi/multi-arch.exp on powerpc64le-linux, I run into: - ... - Running gdb/testsuite/gdb.multi/multi-arch.exp ... - gdb compile failed, In file included from /usr/include/features.h:399:0, - from /usr/include/stdio.h:27, - from gdb/testsuite/gdb.multi/hangout.c:18: - /usr/include/gnu/stubs.h:8:27: fatal error: gnu/stubs-32.h: \ - No such file or directory - # include - ^ - compilation terminated. - ... - - The problem is that the test-case attempts to use gcc -m32 to produce an - executable while that's not available. - - Fix this by: - - introduce a new caching proc have_compile_and_link_flag, and - - using have_compile_and_link_flag in test-case gdb.multi/multi-arch.exp. - - Tested on: - - x86_64-linux (openSUSE Leap 15.4), and - - powerpc64le-linux (CentOS-7). - -2023-04-24 Tom de Vries - - [gdb/testsuite] Add basic lmap for tcl < 8.6 - With test-case gdb.dwarf2/dw2-abs-hi-pc.exp and tcl 8.5, I run into: - ... - ERROR: tcl error sourcing gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.exp. - ERROR: invalid command name "lmap" - while executing - "::gdb_tcl_unknown lmap i {dw2-abs-hi-pc.c dw2-abs-hi-pc-hello.c \ - dw2-abs-hi-pc-world.c} { expr { "$srcdir/$subdir/$i" } }" - ... - - Fix this by adding basic lmap support for tcl version < 8.6. - - Tested on x86_64-linux. - -2023-04-24 Tom de Vries - - [gdb/testsuite] Don't use string cat in gdb.dwarf2/dw2-abs-hi-pc.exp - Test-case gdb.dwarf2/dw2-abs-hi-pc.exp uses string cat: - ... - set sources [lmap i $sources { string cat "${srcdir}/${subdir}/" $i }] - ... - but that's only supported starting tcl 8.6. - - Fix this by using "expr" instead: - ... - set sources [lmap i $sources { expr { "$srcdir/$subdir/$i" } }] - ... - - Tested on x86_64-linux. - -2023-04-24 Nick Clifton - - New georgian translation for the bfd sub-directory - -2023-04-24 Alan Modra - - Revert "x86: work around compiler diagnosing dangling pointer" - This reverts commit 983db9932a302f9e2ae1f1d4fd7c3149560bc269. - -2023-04-24 Alan Modra - - gcc-13 i386-dis.c warning - opcodes/i386-dis.c: In function ‘print_insn’: - opcodes/i386-dis.c:9865:22: error: storing the address of local - variable ‘priv’ in ‘*info.private_data’ [-Werror=dangling-pointer=] - - * i386-dis.c (print_insn): Clear info->private_data before - returning. - -2023-04-24 Alan Modra - - asan: segfault in coff_mangle_symbols - The testcase managed to trigger creation of a wild pointer in - coff_slurp_symbol_table. Stop that happening, and fix an unrelated - problem I happened to see in bfd_coff_get_syment. - - * coff-bfd.c (bfd_coff_get_syment): Clear fix_value after - converting n_value from a pointer to an index. - * coffcode.h (coff_slurp_symbol_table ): Sanity check - symbol value before converting to a pointer. - -2023-04-24 Alan Modra - - objcopy of archives tidy - This makes sure the input element bfd is closed before exiting the - loop copying elements. - - * objcopy.c (copy_archive): Rename output_bfd to output_element. - Localise last_element. Close this_element in more error cases. - -2023-04-24 Tom de Vries - - [gdb/testsuite] Skip dap tests for tcl 8.5 - When running the dap tests on a system with tcl 8.5, we run into: - ... - ERROR: tcl error sourcing gdb/testsuite/gdb.dap/memory.exp. - ERROR: bad class "entier": must be alnum, alpha, ascii, control, boolean, \ - digit, double, false, graph, integer, list, lower, print, punct, space, \ - true, upper, wideinteger, wordchar, or xdigit - while executing - "string is entier $num" - (procedure "num" line 16) - invoked from within - ... - - Fix this by: - - requiring tcl 8.6 in allow_dap_tests, and - - adding the missing require allow_dap_tests in gdb.dap/memory.exp. - - Tested on x86_64-linux. - -2023-04-24 Jan Beulich - - x86: work around compiler diagnosing dangling pointer - For quite come time print_insn() has been storing the address of a local - variable into info->private_data. Since the compiler can't know that the - field won't be accessed again after print_insn() returns, it may kind of - legitimately diagnose this. And recent enough gcc does as of the - introduction of the fetch_error() return paths (replacing setjmp()-based - error handling). - - Utilizing that neither prefix_name() nor i386_dis_printf() actually use - info->private_data, zap the pointer in fetch_error(), after having - retrieved it for local use. - -2023-04-24 GDB Administrator - - Automatic date update in version.in - -2023-04-23 YunQiang Su - - MIPS: fix loongson3 llsc workaround - -mfix-looongson3-llsc may add sync instructions not needed on some - asm code with lots of debug info. - - PR: 30153 - * gas/config/tc-mips.c(fix_loongson3_llsc): clear logistic. - -2023-04-23 YunQiang Su - - MIPS: default output r6 obj if the triple is r6 - If the triple is mipsisa32r6* or mipsisa64r6*, ld/as should output - r6 objects by default. - The triples with vendor `img` should do same. - - The examples include: - as xx.s -o xx.o - ld -r -b binary xx.dat -o xx.o - -2023-04-23 YunQiang Su - - MIPS: support mips*64 as CPU and gnuabi64 as ABI - For MIPS64r6 ports, Debian as an example, `mipsisa64r6el` is - used as the cpu name in triple. - Let's recognize them by `mips*64*(el)`. - - For 64bit Ports, like Debian's mips64el and mips64r6el ports, - `gnuabi64` is used as the abi section. - Let's use N64 abi by default for the triple with gnuabi64. - -2023-04-23 mengqinggang - - LoongArch: Fix loongarch32 test fails - Regenerated macro_op_32.d and add skip loongarch64-*-*. - - gas/ChangeLog: - - * testsuite/gas/loongarch/macro_op_32.d: Regenerated. - - ld/ChangeLog: - - * testsuite/ld-loongarch-elf/macro_op_32.d: Regenerated. - -2023-04-23 GDB Administrator - - Automatic date update in version.in - -2023-04-22 Tom de Vries - - [gdb/testsuite] Remove debug prints in gdb_find_gdc - When running the gdb.dlang test-cases, and forcing gdb_find_gdc to be used - rather than dejagnu's copy (mimicing what happens with an older dejagnu - without find_gdc), I run into these debug prints: - ... - Tool Root: /data/vries/gdb/leap-15-4/build - CC: gdc - ... - - Remove these. - - Tested on x86_64-linux. - -2023-04-22 WANG Rui - - gdb: Fix false match issue in skip_prologue_using_linetable - [ Changes in v2: - - rebase on trunk - Changes in v3: - - add test-case ] - - We should exclude matches to the ending PC to prevent false matches with the - next function, as prologue_end is located at the end PC. - - : - 0x00: ... <-- start_pc - 0x04: ... - 0x08: ... <-- breakpoint - 0x0c: ret - : - 0x10: ret <-- end_pc | prologue_end of fun2 - - Tested on x86_64-linux. - - Co-Authored-By: WANG Rui (fix, tiny change [1]) - Co-Authored-By: Tom de Vries (test-case) - Approved-by: Kevin Buettner - - [1] https://www.gnu.org/prep/maintain/html_node/Legally-Significant.html - - PR symtab/30369 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30369 - -2023-04-22 GDB Administrator - - Automatic date update in version.in - -2023-04-21 Simon Marchi - - gdb: remove language_auto - I think that the language_auto enumerator and the auto_language class - can be removed. There isn't really an "auto" language, it's only a - construct of the "set language" command to say "pick the appropriate - language automatically". But "auto" is never the current language. The - `current_language` points to the current effective language, and the - fact that we're in "auto language" mode is noted by the language_mode - global. - - - Change set_language to handle the "auto" (and "local", which is a - synonym) early, instead of in the for loop. I think it makes the two - cases (auto vs explicit language) more clearly separated anyway. - - - Adjust add_set_language_command to hard-code the "auto" string, - instead of using the "auto" language definition. - - - Remove auto_language, rename auto_or_unknown_language to - unknown_language and move the bits of the existing unknown_language - in there. - - - Remove the set_language at the end of _initialize_language. I think - it's not needed, because we call set_language in gdb_init, after all - _initialize functions are called. There is some chance that an - _initialize function that runs after _initialize_language implicitly - depends on current_language being set, but my testsuite runs haven't - found anything like that. - - - Use language_unknown instead of language_auto when creating a minimal - symbol (minimal_symbol_reader::record_full). I think that this value - is used to indicate that we don't know the symbol of the minimal - symbol (yet), so language_unknown makes sense to me. Update a - condition accordingly in ada-lang.c. symbol_find_demangled_name also - appears to "normalize" this value from "unknown" to "auto", remove - that part and update the condition to just check for - language_unknown. - - Change-Id: I47bcd6c15f607d9818f2e6e413053c2dc8ec5034 - Reviewed-By: Tom Tromey - -2023-04-21 Simon Marchi - - gdb: switch "set language" to getter/setter - The `language` global variable is mostly a scratch variable used for the - setting. The source of truth is really current_language and - language_mode (auto vs manual), which are set by the - set_language_command callback. - - Switch the setting to use the add_setshow_enum_cmd overload that takes a - value getter and setter. - - Change-Id: Ief5b2f93fd7337eed7ec96023639ae3dfe62250b - Reviewed-By: Tom Tromey - -2023-04-21 Simon Marchi - - gdb: remove return value of set_language - set_language returns the previous language, but nothing uses it. Remove - the return value. This lets us remove the assignment to - current_language, in _initialize_language. - - Change-Id: Ifccf9b488434c1addf4626130a74e159a37d8c17 - Reviewed-By: Tom Tromey - -2023-04-21 Tom de Vries - - [gdb/testsuite] Add make-check-all.sh - Directory gdb/testsuite/boards contains a number of host/target boards, which - run a test-case (or test-cases) in a different way. - - The benefits of using these boards are: - - improving test coverage of gdb, - - making the testsuite more robust, and - - making sure the test-cases work for non-native and remote setups, if - possible. - - Each board is slightly different, and developers need to learn how to use each - one, what parameters to pass and how, and which ones can be used in - combination with each other. This is a threshold to start using them. - - And then there quite a few, so I suppose typically only a few will be used by - each developer. - - Add script gdb/testsuite/make-check-all.sh, that's intended to function as a - drop-in replacement of make check, while excercising all host/target boards in - gdb/testsuite/boards. - - An example of make-check-all.sh for one test-case is: - ... - $ ~/gdb/src/gdb/testsuite/make-check-all.sh gdb.base/advance.exp - LOCAL: - # of expected passes 8 - TARGET BOARD: cc-with-gdb-index - # of expected passes 8 - ... - HOST BOARD: local-remote-host-notty, TARGET BOARD: remote-stdio-gdbserver - # of expected passes 8 - HOST/TARGET BOARD: local-remote-host-native - # of expected passes 8 - ... - - Shell-checked and tested on x86_64-linux. - - Co-Authored-By: Simon Marchi - Reviewed-By: Andrew Burgess - -2023-04-21 Tom de Vries - - [gdb/cli] Add maint info screen - While working on PRs tui/30337 and cli/30346 I came across various notions of - width in gdb, as reported by gdb, readline, curses and the environment - variables. - - As for gdb, readline and the environment variables, the way things work - is: - - Gdb asks readline to detect screen size, - - readline sets the actual screen size in the environment variables - COLUMNS and LINES, - - readline reports back a screen size to gdb, which may have one column - less than the actual screen size, to deal with lack of auto-wrap. - This becomes gdb's notion of screen size (in other words the point where - we can expect the gdb command line to wrap), - - Gdb then explicitly sets readline's screen size, which readline itself may - adjust to deal with lack of auto-wrap. This becomes readlines notion - of screen size (well, internally the unadjusted one, but it'll report back - the adjusted one). - - Add a command "maint info screen" that prints these notions, both for width - and height. - - For TERM=xterm we have: - ... - $ TERM=xterm gdb -ex "maint info screen" - Number of characters gdb thinks are in a line is 118. - Number of characters readline reports are in a line is 118. - Number of characters curses thinks are in a line is 118. - Number of characters environment thinks are in a line is 118 (COLUMNS). - Number of lines gdb thinks are in a page is 27. - Number of lines readline reports are in a page is 27. - Number of lines curses thinks are in a page is 27. - Number of lines environment thinks are in a page is 27 (LINES). - ... - - And for TERM=ansi: - ... - $ TERM=ansi gdb -ex "maint info screen" - Number of characters gdb thinks are in a line is 117. - Number of characters readline reports are in a line is 116. - Number of characters curses thinks are in a line is 118. - Number of characters environment thinks are in a line is 118 (COLUMNS). - Number of lines gdb thinks are in a page is 27. - Number of lines readline reports are in a page is 27. - Number of lines curses thinks are in a page is 27. - Number of lines environment thinks are in a page is 27 (LINES). - ... - - [ The fact that we have "characters readline reports are in a line is 116" is - is due to gdb making readline adjust twice for the lack of auto-wrap, this is - PR cli/30346. - - Likewise we can detect tui/30337 by doing a resize in TUI mode and doing - "maint info screen": - ... - Number of characters characters curses thinks are in a line is 110. - Number of characters environment thinks are in a line is 111 (COLUMNS). ] - - And for TERM=ansi, with width and heigth set to 0: - ... - Number of characters gdb thinks are in a line is 4294967295 (unlimited). - Number of characters readline reports are in a line is 32766 (unlimited - 1). - Number of characters curses thinks are in a line is 118. - Number of characters environment thinks are in a line is 118 (COLUMNS). - Number of lines gdb thinks are in a page is 4294967295 (unlimited). - Number of lines readline reports are in a page is 32767 (unlimited). - Number of lines curses thinks are in a page is 27. - Number of lines environment thinks are in a page is 27 (LINES). - ... - - [ Note that when doing a resize by say maximizing or de-maximizing a terminal, - all reported values are updated, except for curses when not in TUI mode. - - Maybe that means there's a bug. If not, then maybe we should not print - the curses lines unless in TUI mode, or annotate those lines such that it's - clear that the values may be not up-to-date. ] - - I'd like to use this command in the regression test for PR cli/30346. - - Tested on x86_64-linux. - - Reviewed-By: Eli Zaretskii - Reviewed-By: Tom Tromey - -2023-04-21 Tom Tromey - - Fix -Wmaybe-uninitialized warning in opcodes/i386-dis.c - A recent change in opcodes/i386-dis.c caused a build failure on my - x86-64 Fedora 36 system, which uses: - - $ gcc --version - gcc (GCC) 12.2.1 20221121 (Red Hat 12.2.1-4) - [...] - - The error is: - - ../../binutils-gdb/opcodes/i386-dis.c: In function ‘OP_J’: - ../../binutils-gdb/opcodes/i386-dis.c:12705:22: error: ‘val’ may be used uninitialized [-Werror=maybe-uninitialized] - 12705 | disp = val & 0x8000 ? val - 0x10000 : val; - | ~~~~^~~~~~~~ - - This patch fixes the warning. - - opcodes/ChangeLog - 2023-04-21 Tom Tromey - - * i386-dis.c (OP_J): Check result of get16. - -2023-04-21 Tom Tromey - - Use entry values for 32-bit PPC struct return - AdaCore has a local patch for PPC "finish", but last year, Ulrich - Weigand pointed out that this patch was incorrect. It may work for - simple functions like the one in the internal test, but nothing - guarantees that r3 will be preserved by the callee, so checking r3 on - exit is not always correct. - - This patch fixes the problem using the same approach as PPC64: use the - entry value of r3, if available. Ulrich confirmed this matches the - PPC32 ABI. - -2023-04-21 Tom Tromey - - Handle erroneous DW_AT_call_return_pc - On PPC64, with the test case included in an earlier patch, we found - that "finish" would still not correctly find the return value via - entry values. - - The issue is simple. The compiler emits: - - 0x00000000100032b8 <+28>: bl 0x1000320c - 0x00000000100032bc <+32>: nop - 0x00000000100032c0 <+36>: li r9,42 - - ... but the DWARF says: - - <162a> DW_AT_call_return_pc: 0x100032c0 - - That is, the declared return PC is one instruction past the actual - return PC. - - This patch adds a new arch hook to handle this scenario, and - implements it for PPC64. Some care is taken so that GDB will continue - to work if this compiler bug is fixed. A GCC patch is here: - - https://gcc.gnu.org/pipermail/gcc-patches/2023-March/613336.html - - No check for 'nop' is done, as subsequent discussion revealed that the - linker might replace this with another instruction. - -2023-04-21 Tom Tromey - - Handle function descriptors in call_site_target - call_site_target::iterate_over_addresses may look up a minimal symbol. - On platforms like PPC64 that use function descriptors, this may find - an unexpected address. The fix is to use gdbarch_convert_from_func_ptr_addr - to convert from a function descriptor to the address recorded at the - call site. - - I've added a new test case that is based on the internal AdaCore test - that provoked this bug. However, I'm unable to test it as-is on - PPC64. - -2023-04-21 Jan Beulich - - x86: drop (explicit) BFD64 dependency from disassembler - get64() is unreachable when !BFD64 (due to a check relatively early in - print_insn()). Let's avoid the associated #ifdef-ary (or else we should - extend it to remove more dead code). - - x86: drop use of setjmp() from disassembler - With the longjmp() uses all gone, the setjmp() isn't necessary anymore - either. - -2023-04-21 Jan Beulich - - x86: change fetch error handling for get() - Make them return boolean and convert FETCH_DATA() uses to fetch_code(). - With this no further users of FETCH_DATA() remain, so the macro and its - backing function are dropped as well. - - Leave value types as they were for the helper functions, even if I don't - think that beyond get64() use of bfd_{,signed_}vma is really necessary. - With type change of "disp" in OP_E_memory(), change the 2nd parameter of - print_displacement() to a signed type as well, though (eliminating the - need for a local variable of signed type). This also eliminates the need - for custom printing of '-' in Intel syntax displacement expressions. - - While there drop forward declarations which aren't really needed. - -2023-04-21 Jan Beulich - - x86: change fetch error handling when processing operands - Make the handler functions all return boolean and convert FETCH_DATA() - uses to fetch_code(). - - x86: change fetch error handling in get_valid_dis386() - Introduce a special error indicator node, for the sole (real) caller - to recognize and act upon. - - x86: change fetch error handling in ckprefix() - Use a tristate (enum) return value type to be able to express all three - cases which are of interest to the (sole) caller. This also allows doing - away with the abuse of "rex_used". - -2023-04-21 Jan Beulich - - x86: change fetch error handling in top-level function - ... and its direct helper get_sib(). Using setjmp()/longjmp() for fetch - error handling is problematic, as per - https://sourceware.org/pipermail/binutils/2023-March/126687.html. Start - using more conventional error handling instead. - - Also introduce a fetch_modrm() helper, for subsequent re-use. - -2023-04-21 Jan Beulich - - x86: move fetch error handling into a helper function - ... such that it can be used from other than the setjmp() error handling - path. - - Since I'd like the function's parameter to be pointer-to-const, two - other functions need respective constification then, too (along with - needing to be forward-declared). - -2023-04-21 Jan Beulich - - bfd: fix STRICT_PE_FORMAT build - A semicolon was missing and "name" needs to be pointer-to-const. While - adding "const" there, also add it for "sec". - -2023-04-21 Lifang Xia - - RISC-V: Optimize relaxation of gp with max_alignment. - This should be the first related issue, which posted in riscv-gnu-toolchain, - https://github.com/riscv-collab/riscv-gnu-toolchain/issues/497 - - If the output sections are not between gp and the symbol, then their alignments - shouldn't affect the gp relaxation. However, this patch improves this idea - even more, it limits the range to the gp+-2k, which means only the output - section which are in the [gp-2K, gp+2K) range need to be considered. - - Even if the output section candidates may be different for each relax passes, - the symbol that can be relaxed ar this round will not be truncated at next - round. That is because this round you can do relaxation which means that the - section where the symbol is located is within the [gp-2K, gp+2K) range, so all - the output section alignments between them should be considered. In other - words, if the alignments between them may cause truncated, then we should - already preserve the size and won't do the gp relaxation this time. - - This patch can resolve the github issue which mentioned above, and also passed - all gcc/binutils regressions of riscv-gnu-toolchain, so should be worth and - safe enough to commit. - - Originally, this patch also do the same optimization for the call relaxations, - https://sourceware.org/pipermail/binutils/2022-October/123918.html - But just in case there is something that has not been considered, we only - deal with the gp relaxation at this time. - - bfd/ - * elfnn-riscv.c (riscv_elf_link_hash_table): Added new bfd_vma, - max_alignment_for_gp. It is used to record the maximum alignment of - the output sections, which are in the [gp-2K, gp+2k) range. - (riscv_elf_link_hash_table_create): Init max_alignment_for_gp to -1. - (_bfd_riscv_get_max_alignment): Added new parameter, gp. If gp is - zero, then all the output section alignments are possible candidates; - Otherwise, only the output sections which are in the [gp-2K, gp+2K) - range need to be considered. - (_bfd_riscv_relax_lui): Called _bfd_riscv_get_max_alignment with the - non-zero gp if the max_alignment_for_gp is -1. - (_bfd_riscv_relax_pc): Likewise. - (_bfd_riscv_relax_section): Record the first input section, so that - we can reset the max_alignment_for_gp for each repeated relax passes. - ld/ - * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated. - * testsuite/ld-riscv-elf/relax-max-align-gp.*: New testcase. It fails - without this patch. - -2023-04-21 Jan Beulich - - ld: add missing period after @xref - At least older versions of one of the doc generation tools complain - (warn) about it missing. - -2023-04-21 Alan Modra - - Keeping track of rs6000-coff archive element pointers - rs6000-coff archives use a linked list of file offsets, where each - element points to the next element. The idea is to allow updating of - large archives quickly without rewriting the whole archive. (binutils - ar does not do this.) Unfortunately this is an easy target for - fuzzers to create an archive that will cause ar or any other tool - processing archives to hang. I'd implemented guards against pointing - back to the previous element, but of course that didn't last long. - - So this patch implements a scheme to keep track of file offset ranges - used by elements as _bfd_read_ar_hdr is called for each element. See - the add_range function comment. I needed a place to stash the list, - so chose the obvious artdata.tdata backend extension to archive's - tdata, already used by xcoff. That involved a little cleanup, because - while it would be possible to continue using different artdata.tdata - for the big and small archives, it's nicer to use a union. - - If anyone is concerned this list of element ranges might grow large - and thus significantly slow down the tools, adjacent ranges are - merged. In fact something like "ar t" will only ever have one range - on xcoff archives generated by binutils/ar. I agree there might still - be a problem with ld random element access via the armap. - - include/ - * coff/xcoff.h (SIZEOF_AR_FILE_HDR): Use sizeof. - (SIZEOF_AR_FILE_HDR_BIG, SIZEOF_AR_HDR, SIZEOF_AR_HDR_BIG): Likewise. - (struct ar_ranges, struct xcoff_artdata): New. - (x_artdata): Define. - (xcoff_big_format_p): Rewrite. - (xcoff_ardata, xcoff_ardata_big): Delete. - bfd/ - * coff-rs6000.c: Replace uses of xcoff_ardata and - xcoff_ardata_big throughout file. - (_bfd_xcoff_archive_p): Adjust artdata.tdata allocation. - (add_range): New function. - (_bfd_xcoff_read_ar_hdr): Use it here. Fix memory leak. - (_bfd_xcoff_openr_next_archived_file): Remove old sanity - checks. Set up range for header. - (xcoff_write_archive_contents_old): Make the temporary - artdata.tdata used here to pass info down to - _bfd_compute_and_write_armap a struct xcoff_artdata. - (xcoff_write_archive_contents_big): Likewise. - * coff64-rs6000.c: Replace uses of xcoff_ardata and - xcoff_ardata_big throughout file. - (xcoff64_archive_p): Adjust artdata.tdata allocation. - -2023-04-21 Alan Modra - - Delete struct artdata archive_head - This element is unused. Ideally we'd be moving archive_head and - other archive specific fields from struct bfd to here, but that's a - much larger change than this little bit of cleanup. - - * libbfd-in.h (struct artdata): Delete archive_head. - * libbfd.h: Regenerate. - * archive.c, - * coff-rs6000.c, - * coff64-rs6000.c: Delete comments mentioning artdata archive_head. - -2023-04-21 GDB Administrator - - Automatic date update in version.in - -2023-04-20 Nick Clifton - - Add a SECURITY.txt file describing the GNU Binutils' project's stance on security related bugs. - -2023-04-20 Jan Beulich - - x86: adjust an ILP32 testcase using .insn - In commit 6967633c8b49 ("x86: convert testcases to use .insn") an ILP32 - clone of a testcase was missed in the set of tests needing --divide - added. - - Reported-by: Clément Chigot - -2023-04-20 GDB Administrator - - Automatic date update in version.in - -2023-04-20 Alan Modra - - sh4-linux segfaults running ld testsuite - Segmentation fault - FAIL: pr22269-1 (static pie undefined weak) - and others running "visibility (hidden undef)" tests - - No code has any right to access bfd_link_hash_entry u.def without - first checking the type, and SYMBOL_REFERENCES_LOCAL isn't sufficient. - - * elf32-sh.c (sh_elf_finish_dynamic_symbol): Don't use relative - relocs in GOT unless symbol is defined. - -2023-04-20 Alan Modra - - PR30343 infrastructure - Make ldemul_before_plugin_all_symbols_read more useful. - - * ldlang.c (lang_process): Move call to - ldemul_before_plugin_all_symbols_read outside BFD_SUPPORTS_PLUGINS. - Allow backends to add to gc_sym_list before handling entry sym. - * ldelf.c (ldelf_before_plugin_all_symbols_read): Test - lto_plugin_active. - -2023-04-20 Alan Modra - - ubsan: signed integer overflow in display_debug_lines_raw - This one was caused by me unnecessarily promoting an "int adv" to - "int64_t adv". The expression overflowing was 4259 + 9223372036854775807 - with the left number being unsigned int. - - * dwarf.h (DWARF2_Internal_LineInfo): Replace unsigned short - with uint16_t and unsigned char with uint8_t. Make li_line_base - an int8_t. - * dwarf.c (display_debug_lines_raw): Revert "adv" back to an int. - -2023-04-20 Alan Modra - - Yet another out-of-memory fuzzed object - Do I care about out of memory conditions triggered by fuzzers? Not - much. Your operating system ought to be able to handle it by killing - the memory hog. Oh well, this one was an element of a coff-alpha - archive that said it was a little less that 2**64 in size. The - coff-alpha compression scheme expands at most 8 times, so we can do - better in bfd_get_file_size. - - * bfdio.c (bfd_get_file_size): Assume elements in compressed - archive can only expand a maximum of eight times. - * coffgen.c (_bfd_coff_get_external_symbols): Sanity check - size of symbol table agains file size. - -2023-04-20 Alan Modra - - buffer overflow in print_symname - * ecoff.c (_bfd_ecoff_slurp_symbolic_info): Zero terminate - string sections. - -2023-04-19 Indu Bhagat - - libsframe: minor formatting fixes in sframe_encoder_write_fre - libsframe/ - * sframe.c (sframe_encoder_write_fre): Formatting fixes for - readability. - - libsframe: use consistent function argument names - libsframe/ - * sframe.c (sframe_decoder_get_header): Use consistent function - arg names. - (sframe_decoder_free): Likewise. - (sframe_encode): Use more appropriate var name. - -2023-04-19 Indu Bhagat - - sframe: correct some typos - include/ - * sframe.h: Correct a typo. - - libsframe/ - * sframe.c: Likewise. - -2023-04-19 Indu Bhagat - - libsframe: use return type of bool for predicate functions - libsframe/ - * sframe.c (sframe_header_sanity_check_p): Change return type to - bool. - (sframe_fre_sanity_check_p): Likewise. - - gas: sframe: fix comment - - gas: sframe: use ATTRIBUTE_UNUSED consistently - gas/ - * gen-sframe.c (sframe_set_version): Use ATTRIBUTE_UNUSED - consistently. - (output_sframe): Likewise. - (sframe_set_fre_info): Remove the usage of ATTRIBUTE_UNUSED. - -2023-04-19 Tom Tromey - - Remove adjust_type_signedness - I happened across adjust_type_signedness, which may be used to modify - a type when printing an Ada value. Modifying a type like this is a - bad idea -- they should normally be considered immutable. Removing - this function still passes both the dejagnu and internal AdaCore - tests, though, so this patch drops it. - - As this was reviewed internally, and only affect Ada, I am checking it - in. - -2023-04-19 Nick Clifton - - Fix: readelf: loc_offset XX too big - PR 30355 - * dwarf.c (read_and_display_attr_value): Correctly handle DW_loclistx attributes that index a version 5 .debug_loclists section. - -2023-04-19 Jan Beulich - - gas: document that get_symbol_name() can clobber the input buffer - Callers which want to make further parsing attempts at the buffer passed - to the function need to be aware that due to the potential of string - concatenation the input buffer may be altered in ways beyond what can be - undone by putting back at *input_line_pointer the character that the - function returns. - -2023-04-19 Jan Beulich - - x86: parse_register() must not alter the parsed string - This reverts the code change done by 100f993c53a5 ("x86: Check - unbalanced braces in memory reference"), which wrongly identified - e87fb6a6d0cd ("x86/gas: support quoted address scale factor in AT&T - syntax") as the root cause of PR gas/30248. (The testcase is left in - place, no matter that it's at best marginally useful in that shape.) - - The problem instead is that parse_register() alters the string handed to - it, thus breaking valid assumptions in subsequent parsing code. Since - the function's behavior is a result of get_symbol_name()'s, make a copy - of the incoming string before invoking that function. - - Like for parse_real_register() follow the model of strtol() et al: input - string is const-qualified to signal that the string isn't altered, but - the returned "end" pointer is not const-qualified, requiring const to be - cast away (which generally is a bad idea, but the alternative would - again be more convoluted code). - -2023-04-19 Jan Beulich - - x86: parse_real_register() does not alter the parsed string - Follow the model of strtol() et al - input string is const-qualified to - signal that the string isn't altered, but the returned "end" pointer is - not const-qualified, requiring const to be cast away (which generally is - a bad idea, but the alternative would be more convoluted code). - -2023-04-19 Nick Clifton - - Updated Hungarian translation for the gprof directory - -2023-04-19 GDB Administrator - - Automatic date update in version.in - -2023-04-18 Simon Marchi - - gdb: re-format Python code with black 23 - Change-Id: I849d10d69c254342bf01e955ffe62a2b60f9de4b - -2023-04-18 Carl Love - - PowerPC: fix _Float128 type output string - PowerPC supports two 128-bit floating point formats, the IBM long double - and IEEE 128-bit float. The issue is the DWARF information does not - distinguish between the two. There have been proposals of how to extend - the DWARF information as discussed in - - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104194 - - but has not been fully implemented. - - GCC introduced the _Float128 internal type as a work around for the issue. - The workaround is not transparent to GDB. The internal _Float128 type - name is printed rather then the user specified long double type. This - patch adds a new gdbarch method to allow PowerPC to detect the GCC - workaround. The workaround checks for "_Float128" name when reading the - base typedef from the die_info. If the workaround is detected, the type - and format fields from the _Float128 typedef are copied to the long - double typedef. The same is done for the complex long double typedef. - - This patch fixes 74 regression test failures in - gdb.base/whatis-ptype-typedefs.exp on PowerPC with IEEE float 128 as the - default on GCC. It fixes one regression test failure in - gdb.base/complex-parts.exp. - - The patch has been tested on Power 10 where GCC defaults to IEEE Float - 128-bit and on Power 10 where GCC defaults to the IBM 128-bit float. The - patch as also been tested on X86-64 with no new regression failures. - -2023-04-18 mengqinggang - - Symbols with GOT relocatios do not fix adjustbale - gas - * config/tc-loongarch.c (loongarch_fix_adjustable): Symbols with GOT relocatios do not fix adjustbale. - * testsuite/gas/loongarch/macro_op_large_abs.d: Regenerated. - * testsuite/gas/loongarch/macro_op_large_pc.d: Regenerated. - ld - * testsuite/ld-loongarch-elf/macro_op.d: Regenerated. - - -2023-04-18 Thomas Koenig - - Assembler Internal Docs: Describe handling of opcodes for relaxation a bit better. - -2023-04-18 Kito Cheng - - RISC-V: Cache the latest mapping symbol and its boundary. - This issue was reported from https://github.com/riscv-collab/riscv-gnu-toolchain/issues/1188 - - Current flow: - 1) Scan any mapping symbol less than this instruciton. - 2) If not found, did a backward search. - - The flow seems not big issue, let run an example here: - - $x: - 0x0 a <--- Found at step 1 - 0x4 b <--- Not found in step 1, but found at step 2 - 0x8 c <--- Not found in step 1, but found at step 2 - $d - 0x12 .word 1234 <-- Found at step 1 - - The instruciton didn't have the same address with mapping symbol will - still did backward search again and again. - - So the new flow is: - 1) Use the last mapping symbol status if the address is still within the range - of the current mapping symbol. - 2) Scan any mapping symbol less than this instruciton. - 3) If not found, did a backward search. - 4) If a proper mapping symbol is found in either step 2 or 3, find its boundary, - and cache that. - - Use the same example to run the new flow again: - - $x: - 0x0 a <--- Found at step 2, the boundary is 0x12 - 0x4 b <--- Cache hit at step 1, within the boundary. - 0x8 c <--- Cache hit at step 1, within the boundary. - $d - 0x12 .word 1234 <-- Found at step 2, the boundary is the end of section. - - The disassemble time of the test cases has been reduced from ~20 minutes to ~4 - seconds. - - opcode/ChangeLog - PR 30282 - * riscv-dis.c (last_map_symbol_boundary): New. - (last_map_state): New. - (last_map_section): New. - (riscv_search_mapping_symbol): Cache the result of latest - mapping symbol. - -2023-04-18 Alan Modra - - objdump use of uninitialised value in pr_string_field - PR 30365 - * rdcoff.c (parse_coff_struct_type): Leave bitsize zero when no - auxents. - - objdump buffer overflow in fetch_indexed_string - PR 30361 - * dwarf.c (fetch_indexed_string): Sanity check string index. - -2023-04-18 GDB Administrator - - Automatic date update in version.in - -2023-04-17 Vladimir Mezentsev - - gprofng: 30360 Seg. Fault when application uses std::thread - We interpose a lot of libC functions (dlopen, fork, pthread_create, etc.). - Some of these functions have versions. For example, - - % nm -D /lib64/gprofng/libgp-collector.so | grep thread_create@ | sort - 000000000004b420 T pthread_create@GLIBC_2.34 - 000000000004b490 T pthread_create@GLIBC_2.17 - 000000000004b500 T pthread_create@GLIBC_2.2.5 - 000000000004b570 T pthread_create@GLIBC_2.1 - 000000000004b5e0 T pthread_create@GLIBC_2.0 - - Our library does not set the default version for symbols. - This is correct because we don't know which libC will be used. - - gcc and g++ links differently the version symbols when the default version is - not set. c-linker is using our pthread_create@GLIBC_2.34 and c++-linker is using - our pthread_create@GLIBC_2.0 by default. - - The current implementation of the interposed functions is: - If we are in our pthread_create@GLIBC_, - we use dlvsym (dlflag, "pthread_create", "GLIBC_") to find and call - the same function from libC. - In the test from PR 30360, pthread_create@GLIBC_2.0 is not in the current libC. - We need to call the default version symbol from libC. - - gprofng/ChangeLog - 2023-04-16 Vladimir Mezentsev - - PR gprofng/30360 - * libcollector/iotrace.c: Find and call a default libC version symbol. - * libcollector/dispatcher.c: Likewise. - * libcollector/iotrace.c: Likewise. - * libcollector/linetrace.c: Likewise. - * libcollector/mmaptrace.c: Likewise. - * libcollector/synctrace.c: Likewise. - * libcollector/collector.h (REAL_DCL): Remove an unused argument. - -2023-04-17 Vladimir Mezentsev - - gprofng: Update documentation - This patch addresses bugzilla 29521: - Bug 29521 - [docs] man pages are not in the release tarball - - The dependence on help2man to create the man pages has been eliminated. - All man pages are now written in Texinfo. Texi2pod and pod2man are used - to generate the man pages from the source. - - The user guide has been significantly expanded. It also includes all - the man pages. These are formatted appropriately in the INFO, PDF, and - HTML formats. - - The index in the user guide has been enhanced to include an overview - of all options and commands that have been documented so far. - - The work on the documentation has not been completed, but this is - a significant step forward. - - gprofng/ChangeLog - 2023-04-15 Vladimir Mezentsev - - PR gprofng/29521 - * doc/Makefile.am: Build documentation. - * doc/gprofng.texi: Update documentation. - * doc/version.texi: Likewise. - * src/Makefile.am: Move the man pages generation to doc/Makefile.am. - * gp-display-html/Makefile.am: Likewise. - * doc/gp-archive.texi: New file. - * doc/gp-collect-app.texi: New file. - * doc/gp-display-html.texi: New file. - * doc/gp-display-src.texi: New file. - * doc/gp-display-text.texi: New file. - * doc/gp-macros.texi: New file. - * doc/gprofng_ug.texi: New file. - * doc/Makefile.in: Rebuild. - * gp-display-html/Makefile.in: Rebuild. - * src/Makefile.in" Rebuild. - -2023-04-17 Tom Tromey - - Remove some unnecessary casts from ada-lang.c - I noticed some unnecessary casts to LONGEST in ada-lang.c. This patch - removes the ones I think are very clearly not needed. I'm checking - this in as obvious. - -2023-04-17 Simon Marchi - - gdb/amdgpu: add follow fork and exec support - Prior to this patch, it's not possible for GDB to debug GPU code in fork - children or after an exec. The amd-dbgapi target attaches to processes - when an inferior appears due to a "run" or "attach" command, but not - after a fork or exec. This patch adds support for that, such that it's - possible to for an inferior to fork and for GDB to debug the GPU code in - the child. - - To achieve that, use the inferior_forked and inferior_execd observers. - - In the case of fork, we have nothing to do if `child_inf` is nullptr, - meaning that GDB won't debug the child. We also don't attach if the - inferior has vforked. We are already attached to the parent's address - space, which is shared with the child, so trying to attach would cause - problems. And anyway, the inferior can't do anything other than exec or - exit, it certainly won't start GPU kernels before exec'ing. - - In the case of exec, we detach from the exec'ing inferior and attach to - the following inferior. This works regardless of whether they are the - same or not. If they are the same, meaning the execution continues in - the existing inferior, we need to do a detach/attach anyway, as - amd-dbgapi needs to be aware of the new address space created by the - exec. - - Note that we use observers and not target_ops::follow_{fork,exec} here. - When the amd-dbgapi target is compiled in, it will attach (in the - amd_dbgapi_process_attach sense, not the ptrace sense) to native - inferiors when they appear, but won't push itself on the inferior's - target stack just yet. It only pushes itself if the inferior - initializes the ROCm runtime. So, if a non-GPU-using inferior calls - fork, an amd_dbgapi_target::follow_fork method would not get called. - Same for exec. A previous version of the code had the amd-dbgapi target - pushed all the time, in which case we could use the target methods. But - we prefer having the target pushed only when necessary, it's less - intrusive when doing native debugging that doesn't involve the GPU. - - Change-Id: I5819c151c371120da8bab2fa9cbfa8769ba1d6f9 - Reviewed-By: Pedro Alves - -2023-04-17 Simon Marchi - - gdb: switch to right inferior in fetch_inferior_event - The problem explained and fixed in the previous patch could have also - been fixed by this patch. But I think it's good change anyhow, that - could prevent future bugs, so here it is. - - fetch_inferior_event switches to an arbitrary (in practice, the first) inferior - of the process target of the inferior used to fetch the event. The idea is - that the event handling code will need to do some target calls, so we want to - switch to an inferior that has target target. - - However, you can have two inferiors that share a process target, but with one - inferior having an additional target on top: - - inf 1 inf 2 - ----- ----- - another target - process target process target - exec exec - - Let's say inferior 2 is selected by do_target_wait and returns an event that is - really synthetized by "another target". This "another target" could be a - thread or record stratum target (in the case explained by the previous patch, - it was the arch stratum target, but it's because the amd-dbgapi abuses the arch - layer). fetch_inferior_event will then switch to the first inferior with - "process target", so inferior 1. handle_signal_stop then tries to fetch the - thread's registers: - - ecs->event_thread->set_stop_pc - (regcache_read_pc (get_thread_regcache (ecs->event_thread))); - - This will try to get the thread's register by calling into the current target - stack, the stack of inferior 1. This is problematic because "another target" - might have a special fetch_registers implementation. - - I think it would be a good idea to switch to the inferior for which the - even was reported, not just some inferior of the same process target. - This will ensure that any target call done before we eventually call - context_switch will be done on the full target stack that reported the - event. - - Not all events are associated to an inferior though. For instance, - TARGET_WAITKIND_NO_RESUMED. In those cases, some targets return - null_ptid, some return minus_one_ptid (ideally the expected return value - should be clearly defined / documented). So, if the ptid returned is - either of these, switch to an arbitrary inferior with that process - target, as before. - - Change-Id: I1ffc8c1095125ab591d0dc79ea40025b1d7454af - Reviewed-By: Pedro Alves - -2023-04-17 Simon Marchi - - gdb: make regcache::raw_update switch to right inferior - With the following patch, which teaches the amd-dbgapi target to handle - inferiors that fork, we end up with target stacks in the following - state, when an inferior that does not use the GPU forks an inferior that - eventually uses the GPU. - - inf 1 inf 2 - ----- ----- - amd-dbgapi - linux-nat linux-nat - exec exec - - When a GPU thread from inferior 2 hits a breakpoint, the following - sequence of events would happen, if it was not for the current patch. - - - we start with inferior 1 as current - - do_target_wait_1 makes inferior 2 current, does a target_wait, which - returns a stop event for an amd-dbgapi wave (thread). - - do_target_wait's scoped_restore_current_thread restores inferior 1 as - current - - fetch_inferior_event calls switch_to_target_no_thread with linux-nat - as the process target, since linux-nat is officially the process - target of inferior 2. This makes inferior 1 the current inferior, as - it's the first inferior with that target. - - In handle_signal_stop, we have: - - ecs->event_thread->suspend.stop_pc - = regcache_read_pc (get_thread_regcache (ecs->event_thread)); - - context_switch (ecs); - - regcache_read_pc executes while inferior 1 is still the current one - (because it's before the `context_switch`). This is a problem, - because the regcache is for a ptid managed by the amd-dbgapi target - (e.g. (12345, 1, 1)), a ptid that does not make sense for the - linux-nat target. The fetch_registers target call goes directly - to the linux-nat target, which gets confused. - - We would then get an error like: - - Couldn't get extended state status: No such process. - - ... since linux-nat tries to do a ptrace call on tid 1. - - GDB should switch to the inferior the ptid belongs to before doing the - target call to fetch registers, to make sure the call hits the right - target stack (it should be handled by the amd-dbgapi target in this - case). In fact the following patch does this change, and it would be - enough to fix this specific problem. - - However, I propose to change regcache to make it switch to the right - inferior, if needed, before doing target calls. That makes the - interface as a whole more independent of the global context. - - My first attempt at doing this was to find an inferior using the process - stratum target and the ptid that regcache already knows about: - - gdb::optional restore_thread; - inferior *inf = find_inferior_ptid (this->target (), this->ptid ()); - if (inf != current_inferior ()) - { - restore_thread.emplace (); - switch_to_inferior_no_thread (inf); - } - - However, this caused some failures in fork-related tests and gdbserver - boards. When we detach a fork child, we may create a regcache for the - child, but there is no corresponding inferior. For instance, to restore - the PC after a displaced step over the fork syscall. So - find_inferior_ptid would return nullptr, and - switch_to_inferior_no_thread would hit a failed assertion. - - So, this patch adds to regcache the information "the inferior to switch - to to makes target calls". In typical cases, it will be the inferior - that matches the regcache's ptid. But in some cases, like the detached - fork child one, it will be another inferior (in this example, it will be - the fork parent inferior). - - The problem that we witnessed was in regcache::raw_update specifically, - but I looked for other regcache methods doing target calls, and added - the same inferior switching code to raw_write too. - - In the regcache constructor and in get_thread_arch_aspace_regcache, - "inf_for_target_calls" replaces the process_stratum_target parameter. - We suppose that the process stratum target that would be passed - otherwise is the same that is in inf_for_target_calls's target stack, so - we don't need to pass both in parallel. The process stratum target is - still used as a key in the `target_pid_ptid_regcache_map` map, but - that's it. - - There is one spot that needs to be updated outside of the regcache code, - which is the path that handles the "restore PC after a displaced step in - a fork child we're about to detach" case mentioned above. - - regcache_test_data needs to be changed to include full-fledged mock - contexts (because there now needs to be inferiors, not just targets). - - Change-Id: Id088569ce106e1f194d9ae7240ff436f11c5e123 - Reviewed-By: Pedro Alves - -2023-04-17 Simon Marchi - - gdb: add maybe_switch_inferior function - Add the maybe_switch_inferior function, which ensures that the given - inferior is the current one. Return an instantiated - scoped_restore_current_thread object only we actually needed to switch - inferior. - - Returning a scoped_restore_current_thread requires it to be - move-constructible, so give it a move constructor. - - Change-Id: I1231037102ed6166f2530399e8257ad937fb0569 - Reviewed-By: Pedro Alves - -2023-04-17 Simon Marchi - - gdb: remove regcache::target - The regcache class takes a process_stratum_target and then exposes it - through regcache::target. But it doesn't use it itself, suggesting it - doesn't really make sense to put it there. The only user of - regcache::target is record_btrace_target::fetch_registers, but it might - as well just get it from the current target stack. This simplifies a - little bit a patch later in this series. - - Change-Id: I8878d875805681c77f469ac1a2bf3a508559a62d - Reviewed-By: Pedro Alves - -2023-04-17 Simon Marchi - - gdb: add inferior_forked observable - In the upcoming patch to support fork in the amd-dbgapi target, the - amd-dbgapi target will need to be notified of fork events through an - observer, to attach itself (attach in the amd-dbgapi sense, not ptrace - sense) to the new inferior / process. - - The reason that this can't be done through target_ops::follow_fork is - that the amd-dbgapi target isn't pushed on the inferior's target stack - right away. It attaches itself to the process and only pushes itself on - its target stack if and when the inferior initializes the ROCm runtime. - - If an inferior that is not using the ROCm runtime forks, we want to be - notified of it, so we can attach to the child, and catch if the child - starts using the ROCm runtime. - - So, add a new observable and notify it in follow_fork_inferior. It will - be used later in this series. - - Change-Id: I67fced5a9cba6d5da72b9c7ea1c8397644ca1d54 - Reviewed-By: Pedro Alves - -2023-04-17 Simon Marchi - - gdb: pass execing and following inferior to inferior_execd observers - The upcoming patch to support exec in the amd-dbgapi target needs to - detach amd-dbgapi from the inferior doing the exec and attach amd-dbgapi - to the inferior continuing the execution. They may or may not be the - same, depending on the `set follow-exec-mode` setting. But even if they - are the same, we need to do the detach / attach dance. - - With the current observable signature, the observers only receive the - inferior in which execution continues (the "following" inferior). - - Change the signature to pass both inferiors, and update all existing - observers. - - Change-Id: I259d1ea09f70f43be739378d6023796f2fce2659 - Reviewed-By: Pedro Alves - -2023-04-17 Tom Tromey - - Add 128-bit integer support to the Ada parser - This adds support for 128-bit integers to the Ada parser. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30188 - -2023-04-17 Tom Tromey - - Remove some Ada parser helper functions - These helper functions in the Ada parser don't seem all that - worthwhile to me, so this patch removes them. - - Add overload of fits_in_type - This adds an overload of fits_in_type that accepts a gdb_mpz. A - subsequent patch will use this. - -2023-04-17 Tom Tromey - - Add 128-bit integer support to the Rust parser - This adds support for 128-bit integers to the Rust parser. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=21185 - -2023-04-17 Tom Tromey - - Convert long_const_operation to use gdb_mpz - This changes long_const_operation to use gdb_mpz for its storage. - -2023-04-17 Tom Tromey - - Additions to gdb_mpz - In preparation for adding more 128-bit support to gdb, a few additions - to gdb_mpz are needed. - - First, this adds a new 'as_integer_truncate' method. This method - works like 'as_integer' but does not require the value to fit in the - target type -- it just truncates. - - Second, gdb_mpz::export_bits is changed to handle the somewhat unusual - situation of zero-length types. This can happen for a Rust '()' type; - but I think other languages have zero-bit integer types as well. - - Finally, this adds some operator== overloads. - -2023-04-17 Nick Clifton - - Make the .rsrc section read only. - PR 30142 - * peXXigen.c (_bfd_XXi_swap_scnhdr_out): Do not force the .rsrc section to be writeable. - * rescoff.c (write_coff_file): Add the SEC_READONLY flag to the .rsrc section. - -2023-04-17 Tom de Vries - - [gdb/symtab] Handle empty file name in .debug_line section - With DWARF 5, it's possible to produce an empty file name in the File Name - Table of the .debug_line section: - ... - The File Name Table (offset 0x112, lines 1, columns 2): - Entry Dir Name - 0 1 (indirect line string, offset: 0x2d): - ... - - Currently, when gdb reads an exec containing such debug info, it segfaults: - ... - Thread 1 "gdb" received signal SIGSEGV, Segmentation fault. - 0x000000000072cd38 in dwarf2_start_subfile (cu=0x2badc50, fe=..., lh=...) at \ - gdb/dwarf2/read.c:18716 - 18716 if (!IS_ABSOLUTE_PATH (filename) && dirname != NULL) - ... - because read_direct_string transforms "" into a nullptr, and we end up - dereferencing the nullptr. - - Note that the behaviour of read_direct_string has been present since repo - creation. - - Fix this in read_formatted_entries, by transforming nullptr filenames in to "" - filenames. - - Tested on x86_64-linux. - - Reviewed-By: Tom Tromey - - PR symtab/30357 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30357 - -2023-04-17 Nick Clifton - - Add support for the .gnu.sgstubs section to the linker for ARM/ELF based targets. - PR 30354 - * emulparams/armelf.sh (OTHER_PLT_SECTIONS): Define in order to handle the .gnu.sgstubs section. - -2023-04-17 GDB Administrator - - Automatic date update in version.in - -2023-04-16 GDB Administrator - - Automatic date update in version.in - -2023-04-15 GDB Administrator - - Automatic date update in version.in - -2023-04-14 Andrew Burgess - - gdb/testsuite: accept script argument for mi_make_breakpoint_pending - This commit changes mi_make_breakpoint_pending to accept the 'script' - and 'times' arguments. - - I've then added a new test that makes use of 'scripts' in - gdb.mi/mi-pending.exp and gdb.mi/mi-dprintf-pending.exp. - - There is already a test in gdb.mi/mi-pending.exp that uses the 'times' - argument -- previously this argument was being ignored, but is now - used. - - Reviewed-By: Tom Tromey - -2023-04-14 Andrew Burgess - - gdb/testsuite: avoid {"} pattern in lib/mi-support.exp - Commit: - - commit c569a946f6925d3f210c3eaf74dcda56843350ef - Date: Fri Mar 24 10:45:37 2023 +0100 - - [gdb/testsuite] Fix unbalanced quotes in mi_expect_stop argument - - Introduced the use of {"} in mi-support.exp. There is absolutely - nothing wrong with this in any way. However, this is causing my - editor to get the syntax highlighting of this file wrong after this - point. - - Maybe the real answer is to use a better editor, or fix my current - editor.... but I'm hoping I can instead take the lazy approach of just - changing {"} to "\"", which is handled fine, and means exactly the - same as far as I understand it. - - There should be no change in what is tested after this commit. - - Reviewed-By: Tom Tromey - -2023-04-14 Luis Machado - - pauth: Create new feature string for pauth to prevent crashing older gdb's - Older gdb's (9, 10, 11 and 12) have a bug that causes them to crash whenever - a target reports the pauth feature string in the target description and also - provide additional register outside of gdb's known and expected feature - strings. - - This was fixed in gdb 13 onwards, but that means we're stuck with gdb's out - there that will crash on connection to the above targets. - - QEMU has postponed inclusion of the pauth feature string in version 8, and - instead we agreed to use a new feature name to prevent crashing those older - gdb's. - - Initially there was a plan to backport a trivial fix all the way to gdb 9, but - given QEMU's choice, this is no longer needed. - - This new feature string is org.gnu.gdb.aarch64.pauth_v2, and should be used - by all targets going forward, except native linux gdb and gdbserver, for - backwards compatibility with older gdb's/gdbserver's. - - gdb/gdbserver will still emit the old feature string for Linux since it doesn't - report additional system registers and thus doesn't cause a crash of older - gdb's. We can revisit this in the future once the problematic gdb's are likely - no longer in use. - - I've added some documentation to explain the situation. - -2023-04-14 Luis Machado - - debug registers: Add missing debug version entry for FEAT_Debugv8p8 - The Arm Architecture Reference Manual defines debug version 0b1010 for - FEAT_Debugv8p8. This is used to identify valid hardware debug registers. - - gdb currently only knows about versions up to FEAT_Debugv8p4. This patch - teaches gdb about this new version. - - No visible changes should happen as consequence of this patch, but in the - future gdb will be able to identify debug registers in newer hardware. - - Regression-tested on aarch64-linux Ubuntu 20.04/22.04. - -2023-04-14 Hui Li - - gdb/testsuite: Skip dump ihex for 64-bit address in gdb.base/dump.exp - (1) Description of problem - - In the current code, when execute the following test on LoongArch: - - $make check-gdb TESTS="gdb.base/dump.exp" - ``` - FAIL: gdb.base/dump.exp: dump array as value, intel hex - FAIL: gdb.base/dump.exp: dump struct as value, intel hex - FAIL: gdb.base/dump.exp: dump array as memory, ihex - FAIL: gdb.base/dump.exp: dump struct as memory, ihex - - ``` - These tests passed on the X86_64, - - (2) Root cause - - On LoongArch, variable intarray address 0x120008068 out of range for IHEX, - so dump ihex test failed. - - gdb.base/dump.exp has the following code to check 64-bit address - - ``` - # Check the address of a variable. If it is bigger than 32-bit, - # assume our target has 64-bit addresses that are not supported by SREC, - # IHEX and TEKHEX. We skip those tests then. - set max_32bit_address "0xffffffff" - set data_address [get_hexadecimal_valueof "&intarray" 0x100000000] - if {${data_address} > ${max_32bit_address}} { - set is64bitonly "yes" - } - ``` - - We check the "&intarray" on different target as follow: - - ``` - $gdb gdb/testsuite/outputs/gdb.base/dump/dump - ... - (gdb) start - ... - - On X86_64: - (gdb) print /x &intarray - $1 = 0x404060 - - On LoongArch: - (gdb) print /x &intarray - $1 = 0x120008068 - ``` - The variable address difference here is due to the link script - of linker. - - ``` - On X86_64: - $ld --verbose - ... - PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); - . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS; - - On LoongArch: - $ld --verbose - ... - PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x120000000)); - . = SEGMENT_START("text-segment", 0x120000000) + SIZEOF_HEADERS; - - ``` - - (3) How to fix - - Because 64-bit variable address out of range for IHEX, it's not an - functional problem for LoongArch. Refer to the handling of 64-bit - targets in this testsuite, use the "is64bitonly" flag to skip those - tests for the target has 64-bit addresses. - - Approved-By: Tom Tromey - -2023-04-14 Tom de Vries - - [gdb/testsuite] Add regression test for PR30325 - Add regression tests for PR30325, one for the asm window and one for the - source window. - - Use maint set tui-left-margin verbose to make the extend of the left margin - clear. - - Tested on x86_64-linux. - - Approved-By: Andrew Burgess - -2023-04-14 GDB Administrator - - Automatic date update in version.in - -2023-04-13 Tom Tromey - - Avoid double-free with debuginfod - PR gdb/29257 points out a possible double free when debuginfod is in - use. Aside from some ugly warts in the symbol code (an ongoing - issue), the underlying issue in this particular case is that elfread.c - seems to assume that symfile_bfd_open will return NULL on error, - whereas in reality it throws an exception. As this code isn't - prepared for an exception, bad things result. - - This patch fixes the problem by introducing a non-throwing variant of - symfile_bfd_open and using it in the affected places. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29257 - -2023-04-13 Claudiu Zissulescu - - arc: Update ARC specific linker tests. - All the tests are designed for a little-endian ARC system. Thus, - update the arc predicate in arc.exp, improve the matching pattern for - linker relaxation test, and add linker scripts to nps-1x tests. - - arc: Update ARC's CFI tests. - The double store/loads instructions (e.g. STD/LDD) are not baseline - ARC ISA. The same holds for some short instructions. Update the - tests to use base ARC ISA. - -2023-04-13 Claudiu Zissulescu - - arc: Update GAS test - -2023-04-13 Alan Modra - - Preserve a few more bfd fields in check_format_matches - AOUT and COFF targets set symcount and start_address in their object_p - functions. If these are used anywhere then it would pay to save and - restore them so that a successful match gets the values expected - rather than that for a later unsuccessful target match. - - * format.c (struct bfd_preserve): Move some fields. Add - symcount, read_only and start_address. - (bfd_preserve_save): Save.. - (bfd_preserve_restore): ..and restore.. - (bfd_reinit): ..and zero new fields. - -2023-04-13 Alan Modra - - Re: pe_ILF_object_p and bfd_check_format_matches - The last patch wasn't quite correct. bfd_preserve_restore also needs - to handle an in-memory to file backed transition, seen in a testcase - ILF object matching both pei-arm-little and pei-arm-wince-little. - There the first match is saved in preserve_match, and restored at the - end of the bfd_check_format_matches loop making the bfd in-memory. On - finding more than one match the function wants to restore the bfd back - to its original state with another bfd_preserve_restore call before - exiting with a bfd_error_file_ambiguously_recognized error. - - It is also not correct to restore abfd->iostream unless the iovec - changes. abfd->iostream is a FILE* when using cache_iovec, and if - the file has been closed and reopened the iostream may have changed. - - * format.c (io_reinit): New function. - (bfd_reinit, bfd_preserve_restore): Use it. - -2023-04-13 GDB Administrator - - Automatic date update in version.in - -2023-04-12 Tom de Vries - - [gdb/tui] Revert workaround in tui_source_window::show_line_number - The m_digits member of tui_source_window is documented as having semantics: - ... - /* How many digits to use when formatting the line number. This - includes the trailing space. */ - ... - - The commit 1b6d4bb2232 ("Redraw both spaces between line numbers and source - code") started printing two trailing spaces instead: - ... - - xsnprintf (text, sizeof (text), "%*d ", m_digits - 1, lineno); - + xsnprintf (text, sizeof (text), "%*d ", m_digits - 1, lineno); - ... - - Now that PR30325 is fixed, this no longer has any effect. - - Fix this by reverting to the original behaviour: print one trailing space - char. - - Tested on x86_64-linux. - - Approved-By: Tom Tromey - -2023-04-12 Tom de Vries - - [gdb/tui] Fix left margin in disassembly window - With a hello world a.out, and maint set tui-left-margin-verbose on, we have - this disassembly window: - ... - ┌───────────────────────────────────────────────────────────┐ - │___ 0x555555555149
endbr64 │ - │___ 0x55555555514d push %rbp │ - │___ 0x55555555514e mov %rsp,%rbp │ - │B+> 0x555555555151 lea 0xeac(%rip),%rax│ - │___ 0x555555555158 mov %rax,%rdi │ - ... - Note the space between "B+>" and 0x555555555151. The space shows that a bit - of the left margin is not written, which is a problem because that location is - showing a character previously written, which happens to be a space, but also - may be something else, for instance a '[' as reported in PR tui/30325. - - The problem is caused by confusion about the meaning of: - ... - #define TUI_EXECINFO_SIZE 4 - ... - - There's the meaning of defining the size of this zero-terminated char array: - ... - char element[TUI_EXECINFO_SIZE]; - ... - which is used to print the "B+>" bit, which is 3 chars wide. - - And there's the meaning of defining part of the size of the left margin: - ... - int left_margin () const - { return 1 + TUI_EXECINFO_SIZE + extra_margin (); } - ... - where it represents 4 chars. - - The discrepancy between the two causes the space between "B+>" and - "0x555555555151". - - Fix this by redefining TUI_EXECINFO_SIZE to 3, and using: - ... - char element[TUI_EXECINFO_SIZE + 1]; - ... - such that we have: - ... - |B+>0x555555555151 lea 0xeac(%rip),%rax │ - ... - - This changes the layout of the disassembly window back to what it was before - commit 9e820dec13e ("Use a curses pad for source and disassembly windows"), - the commit that introduced the PR30325 regression. - - This also changes the source window from: - ... - │___000005__{ | - ... - to: - ... - │___000005_{ | - ... - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30325 - - Approved-By: Tom Tromey - -2023-04-12 Tom de Vries - - [gdb/tui] Add maint set/show tui-left-margin-verbose - The TUI has two types of windows derived from tui_source_window_base: - - tui_source_window (the source window), and - - tui_disasm_window (the disassembly window). - - The two windows share a common concept: the left margin. - - With a hello world a.out, we can see the source window: - ... - ┌─/home/vries/hello.c───────────────────────────────────────┐ - │ 5 { │ - │B+> 6 printf ("hello\n"); │ - │ 7 return 0; │ - │ 8 } │ - │ 9 │ - │ - ... - where the left margin is the part holding "B+>" and the line number, and the - disassembly window: - ... - ┌───────────────────────────────────────────────────────────┐ - │ 0x555555555149
endbr64 │ - │ 0x55555555514d push %rbp │ - │ 0x55555555514e mov %rsp,%rbp │ - │B+> 0x555555555151 lea 0xeac(%rip),%rax│ - │ 0x555555555158 mov %rax,%rdi │ - ... - where the left margin is just the bit holding "B+>". - - Because the left margin contains some spaces, it's not clear where it starts - and ends, making it harder to observe problems related to it. - - Add a new maintenance command "maint set tui-left-margin-verbose", that when - set to on replaces the spaces in the left margin with either '_' or '0', - giving us this for the source window: - ... - ┌─/home/vries/hello.c───────────────────────────────────────┐ - │___000005__{ │ - │B+>000006__ printf ("hello\n"); │ - │___000007__ return 0; │ - │___000008__} │ - ... - and this for the disassembly window: - ... - ┌───────────────────────────────────────────────────────────┐ - │___ 0x555555555149
endbr64 │ - │___ 0x55555555514d push %rbp │ - │___ 0x55555555514e mov %rsp,%rbp │ - │B+> 0x555555555151 lea 0xeac(%rip),%rax│ - │___ 0x555555555158 mov %rax,%rdi │ - ... - - Note the space between "B+>" and 0x555555555151. The space shows that a bit - of the left margin is not written, a problem reported as PR tui/30325. - - Specifically, PR tui/30325 is about the fact that the '[' character from the - string "[ No Assembly Available ]" ends up in that same spot: - ... - │B+>[0x555555555151 lea 0xeac(%rip),%rax│ - ... - which only happens for certain window widths. - - The new command allows us to spot the problem with any window width. - - Likewise, when we revert the fix from commit 1b6d4bb2232 ("Redraw both spaces - between line numbers and source code"), we have: - ... - ┌─/home/vries/hello.c───────────────────────────────────────┐ - │___000005_ { │ - │B+>000006_ printf ("hello\n"); │ - │___000007_ return 0; │ - │___000008_ } │ - ... - showing a similar problem at the space between '_' and '{'. - - Tested on x86_64-linux. - - Reviewed-By: Eli Zaretskii - Approved-By: Tom Tromey - -2023-04-12 Tom Tromey - - Use SELF_CHECK in all unit tests - I noticed a few unit tests are using gdb_assert. I think this was an - older style, before SELF_CHECK was added. This patch switches them - over. - - Approved-By: Simon Marchi - -2023-04-12 Claudiu Zissulescu - - arc: remove faulty instructions - Clean not implemented ARC instruction from ARC instruction table. - -2023-04-12 Tom Tromey - - Use 'require' with gnatmake_version_at_least - I found a couple of tests that check gnatmake_version_at_least using - "if" where "require" would be a little cleaner. This patch converts - these. - -2023-04-12 YunQiang Su - - MIPS: make mipsisa32 and mipsisa64 link more systematic - Introduce `static const struct mips_mach_extension mips_mach_32_64[]` - and `mips_mach_extends_32_64 (unsigned long base, unsigned long extension)`, - to make mipsisa32 and mipsisa64 interlink more systemtic. - - Normally, the ISA mipsisa64rN has two subset: mipsisa64r(N-1) and - mipsisa32rN. `mips_mach_extensions` can hold only mipsisa64r(N-1), - so we need to introduce a new instruction `mips_mach_32_64`, which holds the pair 32vs64. - - Note: R6 is not compatible with pre-R6. - - bfd/ChangeLog: - - * elfxx-mips.c (mips_mach_extends_p): make mipsisa32 and - mipsisa64 interlink more systematic. - (mips_mach_32_64): new struct added. - (mips_mach_extends_32_64): new function added. - -2023-04-12 Nick Clifton - - Fix typos in the linker's documentation of the --enable-non-contiguous-regions option. - -2023-04-12 Alan Modra - - PR30326, uninitialised value in objdump compare_relocs - This is a fuzzing PR, with a testcase involving a SHF_ALLOC and - SHF_COMPRESSED SHT_RELA section, ie. a compressed dynamic reloc - section. BFD doesn't handle compressed relocation sections, with most - of the code reading relocs using sh_size (often no bfd section is - created) but in the case of SHF_ALLOC dynamic relocs we had some code - using the bfd section size. This led to a mismatch, sh_size is - compressed, size is uncompressed, and from that some uninitialised - memory. Consistently using sh_size is enough to fix this PR, but I've - also added tests to exclude SHF_COMPRESSED reloc sections from - consideration. - - PR 30362 - * elf.c (bfd_section_from_shdr): Exclude reloc sections with - SHF_COMPRESSED flag from normal reloc processing. - (_bfd_elf_get_dynamic_reloc_upper_bound): Similarly exclude - SHF_COMPRESSED sections from consideration. Use sh_size when - sizing to match slurp_relocs. - (_bfd_elf_canonicalize_dynamic_reloc): Likewise. - (_bfd_elf_get_synthetic_symtab): Use NUM_SHDR_ENTRIES to size - plt relocs. - * elf32-arm.c (elf32_arm_get_synthetic_symtab): Likewise. - * elf32-ppc.c (ppc_elf_get_synthetic_symtab): Likewise. - * elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Likewise. - * elfxx-mips.c (_bfd_mips_elf_get_synthetic_symtab): Likewise. - -2023-04-12 Alan Modra - - ubsan: dwarf2.c:2232:7: runtime error: index 16 out of bounds - Except it isn't out of bounds because space for a larger array has - been allocated. - - * dwarf2.c (struct trie_leaf): Make ranges a C99 flexible array. - (alloc_trie_leaf, insert_arange_in_trie): Adjust sizing. - -2023-04-12 Alan Modra - - Fail of x86_64 AMX-COMPLEX insns (Intel disassembly) - x86_64-w64-mingw32 pads sections. - - * testsuite/gas/i386/x86-64-amx-complex-intel.d: Don't fail - due to nop padding. - -2023-04-12 Alan Modra - - pe_ILF_object_p and bfd_check_format_matches - If pe_ILF_object_p succeeds, pe_ILF_build_a_bfd will have changed the - bfd from being file backed to in-memory. This can have unfortunate - results for targets checked by bfd_check_format_matches after that - point as they will be matching against the created in-memory image - rather than the file. bfd_preserve_restore also has a problem if it - flips the BFD_IN_MEMORY flag, because the flag affects iostream - meaning and should be set if using _bfd_memory_iovec. To fix these - problems, save and restore iostream and iovec along with flags, and - modify bfd_reinit to make the bfd file backed again. Restoring the - iovec and iostream allows the hack in bfd_reinit keeping BFD_IN_MEMORY - (part of BFD_FLAGS_SAVED) to be removed. - One more detail: If restoring from file backed to in-memory then the - bfd needs to be forcibly removed from the cache lru list, since after - the bfd becomes in-memory a bfd_close will delete the bfd's memory - leaving the lru list pointing into freed memory. - - * cache.c (bfd_cache_init): Clear BFD_CLOSED_BY_CACHE here.. - (bfd_cache_lookup_worker): ..rather than here. - (bfd_cache_close): Comment. - * format.c (struct bfd_preserve): Add iovec and iostream fields. - (bfd_preserve_save): Save them.. - (bfd_preserve_restore): ..and restore them, calling - bfd_cache_close if the iovec differs. - (bfd_reinit): Add preserve param. If the bfd has been flipped - to in-memory, reopen the file. Restore flags. - * peicode.h (pe_ILF_cleanup): New function. - (pe_ILF_object_p): Return it. - * bfd.c (BFD_FLAGS_SAVED): Delete. - * bfd-in2.h: Regenerate. - -2023-04-12 Alan Modra - - Comment typo fix - -2023-04-12 GDB Administrator - - Automatic date update in version.in - -2023-04-11 Nathan Sidwell - - bfd: optimize bfd_elf_hash - The bfd_elf_hash loop is taken straight from the sysV document, but it - is poorly optimized. This refactoring removes about 5 x86 insns from - the 15 insn loop. - - 1) The if (..) is meaningless -- we're xoring with that value, and of - course xor 0 is a nop. On x86 (at least) we actually compute the xor'd - value and then cmov. Removing the if test removes the cmov. - - 2) The 'h ^ g' to clear the top 4 bits is not needed, as those 4 bits - will be shifted out in the next iteration. All we need to do is sink - a mask of those 4 bits out of the loop. - - 3) anding with 0xf0 after shifting by 24 bits can allow betterin - encoding on RISC ISAs than masking with '0xf0 << 24' before shifting. - RISC ISAs often require materializing larger constants. - - bfd/ - * elf.c (bfd_elf_hash): Refactor to optimize loop. - (bfd_elf_gnu_hash): Refactor to use 32-bit type. - -2023-04-11 Nils-Christian Kempke - - gdb, doc: correct argument description for info connections/inferiors - It said for 'info inferiors' and 'info connections' that the argument - could be 'a space separated list of inferior numbers' which is correct - but incomplete. In fact the arguments can be any space separated - combination of numbers and (ascending) ranges. - - The beginning of the section now describes the ID list as a new keyword. - - Co-Authored-By: Christina Schimpe - -2023-04-11 Nick Clifton - - Replace an assertion in the dwarf code with a warning message. - PR 30327 - * dwarf.c (read_and_display_attr_value): Warn if the number of views is greater than the number of locations. - - Fix an illegal memorty access when running gprof over corrupt data. - PR 30324 - * symtab.c (symtab_finalize): Only change the end address if dst has been updated. - - Fix an attempt to allocate an excessive amount of memory when parsing a corrupt DWARF file. - PR 30313 - * dwarf.c (display_debug_lines_decoded): Check for an overlarge number of files or directories. - - Fix a potential illegal memory access when displaying corrupt DWARF information. - PR 30312 - * dwarf.c (prealloc_cu_tu_list): Always allocate at least one entry. - - Fix an attempt to allocate an overlarge amount of memory when decoding a corrupt ELF format file. - PR 30311 - * readelf.c (uncompress_section_contents): Check for a suspiciously large uncompressed size. - - Fix illegal memory access when disassembling corrupt NFP binaries. - PR 30310 - * nfp-dis.c (init_nfp6000_priv): Check that the output section exists. - -2023-04-11 Andrew Burgess - - gdb: fix indentation within print_one_breakpoint_location - Spotted some code in print_one_breakpoint_location that was not - indented correctly, this commit just changes the indentation. - - There should be no user visible changes after this commit. - -2023-04-11 Andrew Burgess - - gdb/testsuite: fix typo gdb_name_name -> gdb_test_name - Spotted a small typo in gdb_breakpoint proc, we use $gdb_name_name - instead of $gdb_test_name in one place. Fixed in this commit. - -2023-04-11 Andrew Burgess - - gdb: warn when converting h/w watchpoints to s/w - On amd64 (at least) if a user sets a watchpoint before the inferior - has started then GDB will assume that a hardware watchpoint can be - created. - - When the inferior starts there is a chance that the watchpoint can't - actually be create as a hardware watchpoint, in which case (currently) - GDB will silently convert the watchpoint to a software watchpoint. - Here's an example session: - - (gdb) p sizeof var - $1 = 4000 - (gdb) watch var - Hardware watchpoint 1: var - (gdb) info watchpoints - Num Type Disp Enb Address What - 1 hw watchpoint keep y var - (gdb) starti - Starting program: /home/andrew/tmp/watch - - Program stopped. - 0x00007ffff7fd3110 in _start () from /lib64/ld-linux-x86-64.so.2 - (gdb) info watchpoints - Num Type Disp Enb Address What - 1 watchpoint keep y var - (gdb) - - Notice that before the `starti` command the watchpoint is showing as a - hardware watchpoint, but afterwards it is showing as a software - watchpoint. Additionally, note that we clearly told the user we - created a hardware watchpoint: - - (gdb) watch var - Hardware watchpoint 1: var - - I think this is bad. I used `starti`, but if the user did `start` or - even `run` then the inferior is going to be _very_ slow, which will be - unexpected -- after all, we clearly told the user that we created a - hardware watchpoint, and the manual clearly says that hardware - watchpoints are fast (at least compared to s/w watchpoints). - - In this patch I propose adding a new warning which will be emitted - when GDB downgrades a h/w watchpoint to s/w. The session now looks - like this: - - (gdb) p sizeof var - $1 = 4000 - (gdb) watch var - Hardware watchpoint 1: var - (gdb) info watchpoints - Num Type Disp Enb Address What - 1 hw watchpoint keep y var - (gdb) starti - Starting program: /home/andrew/tmp/watch - warning: watchpoint 1 downgraded to software watchpoint - - Program stopped. - 0x00007ffff7fd3110 in _start () from /lib64/ld-linux-x86-64.so.2 - (gdb) info watchpoints - Num Type Disp Enb Address What - 1 watchpoint keep y var - (gdb) - - The important line is: - - warning: watchpoint 1 downgraded to software watchpoint - - It's not much, but hopefully it will be enough to indicate to the user - that something unexpected has occurred, and hopefully, they will not - be surprised when the inferior runs much slower than they expected. - - I've added an amd64 only test in gdb.arch/, I didn't want to try - adding this as a global test as other architectures might be able to - support the watchpoint request in h/w. - - Also the test is skipped for extended-remote boards as there's a - different set of options for limiting hardware watchpoints on remote - targets, and this test isn't about them. - - Reviewed-By: Lancelot Six - -2023-04-11 Andrew Burgess - - gdb/riscv: Support c.li in prologue unwinder - I was seeing some failures in gdb.threads/omp-par-scope.exp when run - on a riscv64 target. It turns out the cause of the problem is that I - didn't have debug information installed for libgomp.so, which this - test makes use of. The test requires GDB to backtrace through a - libgomp function, and the riscv prologue unwinder was failing to - unwind this particular stack frame. - - The reason for the failure to unwind was that the function prologue - includes a c.li (compressed load immediate) instruction, and the riscv - prologue scanning unwinder doesn't know what to do with this - instruction, though the unwinder does understand c.lui (compressed - load unsigned immediate). - - This commit adds support for c.li. After this GDB is able to unwind - through libgomp, and I no longer see any unexpected failures in - gdb.threads/omp-par-scope.exp. - - I've also included a new test in gdb.arch/ which specifically checks - for our c.li support. - -2023-04-11 GDB Administrator - - Automatic date update in version.in - -2023-04-10 Thiago Jung Bauermann - - gdb/dwarf: Fix MinGW build - Unfortunately MinGW doesn't support std::future yet, so this causes the - build to fail. Use GDB's version which provides a fallback for this case. - - Tested for regressions on native aarch64-linux. - - Approved-By: Tom Tromey - -2023-04-10 Tom Tromey - - Handle unwinding from SEGV on Windows - PR win32/30255 points out that a call to a NULL function pointer will - leave gdb unable to "bt" on Windows. - - I tracked this down to the amd64 windows unwinder. If we treat this - scenario as if it were a leaf function, unwinding works fine. - - I'm not completely sure this patch is the best way. I considered - having it check for 'pc==0' -- but then I figured this could affect - any inaccessible PC, not just the special 0 value. - - No test case because I can't run dejagnu tests on Windows. I tested - this by hand using the test case in the bug. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30255 - -2023-04-10 Haochen Jiang - - x86: Add inval tests for AMX instructions - gas/ChangeLog: - - * testsuite/gas/i386/i386.exp: Run AMX-FP16 and AMX-COMPLEX - inval testcases. - * testsuite/gas/i386/x86-64-amx-inval.l: Add AMX-BF16 tests. - * testsuite/gas/i386/x86-64-amx-inval.s: Ditto. - * testsuite/gas/i386/x86-64-amx-complex-inval.l: New test. - * testsuite/gas/i386/x86-64-amx-complex-inval.s: Ditto. - * testsuite/gas/i386/x86-64-amx-fp16-inval.l: Ditto. - * testsuite/gas/i386/x86-64-amx-fp16-inval.s: Ditto. - -2023-04-10 GDB Administrator - - Automatic date update in version.in - -2023-04-09 GDB Administrator - - Automatic date update in version.in - -2023-04-08 Philippe Blain - - Fix typos in previous commit of gdb.texinfo. - * gdb/doc/gdb.texinfo (Requirements): Fix typos. - -2023-04-08 Nick Alcock - - libctf, link: fix CU-mapped links with CTF_LINK_EMPTY_CU_MAPPINGS - This is a bug in the intersection of two obscure options that cannot - even be invoked from ld with a feature added to stop ld of the - same input file repeatedly from crashing the linker. - - The latter fix involved tracking input files (internally to libctf) not - just with their input CU name but with a version of their input CU name - that was augmented with a numeric prefix if their linker input file name - was changed, to prevent distinct CTF dicts with the same cuname from - overwriting each other. (We can't use just the linker input file name - because one linker input can contain many CU dicts, particularly under - ld -r). If these inputs then produced conflicting types, those types - were emitted into similarly-named output dicts, so we needed similar - machinery to detect clashing output dicts and add a numeric prefix to - them as well. - - This works fine, except that if you used the cu-mapping feature to force - double-linking of CTF (so that your CTF can be grouped into output dicts - larger than a single translation unit) and then also used - CTF_LINK_EMPTY_CU_MAPPINGS to force every possible output dict in the - mapping to be created (even if empty), we did the creation of empty dicts - first, and then all the actual content got considered to be a clash. So - you ended up with a pile of useless empty dicts and then all the content - was in full dicts with the same names suffixed with a #0. This seems - likely to confuse consumers that use this facility. - - Fixed by generating all the EMPTY_CU_MAPPINGS empty dicts after linking - is complete, not before it runs. - - No impact on ld, which does not do cu-mapped links or pass - CTF_LINK_EMPTY_CU_MAPPINGS to ctf_link(). - - libctf/ - * ctf-link.c (ctf_create_per_cu): Don't create new dicts iff one - already exists and we are making one for no input in particular. - (ctf_link): Emit empty CTF dicts corresponding to no input in - particular only after linkiing is complete. - -2023-04-08 Nick Alcock - - libctf: propagate errors from parents correctly - CTF dicts have per-dict errno values: as with other errno values these - are set on error and left unchanged on success. This means that all - errors *must* set the CTF errno: if a call leaves it unchanged, the - caller is apt to find a previous, lingering error and misinterpret - it as the real error. - - There are many places in libctf where we carry out operations on parent - dicts as a result of carrying out other user-requested operations on - child dicts (e.g. looking up information on a pointer to a type will - look up the type as well: the pointer might well be in a child and the - type it's a pointer to in the parent). Those operations on the parent - might fail; if they do, the error must be correctly reflected on the - child that the user-visible operation was carried out on. In many - places this was not happening. - - So, audit and fix all those places. Add tests for as many of those - cases as possible so they don't regress. - - libctf/ - * ctf-create.c (ctf_add_slice): Use the original dict. - * ctf-lookup.c (ctf_lookup_variable): Propagate errors. - (ctf_lookup_symbol_idx): Likewise. - * ctf-types.c (ctf_member_next): Likewise. - (ctf_type_resolve_unsliced): Likewise. - (ctf_type_aname): Likewise. - (ctf_member_info): Likewise. - (ctf_type_rvisit): Likewise. - (ctf_func_type_info): Set the error on the right dict. - (ctf_type_encoding): Use the original dict. - * testsuite/libctf-writable/error-propagation.*: New test. - -2023-04-08 Nick Alcock - - libctf, tests: do not assume host and target have identical field offsets - The newly-introduced libctf-lookup unnamed-field-info test checks - C compiler-observed field offsets against libctf-computed ones - by #including the testcase in the lookup runner as well as - generating CTF for it. This only works if the host, on which - the lookup runner is compiled and executed, is the same architecture as - the target, for which the CTF is generated: when crossing, the trick - may fail. - - So pass down an indication of whether this is a cross into the - testsuite, and add a new no_cross flag to .lk files that is used to - suppress test execution when a cross-compiler is being tested. - - libctf/ - * Makefile.am (check_DEJAGNU): Pass down TEST_CROSS. - * Makefile.in: Regenerated. - * testsuite/lib/ctf-lib.exp (run_lookup_test): Use it to - implement the new no_cross option. - * testsuite/libctf-lookup/unnamed-field-info.lk: Mark as - no_cross. - -2023-04-08 GDB Administrator - - Automatic date update in version.in - -2023-04-07 Tom Tromey - - Rewrite Ada symbol cache - In an experiment I'm trying, I needed Ada symbol cache entries to be - allocated with 'new'. This patch reimplements the symbol cache to use - the libiberty hash table and to use new and delete. A couple of other - minor cleanups are done. - - Add Ada test case for break using a label - I noticed there aren't any Ada test cases for setting a breakpoint - using a label. This patch adds one, adapted from the AdaCore test - suite. - - Use ui_out for "maint info frame-unwinders" - This changes "maint info frame-unwinders" to use ui-out. This makes - the table slightly nicer. In general I think it's better to use - ui-out for tables. - -2023-04-07 Tom de Vries - - [gdb/testsuite] Add -q to INTERNAL_GDBFLAGS - Whenever we start gdb in the testsuite, we have the rather verbose: - ... - $ gdb - GNU gdb (GDB) 14.0.50.20230405-git - Copyright (C) 2023 Free Software Foundation, Inc. - License GPLv3+: GNU GPL version 3 or later - This is free software: you are free to change and redistribute it. - There is NO WARRANTY, to the extent permitted by law. - Type "show copying" and "show warranty" for details. - This GDB was configured as "x86_64-pc-linux-gnu". - Type "show configuration" for configuration details. - For bug reporting instructions, please see: - . - Find the GDB manual and other documentation resources online at: - . - - For help, type "help". - Type "apropos word" to search for commands related to "word". - (gdb) - ... - - This makes gdb.log longer than necessary and harder to read. - - We do need to test that the output is produced, but that should be limited to - one or a few test-cases. - - Fix this by adding -q to INTERNAL_GDBFLAGS, such that we simply have: - ... - $ gdb -q - (gdb) - ... - - Tested on x86_64-linux. - -2023-04-07 Tom de Vries - - [gdb/testsuite] Add missing .note.GNU-stack in gdb.arch/amd64-disp-step-self-call.exp - For test-case gdb.arch/amd64-disp-step-self-call.exp I get: - ... - gdb compile failed, ld: warning: amd64-disp-step-self-call0.o: \ - missing .note.GNU-stack section implies executable stack - ld: NOTE: This behaviour is deprecated and will be removed in a future \ - version of the linker - ... - - Fix this by adding the missing .note.GNU-stack. - - Likewise for gdb.arch/i386-disp-step-self-call.exp. - - Tested on x86_64-linux. - -2023-04-07 Haochen Jiang - - Support Intel AMX-COMPLEX - gas/ChangeLog: - - * NEWS: Support Intel AMX-COMPLEX. - * config/tc-i386.c: Add amx_complex. - * doc/c-i386.texi: Document .amx_complex. - * testsuite/gas/i386/i386.exp: Run AMX-COMPLEX tests. - * testsuite/gas/i386/amx-complex-inval.l: New test. - * testsuite/gas/i386/amx-complex-inval.s: Ditto. - * testsuite/gas/i386/x86-64-amx-complex-bad.d: Ditto. - * testsuite/gas/i386/x86-64-amx-complex-bad.s: Ditto. - * testsuite/gas/i386/x86-64-amx-complex-intel.d: Ditto. - * testsuite/gas/i386/x86-64-amx-complex.d: Ditto. - * testsuite/gas/i386/x86-64-amx-complex.s: Ditto. - - opcodes/ChangeLog: - - * i386-dis.c (MOD_VEX_0F386C_X86_64_W_0): New. - (PREFIX_VEX_0F386C_X86_64_W_0_M_1_L_0): Ditto. - (X86_64_VEX_0F386C): Ditto. - (VEX_LEN_0F386C_X86_64_W_0_M_1): Ditto. - (VEX_W_0F386C_X86_64): Ditto. - (mod_table): Add MOD_VEX_0F386C_X86_64_W_0. - (prefix_table): Add PREFIX_VEX_0F386C_X86_64_W_0_M_1_L_0. - (x86_64_table): Add X86_64_VEX_0F386C. - (vex_len_table): Add VEX_LEN_0F386C_X86_64_W_0_M_1. - (vex_w_table): Add VEX_W_0F386C_X86_64. - * i386-gen.c (cpu_flag_init): Add CPU_AMX_COMPLEX_FLAGS and - CPU_ANY_AMX_COMPLEX_FLAGS. - * i386-init.h: Regenerated. - * i386-mnem.h: Ditto. - * i386-opc.h (CpuAMX_COMPLEX): New. - (i386_cpu_flags): Add cpuamx_complex. - * i386-opc.tbl: Add AMX-COMPLEX instructions. - * i386-tbl.h: Regenerated. - -2023-04-07 Andrew Burgess - - gdb/testsuite: updates for gdb.arch/{amd64,i386}-disp-step-self-call.exp - This commit: - - commit cf141dd8ccd36efe833aae3ccdb060b517cc1112 - Date: Wed Feb 22 12:15:34 2023 +0000 - - gdb: fix reg corruption from displaced stepping on amd64 - - Added two test scripts gdb.arch/amd64-disp-step-self-call.exp and - gdb.arch/i386-disp-step-self-call.exp. These scripts contained a test - that included a stack address in the test name, this makes it harder - to compare results between runs. - - This commit gives the tests proper names that doesn't include an - address. - - Also in gdb.arch/i386-disp-step-self-call.exp I noticed that we were - writing 8-bytes rather than 4 in order to clear the return address - entry on the stack. This is also fixed in this commit. - -2023-04-07 GDB Administrator - - Automatic date update in version.in - -2023-04-06 Tom Tromey - - Use unique_xmalloc_ptr in apply_ext_lang_type_printers - This changes apply_ext_lang_type_printers to use unique_xmalloc_ptr, - removing some manual memory management. Regression tested on x86-64 - Fedora 36. - - Approved-By: Simon Marchi - -2023-04-06 Pedro Alves - - Fix gdb.base/align-*.exp and Clang + LTO and AIX GCC - Clang with LTO (clang -flto) garbage collects unused global variables, - Thus, gdb.base/align-c.exp and gdb.base/align-c++.exp fail with - hundreds of FAILs like so: - - $ make check \ - TESTS="gdb.*/align-*.exp" \ - RUNTESTFLAGS="CC_FOR_TARGET='clang -flto' CXX_FOR_TARGET='clang++ -flto'" - ... - FAIL: gdb.base/align-c.exp: get integer valueof "a_char" - FAIL: gdb.base/align-c.exp: print _Alignof(char) - FAIL: gdb.base/align-c.exp: get integer valueof "a_char_x_char" - FAIL: gdb.base/align-c.exp: print _Alignof(struct align_pair_char_x_char) - FAIL: gdb.base/align-c.exp: get integer valueof "a_char_x_unsigned_char" - ... - - AIX GCC has the same issue, and there the easier way of adding - __attribute__((used)) to globals does not help. - - So add explicit uses of all globals to the generated code. - - For the C++ test, that reveals that the static variable members of the - generated structs are not defined anywhere, leading to undefined - references. Fixed by emitting initialization for all static members. - - Lastly, I noticed that CXX_FOR_TARGET was being ignored -- that's - because the align-c++.exp testcase is compiling with the C compiler - driver. Fixed by passing "c++" as option to prepare_for_testing. - - Change-Id: I874b717afde7b6fb1e45e526912b518a20a12716 - -2023-04-06 Andrew Burgess - - gdb: run black code formatter on gdbarch_components.py - The following commit changed gdbarch_components.py but failed to - format it with black: - - commit cf141dd8ccd36efe833aae3ccdb060b517cc1112 - Date: Wed Feb 22 12:15:34 2023 +0000 - - gdb: fix reg corruption from displaced stepping on amd64 - - This commit just runs black on the file and commits the result. - - The change is just the addition of an extra "," -- there will be no - change to the generated source files after this commit. - - There will be no user visible changes after this commit. - -2023-04-06 Andrew Burgess - - gdb/python: allow Frame.read_var to accept named arguments - This commit allows Frame.read_var to accept named arguments, and also - improves (I think) some of the error messages emitted when values of - the wrong type are passed to this function. - - The read_var method takes two arguments, one a variable, which is - either a gdb.Symbol or a string, while the second, optional, argument - is always a gdb.Block. - - I'm now using 'O!' as the format specifier for the second argument, - which allows the argument type to be checked early on. Currently, if - the second argument is of the wrong type then we get this error: - - (gdb) python print(gdb.selected_frame().read_var("a1", "xxx")) - Traceback (most recent call last): - File "", line 1, in - RuntimeError: Second argument must be block. - Error while executing Python code. - (gdb) - - After this commit, we now get an error like this: - - (gdb) python print(gdb.selected_frame().read_var("a1", "xxx")) - Traceback (most recent call last): - File "", line 1, in - TypeError: argument 2 must be gdb.Block, not str - Error while executing Python code. - (gdb) - - Changes are: - - 1. Exception type is TypeError not RuntimeError, this is unfortunate - as user code _could_ be relying on this, but I think the improvement - is worth the risk, user code relying on the exact exception type is - likely to be pretty rare, - - 2. New error message gives argument position and expected argument - type, as well as the type that was passed. - - If the first argument, the variable, has the wrong type then the - previous exception was already a TypeError, however, I've updated the - text of the exception to more closely match the "standard" error - message we see above. If the first argument has the wrong type then - before this commit we saw this: - - (gdb) python print(gdb.selected_frame().read_var(123)) - Traceback (most recent call last): - File "", line 1, in - TypeError: Argument must be a symbol or string. - Error while executing Python code. - (gdb) - - And after we see this: - - (gdb) python print(gdb.selected_frame().read_var(123)) - Traceback (most recent call last): - File "", line 1, in - TypeError: argument 1 must be gdb.Symbol or str, not int - Error while executing Python code. - (gdb) - - For existing code that doesn't use named arguments and doesn't rely on - exceptions, there will be no changes after this commit. - - Reviewed-By: Tom Tromey - -2023-04-06 Andrew Burgess - - gdb/python: convert Frame.read_register to take named arguments - Following on from the previous commit, this updates - Frame.read_register to accept named arguments. As with the previous - commit there's no huge benefit for the users in accepting named - arguments here -- this function only takes a single argument after - all. - - But I do think it is worth keeping Frame.read_register method in sync - with the PendingFrame.read_register method, this allows for the - possibility that the user has some code that can operate on either a - Frame or a Pending frame. - - Minor update to allow for named arguments, and an extra test to check - the new functionality. - - Reviewed-By: Tom Tromey - -2023-04-06 Andrew Burgess - - gdb/python: have PendingFrame methods accept keyword arguments - Update the two gdb.PendingFrame methods gdb.PendingFrame.read_register - and gdb.PendingFrame.create_unwind_info to accept keyword arguments. - - There's no huge benefit for making this change, both of these methods - only take a single argument, so it is (maybe) less likely that a user - will take advantage of the keyword arguments in these cases, but I - think it's nice to be consistent, and I don't see any particular draw - backs to making this change. - - For PendingFrame.read_register I've changed the argument name from - 'reg' to 'register' in the documentation and used 'register' as the - argument name in GDB. My preference for APIs is to use full words - where possible, and given we didn't support named arguments before - this change should not break any existing code. - - There should be no user visible changes (for existing code) after this - commit. - - Reviewed-By: Eli Zaretskii - Reviewed-By: Tom Tromey - -2023-04-06 Andrew Burgess - - gdb/python: have UnwindInfo.add_saved_register accept named args - Update gdb.UnwindInfo.add_saved_register to accept named keyword - arguments. - - As part of this update we now use gdb_PyArg_ParseTupleAndKeywords - instead of PyArg_UnpackTuple to parse the function arguments. - - By switching to gdb_PyArg_ParseTupleAndKeywords, we can now use 'O!' - as the argument format for the function's value argument. This means - that we can check the argument type (is gdb.Value) as part of the - argument processing rather than manually performing the check later in - the function. One result of this is that we now get a better error - message (at least, I think so). Previously we would get something - like: - - ValueError: Bad register value - - Now we get: - - TypeError: argument 2 must be gdb.Value, not XXXX - - It's unfortunate that the exception type changed, but I think the new - exception type actually makes more sense. - - My preference for argument names is to use full words where that's not - too excessive. As such, I've updated the name of the argument from - 'reg' to 'register' in the documentation, which is the argument name - I've made GDB look for here. - - For existing unwinder code that doesn't throw any exceptions nothing - should change with this commit. It is possible that a user has some - code that throws and catches the ValueError, and this code will break - after this commit, but I think this is going to be sufficiently rare - that we can take the risk here. - - Reviewed-By: Eli Zaretskii - Reviewed-By: Tom Tromey - -2023-04-06 Andrew Burgess - - gdb: fix reg corruption from displaced stepping on amd64 - This commit aims to address a problem that exists with the current - approach to displaced stepping, and was identified in PR gdb/22921. - - Displaced stepping is currently supported on AArch64, ARM, amd64, - i386, rs6000 (ppc), and s390. Of these, I believe there is a problem - with the current approach which will impact amd64 and ARM, and can - lead to random register corruption when the inferior makes use of - asynchronous signals and GDB is using displaced stepping. - - The problem can be found in displaced_step_buffers::finish in - displaced-stepping.c, and is this; after GDB tries to perform a - displaced step, and the inferior stops, GDB classifies the stop into - one of two states, either the displaced step succeeded, or the - displaced step failed. - - If the displaced step succeeded then gdbarch_displaced_step_fixup is - called, which has the job of fixing up the state of the current - inferior as if the step had not been performed in a displaced manner. - This all seems just fine. - - However, if the displaced step is considered to have not completed - then GDB doesn't call gdbarch_displaced_step_fixup, instead GDB - remains in displaced_step_buffers::finish and just performs a minimal - fixup which involves adjusting the program counter back to its - original value. - - The problem here is that for amd64 and ARM setting up for a displaced - step can involve changing the values in some temporary registers. If - the displaced step succeeds then this is fine; after the step the - temporary registers are restored to their original values in the - architecture specific code. - - But if the displaced step does not succeed then the temporary - registers are never restored, and they retain their modified values. - - In this context a temporary register is simply any register that is - not otherwise used by the instruction being stepped that the - architecture specific code considers safe to borrow for the lifetime - of the instruction being stepped. - - In the bug PR gdb/22921, the amd64 instruction being stepped is - an rip-relative instruction like this: - - jmp *0x2fe2(%rip) - - When we displaced step this instruction we borrow a register, and - modify the instruction to something like: - - jmp *0x2fe2(%rcx) - - with %rcx having its value adjusted to contain the original %rip - value. - - Now if the displaced step does not succeed, then %rcx will be left - with a corrupted value. Obviously corrupting any register is bad; in - the bug report this problem was spotted because %rcx is used as a - function argument register. - - And finally, why might a displaced step not succeed? Asynchronous - signals provides one reason. GDB sets up for the displaced step and, - at that precise moment, the OS delivers a signal (SIGALRM in the bug - report), the signal stops the inferior at the address of the displaced - instruction. GDB cancels the displaced instruction, handles the - signal, and then tries again with the displaced step. But it is that - first cancellation of the displaced step that causes the problem; in - that case GDB (correctly) sees the displaced step as having not - completed, and so does not perform the architecture specific fixup, - leaving the register corrupted. - - The reason why I think AArch64, rs600, i386, and s390 are not effected - by this problem is that I don't believe these architectures make use - of any temporary registers, so when a displaced step is not completed - successfully, the minimal fix up is sufficient. - - On amd64 we use at most one temporary register. - - On ARM, looking at arm_displaced_step_copy_insn_closure, we could - modify up to 16 temporary registers, and the instruction being - displaced stepped could be expanded to multiple replacement - instructions, which increases the chances of this bug triggering. - - This commit only aims to address the issue on amd64 for now, though I - believe that the approach I'm proposing here might be applicable for - ARM too. - - What I propose is that we always call gdbarch_displaced_step_fixup. - - We will now pass an extra argument to gdbarch_displaced_step_fixup, - this a boolean that indicates whether GDB thinks the displaced step - completed successfully or not. - - When this flag is false this indicates that the displaced step halted - for some "other" reason. On ARM GDB can potentially read the - inferior's program counter in order figure out how far through the - sequence of replacement instructions we got, and from that GDB can - figure out what fixup needs to be performed. - - On targets like amd64 the problem is slightly easier as displaced - stepping only uses a single replacement instruction. If the displaced - step didn't complete the GDB knows that the single instruction didn't - execute. - - The point is that by always calling gdbarch_displaced_step_fixup, each - architecture can now ensure that the inferior state is fixed up - correctly in all cases, not just the success case. - - On amd64 this ensures that we always restore the temporary register - value, and so bug PR gdb/22921 is resolved. - - In order to move all architectures to this new API, I have moved the - minimal roll-back version of the code inside the architecture specific - fixup functions for AArch64, rs600, s390, and ARM. For all of these - except ARM I think this is good enough, as no temporaries are used all - that's needed is the program counter restore anyway. - - For ARM the minimal code is no worse than what we had before, though I - do consider this architecture's displaced-stepping broken. - - I've updated the gdb.arch/amd64-disp-step.exp test to cover the - 'jmpq*' instruction that was causing problems in the original bug, and - also added support for testing the displaced step in the presence of - asynchronous signal delivery. - - I've also added two new tests (for amd64 and i386) that check that GDB - can correctly handle displaced stepping over a single instruction that - branches to itself. I added these tests after a first version of this - patch relied too much on checking the program-counter value in order - to see if the displaced instruction had executed. This works fine in - almost all cases, but when an instruction branches to itself a pure - program counter check is not sufficient. The new tests expose this - problem. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22921 - - Approved-By: Pedro Alves - -2023-04-06 Alan Modra - - Re: objcopy write_debugging_info memory leaks - Oops, tried to free too much - - * wrstabs.c (write_stabs_in_sections_debugging_info): Don't - free strings. - -2023-04-06 Alan Modra - - objdump print_debugging_info memory leaks - Fix memory leaks and do a general tidy of the code for printing coff - and stabs debug. - - * prdbg.c: Delete unnneeded forward function declarations. - Delete unnecessary casts throughout. Free all strings - returned from pop_type throughout file. - (struct pr_stack): Delete "num_parents". Replace tests for - "num_parents" non-zero with tests of "parents" non-NULL - throughout. Free "parents" before assigning, and set to NULL - after freeing. Remove const from "method". Always strdup - strings assigned to method, and free before assigning. - (print_debugging_info): Free info.stack and info.filename. - -2023-04-06 Alan Modra - - objdump -g on gcc COFF/PE files - objdump -g can't be used much. Trying to dump PE files invariably - seems to run into "debug_name_type: no current file" or similar - errors, because parse_coff expects a C_FILE symbol to be the first - symbol. Dumping -gstabs output works since the N_SO stab is present. - Pre-setting the file name won't hurt stabs dumping. - - * rddbg.c (read_debugging_info): Call debug_set_filename. - -2023-04-06 Alan Modra - - gas/write.c use better types - A tiny tidy. - - * write.c (frags_chained): Make it a bool. - (n_fixups): Make it unsigned. - -2023-04-06 Alan Modra - - objcopy write_debugging_info memory leaks - The old stabs code didn't bother too much about freeing memory. - This patch corrects that and avoids some dubious copying of strings. - - * objcopy.c (write_debugging_info): Free both strings and - syms on failure to create sections. - * wrstabs.c: Delete unnecessary forward declarations and casts - throughout file. - (stab_write_symbol_and_free): New function. Use it - throughout, simplifying return paths. - (stab_push_string): Don't strdup string. Use it thoughout - for malloced strings. - (stab_push_string_dup): New function. Use it throughout for - strings in auto buffers. - (write_stabs_in_sections_debugging_info): Free malloced memory. - (stab_enum_type): Increase buffer sizing for worst case. - (stab_range_type, stab_array_type): Reduce buffer size. - (stab_set_type): Likewise. - (stab_method_type): Free args on error return. Correct - buffer size. - (stab_struct_field): Fix memory leaks. - (stab_class_static_member, stab_class_baseclass): Likewise. - (stab_start_class_type): Likewise. Correct buffer size. - (stab_class_start_method): Correct buffer size. - (stab_class_method_var): Free memory on error return. - (stab_start_function): Fix "rettype" memory leak. - -2023-04-06 GDB Administrator - - Automatic date update in version.in - -2023-04-05 Thiago Jung Bauermann - - gdb/testsuite: Default to assembler's preferred debug format in asm-source.exp - The stabs debug format is obsolete and there's no reason to think that - toolchains still have good support for it. Therefore, if a specific debug - format wasn't set in asm-source.exp then leave it to the assembler to - decide which one to use. - - Reviewed-By: Tom Tromey - -2023-04-05 Thiago Jung Bauermann - - gdb: Fix reading of partial symtabs in dbxread.c - After commit 9675da25357c ("Use unrelocated_addr in minimal symbols"), - aarch64-linux started failing gdb.asm/asm-source.exp: - - Running /home/thiago.bauermann/src/binutils-gdb/gdb/testsuite/gdb.asm/asm-source.exp ... - PASS: gdb.asm/asm-source.exp: f at main - PASS: gdb.asm/asm-source.exp: n at main - PASS: gdb.asm/asm-source.exp: next over macro - FAIL: gdb.asm/asm-source.exp: step into foo2 - PASS: gdb.asm/asm-source.exp: info target - PASS: gdb.asm/asm-source.exp: info symbol - PASS: gdb.asm/asm-source.exp: list - PASS: gdb.asm/asm-source.exp: search - FAIL: gdb.asm/asm-source.exp: f in foo2 - FAIL: gdb.asm/asm-source.exp: n in foo2 (the program exited) - FAIL: gdb.asm/asm-source.exp: bt ALL in foo2 - FAIL: gdb.asm/asm-source.exp: bt 2 in foo2 - PASS: gdb.asm/asm-source.exp: s 2 - PASS: gdb.asm/asm-source.exp: n 2 - FAIL: gdb.asm/asm-source.exp: bt 3 in foo3 - PASS: gdb.asm/asm-source.exp: info source asmsrc1.s - FAIL: gdb.asm/asm-source.exp: finish from foo3 (the program is no longer running) - FAIL: gdb.asm/asm-source.exp: info source asmsrc2.s - PASS: gdb.asm/asm-source.exp: info sources - FAIL: gdb.asm/asm-source.exp: info line - FAIL: gdb.asm/asm-source.exp: next over foo3 (the program is no longer running) - FAIL: gdb.asm/asm-source.exp: return from foo2 - PASS: gdb.asm/asm-source.exp: look at global variable - PASS: gdb.asm/asm-source.exp: x/i &globalvar - PASS: gdb.asm/asm-source.exp: disassem &globalvar, (int *) &globalvar+1 - PASS: gdb.asm/asm-source.exp: look at static variable - PASS: gdb.asm/asm-source.exp: x/i &staticvar - PASS: gdb.asm/asm-source.exp: disassem &staticvar, (int *) &staticvar+1 - PASS: gdb.asm/asm-source.exp: look at static function - - The problem is simple: a pair of parentheses was removed from the - expression calculating text_end and thus text_size was only added if - lowest_text_address wasn't equal to -1. - - This patch restores the previous behaviour and fixes the testcase. - Tested on native aarch64-linux. - - Reviewed-By: Tom Tromey - -2023-04-05 Eli Zaretskii - - Improve documentation of GDB build requirements and options - MPFR is now mandatory, so its previous description in Requirements - was inappropriate and out of place. In addition, the description - of how to go about specifying 'configure' time options for - building with libraries was highly repetitive. Some of the text - was also outdated and used wrong markup. - - Original patch and suggestions from Philippe Blain - . - - ChangeLog: - 2023-04-05 Eli Zaretskii - - * gdb/doc/gdb.texinfo (Requirements, Configure Options): Update and - rearrange; improve and fix markup. - -2023-04-05 Tankut Baris Aktemur - - gdb, doc: add the missing '-gid' option to 'info threads' - The 'info threads' command does not show the '-gid' option - in the syntax. Add the option. The flag is already explained - in the command description and used in the examples. - - Approved-By: Eli Zaretskii - -2023-04-05 Tankut Baris Aktemur - - gdb: boolify 'should_print_thread' - Convert the return type of 'should_print_thread' from int to bool. - - Reviewed-By: Tom Tromey - -2023-04-05 Simon Marchi - - gdb: make find_thread_ptid a process_stratum_target method - Make find_thread_ptid (the overload that takes a process_stratum_target) - a method of process_stratum_target. - - Change-Id: Ib190a925a83c6b93e9c585dc7c6ab65efbdd8629 - Reviewed-By: Tom Tromey - -2023-04-05 Simon Marchi - - gdb: make find_thread_ptid an inferior method - Make find_thread_ptid (the overload that takes an inferior) a method of - struct inferior. - - Change-Id: Ie5b9fa623ff35aa7ddb45e2805254fc8e83c9cd4 - Reviewed-By: Tom Tromey - -2023-04-05 GDB Administrator - - Automatic date update in version.in - -2023-04-04 Jan Beulich - - bfd+ld: when / whether to generate .c files - Having been irritated by seeing bfd/elf{32,64}-aarch64.c to be re- - generated in x86-only builds, I came across 769a27ade588 ("Re: bfd - BLD-POTFILES.in dependencies"). I think this went slightly too far, as - outside of maintainer mode dependencies will cause the subset of files - to be (re-)generated which are actually needed for the build. - Generating them all is only needed when wanting to update certain files - under bfd/po/, i.e. in maintainer mode. - - In the course of looking around in an attempt to try to understand how - things are meant to work, I further noticed that ld has got things - slightly wrong too: BLD-POTFILES.in depending on $(BLD_POTFILES) isn't - quite right (the output doesn't change when any of the enumerated files - changes; it's the mere presence which matters); like in bfd it looks - like we would better extend BUILT_SOURCES accordingly. - - Furthermore it became apparent that ld fails to enumerate the .c files - generated from the .l and .y ones. While in their absence it was benign - whether translatable strings in the source files were actually marked as - such, this now becomes relevant. Mark respective strings at the same - time, but skipping ones which look to be of interest for debugging - purposes only (e.g. such used by printf() enclosed in #ifdef TRACE). - -2023-04-04 Alan Modra - - Use bfd_alloc memory for read_debugging_info storage - Trying to free malloc'd memory used by the stabs and coff debug info - parsers is complicated, and traversing the trees generated requires a - lot of code. It's better to bfd_alloc the memory which allows it all - to be freed without fuss when the bfd is closed. In the process of - doing this I reverted most of commit a6336913332. - - Some of the stabs handling code grows arrays of pointers with realloc, - to deal with arbitrary numbers of fields, function args, etc. The - code still does that but copies over to bfd_alloc memory when - finished. The alternative is to parse twice, once to size, then again - to populate the arrays. I think that complication is unwarranted. - - Note that there is a greater than zero chance this patch breaks - something, eg. that I missed an attempt to free obj_alloc memory. - Also it seems there are no tests in the binutils testsuite aimed at - exercising objdump --debugging. - - * budbg.h (finish_stab, parse_stab): Update prototypes - * debug.c: Include bucomm.h. - (struct debug_handle): Add "abfd" field. - (debug_init): Add "abfd" param. bfd_alloc handle. - (debug_xalloc, debug_xzalloc): New functions. Use throughout - in place of xmalloc and memset. - (debug_start_source): Remove "name_used" param. - * debug.h (debug_init, debug_start_source): Update prototypes. - (debug_xalloc, debug_xzalloc): Declare. - * objcopy.c (copy_object): Don't free dhandle. - * objdump.c (dump_bfd): Likewise. - * rdcoff.c (coff_get_slot): Add dhandle arg. debug_xzalloc - memory in place of xcalloc. Update callers. - (parse_coff_struct_type): Don't leak on error return. Copy - fields over to debug_xalloc memory. - (parse_coff_enum_type): Copy names and vals over the - debug_xalloc memory. - * rddbg.c (read_debugging_info): Adjust debug_init call. - Don't free dhandle. - (read_section_stabs_debugging_info): Don't free shandle. - Adjust parse_stab call. Call finish_stab on error return. - (read_symbol_stabs_debugging_info): Similarly. - * stabs.c (savestring): Delete unnecessary forward declaration. - Add dhandle param. debug_xalloc memory. Update callers. - (start_stab): Delete unnecessary casts. - (finish_stab): Add "emit" param. Free file_types, so_string, - and stabs handle. - (parse_stab): Delete string_used param. Revert code dealing - with string_used. Copy so_string passed to debug_set_filename - and stored as main_filename to debug_xalloc memory. Similarly - for string passed to debug_start_source and push_bincl. Copy - args to debug_xalloc memory. Don't leak args. - (parse_stab_enum_type): Copy names and values to debug_xalloc - memory. Don't free name. - (parse_stab_struct_type): Don't free fields. - (parse_stab_baseclasses): Delete unnecessary cast. - (parse_stab_struct_fields): Return debug_xalloc fields. - (parse_stab_cpp_abbrev): Use debug_xalloc for _vb$ type name. - (parse_stab_one_struct_field): Don't free name. - (parse_stab_members): Copy variants and methods to - debug_xalloc memory. Don't free name or argtypes. - (parse_stab_argtypes): Use debug_xalloc memory for physname - and args. - (push_bincl): Add dhandle param. Use debug_xalloc memory. - (stab_record_variable): Use debug_xalloc memory. - (stab_emit_pending_vars): Don't free var list. - (stab_find_slot): Add dhandle param. Use debug_xzalloc - memory. Update all callers. - (stab_find_tagged_type): Don't free name. Use debug_xzalloc. - (stab_demangle_qualified): Don't free name. - (stab_demangle_template): Don't free s1. - (stab_demangle_args): Tidy pvarargs refs. Copy *pargs on - success to debug_xalloc memory, free on failure. - (stab_demangle_fund_type): Don't free name. - (stab_demangle_v3_arglist): Copy args to debug_xalloc memory. - Don't free dt. - -2023-04-04 GDB Administrator - - Automatic date update in version.in - -2023-04-03 Tom Tromey - - Add readMemory and writeMemory requests to DAP - This adds the DAP readMemory and writeMemory requests. A small change - to the evaluation code is needed in order to test this -- this is one - of the few ways for a client to actually acquire a memory reference. - -2023-04-03 Andrew Burgess - - gdb: cleanup around some set_momentary_breakpoint_at_pc calls - I noticed a couple of places in infrun.c where we call - set_momentary_breakpoint_at_pc, and then set the newly created - breakpoint's thread field, these are in: - - insert_exception_resume_breakpoint - insert_exception_resume_from_probe - - Function set_momentary_breakpoint_at_pc calls - set_momentary_breakpoint, which always creates the breakpoint as - thread-specific for the current inferior_thread(). - - The two insert_* functions mentioned above take an arbitrary - thread_info* as an argument and set the breakpoint::thread to hold the - thread number of that arbitrary thread. - - However, the insert_* functions store the breakpoint pointer within - the current inferior_thread(), so we know that the thread being passed - in must be the currently selected thread. - - What this means is that we can: - - 1. Assert that the thread being passed in is the currently selected - thread, and - - 2. No longer adjust the breakpoint::thread field, this will already - have been set correctly be calling set_momentary_breakpoint_at_pc. - - There should be no user visible changes after this commit. - -2023-04-03 Andrew Burgess - - gdb: don't always print breakpoint location after failed condition check - Consider the following session: - - (gdb) list some_func - 1 int - 2 some_func () - 3 { - 4 int *p = 0; - 5 return *p; - 6 } - 7 - 8 void - 9 foo () - 10 { - (gdb) break foo if (some_func ()) - Breakpoint 1 at 0x40111e: file bpcond.c, line 11. - (gdb) r - Starting program: /tmp/bpcond - - Program received signal SIGSEGV, Segmentation fault. - 0x0000000000401116 in some_func () at bpcond.c:5 - 5 return *p; - Error in testing condition for breakpoint 1: - The program being debugged stopped while in a function called from GDB. - Evaluation of the expression containing the function - (some_func) will be abandoned. - When the function is done executing, GDB will silently stop. - - Breakpoint 1, 0x0000000000401116 in some_func () at bpcond.c:5 - 5 return *p; - (gdb) - - What happens here is the breakpoint condition includes a call to an - inferior function, and the inferior function segfaults. We can see - that GDB reports the segfault, and then gives an error message that - indicates that an inferior function call was interrupted. - - After this GDB appears to report that it is stopped at Breakpoint 1, - inside some_func. - - I find this second stop report a little confusing. While it is true - that GDB stopped as a result of hitting breakpoint 1, I think the - message GDB currently prints might give the impression that GDB is - actually stopped at a location of breakpoint 1, which is not the case. - - Also, I find the second stop message draws attention away from - the "Program received signal SIGSEGV, Segmentation fault" stop - message, and this second stop might be thought of as replacing in - someway the earlier message. - - In short, I think things would be clearer if the second stop message - were not reported at all, so the output should, I think, look like - this: - - (gdb) list some_func - 1 int - 2 some_func () - 3 { - 4 int *p = 0; - 5 return *p; - 6 } - 7 - 8 void - 9 foo () - 10 { - (gdb) break foo if (some_func ()) - Breakpoint 1 at 0x40111e: file bpcond.c, line 11. - (gdb) r - Starting program: /tmp/bpcond - - Program received signal SIGSEGV, Segmentation fault. - 0x0000000000401116 in some_func () at bpcond.c:5 - 5 return *p; - Error in testing condition for breakpoint 1: - The program being debugged stopped while in a function called from GDB. - Evaluation of the expression containing the function - (some_func) will be abandoned. - When the function is done executing, GDB will silently stop. - (gdb) - - The user can still find the number of the breakpoint that triggered - the initial stop in this line: - - Error in testing condition for breakpoint 1: - - But there's now only one stop reason reported, the SIGSEGV, which I - think is much clearer. - - To achieve this change I set the bpstat::print field when: - - (a) a breakpoint condition evaluation failed, and - - (b) the $pc of the thread changed during condition evaluation. - - I've updated the existing tests that checked the error message printed - when a breakpoint condition evaluation failed. - -2023-04-03 Andrew Burgess - - gdb: avoid repeated signal reporting during failed conditional breakpoint - Consider the following case: - - (gdb) list some_func - 1 int - 2 some_func () - 3 { - 4 int *p = 0; - 5 return *p; - 6 } - 7 - 8 void - 9 foo () - 10 { - (gdb) break foo if (some_func ()) - Breakpoint 1 at 0x40111e: file bpcond.c, line 11. - (gdb) r - Starting program: /tmp/bpcond - - Program received signal SIGSEGV, Segmentation fault. - 0x0000000000401116 in some_func () at bpcond.c:5 - 5 return *p; - Error in testing breakpoint condition: - The program being debugged was signaled while in a function called from GDB. - GDB remains in the frame where the signal was received. - To change this behavior use "set unwindonsignal on". - Evaluation of the expression containing the function - (some_func) will be abandoned. - When the function is done executing, GDB will silently stop. - - Program received signal SIGSEGV, Segmentation fault. - - Breakpoint 1, 0x0000000000401116 in some_func () at bpcond.c:5 - 5 return *p; - (gdb) - - Notice that this line: - - Program received signal SIGSEGV, Segmentation fault. - - Appears twice in the output. The first time is followed by the - current location. The second time is a little odd, why do we print - that? - - Printing that line is controlled, in part, by a global variable, - stopped_by_random_signal. This variable is reset to zero in - handle_signal_stop, and is set if/when GDB figures out that the - inferior stopped due to some random signal. - - The problem is, in our case, GDB first stops at the breakpoint for - foo, and enters handle_signal_stop and the stopped_by_random_signal - global is reset to 0. - - Later within handle_signal_stop GDB calls bpstat_stop_status, it is - within this function (via bpstat_check_breakpoint_conditions) that the - breakpoint condition is checked, and, we end up calling the inferior - function (some_func in our example above). - - In our case above the thread performing the inferior function call - segfaults in some_func. GDB catches the SIGSEGV and handles the stop, - this causes us to reenter handle_signal_stop. The global variable - stopped_by_random_signal is updated, this time it is set to true - because the thread stopped due to SIGSEGV. As a result of this we - print the first instance of the line (as seen above in the example). - - Finally we unwind GDB's call stack, the inferior function call is - complete, and we return to the original handle_signal_stop. However, - the stopped_by_random_signal global is still carrying the value as - computed for the inferior function call's stop, which is why we now - print a second instance of the line, as seen in the example. - - To prevent this, I propose adding a scoped_restore before we start an - inferior function call. This will save and restore the global - stopped_by_random_signal value. - - With this done, the output from our example is now this: - - (gdb) list some_func - 1 int - 2 some_func () - 3 { - 4 int *p = 0; - 5 return *p; - 6 } - 7 - 8 void - 9 foo () - 10 { - (gdb) break foo if (some_func ()) - Breakpoint 1 at 0x40111e: file bpcond.c, line 11. - (gdb) r - Starting program: /tmp/bpcond - - Program received signal SIGSEGV, Segmentation fault. - 0x0000000000401116 in some_func () at bpcond.c:5 - 5 return *p; - Error in testing condition for breakpoint 1: - The program being debugged stopped while in a function called from GDB. - Evaluation of the expression containing the function - (some_func) will be abandoned. - When the function is done executing, GDB will silently stop. - - Breakpoint 1, 0x0000000000401116 in some_func () at bpcond.c:5 - 5 return *p; - (gdb) - - We now only see the 'Program received signal SIGSEGV, ...' line once, - which I think makes more sense. - - Finally, I'm aware that the last few lines, that report the stop as - being at 'Breakpoint 1', when this is not where the thread is actually - located anymore, is not great. I'll address that in the next commit. - -2023-04-03 Andrew Burgess - - gdbserver: allow agent expressions to fail with invalid memory access - This commit extends gdbserver to take account of a failed memory - access from agent_mem_read, and to return a new eval_result_type - expr_eval_invalid_memory_access. - - I have only updated the agent_mem_read calls related directly to - reading memory, I have not updated any of the calls related to - tracepoint data collection. This is just because I'm not familiar - with that area of gdb/gdbserver, and I don't want to break anything, - so leaving the existing behaviour untouched seems like the safest - approach. - - I've then updated gdb.base/bp-cond-failure.exp to test evaluating the - breakpoints on the target, and have also extended the test so that it - checks for different sizes of memory access. - -2023-04-03 Andrew Burgess - - gdbserver: allows agent_mem_read to return an error code - Currently the gdbserver function agent_mem_read ignores any errors - from calling read_inferior_memory. This means that if there is an - attempt to access invalid memory then this will appear to succeed. - - In this patch I update agent_mem_read so that if read_inferior_memory - fails, agent_mem_read will return an error code. - - However, none of the callers of agent_mem_read actually check the - return value, so this commit will have no effect on anything. In the - next commit I will update the users of agent_mem_read to check for the - error code. - - I've also updated the header comments on agent_mem_read to better - reflect what the function does, and its possible return values. - -2023-04-03 Andrew Burgess - - gdb: include breakpoint number in testing condition error message - When GDB fails to test the condition of a conditional breakpoint, for - whatever reason, the error message looks like this: - - (gdb) break foo if (*(int *) 0) == 1 - Breakpoint 1 at 0x40111e: file bpcond.c, line 11. - (gdb) r - Starting program: /tmp/bpcond - Error in testing breakpoint condition: - Cannot access memory at address 0x0 - - Breakpoint 1, foo () at bpcond.c:11 - 11 int a = 32; - (gdb) - - The line I'm interested in for this commit is this one: - - Error in testing breakpoint condition: - - In the case above we can figure out that the problematic breakpoint - was #1 because in the final line of the message GDB reports the stop - at breakpoint #1. - - However, in the next few patches I plan to change this. In some cases - I don't think it makes sense for GDB to report the stop as being at - breakpoint #1, consider this case: - - (gdb) list some_func - 1 int - 2 some_func () - 3 { - 4 int *p = 0; - 5 return *p; - 6 } - 7 - 8 void - 9 foo () - 10 { - (gdb) break foo if (some_func ()) - Breakpoint 1 at 0x40111e: file bpcond.c, line 11. - (gdb) r - Starting program: /tmp/bpcond - - Program received signal SIGSEGV, Segmentation fault. - 0x0000000000401116 in some_func () at bpcond.c:5 - 5 return *p; - Error in testing breakpoint condition: - The program being debugged was signaled while in a function called from GDB. - GDB remains in the frame where the signal was received. - To change this behavior use "set unwindonsignal on". - Evaluation of the expression containing the function - (some_func) will be abandoned. - When the function is done executing, GDB will silently stop. - - Program received signal SIGSEGV, Segmentation fault. - - Breakpoint 1, 0x0000000000401116 in some_func () at bpcond.c:5 - 5 return *p; - (gdb) - - Notice that, the final lines of output reports the stop as being at - breakpoint #1, even though the inferior in not located within - some_func, and it's certainly not located at the breakpoint location. - - I find this behaviour confusing, and propose that this should be - changed. However, if I make that change then every reference to - breakpoint #1 will be lost from the error message. - - So, in this commit, in preparation for the later commits, I propose to - change the 'Error in testing breakpoint condition:' line to this: - - Error in testing condition for breakpoint NUMBER: - - where NUMBER will be filled in as appropriate. Here's the first - example with the updated error: - - (gdb) break foo if (*(int *) 0) == 0 - Breakpoint 1 at 0x40111e: file bpcond.c, line 11. - (gdb) r - Starting program: /tmp/bpcond - Error in testing condition for breakpoint 1: - Cannot access memory at address 0x0 - - Breakpoint 1, foo () at bpcond.c:11 - 11 int a = 32; - (gdb) - - The breakpoint number does now appear twice in the output, but I don't - see that as a negative. - - This commit just changes the one line of the error, and updates the - few tests that either included the old error in comments, or actually - checked for the error in the expected output. - - As the only test that checked the line I modified is a Python test, - I've added a new test that doesn't rely on Python that checks the - error message in detail. - - While working on the new test, I spotted that it would fail when run - with native-gdbserver and native-extended-gdbserver target boards. - This turns out to be due to a gdbserver bug. To avoid cluttering this - commit I've added a work around to the new test script so that the - test passes for the remote boards, in the next few commits I will fix - gdbserver, and update the test script to remove the work around. - -2023-04-03 Alan Modra - - asan: csky floatformat_to_double uninitialised value - * csky-dis.c (csky_print_operand ): Don't - access ibytes after read_memory_func error. Change type of - ibytes to avoid casts. - -2023-04-03 Andrew Burgess - - gdb/riscv: fix regressions in gdb.base/unwind-on-each-insn.exp - This commit builds on the previous one to fix all the remaining - failures in gdb.base/unwind-on-each-insn.exp for RISC-V. - - The problem we have in gdb.base/unwind-on-each-insn.exp is that, when - we are in the function epilogue, the previous frame and stack pointer - values are being restored, and so, the values that we calculated - during the function prologue are no longer suitable. - - Here's an example from the function 'bar' in the mentioned test. This - was compiled for 64-bit RISC-V with compressed instruction support: - - Dump of assembler code for function bar: - 0x000000000001018a <+0>: add sp,sp,-32 - 0x000000000001018c <+2>: sd ra,24(sp) - 0x000000000001018e <+4>: sd fp,16(sp) - 0x0000000000010190 <+6>: add fp,sp,32 - 0x0000000000010192 <+8>: sd a0,-24(fp) - 0x0000000000010196 <+12>: ld a0,-24(fp) - 0x000000000001019a <+16>: jal 0x10178 - 0x000000000001019e <+20>: nop - 0x00000000000101a0 <+22>: ld ra,24(sp) - 0x00000000000101a2 <+24>: ld fp,16(sp) - 0x00000000000101a4 <+26>: add sp,sp,32 - 0x00000000000101a6 <+28>: ret - End of assembler dump. - - When we are at address 0x101a4 the previous instruction has restored - the frame-pointer, as such GDB's (current) preference for using the - frame-pointer as the frame base address is clearly not going to work. - We need to switch to using the stack-pointer instead. - - At address 0x101a6 the previous instruction has restored the - stack-pointer value. Currently GDB will not understand this and so - will still assume the stack has been decreased by 32 bytes in this - function. - - My proposed solution is to extend GDB such that GDB will scan the - instructions at the current $pc looking for this pattern: - - ld fp,16(sp) - add sp,sp,32 - ret - - Obviously the immediates can change, but the basic pattern indicates - that the function is in the process of restoring state before - returning. If GDB sees this pattern then GDB can use the inferior's - position within this instruction sequence to help calculate the - correct frame-id. - - With this implemented then gdb.base/unwind-on-each-insn.exp now fully - passes. - - Obviously what I've implemented is just a heuristic. It's not going - to work for every function. If the compiler reorders the - instructions, or merges the epilogue back into the function body then - GDB is once again going to get the frame-id wrong. - - I'm OK with that, we're no worse off that we are right now in that - situation (plus we can always improve the heuristic later). - - Remember, this is for debugging code without debug information, - and (in our imagined situation) with more aggressive levels of - optimisation being used. Obviously GDB is going to struggle in these - situations. - - My thinking is, lets get something in place now. Then, later, if - possible, we might be able to improve the logic to cover more - situations -- if there's an interest in doing so. But I figure we - need something in place as a starting point. - - After this commit gdb.base/unwind-on-each-insn.exp passes with no - failures on RV64. - -2023-04-03 Andrew Burgess - - gdb/riscv: support c.ldsp and c.lwsp in prologue scanner - Add support to the RISC-V prologue scanner for c.ldsp and c.lwsp - instructions. - - This fixes some of the failures in gdb.base/unwind-on-each-insn.exp, - though there are further failures that are not fixed by this commit. - - This change started as a wider fix that would address all the failures - in gdb.base/unwind-on-each-insn.exp, however, that wider fix needed - support for the two additional compressed instructions. - - When I added support for those two compressed instructions I noticed - that some of the failures in gdb.base/unwind-on-each-insn.exp resolved - themselves! - - Here's what's going on: - - The reason for the failures is that GDB is trying to build the - frame-id during the last few instructions of the function. These are - the instructions that restore the frame and stack pointers just prior - to the return instruction itself. - - By the time we reach the function epilogue the stack offset that we - calculated during the prologue scan is no longer valid, and so we - calculate the wrong frame-id. - - However, in the particular case of interest here, the test function - 'foo', the function is so simple and short (the empty function) that - GDB's prologue scan could, in theory, scan every instruction of the - function. - - I say "could, in theory," because currently GDB stops the prologue - scan early when it hits an unknown instruction. The unknown - instruction happens to be one of the compressed instructions that I'm - adding support for in this commit. - - Now that GDB understands the compressed instructions the prologue scan - really does go from the start of the function right up to the current - program counter. As such, GDB sees that the stack frame has been - allocated, and then deallocated, and so builds the correct frame-id. - - Of course, most real functions are not as simple as the test function - 'foo'. As such, we can't usually rely on scanning right up to the end - of the function -- there are some instructions we always need to stop - at because GDB can't reason about how they change the inferior - state (e.g. a function call). The test function 'bar' is just such an - example. - - After this commit, we can now build the frame-id correctly for every - instruction in 'foo', but there are some tests still failing in 'bar'. - -2023-04-03 Andrew Burgess - - gdb/riscv: convert riscv debug settings to new debug print scheme - Convert the RISC-V specific debug settings to use the new debug - printing scheme. This updates the following settings: - - set/show debug riscv breakpoints - set/show debug riscv gdbarch - set/show debug riscv infcall - set/show debug riscv unwinder - - All of these settings now take a boolean rather than an integer, and - all print their output using the new debug scheme. - - There should be no visible change for anyone not turning on debug. - -2023-04-03 Andrew Burgess - - opcodes/arm: adjust whitespace in cpsie instruction - While I was working on the disassembler styling for ARM I noticed that - the whitespace in the cpsie instruction was inconsistent with most of - the other ARM disassembly output, the disassembly for cpsie looks like - this: - - cpsie if,#10 - - notice there's no space before the '#10' immediate, most other ARM - instructions have a space before each operand. - - This commit updates the disassembler to add the missing space, and - updates the tests I found that tested this instruction. - -2023-04-03 Andrew Burgess - - gdb/testsuite: gdb.server/server-kill.exp 'info frame' before kill_server - This commit follows on from the following two commits: - - commit 80dc83fd0e70f4d522a534bc601df5e05b81d564 - Date: Fri Jun 11 11:30:47 2021 +0100 - - gdb/remote: handle target dying just before a stepi - - And: - - commit 079f190d4cfc6aa9c934b00a9134bc0fcc172d53 - Date: Thu Mar 9 10:45:03 2023 +0100 - - [gdb/testsuite] Fix gdb.server/server-kill.exp for remote target - - The first of these commits fixed an issue in GDB and tried to extend - the gdb.server/server-kill.exp test to cover the GDB fix. - - Unfortunately, the changes to gdb.server/server-kill.exp were not - correct, and were causing problems when trying to run with the - remote-gdbserver-on-localhost board file. - - The second commit reverts some of the gdb.server/server-kill.exp - changes introduced in the first commit so that the test will now work - correctly with the remote-gdbserver-on-localhost board file. - - The second commit is just about GDB's testing infrastructure -- it's - not about the original fix to GDB from the first commit, the actual - GDB change was fine. - - While reviewing the second commit I wanted to check that the problem - fixed in the first commit is still being tested by the - gdb.server/server-kill.exp script, so I reverted the change to - breakpoint.c that is the core of the first commit and ran the test - script ..... and saw no failures. - - The first commit is about GDB discovering that gdbserver has died - while trying to insert a breakpoint. As soon as GDB spots that - gdbserver is gone we mourn the remote inferior, which ends up deleting - all the breakpoints associated with the remote inferiors. We then - throw an exception which is caught in the insert breakpoints code, and - we try to display an error that includes the breakpoint number - .... but the breakpoint has already been deleted ... and so GDB - crashes. - - After digging a little, what I found is that today, when the test does - 'stepi' the first thing we end up doing is calculating the frame-id as - part of the stepi logic, it is during this frame-id calculation that - we mourn the remote inferior, delete the breakpoints, and throw an - exception. The exception is caught by the top level interpreter loop, - and so we never try to print the breakpoint number which is what - caused the original crash. - - If I add an 'info frame' command to the test script, prior to killing - gdbserver, then now when we 'stepi' GDB already has the frame-id - calculated, and the first thing we do is try to insert the - breakpoints, this will trigger the original bug. - - In order to reproduce this experiment you'll need to change a function - in breakpoint.c, like this: - - static void - rethrow_on_target_close_error (const gdb_exception &e) - { - return; - } - - Then run gdb.server/server-kill.exp with and without this patch. You - should find that without this patch there are zero test failures, - while with this patch there will be one failure like this: - - (gdb) PASS: gdb.server/server-kill.exp: test_stepi: info frame - Executing on target: kill -9 4513 (timeout = 300) - builtin_spawn -ignore SIGHUP kill -9 4513 - stepi - ../../src/gdb/breakpoint.c:2863: internal-error: insert_bp_location: Assertion `bl->owner != nullptr' failed. - A problem internal to GDB has been detected, - further debugging may prove unreliable. - ----- Backtrace ----- - ... - -2023-04-03 Andrew Burgess - - gdb/testsuite: fix failure in gdb.python/py-unwind.exp - A potential test failure was introduced with commit: - - commit 6bf5f25bb150c0fbcb125e3ee466ba8f9680310b - Date: Wed Mar 8 16:11:30 2023 +0000 - - gdb/python: make the gdb.unwinder.Unwinder class more robust - - In this commit a new test was added, however the expected output - pattern varies depending on which Python version GDB is linked - against. - - Older versions of Python result in output like this: - - (gdb) python global_test_unwinder.name = "foo" - Traceback (most recent call last): - File "", line 1, in - AttributeError: can't set attribute - Error while executing Python code. - (gdb) - - While more recent versions of Python give a similar, but slightly more - verbose error message, like this: - - (gdb) python global_test_unwinder.name = "foo" - Traceback (most recent call last): - File "", line 1, in - AttributeError: can't set attribute 'name' - Error while executing Python code. - (gdb) - - The test was only accepting the first version of the output. This - commit extends the test pattern so that either version will be - accepted. - -2023-04-03 Luis Machado - - [aarch64] tpidr2: Fix erroneous detection logic for TPIDR2 - The detection logic for TPIDR2 was implemented incorrectly. Originally - the detection was supposed to be through a ptrace error code, but in reality, - for backwards compatibility, the detection should be based on the size of - the returned iovec. - - For instance, if a target supports both TPIDR and TPIDR2, ptrace will return a - iovec size of 16. If a target only supports TPIDR and not TPIDR2, it will - return a iovec size of 8, even if we asked for 16 bytes. - - This patch fixes this issue in code that is shared between gdb and gdbserver, - therefore both gdb and gdbserver are fixed. - - Tested on AArch64/Linux Ubuntu 20.04. - -2023-04-03 GDB Administrator - - Automatic date update in version.in - -2023-04-02 Alan Modra - - asan: heap buffer overflow printing ecoff debug info file name - A case of a string section ending with an unterminated string. Fix it - by allocating one more byte and making it zero. Also make functions - reading the data return void* so that casts are not needed. - - * ecoff.c (READ): Delete type param. Allocate one extra byte - to terminate string sections with a NUL. Adjust invocation. - * elfxx-mips.c (READ): Likewise. - * libbfd-in.h (_bfd_alloc_and_read): Return a void*. - (_bfd_malloc_and_read): Likewise. - * libbfd.h: Regenerate. - -2023-04-02 Alan Modra - - ubsan: aarch64 parse_vector_reg_list - tc-aarch64.c:1473:27: runtime error: left shift of 7 by 30 places - cannot be represented in type 'int'. - - * config/tc-aarch64.c (parse_vector_reg_list): Avoid UB left - shift. - -2023-04-02 Alan Modra - - rddbg.c stabs FIXMEs - This should sort out some very old FIXMEs in code handling stabs - debug info. Necessary if we are to fuss over freeing up memory before - objdump and objcopy exit. It is of course better from a user - viewpoint to *not* free memory, which takes some time, and leave that - to process exit. The only reason to do so is that having many memory - leaks in binutils/ code tends to hide leaks in bfd/ or opcodes/, which - we should care about. - - * budbg.h (parse_stab): Update prototype. - * debug.h (debug_start_source): Update prototype. - * debug.c (debug_start_source): Add name_used. Set if stashed. - * rddbg.c (read_symbol_stabs_debugging_info): Always malloc - stab string passed to parse_stab. Free stab string when - unreferenced. - (read_section_stabs_debugging_info): Likewise, and strings - section contents. - * stabs.c (parse_stab): Add string_used param. Set if string - stashed. Pass to debug_start_source. Realloc file_types - array rather that using malloc. Clarify comment about - debug_make_indirect_type. - -2023-04-02 Alan Modra - - Memory leak in process_abbrev_set - We may have added some abbrevs to the list before hitting an error. - Free the list elements too. free_abbrev_list returns list->next so we - need to init it earlier to avoid an uninitialised memory access. - - * dwarf.c (process_abbrev_set): Call free_abbrev_list on errors. - Set list->next earlier. - -2023-04-02 Simon Marchi - - gdb: remove unused parameters in print_doc_of_command, apropos_cmd - I noticed the prefix parameter was unused in print_doc_of_command. And - when removing it, it becomes unused in apropos_cmd. - - Change-Id: Id72980b03fe091b22931e6b85945f412b274ed5e - -2023-04-02 GDB Administrator - - Automatic date update in version.in - -2023-04-01 Jan Kratochvil - - gdb/arm: Fix backtrace for pthread_cond_timedwait - GDB expected PC should point right after the SVC instruction when the - syscall is active. But some active syscalls keep PC pointing to the SVC - instruction itself. - - This leads to a broken backtrace like: - Backtrace stopped: previous frame identical to this frame (corrupt stack?) - #0 0xb6f8681c in pthread_cond_timedwait@@GLIBC_2.4 () from /lib/arm-linux-gnueabihf/libpthread.so.0 - #1 0xb6e21f80 in ?? () - - The reason is that .ARM.exidx unwinder gives up if PC does not point - right after the SVC (syscall) instruction. I did not investigate why but - some syscalls will point PC to the SVC instruction itself. This happens - for the "futex" syscall used by pthread_cond_timedwait. - - That normally does not matter as ARM prologue unwinder gets called - instead of the .ARM.exidx one. Unfortunately some glibc calls have more - complicated prologue where the GDB unwinder fails to properly determine - the return address (that is in fact an orthogonal GDB bug). I expect it - is due to the "vpush" there in this case but I did not investigate it more: - - Dump of assembler code for function pthread_cond_timedwait@@GLIBC_2.4: - 0xb6f8757c <+0>: push {r4, r5, r6, r7, r8, r9, r10, r11, lr} - 0xb6f87580 <+4>: mov r10, r2 - 0xb6f87584 <+8>: vpush {d8} - - Regression tested on armv7l kernel 5.15.32-v7l+ (Raspbian 11). - - Approved-By: Luis Machado - -2023-04-01 GDB Administrator - - Automatic date update in version.in - -2023-03-31 H.J. Lu - - lto: Don't add indirect symbols for versioned aliases in IR - Linker adds indirect symbols for versioned symbol aliases, which are - created by ".symver foo, foo@FOO", by checking symbol type, value and - section so that references to foo will be replaced by references to - foo@FOO if foo and foo@FOO have the same symbol type, value and section. - But in IR, since all symbols of the same type have the same value and - section, we can't tell if a symbol is an alias of another symbol by - their types, values and sections. We shouldn't add indirect symbols - for versioned symbol aliases in IR. - - bfd/ - - PR ld/30281 - * elflink.c (elf_link_add_object_symbols): Don't add indirect - symbols for ".symver foo, foo@FOO" aliases in IR. - - ld/ - - PR ld/30281 - * testsuite/ld-plugin/lto.exp: Add PR ld/30281 test. - * testsuite/ld-plugin/pr30281.t: New file. - * testsuite/ld-plugin/pr30281.c: Likewise. - -2023-03-31 Tom Tromey - - Fix maybe-uninitialized warning in frame.c - A recent patch caused my system gcc (Fedora 36, so gcc 12.2.1) to warn - about sym_addr being possibly uninitialized in frame.c. It isn't, but - the compiler can't tell. So, this patch initializes the variable. I - also fixed a formatting buglet that I missed in review. - -2023-03-31 Tom de Vries - - [gdb/testsuite] Fix gdb.base/trace-commands.exp with editing off - With test-case gdb.base/trace-commands.exp and editing off, I run into fails - because multi-line commands are issued using gdb_test_sequence, which - doesn't handle them correctly. - - Fix this by using gdb_test instead. - - Tested on x86_64-linux. - - PR testsuite/30288 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30288 - -2023-03-31 Tom de Vries - - [gdb/testsuite] Fix gdb.threads/threadapply.exp with editing off - With test-case gdb.threads/threadapply.exp and editing set to on, we have: - ... - (gdb) define remove^M - Type commands for definition of "remove".^M - End with a line saying just "end".^M - >remove-inferiors 3^M - >end^M - (gdb) - ... - but with editing set to off, we run into: - ... - (gdb) define remove^M - Type commands for definition of "remove".^M - End with a line saying just "end".^M - >remove-inferiors 3^M - end^M - >(gdb) FAIL: gdb.threads/threadapply.exp: thread_set=all: try remove: \ - define remove (timeout) - ... - - The commands are issued by this test: - ... - gdb_define_cmd "remove" { - "remove-inferiors 3" - } - ... - which does: - - gdb_test_multiple "define remove", followed by - - gdb_test_multiple "remove-inferiors 3\nend". - - Proc gdb_test_multiple has special handling for multi-line commands, which - splits it up into subcommands, and for each subcommand issues it and then - waits for the resulting prompt (the secondary prompt ">" for all but the last - subcommand). - - However, that doesn't work as expected in this case because the initial - gdb_test_multiple "define remove" fails to match all resulting output, and - consequently the secondary prompt resulting from "define remove" is counted as - if it was the one resulting from "remove-inferiors 3". - - Fix this by matching the entire output of "define remove", including the - secondary prompt. - - Tested on x86_64-linux. - - PR testsuite/30288 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30288 - -2023-03-31 Tom Tromey - - Remove language_demangle - I noticed that language_demangle shadows the global - "current_language". When I went to fix this, though, I then saw that - language_demangle is only called in two places, and has a comment - saying it should be removed. This patch removes it. Note that the - NULL check in language_demangle is not needed by either of the - existing callers. - - Regression tested on x86-64 Fedora 36. - - Approved-By: Simon Marchi - -2023-03-31 Tom Tromey - - Fix race in background index-cache writing - Tom de Vries pointed out a bug in the index-cache background writer -- - sometimes it will fail. He also noted that it fails when the number - of worker threads is set to zero. These turn out to be the same - problem -- the cache can't be written to until the per-BFD's - "index_table" member is set. - - This patch avoids the race by rearranging the code slightly, to ensure - the cache cannot possibly be written before the member is set. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30261 - -2023-03-31 Richard Bunt - - GDB: Add `info main' command - Allow consumers of GDB to extract the name of the main method. This is - most useful for Fortran programs which have a variable main method. - - Used by both MAP and DDT e.g. it is used to detect the presence of debug - information. - - Co-Authored-By: Maciej W. Rozycki - -2023-03-31 Maciej W. Rozycki - - GDB: Bring back the handling of DW_CC_program - Fix a functional regression and restore the handling of DW_CC_program - code of DW_AT_calling_convention attribute for determining the name of - the starting function of the program where the DW_AT_main_subprogram - attribute has not been provided, such as with Fortran code compiled with - GCC versions 4.5.4 and below, or where DWARF version 3 or below has been - requested. Without it "main" is considered the starting function. Cf. - GCC PR fortran/43414. - - Original code was removed with commit 6209cde4ddb8 ("Delete DWARF - psymtab code"), and then an update to complement commit 81873cc81eff - ("[gdb/symtab] Support DW_AT_main_subprogram with -readnow.") has also - been included here. - -2023-03-31 Richard Bunt - - GDB: Favor full symbol main name for backtrace stop - In the case where a Fortran program has a program name of "main" and - there is also a minimal symbol called main, such as with programs built - with GCC version 4.4.7 or below, the backtrace will erroneously stop at - the minimal symbol rather than the user specified main, e.g.: - - (gdb) bt - #0 bar () at .../gdb/testsuite/gdb.fortran/backtrace.f90:17 - #1 0x0000000000402556 in foo () at .../gdb/testsuite/gdb.fortran/backtrace.f90:21 - #2 0x0000000000402575 in main () at .../gdb/testsuite/gdb.fortran/backtrace.f90:31 - #3 0x00000000004025aa in main () - (gdb) - - This patch fixes this issue by increasing the precedence of the full - symbol when the language of the current frame is Fortran. - - Newer versions of GCC transform the program name to "MAIN__" in this - case, avoiding the problem. - - Co-Authored-By: Maciej W. Rozycki - -2023-03-31 Ari Hannula - - gdb: Remove extra if statement - The removed if statement is already checked in the parent if else - statement. - - Co-Authored-By: Christina Schimpe - -2023-03-31 Tsukasa OI - - RISC-V: Allocate "various" operand type - This commit intends to move operands that require very special handling or - operand types that are so minor (e.g. only useful on a few instructions) - under "W". I also intend this "W" to be "temporary" operand storage until - we can find good two character (or less) operand type. - - In this commit, prefetch offset operand "f" for 'Zicbop' extension is moved - to "Wif" because of its special handling (and allocating single character - "f" for this operand type seemed too much). - - Current expected allocation guideline is as follows: - - 1. 'W' - 2. The most closely related single-letter extension in lowercase - (strongly recommended but not mandatory) - 3. Identify operand type - - The author currently plans to allocate following three-character operand - types (for operands including instructions from unratified extensions). - - 1. "Wif" ('Zicbop': fetch offset) - 2. "Wfv" (unratified 'Zfa': value operand from FLI.[HSDQ] instructions) - 3. "Wfm" / "WfM" - 'Zfh', 'F', 'D', 'Q': rounding modes "m" with special handling - solely for widening conversion instructions. - - gas/ChangeLog: - - * config/tc-riscv.c (validate_riscv_insn, riscv_ip): Move from - "f" to "Wif". - - opcodes/ChangeLog: - - * riscv-dis.c (print_insn_args): Move from "f" to "Wif". - * riscv-opc.c (riscv_opcodes): Reflect new operand type. - -2023-03-31 Jan Beulich - - x86: convert testcases to use .insn - This can't be done for all insns currently encoded with .byte. For one - outside of 64-bit mode unused (typically ignored) register encoding bits - in VEX/XOP/EVEX prefixes can't be set to their non-default values, since - the necessary registers cannot be specified (and some of these bits - can't even be used outside of 64-bit mode). And then there are odd tests - like the first one in bad-bcast.s: Its purpose is to illegaly set EVEX.b - together with EVEX.W (which could be expressed; note though EVEX.W set - is invalid on its own), but then it also clears EVEX.B and EVEX.R' plus - it sets EVEX.vvvv to other than 0xf (rendering the test ambiguous, - because that's another #UD reason). - - In {,x86-64-}disassem.s many bogus encodings exist - some with ModR/M - byte but insufficient displacement bytes, some using SIB encoding with - the SIB byte actually being the supposed immediate. Some of these could - be expressed by .insn, but I don't want to introduce bogus examples. - These will all need adjustment anyway once the disassembler is improved - in the way it deals with unrecognized encodings. - - Generally generated code is meant to remain the same. {,x86-64-}nops.d - are exceptions because insn prefixes are emitted in a different order. - opcode{,-intel,-suffix}.d are also adjusted (along with an according - correction to opcode.s) to cover an apparent typo in the original tests - (xor when or was meant). - - Where necessary --divide is added as gas option, to allow for the use - of the extension opcode functionality. - - Comments are being adjusted where obviously wrong/misleading. - -2023-03-31 Jan Beulich - - x86: document .insn - ... and mention its introduction in NEWS. - -2023-03-31 Jan Beulich - - x86: handle immediate operands for .insn - Since we have no insn suffix and it's also not realistic to infer - immediate size from the size of other (typically register) operands - (like optimize_imm() does), and since we also don't have a template - telling us permitted size(s), a new syntax construct is introduced to - allow size (and signedness) specification. In the absence of such, the - size is inferred from significant bits (which obviously may yield - inconsistent results at least for effectively negative values, depending - on whether BFD64 is enabled), and only if supplied expressions can be - evaluated at parsing time. Being explicit is generally recommended to - users. - - Size specification is permitted at bit granularity, but of course the - eventually emitted immediate values will be padded up to 8-, 16-, 32-, - or 64-bit fields. - -2023-03-31 Jan Beulich - - x86: allow for multiple immediates in output_disp() - .insn isn't going to have a constraint of only a single immediate when, - in particular, RIP-relative addressing is used. - - x86: handle EVEX Disp8 for .insn - In particular the scaling factor cannot always be determined from pre- - existing operand attributes. Introduce a new {:d} vector operand - syntax extension, restricted to .insn only, to allow specifying this in - (at least) otherwise ambiguous cases. - -2023-03-31 Jan Beulich - - x86: process instruction operands for .insn - Deal with register and memory operands; immediate operands will follow - later, as will the handling of EVEX embedded broadcast and EVEX Disp8 - scaling. - - Note that because we can't really know how to encode their use, %cr8 and - up cannot be used with .insn outside of 64-bit mode. Users would need to - specify an explicit LOCK prefix in combination with %cr0 etc. - -2023-03-31 Jan Beulich - - x86: parse special opcode modifiers for .insn - So called "short form" encoding is specified by a trailing "+r", whereas - a possible extension opcode is specified by the usual "/". Take - these off the expression before handing it to get_absolute_expression(). - - Note that on targets where / starts a comment, --divide needs passing to - gas in order to make use of the extension opcode functionality. - -2023-03-31 Jan Beulich - - x86: parse VEX and alike specifiers for .insn - All encoding spaces can be used this way; there's a certain risk that - the bits presently reserved could be used for other purposes down the - road, but people using .insn are expected to know what they're doing - anyway. Plus this way there's at least _some_ way to have those bits - set. - - For now this will only allow operand-less insns to be encoded this way. - -2023-03-31 Jan Beulich - - x86: introduce .insn directive - For starters this deals with only very basic constructs. - - Arm64/ELF: accept relocations against STN_UNDEF - While only a secondary issue there, the testcase of PR gas/27212 exposes - an oversight in relocation handling: Just like e.g. Arm32, which has a - similar comment and a similar check, relocations against STN_UNDEF have - to be permitted to satisfy the ELF spec. - -2023-03-31 GDB Administrator - - Automatic date update in version.in - -2023-03-30 Kevin Buettner - - PR gdb/30219: Clear sync_quit_force_run in quit_force - PR 30219 shows an internal error due to a "Bad switch" in - print_exception() in gdb/exceptions.c. The switch in question - contains cases for RETURN_QUIT and RETURN_ERROR, but is missing a case - for the recently added RETURN_FORCED_QUIT. This commit adds that case. - - Making the above change allows the errant test case to pass, but does - not fix the underlying problem, which I'll describe shortly. Even - though the addition of a case for RETURN_FORCED_QUIT isn't the actual - fix, I still think it's important to add this case so that other - situations which lead to print_exeption() being called won't generate - that "Bad switch" internal error. - - In order to understand the underlying problem, please examine - this portion of the backtrace from the bug report: - - 0x5576e4ff5780 print_exception - /home/smarchi/src/binutils-gdb/gdb/exceptions.c:100 - 0x5576e4ff5930 exception_print(ui_file*, gdb_exception const&) - /home/smarchi/src/binutils-gdb/gdb/exceptions.c:110 - 0x5576e6a896dd quit_force(int*, int) - /home/smarchi/src/binutils-gdb/gdb/top.c:1849 - - The real problem is in quit_force; here's the try/catch which - eventually leads to the internal error: - - /* Get out of tfind mode, and kill or detach all inferiors. */ - try - { - disconnect_tracing (); - for (inferior *inf : all_inferiors ()) - kill_or_detach (inf, from_tty); - } - catch (const gdb_exception &ex) - { - exception_print (gdb_stderr, ex); - } - - While running the calls in the try-block, a QUIT check is being - performed. This check finds that sync_quit_force_run is (still) set, - causing a gdb_exception_forced_quit to be thrown. The exception - gdb_exception_forced_quit is derived from gdb_exception, causing - exception_print to be called. As shown by the backtrace, - print_exception is then called, leading to the internal error. - - The actual fix, also implemented by this commit, is to clear - sync_quit_force_run along with the quit flag. This will allow the - various cleanup code, called by quit_force, to run without triggering - a gdb_exception_forced_quit. (Though, if another SIGTERM is sent to - the gdb process, these flags will be set again and a QUIT check in the - cleanup code will detect it and throw the exception.) - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30219 - Approved-By: Simon Marchi - -2023-03-30 Richard Sandiford - - aarch64: Remove stray reglist variable - Sorry for not catching this during testing. I was using a - host compiler that predated the switch to -fno-common. - -2023-03-30 Richard Sandiford - - aarch64: Add the RPRFM instruction - This patch adds the RPRFM (range prefetch) instruction. - It was introduced as part of SME2, but it belongs to the - prefetch hint space and so doesn't require any specific - ISA flags. - - The aarch64_rprfmop_array initialiser (deliberately) only - fills in the leading non-null elements. - -2023-03-30 Richard Sandiford - - aarch64: Add the SVE FCLAMP instruction - - aarch64: Add new SVE shift instructions - This patch adds the new SVE SQRSHRN, SQRSHRUN and UQRSHRN - instructions. - - aarch64: Add new SVE saturating conversion instructions - This patch adds the SVE SQCVTN, SQCVTUN and UQCVTN instructions, - which are available when FEAT_SME2 is implemented. - - aarch64: Add new SVE dot-product instructions - This patch adds the SVE FDOT, SDOT and UDOT instructions, - which are available when FEAT_SME2 is implemented. The patch - also reorders the existing SVE_Zm3_22_INDEX to keep the - operands numerically sorted. - - aarch64: Add the SVE BFMLSL instructions - This patch adds the SVE BFMLSLB and BFMLSLT instructions, - which are available when FEAT_SME2 is implemented. - - aarch64: Add the SME2 UZP and ZIP instructions - This patch adds UZP and ZIP, which combine UZP{1,2} and ZIP{1,2} - into single instructions. - - aarch64: Add the SME2 UNPK instructions - This patch adds SUNPK and UUNPK, which unpack one register's - worth of elements to two registers' worth, or two registers' - worth to four registers' worth. - -2023-03-30 Richard Sandiford - - aarch64: Add the SME2 shift instructions - There are two instruction formats here: - - - SQRSHR, SQRSHRU and UQRSHR, which operate on lists of two - or four registers. - - - SQRSHRN, SQRSHRUN and UQRSHRN, which operate on lists of - four registers. - - These are the first SME2 instructions to have immediate operands. - The patch makes sure that, when parsing SME2 instructions with - immediate operands, the new predicate-as-counter registers are - parsed as registers rather than as #-less immediates. - -2023-03-30 Richard Sandiford - - aarch64: Add the SME2 saturating conversion instructions - There are two instruction formats here: - - - SQCVT, SQCVTU and UQCVT, which operate on lists of two or - four registers. - - - SQCVTN, SQCVTUN and UQCVTN, which operate on lists of - four registers. - -2023-03-30 Richard Sandiford - - aarch64: Add the SME2 FP<->FP conversion instructions - This patch adds the BFCVT{,N} and FCVT{,N} instructions, - which narrow a pair of .S registers to a single .H register. - - aarch64: Add the SME2 FP<->int conversion instructions - This patch adds the SME2 versions of the FP<->integer conversion - instructions FCVT* and *CVTF. It also adds FP rounding instructions - FRINT*, which share the same format. - - aarch64: Add the SME2 CLAMP instructions - FCLAMP, SCLAMP and UCLAMP share the same format, although FCLAMP - doesn't have a .B form. - - aarch64: Add the SME2 MOPA and MOPS instructions - [BSU]MOP[AS] share the same format. - -2023-03-30 Richard Sandiford - - aarch64: Add the SME2 vertical dot-product instructions - There are three instruction formats here: - - BFVDOT + FVDOT - - SVDOT + UVDOT - - SUVDOT + USVDOT - - There are also 64-bit forms of SVDOT and UVDOT. - -2023-03-30 Richard Sandiford - - aarch64: Add the SME2 dot-product instructions - BFDOT, FDOT and USDOT share the same instruction format. - SDOT and UDOT share a different format. SUDOT does not - have the multi vector x multi vector forms, since they - would be redundant with USDOT. - - aarch64: Add the SME2 MLALL and MLSLL instructions - SMLALL, SMLSLL, UMLALL and UMLSLL have the same format. - USMLALL and SUMLALL allow the same operand types as those - instructions, except that SUMLALL does not have the multi-vector - x multi-vector forms (which would be redundant with USMLALL). - - aarch64: Add the SME2 MLAL and MLSL instructions - The {BF,F,S,U}MLAL and {BF,F,S,U}MLSL instructions share the same - encoding. They are the first instance of a ZA (as opposed to ZA tile) - operand having a range of offsets. As with ZA tiles, the expected - range size is encoded in the operand-specific data field. - - aarch64: Add the SME2 FMLA and FMLS instructions - - aarch64: Add the SME2 maximum/minimum instructions - This patch adds the SME2 multi-register forms of F{MAX,MIN}{,NM} - and {S,U}{MAX,MIN}. SQDMULH, SRSHL and URSHL have the same form - as SMAX etc., so the patch adds them too. - -2023-03-30 Richard Sandiford - - aarch64: Add the SME2 ADD and SUB instructions - Add support for the SME2 ADD. SUB, FADD and FSUB instructions. - SUB and FSUB have the same form as ADD and FADD, except that - ADD also has a 2-operand accumulating form. - - The 64-bit ADD/SUB instructions require FEAT_SME_I16I64 and the - 64-bit FADD/FSUB instructions require FEAT_SME_F64F64. - - These are the first instructions to have tied register list - operands, as opposed to tied single registers. - - The parse_operands change prevents unsuffixed Z registers (width==-1) - from being treated as though they had an Advanced SIMD-style suffix - (.4s etc.). It means that: - - Error: expected element type rather than vector type at operand 2 -- `add za\.s\[w8,0\],{z0-z1}' - - becomes: - - Error: missing type suffix at operand 2 -- `add za\.s\[w8,0\],{z0-z1}' - -2023-03-30 Richard Sandiford - - aarch64: Add the SME2 ZT0 instructions - SME2 adds lookup table instructions for quantisation. They use - a new lookup table register called ZT0. - - LUTI2 takes an unsuffixed SVE vector index of the form Zn[], - which is the first time that this syntax has been used. - -2023-03-30 Richard Sandiford - - aarch64: Add the SME2 predicate-related instructions - Implementation-wise, the main things to note here are: - - - the WHILE* instructions have forms that return a pair of predicate - registers. This is the first time that we've had lists of predicate - registers, and they wrap around after register 15 rather than after - register 31. - - - the predicate-as-counter WHILE* instructions have a fourth operand - that specifies the vector length. We can treat this as an enumeration, - except that immediate values aren't allowed. - - - PEXT takes an unsuffixed predicate index of the form PN[]. - This is the first instance of a vector/predicate index having - no suffix. - -2023-03-30 Richard Sandiford - - aarch64: Add the SME2 multivector LD1 and ST1 instructions - SME2 adds LD1 and ST1 variants for lists of 2 and 4 registers. - The registers can be consecutive or strided. In the strided case, - 2-register lists have a stride of 8, starting at register x0xxx. - 4-register lists have a stride of 4, starting at register x00xx. - - The instructions are predicated on a predicate-as-counter register in - the range pn8-pn15. Although we already had register fields with upper - bounds of 7 and 15, this is the first plain register operand to have a - nonzero lower bound. The patch uses the operand-specific data field - to record the minimum value, rather than having separate inserters - and extractors for each lower bound. This in turn required adding - an extra bit to the field. - -2023-03-30 Richard Sandiford - - aarch64: Add the SME2 MOVA instructions - SME2 defines new MOVA instructions for moving multiple registers - to and from ZA. As with SME, the instructions are also available - through MOV aliases. - - One notable feature of these instructions (and many other SME2 - instructions) is that some register lists must start at a multiple - of the list's size. The patch uses the general error "start register - out of range" when this constraint isn't met, rather than an error - specifically about multiples. This ensures that the error is - consistent between these simple consecutive lists and later - strided lists, for which the requirements aren't a simple multiple. - -2023-03-30 Richard Sandiford - - aarch64: Add support for predicate-as-counter registers - SME2 adds a new format for the existing SVE predicate registers: - predicates as counters rather than predicates as masks. In assembly - code, operands that interpret predicates as counters are written - pn rather than p. - - This patch adds support for these registers and extends some - existing instructions to support them. Since the new forms - are just a programmer convenience, there's no need to make them - more restrictive than the earlier predicate-as-mask forms. - -2023-03-30 Richard Sandiford - - aarch64; Add support for vector offset ranges - Some SME2 instructions operate on a range of consecutive ZA vectors. - This is indicated by syntax such as: - - za[, :] - - Like with the earlier vgx2 and vgx4 support, we get better error - messages if the parser allows all ZA indices to have a range. - We can then reject invalid cases during constraint checking. - -2023-03-30 Richard Sandiford - - aarch64: Add support for vgx2 and vgx4 - Many SME2 instructions operate on groups of 2 or 4 ZA vectors. - This is indicated by adding a "vgx2" or "vgx4" group size to the - ZA index. The group size is optional in assembly but preferred - for disassembly. - - There is not a binary distinction between mnemonics that have - group sizes and mnemonics that don't, nor between mnemonics that - take vgx2 and mnemonics that take vgx4. We therefore get better - error messages if we allow any ZA index to have a group size - during parsing, and wait until constraint checking to reject - invalid sizes. - - A quirk of the way errors are reported means that if an instruction - is wrong both in its qualifiers and its use of a group size, we'll - print suggested alternative instructions that also have an incorrect - group size. But that's a general property that also applies to - things like out-of-range immediates. It's also not obviously the - wrong thing to do. We need to be relatively confident that we're - looking at the right opcode before reporting detailed operand-specific - errors, so doing qualifier checking first seems resonable. - -2023-03-30 Richard Sandiford - - aarch64: Add _off4 suffix to AARCH64_OPND_SME_ZA_array - SME2 adds various new fields that are similar to - AARCH64_OPND_SME_ZA_array, but are distinguished by the size of - their offset fields. This patch adds _off4 to the name of the - field that we already have. - - aarch64: Add a _10 suffix to FLD_imm3 - SME2 adds various new 3-bit immediate fields, so this patch adds - an lsb position suffix to the name of the field that we already have. - - aarch64: Add +sme2 - This patch adds bare-bones support for +sme2. Later patches - fill in the rest. - -2023-03-30 Richard Sandiford - - aarch64: Prefer register ranges & support wrapping - Until now, binutils has supported register ranges such - as { v0.4s - v3.4s } as an unofficial shorthand for - { v0.4s, v1.4s, v2.4s, v3.4s }. The SME2 ISA embraces this form - and makes it the preferred disassembly. It also embraces wrapped - lists such as { z31.s - z2.s }, which is something that binutils - didn't previously allow. - - The range form was already binutils's preferred disassembly for 3- and - 4-register lists. This patch prefers it for 2-register lists too. - The patch also adds support for wrap-around. - -2023-03-30 Richard Sandiford - - aarch64: Add support for strided register lists - SME2 has instructions that accept strided register lists, - such as { z0.s, z4.s, z8.s, z12.s }. The purpose of this - patch is to extend binutils to support such lists. - - The parsing code already had (unused) support for strides of 2. - The idea here is instead to accept all strides during parsing - and reject invalid strides during constraint checking. - - The SME2 instructions that accept strided operands also have - non-strided forms. The errors about invalid strides therefore - take a bitmask of acceptable strides, which allows multiple - possibilities to be summed up in a single message. - - I've tried to update all code that handles register lists. - -2023-03-30 Richard Sandiford - - aarch64: Sort fields alphanumerically - This patch just sorts the field enum alphanumerically, which makes - it easier to see if a particular field has already been defined. - - aarch64: Resync field names - This patch just makes the comments in aarch64-opc.c:fields match - the names of the associated FLD_* enum. - -2023-03-30 Richard Sandiford - - aarch64: Regularise FLD_* suffixes - Some FLD_imm* suffixes used a counting scheme such as FLD_immN, - FLD_immN_2, FLD_immN_3, etc., while others used the lsb as the - suffix. The latter seems more mnemonic, and was a big help - in doing the SME2 work. - - Similarly, the _10 suffix on FLD_SME_size_10 was nonobvious. - Presumably it indicated a 2-bit field, but it actually starts - in bit 22. - -2023-03-30 Richard Sandiford - - aarch64: Rename some of GAS's REG_TYPE_* macros - In GAS, the vector and predicate registers are identified by - REG_TYPE_VN, REG_TYPE_ZN and REG_TYPE_PN. This "N" is obviously - a placeholder for the register number. However, we don't use that - convention for integer and FP registers, and (more importantly) - SME2 adds "predicate-as-counter" registers that are denoted PN. - - This patch therefore drops the "N" suffix from the existing - registers. The main hitch is that Z was also used for the - zero register in things like R_Z, but using ZR seems more - consistent with the SP-based names. - -2023-03-30 Richard Sandiford - - aarch64: Add a aarch64_cpu_supports_inst_p helper - Quite a lot of SME2 instructions have an opcode bit that selects - between 32-bit and 64-bit forms of an instruction, with the 32-bit - forms being part of base SME2 and with the 64-bit forms being part - of an optional extension. It's nevertheless useful to have a single - opcode entry for both forms since (a) that matches the ISA definition - and (b) it tends to improve error reporting. - - This patch therefore adds a libopcodes function called - aarch64_cpu_supports_inst_p that tests whether the target - supports a particular instruction. In future it will depend - on internal libopcodes routines. - -2023-03-30 Richard Sandiford - - aarch64: Reorder some OP_SVE_* macros - This patch just moves some out-of-order-looking OP_SVE_* macros. - - aarch64: Rename aarch64-tbl.h OP_SME_* macros - This patch renames the OP_SME_* macros in aarch64-tbl.h so that - they follow the same scheme as the OP_SVE_* ones. It also uses - OP_SVE_ as the prefix, since there is no real distinction between - the SVE and SME uses of qualifiers: a macro defined for one can - be useful for the other too. - -2023-03-30 Richard Sandiford - - aarch64: Tweak priorities of parsing-related errors - There are three main kinds of error reported during parsing, - in increasing order of priority: - - - AARCH64_OPDE_RECOVERABLE (register seen instead of immediate) - - AARCH64_OPDE_SYNTAX_ERROR - - AARCH64_OPDE_FATAL_SYNTAX_ERROR - - This priority makes sense when comparing errors reported against the - same operand. But if we get to operand 3 (say) and see a register - instead of an immediate, that's likely to be a better match than - something that fails with a syntax error at operand 1. - - The idea of this patch is to prioritise parsing-related errors - based on operand index first, then by error code. Post-parsing - errors still win over parsing errors, and their relative priorities - don't change. - -2023-03-30 Richard Sandiford - - aarch64: Try to report invalid variants against the closest match - If an instruction has invalid qualifiers, GAS would report the - error against the final opcode entry that got to the qualifier- - checking stage. It seems better to report the error against - the opcode entry that had the closest match, just like we - pick the closest match within an opcode entry for the - "did you mean this?" message. - - This patch adds the number of invalid operands as an - argument to AARCH64_OPDE_INVALID_VARIANT and then picks the - AARCH64_OPDE_INVALID_VARIANT with the lowest argument. - -2023-03-30 Richard Sandiford - - aarch64: Tweak register list errors - The error for invalid register lists had the form: - - invalid number of registers in the list; N registers are expected at operand M -- `insn' - - This seems a bit verbose. Also, the "bracketing" is really: - - (invalid number of registers in the list; N registers are expected) at operand M - - but the semicolon works against that. - - This patch goes for slightly shorter messages, setting a template - that later patches can use for more complex cases. - -2023-03-30 Richard Sandiford - - aarch64: Make AARCH64_OPDE_REG_LIST take a bitfield - AARCH64_OPDE_REG_LIST took a single operand that specified the - expected number of registers. However, there are quite a few - SME2 instructions that have both 2-register forms and (separate) - 4-register forms. If the user tries to use a 3-register list, - it isn't obvious which opcode entry they meant. Saying that we - expect 2 registers and saying that we expect 4 registers would - both be wrong. - - This patch therefore switches the operand to a bitfield. If a - AARCH64_OPDE_REG_LIST is reported against multiple opcode entries, - the patch ORs up the expected lengths. - - This has no user-visible effect yet. A later patch adds more error - strings, alongside tests that use them. - -2023-03-30 Richard Sandiford - - aarch64: Add an operand class for SVE register lists - SVE register lists were classified as SVE_REG, since there had been - no particular reason to separate them out. However, some SME2 - instructions have tied register list operands, and so we need to - distinguish registers and register lists when checking whether two - operands match. - - Also, the register list operands used a general error message, - even though we already have a dedicated error code for register - lists that are the wrong length. - -2023-03-30 Richard Sandiford - - aarch64: Commonise checks for index operands - This patch splits out the constraint checking for index operands, - so that it can be reused by new SME2 operands. - - aarch64: Add an error code for out-of-range registers - libopcodes currently reports out-of-range registers as a general - AARCH64_OPDE_OTHER_ERROR. However, this means that each register - range needs its own hard-coded string, which is a bit cumbersome - if the range is determined programmatically. This patch therefore - adds a dedicated error type for out-of-range errors. - -2023-03-30 Richard Sandiford - - aarch64: Deprioritise AARCH64_OPDE_REG_LIST - SME2 has many instructions that take a list of SVE registers. - There are often multiple forms, with different forms taking - different numbers of registers. - - This means that if, after a successful parse and qualifier match, - we find that the number of registers does not match the opcode entry, - the associated error should have a lower priority/severity than other - errors reported at the same stage. For example, if there are 2-register - and 4-register forms of an instruction, and if the assembly code uses - the 2-register form with an out-of-range value, the out-of-range value - error against the 2-register instruction should have a higher priority - than the "wrong number of registers" error against the 4-register - instruction. - - This is tested by the main SME2 patches, but seemed worth splitting out. - -2023-03-30 Richard Sandiford - - aarch64: Update operand_mismatch_kind_names - The contents of operand_mismatch_kind_names were out of sync - with the enum. - -2023-03-30 Richard Sandiford - - aarch64: Rework reporting of failed register checks - There are many opcode table entries that share the same mnemonic. - Trying to parse an invalid assembly line will trigger an error for - each of these entries, but the specific error might vary from one - entry to another, depending on the exact nature of the problem. - - GAS has quite an elaborate system for picking the most appropriate - error out of all the failed matches. And in many cases it works well. - However, one of the limitations is that the error is always reported - against a single opcode table entry. If that table entry isn't the - one that the user intended to use, then the error can end up being - overly specific. - - This is particularly true if an instruction has a typoed register - name, or uses a type of register that is not accepted by any - opcode table entry. For example, one of the expected error - matches for an attempted SVE2 instruction is: - - Error: operand 1 must be a SIMD scalar register -- `addp z32\.s,p0/m,z32\.s,z0\.s' - - even though the hypothetical user was presumably attempting to use - the SVE form of ADDP rather than the Advanced SIMD one. There are - many other instances of this in the testsuite. - - The problem becomes especially acute with SME2, since many SME2 - instructions reuse existing mnemonics. This could lead to us - reporting an SME-related error against a non-SME instruction, - or a non-SME-related error against an SME instruction. - - This patch tries to improve things by collecting together all - the register types that an opcode table entry expected for a - given operand. It also records what kind of register was - actually seen, if any. It then tries to summarise all this - in a more directed way, falling back to a generic error if - the combination defies a neat summary. - - The patch includes tests for all new messages except REG_TYPE_ZA, - which only triggers with SME2. - - To test this, I created an assembly file that contained the cross - product of all known mnemonics and one example from each register - class. I then looked for cases where the new routines fell back on the - generic errors ("expected a register" or "unexpected register type"). - I locally added dummy messages for each one until there were no - more hits. The patch adds a specimen instruction to diagnostics.s - for each of these combinations. In each case, the combination didn't - seem like something that could be summarised in a natural way, so the - generic messages seemed better. There's always going to be an element - of personal taste around this kind of thing though. - - Adding more register types made 1< - - aarch64: Try to avoid inappropriate default errors - After parsing a '{' and the first register, parse_typed_reg would - report errors in subsequent registers in the same way as for the - first register. It used set_default_error, which reports errors - of the form "operand N must be X". - - The problem is that if there are multiple opcode entries for the - same mnemonic, there could be several matches that lead to a - default error. There's no guarantee that the default error for - the register list is the one that will be chosen. - - To take an example from the testsuite: - - ext z0.b,{z31.b,z32.b},#0 - - gave: - - operand 2 must be an SVE vector register - - with the error being reported against the single-vector version - of ext, even though the operand is clearly a list. - - This patch uses set_fatal_syntax_error to bump the priority of the - error once we're sure that the operand is a list of the right type. - -2023-03-30 Richard Sandiford - - aarch64: Improve errors for malformed register lists - parse_typed_reg is used for parsing both bare registers and - registers that occur in lists. If it doesn't see a register, - or sees an unexpected kind of register, it queues a default - error to report the problem. These default errors have the form - "operand N must be an X", where X comes from the operand table. - - If there are multiple opcode entries that report default errors, - GAS tries to pick the most appropriate one, using the opcode - table order as a tiebreaker. But this can lead to cases where - a syntax error in a register list is reported against an opcode - that doesn't accept register lists. For example, the unlikely - error: - - ext z0.b,{,},#0 - - is reported as: - - operand 2 must be an SVE vector register -- `ext z0.b,{,},#0' - - even though operand 2 can be a register list. - - If we've parsed the opening '{' of a register list, and then see - something that isn't remotely register-like, it seems better to - report that directly as a syntax error, rather than rely on the - default error. The operand won't be a valid list of anything, - so there's no need to pick a specific Y in "operand N must be - a list of Y". - -2023-03-30 Richard Sandiford - - aarch64: Tweak parsing of integer & FP registers - Integer registers were parsed indirectly through - aarch64_reg_parse_32_64 (and thus aarch64_addr_reg_parse) rather - than directly through parse_reg. This was because we need the - qualifier associated with the register, and the logic to calculate - that was buried in aarch64_addr_reg_parse. - - The code that parses FP registers had the same need, but it - open-coded the calculation of the qualifier. - - This patch tries to handle both cases in the same way. It is - needed by a later patch that tries to improve the register-related - diagnostics. - -2023-03-30 Richard Sandiford - - aarch64: Tweak errors for base & offset registers - parse_address_main currently uses get_reg_expected_msg to - report invalid base and offset registers, but the disadvantage - of doing that is that it isn't immediately clear which register - is wrong (the base or the offset). - - A later patch moves away from using get_reg_expected_msg for failed - type checks, but doing that here didn't seem like the best approach. - The patch tries to use more tailored messages instead. - -2023-03-30 Richard Sandiford - - aarch64: Tweak error for missing immediate offset - This patch tweaks the error message that is printed when - a ZA-style index is missing the immediate offset. - -2023-03-30 Richard Sandiford - - aarch64: Move w12-w15 range check to libopcodes - In SME, the vector select register had to be in the range - w12-w15, so it made sense to enforce that during parsing. - However, SME2 adds instructions for which the range is - w8-w11 instead. - - This patch therefore moves the range check from the parsing - stage to the constraint-checking stage. - - Also, the previous error used a capitalised range W12-W15, - whereas other register range errors used lowercase ranges - like p0-p7. A quick internal poll showed a preference for - the lowercase form, so the patch uses that. - - The patch uses "selection register" rather than "vector - select register" so that the terminology extends more - naturally to PSEL. - -2023-03-30 Richard Sandiford - - aarch64: Commonise index parsing - Just a minor clean-up to factor out the index parsing, partly to - ensure that the error handling remains consistent. No behavioural - change intended. - -2023-03-30 Richard Sandiford - - aarch64: Consolidate ZA slice parsing - Now that parse_typed_reg checks the range of tile register numbers - and libopcodes checks the range of vector select offsets, there's - very little difference between the parsing of ZA tile indices, - ZA array indices, and PSEL indices. The main one is that ZA - array indices don't currently allow "za" to be qualified, - but we need to remove that restriction for SME2. - - This patch therefore consolidates all three parsers into a single - routine, parameterised by the type of register that they expect. - -2023-03-30 Richard Sandiford - - aarch64: Move ZA range checks to aarch64-opc.c - This patch moves the range checks on ZA vector select offsets from - gas to libopcodes. Doing the checks there means that the error - messages contain the expected range. It also fits in better - with the error severity scheme, which becomes important later. - (This is because out-of-range indices are treated as more severe than - syntax errors, on the basis that parsing must have succeeded if we get - to the point of checking the completed opcode.) - - The patch also adds a new check_za_access function for checking - ZA accesses. That's a bit over the top for one offset check, but the - function becomes more complex with later patches. - - sme-9-illegal.s checked for an invalid .q suffix using: - - psel p1, p15, p3.q[w15] - - but this is doubly invalid because it misses the immediate part - of the index. The patch keeps that test but adds another with - a zero index, so that .q is the only thing wrong. - - The aarch64-tbl.h change includes neatening up the backslash - positions. - -2023-03-30 Richard Sandiford - - aarch64: Pass aarch64_indexed_za to parsers - ZA indices have more parts than most operands, so passing these - parts around individually is more awkward than for other operand - types. Things aren't too bad at the moment, but SME2 adds two - further pieces: an offset range and a vector group size. - - This patch therefore replaces arguments for the individual pieces - with a single argument for the index as a whole. - -2023-03-30 Richard Sandiford - - aarch64: Make indexed_za use 64-bit immediates - A later patch moves the range checking for ZA vector select - offsets from gas to libopcodes. That in turn requires the - immediate field to be big enough to support all parsed values. - - This shouldn't be a particularly size-sensitive structure, - so there should be no memory problems with doing this. - -2023-03-30 Richard Sandiford - - aarch64: Rename za_tile_vector to za_index - za_tile_vector is also used for indexing ZA as a whole, rather than - just for indexing tiles. The former is more common than the latter - in SME2, so this patch generalises the name to "indexed_za". - - The patch also names the associated structure, so that later patches - can reuse it during parsing. - -2023-03-30 Richard Sandiford - - aarch64: Treat ZA as a register - We already treat the ZA tiles ZA0-ZA15 as registers. This patch - does the same for ZA itself. parse_sme_zero_mask can then parse - ZA tiles and ZA in the same way, through parsed_type_reg. - - One important effect of going through parsed_type_reg (in general) - is that it allows ZA to take qualifiers. This is necessary for many - SME2 instructions. - - However, to support existing unqualified uses of ZA, parse_reg_with_qual - needs to treat the qualiier as optional. Hopefully the net effect is - to give better error messages, since now that SME2 makes "za." - valid in some contexts, it might be natural to use it (incorrectly) - in ZERO too. - - While there, the patch also tweaks the error messages for invalid - ZA tiles, to try to make some cases more specific. - - For now, parse_sme_za_array just uses parse_reg, rather than - parse_typed_reg/parse_reg_with_qual. A later patch consolidates - the parsing further. - -2023-03-30 Richard Sandiford - - aarch64: Consolidate ZA tile range checks - Now that all parsing of ZA tile names goes through parse_typed_reg, - we can check there for out-of-range tile numbers. The other check - performed by parse_sme_zada_operand was to reject .q, but that can - now be done via F_STRICT instead. (.q tiles are valid in other - contexts, so they shouldn't be rejected in parse_typed_reg.) - - aarch64: Reuse parse_typed_reg for ZA tiles - This patch reuses the general parse_typed_reg for ZA tiles. - This involves adding a way of suppressing the usual treatment - of register indices, since ZA indices look very different from - Advanced SIMD and SVE vector indices. - -2023-03-30 Richard Sandiford - - aarch64: Rework parse_typed_reg interface - parse_typed_reg returned a register number and passed the - register type back using a pointer parameter. It seems simpler - to return the register entry instead, since that has both pieces - of information in one place. - - The patch also replaces the boolean in_reg_list parameter with - a mask of flags. This hopefully makes calls easier to read - (more self-documenting than "true" or "false"), but more - importantly, it allows a later patch to add a second flag. - -2023-03-30 Richard Sandiford - - aarch64: Move vectype_to_qualifier further up - This patch just moves vectype_to_qualifier further up, so that - a later patch can call it at an earlier point in the file. - No behavioural change intended. - - aarch64: Add REG_TYPE_ZATHV - This patch adds a multi-register type that includes both REG_TYPE_ZATH - and REG_TYPE_ZATV. This slightly simplifies the existing code, but the - main purpose is to enable later patches. - -2023-03-30 Richard Sandiford - - aarch64: Rename REG_TYPE_ZA* to REG_TYPE_ZAT* - The ZA tile registers were called REG_TYPE_ZA, REG_TYPE_ZAH and - REG_TYPE_ZAV. However, a later patch wants to make plain "za" - a register type too, and REG_TYPE_ZA is the obvious name for that. - - This patch therefore adds "T" (tile) to the existing names. - -2023-03-30 Richard Sandiford - - aarch64: Use aarch64_operand_error more widely - GAS's aarch64_instruction had its own cut-down error record, - but it's better for later patches if it reuses the binutils-wide - aarch64_operand_error instead. The main difference is that - aarch64_operand_error can store arguments to the error while - aarch64_instruction couldn't. - -2023-03-30 Richard Sandiford - - aarch64: Make SME instructions use F_STRICT - This patch makes all SME instructions use F_STRICT, so that qualifiers - have to be provided explicitly rather than being inferred from other - operands. The main change is to move the qualifier setting from the - operand-level decoders to the opcode level. - - This is one step towards consolidating the ZA parsing code and - extending it to handle SME2. - -2023-03-30 Richard Sandiford - - aarch64: Fix SVE2 register/immediate distinction - GAS refuses to interpret register names like x0 as unadorned - immediates, due to the obvious potential for confusion with - register operands. (An explicit #x0 is OK.) - - For compatibility reasons, we can't extend the set of registers - that GAS rejects for existing instructions. For example: - - mov x0, z0 - - was valid code before SVE was added, so it needs to stay valid - code even when SVE is enabled. But we can make GAS reject newer - registers in newer instructions. The SVE instruction: - - and z0.s, z0.s, z0.h - - is therefore invalid, rather than z0.h being an immediate. - - This patch extends the SVE behaviour to SVE2. The old call - to AARCH64_CPU_HAS_FEATURE was technically the wrong way around, - although it didn't matter in practice for base SVE instructions - since their avariants only set SVE. - -2023-03-30 Richard Sandiford - - aarch64: Restrict range of PRFM opcodes - In the register-index forms of PRFM, the unallocated prefetch opcodes - 24-31 have been reused for the encoding of the new RPRFM instruction. - The PRFM opcode space is now capped at 23 for these forms. The other - forms of PRFM are unaffected. - - aarch64: Fix PSEL opcode mask - The opcode mask for PSEL was missing some bits, which meant - that some upcoming SME2 opcodes would be misinterpreted as PSELs. - - aarch64: Add sme-i16i64 and sme-f64f64 aliases - Most extension flags are named after the associated architectural - FEAT_* flags, but sme-i64 and sme-f64 were exceptions. This patch - adds sme-i16i64 and sme-f64f64 aliases, but keeps the old names too - for compatibility. - -2023-03-30 Nick Clifton - - Fix an illegal memory access triggered by parsing corrupt DWARF info. - PR 30284 - * dwarf.c (read_and_display_attr_value): Detect and ignore negative base values. - -2023-03-30 Andrew Burgess - - gdb/python: Add new gdb.unwinder.FrameId class - When writing an unwinder it is necessary to create a new class to act - as a frame-id. This new class is almost certainly just going to set a - 'sp' and 'pc' attribute within the instance. - - This commit adds a little helper class gdb.unwinder.FrameId that does - this job. Users can make use of this to avoid having to write out - standard boilerplate code any time they write an unwinder. - - Of course, if the user wants their FrameId class to be more - complicated in some way, then they can still write their own class, - just like they could before. - - I've simplified the example code in the documentation to now use the - new helper class, and I've also made use of this helper within the - testsuite. - - Any existing user code will continue to work just as it did before - after this change. - - Reviewed-By: Eli Zaretskii - Reviewed-By: Tom Tromey - -2023-03-30 Andrew Burgess - - gdb/python: Allow gdb.UnwindInfo to be created with non gdb.Value args - Currently when creating a gdb.UnwindInfo object a user must call - gdb.PendingFrame.create_unwind_info and pass a frame-id object. - - The frame-id object should have at least a 'sp' attribute, and - probably a 'pc' attribute too (it can also, in some cases have a - 'special' attribute). - - Currently all of these frame-id attributes need to be gdb.Value - objects, but the only reason for that requirement is that we have some - code in py-unwind.c that only handles gdb.Value objects. - - If instead we switch to using get_addr_from_python in py-utils.c then - we will support both gdb.Value objects and also raw numbers, which - might make things simpler in some cases. - - So, I started rewriting pyuw_object_attribute_to_pointer (in - py-unwind.c) to use get_addr_from_python. However, while looking at - the code I noticed a problem. - - The pyuw_object_attribute_to_pointer function returns a boolean flag, - if everything goes OK we return true, but we return false in two - cases, (1) when the attribute is not present, which might be - acceptable, or might be an error, and (2) when we get an error trying - to extract the attribute value, in which case a Python error will have - been set. - - Now in pending_framepy_create_unwind_info we have this code: - - if (!pyuw_object_attribute_to_pointer (pyo_frame_id, "sp", &sp)) - { - PyErr_SetString (PyExc_ValueError, - _("frame_id should have 'sp' attribute.")); - return NULL; - } - - Notice how we always set an error. This will override any error that - is already set. - - So, if you create a frame-id object that has an 'sp' attribute, but - the attribute is not a gdb.Value, then currently we fail to extract - the attribute value (it's not a gdb.Value) and set this error in - pyuw_object_attribute_to_pointer: - - rc = pyuw_value_obj_to_pointer (pyo_value.get (), addr); - if (!rc) - PyErr_Format ( - PyExc_ValueError, - _("The value of the '%s' attribute is not a pointer."), - attr_name); - - Then we return to pending_framepy_create_unwind_info and immediately - override this error with the error about 'sp' being missing. - - This all feels very confused. - - Here's my proposed solution: pyuw_object_attribute_to_pointer will now - return a tri-state enum, with states OK, MISSING, or ERROR. The - meanings of these states are: - - OK - Attribute exists and was extracted fine, - - MISSING - Attribute doesn't exist, no Python error was set. - - ERROR - Attribute does exist, but there was an error while - extracting it, a Python error was set. - - We need to update pending_framepy_create_unwind_info, the only user of - pyuw_object_attribute_to_pointer, but now I think things are much - clearer. Errors from lower levels are not blindly overridden with the - generic meaningless error message, but we still get the "missing 'sp' - attribute" error when appropriate. - - This change also includes the switch to get_addr_from_python which was - what started this whole journey. - - For well behaving user code there should be no visible changes after - this commit. - - For user code that hits an error, hopefully the new errors should be - more helpful in figuring out what's gone wrong. - - Additionally, users can now use integers for the 'sp' and 'pc' - attributes in their frame-id objects if that is useful. - - Reviewed-By: Tom Tromey - -2023-03-30 Andrew Burgess - - gdb: have value_as_address call unpack_pointer - While refactoring some other code in gdb/python/* I wanted to merge - two code paths. One path calls value_as_address, while the other - calls unpack_pointer. - - I suspect calling value_as_address is the correct choice, but, while - examining the code I noticed that value_as_address calls unpack_long - rather than unpack_pointer. - - Under the hood, unpack_pointer does just call unpack_long so there's - no real difference here, but it feels like value_as_address should - call unpack_pointer. - - I've updated the code to use unpack_pointer, and changed a related - comment to say that we call unpack_pointer. I've also adjusted the - header comment on value_as_address. The existing header refers to - some code that is now commented out. - - Rather than trying to describe the whole algorithm of - value_as_address, which is already well commented within the function, - I've just trimmed the comment on value_as_address to be a brief - summary of what the function does. - - There should be no user visible changes after this commit. - - Reviewed-By: Tom Tromey - -2023-03-30 Andrew Burgess - - gdb/python: remove Py_TPFLAGS_BASETYPE from gdb.UnwindInfo - It is not currently possible to directly create gdb.UnwindInfo - instances, they need to be created by calling - gdb.PendingFrame.create_unwind_info so that the newly created - UnwindInfo can be linked to the pending frame. - - As such there's no tp_init method defined for UnwindInfo. - - A consequence of all this is that it doesn't really make sense to - allow sub-classing of gdb.UnwindInfo. Any sub-class can't call the - parents __init__ method to correctly link up the PendingFrame - object (there is no parent __init__ method). And any instances that - sub-classes UnwindInfo but doesn't call the parent __init__ is going - to be invalid for use in GDB. - - This commit removes the Py_TPFLAGS_BASETYPE flag from the UnwindInfo - class, which prevents the class being sub-classed. Then I've added a - test to check that this is indeed prevented. - - Any functional user code will not have any issues with this change. - - Reviewed-By: Tom Tromey - -2023-03-30 Andrew Burgess - - gdb/python: add __repr__ for PendingFrame and UnwindInfo - Having a useful __repr__ method can make debugging Python code that - little bit easier. This commit adds __repr__ for gdb.PendingFrame and - gdb.UnwindInfo classes, along with some tests. - - Reviewed-By: Tom Tromey - -2023-03-30 Andrew Burgess - - gdb/python: add some additional methods to gdb.PendingFrame - The gdb.Frame class has far more methods than gdb.PendingFrame. Given - that a PendingFrame hasn't yet been claimed by an unwinder, there is a - limit to which methods we can add to it, but many of the methods that - the Frame class has, the PendingFrame class could also support. - - In this commit I've added those methods to PendingFrame that I believe - are safe. - - In terms of implementation: if I was starting from scratch then I - would implement many of these (or most of these) as attributes rather - than methods. However, given both Frame and PendingFrame are just - different representation of a frame, I think there is value in keeping - the interface for the two classes the same. For this reason - everything here is a method -- that's what the Frame class does. - - The new methods I've added are: - - - gdb.PendingFrame.is_valid: Return True if the pending frame - object is valid. - - - gdb.PendingFrame.name: Return the name for the frame's function, - or None. - - - gdb.PendingFrame.pc: Return the $pc register value for this - frame. - - - gdb.PendingFrame.language: Return a string containing the - language for this frame, or None. - - - gdb.PendingFrame.find_sal: Return a gdb.Symtab_and_line object - for the current location within the pending frame, or None. - - - gdb.PendingFrame.block: Return a gdb.Block for the current - pending frame, or None. - - - gdb.PendingFrame.function: Return a gdb.Symbol for the current - pending frame, or None. - - In every case I've just copied the implementation over from gdb.Frame - and cleaned the code slightly e.g. NULL to nullptr. Additionally each - function required a small update to reflect the PendingFrame type, but - that's pretty minor. - - There are tests for all the new methods. - - For more extensive testing, I added the following code to the file - gdb/python/lib/command/unwinders.py: - - from gdb.unwinder import Unwinder - - class TestUnwinder(Unwinder): - def __init__(self): - super().__init__("XXX_TestUnwinder_XXX") - - def __call__(self,pending_frame): - lang = pending_frame.language() - try: - block = pending_frame.block() - assert isinstance(block, gdb.Block) - except RuntimeError as rte: - assert str(rte) == "Cannot locate block for frame." - function = pending_frame.function() - arch = pending_frame.architecture() - assert arch is None or isinstance(arch, gdb.Architecture) - name = pending_frame.name() - assert name is None or isinstance(name, str) - valid = pending_frame.is_valid() - pc = pending_frame.pc() - sal = pending_frame.find_sal() - assert sal is None or isinstance(sal, gdb.Symtab_and_line) - return None - - gdb.unwinder.register_unwinder(None, TestUnwinder()) - - This registers a global unwinder that calls each of the new - PendingFrame methods and checks the result is of an acceptable type. - The unwinder never claims any frames though, so shouldn't change how - GDB actually behaves. - - I then ran the testsuite. There was only a single regression, a test - that uses 'disable unwinder' and expects a single unwinder to be - disabled -- the extra unwinder is now disabled too, which changes the - test output. So I'm reasonably confident that the new methods are not - going to crash GDB. - - Reviewed-By: Eli Zaretskii - Reviewed-By: Tom Tromey - -2023-03-30 Andrew Burgess - - gdb/python: add PENDING_FRAMEPY_REQUIRE_VALID macro in py-unwind.c - This commit copies the pattern that is present in many other py-*.c - files: having a single macro to check that the Python object is still - valid. - - This cleans up the code a little throughout the py-unwind.c file. - - Some of the exception messages will change slightly with this commit, - though the type of the exceptions is still ValueError in all cases. - - I started writing some tests for this change and immediately ran into - a problem: GDB would crash. It turns out that the PendingFrame - objects are not being marked as invalid! - - In pyuw_sniffer where the pending frames are created, we make use of a - scoped_restore to invalidate the pending frame objects. However, this - only restores the pending_frame_object::frame_info field to its - previous value -- and it turns out we never actually give this field - an initial value, it's left undefined. - - So, when the scoped_restore (called invalidate_frame) performs its - cleanup, it actually restores the frame_info field to an undefined - value. If this undefined value is not nullptr then any future - accesses to the PendingFrame object result in undefined behaviour and - most likely, a crash. - - As part of this commit I now initialize the frame_info field, which - ensures all the new tests now pass. - - Reviewed-By: Tom Tromey - -2023-03-30 Andrew Burgess - - gdb/python: remove unneeded nullptr check in frapy_block - Spotted a redundant nullptr check in python/py-frame.c in the function - frapy_block. This was introduced in commit 57126e4a45e3000e when we - expanded an earlier check in return early if the pointer in question - is nullptr. - - There should be no user visible changes after this commit. - - Reviewed-By: Tom Tromey - -2023-03-30 Andrew Burgess - - gdb/python: make the gdb.unwinder.Unwinder class more robust - This commit makes a few related changes to the gdb.unwinder.Unwinder - class attributes: - - 1. The 'name' attribute is now a read-only attribute. This prevents - user code from changing the name after registering the unwinder. It - seems very unlikely that any user is actually trying to do this in - the wild, so I'm not very worried that this will upset anyone, - - 2. We now validate that the name is a string in the - Unwinder.__init__ method, and throw an error if this is not the - case. Hopefully nobody was doing this in the wild. This should - make it easier to ensure the 'info unwinder' command shows sane - output (how to display a non-string name for an unwinder?), - - 3. The 'enabled' attribute is now implemented with a getter and - setter. In the setter we ensure that the new value is a boolean, - but the real important change is that we call - 'gdb.invalidate_cached_frames()'. This means that the backtrace - will be updated if a user manually disables an unwinder (rather than - calling the 'disable unwinder' command). It is not unreasonable to - think that a user might register multiple unwinders (relating to - some project) and have one command that disables/enables all the - related unwinders. This command might operate by poking the enabled - attribute of each unwinder object directly, after this commit, this - would now work correctly. - - There's tests for all the changes, and lots of documentation updates - that both cover the new changes, but also further improve (I think) - the general documentation for GDB's Unwinder API. - - Reviewed-By: Eli Zaretskii - Reviewed-By: Tom Tromey - -2023-03-30 Nick Clifton - - Fix an illegal memory access when an accessing a zer0-lengthverdef table. - PR 30285 - * elf.c (_bfd_elf_slurp_version_tables): Fail if no version definitions are allocated. - -2023-03-30 Vladimir Mezentsev - - gprofng: Add version symbols to libgprofng.ver - gprofng/ChangeLog - 2023-03-29 Vladimir Mezentsev - - PR gprofng/30089 - * libcollector/libgprofng.ver: Add version symbols. - * libcollector/synctrace.c: Fix typo for pthread_mutex_lock. - -2023-03-30 Alan Modra - - Setting sh_link for SHT_REL/SHT_RELA - It's wrong to have an alloc reloc section trying to use a non-alloc - symbol table. - - * elf.c (assign_section_numbers ): Correct - comment. Always set sh_link to .dynsym for alloc reloc - sections and to .symtab for non-alloc. - -2023-03-30 Alan Modra - - Fix memory leak in bfd_get_debug_link_info_1 - * opncls.c (bfd_get_alt_debug_link_info): Don't bother freeing - after bfd_malloc_and_get_section failure. - (get_build_id): Likewise. - (bfd_get_debug_link_info_1): Likewise. Free section contents - when crc not present. - * section.c (bfd_malloc_and_get_section): Document that the - buffer is NULL on error return. - - Tidy leaked objcopy memory - * objcopy.c (delete_symbol_htabs): Also free symbols. - (write_debugging_info): Free strings and syms once written. - * wrstabs.c (write_stabs_in_sections_debugging_info): memset - entire info struct. Free hash tables before returning. Free - syms on error return. - - Tidy memory on addr2line failures - * addr2line.c (process_file): Close bfd on error paths. - -2023-03-30 Roland McGrath - - Fix typo in ld manual --enable-non-contiguous-regions example - -2023-03-30 GDB Administrator - - Automatic date update in version.in - -2023-03-30 Palmer Dabbelt - - RISC-V: PR28789, Reject R_RISCV_PCREL relocations with ABS symbol in PIC/PIE. - The non-preemptible SHN_ABS symbol with a pc-relative relocation should be - disallowed when generating shared object (pic and pie). Generally, the - following cases, which refer to pr25749, will cause a symbol be - non-preemptible, - - * -pie, or -shared with -symbolic - * STV_HIDDEN, STV_INTERNAL, STV_PROTECTED - * Have dynamic symbol table, but without the symbol - * VER_NDX_LOCAL - - However, PCREL_HI20/LO12 relocs are always bind locally when generating - shared object, so not only the non-preemptible absolute symbol need to - be disallowed, all absolute symbol references need but except that they - are defined in linker script. If we also disallow the absolute symbol - in linker script, then the glibc-linux toolchain build failed, so regard - them as pc-relative symbols, just like what x86 did. - - Maybe we should add this check for all pc-relative relocations, rather - than just handle in R_RISCV_PCREL relocs. Ideally, since the value of - SHN_ABS symbol is a constant, only S - A relocations should be allowed - in the shared object, so only BFD_RELOC_8/16/32/64 are allowed, which - means R_RISCV_32/R_RISCV_64. - - bfd/ - PR 28789 - * elfnn-riscv.c (riscv_elf_check_relocs): The absolute symbol cannot be - referneced with pc-relative relocation when generating shared object. - ld/ - PR 28789 - * ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated. - * ld/testsuite/ld-riscv-elf/pcrel-reloc*: New testcases. - -2023-03-30 Nelson Chu - - RISC-V: Clarify link behaviors of R_RISCV_32/64 relocations with ABS symbol. - There are two improvements, which are all referenced to aarch64, - - * R_RISCV_32 with non ABS symbol cannot be used under RV64 when making - shard objects. - - * Don't need dynamic relocation for R_RISCV_32/64 under RV32/RV64 when - making shared objects, if the referenced symbol is local ABS symbol. - - However, considering this link, - https://github.com/riscv-non-isa/riscv-elf-psabi-doc/issues/341 - - Seems like we should makes all R_RISCV_32/64 relocs with ABS symbol - that don't need any dynamic relocations when making the shared objects. - But anyway, I just sync the current behavior as aarch64 ld, in case - there are any unexpected behaviors happen. - - Passed the gcc/binutils regressions in riscv-gnu-toolchain. - - bfd/ - * elfnn-riscv.c (riscv_elf_check_relocs): Only allow R_RISCV_32 with ABS - symbol under RV64. - (riscv_elf_relocate_section): R_RISCV_32/64 with local ABS symbol under - RV32/RV64 doesn't need any dynamic relocation when making shared objects. - I just make the implementations similar to other targets, so that will be - more easy to mainatain. - ld/ - * testsuite/ld-riscv-elf/data-reloc*: New testcases. - * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Added new data-reloc* testcases, - and need to make ifunc-seperate* testcases work for rv32. - * testsuite/ld-riscv-elf/ifunc-seperate-caller-nonplt.s: Likewise. - * testsuite/ld-riscv-elf/ifunc-seperate-caller-plt.s: Likewise. - -2023-03-30 Nelson Chu - - RISC-V: Extract the ld code which are too complicated, and may be reused. - These types of codes are different for each target, I am not sure what are the - best for RISC-V, so extract them out may be more easy to compare what's the - difference. - - bfd/ - * elfnn-riscv.c (RISCV_NEED_DYNAMIC_RELOC): New defined. Extracted - from riscv_elf_check_relocs, to see if dynamic reloc is needed for the - specific relocation. - (RISCV_GENERATE_DYNAMIC_RELOC): New defined. Extracted from - riscv_elf_relocate_section, to see if R_RISCV_32/64 need to generate - dynamic relocation. - (RISCV_COPY_INPUT_RELOC): New defined. Extracted from - riscv_elf_relocate_section, to see if R_RISCV_32/64 need to copy itslef - tp output file. - (RISCV_RESOLVED_LOCALLY): New defined. Extracted from - riscv_elf_relocate_section, to see if R_RISCV_GOT_HI20 can be resolved - locally. - -2023-03-29 Tom Tromey - - Use the correct frame when evaluating a dynamic property - The test case in this patch shows an unusual situation: an Ada array - has a dynamic bound, but the bound comes from a frame that's referred - to by the static link. This frame is correctly found when evaluating - the array variable itself, but is lost when evaluating the array's - bounds. - - This patch fixes the problem by passing this frame through to - value_at_lazy in the DWARF expression evaluator. - -2023-03-29 Tom Tromey - - Pass a frame to value_at_lazy and value_from_contents_and_address - This patch adds a 'frame' parameter to value_at_lazy and ensures that - it is passed down to the call to resolve_dynamic_type. This required - also adding a frame parameter to value_from_contents_and_address. - - Nothing passes this parameter to value_at_lazy yet, so this patch - should have no visible effect. - -2023-03-29 Tom Tromey - - Add frame parameter to resolve_dynamic_type - This adds a frame parameter to resolve_dynamic_type and arranges for - it to be passed through the call tree and, in particular, to all calls - to dwarf2_evaluate_property. - - Nothing passes this parameter yet, so this patch should have no - visible effect. - - A 'const frame_info_ptr *' is used here to avoid including frame.h - from gdbtypes.h. - -2023-03-29 Tom Tromey - - Remove version_at_least - version_at_least is a less capable variant of version_compare, so this - patch removes it. - - Rewrite version_compare and rust_at_least - This rewrites version_compare to allow the input lists to have - different lengths, then rewrites rust_at_least to use version_compare. - - Introduce rust_at_least helper proc - This adds a 'rust_at_least' helper proc, for checking the version of - the Rust compiler in use. It then changes various tests to use this - with 'require'. - -2023-03-29 Tom de Vries - - [gdb/testsuite] Require gnatmake 11 for gdb.ada/verylong.exp - With test-case gdb.ada/verylong.exp and gnatmake 7.5.0 I run into: - ... - compilation failed: gcc ... $src/gdb/testsuite/gdb.ada/verylong/prog.adb - prog.adb:16:11: warning: file name does not match unit name, should be "main.adb" - prog.adb:17:08: "Long_Long_Long_Integer" is undefined (more references follow) - gnatmake: "prog.adb" compilation error - - FAIL: gdb.ada/verylong.exp: compilation prog.adb - ... - - AFAICT, support for Long_Long_Long_Integer was added in gcc 11. - - Fix this by requiring gnatmake version 11 or higher in the test-case. - - Tested on x86_64-linux. - -2023-03-29 Nils-Christian Kempke - - doc: fix informations typo in gdb.texinfo - Co-Authored-By: Christina Schimpe - -2023-03-29 Nils-Christian Kempke - - gdb, infcmd: remove redundant ERROR_NO_INFERIOR in continue_command - The ERROR_NO_INFERIOR macro is already called at the beginning of the - function continue_command. Since target/inferior are not switched in-between, - the second call to it is redundant. - - Co-Authored-By: Christina Schimpe - -2023-03-29 Andrew Burgess - - gdb: move displaced_step_dump_bytes into gdbsupport (and rename) - It was pointed out during review of another patch that the function - displaced_step_dump_bytes really isn't specific to displaced stepping, - and should really get a more generic name and move into gdbsupport/. - - This commit does just that. The function is renamed to - bytes_to_string and is moved into gdbsupport/common-utils.{cc,h}. The - function implementation doesn't really change. Much... - - ... I have updated the function to take an array view, which makes it - slightly easier to call in a couple of places where we already have a - gdb::bytes_vector. I've then added an inline wrapper to convert a raw - pointer and length into an array view, which is used in places where - we don't easily have a gdb::bytes_vector (or similar). - - Updated all users of displaced_step_dump_bytes. - - There should be no user visible changes after this commit. - - Finally, I ended up having to add an include of gdb_assert.h into - array-view.h. When I include array-view.h into common-utils.h I ran - into build problems because array-view.h calls gdb_assert. - - Approved-By: Simon Marchi - -2023-03-29 Andrew Burgess - - gdb: more debug output for displaced stepping - While investigating a displaced stepping issue I wanted an easy way to - see what GDB thought the original instruction was, and what - instruction GDB replaced that with when performing the displaced step. - - We do print out the address that is being stepped, so I can track down - the original instruction, I just need to go find the information - myself. - - And we do print out the bytes of the new instruction, so I can figure - out what the replacement instruction was, but it's not really easy. - - Also, the code that prints the bytes of the replacement instruction - only prints 4 bytes, which clearly isn't always going to be correct. - - In this commit I remove the existing code that prints the bytes of the - replacement instruction, and add two new blocks of code to - displaced_step_prepare_throw. This new code prints the original - instruction, and the replacement instruction. In each case we print - both the bytes that make up the instruction and the completely - disassembled instruction. - - Here's an example of what the output looks like on x86-64 (this is - with 'set debug displaced on'). The two interesting lines contain the - strings 'original insn' and 'replacement insn': - - (gdb) step - [displaced] displaced_step_prepare_throw: displaced-stepping 2892655.2892655.0 now - [displaced] displaced_step_prepare_throw: original insn 0x401030: ff 25 e2 2f 00 00 jmp *0x2fe2(%rip) # 0x404018 - [displaced] prepare: selected buffer at 0x401052 - [displaced] prepare: saved 0x401052: 1e fa 31 ed 49 89 d1 5e 48 89 e2 48 83 e4 f0 50 - [displaced] fixup_riprel: %rip-relative addressing used. - [displaced] fixup_riprel: using temp reg 2, old value 0x7ffff7f8a578, new value 0x401036 - [displaced] amd64_displaced_step_copy_insn: copy 0x401030->0x401052: ff a1 e2 2f 00 00 68 00 00 00 00 e9 e0 ff ff ff - [displaced] displaced_step_prepare_throw: prepared successfully thread=2892655.2892655.0, original_pc=0x401030, displaced_pc=0x401052 - [displaced] displaced_step_prepare_throw: replacement insn 0x401052: ff a1 e2 2f 00 00 jmp *0x2fe2(%rcx) - [displaced] finish: restored 2892655.2892655.0 0x401052 - [displaced] amd64_displaced_step_fixup: fixup (0x401030, 0x401052), insn = 0xff 0xa1 ... - [displaced] amd64_displaced_step_fixup: restoring reg 2 to 0x7ffff7f8a578 - 0x00007ffff7e402c0 in puts () from /lib64/libc.so.6 - (gdb) - - One final note. For many targets that support displaced stepping (in - fact all targets except ARM) the replacement instruction is always a - single instruction. But on ARM the replacement could actually be a - series of instructions. - - The debug code tries to handle this by disassembling the entire - displaced stepping buffer. Obviously this might actually print more - than is necessary, but there's (currently) no easy way to know how - many instructions to disassemble; that knowledge is all locked in the - architecture specific code. Still I don't think it really hurts, if - someone is looking at this debug then hopefully they known what to - expect. - - Obviously we can imagine schemes where the architecture specific - displaced stepping code could communicate back how many bytes its - replacement sequence was, and then our debug print code could use this - to limit the disassembly. But this seems like a lot of effort just to - save printing a few additional instructions in some debug output. - - I'm not proposing to do anything about this issue for now. - - Approved-By: Simon Marchi - -2023-03-29 Tom de Vries - - [gdb/testsuite] Fix gdb.guile/scm-symbol.exp for remote host - Fix test-case gdb.guile/scm-symbol.exp for remote host by making a regexp less - strict. - - Likewise in gdb.guile/scm-symtab.exp. - - Tested on x86_64-linux. - -2023-03-29 Tom de Vries - - [gdb/testsuite] Fix /gdb.guile/scm-parameter.exp for remote host - Fix test-case gdb.guile/scm-parameter.exp for remote host by taking into - account that gdb_reinitialize_dir has no effect for remote host. - - Tested on x86_64-linux. - -2023-03-29 Tom de Vries - - [gdb/testsuite] Fix gdb.guile/scm-objfile-script.exp for remote host - Fix test-case gdb.guile/scm-objfile-script.exp using gdb_remote_download. - - Tested on x86_64-linux. - -2023-03-29 Tom de Vries - - [gdb/testsuite] Fix gdb.guile/scm-objfile-script.exp for remote host - Fix test-case gdb.guile/scm-objfile-script.exp using host_standard_output_file. - - Tested on x86_64-linux. - -2023-03-29 Tom de Vries - - [gdb/testsuite] Fix gdb.guile/scm-cmd.exp without readline - Fix test-case gdb.guile/scm-cmd.exp using readline_is_used. - - Tested on x86_64-linux. - -2023-03-29 Tom de Vries - - [gdb/testsuite] Fix gdb.guile/guile.exp for remote host - Fix test-case gdb.guile/guile.exp for remote host using gdb_remote_download. - - Tested on x86_64-linux. - -2023-03-29 Alan Modra - - Sanity check section size in bfd_init_section_compress_status - This function doesn't just initialise for compression, it actually - compresses. This patch sanity checks section size before allocating - buffers for the uncompressed contents. - - * compress.c (bfd_init_section_compress_status): Sanity check - section size. - -2023-03-29 Alan Modra - - Re: Fix an aout memory leak - We have way too much duplicated code in bfd. Apply dd3a3d0af9f6 and - 920581c57e08 to pdp11.c. - - * pdp11.c (bfd_free_cached_info): Free line_buf. Return true - if tdata.aout_data is NULL. - -2023-03-29 Alan Modra - - ld testsuite CFLAGS_FOR_TARGET - run_host_cmd adds $gcc_B_opt and $ld_L_opt to the command line if it - detects the program being run is a compiler. Since the program being - run in lto.exp linking pr28138 is "sh", we need to add these by hand. - This isn't exactly as run_host_cmd does, as it lacks reordering of - any user -B option in $CC_FOR_TARGET, but it's better than ignoring - gcc_B_opt. This fixes a mips64 testsuite fail. - - ld_compile adds CFLAGS_FOR_TARGET and other flags as well, so there - is no need for the ld_compile command line to include - CFLAGS_FOR_TARGET. Fixing this is just a tidy. - - * testsuite/ld-plugin/lto.exp: Add gcc_B_opt, CFLAGS_FOR_TARGET - and $ld_L_opt to pr28138 link line. - * testsuite/lib/ld-lib.exp (run_ld_link_tests): Don't pass - unnecessary flags to ld_compile. - (run_ld_link_exec_tests, run_cc_link_tests): Likewise. - -2023-03-29 GDB Administrator - - Automatic date update in version.in - -2023-03-28 Tom Tromey - - Rename "raw" to "unrelocated" - Per an earlier discussion, this patch renames the existing "raw" APIs - to use the word "unrelocated" instead. - - Use unrelocated_addr in minimal symbols - This changes minimal symbols to use unrelocated_addr. I believe this - detected a latent bug in add_pe_forwarded_sym. - - Use unrelocated_addr in psymbols - This changes psymbols themselves to use unrelocated_addr. This - transform is largely mechanical. I don't think it finds any bugs. - - Use unrelocated_addr in partial symbol tables - This changes partial symbol tables to use unrelocated_addr for the - text_high and text_low members. This revealed some latent bugs in - ctfread.c, which are fixed here. - - Move definition of unrelocated_addr earlier - This moves the definition of unrelocated_addr a bit earlier in - symtab.h, so that it can be used elsewhere in the file. - - Use function_view in gdb_bfd_lookup_symbol - This changes gdb_bfd_lookup_symbol to use a function_view. This - simplifies the code a little bit. - -2023-03-28 Tom de Vries - - [gdb/testsuite] Fix gdb.btrace/multi-inferior.exp for remote host - Fix test-case gdb.btrace/multi-inferior.exp for remote host using - gdb_remote_download. - - Tested on x86_64-linux. - -2023-03-28 Tom de Vries - - [gdb/testsuite] Fix gdb.btrace/gcore.exp for remote host - Fix test-case gdb.btrace/gcore.exp for remote host using - host_standard_output. - - Tested on x86_64-linux. - -2023-03-28 Tom de Vries - - [gdb/testsuite] Fix gdb.btrace/reconnect.exp for remote target - Fix test-case gdb.btrace/reconnect.exp for target board - remote-gdbserver-on-localhost using gdb_remote_download. - - Tested on x86_64-linux. - -2023-03-28 Tom Tromey - - Put pretty-printers to_string output in varobj result - PR mi/11335 points out that an MI varobj will not display the result - of a pretty-printer's "to_string" method. Instead, it always shows - "{...}". - - This does not seem very useful, and there have been multiple - complaints about it over the years. This patch changes varobj to emit - this string when possible, and updates the test suite. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=11335 - -2023-03-28 Simon Marchi - - gdb/testsuite: allow "require" callbacks to provide a reason - When an allow_* proc returns false, it can be a bit difficult what check - failed exactly, if the procedure does multiple checks. To make - investigation easier, I propose to allow the "require" callbacks to be - able to return a list of two elements: the zero/non-zero value, and a - reason string. - - Use the new feature in allow_hipcc_tests to demonstrate it (it's also - where I hit actually hit this inconvenience). On my computer (where GDB - is built with amd-dbgapi support but where I don't have a suitable GPU - target), I get: - - UNSUPPORTED: gdb.rocm/simple.exp: require failed: allow_hipcc_tests (no suitable amdgpu targets found) - - vs before: - - UNSUPPORTED: gdb.rocm/simple.exp: require failed: allow_hipcc_tests - - Change-Id: Id1966535b87acfcbe9eac99f49dc1196398c6578 - Approved-By: Tom de Vries - -2023-03-28 Tom de Vries - - [gdb/testsuite] Fix gdb.server/server-kill-python.exp for remote host - Fix test-case gdb.server/server-kill-python.exp for remote host using - gdb_remote_download. - - Tested on x86_64-linux. - -2023-03-28 Tom de Vries - - [gdb/testsuite] Fix gdb.server/sysroot.exp for remote host - Fix test-case gdb.server/sysroot.exp for remote host, by: - - using gdb_remote_download, and - - disabling the "local" scenario for remote host/target, unless - remote host == remote target. - - Tested on x86_64-linux. - -2023-03-28 Tom de Vries - - [gdb/testsuite] Require non-remote host for gdb.server/multi-ui-errors.exp - Require non-remote host for test-case gdb.server/multi-ui-errors.exp, because - it uses "spawn -pty", which creates a pty on build, which gdb cannot use on - remote host. - - Tested on x86_64-linux. - -2023-03-28 Tom de Vries - - [gdb/testsuite] Fix gdb.server/solib-list.exp for remote host - Fix test-case gdb.server/solib-list.exp for remote host using - gdb_remote_download. - - Likewise in another test-case. - - Tested on x86_64-linux. - -2023-03-28 Tom de Vries - - [gdb/testsuite] Fix gdb.server/file-transfer.exp for remote host - Fix test-case gdb.server/file-transfer.exp for remote host using - gdb_remote_download and host_standard_output_file. - - Tested on x86_64-linux. - -2023-03-28 Tom de Vries - - [gdb/testsuite] Fix local-remote-host-native.exp for gdb.server tests - When running test-case gdb.server/stop-reply-no-thread-multi.exp with - host+target board local-remote-host-native, I run into a time-out: - ... - (gdb) PASS: gdb.server/stop-reply-no-thread-multi.exp: target-non-stop=off: \ - to_disable=: disconnect - builtin_spawn /usr/bin/ssh -t -l vries 127.0.0.1 gdbserver --once \ - localhost:2346 stop-reply-no-thread-multi^M - Process stop-reply-no-thread-multi created; pid = 32600^M - Listening on port 2346^M - set remote threads-packet off^M - FAIL: gdb.server/stop-reply-no-thread-multi.exp: target-non-stop=off: \ - to_disable=: set remote threads-packet off (timeout) - ... - - This is due to this line in ${board}_spawn: - ... - set board_info($board,fileid) $spawn_id - ... - - We have the following series of events: - - gdb is spawned, setting fileid - - a few gdb commands (set height etc) are send using fileid, arrive at gdb and - are successful - - gdbserver is spawned, overwriting fileid - - the next gdb command is sent using fileid, so it's send - to gdbserver instead of gdb, and we run into the timeout. - - There is some notion of current gdb, tracked in both gdb_spawn_id and fileid - of the host board (see switch_gdb_spawn_id). And because the host and target - board are the same, spawning something on the target overwrites the fileid on - host, and consequently the current gdb. - - Fix this by only setting fileid when spawning gdb. - - Tested on x86_64-linux. - - Now gdb.server/*.exp passes for host+target board local-remote-host-native, - except for file-transfer.exp. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29734 - -2023-03-28 Enze Li - - gdb: use dynamic year in update-freebsd.sh - When running update-freebsd.sh on FreeBSD, I see the following - modification in freebsd.xml, - - - - - So I looked at the strace sources, to confirm that clone3 is in fact - recorded in the "process" group there too, and to check what other - syscalls might be missing groups. - - After some digging, I found that strace records the group info in C - arrays, with entries like: - ... - [ 61] = { 4, TP, SEN(wait4), "wait4" }, - [ 62] = { 2, TS|TP, SEN(kill), "kill" }, - [ 63] = { 1, 0, SEN(uname), "uname" }, - ... - - You can see the current master's table for Linux x86-64 here: - - https://github.com/strace/strace/blob/e88e5e9ae6da68f22d15f9be3193b1412ac9aa02/src/linux/x86_64/syscallent.h - - The column with TS|TP above is what defines each syscall's groups. So - I wrote a script that extracts this information and generates - linux-defaults.xml.in. - - Approved-By: Simon Marchi - Change-Id: I679d59d42fb2a914bf7a99e4c558e9696e5adff1 - -2023-02-27 Clément Chigot - - gas/testsuite: adjust another test for case insensitive file systems - As 1fafeaac8503eea2f61c3a35f0eef183b7e7cc65, "line.s" and "Line.s" are - identical in case insensitive file systems. Thus, gas doesn't trigger - an input file switch. - - gas/ChangeLog: - - * testsuite/gas/elf/dwarf-5-macro.s: Change Line.s to Line2.s. - -2023-02-27 Andrew Burgess - - gdb: don't treat empty enums as flag enums - In C++ it is possible to use an empty enum as a strong typedef. For - example, a user could write: - - enum class my_type : unsigned char {}; - - Now my_type can be used like 'unsigned char' except the compiler will - not allow implicit conversion too and from the native 'unsigned char' - type. - - This is used in the standard library for things like std::byte. - - Currently, when GDB prints a value of type my_type, it looks like - this: - - (gdb) print my_var - $1 = (unknown: 0x4) - - Which isn't great. This gets worse when we consider something like: - - std::vector vec; - - When using a pretty-printer, this could look like this: - - std::vector of length 2, capacity 2 = {(unknown: 0x2), (unknown: 0x4)} - - Clearly not great. This is described in PR gdb/30148. - - The problem here is in dwarf2/read.c, we assume all enums are flag - enums unless we find an enumerator with a non-flag like value. - Clearly an empty enum contains no non-flag values, so we assume the - enum is a flag enum. - - I propose adding an extra check here; that is, an empty enum should - never be a flag enum. - - With this the above cases look more like: - - (gdb) print my_var - $1 = 4 - - and: - - std::vector of length 2, capacity 2 = {2, 4} - - Which look much better. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30148 - - Reviewed-By: Tom Tromey - -2023-02-27 Benson Muite - - Do not change the timestamp when updating the gas asconfig file. - PR 28909 * doc/local.mk (asconfig.texi): Use "cp -p" to preserve timestamps. * Makefile.in: Regenerate. - -2023-02-27 Felix Willgerodt - - Fix missing "Core was generated by" when loading a x32 corefile. - -2023-02-27 Nick Clifton - - Updated Serbian translations for gold, gprof and opcodes sub-directories - -2023-02-27 Bruno Larsen - - gdb/testsuite: Improve testing of GDB's completion functions - When looking at some failures of gdb.linespec/cp-completion-aliases.exp, - I noticed that when a completion test will fail, it always fails with a - timeout. This is because most completion tests use gdb_test_multiple - and only add a check for the correct output. This commit adds new - options for both, tab and command completion. - - For command completion, the new option will check if the prompt was - printed, and fail in this case. This is enough to know that the test has - failed because the check comes after the PASS path. For tab completion, - we have to check if GDB outputted more than just the input line, because - sometimes GDB would have printed a partial line before finishing with - the correct completion. - - Approved-By: Tom Tromey - -2023-02-27 Tankut Baris Aktemur - - gdb, python: do minor modernization in execute_gdb_command - Use nullptr instead of NULL and boolify two local variables in - execute_gdb_command. - - Approved-By: Tom Tromey - -2023-02-27 GDB Administrator - - Automatic date update in version.in - -2023-02-26 Tom Tromey - - Remove expand_symtab_containing_pc - The function expand_symtab_containing_pc is unused; remove it. - Tested by rebuilding. - -2023-02-26 GDB Administrator - - Automatic date update in version.in - -2023-02-25 Andrew Burgess - - gdb/amd64: replace xmalloc/alloca with gdb::byte_vector - Replace a couple of uses of xmalloc and alloc with a gdb::byte_vector - local variable instead. - - There should be no user visible changes after this commit. - - Reviewed-By: Tom Tromey - -2023-02-25 Andrew Burgess - - opcodes/m68k: enable libopcodes styling for GDB - The following commit added libopcodes styling for m68k: - - commit c22ff449275c91e4842bb10c650e83c572580f65 - Date: Tue Feb 14 18:07:19 2023 +0100 - - opcodes: style m68k disassembler output - - but didn't set disassemble_info::created_styled_output in - disassemble.c, which is needed in order for GDB to start using the - libopcodes based styling. - - This commit fixes this small oversight. GDB now styles correctly. - -2023-02-25 GDB Administrator - - Automatic date update in version.in - -2023-02-24 Khem Raj - - gdbserver/linux-low.cc: Fix a typo in ternary operator - -2023-02-24 Tom Tromey - - Remove struct buffer - I've long wanted to remove 'struct buffer', and thanks to Simon's - earlier patch, I was finally able to do so. My feeling has been that - gdb already has several decent structures available for growing - strings: std::string of course, but also obstack and even objalloc - from BFD and dyn-string from libiberty. The previous patches in this - series removed all the uses of struct buffer, so this one can remove - the code and the remaining #includes. - - Don't use struct buffer in top.c - This changes top.c to use std::string rather than struct buffer. Like - the event-top.c change, this is not completely ideal in that it - requires a copy of the string. - - Don't use struct buffer in event-top.c - This changes event-top.c to use std::string rather than struct buffer. - This isn't completely ideal, in that it requires a copy of the string - to be made. - - Don't use struct buffer in handle_qxfer_threads - This changes handle_qxfer_threads, in gdbserver, to use std::string - rather than struct buffer. - - Don't use struct buffer in handle_qxfer_btrace - This changes handle_qxfer_btrace and handle_qxfer_btrace_conf, in - gdbserver, to use std::string rather than struct buffer. - - Don't use struct buffer in handle_qxfer_traceframe_info - This changes handle_qxfer_traceframe_info, in gdbserver, to use - std::string rather than struct buffer. - - Remove struct buffer from tracefile-tfile.c - This changes tracefile-tfile.c to use std::string rather than struct - buffer. - -2023-02-24 Tom Tromey - - Write the DWARF index in the background - The new DWARF cooked indexer interacts poorly with the DWARF index - cache. In particular, the cache will require gdb to wait for the - cooked index to be finalized. As this happens in the foreground, it - means that users with this setting enabled will see a slowdown. - - This patch changes gdb to write the cache entry a worker thread. (As - usual, in the absence of threads, this work is simply done immediately - in the main thread.) - - Some care is taken to ensure that this can't crash, and that gdb will - not exit before the task is complete. - - To avoid use-after-free problems, the DWARF per-BFD object explicitly - waits for the index cache task to complete. - - To avoid gdb exiting early, an exit observer is used to wait for all - such pending tasks. - - In normal use, neither of these waits will be very visible. For users - using "-batch" to pre-generate the index, though, it would be. - However I don't think there is much to be done about this, as it was - the status quo ante. - -2023-02-24 Tom Tromey - - Only use the per-BFD object to write a DWARF index - The DWARF index does not need access to the objfile or per-objfile - objects when writing -- it's entirely based on the objfile-independent - per-BFD data. - - This patch implements this idea by changing the entire API to only be - passed the per-BFD object. This simplifies some lifetime reasoning - for the next patch. - - This patch removes some code that ensures that the BFD came from a - file. It seems to me that checking for the existence of a build-id is - good enough for the index cache. - -2023-02-24 Simon Marchi - - gdb: fix parenthesis position in comment - Change-Id: I535b597ab4482378910570d8dd69c090419941eb - -2023-02-24 Clément Chigot - - testsuite: prune DOS drive letter in test outputs - On DOS systems, absolute paths start with the drive letter. This can - trigger failures in the regexp from dump tests, especially for those - checking for warnings or errors. They are usually skipping everything - before the first ":" as it has to be the file path. - | [^:]*: warning: ... - - In order to avoid modifying many regexps to allow such drive letters, - prune them from all the outputs if they are found at the beginning of - a line. - - binutils/ChangeLog: - - * testsuite/lib/binutils-common.exp (prune_dump_output): New - (run_dump_test): Use it. - - ld/ChangeLog: - - * testsuite/ld-elf/noinit-sections-2.l: Remove DOS drive letter - handler. - -2023-02-24 Jan Beulich - - x86: allow to request ModR/M encoding - Several insns have a (typically shorter) non-ModR/M and a (typically - longer) ModR/M encoding. In most cases the former is used by default. - This isn't too dissimilar from register-only insns sometimes having two - encoding forms. In those cases {load} or {store} can be used to control - the encoding used. Extend this to ModR/M-less encodings which have a - ModR/M counterpart (note that BSWAP hasn't). For insn reading and - writing their (explicit) memory operand, both prefixes are honored; - otherwise only the applicable one is. - - Note that for some forms of XCHG, {store} has already been performing - this function, apparently as an unnoticed side effect of adding D to - the template. - -2023-02-24 Jan Beulich - - x86: MONITOR/MWAIT are not SSE3 insns - These have their own CPUID bit and hence they should also have their own - separate control. - -2023-02-24 Jan Beulich - - x86-64: don't permit LAHF/SAHF with "generic64" - The feature isn't universally available on 64-bit CPUs. - - Note that in i386-gen.c:isa_dependencies[] I'm only adding it to models - where I'm certain the functionality exists. For Nocona and Core I'm - uncertain in particular. - -2023-02-24 Jan Beulich - - x86: have insns acting on segment selector values allow for consistent operands - While MOV to/from segment register as well as selector storing insns - already permit 32- and 64-bit GPR operands, selector loading insns and - ARPL do not. Split templates accordingly. - -2023-02-24 Jan Beulich - - x86: restrict insn templates accepting negative 8-bit immediates - For shifts (but not ordinary rotates) and other cases where an immediate - describes e.g. a bit count or position, allowing negative operands is at - best confusing. An extreme example would be the two rotate-through-carry - insns, where a negative value would _not_ mean rotating the - corresponding number of bits in the other direction. To refuse such, - give meaning to the combination of Imm8 and Imm8S in templates (so far - these weren't used together anywhere). The issue was with - smallest_imm_type() blindly setting .imm8 for signed numbers determined - to fit in a byte. - - VPROT{B,W,D,Q} is a little special: The rotate count there is a signed - quantity, so Imm8 is replaced by Imm8S. Adjust affected testcases - accordingly as well. - - Another small adjustment to the testsuite is necessary: AAM and AAD were - never sensible to use with 0xffffff90 operands. This should have been an - error. - -2023-02-24 Tom de Vries - - [gdb/testsuite] Cleanup unnecessary expr from require line - In a recent commit I've added: - ... - require {expr [have_compile_flag -fsplit-stack]} - ... - but actually the expr bit is unnecessary, and we can just use: - ... - require {have_compile_flag -fsplit-stack} - ... - - Reported-By: Tom Tromey - -2023-02-24 Maciej W. Rozycki - - GDB: Fix out of bounds accesses with limited-length values - Fix accesses to limited-length values in `contents_copy_raw' and - `contents_copy_raw_bitwise' so that they observe the limit of the - original allocation. - - Reported by Simon Marchi as a heap-buffer-overflow AddressSanitizer - issue triggered with gdb.ada/limited-length.exp. - - Approved-By: Simon Marchi - -2023-02-24 Nick Clifton - - Enhance better_fit() function to prefer function symbols over non-function symbols. - -2023-02-24 Alan Modra - - PR30155, ld segfault in _bfd_nearby_section - The segfault was a symptom of messing with the absolute section next - field, confusing bfd_section_removed_from_list in linker.c:fix_syms. - That's not all that was going wrong. The INSERT list of output - sections was being inserted into itself, ie. lost from the main - list of linker statements. - - PR 30155 - * ldlang.c (process_insert_statements): Handle pathological - case of the insert script being inserted before the first - output section statement in the default script. - (output_prev_sec_find): Don't test section owner here. - (insert_os_after): Change parameter to a list union pointer. - (lang_insert_orphan): Test section owner here and adjust - insert_os_after call. - -2023-02-24 Fangrui Song - - RISC-V: Add --[no-]relax-gp to ld - --relax enables all relaxations. --no-relax-gp disables GP relaxation to - allow measuring its effect. - - The option can test effectiveness of GP relaxation and support some ABI - variants that use GP for other purposes. - - Link: https://github.com/riscv-non-isa/riscv-elf-psabi-doc/issues/298 - - bfd/ - * elfnn-riscv.c (struct riscv_elf_link_hash_table): Add params. - (riscv_elfNN_set_options): New. - (riscv_info_to_howto_rela): Check relax_gp. - (_bfd_riscv_relax_section): Likewise. - * elfxx-riscv.h (struct riscv_elf_params): New. - (riscv_elf32_set_options): New. - (riscv_elf64_set_options): New. - ld/ - * emultempl/riscvelf.em: Add option parsing. - * testsuite/ld-riscv-elf/code-model-relax-medlow-01-norelaxgp.d: New. - * testsuite/ld-riscv-elf/pcgp-relax-01-norelaxgp.d: New. - * testsuite/ld-riscv-elf/pcgp-relax-02.d: Test --relax --relax-gp can be - used together. - -2023-02-24 GDB Administrator - - Automatic date update in version.in - -2023-02-23 Palmer Dabbelt - - gdb/doc: The RISC-V vector registers didn't change - When we merged the GDB vector register support we did it a bit early, - just eating the risk in the very unlikely case that the vector register - names changed. They didn't, so we can now remove the caveat in the docs - that they might. - -2023-02-23 Simon Marchi - - gdb: remove --disable-gdbmi configure option - I noticed that the --disable-gdbmi option was broken for almost a year - (since 740b42ceb7c "gdb/python/mi: create MI commands using python"). - - The problem today is the python/py-cmd.c file. It is included in the - build if Python support is enabled, and it calls into some MI functions - (e.g. insert_mi_cmd_entry). If MI support is disabled, we get some - undefined symbols like: - - mold: error: undefined symbol: insert_mi_cmd_entry(std::unique_ptr >) - >>> referenced by py-micmd.c - >>> python/py-micmd.o:(micmdpy_install_command(micmdpy_object*)) - - The python/py-cmd.c file should be included in the build if both Python - and MI support are enabled. It is not a case we support today, but it - could be done with a bit more configure code. However, I think we - should just remove the --disable-gdbmi option, and just include MI - support unconditionally. - - Tom Tromey proposed a while ago to remove this option, but it ended - staying: - - https://inbox.sourceware.org/gdb-patches/20180628172132.28843-1-tom@tromey.com/ - - However, there was no strong opposition to remove it. The argument was - just "bah, it doesn't hurt anybody". - - But given today's case, I would rather remove complexity rather than add - some. I couldn't find anybody caring deeply for that option, and it's - not like MI adds any external dependency. It's just a bit more code. - - Removing the option will not break anybody using --disable-gdbmi (it can - be found in many build scripts [1]), since we don't flag invalid - configure flags. - - So, remove the option from configure.ac, and adjust Makefile.in - accordingly to always include the MI objects in the build. - - [1] https://github.com/search?q=%22--disable-gdbmi%22&type=code - - Change-Id: Ifcaa8c9fc4abc6fa686ed5fd984598644f745240 - Approved-By: Tom Tromey - -2023-02-23 Tom Tromey - - Fix Tcl quoting in gdb_assert - The gdb_assert proc under-quotes the expression that is passed in. - This leads to weird code in a couple of spots that tries to - compensate: - - gdb_assert {{$all_regs eq $completed_regs}} ... - - The fix is to add a bit of quoting when evaluating the expression. - -2023-02-23 Nick Clifton - - Fix _bfd_elf_find_function so that it can cope with overlapping symbols - -2023-02-23 Simon Marchi - - gdb: add AMDGPU header files to HFILES_NO_SRCDIR - Commit 18b4d0736bc5 ("gdb: initial support for ROCm platform (AMDGPU) - debugging") missed adding these header files to the HFILES_NO_SRCDIR - list in the Makefile. Fix that now. - - Change-Id: Ifd387096aef3d147b51aefa2037da5bf6373ea64 - -2023-02-23 Tom Tromey - - Remove 'eval' from gdb_breakpoint - Now that Tcl has the {*} operator, we can remove the use of eval from - gdb_breakpoint. Tested on x86-64 Fedora 36. - -2023-02-23 Hui Li - - gdb: LoongArch: Support reg aliases in info reg command - According to LoongArch ELF ABI specification [1], support the register - aliases in "info register" command. - - Without this patch: - ``` - (gdb) info reg a0 - Invalid register `a0' - - ``` - With this patch: - - ``` - (gdb) info reg a0 - - a0 0x1 1 - - ``` - [1] https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html#_register_convention - -2023-02-23 Hui Li - - gdb: LoongArch: Modify the result of the info reg command - The "info register" command should only display general registers, - but it shows the information of all registers in the current code, - add loongarch_register_reggroup_p() so that we can get the expected - result. - -2023-02-23 Alexey Lapshin - - bfd: xtensa: fix __stop_SECTION literal drop - -2023-02-23 Nick Clifton - - Fix the BFD library's find_nearest_line feature to produce consistent results. - PR 30150 - * dwarf2.c (comp_unit_contains_address): Renamed to ... (comp_unit_may_contain_address): this, - and added code to return true if the CU's ranges have not yet been computed. - (_bfd_dwarf2_find_nearest_line_with_alt): Use the renamed function, simplifying code in the process. - -2023-02-23 Alan Modra - - dwarf1 .line SEC_HAS_CONTENTS - * dwarf1.c (parse_line_table): Ignore .line without SEC_HAS_CONTENTS. - Formatting. - -2023-02-23 Alan Modra - - ip2k: don't look at stab sections without relocs - No need to read contents if we won't do anything. - - * elf32-ip2k.c (adjust_all_relocations): Skip stab sections - without relocs. - -2023-02-23 Alan Modra - - Test SEC_HAS_CONTENTS in relax routines - More places that generally expect instructions, so not zeros. - - * coff-sh.c (sh_relax_section, sh_relax_delete_bytes): Exclude - sections without SEC_HAS_CONTENTS set. - * elf-m10200.c (mn10200_elf_relax_section): Likewise. - * elf32-arc.c (arc_elf_relax_section): Likewise. - * elf32-avr.c (elf32_avr_relax_section): Likewise. - * elf32-cr16.c (elf32_cr16_relax_section): Likewise. - * elf32-crx.c (elf32_crx_relax_section): Likewise. - * elf32-epiphany.c (epiphany_elf_relax_section): Likewise. - * elf32-ft32.c (ft32_elf_relax_section): Likewise. - * elf32-h8300.c (elf32_h8_relax_section): Likewise. - * elf32-ip2k.c (ip2k_elf_relax_section): Likewise. - * elf32-m32c.c (m32c_elf_relax_section): Likewise. - * elf32-m68hc11.c (m68hc11_elf_relax_section): Likewise. - * elf32-msp430.c (msp430_elf_relax_section): Likewise. - * elf32-pru.c (pru_elf32_relax_section): Likewise. - * elf32-rl78.c (rl78_elf_relax_section): Likewise. - * elf32-rx.c (elf32_rx_relax_section): Likewise. - * elf32-sh.c (sh_elf_relax_section): Likewise. - (sh_elf_relax_delete_bytes): Likewise. - * elf32-v850.c (v850_elf_relax_section): Likewise. - * elf64-alpha.c (elf64_alpha_relax_section): Likewise. - * elf64-ia64-vms.c (elf64_ia64_relax_section): Likewise. - * elfnn-ia64.c (elfNN_ia64_relax_section): Likewise. - * elfnn-riscv.c (_bfd_riscv_relax_section): Likewise. - * elfxx-mips.c (_bfd_mips_elf_relax_section): Likewise. - -2023-02-23 Alan Modra - - Test SEC_HAS_CONTENTS before reading section contents - bfd_malloc_and_get_section does size sanity checking before allocating - memory and reading contents. These size checks are not done for bss - style sections, because they typically don't occupy file space and - thus can't be compared against file size. However, if you are - expecting to look at something other than a whole lot of zeros, don't - allow fuzzers to avoid the size checking. - - * cofflink.c (process_embedded_commands): Don't look at - sections without SEC_HAS_CONTENTS set. - * cpu-arm.c (bfd_arm_update_notes): Likewise. - (bfd_arm_get_mach_from_notes): Likewise. - * elf-eh-frame.c (_bfd_elf_parse_eh_frame): Likewise. - * elf-hppa.h (elf_hppa_sort_unwind): Likewise. - * elf-m10300.c (mn10300_elf_relax_section): Likewise. - * elf-sframe.c (_bfd_elf_parse_sframe): Likewise. - * elf.c (_bfd_elf_print_private_bfd_data): Likewise. - * elf32-arm.c (bfd_elf32_arm_process_before_allocation): Likewise. - * elf32-avr.c (avr_elf32_load_property_records): Likewise. - * elf32-ppc.c (_bfd_elf_ppc_set_arch): Likewise. - (ppc_elf_get_synthetic_symtab, ppc_elf_relax_section): Likewise. - * elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Likewise. - (opd_entry_value, ppc64_elf_edit_opd, ppc64_elf_edit_toc): Likewise. - * elf64-x86-64.c (elf_x86_64_get_synthetic_symtab): Likewise. - * elflink.c (elf_link_add_object_symbols): Likewise. - (bfd_elf_get_bfd_needed_list): Likewise. - * elfnn-aarch64.c (get_plt_type): Likewise. - * elfxx-mips.c (_bfd_mips_elf_get_synthetic_symtab): Likewise. - * linker.c (_bfd_handle_already_linked): Likewise. - * opncls.c (bfd_get_debug_link_info_1): Likewise. - (bfd_get_alt_debug_link_info, get_build_id): Likewise. - * peXXigen.c (pe_print_idata, pe_print_pdata): Likewise. - (_bfd_XX_print_ce_compressed_pdata, pe_print_reloc): Likewise. - * pei-x86_64.c (pex64_bfd_print_pdata_section): Likewise. - * stabs.c (_bfd_link_section_stabs): Likewise. - (_bfd_discard_section_stabs): Likewise. - * xcofflink.c (_bfd_xcoff_get_dynamic_symtab_upper_bound): Likewise. - (_bfd_xcoff_canonicalize_dynamic_symtab): Likewise. - (_bfd_xcoff_get_dynamic_reloc_upper_bound): Likewise. - (_bfd_xcoff_canonicalize_dynamic_reloc): Likewise. - (xcoff_link_add_dynamic_symbols): Likewise. - (xcoff_link_check_dynamic_ar_symbols): Likewise. - (bfd_xcoff_build_dynamic_sections): Likewise. - -2023-02-23 GDB Administrator - - Automatic date update in version.in - -2023-02-22 Pedro Alves - - gdb.reverse/time-reverse.exp: test both time syscall and C time function - Instead of only testing this on systems that have a SYS_time syscall, - test it everywhere using the time(2) C function, and in addition, run - the tests again using the SYS_time syscall. - - The C variant ensures that if some platform uses some syscall we are - not aware of yet, we'll still exercise it, and likely fail, at which - point we should teach GDB about the syscall. - - The explicit syscall variant is useful on platforms where the C - function does not call a syscall at all by default, e.g., on some - systems the C time function wraps an implementation provided by the - vDSO. - - Approved-By: Tom de Vries - Change-Id: Id4b755d76577d02c46b8acbfa249d9c31b587633 - -2023-02-22 Jan Beulich - - x86-64: LAR and LSL don't need REX.W - Just like we suppress emitting REX.W for e.g. MOV from/to segment - register, there's also no need for it for LAR and LSL - these can only - ever return 32-bit values and hence always zero-extend their results - anyway. - - While there also drop the redundant Word from the first operand of - the second template each - this is already implied by Reg16. - -2023-02-22 Jan Beulich - - x86: optimize BT{,C,R,S} $imm,%reg - In 64-bit mode BT can have REX.W or a data size prefix dropped in - certain cases. Outside of 64-bit mode all 4 insns can have the data - size prefix dropped in certain cases. - -2023-02-22 Alan Modra - - set bfd_error on make_tempname or make_tempdir failure - * bucomm.c (make_tempname, make_tempdir): Set bfd_error on error. - -2023-02-22 GDB Administrator - - Automatic date update in version.in - -2023-02-21 Alan Modra - - Re: objdump read_section_stabs - Also fix ubsan "applying zero offset to null pointer". - - * objdump.c (print_section_stabs): Avoid ubsan warning. - -2023-02-21 Alan Modra - - Re: objdump read_section_stabs - Commit f9c36cc99518 changed (and renamed) read_section_stabs with one - difference in overall behaviour. Previously read_section_stabs would - return a NULL for an empty section, which was then treated the same as - a missing section. Now an empty section is recognized and dumped. - This leads to NULL stabp and stabs_end in print_section_stabs. Since - stabs_end - STABSIZE is then a pointer to a very large address, the - test "stabp < stabs_end - STABSIZE" succeeds. - - * objdump.c (print_section_stabs): Correct STABSIZE comparison. - -2023-02-21 Alan Modra - - debug_link duplicate file size checks - bfd_malloc_and_get_section does these checks. - - * opncls.c (bfd_get_debug_link_info_1): Don't check section - size against file size. - (bfd_get_alt_debug_link_info): Likewise. - -2023-02-21 Tom Tromey - - Issue error on erroneous expression - A while back I discovered that this does not issue an error: - - (gdb) p $x = (void * ) 57 - $3 = (void *) 0x39 - (gdb) p $x + 7 = 3 - $6 = (void *) 0x3 - - This patch fixes the bug. - Regression tested on x86-64 Fedora 36. - - Reviewed-By: Bruno Larsen - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=19312 - -2023-02-21 Philippe Blain - - gdb: add --with-curses to --configuration output - 'gdb --configuration' does not mention if GDB was built with curses. - Since b5075fb68d4 (Rename to allow_tui_tests, 2023-01-08) it does show - --enable-tui (or --disable-tui), but one might want to know if GDB was - built with curses independently of the availability of the TUI. - - Since configure.ac uses AC_SEARCH_LIBS to check for the curses library, - we do not get an automatically defined HAVE_LIBCURSES symbol in - config.in. We do have symbols defined by AC_CHECK_HEADERS - (HAVE_CURSES_H, etc.) but it would be cumbersome to use those in - print_gdb_configuration because we would have to check for all 6 symbols - corresponding the 6 headers listed. This would also increase the - maintenance burden if support for other variations of curses are added. - - Instead, define 'HAVE_LIBCURSES' ourselves by adding an - 'action-if-found' argument to AC_SEARCH_LIBS, and use it in - print_gdb_configuration. - - While at it, remove the condition on 'ac_cv_search_waddstr' and set - 'curses_found' directly in 'action-if-found'. - - Change-Id: Id90e3d73990e169cee51bcc3e1d52072cfacd5b8 - Approved-By: Simon Marchi - -2023-02-21 Tom de Vries - - [gdb/testsuite] Require compilation flags in two gdb.arch/aarch64 test-cases - With test-cases gdb.arch/aarch64-mte-core.exp and gdb.arch/aarch64-pauth.exp I - run into compilation errors due to unsupported compilation flags. - - Fix this by requiring the compilation flags, such that I have instead: - ... - UNSUPPORTED: gdb.arch/aarch64-mte-core.exp: require failed: \ - have_compile_flag -march=armv8.5-a+memtag - UNSUPPORTED: gdb.arch/aarch64-pauth.exp: require failed: \ - have_compile_flag -mbranch-protection=pac-ret+leaf - ... - - Tested on aarch64-linux. - -2023-02-21 Tom de Vries - - [gdb/testsuite] Require istarget x86* in gdb.reverse/step-indirect-call-thunk.exp - On aarch64-linux, I run into: - ... - Running gdb.reverse/step-indirect-call-thunk.exp ... - gdb compile failed, gcc: error: unrecognized command line option \ - '-mindirect-branch=thunk'; did you mean '-findirect-inlining'? - gcc: error: unrecognized command line option '-mfunction-return=thunk'; \ - did you mean '-Wfunction-elimination'? - UNTESTED: gdb.reverse/step-indirect-call-thunk.exp: failed to prepare - ... - - Fix this by requiring istarget "x86*", similar to what was added in - gdb.base/step-indirect-call-thunk.exp by commit 43127ae5714 ("Fix - gdb.base/step-indirect-call-thunk.exp"), such that we have instead: - ... - UNSUPPORTED: gdb.reverse/step-indirect-call-thunk.exp: require failed: \ - istarget "x86* - ... - - Tested on x86_64-linux and aarch64-linux. - -2023-02-21 Tom de Vries - - [gdb/testsuite] Require -fsplit-stack in gdb.base/morestack.exp - On aarch64-linux, I run into: - ... - gdb compile failed, cc1: error: '-fsplit-stack' is not supported by this \ - compiler configuration - UNTESTED: gdb.base/morestack.exp: failed to prepare - ... - - Fix this by requiring -fsplit-stack, such that we have instead: - ... - UNSUPPORTED: gdb.base/morestack.exp: require failed: \ - expr [have_compile_flag -fsplit-stack] - ... - - Tested on x86_64-linux and aarch64-linux. - -2023-02-21 Tom de Vries - - [gdb/testsuite] Require syscall time in gdb.reverse/time-reverse.exp - On aarch64-linux, I run into: - ... - Running gdb.reverse/time-reverse.exp ... - gdb compile failed, gdb.reverse/time-reverse.c: In function 'main': - gdb.reverse/time-reverse.c:39:12: error: 'SYS_time' undeclared \ - (first use in this function); did you mean 'SYS_times'? - syscall (SYS_time, &time_global); - ^~~~~~~~ - SYS_times - gdb.reverse/time-reverse.c:39:12: note: each undeclared identifier is \ - reported only once for each function it appears in - UNTESTED: gdb.reverse/time-reverse.exp: failed to prepare - ... - - Fix this by adding a new proc have_syscall, and requiring syscall time, such - that we have instead: - ... - UNSUPPORTED: gdb.reverse/time-reverse.exp: require failed: \ - expr [have_syscall time] - ... - - Tested on x86_64-linux and aarch64-linux. - -2023-02-21 Tom de Vries - - [gdb/testsuite] Require python in gdb.dap/basic-dap.exp - When running test-case gdb.dap/basic-dap.exp with a gdb without python - support, I run into: - ... - builtin_spawn gdb -nw -nx -iex set height 0 -iex set width 0 \ - -data-directory data-directory -iex set debug dap-log-file dap.log.1 -q \ - -i=dap - >>> {"seq": 1, "type": "request", "command": "initialize"} - Interpreter `dap' unrecognized - ERROR: eof reading json header - ... - - Fix this by requiring python in the test-case. - - Tested on x86_64-linux, both with a gdb without and with python. - -2023-02-21 Nick Clifton - - Update the description of the bfd_fill_in_gnu_debuglink_section function - - Updated translatios for the bfd and gprof directories. - -2023-02-21 Clément Chigot - - gas/testsuite: adjust a test for case insensitive file systems - When dealing with case insensitive file systems, ".file line.s" and - ".file Line.s" are identical and thus gas won't change the current - input file. - However, in line.l test, it's expecting to trigger an input file switch. - As the second filename doesn't matter in it, change it to fit for those - file systems. - - gas/ChangeLog: - - * testsuite/gas/elf/line.l: Change Line.s to Line2.s. - * testsuite/gas/elf/line.s: Adjust output. - -2023-02-21 Luis Machado - - [aarch64] Enable pointer authentication support for aarch64 bare metal/kernel mode addresses - At the moment GDB only handles pointer authentication (pauth) for userspace - addresses and if we're debugging a Linux-hosted program. - - The Linux Kernel can be configured to use pauth instructions for some - additional security hardening, but GDB doesn't handle this well. - - To overcome this limitation, GDB needs a couple things: - - 1 - The target needs to advertise pauth support. - 2 - The hook to remove non-address bits from a pointer needs to be registered - in aarch64-tdep.c as opposed to aarch64-linux-tdep.c. - - There is a patch for QEMU that addresses the first point, and it makes - QEMU's gdbstub expose a couple more pauth mask registers, so overall we will - have up to 4 pauth masks (2 masks or 4 masks): - - pauth_dmask - pauth_cmask - pauth_dmask_high - pauth_cmask_high - - pauth_dmask and pauth_cmask are the masks used to remove pauth signatures - from userspace addresses. pauth_dmask_high and pauth_cmask_high masks are used - to remove pauth signatures from kernel addresses. - - The second point is easily addressed by moving code around. - - When debugging a Linux Kernel built with pauth with an unpatched GDB, we get - the following backtrace: - - #0 __fput (file=0xffff0000c17a6400) at /repos/linux/fs/file_table.c:296 - #1 0xffff8000082bd1f0 in ____fput (work=) at /repos/linux/fs/file_table.c:348 - #2 0x30008000080ade30 [PAC] in ?? () - #3 0x30d48000080ade30 in ?? () - Backtrace stopped: previous frame identical to this frame (corrupt stack?) - - With a patched GDB, we get something a lot more meaningful: - - #0 __fput (file=0xffff0000c1bcfa00) at /repos/linux/fs/file_table.c:296 - #1 0xffff8000082bd1f0 in ____fput (work=) at /repos/linux/fs/file_table.c:348 - #2 0xffff8000080ade30 [PAC] in task_work_run () at /repos/linux/kernel/task_work.c:179 - #3 0xffff80000801db90 [PAC] in resume_user_mode_work (regs=0xffff80000a96beb0) at /repos/linux/include/linux/resume_user_mode.h:49 - #4 do_notify_resume (regs=regs@entry=0xffff80000a96beb0, thread_flags=4) at /repos/linux/arch/arm64/kernel/signal.c:1127 - #5 0xffff800008fb9974 [PAC] in prepare_exit_to_user_mode (regs=0xffff80000a96beb0) at /repos/linux/arch/arm64/kernel/entry-common.c:137 - #6 exit_to_user_mode (regs=0xffff80000a96beb0) at /repos/linux/arch/arm64/kernel/entry-common.c:142 - #7 el0_svc (regs=0xffff80000a96beb0) at /repos/linux/arch/arm64/kernel/entry-common.c:638 - #8 0xffff800008fb9d34 [PAC] in el0t_64_sync_handler (regs=) at /repos/linux/arch/arm64/kernel/entry-common.c:655 - #9 0xffff800008011548 [PAC] in el0t_64_sync () at /repos/linux/arch/arm64/kernel/entry.S:586 - Backtrace stopped: Cannot access memory at address 0xffff80000a96c0c8 - -2023-02-21 Clément Chigot - - ld/testsuite: don't output to /dev/null - Mingw doesn't have /dev/null and thus "-o /dev/null" will fail. - Currently, all the options are checked using this "-o /dev/null", - resulting in them being disabled on mingw hosts. - Fix that by outputting to a real file for all targets. - - ld/ChangeLog: - - * testsuite/config/default.exp: Replace "-o /dev/null" by a - file. - -2023-02-21 Alan Modra - - Both FAIL and PASS "check sections 2"? - * testsuite/ld-checks/checks.exp (check sections 2): Don't - continue on with rest of test past first fail. - - ld-libs test on alpha-vms - * testsuite/ld-libs/libs.exp: Don't run for alpha-vms. - -2023-02-21 Alan Modra - - alpha-*-vms missing libraries - For this: - ./ld-new: cannot find -limagelib: No such file or directory - ./ld-new: cannot find -lstarlet: No such file or directory - ./ld-new: cannot find -lsys$public_vectors: No such file or directory - the logs showed - creating dummy tmpdir/libimagelib: - creating dummy No - creating dummy such - etc. - So rubbish instead of tmpdir/libimagelib.a and the other required libs. - - * testsuite/config/default.exp: Correct regex detecting missing - libraries automatically searched by alpha-dec-vms-ld. - -2023-02-21 GDB Administrator - - Automatic date update in version.in - -2023-02-20 Tom Tromey - - Redefine FUNCTION in doc.str - FUNCTION is identical to func, so simplify doc.str. - - 2023-02-17 Tom Tromey - - * doc/doc.str (FUNCTION): Call func. - -2023-02-20 Tom Tromey - - Hoist the SECTION comment in opncls.c - The opening and closing node in BFD starts: - - File: bfd.info, [...] - - /* Set to N to open the next N BFDs using an alternate id space. */ - extern unsigned int bfd_use_reserved_id; - - 2.13 Opening and closing BFDs - ============================= - - That is, there's a stray C comment and declaration before any other - text or subsections. - - This occurs because the code fragment for bfd_use_reserved_id comes - before the SECTION comment. Hoisting it makes this a little nicer. - - 2023-02-17 Tom Tromey - - * opncls.c: Hoist the SECTION comment. - -2023-02-20 Tom Tromey - - Don't use chew comments for static functions - I found a few static functions in the BFD manual. These can't be - called by any user of the library, so I don't think it's useful to put - them in the manual. This patch removes the chew markup from their - comments. - - 2023-02-17 Tom Tromey - - * opncls.c (bfd_get_debug_link_info_1, separate_debug_file_exists) - (separate_alt_debug_file_exists, find_separate_debug_file) - (get_build_id, get_build_id_name, check_build_id_file): Don't use - chew comments. - -2023-02-20 Tom Tromey - - Fix formatting of long function description in chew output - Currently, if a function description spans a line, the resulting info - can look like this: - - -- Function: long bfd_canonicalize_reloc - (bfd *abfd, asection *sec, arelent **loc, asymbol **syms); Call the - back end associated with the open BFD ABFD and translate the - external form of the relocation information attached to SEC into - the internal canonical form. Place the table into memory at LOC, - - That is, the function prototype runs together with the text in an ugly - way. This patch fixes this by introducing a new primitive, so that - the generated Texinfo can be a bit nicer. Now this output looks like: - - -- Function: long bfd_canonicalize_reloc (bfd *abfd, asection *sec, - arelent **loc, asymbol **syms); - Call the back end associated with the open BFD ABFD and translate - the external form of the relocation information attached to SEC - - 2023-02-17 Tom Tromey - - * doc/doc.str (SYNOPSIS): Use collapse_whitespace. - * doc/chew.c (collapse_whitespace): New function. - (main): Register collapse_whitespace. - -2023-02-20 Andreas Schwab - - opcodes: style m68k disassembler output - -2023-02-20 Simon Marchi - - gdb: revert one erroneous bool-ification change - Commit 42c13555ff88 ("Change value::m_stack to bool") erroneously - changed a `0` to `false` in this call to read_value_memory. This - parameter is `LONGEST bit_offset`, it should stay `0`. - - Change-Id: I128df6834cf8055ec6a7051e237e379978d3d651 - -2023-02-20 Clément Chigot - - ld/testsuite: handle Windows drive letter in a noinit test - The regexp in "noinit sections (ld -r)" is skipping the file path before - the first ":". However, on Windows, a path can start with "C:". Adjust - the regexp to allow such cases. - - ld/ChangeLog: - - * testsuite/ld-elf/noinit-sections-2.l: Allow Windows paths - (starting with C:). - -2023-02-20 Clément Chigot - - ld/testsuite: adjust to Windows path separator. - In some tests, the path reported on Windows will have a \ instead of a - /. This occurs when a file is concatened with the search path in - ldfile.c.: "ld -Ltmpdir -ltext" will result into "tmpdir\libtext.a". - - ld/ChangeLog: - - * testsuite/ld-elf/retain5.map: Allow \ path separator. - * testsuite/ld-plugin/plugin-10.d: Likewise. - * testsuite/ld-plugin/plugin-11.d: Likewise. - * testsuite/ld-plugin/plugin-18.d: Likewise. - * testsuite/ld-plugin/plugin-19.d: Likewise. - * testsuite/ld-plugin/plugin-20.d: Likewise. - * testsuite/ld-plugin/plugin-22.d: Likewise. - -2023-02-20 Andrew Burgess - - gdb/doc: Consistency fixes for GDB/MI documentation - I noticed two inconsistencies in the GDB/MI documentation, which this - commit addresses: - - 1. Each MI command is introduced like this: - - @subheading The @code{-command-name} Command - - Except for a few of the tracing command, which just use: - - @subheading -command-name - - In this commit I've updated all these trace commands to use the - more common format. - - 2. Each MI command starts with a @subheading, and then the details - of that command are split up using multiple @subsubheading - entries. - - Except for a few commands which use @subheading for the top-level - command, and then continue to use @subheading for each part of - the command description. - - In this commit I've updated these to use @subsubheading where - appropriate. - -2023-02-20 Nick Clifton - - So the linker from producing an export data table when run with --exclude-all-symbols. - PR 30004 * pe-dll.c (pe_dll_build_sections): Do not build an edata section if all symbols are being excluded. - -2023-02-20 Tom de Vries - - [gdb/symtab] Trust epilogue unwind info for unknown or non-gcc producer - Currently we only trust epilogue unwind info only for gcc >= 4.5.0. - - This has the effect that we don't trust epilogue unwind info for: - - unknown producers (CU without DW_AT_producer attribute) - - non-gcc producers (say, clang). - - Instead, only distrust epilogue unwind info only for gcc < 4.5.0. - -2023-02-20 Tom de Vries - - [gdb/symtab] Trust epilogue unwind info for unknown producer (-g0 case) - For a -g0 -fasynchronous-unwind-tables exec (without .debug_info but with - .eh_frame section), start using the dwarf2 unwinder instead of the - "amd64 epilogue override" unwinder, by returning true in - compunit_epilogue_unwind_valid for cust == nullptr. - - This has effect both on the amd64 and i386 targets, but only add amd64 - test-case gdb.base/unwind-on-each-insn-amd64-2.exp. - -2023-02-20 Tom de Vries - - [gdb/tdep] Add amd64/i386 epilogue override unwinders - For amd64 the current frame-unwinders are: - ... - $ gdb -q -batch -ex "set arch i386:x86-64" -ex "maint info frame-unwinders" - The target architecture is set to "i386:x86-64". - dummy DUMMY_FRAME - dwarf2 tailcall TAILCALL_FRAME - inline INLINE_FRAME - python NORMAL_FRAME - amd64 epilogue NORMAL_FRAME - dwarf2 NORMAL_FRAME - dwarf2 signal SIGTRAMP_FRAME - amd64 sigtramp SIGTRAMP_FRAME - amd64 prologue NORMAL_FRAME - ... - - For a -g0 -fasynchronous-unwind-tables exec (without .debug_info but with - .eh_frame section), we'd like to start using the dwarf2 unwinder instead of - the "amd64 epilogue" unwinder, by returning true in - compunit_epilogue_unwind_valid for cust == nullptr. - - But we'd run into the following problem for a -g0 - -fno-asynchronous-unwind-tables (without .debug_info and .eh_frame section) - exec: - - the "amd64 epilogue" unwinder would not run - (because compunit_epilogue_unwind_valid () == true) - - the dwarf2 unwinder would also not run - (because there's no .eh_frame info). - - Fix this by: - - renaming the "amd64 epilogue" unwinder to "amd64 epilogue override", and - - adding a fallback "amd64 epilogue" after the dwarf unwinders, - while making sure that only one of the two is active. Likewise for i386. NFC. - - For amd64, this results in this change: - ... - $ gdb -q -batch -ex "set arch i386:x86-64" -ex "maint info frame-unwinders" - The target architecture is set to "i386:x86-64". - dummy DUMMY_FRAME - dwarf2 tailcall TAILCALL_FRAME - inline INLINE_FRAME - python NORMAL_FRAME - -amd64 epilogue NORMAL_FRAME - +amd64 epilogue override NORMAL_FRAME - dwarf2 NORMAL_FRAME - dwarf2 signal SIGTRAMP_FRAME - +amd64 epilogue NORMAL_FRAME - amd64 sigtramp SIGTRAMP_FRAME - amd64 prologue NORMAL_FRAME - ... - - And for i386: - ... - $ gdb -q -batch -ex "set arch i386" -ex "maint info frame-unwinders" - The target architecture is set to "i386". - dummy DUMMY_FRAME - dwarf2 tailcall TAILCALL_FRAME - iline INLINE_FRAME - -i386 epilogue NORMAL_FRAME - +i386 epilogue override NORMAL_FRAME - dwarf2 NORMAL_FRAME - dwarf2 signal SIGTRAMP_FRAME - +i386 epilogue NORMAL_FRAME - i386 stack tramp NORMAL_FRAME - i386 sigtramp SIGTRAMP_FRAME - i386 prologue NORMAL_FRAME - ... - -2023-02-20 Tom de Vries - - [gdb/tdep] Fix amd64/i386_stack_frame_destroyed_p - The use of compunit_epilogue_unwind_valid in both amd64_stack_frame_destroyed_p - and i386_stack_frame_destroyed_p is problematic, in the sense that the - functions no longer match their documented behaviour. - - Fix this by moving the use of compunit_epilogue_unwind_valid to - amd64_epilogue_frame_sniffer and i386_epilogue_frame_sniffer. No functional - changes. - -2023-02-20 Tom de Vries - - [gdb/symtab] Factor out compunit_epilogue_unwind_valid - Factor out compunit_epilogue_unwind_valid from both - amd64_stack_frame_destroyed_p and i386_stack_frame_destroyed_p. No functional - changes. - - Also add a comment in the new function about the assumption that in absence of - producer information, epilogue unwind info is invalid. - - Approved-By: Tom Tromey - -2023-02-20 Tom de Vries - - [gdb/testsuite] Add xfail case in gdb.python/py-record-btrace.exp - I came across: - ... - gdb) PASS: gdb.python/py-record-btrace.exp: prepare record: stepi 100 - python insn = r.instruction_history^M - warning: Non-contiguous trace at instruction 1 (offset = 0x3e10).^M - (gdb) FAIL: gdb.python/py-record-btrace.exp: prepare record: python insn = r.i\ - nstruction_history - ... - - I'm assuming it's the same root cause as for the already present XFAIL. - - Fix this by recognizing above warning in the xfail regexp. - - Tested on x86_64-linux, although sofar I was not able to trigger the warning - again. - - Approved-By: Markus T. Metzger - -2023-02-20 Tom de Vries - - [gdb/testsuite] Fix gdb.threads/schedlock.exp for gcc 4.8.5 - Since commit 9af467b8240 ("[gdb/testsuite] Fix gdb.threads/schedlock.exp on - fast cpu"), the test-case fails for gcc 4.8.5. - - The problem is that for gcc 4.8.5, the commit turned a two-line loop: - ... - (gdb) next - 78 while (*myp > 0) - (gdb) next - 81 MAYBE_CALL_SOME_FUNCTION(); (*myp) ++; - (gdb) next - 78 while (*myp > 0) - ... - into a three-line loop: - ... - (gdb) next - 83 MAYBE_CALL_SOME_FUNCTION(); (*myp) ++; - (gdb) next - 84 cnt++; - (gdb) next - 85 } - (gdb) next - 83 MAYBE_CALL_SOME_FUNCTION(); (*myp) ++; - (gdb) - ... - and the test-case doesn't expect this. - - Fix this by reverting back to the original loop shape as much as possible by: - - removing the cnt++ line - - replacing "while (1)" with "while (one)", where one is a volatile variable - set to 1. - - Tested on x86_64-linux, using compilers: - - gcc 4.8.5, 7.5.0, 12.2.1 - - clang 4.0.1, 13.0.1 - -2023-02-20 Alan Modra - - In-memory nested archives - alpha-linuxecoff has compressed archives that are decompressed to a - bfd-in-memory. We'd need to handle quite a lot of corner cases to - support nesting of such archives, so just stop it before we run into - segfaults later. - - * opncls.c (_bfd_new_bfd_contained_in): Prohibit nested - archives in memory. - -2023-02-20 GDB Administrator - - Automatic date update in version.in - -2023-02-19 Tom Tromey - - Convert contained_in to method - This converts contained_in to be a method of block. - - Make block members 'private' - This changes block to make the data members 'private'. - - Remove allocate_block and allocate_global_block - This removes allocate_block and allocate_global_block in favor of - simply calling 'new'. - - Have global_block inherit from block - This changes global_block to inherit from block, which is what was - always intended. - - Use 'new' for block and global_block - This changes block and global_block to add initializers, and then to - use 'new' for allocation. - -2023-02-19 Tom Tromey - - Fix memory leak in mdebugread.c - mdebugread.c allocates blocks on the heap. However, this is a memory - leak if the corresponding objfile is ever destroyed. - - This patch changes this code to use allocate_block instead, fixing a - FIXME from 2003. - - I don't know how to test this patch. - -2023-02-19 Tom Tromey - - Remove ALL_BLOCK_SYMBOLS - This removes ALL_BLOCK_SYMBOLS in favor of foreach. - - Remove ALL_BLOCK_SYMBOLS_WITH_NAME - This removes ALL_BLOCK_SYMBOLS_WITH_NAME in favor of foreach. - - Convert explicit iterator uses to foreach - This converts most existing explicit uses of block_iterator to use - foreach with the range iterator instead. - - Introduce a block iterator wrapper - This introduces a C++-style iterator that wraps the existing - block_iterator. It also adds a range adapter. These will be used in - a later patch. - - Combine both styles of block iterator - This merges the two styles of block iterator, having the - initialization API decide which to use based on an optional parameter. - - Store 'name' in block_iterator - This changes the block_iterator to store the 'name' that is used by - block_iter_match_next. This avoids any problem where the name could - be passed inconsistently, and also makes the subsequent patches easier - to understand. - - Convert block_static_link to method - This converts block_static_link to be a method. This was mostly - written by script. - - Convert set_block_compunit_symtab to method - This converts set_block_compunit_symtab to be a method. This was - mostly written by script. - - Convert block_static_block and block_global_block to methods - This converts block_static_block and block_global_block to be methods. - This was mostly written by script. It was simpler to convert them at - the same time because they're often used near each other. - - Convert block_containing_function to method - This converts block_containing_function to be a method. This was - mostly written by script. - - Convert block_linkage_function to method - This converts block_linkage_function to be a method. This was mostly - written by script. - - Convert more block functions to methods - This converts block_scope, block_set_scope, block_using, and - block_set_using to be methods. These are all done at once to make it - easier to also convert block_initialize_namespace at the same time. - This was mostly written by script. - - Convert block_inlined_p to method - This converts block_inlined_p to be a method. This was mostly written - by script. - - Convert block_gdbarch to method - This converts block_gdbarch to be a method. This was mostly written - by script. - - Convert block_objfile to method - This converts block_objfile to be a method. This was mostly written - by script. - - Don't allow NULL as an argument to block_global_block - block_global_block has special behavior when the block is NULL. - Remove this and patch up the callers instead. - - Don't allow NULL as an argument to block_static_block - block_static_block has special behavior when the block is NULL. - Remove this and patch up the callers instead. - - Don't allow NULL as an argument to block_using - block_using has special behavior when the block is NULL. - Remove this. No caller seems to be affected. - - Don't allow NULL as an argument to block_scope - block_scope has special behavior when the block is NULL. - Remove this and patch up the callers instead. - - Avoid extra allocations in block - block_set_scope and block_set_using unconditionally allocate the block - namespace object. However, this isn't truly needed, so arrange to - only allocate when it is. - - Rearrange block.c to avoid a forward declaration - Moving block_initialize_namespace before its callers lets us avoid a - forward declaration. - -2023-02-19 Alan Modra - - Buffer overflow in evax_bfd_print_eobj - * vms-alpha.c (evax_bfd_print_eobj): Rewrite header handling, - sanity checking rec_len. Check bfd_malloc return. - -2023-02-19 Tom Tromey - - Avoid memory leak in chew - An earlier patch of mine introduced a memory leak in chew. The bug - was that the new "variable" word didn't free the following word. This - patch fixes it by arranging to transfer ownership of the name to the - variable itself. - - * doc/chew.c (add_variable): New function, from - add_intrinsic_variable. - (add_intrinsic_variable): Call add_variable. - (compile): Call add_variable. - -2023-02-19 GDB Administrator - - Automatic date update in version.in - -2023-02-18 Tom Tromey - - Fix "start" for D, Rust, etc - The new DWARF indexer broke "start" for some languages. - - For D, it is broken because, while the code in cooked_index_shard::add - specifically excludes Ada, it fails to exclude D. This means that the - C "main" will be detected as "main" here -- whereas what is intended - is for the code in find_main_name to use d_main_name to find the name. - - The Rust compiler, on the other hand, uses DW_AT_main_subprogram. - However, the code in dwarf2_build_psymtabs_hard fails to create a - fully-qualified name, so the name always ends up as plain "main". - - For D and Ada, a very simple approach suffices: remove the check - against "main" from cooked_index_shard::add. This also has the - benefit of slightly speeding up DWARF indexing. I assume this - approach will work for Pascal and Modula-2 as well, but I don't have a - way to test those at present. - - For Rust, though, this is not sufficient. And, computing the - fully-qualified name in dwarf2_build_psymtabs_hard will crash, because - cooked_index_entry::full_name uses the canonical name -- and that is - not computed until after canonicalization. - - However, we don't want to wait for canonicalization to be done before - computing the main name. That would remove any benefit from doing - canonicalization is the background. - - This patch solves this dilemma by noticing that languages using - DW_AT_main_subprogram are, currently, disjoint from languages - requiring canonicalization. Because of this, we can add a parameter - to full_name to let us avoid crashes, slowdowns, and races here. - - This is kind of tricky and ugly, so I've tried to comment it - sufficiently. - - While doing this, I had to change gdb.dwarf2/main-subprogram.exp. A - different possibility here would be to ignore the canonicalization - needs of C in this situation, because those only affect certain types. - However, I chose this approach because the test case is artificial - anyhow. - - A long time ago, in an earlier threading attempt, I changed the global - current_language to be a function (hidden behind a macro) to let us - attempt lazily computing the current language. Perhaps this approach - could still be made to work. However, that also seemed rather tricky, - more so than this patch. - - Reviewed-By: Andrew Burgess - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30116 - -2023-02-18 Tom Tromey - - Fix crash in go_symbol_package_name - go_symbol_package_name package name asserts that it is only passed a - Go symbol, but this is not enforced by one caller. It seems simplest - to just check and return early in this case. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17876 - Reviewed-By: Andrew Burgess - -2023-02-18 Tom Tromey - - Avoid manual memory management in go-lang.c - I noticed a couple of spots in go-lang.c that could be improved by - using unique_ptr. - - Reviewed-By: Andrew Burgess - -2023-02-18 GDB Administrator - - Automatic date update in version.in - -2023-02-17 Andrew Burgess - - gdb: fix regression in gdb.xml/maint_print_struct.exp - A regression in gdb.xml/maint_print_struct.exp was introduced with - commit: - - commit 81b86eced24f905545b58aa6c27478104c364976 - Date: Fri Jan 6 09:30:40 2023 -0700 - - Do not record a rejected target description - - The test relied on an invalid target description being stored within - the tdesc_info of the current inferior, the above commit stopped this - behaviour. - - Update the test to check that the invalid architecture is NOT stored, - and then check printing the target description directly from the - file. - - Approved-By: Tom Tromey - -2023-02-17 Vladimir Mezentsev - - gprofng: fix Dwarf reader for DW_TAG_subprogram - gprofng/ChangeLog - 2023-02-16 Vladimir Mezentsev - - * src/Dwarf.cc: Skip DW_TAG_subprogram when DW_AT_declaration is 1. - -2023-02-17 Vladimir Mezentsev - - gprofng: PR30036 Build failure on aarch64 w/ glibc: symbol `pwrite64' is already defined - gprofng/ChangeLog - 2023-02-16 Vladimir Mezentsev - - PR gprofng/30036 - * libcollector/iotrace.c: Define creat64 and pwrite64 only when - __USE_LARGEFILE64 and __USE_FILE_OFFSET64 are not defined. - * libcollector/mmaptrace.c: Likewise for mmap64. - -2023-02-17 Aditya Vidyadhar Kamath - - Fix multi-threaded debugging under AIX - Multi-threaded debugging using the libpthdebug debug interface - is currently broken due to multiple issues. - - When debugging a single inferior, we were getting assertion - failures in get_aix_thread_info as no tp->priv structure was - allocated for the main thread. - - We fixed this by switching the main - thread from a (pid, 0, 0) ptid_t to a (pid, 0, tid) ptid_t and - allocaing the tp->priv structure in sync_threadlists. - - As a result, the switch_to_thread call in pdc_read_data could - now fail since the main thread no longer uses (pid, 0, 0). - - So we replaced the call by only switching inferior_ptid, the current - inferior, and the current address space (like proc-service.c). - Add similar switching to pdc_write_data where it was missing - completely. - - When debugging multiple inferiors, an additional set of - problems prevented correct multi-threaded debugging: - - First of all, aix-thread.c used to have a number of global - variables holding per-inferior information. - - We switched hese - to a per-inferior data structure instead. - - Also, sync_threadlists was getting confused as we were - comparing the list of threads returned by libpthdebug - for *one* process with GDB's list of threads for *all* - processes. Now we only use he GDB threads of the current - inferior instead. - - We also skip calling pd_activate - from pd_enable if that in_initial_library_scan flag is - true for the current inferior. - - Finally, the presence of the thread library in any but - the first inferior was not correctly detected due to a - bug in solib-aix.c, where the BFD file name for shared - library members was changed when the library was loaded - for the first time, which caused the library to no longer - be recognized by name when loaded a second time. - -2023-02-17 Tom Tromey - - Remove two unnecessary returns in ada-lang.c - I found a couple of spots in ada-lang.c where a return follows a call - to error. These are unnecessary because error never returns. - -2023-02-17 Tom de Vries - - [gdb/testsuite] Simplify gdb.arch/amd64-disp-step-avx.exp - On SLE-11, with glibc 2.11.3, I run into: - ... - (gdb) PASS: gdb.arch/amd64-disp-step-avx.exp: vex3: \ - var128 has expected value after - continue^M - Continuing.^M - ^M - Program received signal SIGSEGV, Segmentation fault.^M - 0x0000000000400283 in _exit (status=0) at \ - ../sysdeps/unix/sysv/linux/_exit.c:33^M - 33 ../sysdeps/unix/sysv/linux/_exit.c: No such file or directory.^M - (gdb) FAIL: gdb.arch/amd64-disp-step-avx.exp: \ - continue until exit at amd64-disp-step-avx - ... - - This is not related to gdb, we get the same result by just running the exec. - - The problem is that the test-case: - - calls glibc's _exit, and - - uses -nostartfiles -static, putting the burden for any necessary - initialization for calling glibc's _exit on the test-case itself. - - So, when we get to the second insn in _exit: - ... - 000000000040acb0 <_exit>: - 40acb0: 48 63 d7 movslq %edi,%rdx - 40acb3: 64 4c 8b 14 25 00 00 mov %fs:0x0,%r10 - ... - no glibc-related initialization is done, and we run into the segfault. - - Adding this (borrowed from __libc_start_main) in _start in the .S file is - sufficient to fix it: - ... - .rept 200 - nop - + call __pthread_initialize_minimal - .endr - ... - But that already doesn't compile with say glibc 2.31, and regardless I think - this sort of fix is too fragile. - - We could of course fix this by simply not running to exit. But ideally we'd - have an exec that doesn't segfault when you just run it. - - Alternatively, we could hand-code an _exit syscall and bypass glibc - all together. But I'd rather fix this in a way that simplifies the test-case. - - Taking a step back, the -nostartfiles -static was added to address that the - xmm registers were not zero at main (which AFAICT is a valid thing to happen). - - [ The change itself silently broke the test-case, needing further fixing by - commit 40310f30a51 ("gdb: make gdb.arch/amd64-disp-step-avx.exp actually test - displaced stepping"). ] - - Instead, simplify things by reverting to the original situation: - - no -nostartfiles -static compilation flags, - - no _start in the .S file, - - use exit instead of _exit in the .S file, - and fix the original problem by setting the xmm registers to zero rather than - checking that they're zero. - - Now that we're no longer forcing -static, add nopie to the flags to prevent - compilation failure with target board unix/-fPIE/-pie. - - Tested on x86_64-linux. - - PR testsuite/30132 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30132 - -2023-02-17 Alan Modra - - ld test asciz and ascii fails - Fix these fails: - alpha-dec-vms +FAIL: ld-scripts/asciz - alpha-dec-vms +FAIL: ld-scripts/ascii - i386-go32 +FAIL: ld-scripts/asciz - sh-coff +FAIL: ld-scripts/asciz - - It's better to positively select targets for .section support than to - try to exclude all targets that don't. Make a new is_coff_format so - we can easily select such. - - binutils/ - * testsuite/lib/binutils-common.exp (is_coff_format): New. - ld/ - * testsuite/ld-scripts/ascii.d: Use is_elf_format and - is_coff_format to select targets, exclude ti coff. - * testsuite/ld-scripts/asciz.d: Likewise. Accept trailing zeros. - -2023-02-17 Alan Modra - - Wild pointer reads in _bfd_ecoff_locate_line - * ecofflink.c (mk_fdrtab): Sanity check fdr procedure descriptor - pointer and isymBase. Set fdrtab_len after possible discards. - Use size_t vars and catch possible size overflows. - -2023-02-17 GDB Administrator - - Automatic date update in version.in - -2023-02-16 Alan Modra - - PR30046, power cmpi leads to unknown architecture - PowerPC ELF always uses bfd_arch_powerpc, so we shouldn't allow the - gas -mpwr, -mpwr2 or -mpwrx options to choose bfd_arch_rs6000. - Given the possible values of ppc_cpu, I think the as_fatal at the end - of ppc_arch will never be reached, so it can be deleted and the code - simplified a little. - - PR 30046 - * config/tc-ppc.c (ppc_arch): Return bfd_arch_powerpc for ELF. - Delete dead code. - -2023-02-16 Tom Tromey - - Rename parameter of create_ada_exception_catchpoint - create_ada_exception_catchpoint has a parameter named "disabled", but - both its callers and callees use it to mean "enabled". This is - confusing, so this patch renames the parameter. - -2023-02-16 Tom Tromey - - Update the 'g' packet documentation - The 'g' packet documentation references a macro that no longer exists, - and it also claims that the 'x' response for an unavailable register - is limited to trace frames. This patch updates the documentation to - reflect what I think is currently correct. - - Co-Authored-By: Pedro Alves - Approved-By: Eli Zaretskii - Change-Id: I863baa3b9293059cfd4aa3d534602cbcb693ba87 - -2023-02-16 Nick Clifton - - Add support for the ASCII directive inside linker scripts. - * ldlex.l: Add ASCII token. - * ldgram.y: Add parsing of the ASCII command. - * ldlang.c (lang_add_string): Add maximum size parameter. Move escape character handling code into separate function. - * ldlang.h (lang_add_string): Update prototype. - * NEWS: Mention the new feature. - * ld.texi (Output Section Data): Document the new directives. - * testsuite/ld-scripts/asciz.t: Adjust to work on more architectures and to test more aspects of the ASCIZ directive. - * testsuite/ld-scripts/asciz.d: Adjust to match the changes to the test linker script. - * testsuite/ld-scripts/ascii.d: New test driver. - * testsuite/ld-scripts/ascii.s: New test assembler source. - * testsuite/ld-scripts/ascii.t: New test script. - * testsuite/ld-scripts/script.exp: Run the new test. - -2023-02-16 Tom Tromey - - Constify ada_main_name - Unlike the other *_main_name functions, ada_main_name returns a - non-const "char *". This is strange, though, because the caller - should not in fact modify or free this pointer. This patch changes - this function to constify its return type. - - Remove unused declaration from ada-lang.h - I stumbled across this declaration in ada-lang.h. I don't know what - function did, but it no longer exists, so remove the declaration. - Tested by rebuilding. - -2023-02-16 Alan Modra - - Delete PROGRESS macros - I don't see much point in cluttering the source with the PROGRESS - macros, which of course do nothing at all with the definitions in - progress.h. progress.h is unchanged apart from the copyright comment - since commit d4d4c53c68f0 in 1994. - - binutils/ - * ar.c: Don't include progress.h, or invoke PROGRESS macros. - * nm.c: Likewise. - * objcopy.c: Likewise. - * objdump.c: Likewise. - gas/ - * as.h: Don't include progress.h. - * as.c: Don't invoke PROGRESS macros. - * write.c: Likewise. - include/ - * progress.h: Delete. - ld/ - * ldmain.c: Don't include progress.h, or invoke PROGRESS macros. - -2023-02-16 Alan Modra - - gas_init - Rename gas_late_init to plain gas_init, to reinforce the idea that - this is where the bulk of gas initialisation belongs. Also reorder - some initialisation. - - * as.c (gas_init): Rename from gas_late_init. Open output - file and arrange for dump_statistics to be called here rather - than in main. Create .gasversion. local symbol earlier, - because we can. - -2023-02-16 Jan Beulich - - RISC-V: as_warn() already emits a newline - Therefore there shouldn't be any at the end of the format string. - -2023-02-16 Andrew Burgess - - gdb/doc: document MI -remove-inferior command - Back in 2010 the -remove-inferior command was added in commit - a79b8f6ea8c2, unfortunately this command was never added to the - documentation. - - This commit addresses that oversight. - - Approved-By: Eli Zaretskii - -2023-02-16 Jan Beulich - - x86/gas: replace inappropriate assertion when parsing registers - PR gas/30117 - Once a symbol had its expression evaluated, the "segment" of the symbol - may be reg_section if a register is merely involved in the expression, - not just when the expression references a "plain" register. Therefore - the first of the assertions put in place by 4d1bb7955a8b was too strict. - Convert it to an if() to deal with situations like this one found by - fuzzing: - - x=s - s=%eax+0 - y=s - or $6,x - - In non-debug builds this also avoids potentially silently generating bad - code. - -2023-02-16 GDB Administrator - - Automatic date update in version.in - -2023-02-15 Tom Tromey - - Return bool from more value methods - There are several more value methods that currently return 'int' but - that should return 'bool'. This patch updates these. - - Reviewed-By: Bruno Larsen - -2023-02-15 Tom Tromey - - Have value::bits_synthetic_pointer return bool - This changes value::bits_synthetic_pointer to return bool and fixes up - some fallout from this. - - Reviewed-By: Bruno Larsen - -2023-02-15 Tom Tromey - - Change value::m_stack to bool - This changes value::m_stack to be a bool and updates the various uses. - - Reviewed-By: Bruno Larsen - -2023-02-15 Tom Tromey - - Change value::m_initialized to bool - This changes value::m_initialized to be a bool and updates the various - uses. - - Reviewed-By: Bruno Larsen - -2023-02-15 Tom Tromey - - Change value::m_lazy to bool - This changes value::m_lazy to be a bool and updates the various uses. - - Reviewed-By: Bruno Larsen - -2023-02-15 Tom Tromey - - Change value::m_modifiable to bool - This changes value::m_modifiable to be a bool and updates the various - uses. - - Reviewed-By: Bruno Larsen - -2023-02-15 Pedro Alves - - Don't throw quit while handling inferior events, part II - I noticed that if Ctrl-C was typed just while GDB is evaluating a - breakpoint condition in the background, and GDB ends up reaching out - to the Python interpreter, then the breakpoint condition would still - fail, like: - - c& - Continuing. - (gdb) Error in testing breakpoint condition: - Quit - - That happens because while evaluating the breakpoint condition, we - enter Python, and end up calling PyErr_SetInterrupt (it's called by - gdbpy_set_quit_flag, in frame #0): - - (top-gdb) bt - #0 gdbpy_set_quit_flag (extlang=0x558c68f81900 ) at ../../src/gdb/python/python.c:288 - #1 0x0000558c6845f049 in set_quit_flag () at ../../src/gdb/extension.c:785 - #2 0x0000558c6845ef98 in set_active_ext_lang (now_active=0x558c68f81900 ) at ../../src/gdb/extension.c:743 - #3 0x0000558c686d3e56 in gdbpy_enter::gdbpy_enter (this=0x7fff2b70bb90, gdbarch=0x558c6ab9eac0, language=0x0) at ../../src/gdb/python/python.c:212 - #4 0x0000558c68695d49 in python_on_memory_change (inferior=0x558c6a830b00, addr=0x555555558014, len=4, data=0x558c6af8a610 "") at ../../src/gdb/python/py-inferior.c:146 - #5 0x0000558c6823a071 in std::__invoke_impl (__f=@0x558c6a8ecd98: 0x558c68695d01 ) at /usr/include/c++/11/bits/invoke.h:61 - #6 0x0000558c68237591 in std::__invoke_r (__fn=@0x558c6a8ecd98: 0x558c68695d01 ) at /usr/include/c++/11/bits/invoke.h:111 - #7 0x0000558c68233e64 in std::_Function_handler::_M_invoke(std::_Any_data const&, inferior*&&, unsigned long&&, long&&, unsigned char const*&&) (__functor=..., __args#0=@0x7fff2b70bd40: 0x558c6a830b00, __args#1=@0x7fff2b70bd38: 93824992247828, __args#2=@0x7fff2b70bd30: 4, __args#3=@0x7fff2b70bd28: 0x558c6af8a610 "") at /usr/include/c++/11/bits/std_function.h:290 - #8 0x0000558c6830a96e in std::function::operator()(inferior*, unsigned long, long, unsigned char const*) const (this=0x558c6a8ecd98, __args#0=0x558c6a830b00, __args#1=93824992247828, __args#2=4, __args#3=0x558c6af8a610 "") at /usr/include/c++/11/bits/std_function.h:590 - #9 0x0000558c6830a620 in gdb::observers::observable::notify (this=0x558c690828c0 , args#0=0x558c6a830b00, args#1=93824992247828, args#2=4, args#3=0x558c6af8a610 "") at ../../src/gdb/../gdbsupport/observable.h:166 - #10 0x0000558c68309d95 in write_memory_with_notification (memaddr=0x555555558014, myaddr=0x558c6af8a610 "", len=4) at ../../src/gdb/corefile.c:363 - #11 0x0000558c68904224 in value_assign (toval=0x558c6afce910, fromval=0x558c6afba6c0) at ../../src/gdb/valops.c:1190 - #12 0x0000558c681e3869 in expr::assign_operation::evaluate (this=0x558c6af8e150, expect_type=0x0, exp=0x558c6afcfe60, noside=EVAL_NORMAL) at ../../src/gdb/expop.h:1902 - #13 0x0000558c68450c89 in expr::logical_or_operation::evaluate (this=0x558c6afab060, expect_type=0x0, exp=0x558c6afcfe60, noside=EVAL_NORMAL) at ../../src/gdb/eval.c:2330 - #14 0x0000558c6844a896 in expression::evaluate (this=0x558c6afcfe60, expect_type=0x0, noside=EVAL_NORMAL) at ../../src/gdb/eval.c:110 - #15 0x0000558c6844a95e in evaluate_expression (exp=0x558c6afcfe60, expect_type=0x0) at ../../src/gdb/eval.c:124 - #16 0x0000558c682061ef in breakpoint_cond_eval (exp=0x558c6afcfe60) at ../../src/gdb/breakpoint.c:4971 - ... - - - The fix is to disable cooperative SIGINT handling while handling - inferior events, so that SIGINT is saved in the global quit flag, and - not in the extension language, while handling an event. - - This commit augments the testcase added by the previous commit to test - this scenario as well. - - Approved-By: Tom Tromey - Change-Id: Idf8ab815774ee6f4b45ca2d0caaf30c9b9f127bb - -2023-02-15 Pedro Alves - - GC get_active_ext_lang - get_active_ext_lang is not used anywhere. Delete it. - - Approved-By: Tom Tromey - Change-Id: I4c2b6d0d11291103c098e4db1d6ea449875c96b7 - -2023-02-15 Pedro Alves - - Don't throw quit while handling inferior events - This implements what I suggested here: - - https://inbox.sourceware.org/gdb-patches/ab97c553-f406-b094-cdf3-ba031fdea925@palves.net/ - - Here is the current default quit_handler, a function that ends up - called by the QUIT macro: - - void - default_quit_handler (void) - { - if (check_quit_flag ()) - { - if (target_terminal::is_ours ()) - quit (); - else - target_pass_ctrlc (); - } - } - - As we can see above, when the inferior is running in the foreground, - then a Ctrl-C is translated into a call to target_pass_ctrlc(). - - The target_terminal::is_ours() case above is there to handle the - scenario where GDB has the terminal, meaning it is handling some - command the user typed, like "list", or "p a + b" or some such. - - However, when the inferior is running on the background, say with - "c&", GDB also has the terminal. Run control handling is now done in - the "background". The CLI is responsive to user commands. If users - type Ctrl-C, they're expecting it to interrupt whatever command they - next type in the CLI, which again, could be "list", "p a + b", etc. - It's as if background run control was handled by a separate thread, - and the Ctrl-C is meant to go to the main thread, handling the CLI. - - However, when handling an event, inside fetch_inferior_event & - friends, a Ctrl-C _also_ results in a Quit exception, from the same - default_quit_handler function shown above. This quit aborts run - control handling, breakpoint condition evaluation, etc., and may even - leave run control in an inconsistent state. - - The testcase added by this patch illustrates this. The test program - just loops a number of times calling the "foo" function. - - The idea is to set a breakpoint in the "foo" function with a condition - that sends SIGINT to GDB, and then evaluates to false, which results - in the program being re-resumed in the background. The SIGINT-sending - emulates pressing Ctrl-C just while GDB was evaluating the breakpoint - condition, except, it's more deterministic. - - It looks like this: - - (gdb) p $counter = 0 - $1 = 0 - (gdb) b foo if $counter++ == 10 || $_shell("kill -SIGINT `pidof gdb`") != 0 - Breakpoint 2 at 0x555555555131: file gdb.base/bg-exec-sigint-bp-cond.c, line 21. - (gdb) c& - Continuing. - (gdb) - - After that background continue, the breakpoint should be hit 10 times, - and we should see 10 "Quit" being printed on the screen. As if the - user typed Ctrl-C on the prompt a number of times with no inferior - running: - - (gdb) <<< Ctrl-C - (gdb) Quit <<< Ctrl-C - (gdb) Quit <<< Ctrl-C - (gdb) - - However, here's what you see instead: - - (gdb) c& - Continuing. - (gdb) Quit - (gdb) - - Just one Quit, and nothing else. If we look at the thread's state, we see: - - (gdb) info threads - Id Target Id Frame - * 1 Thread 0x7ffff7d6f740 (LWP 112192) "bg-exec-sigint-" foo () at gdb.base/bg-exec-sigint-bp-cond.c:21 - - So the thread stopped, but we didn't report a stop... - - Issuing another continue shows the same immediate-and-silent-stop: - - (gdb) c& - Continuing. - (gdb) Quit - (gdb) p $counter - $2 = 2 - - As mentioned, since the run control handling, and breakpoint and - watchpoint evaluation, etc. are running in the background from the - perspective of the CLI, when users type Ctrl-C in this situation, - they're thinking of aborting whatever other command they were typing - or running at the prompt, not the run control side, not the previous - "c&" command. - - So I think that we should install a custom quit_handler while inside - fetch_inferior_event, where we already disable pagination and other - things for a similar reason. This custom quit handler does nothing if - GDB has the terminal, and forwards Ctrl-C to the inferior otherwise. - - With the patch implementing that, and the same testcase, here's what - you see instead: - - (gdb) p $counter = 0 - $1 = 0 - (gdb) b foo if $counter++ == 10 || $_shell("kill -SIGINT `pidof gdb`") != 0 - Breakpoint 2 at 0x555555555131: file gdb.base/bg-exec-sigint-bp-cond.c, line 21. - (gdb) c& - Continuing. - (gdb) Quit - (gdb) Quit - (gdb) Quit - (gdb) Quit - (gdb) Quit - (gdb) Quit - (gdb) Quit - (gdb) Quit - (gdb) Quit - (gdb) Quit - (gdb) - Breakpoint 2, foo () at gdb.base/bg-exec-sigint-bp-cond.c:21 - 21 return 0; - - Approved-By: Tom Tromey - Change-Id: I1f10d99496a7d67c94b258e45963e83e439e1778 - -2023-02-15 Pedro Alves - - Add new "$_shell(CMD)" internal function - For testing a following patch, I wanted a way to send a SIGINT to GDB - from a breakpoint condition. And I didn't want to do it from a Python - breakpoint or Python function, as I wanted to exercise non-Python code - paths. So I thought I'd add a new $_shell internal function, that - runs a command under the shell, and returns the exit code. With this, - I could write: - - (gdb) b foo if $_shell("kill -SIGINT $gdb_pid") != 0 || - - I think this is generally useful, hence I'm proposing it here. - - Here's the new function in action: - - (gdb) p $_shell("true") - $1 = 0 - (gdb) p $_shell("false") - $2 = 1 - (gdb) p $_shell("echo hello") - hello - $3 = 0 - (gdb) p $_shell("foobar") - bash: line 1: foobar: command not found - $4 = 127 - (gdb) help function _shell - $_shell - execute a shell command and returns the result. - Usage: $_shell (command) - Returns the command's exit code: zero on success, non-zero otherwise. - (gdb) - - NEWS and manual changes included. - - Approved-By: Andrew Burgess - Approved-By: Tom Tromey - Approved-By: Eli Zaretskii - Change-Id: I7e36d451ee6b428cbf41fded415ae2d6b4efaa4e - -2023-02-15 Pedro Alves - - Make "ptype INTERNAL_FUNCTION" in Ada print like other languages - Currently, printing the type of an internal function in Ada shows - double <>s, like: - - (gdb) with language ada -- ptype $_isvoid - type = <> - - while all other languages print it with a single <>, like: - - (gdb) with language c -- ptype $_isvoid - type = - - I don't think there's a reason that Ada needs to be different. We - currently print the double <>s because we take this path in - ada_print_type: - - switch (type->code ()) - { - default: - gdb_printf (stream, "<"); - c_print_type (type, "", stream, show, level, language_ada, flags); - gdb_printf (stream, ">"); - break; - - ... and the type's name already has the <>s. - - Fix this by simply adding an early check for - TYPE_CODE_INTERNAL_FUNCTION. - - Approved-By: Andrew Burgess - Approved-By: Tom Tromey - Change-Id: Ic2b6527b9240a367471431023f6e27e6daed5501 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30105 - -2023-02-15 Pedro Alves - - Fix "ptype INTERNAL_FUNC" (PR gdb/30105) - Currently, looking at the type of an internal function, like below, - hits an odd error: - - (gdb) ptype $_isvoid - type = type not handled in c_type_print_varspec_prefix() - - That is an error thrown from - c-typeprint.c:c_type_print_varspec_prefix, where it reads: - - ... - case TYPE_CODE_DECFLOAT: - case TYPE_CODE_FIXED_POINT: - /* These types need no prefix. They are listed here so that - gcc -Wall will reveal any types that haven't been handled. */ - break; - default: - error (_("type not handled in c_type_print_varspec_prefix()")); - break; - - Internal function types have type code TYPE_CODE_INTERNAL_FUNCTION, - which is not explicitly handled by that switch. - - That comment quoted above says that gcc -Wall will reveal any types - that haven't been handled, but that's not actually true, at least with - modern GCCs. You would need to enable -Wswitch-enum for that, which - we don't. If I do enable that warning, then I see that we're missing - handling for the following type codes: - - TYPE_CODE_INTERNAL_FUNCTION, - TYPE_CODE_MODULE, - TYPE_CODE_NAMELIST, - TYPE_CODE_XMETHOD - - TYPE_CODE_MODULE and TYPE_CODE_NAMELIST and Fortran-specific, so it'd - be a little weird to handle them here. - - I tried to reach this code with TYPE_CODE_XMETHOD, but couldn't figure - out how to. ptype on an xmethod isn't treated specially, it just - complains that the method doesn't exist. I've extended the - gdb.python/py-xmethods.exp testcase to make sure of that. - - My thinking is that whatever type code we add next, the most likely - scenario is that it won't need any special handling, so we'd just be - adding another case to that "do nothing" list. If we do need special - casing for whatever type code, I think that tests added at the same - time as the feature would uncover it anyhow. If we do miss adding the - special casing, then it still looks better to me to print the type - somewhat incompletely than to error out and make it harder for users - to debug whatever they need. So I think that the best thing to do - here is to just remove all those explicit "do nothing" cases, along - with the error default case. - - After doing that, I decided to write a testcase that iterates over all - supported languages doing "ptype INTERNAL_FUNC". That revealed that - Pascal has a similar problem, except the default case hits a - gdb_assert instead of an error: - - (gdb) with language pascal -- ptype $_isvoid - type = - ../../src/gdb/p-typeprint.c:268: internal-error: type_print_varspec_prefix: unexpected type - A problem internal to GDB has been detected, - further debugging may prove unreliable. - - That is fixed by this patch in the same way. - - You'll notice that the new testcase special-cases the Ada expected - output: - - } elseif {$lang == "ada"} { - gdb_test "ptype \$_isvoid" "<>" - } else { - gdb_test "ptype \$_isvoid" "" - } - - That will be subject of the following patch. - - Approved-By: Andrew Burgess - Change-Id: I81aec03523cceb338b5180a0b4c2e4ad26b4c4db - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30105 - -2023-02-15 Simon Marchi - - gdb/dwarf2: split .debug_names reading code to own file - Move everything related to reading .debug_names from read.c to - read-debug-names.c. The only entry point exposed by - read-debug-names.{c,h} is dwarf2_read_debug_names. - - Change-Id: I18b23f3c7a61b14abc3a46e4bf559bc2d078e8bc - Approved-By: Tom Tromey - -2023-02-15 Simon Marchi - - gdb/dwarf2: split .gdb_index reading code to own file - Move everything related to reading .gdb_index from read.c to - read-gdb-index.c. The only entry point exposed by read-gdb-index.{c,h} - is dwarf2_read_gdb_index. - - Change-Id: I1e32c8f0720086538de8d2f612f27545377099bc - Approved-By: Tom Tromey - -2023-02-15 Simon Marchi - - gdb/dwarf2: move some things to read.h - The following 2 patches move .gdb_index and .debug_names reading code to - their own file. Prepare this by exposing some things used by that code - to read.h. - - Change-Id: If8ef135758a2ff0ab3b765cc92596da8189f3bbd - Approved-By: Tom Tromey - -2023-02-15 Simon Marchi - - gdb: fix dealloc function not being called for frame 0 - Tom de Vries reported [1] a regression in gdb.btrace/record_goto.exp - caused by 6d3717d4c4 ("gdb: call frame unwinders' dealloc_cache methods - through destroying the frame cache"). This issue is caught by ASan. On - a non-ASan build, it may or may not cause a crash or some other issue, I - haven't tried. - - I managed to narrow it down to: - - $ ./gdb -nx -q --data-directory=data-directory testsuite/outputs/gdb.btrace/record_goto/record_goto -ex "start" -ex "record btrace" -ex "next" - - ... and then doing repeatedly "record goto 19" and "record goto 27". - Eventually, I get: - - (gdb) record goto 27 - ================================================================= - ==1527735==ERROR: AddressSanitizer: heap-use-after-free on address 0x6210003392a8 at pc 0x55e4c26eef86 bp 0x7ffd229f24e0 sp 0x7ffd229f24d8 - READ of size 8 at 0x6210003392a8 thread T0 - #0 0x55e4c26eef85 in bfcache_eq /home/simark/src/binutils-gdb/gdb/record-btrace.c:1639 - #1 0x55e4c37cdeff in htab_find_slot_with_hash /home/simark/src/binutils-gdb/libiberty/hashtab.c:659 - #2 0x55e4c37ce24a in htab_find_slot /home/simark/src/binutils-gdb/libiberty/hashtab.c:703 - #3 0x55e4c26ef0c6 in bfcache_new /home/simark/src/binutils-gdb/gdb/record-btrace.c:1653 - #4 0x55e4c26f1242 in record_btrace_frame_sniffer /home/simark/src/binutils-gdb/gdb/record-btrace.c:1820 - #5 0x55e4c1b926a1 in frame_unwind_try_unwinder /home/simark/src/binutils-gdb/gdb/frame-unwind.c:136 - #6 0x55e4c1b930d7 in frame_unwind_find_by_frame(frame_info_ptr, void**) /home/simark/src/binutils-gdb/gdb/frame-unwind.c:196 - #7 0x55e4c1bb867f in get_frame_type(frame_info_ptr) /home/simark/src/binutils-gdb/gdb/frame.c:2925 - #8 0x55e4c2ae6798 in print_frame_info(frame_print_options const&, frame_info_ptr, int, print_what, int, int) /home/simark/src/binutils-gdb/gdb/stack.c:1049 - #9 0x55e4c2ade3e1 in print_stack_frame(frame_info_ptr, int, print_what, int) /home/simark/src/binutils-gdb/gdb/stack.c:367 - #10 0x55e4c26fda03 in record_btrace_set_replay /home/simark/src/binutils-gdb/gdb/record-btrace.c:2779 - #11 0x55e4c26fddc3 in record_btrace_target::goto_record(unsigned long) /home/simark/src/binutils-gdb/gdb/record-btrace.c:2843 - #12 0x55e4c2de2bb2 in target_goto_record(unsigned long) /home/simark/src/binutils-gdb/gdb/target.c:4169 - #13 0x55e4c275ed98 in record_goto(char const*) /home/simark/src/binutils-gdb/gdb/record.c:372 - #14 0x55e4c275edba in cmd_record_goto /home/simark/src/binutils-gdb/gdb/record.c:383 - - 0x6210003392a8 is located 424 bytes inside of 4064-byte region [0x621000339100,0x62100033a0e0) - freed by thread T0 here: - #0 0x7f6ca34a5b6f in __interceptor_free ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:123 - #1 0x55e4c38a4c17 in rpl_free /home/simark/src/binutils-gdb/gnulib/import/free.c:44 - #2 0x55e4c1bbd378 in xfree /home/simark/src/binutils-gdb/gdb/../gdbsupport/gdb-xfree.h:37 - #3 0x55e4c37d1b63 in call_freefun /home/simark/src/binutils-gdb/libiberty/obstack.c:103 - #4 0x55e4c37d25a2 in _obstack_free /home/simark/src/binutils-gdb/libiberty/obstack.c:280 - #5 0x55e4c1bad701 in reinit_frame_cache() /home/simark/src/binutils-gdb/gdb/frame.c:2112 - #6 0x55e4c27705a3 in registers_changed_ptid(process_stratum_target*, ptid_t) /home/simark/src/binutils-gdb/gdb/regcache.c:564 - #7 0x55e4c27708c7 in registers_changed_thread(thread_info*) /home/simark/src/binutils-gdb/gdb/regcache.c:573 - #8 0x55e4c26fd922 in record_btrace_set_replay /home/simark/src/binutils-gdb/gdb/record-btrace.c:2772 - #9 0x55e4c26fddc3 in record_btrace_target::goto_record(unsigned long) /home/simark/src/binutils-gdb/gdb/record-btrace.c:2843 - #10 0x55e4c2de2bb2 in target_goto_record(unsigned long) /home/simark/src/binutils-gdb/gdb/target.c:4169 - #11 0x55e4c275ed98 in record_goto(char const*) /home/simark/src/binutils-gdb/gdb/record.c:372 - #12 0x55e4c275edba in cmd_record_goto /home/simark/src/binutils-gdb/gdb/record.c:383 - - previously allocated by thread T0 here: - #0 0x7f6ca34a5e8f in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:145 - #1 0x55e4c0b55c60 in xmalloc /home/simark/src/binutils-gdb/gdb/alloc.c:57 - #2 0x55e4c37d1a6d in call_chunkfun /home/simark/src/binutils-gdb/libiberty/obstack.c:94 - #3 0x55e4c37d1c20 in _obstack_begin_worker /home/simark/src/binutils-gdb/libiberty/obstack.c:141 - #4 0x55e4c37d1ed7 in _obstack_begin /home/simark/src/binutils-gdb/libiberty/obstack.c:164 - #5 0x55e4c1bad728 in reinit_frame_cache() /home/simark/src/binutils-gdb/gdb/frame.c:2113 - #6 0x55e4c27705a3 in registers_changed_ptid(process_stratum_target*, ptid_t) /home/simark/src/binutils-gdb/gdb/regcache.c:564 - #7 0x55e4c27708c7 in registers_changed_thread(thread_info*) /home/simark/src/binutils-gdb/gdb/regcache.c:573 - #8 0x55e4c26fd922 in record_btrace_set_replay /home/simark/src/binutils-gdb/gdb/record-btrace.c:2772 - #9 0x55e4c26fddc3 in record_btrace_target::goto_record(unsigned long) /home/simark/src/binutils-gdb/gdb/record-btrace.c:2843 - #10 0x55e4c2de2bb2 in target_goto_record(unsigned long) /home/simark/src/binutils-gdb/gdb/target.c:4169 - #11 0x55e4c275ed98 in record_goto(char const*) /home/simark/src/binutils-gdb/gdb/record.c:372 - #12 0x55e4c275edba in cmd_record_goto /home/simark/src/binutils-gdb/gdb/record.c:383 - - The problem is a stale entry in the bfcache hash table (in - record-btrace.c), left across a reinit_frame_cache. This entry points - to something that used to be allocated on the frame obstack, that has - since been wiped by reinit_frame_cache. - - Before the aforementioned, unwinder deallocation functions were called - by iterating on the frame chain, starting with the sentinel frame, like - so: - - /* Tear down all frame caches. */ - for (frame_info *fi = sentinel_frame; fi != NULL; fi = fi->prev) - { - if (fi->prologue_cache && fi->unwind->dealloc_cache) - fi->unwind->dealloc_cache (fi, fi->prologue_cache); - if (fi->base_cache && fi->base->unwind->dealloc_cache) - fi->base->unwind->dealloc_cache (fi, fi->base_cache); - } - - After that patch, we relied on the fact that all frames are (supposedly) - in the frame_stash. A deletion function was added to the frame_stash - hash table, so that dealloc functions would be called when emptying the - frame stash. There is one case, however, where a frame_info is not in - the frame stash. That is when we create the frame_info for the current - frame (level 0, unwound from the sentinel frame), but don't compute its - frame id. The computation of the frame id for that frame (and only that - frame, AFAIK) is done lazily. And putting a frame_info in the frame stash - requires knowing its id. So a frame 0 whose frame id is not computed - yet is necessarily not in the frame stash. - - When replaying with btrace, record_btrace_frame_sniffer insert entries - corresponding to frames in the "bfcache" hash table. It then relies on - record_btrace_frame_dealloc_cache being called for each frame to remove - all those entries when the frames get invalidated. If a frame reinit - happens while frame 0's id is not computed (and therefore that frame is - not in frame_stash), record_btrace_frame_dealloc_cache does not get - called for it, and it leaves a stale entry in bfcache. That then leads - to a use-after-free when that entry is accessed later, which ASan - catches. - - The proposed solution is to explicitly call frame_info_del on frame 0, - if it exists, and if its frame id is not computed. If its frame id is - computed, it is expected that it will be in the frame stash, so it will - be "deleted" through that. - - [1] https://inbox.sourceware.org/gdb-patches/20230130200249.131155-1-simon.marchi@efficios.com/T/#mcf1340ce2906a72ec7ed535ec0c97dba11c3d977 - - Reported-By: Tom de Vries - Tested-By: Tom de Vries - Change-Id: I2351882dd511f3bbc01e4152e9db13b69b3ba384 - -2023-02-15 Tom Tromey - - Remove RETURNS from BFD chew comments - When reading the BFD manual, I noticed text like this: - - -- Function: bool bfd_close (bfd *abfd); - Close a BFD. If the BFD was open for writing, then pending - operations are completed and the file written out and closed. If - ... - *Returns* - 'TRUE' is returned if all is ok, otherwise 'FALSE'. - - The *Returns*, like the *Synopsis* in the earlier patch, is - un-info-like. It's also used inconsistently. - - This patch removes all the uses of the RETURNS word and removes it - entirely from the chew scripts. Now this example reads: - - -- Function: bool bfd_close (bfd *abfd); - Close a BFD. If the BFD was open for writing, then pending - operations are completed and the file written out and closed. If - ... - 'TRUE' is returned if all is ok, otherwise 'FALSE'. - - In a few cases I had to slightly reword the comment. There were also - a couple of cases where there was redundant text. In these cases I - just dropped the RETURNS copy. - - 2023-02-07 Tom Tromey - - * bfd.c, cache.c, compress.c, opncls.c: Remove RETURNS from - documentation comments. - * doc/doc.str, doc/proto.str (RETURNS): Remove. - -2023-02-15 Tom Tromey - - Use @deftypefn in chew output - When reading the BFD info manual, function definitions looked very - strange to me: - - *Synopsis* - long bfd_get_mtime (bfd *abfd); - *Description* - Return the file modification time (as read from the file system, or from - the archive header for archive members). - - The *Synopsis* and *Description* text in particular is very un-info-like. - - To fix this, I tried removing the *Synopsis* text and having FUNCTION - use @deftypefn instead. However, this ended up requiring some new - state, because SYNOPSIS can appear without FUNCTION. This in turn - required "catstrif" (I considered adding FORTH-style if-else-then, but - in the end decided on an ad hoc approach). - - After this the result looks like: - - -- Function: long bfd_get_mtime (bfd *abfd); - Return the file modification time (as read from the file system, or - from the archive header for archive members). - - This patch also reorders a few documentation comments to ensure that - SYNOPSIS comes before DESCRIPTION. This is the more common style and - is also now required by doc.str. - - 2023-02-07 Tom Tromey - - * syms.c (bfd_decode_symclass, bfd_is_undefined_symclass) - (bfd_symbol_info): Reorder documentation comment. - * doc/doc.str (synopsis_seen): New variable. - (SYNOPSIS): Set synopsis_seen. Emit @deftypefn. - (DESCRIPTION): Use synopsis_seen. - * doc/chew.c (catstrif): New function. - (main): Add catstrif intrinsic. - (compile): Recognize "variable" command. - -2023-02-15 Tom Tromey - - Change internalmode to be an intrinsic variable - Currently, internalmode is a special word to set an internal state - variable. Because this series adds variables anyway, change this to - be a variable instead. - - I saw some commits in the history that made sure that chew did not - leak memory, so I put some extra effort into trying to handle this for - variables as well. - - 2023-02-07 Tom Tromey - - * doc/proto.str (external, internal, ifinternal, ENUMEQ, ENUMDOC): - Update. - * doc/chew.c (internalmode): Remove. - (add_intrinsic_variable): New function. - (main): Add internalmode as intrinsic. - (internal_mode): Remove global. - (maybecatstr): Update. - (free_words): Free variables. - -2023-02-15 Tom Tromey - - Use intptr_t rather than long in chew - To implement variables in chew, it's convenient to have a - pointer-sized integer on the stack. To this end, use intptr_t rather - than long. - - 2023-02-07 Tom Tromey - - * doc/chew.c (pcu) : Now intptr_t. - (internal_mode, istack, isp): Likewise. - (bang, atsign): Use intptr_t. - -2023-02-15 Tom Tromey - - Remove the paramstuff word - The chew "paramstuff" word has been a no-op since: - - commit c58b95236ce4c9345c4fa76e7ef16762e5229380 - Author: Alan Modra - Date: Sun Jun 29 10:06:40 2003 +0000 - - Convert to C90 and a few tweaks. - - Remove it and its one use. - - 2023-02-07 Tom Tromey - - * doc/proto.str (SYNOPSIS): Don't use paramstuff. - * doc/chew.c (paramstuff): Remove. - (main): Don't add paramstuff intrinsic. - -2023-02-15 Tom Tromey - - Add copyright headers to the .str files - The .str script files don't have copyright headers, but I think they - should. I used the same dates that chew.c uses, which I think makes - sense because these are inputs to chew. - - 2023-02-07 Tom Tromey - - * doc/doc.str, doc/proto.str: Add copyright header. - -2023-02-15 Tom Tromey - - Simplify @node use in BFD documentation - The BFD docs currently specify all the parameters to @node. However, - this results in bad navigation in certain nodes -- the "space" command - in info doesn't know how to find the next node. - - I think this style of @node is a leftover from ancient times. - Makeinfo can figure out the node structure on its own now, so simplify - everything to a single-argument @node. - - 2023-02-07 Tom Tromey - - * doc/webassembly.texi (File layout): Remove second argument from - @node. - * doc/bfd.texi: Use single-argument @node everywhere. - -2023-02-15 Tom Tromey - - Remove H_CFLAGS from doc/local.mk - I couldn't see that H_CFLAGS is defined anywhere, so remove it. - - 2023-02-07 Tom Tromey - - * Makefile.in: Rebuild. - * doc/local.mk (%D%/chew.stamp): Don't use H_CFLAGS. - -2023-02-15 Simon Marchi - - gdb: store internalvars in an std::map - In a test downstream in ROCgdb, we had a test case failing when - GDB_REVERSE_INIT_FUNCTIONS was set. The test was assuming a particular - order in the output of "show convenience". And the order changes when - running with GDB_REVERSE_INIT_FUNCTIONS. - - I think that a nice way to fix it is to make the output of "show - convenience" sorted, and therefore stable. Ideally, I think that the - the user-visible behavior of GDB should not change when using - GDB_REVERSE_INIT_FUNCTIONS. Plus, it makes the output of "show - convenience" look nice, not that it's really important. - - Implement this by storing the internal vars in an std::map, which is a - sorted container. - - Change-Id: I1fca7e7877cc984a3a3432c7639d45e68d437241 - Approved-By: Tom Tromey - -2023-02-15 Simon Marchi - - gdb: add constructor to internalvar - Add a constructor that takes the name as a parameter. Initialize the - next and kind fields inline. - - Change-Id: Ic4db0aba85f1da9f12f3eee0ac62c0e5ef0cfe88 - Approved-By: Tom Tromey - -2023-02-15 Simon Marchi - - gdb: use std::string for internalvar::name - Change internalvar::name to std::string, automating memory management. - It becomes necessary to allocate internalvar with new instead of XNEW. - - I didn't find how to trigger the code in complete_internalvar. It is - called from condition_completer, so it should be by using the - "condition" command, but I never managed to get in the right code path. - - Change-Id: I814d61361663e7becb8f3fb5f58c0180cdc414bc - Approved-By: Tom Tromey - -2023-02-15 Tom Tromey - - Do not record a rejected target description - When connecting to a certain target, gdb issues a warning about the - target description: - - (gdb) target remote localhost:7947 - Remote debugging using localhost:7947 - warning: Architecture rejected target-supplied description - - If you then kill the inferior and change the exec-file, this will - happen: - - (gdb) file bar - Architecture of file not recognized. - - After this, debugging doesn't work very well. - - What happens here is that, despite the warning, - target_find_description records the downloaded description in the - target_desc_info. Then the "file" command ends up calling - set_gdbarch_from_file, which uses that description. - - It seems to me that, because the architecture rejected the - description, it should not be used. That is what this patch - implements. - -2023-02-15 Pedro Alves - - gdb/manual: Move @findex entries - The manual currently has many cases like these: - - @item $_gdb_setting_str (@var{setting}) - @findex $_gdb_setting_str@r{, convenience function} - - As suggested by Eli, move the @findex entries before @item so that the - index records the position of @item, and the Info reader places you - there when you use index-search. - - I went over all @findex calls in the manual, and most are like the - above. Most either appear before @item, or before @subheading, like: - - @subheading The @code{-break-after} Command - @findex -break-after - - I fixed all of them. - - There are findex entries in annotate.texinfo,python.texi, and - stabs.texinfo as well, though those all look right to me already. - - Tested by typing "i _isvoid" (@item case) and "i -complete" - (@subheading case) in an Info reader, and checking where those took - me. - - Change-Id: Idb6903b0bb39ff03f93524628dcef86b5585c97e - Suggested-By: Eli Zaretskii - -2023-02-15 Alan Modra - - objdump read_section_stabs - This function is used to read sections other than stabs, and there is - now another version of it that extracts different info from the bfd - section. Rename it and return the bfd section instead of assorted - fields of the bfd section. - - * objcopy.c (read_section): Renamed from read_section_stabs. - Delete size_ptr and entsize_ptr params, add contents param. - Return asection pointer. Don't unnecessarily free contents on - failure from bfd_malloc_and_get_section. - (find_stabs_section): Use read_section. - (dump_ctf, dump_section_sframe): Likewise. - (read_section_sframe): Delete. - -2023-02-15 Alan Modra - - objdump -G memory leak - * objdump.c (find_stabs_section): Free stabs. - -2023-02-15 Nick Clifton - - Fix the linker's merge4 test for the HPPA architecture. - PR 30078 * testsuite/ld-elf/merge4b.s: Use .asciz instead of .string in order to avoid the special behaviour of the .string directive on HPPA architectures. - -2023-02-15 Felix Willgerodt - - gdb, fortran: Fix quad floating-point type for ifort compiler. - I fixed this a while ago for ifx, one of the two Intel compilers, in - 8d624a9d8050ca96e154215c7858ac5c2d8b0b19. - - Apparently I missed that the older ifort Intel compiler actually emits - slightly different debug info again: - - 0x0000007a: DW_TAG_base_type - DW_AT_byte_size (0x20) - DW_AT_encoding (DW_ATE_complex_float) - DW_AT_name ("COMPLEX(16)") - - 0x00000081: DW_TAG_base_type - DW_AT_byte_size (0x10) - DW_AT_encoding (DW_ATE_float) - DW_AT_name ("REAL(16)") - - This fixes two failures in gdb.fortran/complex.exp with ifort. - - Approved-By: Tom Tromey - -2023-02-15 Jan Beulich - - gas: buffer_and_nest() needs to pass nul-terminated string to temp_ilp() - In 7545aa2dd2eb ("gas: improve interaction between read_a_source_file() - and s_linefile()") I didn't pay attention to the dual purpose of the - nul character previously used. This was to a fair degree because of the - open-coding of certain operations. Insert the earlier found line - terminator instead of a hard-coded newline, and do so early in this - special case (bypassing the later general insertion point). Plus - properly use sb_terminate() to mark the end of the string. (Note that - saved_eol_char was misnamed: Without calling sb_terminate() there's - simply random data at that position in the buffer.) - -2023-02-15 Alan Modra - - More ecoff sanity checks - Change FIX so that unused pointers that escape the UPDATE_RAW_END - sanity checks won't result in overflows. Also sanity check the local - sym fdr isymBase and csym values. - - * ecoff.c (_bfd_ecoff_slurp_symbolic_info): Define FIX to set - pointers into swapped internal data to NULL if count is zero. - Sanity check local sym fdr_ptr->isymBase and fdr_ptr->csym. - -2023-02-15 Alan Modra - - binutils stabs type list - Fuzzers have found that specifying a large stab type number results in - lots of memory being requested, as the list is extended with a 16 - element array at a time until we reach the given stab type. It also - takes a long time. Of course normal sane stab types use small - positive integers, but it's not hard to modify the code to handle type - numbers starting anyhere. - - * stabs.c (struct stab_types): Add base_index. - (stab_find_slot): Simplify filenum check. Delete type number - check. Don't allocate entire array from 0 to type number, - allocate a sparse array. - -2023-02-15 GDB Administrator - - Automatic date update in version.in - -2023-02-14 Tom Tromey - - Remove a use of pagination_enabled - I noticed that the TUI temporarily sets pagination_enabled and - gdb_stdout in one spot. However, I don't believe these settings are - necessary here, as a ui_file is passed to - gdbarch_print_registers_info. This patch removes these settings. - -2023-02-14 Simon Marchi - - gdb/dwarf2: rename some things, index -> gdb_index - This renaming helps make it clearer that these entites (classes, - functions) are specific to .gdb_index only, they are not shared with the - .debug_names handling. - - Change-Id: I1a3cf3dbf450b62d1a0879d9aedd26397abdfd13 - Approved-By: Tom Tromey - -2023-02-14 Simon Marchi - - gdb: cast return value of std::unique_ptr::release to void - My editor shows warnings like: - - value.c:2784: warning: The value returned by this function should be used - value.c:2784: note: cast the expression to void to silence this warning [bugprone-unused-return-value] - - These warnings come from clangd, so ultimately from one of the clang - static analyzers (probably clang-tidy). - - Silence these warnings by casting to void. Add a comment to explain - why this unusual thing is done. - - Change-Id: I58323959c0baf9f1b20a8d596e4c58dc77c6809a - Approved-By: Tom Tromey - -2023-02-14 Simon Marchi - - gdb: remove unnecessary tui directory check in configure - I suppose this was possible in the CVS days for the tui directory to be - missing, but it's not really possible nowaday. Well, a user could - delete the directory from their source tree but... it doesn't make - sense. Remove the check for that directory in configure. - - Change-Id: Iea1412f5e5482ed003015030132ec22150c7d0b3 - Approved-By: Tom Tromey - -2023-02-14 Tom Tromey - - Do not cast away const in agent_run_command - While investigating something else, I noticed some weird code in - agent_run_command (use of memcpy rather than strcpy). Then I noticed - that 'cmd' is used as both an in and out parameter, despite being - const. - - Casting away const like this is bad. This patch removes the const and - fixes the memcpy. I also added a static assert to assure myself that - the code in gdbserver is correct -- gdbserver is passing its own - buffer directly to agent_run_command. - - Reviewed-By: Andrew Burgess - -2023-02-14 Tom de Vries - - [gdb/testsuite] Add xfail in gdb.python/py-record-btrace.exp - There's a HW bug affecting Processor Trace on some Intel processors - (Ice Lake to Raptor Lake microarchitectures). - - The bug was exposed by linux kernel commit 670638477aed - ("perf/x86/intel/pt: Opportunistically use single range output mode"), - added in version v5.5.0, and was worked around by commit ce0d998be927 - ("perf/x86/intel/pt: Fix sampling using single range output") in version - 6.1.0. - - The bug manifests (on a Performance-core of an i7-1250U, an Alder Lake cpu) in - a single test-case: - ... - (gdb) python insn = r.instruction_history^M - warning: Decode error (-20) at instruction 33 (offset = 0x3d6a, \ - pc = 0x400501): compressed return without call.^M - (gdb) FAIL: gdb.python/py-record-btrace.exp: prepare record: \ - python insn = r.instruction_history - ... - - Add a corresponding XFAIL. - - Note that the i7-1250U has both Performance-cores and Efficient-cores, and on - an Efficient-Core the test-case runs without any problems, so if the testsuite - run is not pinned to a specific cpu, the test may either PASS or XFAIL. - - Tested on x86_64-linux: - - openSUSE Leap 15.4 with linux kernel version 5.14.21 - - openSUSE Tumbleweed with linux kernel version 6.1.8 - - PR testsuite/30075 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30075 - -2023-02-14 Nick Clifton - - Mention that the -plugin command line option is used to load plugins. - -2023-02-14 Tom de Vries - - [gdb/testsuite] Factor out proc linux_kernel_version - Factor out new proc linux_kernel_version from test-case - gdb.arch/i386-pkru.exp. - - Tested on x86_64-linux. - -2023-02-14 Ulf Samuelsson - - ASCIZ Command for output section - Adds a new directive to the linker script syntax: ASCIZ. - This inserts a zero-terminated string into the output at the place where it is used. - -2023-02-14 Jan Beulich - - gas: correct symbol name comparison in .startof./.sizeof. handling - In 162c6aef1f3a ("gas: fold symbol table entries generated for - .startof.() / .sizeof.()") I screwed up quite badly, inverting the case - sensitive and case insensitive comparison functions. - - x86: {LD,ST}TILECFG use an extension opcode - It being zero and happening to work right now doesn't mean the insns - shouldn't be spelled out properly. - -2023-02-14 Jan Beulich - - gas: improve interaction between read_a_source_file() and s_linefile() - read_a_source_file() would bump line numbers only when seeing a newline, - whereas is_end_of_line[] indicates further end-of-line characters, in - particular the nul character. s_linefile() attempts to compensate for - the bump, but was too aggressive with this so far: It should only adjust - when a newline ends the line. To facilitate such a check, the check for - nothing else on the line needs to move ahead, which luckily is easily - possible: The relevant two conditions match, and the function can - simply return from the body of that earlier instance of the conditional. - - The more strict treatment in s_linefile() then requires an adjustment - to buffer_and_nest()'s invocation of the function: The line terminator - now needs to be a newline, not nul. - -2023-02-14 Tom Tromey - - Fix build bug in ppc-linux-nat.c - The buildbot pointed out that my value refactoring series introduced a - bug in ppc-linux-nat.c: - - ../../binutils-gdb/gdb/ppc-linux-nat.c: In member function ‘int ppc_linux_nat_target::num_memory_accesses(const std::vector >&)’: - ../../binutils-gdb/gdb/ppc-linux-nat.c:2458:44: error: expected unqualified-id before ‘->’ token - 2458 | if (VALUE_LVAL (v) == not_lval || v->->deprecated_modifiable () == 0) - - I don't know how that happened, but I am checking in this patch which - I think should fix it. It just removes the second "->". - - I can't readily test this, so perhaps there's another bug lurking - after this one. - -2023-02-14 GDB Administrator - - Automatic date update in version.in - -2023-02-13 Tom Tromey - - Rely on value_ref_ptr::operator-> - Simon pointed out some spots were doing val.get()->mumble, where val - is a value_ref_ptr. These were introduced by the function-to-method - script, replacing older code that passed the result of .get() to a - function. - - Now that value.h is using methods, we can instead rely on operator->. - This patch replaces all the newly-introduced instances of this. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Remove deprecated_lval_hack - This removes deprecated_lval_hack and the VALUE_LVAL macro, replacing - all uses with a call to value::lval. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Introduce set_lval method on value - This introduces the set_lval method on value, one step toward removing - deprecated_lval_hack. Ultimately I think the goal should be for some - of these set_* methods to be replaced with constructors; but I haven't - done this, as the series is already too long. Other 'deprecated' - methods can probably be handled the same way. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Make ~value private - At the end of this series, I belatedly realized that values should - only be destroyed by value_decref. This patch marks the the - destructor private to enforce this. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Make struct value data members private - This hoists the 'private' in struct value to also encompass the data - members. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn record_latest_value into a method - record_latest_value now access some internals of struct value, so turn - it into a method. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Add value::set_modifiable - This introduces a value::set_modifiable and changes a couple of spots - to use it. - - I'm not completely sure the comments by deprecated_modifiable are - correct any more. Perhaps they should be removed and the method - renamed. Like so many before me, though, I've deferred investigation - of the issue. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn various value copying-related functions into methods - This patch turns a grab bag of value functions to methods of value. - These are done together because their implementations are - interrelated. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn preserve_one_value into method - This changes preserve_one_value to be a method of value. Much of this - patch was written by script. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn some xmethod functions into methods - This turns value_from_xmethod, result_type_of_xmethod, and - call_xmethod to be methods of value. value_from_xmethod is a static - "constructor" now. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Change some code to use value methods - A few functions in value.c were accessing the internal fields of - struct value. However, in these cases it seemed simpler to change - them to use the public API rather than convert them to be methods. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn set_value_component_location into method - This turns set_value_component_location into a method of value. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn value_non_lval and value_force_lval into methods - This changes value_non_lval and value_force_lval to be methods of - value. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn many optimized-out value functions into methods - This turns many functions that are related to optimized-out or - availability-checking to be methods of value. The static function - value_entirely_covered_by_range_vector is also converted to be a - private method. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn value_copy into a method - This turns value_copy into a method of value. Much of this was - written by script. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Fully qualify calls to copy in value.c - A coming patch will add value::copy, so this namespace-qualifies - existing calls to 'copy' in value.c, to ensure it will still compile - after that change is done. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn remaining value_contents functions into methods - This turns the remaining value_contents functions -- value_contents, - value_contents_all, value_contents_for_printing, and - value_contents_for_printing_const -- into methods of value. It also - converts the static functions require_not_optimized_out and - require_available to be private methods. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn value_incref and value_decref into methods - This changes value_incref and value_decref to be methods of value. - Much of this patch was written by script. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Move value_ref_policy methods out-of-line - This moves the value_ref_policy methods to be defined out-of-line. - This is a necessary step to change value_incref and value_decref to be - methods of value. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn value_bits_synthetic_pointer into a method - This changes value_bits_synthetic_pointer to be a method of value. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn value_contents_eq into a method - This changes value_contents_eq to be a method of value. It also - converts the static function value_contents_bits_eq into a private - method. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn allocate_value_contents into a method - This turns the static function allocate_value_contents into a method - on value. It is temporarily public, until some users are converted. - set_limited_array_length is converted as well. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn value_fetch_lazy into a method - This changes value_fetch_lazy to be a method of value. A few helper - functions are converted as well, to avoid problems in later patches - when the data members are all made private. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn some value_contents functions into methods - This turns value_contents_raw, value_contents_writeable, and - value_contents_all_raw into methods on value. The remaining functions - will be changed later in the series; they were a bit trickier and so I - didn't include them in this patch. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn value_zero into static "constructor" - This turns value_zero into a static "constructor" of value. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn allocate_optimized_out_value into static "constructor" - This turns allocate_optimized_out_value into a static "constructor" of - value. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn allocate_computed_value into static "constructor" - This turns allocate_computed_value into a static "constructor" of - value. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn allocate_value into a static "constructor" - This changes allocate_value to be a static "constructor" of value. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn allocate_value_lazy into a static "constructor" - This changes allocate_value_lazy to be a static "constructor" of - struct value. - - I considered trying to change value to use ordinary new/delete, but it - seems to me that due to reference counting, we may someday want to - change these static constructors to return value_ref_ptr instead. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn more deprecated_* functions into methods - This changes deprecated_value_internalvar_hack, - deprecated_value_internalvar_hack, and deprecated_value_regnum_hack - into methods on value. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn value_address and set_value_address functions into methods - This changes the value_address and set_value_address functions to be - methods of value. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn value_initialized and set_value_initialized functions into methods - This changes the value_initialized and set_value_initialized functions - to be methods of value. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Convert value_lval_const and deprecated_lval_hack to methods - This converts the value_lval_const and deprecated_lval_hack functions - to be methods on value. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn value_computed_closure and value_computed_funcs functions into methods - This changes the value_computed_funcs and value_computed_closure - functions to be methods of value. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn value_stack and set_value_stack functions into methods - This changes the value_stack and set_value_stack functions to be - methods of value. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn value_lazy and set_value_lazy functions into methods - This changes the value_lazy and set_value_lazy functions to be methods - of value. Much of this patch was written by script. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn some value offset functions into method - This changes various offset-related functions to be methods of value. - Much of this patch was written by script. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn value_enclosing_type into method - This changes value_enclosing_type to be a method of value. Much of - this patch was written by script. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn deprecated_value_modifiable into method - This changes deprecated_value_modifiable to be a method of value. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn value_offset into method - This changes value_offset to be a method of value. Much of this patch - was written by script. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn value_parent into method - This changes value_parent to be a method of value. Much of this patch - was written by script. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn value_bitpos into method - This changes value_bitpos to be a method of value. Much of this patch - was written by script. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn value_bitsize into method - This changes value_bitsize to be a method of value. Much of this patch - was written by script. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn value_arch into method - This changes value_arch to be a method of value. Much of this patch - was written by script. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn deprecated_set_value_type into a method - This changes deprecated_set_value_type to be a method of value. Much - of this patch was written by script. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Turn value_type into method - This changes value_type to be a method of value. Much of this patch - was written by script. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Move struct value to value.h - This moves struct value to value.h. For now, all members remain - public, but this is a temporary state -- by the end of the series - we'll add 'private'. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Move ~value body out-of-line - struct value is going to move to value.h, but to avoid having - excessive code there, first move the destructor body out-of-line. - - Approved-By: Simon Marchi - -2023-02-13 Tom Tromey - - Rename all fields of struct value - This renames all the fields of struct value, in preparation for the - coming changes. - - Approved-By: Simon Marchi - -2023-02-13 Michael Matz - - PR30120: fix x87 fucomp misassembled - this fixes the entry for 'fucomp' to use the correct Reg value - (otherwise it's assembled as 'fucom'). - -2023-02-13 Tom Tromey - - Remove unused imports from gdb's Python code - The "sys" import is unused in several Python files. This removes this - line from all the places where it is unnecessary. - -2023-02-13 Andrew Burgess - - gdb/tui: don't leak the known_window_types map - This commit finishes the task that was started in the previous - commit. - - Now that all Python TUI window factories are correctly deleted when - the Python interpreter is shut down, we no longer need to dynamically - allocate the known_window_types map in tui-layout.c - - This commit changes known_window_types to a statically allocated data - structure, removes the dynamic allocation from - initialize_known_windows, and then replaces lots of '->' with '.' - throughout this file. - - There should be no user visible changes after this commit. - - Reviewed-By: Tom Tromey - -2023-02-13 Andrew Burgess - - gdb/python: deallocate tui window factories at Python shut down - The previous commit relied on spotting when a Python defined TUI - window factory was deleted. I spotted that the window factories are - not deleted when GDB shuts down its Python environment, they are only - deleted when one window factory replaces another. Consider this - example Python script: - - class TestWindowFactory: - def __init__(self, msg): - self.msg = msg - print("Entering TestWindowFactory.__init__: %s" % self.msg) - - def __call__(self, tui_win): - print("Entering TestWindowFactory.__call__: %s" % self.msg) - return TestWindow(tui_win, self.msg) - - def __del__(self): - print("Entering TestWindowFactory.__del__: %s" % self.msg) - - gdb.register_window_type("test_window", TestWindowFactory("A")) - gdb.register_window_type("test_window", TestWindowFactory("B")) - - And this GDB session: - - (gdb) source tui.py - Entering TestWindowFactory.__init__: A - Entering TestWindowFactory.__init__: B - Entering TestWindowFactory.__del__: B - (gdb) quit - - Notice that when the 'B' window replaces the 'A' window we see the 'A' - object being deleted. But, when Python is shut down (after the - 'quit') the 'B' object is never deleted. - - Instead, GDB retains a reference to the window factory object, which - forces the Python object to remain live even after the Python - interpreter itself has been shut down. - - The references themselves are held in a dynamically allocated - std::unordered_map (in tui/tui-layout.c) which is never deallocated, - thus the underlying Python references are never decremented to zero, - and so GDB never tries to delete these Python objects. - - This commit is the first half of the work to clean up this edge case. - - All gdbpy_tui_window_maker objects (the objects that implement the - TUI window factory callback for Python defined TUI windows), are now - linked together into a global list using the intrusive list mechanism. - - When GDB shuts down the Python interpreter we can now walk this global - list and release the reference that is held to the underlying Python - object. By releasing this reference the Python object will now be - deleted. - - I've added a new assert in gdbpy_tui_window_maker::operator(), this - will catch the case where we somehow end up in here after having - reset the reference to the underlying Python object. I don't think - this should ever happen though as we only clear the references when - shutting down the Python interpreter, and the ::operator() function is - only called when trying to apply a new TUI layout - something that - shouldn't happen while GDB itself is shutting down. - - This commit does not update the std::unordered_map in tui-layout.c, - that will be done in the next commit. - - Reviewed-By: Tom Tromey - -2023-02-13 Andrew Burgess - - gdb/python: allow Python TUI windows to be replaced - The documentation for gdb.register_window_type says: - - "... It's an error to try to replace one of the built-in windows, - but other window types can be replaced. ..." - - I take this to mean that if I imported a Python script like this: - - gdb.register_window_type('my_window', FactoryFunction) - - Then GDB would have a new TUI window 'my_window', which could be - created by calling FactoryFunction(). If I then, in the same GDB - session imported a script which included: - - gdb.register_window_type('my_window', UpdatedFactoryFunction) - - Then GDB would replace the old 'my_window' factory with my new one, - GDB would now call UpdatedFactoryFunction(). - - This is pretty useful in practice, as it allows users to iterate on - their window implementation within a single GDB session. - - However, right now, this is not how GDB operates. The second call to - register_window_type is basically ignored and the old window factory - is retained. - - This is because in tui_register_window (tui/tui-layout.c) we use - std::unordered_map::emplace to insert the new factory function, and - emplace doesn't replace an existing element in an unordered_map. - - In this commit, before the emplace call, I now search for an already - existing element, and delete any matching element from the map, the - emplace call will then add the new factory function. - - Reviewed-By: Tom Tromey - -2023-02-13 Keith Seitz - - Fix doc build dependencies for --with-system-readline - PR build/30108 concerns building gdb documentation with - --with-sytem-readline. If the in-tree readline directory is - missing, though, the docs will fail to build: - - make[4]: Entering directory '/home/keiths/work/readline-doc-issue/linux/gdb/doc' - make[4]: *** No rule to make target '../../../src/gdb/doc/../../readline/readline/doc/rluser.texi', needed by 'gdb.info'. Stop. - - The listed file (and hsuser.texi) are conditionally included by gdb.texinfo. - When system readline is used, gdb/configure.ac will leave - READLINE_TEXI_INCFLAGS empty, causing doc/Makefile.in to output a line to - $BUILD/doc/GDBvn.texi with "@set SYSTEM_READLINE". This surpresses the - inclusion of the missing files. They are not needed or used in this - scenario. - - However, GDB_DOC_SOURCE_INCLUDES always lists these two files as dependencies, - thus provoking the build error whenever readline/ is missing. - - This patch fixes this by creating (essentially) a conditional setting of the - dependencies to be included from readline. - -2023-02-13 Michael Matz - - Fix PR30079: abort on mingw - the early-out in wild_sort is not enough, it might still be - that filenames are equal _and_ the wildcard list doesn't specify - a sort order either. Don't call compare_section then. - - Tested on all targets. - -2023-02-13 Alan Modra - - _bfd_ecoff_slurp_symbol_table buffer overflow - Add missing bounds check, and tidy the existing bounds checking. - - * ecoff.c (_bfd_ecoff_slurp_symbol_table): Break overlong lines. - Set bfd_error. Bounds check internal_sym.iss. - -2023-02-13 Andrew Burgess - - opcodes/mips: disassemble unknown micromips instructions as two shorts - Before commit: - - commit 2438b771ee07be19d5b01ea55e077dd8b7cef445 - Date: Wed Nov 2 15:53:43 2022 +0000 - - opcodes/mips: use .word/.short for undefined instructions - - unknown 32-bit microMIPS instructions were disassembled as a raw - 32-bit number with no '.word' directive. The above commit changed - this and added a '.word' directive before the 32-bit number. - - It was pointed out on the mailing list, that for microMIPS it would be - better to display such 32-bit instructions using a '.short' directive - followed by two 16-bit values. - - This commit updates the mips disassembler to do this, and adds a new - test that validates this output. - -2023-02-13 Andrew Burgess - - gdb/testsuite: handle differences in guile error string output - A new guile test added in commit: - - commit 0a9ccb9dd79384f3ba3f8cd75940e8868f3b526f - Date: Mon Feb 6 13:04:16 2023 +0000 - - gdb: only allow one of thread or task on breakpoints or watchpoints - - fails for some versions of guile. It turns out that some versions of - guile emit an error like this: - - (gdb) guile (set-breakpoint-thread! bp 1) - ERROR: In procedure set-breakpoint-thread!: - In procedure gdbscm_set_breakpoint_thread_x: cannot set both task and thread attributes - Error while executing Scheme code. - - while other versions of guile emit the error like this: - - (gdb) guile (set-breakpoint-thread! bp 1) - ERROR: In procedure set-breakpoint-thread!: - ERROR: In procedure gdbscm_set_breakpoint_thread_x: cannot set both task and thread attributes - Error while executing Scheme code. - - notice the extra 'ERROR: ' on the second line of output. This commit - updates the test regexp to handle this optional 'ERROR: ' string. - -2023-02-13 Alan Modra - - stabs.c static state - Move all the function local static state variables to file scope, - in order to tidy memory on exit and to reinit everything for that - annoying oss-fuzz. Also fix a couple memory leaks. - - * read.h (read_begin, read_end): Declare. - * read.c (read_begin): Call stabs_begin. - (read_end): Call stabs_end. - * stabs.c (stabs_begin, stabs_end): New functions. - (in_dot_func_p): Delete, use current_function_label instead. - (cached_sec): Move from s_stab_generic. - (last_asm_file, file_label_count): Move from generate_asm_file. - (line_label_count, prev_lineno, prev_line_file): Move from - stabs_generate_asm_lineno. - (void_emitted_p): Move from stabs_generate_asm_func. - (endfunc_label_count): Move from stabs_generate_asm_endfunc. - (stabs_generate_asm_lineno): Simplify setting of - prev_line_file. - (stabs_generate_asm_func): Don't leak current_function_label. - (stabs_generate_asm_endfunc): Likewise. - -2023-02-13 Alan Modra - - Split off gas init to functions - With some slight reordering. - - * as.c (gas_early_init, gas_late_init): New functions, split.. - (main): ..from here. - -2023-02-13 Lancelot SIX - - gdb/testsuite: look for hipcc in env(ROCM_PATH) - If the hipcc compiler cannot be found in dejagnu's tool_root_dir, look - for it in $::env(ROCM_PATH) (if set). If hipcc is still not found, - fallback to "hipcc" so the compiler will be searched in the PATH. This - removes the fallback to the hard-coded "/opt/rocm/bin" prefix. - - This change is done so ROCM tools are searched in a uniform manner. - - Approved-By: Simon Marchi - -2023-02-13 Lancelot SIX - - gdb/testsuite: allow_hipcc_tests tests the hipcc compiler - Update allow_hipcc_tests so all gdb.rocm tests are skipped if we do not - have a working hipcc compiler available. - - To achieve this, adjust gdb_simple_compile to ensure that the hip - program is saved in a ".cpp" file before calling hipcc otherwise - compilation will fail. - - One thing to note is that it is possible to have a hipcc installed with - a CUDA backend. Compiling with this back-end will successfully result - in an application, but GDB cannot debug it (at least for the offload - part). In the context of the gdb.rocm tests, we want to detect such - situation where gdb_simple_compile would give a false positive. - - To achieve this, this patch checks that there is at least one AMDGPU - device available and that hipcc can compile for this or those targets. - Detecting the device is done using the rocm_agent_enumerator tool which - is installed with the all ROCm installations (it is used by hipcc to - detect identify targets if this is not specified on the comand line). - - This patch also makes the allow_hipcc_tests proc a cached proc. - - Co-Authored-By: Pedro Alves - Approved-By: Simon Marchi - -2023-02-13 Lancelot SIX - - gdb/testsuite: require amd-dbgapi support to run rocm tests - Update allow_hipcc_tests to check that GDB has the amd-dbgapi support - built-in. Without this support, all tests using hipcc and the rocm - stack will fail. - - Approved-By: Simon Marchi - -2023-02-13 Lancelot SIX - - gdb/testsuite: Rename skip_hipcc_tests to allow_hipcc_tests - Rename skip_hipcc_tests to allow_hipcc_tests so it can be used as a - "require" predicate in tests. - - Use require in gdb.rocm/simple.exp. - - Approved-By: Simon Marchi - -2023-02-13 Lancelot SIX - - gdb: 'show config' shows --with[out]-amd-dbgapi - Ensure that the "show configuration" command and the "--configuration" - command line switch shows if GDB was built with the AMDGPU support or - not. - - This will be used in a later patch in this series. - - Approved-By: Simon Marchi - -2023-02-13 Alan Modra - - objcopy memory leaks - This fixes some objcopy memory leaks. commit 450da4bd38ae used - xatexit to tidy most of the hash table memory, but of course that's - ineffective without a call to xexit. The other major memory leak - happens if there is an error of some sort writing the output file, due - to not closing the input file and thus not freeing memory attached to - the bfd. - - * objcopy.c (copy_file): Don't return when bfd_close of output - gives an error, always bfd_close input too. - (main): Call xexit. - -2023-02-13 GDB Administrator - - Automatic date update in version.in - -2023-02-12 Tom Tromey - - Move some code from dwarf2/read.c to die.c - This patch introduces a new file, dwarf2/die.c, and moves some - DIE-related code out of dwarf2/read.c and into this new file. This is - just a small part of the long-term project to split up read.c. - (According to 'wc', dwarf2/read.c is the largest file in gdb by around - 8000 LOC.) - - Regression tested on x86-64 Fedora 36. - -2023-02-12 Andrew Burgess - - gdb: fix describe_other_breakpoints for default task being -1 - Commit: - - commit 2ecee236752932672fb3d6cd63c6976927f747d8 - CommitDate: Sun Feb 12 05:46:44 2023 +0000 - - gdb: use -1 for breakpoint::task default value - - Failed to take account of an earlier commit: - - commit f1f517e81039f6aa673b7d87a66bfbd25a66e3d3 - CommitDate: Sat Feb 11 17:36:24 2023 +0000 - - gdb: show task number in describe_other_breakpoints - - That both of these are my own commits is only more embarrassing. - - This small fix updates describe_other_breakpoints to take account of - the default task number now being -1. This fixes regressions in - gdb.base/break.exp, gdb.base/break-always.exp, and many other tests. - -2023-02-12 Andrew Burgess - - gdb/c++: fix handling of breakpoints on @plt symbols - This commit should fix PR gdb/20091, PR gdb/17201, and PR gdb/17071. - Additionally, PR gdb/17199 relates to this area of code, but is more - of a request to refactor some parts of GDB, this commit does not - address that request, but it is probably worth reading that PR when - looking at this commit. - - When the current language is C++, and the user places a breakpoint on - a function in a shared library, GDB will currently find two locations - for the breakpoint, one location will be within the function itself as - we would expect, but the other location will be within the PLT table - for the call to the named function. Consider this session: - - $ gdb -q /tmp/breakpoint-shlib-func - Reading symbols from /tmp/breakpoint-shlib-func... - (gdb) start - Temporary breakpoint 1 at 0x40112e: file /tmp/breakpoint-shlib-func.cc, line 20. - Starting program: /tmp/breakpoint-shlib-func - - Temporary breakpoint 1, main () at /tmp/breakpoint-shlib-func.cc:20 - 20 int answer = foo (); - (gdb) break foo - Breakpoint 2 at 0x401030 (2 locations) - (gdb) info breakpoints - Num Type Disp Enb Address What - 2 breakpoint keep y - 2.1 y 0x0000000000401030 - 2.2 y 0x00007ffff7fc50fd in foo() at /tmp/breakpoint-shlib-func-lib.cc:20 - - This is not the expected behaviour. If we compile the same test using - a C compiler then we see this: - - (gdb) break foo - Breakpoint 2 at 0x7ffff7fc50fd: file /tmp/breakpoint-shlib-func-c-lib.c, line 20. - (gdb) info breakpoints - Num Type Disp Enb Address What - 2 breakpoint keep y 0x00007ffff7fc50fd in foo at /tmp/breakpoint-shlib-func-c-lib.c:20 - - Here's what's happening. When GDB parses the symbols in the main - executable and the shared library we see a number of different symbols - for foo, and use these to create entries in GDB's msymbol table: - - - In the main executable we see a symbol 'foo@plt' that points at - the plt entry for foo, from this we add two entries into GDB's - msymbol table, one called 'foo@plt' which points at the plt entry - and has type mst_text, then we create a second symbol, this time - called 'foo' with type mst_solib_trampoline which also points at - the plt entry, - - - Then, when the shared library is loaded we see another symbol - called 'foo', this one points at the actual implementation in the - shared library. This time GDB creates a msymbol called 'foo' with - type mst_text that points at the implementation. - - This means that GDB creates 3 msymbols to represent the 2 symbols - found in the executable and shared library. - - When the user creates a breakpoint on 'foo' GDB eventually ends up in - search_minsyms_for_name (linespec.c), this function then calls - iterate_over_minimal_symbols passing in the name we are looking for - wrapped in a lookup_name_info object. - - In iterate_over_minimal_symbols we iterate over two hash tables (using - the name we're looking for as the hash key), first we walk the hash - table of symbol linkage names, then we walk the hash table of - demangled symbol names. - - When the language is C++ the symbols for 'foo' will all have been - mangled, as a result, in this case, the iteration of the linkage name - hash table will find no matching results. - - However, when we walk the demangled hash table we do find some - results. In order to match symbol names, GDB obtains a symbol name - matching function by calling the get_symbol_name_matcher method on the - language_defn class. For C++, in this case, the matching function we - use is cp_fq_symbol_name_matches, which delegates the work to - strncmp_iw_with_mode with mode strncmp_iw_mode::MATCH_PARAMS and - language set to language_cplus. - - The strncmp_iw_mode::MATCH_PARAMS mode means that strncmp_iw_mode will - skip any parameters in the demangled symbol name when checking for a - match, e.g. 'foo' will match the demangled name 'foo()'. The way this - is done is that the strings are matched character by character, but, - once the string we are looking for ('foo' here) is exhausted, if we - are looking at '(' then we consider the match a success. - - Lets consider the 3 symbols GDB created. If the function declaration - is 'void foo ()' then from the main executable we added symbols - '_Z3foov@plt' and '_Z3foov', while from the shared library we added - another symbol call '_Z3foov'. When these are demangled they become - 'foo()@plt', 'foo()', and 'foo()' respectively. - - Now, the '_Z3foov' symbol from the main executable has the type - mst_solib_trampoline, and in search_minsyms_for_name, we search for - any symbols of type mst_solib_trampoline and filter these out of the - results. - - However, the '_Z3foov@plt' symbol (from the main executable), and the - '_Z3foov' symbol (from the shared library) both have type mst_text. - - During the demangled name matching, due to the use of MATCH_PARAMS - mode, we stop the comparison as soon as we hit a '(' in the demangled - name. And so, '_Z3foov@plt', which demangles to 'foo()@plt' matches - 'foo', and '_Z3foov', which demangles to 'foo()' also matches 'foo'. - - By contrast, for C, there are no demangled hash table entries to be - iterated over (in iterate_over_minimal_symbols), we only consider the - linkage name symbols which are 'foo@plt' and 'foo'. The plain 'foo' - symbol obviously matches when we are looking for 'foo', but in this - case the 'foo@plt' will not match due to the '@plt' suffix. - - And so, when the user asks for a breakpoint in 'foo', and the language - is C, search_minsyms_for_name, returns a single msymbol, the mst_text - symbol for foo in the shared library, while, when the language is C++, - we get two results, '_Z3foov' for the shared library function, and - '_Z3foov@plt' for the plt entry in the main executable. - - I propose to fix this in strncmp_iw_with_mode. When the mode is - MATCH_PARAMS, instead of stopping at a '(' and assuming the match is a - success, GDB will instead search forward for the matching, closing, - ')', effectively skipping the parameter list, and then resume - matching. Thus, when comparing 'foo' to 'foo()@plt' GDB will - effectively compare against 'foo@plt' (skipping the parameter list), - and the match will fail, just as it does when the language is C. - - There is one slight complication, which is revealed by the test - gdb.linespec/cpcompletion.exp, when searching for the symbol of a - const member function, the demangled symbol will have 'const' at the - end of its name, e.g.: - - struct_with_const_overload::const_overload_fn() const - - Previously, the matching would stop at the '(' character, but after my - change the whole '()' is skipped, and the match resumes. As a result, - the 'const' modifier results in a failure to match, when previously - GDB would have found a match. - - To work around this issue, in strncmp_iw_with_mode, when mode is - MATCH_PARAMS, after skipping the parameter list, if the next character - is '@' then we assume we are looking at something like '@plt' and - return a value indicating the match failed, otherwise, we return a - value indicating the match succeeded, this allows things like 'const' - to be skipped. - - With these changes in place I now see GDB correctly setting a - breakpoint only at the implementation of 'foo' in the shared library. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=20091 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17201 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17071 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17199 - - Tested-By: Bruno Larsen - Approved-By: Simon Marchi - -2023-02-12 Andrew Burgess - - gdb: use -1 for breakpoint::task default value - Within the breakpoint struct we have two fields ::thread and ::task - which are used for thread or task specific breakpoints. When a - breakpoint doesn't have a specific thread or task then these fields - have the values -1 and 0 respectively. - - There's no particular reason (as far as I can tell) why these two - "default" values are different, and I find the difference a little - confusing. Long term I'd like to potentially fold these two fields - into a single field, but that isn't what this commit does. - - What this commit does is switch to using -1 as the "default" value for - both fields, this means that the default for breakpoint::task has - changed from 0 to -1. I've updated all the code I can find that - relied on the value of 0, and I see no test regressions, especially in - gdb.ada/tasks.exp, which still fully passes. - - There should be no user visible changes after this commit. - - Approved-By: Pedro Alves - -2023-02-12 Andrew Burgess - - gdb: only allow one of thread or task on breakpoints or watchpoints - After this mailing list posting: - - https://sourceware.org/pipermail/gdb-patches/2023-February/196607.html - - it seems to me that in practice an Ada task maps 1:1 with a GDB - thread, and so it doesn't really make sense to allow uses to give both - a thread and a task within a single breakpoint or watchpoint - condition. - - This commit updates GDB so that the user will get an error if both - are specified. - - I've added new tests to cover the CLI as well as the Python and Guile - APIs. For the Python and Guile testing, as far as I can tell, this - was the first testing for this corner of the APIs, so I ended up - adding more than just a single test. - - For documentation I've added a NEWS entry, but I've not added anything - to the docs themselves. Currently we document the commands with a - thread-id or task-id as distinct command, e.g.: - - 'break LOCSPEC task TASKNO' - 'break LOCSPEC task TASKNO if ...' - 'break LOCSPEC thread THREAD-ID' - 'break LOCSPEC thread THREAD-ID if ...' - - As such, I don't believe there is any indication that combining 'task' - and 'thread' would be expected to work; it seems clear to me in the - above that those four options are all distinct commands. - - I think the NEWS entry is enough that if someone is combining these - keywords (it's not clear what the expected behaviour would be in this - case) then they can figure out that this was a deliberate change in - GDB, but for a new user, the manual doesn't suggest combining them is - OK, and any future attempt to combine them will give an error. - - Approved-By: Pedro Alves - -2023-02-12 GDB Administrator - - Automatic date update in version.in - -2023-02-11 Andrew Burgess - - gdb: show task number in describe_other_breakpoints - I noticed that describe_other_breakpoints doesn't show the task - number, but does show the thread-id. I can't see any reason why we'd - want to not show the task number in this situation, so this commit - adds this missing information, and extends gdb.ada/tasks.exp to check - this case. - - Approved-By: Pedro Alves - -2023-02-11 Andrew Burgess - - gdb: don't print global thread-id to CLI in describe_other_breakpoints - I noticed that describe_other_breakpoints was printing the global - thread-id to the CLI. For CLI output we should be printing the - inferior local thread-id (e.g. "2.1"). This can be seen in the - following GDB session: - - (gdb) info threads - Id Target Id Frame - 1.1 Thread 4065742.4065742 "bp-thread-speci" main () at /tmp/bp-thread-specific.c:27 - * 2.1 Thread 4065743.4065743 "bp-thread-speci" main () at /tmp/bp-thread-specific.c:27 - (gdb) break foo thread 2.1 - Breakpoint 3 at 0x40110a: foo. (2 locations) - (gdb) break foo thread 1.1 - Note: breakpoint 3 (thread 2) also set at pc 0x40110a. - Note: breakpoint 3 (thread 2) also set at pc 0x40110a. - Breakpoint 4 at 0x40110a: foo. (2 locations) - - Notice that GDB says: - - Note: breakpoint 3 (thread 2) also set at pc 0x40110a. - - The 'thread 2' in here is using the global thread-id, we should - instead say 'thread 2.1' which corresponds to how the user specified - the breakpoint. - - This commit fixes this issue and adds a test. - - Approved-By: Pedro Alves - -2023-02-11 Andrew Burgess - - gdb: add test for readline handling very long commands - The test added in this commit tests for a long fixed readline issue - relating to long command lines. A similar patch has existed in the - Fedora GDB tree for several years, but I don't see any reason why this - test would not be suitable for inclusion in upstream GDB. I've - updated the patch to current testsuite standards. - - The test is checking for an issue that was fixed by this readline - patch: - - https://lists.gnu.org/archive/html/bug-readline/2006-11/msg00002.html - - Which was merged into readline 6.0 (released ~2010). The issue was - triggered when the user enters a long command line, which wrapped over - multiple terminal lines. The crash looks like this: - - free(): invalid pointer - - Fatal signal: Aborted - ----- Backtrace ----- - 0x4fb583 gdb_internal_backtrace_1 - ../../src/gdb/bt-utils.c:122 - 0x4fb583 _Z22gdb_internal_backtracev - ../../src/gdb/bt-utils.c:168 - 0x6047b9 handle_fatal_signal - ../../src/gdb/event-top.c:964 - 0x7f26e0cc56af ??? - 0x7f26e0cc5625 ??? - 0x7f26e0cae8d8 ??? - 0x7f26e0d094be ??? - 0x7f26e0d10aab ??? - 0x7f26e0d124ab ??? - 0x7f26e1d32e12 rl_free_undo_list - ../../readline-5.2/undo.c:119 - 0x7f26e1d229eb readline_internal_teardown - ../../readline-5.2/readline.c:405 - 0x7f26e1d3425f rl_callback_read_char - ../../readline-5.2/callback.c:197 - 0x604c0d gdb_rl_callback_read_char_wrapper_noexcept - ../../src/gdb/event-top.c:192 - 0x60581d gdb_rl_callback_read_char_wrapper - ../../src/gdb/event-top.c:225 - 0x60492f stdin_event_handler - ../../src/gdb/event-top.c:545 - 0xa60015 gdb_wait_for_event - ../../src/gdbsupport/event-loop.cc:694 - 0xa6078d gdb_wait_for_event - ../../src/gdbsupport/event-loop.cc:593 - 0xa6078d _Z16gdb_do_one_eventi - ../../src/gdbsupport/event-loop.cc:264 - 0x6fc459 start_event_loop - ../../src/gdb/main.c:411 - 0x6fc459 captured_command_loop - ../../src/gdb/main.c:471 - 0x6fdce4 captured_main - ../../src/gdb/main.c:1310 - 0x6fdce4 _Z8gdb_mainP18captured_main_args - ../../src/gdb/main.c:1325 - 0x44f694 main - ../../src/gdb/gdb.c:32 - --------------------- - - I recreated the above crash by a little light hacking on GDB, and then - linking GDB against readline 5.2. The above stack trace was generated - from the test included in this patch, and matches the trace that was - included in the original bug report. - - It is worth acknowledging that without hacking things GDB has a - minimum requirement of readline 7.0. This test is not about checking - whether GDB has been built against an older version of readline, it is - about checking that readline doesn't regress in this area. - - Reviewed-By: Tom Tromey - -2023-02-11 Andrew Burgess - - gdb: remove unnecessary 'dir' commands from gdb-gdb.gdb script - While debugging GDB I used 'show directories' and spotted lots of - entries that didn't make much sense. Here are all the entries that are - in my directories list: - - /tmp/binutils-gdb/build - /tmp/binutils-gdb/build/../../src/gdb - /tmp/binutils-gdb/build/../../src/gdb/../bfd - /tmp/binutils-gdb/build/../../src/gdb/../libiberty - $cdir - $cwd - - Notice the second, third, and fourth entries in this list, these - should really be: - - /tmp/binutils-gdb/build/../src/gdb - /tmp/binutils-gdb/build/../src/gdb/../bfd - /tmp/binutils-gdb/build/../src/gdb/../libiberty - - The problem is because I generally run everything from the top level - build directory, not the gdb/ sub-directory, thus, I start GDB like: - - ./gdb/gdb --data-directory ./gdb/data-directory - - If run GDB under GDB, then I end up loading the gdb/gdb-gdb.gdb - script, which contains these lines: - - dir ../../src/gdb/../libiberty - dir ../../src/gdb/../bfd - dir ../../src/gdb - dir . - - These commands only make sense when running within the gdb/ - sub-directory. - - However, my debugging experience doesn't seem to be degraded at all, I - can still see the GDB source code just fine; which is because the - directory list still contains $cdir. - - The build/gdb/gdb-gdb.gdb script is created from the - src/gdb/gdb-gdb.gdb.in template, which includes the automake @srcdir@ - markers. - - The 'dir' commands have mostly been around since the sourceware - repository was first created, though this commit 67f0714670383a did - reorder some of the 'dir' commands, which would seem to indicate these - commands were important to some people, at some time. - - One possible fix would be to replace @srcdir@ with @abs_srcdir@, this - would ensure that the entries added were all valid, no matter the - user's current directory when debugging GDB. - - However... I'd like to propose that we instead remove all the extra - directories completely. My hope is that, with more recent tools, the - debug information should allow us to correctly find all of the source - files without having to add any extra 'dir' entries. Obviously, - commit 67f0714670383a does make me a little nervous, but the - gdb-gdb.gdb script isn't something a non-maintainer will be using, so - I think we can afford to be a little more aggressive here. If it - turns out the 'dir' entries are needed then we can add them back, but - actually document why they are needed. Plus, when we add them back we - will use @abs_srcdir@ instead of @srcdir@. - - Reviewed-By: Tom Tromey - -2023-02-11 Tom de Vries - - [gdb/tdep] Don't use i386 unwinder for amd64 - For i386 we have these unwinders: - ... - $ gdb -q -batch -ex "set arch i386" -ex "maint info frame-unwinders" - The target architecture is set to "i386". - dummy DUMMY_FRAME - dwarf2 tailcall TAILCALL_FRAME - inline INLINE_FRAME - i386 epilogue NORMAL_FRAME - dwarf2 NORMAL_FRAME - dwarf2 signal SIGTRAMP_FRAME - i386 stack tramp NORMAL_FRAME - i386 sigtramp SIGTRAMP_FRAME - i386 prologue NORMAL_FRAME - ... - and for amd64: - ... - $ gdb -q -batch -ex "set arch i386:x86-64" -ex "maint info frame-unwinders" - The target architecture is set to "i386:x86-64". - dummy DUMMY_FRAME - dwarf2 tailcall TAILCALL_FRAME - inline INLINE_FRAME - python NORMAL_FRAME - amd64 epilogue NORMAL_FRAME - i386 epilogue NORMAL_FRAME - dwarf2 NORMAL_FRAME - dwarf2 signal SIGTRAMP_FRAME - amd64 sigtramp SIGTRAMP_FRAME - amd64 prologue NORMAL_FRAME - i386 stack tramp NORMAL_FRAME - i386 sigtramp SIGTRAMP_FRAME - i386 prologue NORMAL_FRAME - ... - - ISTM me there's no reason for the i386 unwinders to be there for amd64. - - Furthermore, there's a generic need to play around with enabling and disabling - unwinders, see PR8434. Currently, that's only available for both the dwarf2 - unwinders at once using "maint set dwarf unwinders on/off". - - If I manually disable the "amd64 epilogue" unwinder, the "i386 epilogue" - unwinder becomes active and gives the wrong answer, while I'm actually - interested in the result of the dwarf2 unwinder. Of course I can also - manually disable the "i386 epilogue", but I take the fact that I have to do - that as evidence that on amd64, the "i386 epilogue" is not only unnecessary, - but in the way. - - Fix this by only adding the i386 unwinders if - "info.bfd_arch_info->bits_per_word == 32". - - Note that the x32 abi (x86_64/-mx32): - - has the same unwinder list as amd64 (x86_64/-m64) before this commit, - - has info.bfd_arch_info->bits_per_word == 64, the same as amd64, and - consequently, - - has the same unwinder list as amd64 after this commit. - - Tested on x86_64-linux, -m64 and -m32. Not tested with -mx32. - - Reviewed-By: John Baldwin - - PR tdep/30102 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30102 - -2023-02-11 Alan Modra - - objdump -D of bss sections and -s with -j - There is some inconsistency between the behaviour of objdump -D and - objdump -s, both supposedly operating on all sections by default. - objdump -s ignores bss sections, while objdump -D dissassembles the - zeros. Fix this by making objdump -D ignore bss sections too. - - Furthermore, "objdump -s -j .bss" doesn't dump .bss as it should, - since the user is specifically asking to look at all those zeros. - - This change does find some tests that used objdump -D with expected - output in bss-style sections. I've updated all the msp430 tests that - just wanted to find a non-empty section to look at section headers - instead, making the tests slightly more stringent. The ppc xcoff and - spu tests are fixed by adding -j options to objdump, which makes the - tests somewhat more lenient. - - binutils/ - * objdump.c (disassemble_section): Ignore sections without - contents, unless overridden by -j. - (dump_section): Allow -j to override the default of not - displaying sections without contents. - * doc/binutils.texi (objdump options): Update -D, -s and -j - description. - gas/ - * testsuite/gas/ppc/xcoff-tls-32.d: Select wanted objdump - sections with -j. - * testsuite/gas/ppc/xcoff-tls-64.d: Likewise. - ld/ - * testsuite/ld-msp430-elf/main-bss-lower.d, - * testsuite/ld-msp430-elf/main-bss-upper.d, - * testsuite/ld-msp430-elf/main-const-lower.d, - * testsuite/ld-msp430-elf/main-const-upper.d, - * testsuite/ld-msp430-elf/main-text-lower.d, - * testsuite/ld-msp430-elf/main-text-upper.d, - * testsuite/ld-msp430-elf/main-var-lower.d, - * testsuite/ld-msp430-elf/main-var-upper.d: Expect -wh output. - * testsuite/ld-msp430-elf/msp430-elf.exp: Use objdump -wh - rather than objdump -D or objdump -d with tests checking for - non-empty given sections. - * testsuite/ld-spu/ear.d, - * testsuite/ld-spu/icache1.d, - * testsuite/ld-spu/ovl.d, - * testsuite/ld-spu/ovl2.d: Select wanted objdump sections. - -2023-02-11 Alan Modra - - .debug sections without contents - * dwarf1.c (_bfd_dwarf1_find_nearest_line): Exclude .debug - sections without contents. - -2023-02-11 Aaron Merey - - gdb/source: Fix open_source_file error handling - open_source_file relies on errno to communicate the reason for a missing - source file. - - open_source_file may also call debuginfod_find_source. It is possible - for debuginfod_find_source to set errno to a value unrelated to the - reason for a failed download. - - This can result in bogus error messages being reported as the reason for - a missing source file. The following error message should instead be - "No such file or directory": - - Temporary breakpoint 1, 0x00005555556f4de0 in main () - (gdb) list - Downloading source file /usr/src/debug/glibc-2.36-8.fc37.x86_64/elf/ - 1 /usr/src/debug/glibc-2.36-8.fc37.x86_64/elf/: Directory not empty. - - Fix this by having open_source_file return a negative errno if it fails - to open a source file. Use this value to generate the error message - instead of errno. - - Approved-By: Tom Tromey - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29999 - -2023-02-11 Aaron Merey - - Move implementation of perror_with_name to gdbsupport - gdbsupport/errors.h declares perror_with_name and leaves the - implementation to the clients. - - However gdb and gdbserver's implementations are essentially the - same, resulting in unnecessary code duplication. - - Fix this by implementing perror_with_name in gdbsupport. Add an - optional parameter for specifying the errno used to generate the - error message. - - Also move the implementation of perror_string to gdbsupport since - perror_with_name requires it. - - Approved-By: Tom Tromey - -2023-02-11 GDB Administrator - - Automatic date update in version.in - -2023-02-10 Andrew Burgess - - GDB: Introduce limited array lengths while printing values - This commit introduces the idea of loading only part of an array in - order to print it, what I call "limited length" arrays. - - The motivation behind this work is to make it possible to print slices - of very large arrays, where very large means bigger than - `max-value-size'. - - Consider this GDB session with the current GDB: - - (gdb) set max-value-size 100 - (gdb) p large_1d_array - value requires 400 bytes, which is more than max-value-size - (gdb) p -elements 10 -- large_1d_array - value requires 400 bytes, which is more than max-value-size - - notice that the request to print 10 elements still fails, even though 10 - elements should be less than the max-value-size. With a patched version - of GDB: - - (gdb) p -elements 10 -- large_1d_array - $1 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9...} - - So now the print has succeeded. It also has loaded `max-value-size' - worth of data into value history, so the recorded value can be accessed - consistently: - - (gdb) p -elements 10 -- $1 - $2 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9...} - (gdb) p $1 - $3 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, } - (gdb) - - Accesses with other languages work similarly, although for Ada only - C-style [] array element/dimension accesses use history. For both Ada - and Fortran () array element/dimension accesses go straight to the - inferior, bypassing the value history just as with C pointers. - - Co-Authored-By: Maciej W. Rozycki - -2023-02-10 Maciej W. Rozycki - - GDB/testsuite: Add `-nonl' option to `gdb_test' - Add a `-nonl' option to `gdb_test' making it possible to match output - from commands such as `output' that do not produce a new line sequence - at the end, e.g.: - - (gdb) output 0 - 0(gdb) - -2023-02-10 Maciej W. Rozycki - - GDB: Only make data actually retrieved into value history available - While it makes sense to allow accessing out-of-bounds elements in the - debuggee and see whatever there might happen to be there in memory (we - are a debugger and not a programming rules enforcement facility and we - want to make people's life easier in chasing bugs), e.g.: - - (gdb) print one_hundred[-1] - $1 = 0 - (gdb) print one_hundred[100] - $2 = 0 - (gdb) - - we shouldn't really pretend that we have any meaningful data around - values recorded in history (what these commands really retrieve are - current debuggee memory contents outside the original data accessed, - really confusing in my opinion). Mark values recorded in history as - such then and verify accesses to be in-range for them: - - (gdb) print one_hundred[-1] - $1 = - (gdb) print one_hundred[100] - $2 = - - Add a suitable test case, which also covers integer overflows in data - location calculation. - - Approved-By: Tom Tromey - -2023-02-10 Maciej W. Rozycki - - GDB: Fix the mess with value byte/bit range types - Consistently use the LONGEST and ULONGEST types for value byte/bit - offsets and lengths respectively, avoiding silent truncation for ranges - exceeding the 32-bit span, which may cause incorrect matching. Also - report a conversion overflow on byte ranges that cannot be expressed in - terms of bits with these data types, e.g.: - - (gdb) print one_hundred[1LL << 58] - Integer overflow in data location calculation - (gdb) print one_hundred[(-1LL << 58) - 1] - Integer overflow in data location calculation - (gdb) - - Previously such accesses would be let through with unpredictable results - produced. - -2023-02-10 Maciej W. Rozycki - - GDB: Ignore `max-value-size' setting with value history accesses - We have an inconsistency in value history accesses where array element - accesses cause an error for entries exceeding the currently selected - `max-value-size' setting even where such accesses successfully complete - for elements located in the inferior, e.g.: - - (gdb) p/d one - $1 = 0 - (gdb) p/d one_hundred - $2 = {0 } - (gdb) p/d one_hundred[99] - $3 = 0 - (gdb) set max-value-size 25 - (gdb) p/d one_hundred - value requires 100 bytes, which is more than max-value-size - (gdb) p/d one_hundred[99] - $7 = 0 - (gdb) p/d $2 - value requires 100 bytes, which is more than max-value-size - (gdb) p/d $2[99] - value requires 100 bytes, which is more than max-value-size - (gdb) - - According to our documentation the `max-value-size' setting is a safety - guard against allocating an overly large amount of memory. Moreover a - statement in documentation says, concerning this setting, that: "Setting - this variable does not affect values that have already been allocated - within GDB, only future allocations." While in the implementer-speak - the sentence may be unambiguous I think the outside user may well infer - that the setting does not apply to values previously printed. - - Therefore rather than just fixing this inconsistency it seems reasonable - to lift the setting for value history accesses, under an implication - that by having been retrieved from the debuggee they have already passed - the safety check. Do it then, by suppressing the value size check in - `value_copy' -- under an observation that if the original value has been - already loaded (i.e. it's not lazy), then it must have previously passed - said check -- making the last two commands succeed: - - (gdb) p/d $2 - $8 = {0 } - (gdb) p/d $2 [99] - $9 = 0 - (gdb) - - Expand the testsuite accordingly, covering both value history handling - and the use of `value_copy' by `make_cv_value', used by Python code. - -2023-02-10 Maciej W. Rozycki - - GDB: Switch to using C++ standard integer type limits - Use instead of and ditch local fallback definitions - for minimum and maximum value macros provided by C++11. Add LONGEST_MAX - and LONGEST_MIN definitions. - - Approved-By: Tom Tromey - -2023-02-10 Tom Tromey - - Ensure all DAP requests are keyword-only - Python functions implementing DAP requests should not use positional - parameters -- it only makes sense to call them with keyword arguments. - This patch changes the few remaining cases to start with the special - "*" parameter, following this rule. - -2023-02-10 Simon Marchi - - gdb/testsuite: fix gdb.gdb/selftest.exp for native-extended-gdbserver - Following commit 4e2a80ba606 ("gdb/testsuite: expect SIGSEGV from top - GDB spawn id"), the next failure I get in gdb.gdb/selftest.exp, using - the native-extended-gdbserver, is: - - (gdb) PASS: gdb.gdb/selftest.exp: send ^C to child process - signal SIGINT - Continuing with signal SIGINT. - FAIL: gdb.gdb/selftest.exp: send SIGINT signal to child process (timeout) - - The problem is that in this gdb_test_multiple: - - set description "send SIGINT signal to child process" - gdb_test_multiple "signal SIGINT" "$description" { - -re "^signal SIGINT\r\nContinuing with signal SIGINT.\r\nQuit\r\n.* $" { - pass "$description" - } - } - - The "Continuing with signal SIGINT" portion is printed by the top GDB, - while the Quit portion is printed by the bottom GDB. As the - gdb_test_multiple is written, it expects both the the top GDB's spawn - id. - - Fix this by splitting the gdb_test_multiple in two. The first one - expects the "Continuing with signal SIGINT" from the top GDB. The - second one expect "Quit" and the "(xgdb)" prompt from - $inferior_spawn_id. When debugging natively, this spawn id will be the - same as the top GDB's spawn id, but it's different when debugging with - GDBserver. - - Change-Id: I689bd369a041b48f4dc9858d38bf977d09600da2 - -2023-02-10 Tom Tromey - - Use std::string in main_info - This changes main_info to use std::string. It removes some manual - memory management. - -2023-02-10 Tom de Vries - - [gdb/testsuite] Fix linespec ambiguity in gdb.base/longjmp.exp - PR testsuite/30103 reports the following failure on aarch64-linux - (ubuntu 22.04): - ... - (gdb) PASS: gdb.base/longjmp.exp: with_probes=0: pattern 1: next to longjmp - next - warning: Breakpoint address adjusted from 0x83dc305fef755015 to \ - 0xffdc305fef755015. - Warning: - Cannot insert breakpoint 0. - Cannot access memory at address 0xffdc305fef755015 - - __libc_siglongjmp (env=0xaaaaaaab1018 , val=1) at ./setjmp/longjmp.c:30 - 30 } - (gdb) KFAIL: gdb.base/longjmp.exp: with_probes=0: pattern 1: gdb/26967 \ - (PRMS: next over longjmp) - delete breakpoints - Delete all breakpoints? (y or n) y - (gdb) info breakpoints - No breakpoints or watchpoints. - (gdb) break 63 - No line 63 in the current file. - Make breakpoint pending on future shared library load? (y or [n]) n - (gdb) FAIL: gdb.base/longjmp.exp: with_probes=0: pattern 2: setup: breakpoint \ - at pattern start (got interactive prompt) - ... - - The test-case intends to set the breakpoint on line number 63 in - gdb.base/longjmp.c. - - It tries to do so by specifying "break 63", which specifies a line in the - "current source file". - - Due to the KFAIL PR, gdb stopped in __libc_siglongjmp, and because of presence - of debug info, the "current source file" becomes glibc's ./setjmp/longjmp.c. - - Consequently, setting the breakpoint fails. - - Fix this by adding a $subdir/$srcfile: prefix to the breakpoint linespecs. - - I've managed to reproduce the FAIL on x86_64/-m32, by installing the - glibc-32bit-debuginfo package. This allowed me to confirm the "current source - file" that is used: - ... - (gdb) KFAIL: gdb.base/longjmp.exp: with_probes=0: pattern 1: gdb/26967 \ - (PRMS: next over longjmp) - info source^M - Current source file is ../setjmp/longjmp.c^M - ... - - Tested on x86_64-linux, target boards unix/{-m64,-m32}. - - Reported-By: Luis Machado - Reviewed-By: Tom Tromey - - PR testsuite/30103 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30103 - -2023-02-10 Tom de Vries - - [gdb/cli] Add maint info frame-unwinders - Add a new command "maint info frame-unwinders": - ... - (gdb) help maint info frame-unwinders - List the frame unwinders currently in effect, starting with the highest \ - priority. - ... - - Output for i386: - ... - $ gdb -q -batch -ex "set arch i386" -ex "maint info frame-unwinders" - The target architecture is set to "i386". - dummy DUMMY_FRAME - dwarf2 tailcall TAILCALL_FRAME - inline INLINE_FRAME - i386 epilogue NORMAL_FRAME - dwarf2 NORMAL_FRAME - dwarf2 signal SIGTRAMP_FRAME - i386 stack tramp NORMAL_FRAME - i386 sigtramp SIGTRAMP_FRAME - i386 prologue NORMAL_FRAME - ... - - Output for x86_64: - ... - $ gdb -q -batch -ex "set arch i386:x86-64" -ex "maint info frame-unwinders" - The target architecture is set to "i386:x86-64". - dummy DUMMY_FRAME - dwarf2 tailcall TAILCALL_FRAME - inline INLINE_FRAME - python NORMAL_FRAME - amd64 epilogue NORMAL_FRAME - i386 epilogue NORMAL_FRAME - dwarf2 NORMAL_FRAME - dwarf2 signal SIGTRAMP_FRAME - amd64 sigtramp SIGTRAMP_FRAME - amd64 prologue NORMAL_FRAME - i386 stack tramp NORMAL_FRAME - i386 sigtramp SIGTRAMP_FRAME - i386 prologue NORMAL_FRAME - ... - - Tested on x86_64-linux. - - Reviewed-By: Tom Tromey - Reviewed-By: Eli Zaretskii - -2023-02-10 Tsukasa OI - - RISC-V: Reduce effective linker relaxation passses - Commit 43025f01a0c9 ("RISC-V: Improve link time complexity.") reduced the - time complexity of the linker relaxation but some code portions did not - reflect this change. - - This commit fixes a comment describing each relaxation pass and reduces - actual number of passes for the RISC-V linker relaxation from 3 to 2. - Though it does not change the functionality, it marginally improves the - performance while linking large programs (with many relocations). - - bfd/ChangeLog: - - * elfnn-riscv.c (_bfd_riscv_relax_section): Fix a comment to - reflect current roles of each relaxation pass. - - ld/ChangeLog: - - * emultempl/riscvelf.em: Reduce the number of linker relaxation - passes from 3 to 2. - -2023-02-10 Alan Modra - - Fix mmo memory leaks - The main one here is the section buffer, which can be quite large. - By using alloc rather than malloc we can leave tidying memory to the - generic bfd code when the bfd is closed. bfd_check_format also - releases memory when object_p fails, so while it wouldn't be wrong - to bfd_release at bad_format_free in mmo_object_p, it's a little extra - code and work for no gain. - - * mmo.c (mmo_object_p): bfd_alloc rather than bfd_malloc - lop_stab_symbol. Don't free/release on error. - (mmo_get_spec_section): bfd_zalloc rather than bfd_zmalloc - section buffer. - (mmo_scan): Free fname on another error path. - -2023-02-10 Alan Modra - - Local label checks in integer_constant - "Local labels are never absolute" says the comment. Except when they - are. Testcase - .offset - 0: - a=0b - I don't see any particular reason to disallow local labels inside - struct definitions, so delete the comment and assertions. - - * expr.c (integer_constant): Delete local label assertions. - -2023-02-10 Jan Beulich - - x86: drop use of VEX3SOURCES - The attribute really specifies that the sum of register and memory - operands is 4. Express it like that in most places, while using the 2nd - (apart from XOP) CPU feature flags (FMA4) in reversed operand matching - logic. - - With the use in build_modrm_byte() gone, part of an assertion there - also becomes meaningless - simplify that at the same time. - - With all uses of the opcode modifier field gone, also drop that. - -2023-02-10 Jan Beulich - - x86: drop use of XOP2SOURCES - The few XOP insns which used it wrongly didn't have VexVVVV specified. - With that added, the only further missing piece to use more generic code - elsewhere is SwapSources - see e.g. the BMI2 insns for similar operand - patterns. - - With the only users gone, drop the #define as well as the special case - code. - -2023-02-10 Jan Beulich - - x86: limit use of XOP2SOURCES - The VPROT* forms with an immediate operand are entirely standard in the - way their ModR/M bytes are built. There's no reason to invoke special - case code. With that the handling of an immediate there can also be - dropped; it was partially bogus anyway, as in its "no memory operands" - portion it ignores the possibility of an immediate operand (which was - okay only because that case was already handled by more generic code). - -2023-02-10 Jan Beulich - - x86: move (and rename) opcodespace attribute - This really isn't a "modifier" and rather ought to live next to the base - opcode anyway. Use the bits we presently have available to fit in the - field, renaming it to opcode_space. As an intended side effect this - helps readability at the use sites, by shortening the references quite a - bit. - - In generated code arrange for human readable output, by using the - SPACE_* constants there rather than raw numbers. This may aid debugging - down the road. - -2023-02-10 Jan Beulich - - x86: simplify a few expressions - Fold adjacent comparisons when, by ORing in a certain mask, the same - effect can be achieved by a single one. In load_insn_p() this extends - to further uses of an already available local variable. - -2023-02-10 Jan Beulich - - x86: improve special casing of certain insns - Now that we have identifiers for the mnemonic strings we can avoid - opcode based comparisons, for (in many cases) being more expensive and - (in a few cases) being a little fragile and not self-documenting. - - Note that the MOV optimization can be engaged by the earlier LEA one, - and hence LEA also needs checking for there. - -2023-02-10 Alan Modra - - objcopy of mach-o indirect symbols - Anti-fuzzer measure. I'm not sure what the correct fix is for - objcopy. Probably the BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS, - BFD_MACH_O_S_LAZY_SYMBOL_POINTERS and BFD_MACH_O_S_SYMBOL_STUBS - contents should be read. - - * mach-o.c (bfd_mach_o_section_get_nbr_indirect): Omit sections - with NULL sec->indirect_syms. - -2023-02-10 GDB Administrator - - Automatic date update in version.in - -2023-02-09 Tom Tromey - - Add full display feature to dwarf-mode.el - I've found that I often use dwarf-mode with relatively small test - files. In this situation, it's handy to be able to expand all the - DWARF, rather than moving to each "..." separately and using C-u C-m. - - This patch implements this feature. It also makes a couple of other - minor changes: - - * I removed a stale FIXME from dwarf-mode. In practice I find I often - use "g" to restore the buffer to a pristine state; checking the file - mtime would work against this. - - * I tightened the regexp in dwarf-insert-substructure. This prevents - the C-m binding from trying to re-read a DIE which has already been - expanded. - - * Finally, I've bumped the dwarf-mode version number so that this - version can easily be installed using package.el. - - 2023-02-09 Tom Tromey - - * dwarf-mode.el: Bump version to 1.8. - (dwarf-insert-substructure): Tighten regexp. - (dwarf-refresh-all): New defun. - (dwarf-mode-map): Bind "A" to dwarf-refresh-all. - (dwarf-mode): Remove old FIXME. - -2023-02-09 Tom Tromey - - Fix comment in gdb.rust/fnfield.exp - gdb.rust/fnfield.exp has a comment that, I assume, I copied from some - other test. This patch fixes it. - -2023-02-09 Tom Tromey - - Trivially simplify rust_language::print_enum - rust_language::print_enum computes: - - int nfields = variant_type->num_fields (); - - ... but then does not reuse this in one spot. This patch corrects the - oversight. - -2023-02-09 Roland McGrath - - [aarch64] Avoid initializers for VLAs - Clang doesn't accept initializer syntax for variable-length - arrays in C. Just use memset instead. - -2023-02-09 Christina Schimpe - - gdb, testsuite: Remove unnecessary call of "set print pretty on" - The command has no effect for the loading of GDB pretty printers and is - removed by this patch to avoid confusion. - - Documentation for "set print pretty" - "Cause GDB to print structures in an indented format with one member per line" - -2023-02-09 Tom Tromey - - Increase size of main_type::nfields - main_type::nfields is a 'short', and has been for many years. PR - c++/29985 points out that 'short' is too narrow for an enum that - contains more than 2^15 constants. - - This patch bumps the size of 'nfields'. To verify that the field - isn't directly used, it is also renamed. Note that this does not - affect the size of main_type on x86-64 Fedora 36. And, if it does - have a negative effect somewhere, it's worth considering that types - could be shrunk more drastically by using subclasses for the different - codes. - - This is v2 of this patch, which has these changes: - - * I changed nfields to 'unsigned', per Simon's request. I looked at - changing all the uses, but this quickly fans out into a very large - patch. (One additional tweak was needed, though.) - - * I wrote a test case. I discovered that GCC cannot compile a large - enough C test case, so I resorted to using the DWARF assembler. - This test doesn't reproduce the crash, but it does fail without the - patch. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29985 - -2023-02-09 Tom Tromey - - Remove mention of cooked_index_vector - I noticed a leftover mention of cooked_index_vector. This updates the - text. - -2023-02-09 Tom Tromey - - Let user C-c when waiting for DWARF index finalization - In PR gdb/29854, Simon pointed out that it would be good to be able to - use C-c when the DWARF cooked index is waiting for finalization. The - idea here is to be able to interrupt a command like "break" -- not to - stop the finalization process itself, which runs in a worker thread. - - This patch implements this idea, by changing the index wait functions - to, by default, allow a quit. Polling is done, because there doesn't - seem to be a better way to interrupt a wait on a std::future. - - For v2, I realized that the thread compatibility code in thread-pool.h - also needed an update. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29854 - -2023-02-09 Alan Modra - - coff keep_relocs and keep_contents - keep_relocs is set by pe_ILF_save_relocs but not used anywhere in the - coff/pe code. It is tested by the xcoff backend but not set. - - keep_contents is only used by the xcoff backend when dealing with - the .loader section, and it's easy enough to dispense with it there. - keep_contents is set in various places but that's fairly useless when - the contents aren't freed anyway until later linker support functions, - add_dynamic_symbols and check_dynamic_ar_symbols. There the contents - were freed if keep_contents wasn't set. I reckon we can free them - unconditionally. - - * coff-bfd.h (struct coff_section_tdata): Delete keep_relocs - and keep_contents. - * peicode.h (pe_ILF_save_relocs): Don't set keep_relocs. - * xcofflink.c (xcoff_get_section_contents): Cache contents. - Return the contents. Update callers. - (_bfd_xcoff_canonicalize_dynamic_symtab): Don't set - keep_contents for .loader. - (xcoff_link_add_dynamic_symbols): Free .loader contents - unconditionally. - (xcoff_link_check_dynamic_ar_symbols): Likewise. - -2023-02-09 GDB Administrator - - Automatic date update in version.in - -2023-02-08 Alan Modra - - coff-sh.c keep_relocs, keep_contents and keep_syms - keep_relocs and keep_contents are unused nowadays except by - xcofflink.c, and I can't see a reason why keep_syms needs to be set. - The external syms are read and used by sh_relax_section and used by - sh_relax_delete_bytes. There doesn't appear to be any way that - freeing them will cause trouble. - - * coff-sh.c (sh_relax_section): Don't set keep_relocs, - keep_contents or keep_syms. - (sh_relax_delete_bytes): Don't set keep_contents. - -2023-02-08 Alan Modra - - Memory leak in bfd_init_section_compress_status - * compress.c (bfd_init_section_compress_status): Free - uncompressed_buffer on error return. - -2023-02-08 Alan Modra - - Clear cached file size when bfd changed to BFD_IN_MEMORY - If file size is calculated by bfd_get_file_size, as it is by - _bfd_alloc_and_read calls in coff_object_p, then it is cached and when - pe_ILF_build_a_bfd converts an archive entry over to BFD_IN_MEMORY, - the file size is no longer valid. Found when attempting objdump -t on - a very small (27 bytes) ILF file and hitting the pr24707 fix (commit - 781152ec18f5). So, clear file size when setting BFD_IN_MEMORY on bfds - that may have been read. (It's not necessary in writable bfds, - because caching is ignored by bfd_get_size when bfd_write_p.) - - I also think the PR 24707 fix is no longer neeeded. All of the - testcases in that PR and in PR24712 are caught earlier by file size - checks when reading the symbols from file. So I'm reverting that fix, - which just compared the size of an array of symbol pointers against - file size. That's only valid if on-disk symbols are larger than a - host pointer, so the test is better done in format-specific code. - - bfd/ - * coff-alpha.c (alpha_ecoff_get_elt_at_filepos): Clear cached - file size when making a BFD_IN_MEMORY bfd. - * opncls.c (bfd_make_readable): Likewise. - * peicode.h (pe_ILF_build_a_bfd): Likewise. - binutils/ - PR 24707 - * objdump.c (slurp_symtab): Revert PR24707 fix. Tidy. - (slurp_dynamic_symtab): Tidy. - -2023-02-08 Alan Modra - - Internal error at gas/expr.c:1814 - This is the assertion - know (*input_line_pointer != ' '); - after calling operand. - - The usual exit from operand calls SKIP_ALL_WHITESPACE. - - * expr.c (operand): Call SKIP_ALL_WHITESPACE after call to expr. - -2023-02-08 Simon Marchi - - gdb: give sentinel for user frames distinct IDs, register sentinel frames to the frame cache - The test gdb.base/frame-view.exp fails like this on AArch64: - - frame^M - #0 baz (z1=hahaha, /home/simark/src/binutils-gdb/gdb/value.c:4056: internal-error: value_fetch_lazy_register: Assertion `next_frame != NULL' failed.^M - A problem internal to GDB has been detected,^M - further debugging may prove unreliable.^M - FAIL: gdb.base/frame-view.exp: with_pretty_printer=true: frame (GDB internal error) - - The sequence of events leading to this is the following: - - - When we create the user frame (the "select-frame view" command), we - create a sentinel frame just for our user-created frame, in - create_new_frame. This sentinel frame has the same id as the regular - sentinel frame. - - - When printing the frame, after doing the "select-frame view" command, - the argument's pretty printer is invoked, which does an inferior - function call (this is the point of the test). This clears the frame - cache, including the "real" sentinel frame, which sets the - sentinel_frame global to nullptr. - - - Later in the frame-printing process (when printing the second - argument), the auto-reinflation mechanism re-creates the user frame - by calling create_new_frame again, creating its own special sentinel - frame again. However, note that the "real" sentinel frame, the - sentinel_frame global, is still nullptr. If the selected frame had - been a regular frame, we would have called get_current_frame at some - point during the reinflation, which would have re-created the "real" - sentinel frame. But it's not the case when reinflating a user frame. - - - Deep down the stack, something wants to fill in the unwind stop - reason for frame 0, which requires trying to unwind frame 1. This - leads us to trying to unwind the PC of frame 1: - - #0 gdbarch_unwind_pc (gdbarch=0xffff8d010080, next_frame=...) at /home/simark/src/binutils-gdb/gdb/gdbarch.c:2955 - #1 0x000000000134569c in dwarf2_tailcall_sniffer_first (this_frame=..., tailcall_cachep=0xffff773fcae0, entry_cfa_sp_offsetp=0xfffff7f7d450) - at /home/simark/src/binutils-gdb/gdb/dwarf2/frame-tailcall.c:390 - #2 0x0000000001355d84 in dwarf2_frame_cache (this_frame=..., this_cache=0xffff773fc928) at /home/simark/src/binutils-gdb/gdb/dwarf2/frame.c:1089 - #3 0x00000000013562b0 in dwarf2_frame_unwind_stop_reason (this_frame=..., this_cache=0xffff773fc928) at /home/simark/src/binutils-gdb/gdb/dwarf2/frame.c:1101 - #4 0x0000000001990f64 in get_prev_frame_always_1 (this_frame=...) at /home/simark/src/binutils-gdb/gdb/frame.c:2281 - #5 0x0000000001993034 in get_prev_frame_always (this_frame=...) at /home/simark/src/binutils-gdb/gdb/frame.c:2376 - #6 0x000000000199b814 in get_frame_unwind_stop_reason (frame=...) at /home/simark/src/binutils-gdb/gdb/frame.c:3051 - #7 0x0000000001359cd8 in dwarf2_frame_cfa (this_frame=...) at /home/simark/src/binutils-gdb/gdb/dwarf2/frame.c:1356 - #8 0x000000000132122c in dwarf_expr_context::execute_stack_op (this=0xfffff7f80170, op_ptr=0xffff8d8883ee "\217\002", op_end=0xffff8d8883ee "\217\002") - at /home/simark/src/binutils-gdb/gdb/dwarf2/expr.c:2110 - #9 0x0000000001317b30 in dwarf_expr_context::eval (this=0xfffff7f80170, addr=0xffff8d8883ed "\234\217\002", len=1) at /home/simark/src/binutils-gdb/gdb/dwarf2/expr.c:1239 - #10 0x000000000131d68c in dwarf_expr_context::execute_stack_op (this=0xfffff7f80170, op_ptr=0xffff8d88840e "", op_end=0xffff8d88840e "") at /home/simark/src/binutils-gdb/gdb/dwarf2/expr.c:1811 - #11 0x0000000001317b30 in dwarf_expr_context::eval (this=0xfffff7f80170, addr=0xffff8d88840c "\221p", len=2) at /home/simark/src/binutils-gdb/gdb/dwarf2/expr.c:1239 - #12 0x0000000001314c3c in dwarf_expr_context::evaluate (this=0xfffff7f80170, addr=0xffff8d88840c "\221p", len=2, as_lval=true, per_cu=0xffff90b03700, frame=..., addr_info=0x0, - type=0xffff8f6c8400, subobj_type=0xffff8f6c8400, subobj_offset=0) at /home/simark/src/binutils-gdb/gdb/dwarf2/expr.c:1078 - #13 0x000000000149f9e0 in dwarf2_evaluate_loc_desc_full (type=0xffff8f6c8400, frame=..., data=0xffff8d88840c "\221p", size=2, per_cu=0xffff90b03700, per_objfile=0xffff9070b980, - subobj_type=0xffff8f6c8400, subobj_byte_offset=0, as_lval=true) at /home/simark/src/binutils-gdb/gdb/dwarf2/loc.c:1513 - #14 0x00000000014a0100 in dwarf2_evaluate_loc_desc (type=0xffff8f6c8400, frame=..., data=0xffff8d88840c "\221p", size=2, per_cu=0xffff90b03700, per_objfile=0xffff9070b980, as_lval=true) - at /home/simark/src/binutils-gdb/gdb/dwarf2/loc.c:1557 - #15 0x00000000014aa584 in locexpr_read_variable (symbol=0xffff8f6cd770, frame=...) at /home/simark/src/binutils-gdb/gdb/dwarf2/loc.c:3052 - - - AArch64 defines a special "prev register" function, - aarch64_dwarf2_prev_register, to handle unwinding the PC. This - function does - - frame_unwind_register_unsigned (this_frame, AARCH64_LR_REGNUM); - - - frame_unwind_register_unsigned ultimately creates a lazy register - value, saving the frame id of this_frame->next. this_frame is the - user-created frame, to this_frame->next is the special sentinel frame - we created for it. So the saved ID is the sentinel frame ID. - - - When time comes to un-lazify the value, value_fetch_lazy_register - calls frame_find_by_id, to find the frame with the ID we saved. - - - frame_find_by_id sees it's the sentinel frame ID, so returns the - sentinel_frame global, which is, if you remember, nullptr. - - - We hit the `gdb_assert (next_frame != NULL)` assertion in - value_fetch_lazy_register. - - The issues I see here are: - - - The ID of the sentinel frame created for the user-created frame is - not distinguishable from the ID of the regular sentinel frame. So - there's no way frame_find_by_id could find the right frame, in - value_fetch_lazy_register. - - Even if they had distinguishable IDs, sentinel frames created for - user frames are not registered anywhere, so there's no easy way - frame_find_by_id could find it. - - This patch addresses these two issues: - - - Give sentinel frames created for user frames their own distinct IDs - - Register sentinel frames in the frame cache, so they can be found - with frame_find_by_id. - - I initially had this split in two patches, but I then found that it was - easier to explain as a single patch. - - Rergarding the first part of the change: with this patch, the sentinel - frames created for user frames (in create_new_frame) still have - stack_status == FID_STACK_SENTINEL, but their code_addr and stack_addr - fields are now filled with the addresses used to create the user frame. - This ensures this sentinel frame ID is different from the "target" - sentinel frame ID, as well as any other "user" sentinel frame ID. If - the user tries to create the same frame, with the same addresses, - multiple times, create_sentinel_frame just reuses the existing frame. - So we won't end up with multiple user sentinels with the same ID. - - Regular "target" sentinel frames remain with code_addr and stack_addr - unset. - - The concrete changes for that part are: - - - Remove the sentinel_frame_id constant, since there isn't one - "sentinel frame ID" now. Add the frame_id_build_sentinel function - for building sentinel frame IDs and a is_sentinel_frame_id function - to check if a frame id represents a sentinel frame. - - Replace the sentinel_frame_id check in frame_find_by_id with a - comparison to `frame_id_build_sentinel (0, 0)`. The sentinel_frame - global is meant to contain a reference to the "target" sentinel, so - the one with addresses (0, 0). - - Add stack and code address parameters to create_sentinel_frame, to be - able to create the various types of sentinel frames. - - Adjust get_current_frame to create the regular "target" sentinel. - - Adjust create_new_frame to create a sentinel with the ID specific to - the created user frame. - - Adjust sentinel_frame_prev_register to get the sentinel frame ID from - the frame_info object, since there isn't a single "sentinel frame ID" - now. - - Change get_next_frame_sentinel_okay to check for a - sentinel-frame-id-like frame ID, rather than for sentinel_frame - specifically, since this function could be called with another - sentinel frame (and we would want the assert to catch it). - - The rest of the change is about registering the sentinel frame in the - frame cache: - - - Change frame_stash_add's assertion to allow sentinel frame levels - (-1). - - Make create_sentinel_frame add the frame to the frame cache. - - Change the "sentinel_frame != NULL" check in reinit_frame_cache for a - check that the frame stash is not empty. The idea is that if we only - have some user-created frames in the cache when reinit_frame_cache is - called, we probably want to emit the frames invalid annotation. The - goal of that check is to avoid unnecessary repeated annotations, I - suppose, so the "frame cache not empty" check should achieve that. - - After this change, I think we could theoritically get rid of the - sentienl_frame global. That sentinel frame could always be found by - looking up `frame_id_build_sentinel (0, 0)` in the frame cache. - However, I left the global there to avoid slowing the typical case down - for nothing. I however, noted in its comment that it is an - optimization. - - With this fix applied, the gdb.base/frame-view.exp now passes for me on - AArch64. value_of_register_lazy now saves the special sentinel frame ID - in the value, and value_fetch_lazy_register is able to find that - sentinel frame after the frame cache reinit and after the user-created - frame was reinflated. - - Tested-By: Alexandra Petlanova Hajkova - Tested-By: Luis Machado - Change-Id: I8b77b3448822c8aab3e1c3dda76ec434eb62704f - -2023-02-08 Simon Marchi - - gdb: call frame unwinders' dealloc_cache methods through destroying the frame cache - Currently, some frame resources are deallocated by iterating on the - frame chain (starting from the sentinel), calling dealloc_cache. The - problem is that user-created frames are not part of that chain, so we - never call dealloc_cache for them. - - I propose to make it so the dealloc_cache callbacks are called when the - frames are removed from the frame_stash hash table, by registering a - deletion function to the hash table. This happens when - frame_stash_invalidate is called by reinit_frame_cache. This way, all - frames registered in the cache will get their unwinder's dealloc_cache - callbacks called. - - Note that at the moment, the sentinel frames are not registered in the - cache, so we won't call dealloc_cache for them. However, it's just a - theoritical problem, because the sentinel frame unwinder does not - provide this callback. Also, a subsequent patch will change things so - that sentinel frames are registered to the cache. - - I moved the obstack_free / obstack_init pair below the - frame_stash_invalidate call in reinit_frame_cache, because I assumed - that some dealloc_cache would need to access some data on that obstack, - so it would be better to free it after clearing the hash table. - - Change-Id: If4f9b38266b458c4e2f7eb43e933090177c22190 - -2023-02-08 Tom Tromey - - Remove block.h includes from some tdep files - A few tdep files include block.h but do not need to. This patch - removes the inclusions. I checked that this worked correctly by - examining the resulting .Po file to make sure that block.h was not - being included by some other route. - - Don't include block.h from expop.h - expop.h needs block.h for a single inline function. However, I don't - think most of the check_objfile functions need to be defined in the - header (just the templates). This patch moves the one offending - function and removes the include. - -2023-02-08 Pedro Alves - - Simplify interp::exec / interp_exec - let exceptions propagate - This patch implements a simplication that I suggested here: - - https://sourceware.org/pipermail/gdb-patches/2022-March/186320.html - - Currently, the interp::exec virtual method interface is such that - subclass implementations must catch exceptions and then return them - via normal function return. - - However, higher up the in chain, for the CLI we get to - interpreter_exec_cmd, which does: - - for (i = 1; i < nrules; i++) - { - struct gdb_exception e = interp_exec (interp_to_use, prules[i]); - - if (e.reason < 0) - { - interp_set (old_interp, 0); - error (_("error in command: \"%s\"."), prules[i]); - } - } - - and for MI we get to mi_cmd_interpreter_exec, which has: - - void - mi_cmd_interpreter_exec (const char *command, char **argv, int argc) - { - ... - for (i = 1; i < argc; i++) - { - struct gdb_exception e = interp_exec (interp_to_use, argv[i]); - - if (e.reason < 0) - error ("%s", e.what ()); - } - } - - Note that if those errors are reached, we lose the original - exception's error code. I can't see why we'd want that. - - And, I can't see why we need to have interp_exec catch the exception - and return it via the normal return path. That's normally needed when - we need to handle propagating exceptions across C code, like across - readline or ncurses, but that's not the case here. - - It seems to me that we can simplify things by removing some - try/catch-ing and just letting exceptions propagate normally. - - Note, the "error in command" error shown above, which only exists in - the CLI interpreter-exec command, is only ever printed AFAICS if you - run "interpreter-exec console" when the top level interpreter is - already the console/tui. Like: - - (gdb) interpreter-exec console "foobar" - Undefined command: "foobar". Try "help". - error in command: "foobar". - - You won't see it with MI's "-interpreter-exec console" from a top - level MI interpreter: - - (gdb) - -interpreter-exec console "foobar" - &"Undefined command: \"foobar\". Try \"help\".\n" - ^error,msg="Undefined command: \"foobar\". Try \"help\"." - (gdb) - - nor with MI's "-interpreter-exec mi" from a top level MI interpreter: - - (gdb) - -interpreter-exec mi "-foobar" - ^error,msg="Undefined MI command: foobar",code="undefined-command" - ^done - (gdb) - - in both these cases because MI's -interpreter-exec just does: - - error ("%s", e.what ()); - - You won't see it either when running an MI command with the CLI's - "interpreter-exec mi": - - (gdb) interpreter-exec mi "-foobar" - ^error,msg="Undefined MI command: foobar",code="undefined-command" - (gdb) - - This last case is because MI's interp::exec implementation never - returns an error: - - gdb_exception - mi_interp::exec (const char *command) - { - mi_execute_command_wrapper (command); - return gdb_exception (); - } - - Thus I think that "error in command" error is pretty pointless, and - since it simplifies things to not have it, the patch just removes it. - - The patch also ends up addressing an old FIXME. - - Change-Id: I5a6432a80496934ac7127594c53bf5221622e393 - Approved-By: Tom Tromey - Approved-By: Kevin Buettner - -2023-02-08 Tom Tromey - - Avoid FAILs in gdb.compile - Many gdb.compile C++ tests fail for me on Fedora 36. I think these - are largely bugs in the plugin, though I didn't investigate too - deeply. Once one failure is seen, this often cascades and sometimes - there are many timeouts. - - For example, this can happen: - - (gdb) compile code var = a->get_var () - warning: Could not find symbol "_ZZ9_gdb_exprP10__gdb_regsE1a" for compiled module "/tmp/gdbobj-0xdI6U/out2.o". - 1 symbols were missing, cannot continue. - - I think this is probably a plugin bug because, IIRC, in theory these - symbols should be exempt from a lookup via gdb. - - This patch arranges to catch any catastrophic failure and then simply - exit the entire .exp file. - -2023-02-08 Tom Tromey - - Don't let .gdb_history file cause failures - I had a .gdb_history file in my testsuite directory in the build tree, - and this provoked a failure in gdbhistsize-history.exp. It seems - simple to prevent this file from causing a failure. - -2023-02-08 Tom Tromey - - Merge fixup_section and fixup_symbol_section - fixup_symbol_section delegates all its work to fixup_section, so merge - the two. - - Because there is only a single caller to fixup_symbol_section, we can - also remove some of the introductory logic. For example, this will - never be called with a NULL objfile any more. - - The LOC_BLOCK case can be removed, because such symbols are handled by - the buildsym code now. - - Finally, a symbol can only appear in a SEC_ALLOC section, so the loop - is modified to skip sections that do not have this flag set. - -2023-02-08 Tom Tromey - - Remove most calls to fixup_symbol_section - Nearly every call to fixup_symbol_section in gdb is incorrect, and if - any such call has an effect, it's purely by happenstance. - - fixup_section has a long comment explaining that the call should only - be made before runtime section offsets are applied. And, the loop in - this code (the fallback loop -- the minsym lookup code is "ok") is - careful to remove these offsets before comparing addresses. - - However, aside from a single call in dwarf2/read.c, every call in gdb - is actually done after section offsets have been applied. So, these - calls are incorrect. - - Now, these calls could be made when the symbol is created. I - considered this approach, but I reasoned that the code has been this - way for many years, seemingly without ill effect. So, instead I chose - to simply remove the offending calls. - -2023-02-08 Tom Tromey - - Set section index when setting a symbol's block - When a symbol's block is set, the block has the runtime section offset - applied. So, it seems to me that the symbol implicitly is in the same - section as the block. Therefore, this patch sets the symbol's section - index at this same spot. - - Remove compunit_symtab::m_block_line_section - The previous patch hard-coded SECT_OFF_TEXT into the buildsym code. - After this, it's clear that there is only one caller of - compunit_symtab::set_block_line_section, and it always passes - SECT_OFF_TEXT. So, remove compunit_symtab::m_block_line_section and - use SECT_OFF_TEXT instead. - - Do not pass section index to end_compunit_symtab - Right now, the section index passed to end_compunit_symtab is always - SECT_OFF_TEXT. Remove this parameter and simply always use - SECT_OFF_TEXT. - -2023-02-08 Tom Tromey - - Set section indices when symbols are made - Most places in gdb that create a new symbol will apply a section - offset to the address. It seems to me that the choice of offset here - is also an implicit choice of the section. This is particularly true - if you examine fixup_section, which notes that it must be called - before such offsets are applied -- meaning that if any such call has - an effect, it's purely by accident. - - This patch cleans up this area by tracking the section index and - applying it to a symbol when the address is set. This is done for - nearly every case -- the remaining cases will be handled in later - patches. - -2023-02-08 Tom Tromey - - Use default section indexes in fixup_symbol_section - If fixup_section does not find a matching section, it arbitrarily - chooses the first one. However, it seems better to make this default - depend on the type of the symbol -- i.e., default data symbols to - .data and text symbols to .text. - - I've also made fixup_section static, as it only has one caller. - -2023-02-08 Tom Tromey - - Simplify checks of cooked_index - This changes the cooked_index_functions to avoid an extra null check - now that checked_static_cast allows a null argument. - - Approved-By: Simon Marchi - -2023-02-08 Tom de Vries - - [gdb/testsuite] Use maint ignore-probes in gdb.base/longjmp.exp - Test-case gdb.base/longjmp.exp handles both the case that there is a libc - longjmp probe, and the case that there isn't. - - However, it only tests one of the two cases. - - Use maint ignore-probes to test both cases, if possible. - - Tested on x86_64-linux. - -2023-02-08 Tom de Vries - - [gdb/testsuite] Use maint ignore-probes in gdb.base/solib-corrupted.exp - Test-case gdb.base/solib-corrupted.exp only works for a glibc without probes - interface, otherwise we run into: - ... - XFAIL: gdb.base/solib-corrupted.exp: info probes - UNTESTED: gdb.base/solib-corrupted.exp: GDB is using probes - ... - - Fix this by using maint ignore-probes to simulate the absence of the relevant - probes. - - Also, it requires glibc debuginfo, and if not present, it produces an XFAIL: - ... - XFAIL: gdb.base/solib-corrupted.exp: make solibs looping - UNTESTED: gdb.base/solib-corrupted.exp: no _r_debug symbol has been found - ... - This is incorrect, because an XFAIL indicates a known problem in the - environment. In this case, there is no problem: the environment is - functioning as expected when glibc debuginfo is not installed. - - Fix this by using UNSUPPORTED instead, and make the message less cryptic: - ... - UNSUPPORTED: gdb.base/solib-corrupted.exp: make solibs looping \ - (glibc debuginfo required) - ... - - Finally, with glibc debuginfo present, we run into: - ... - (gdb) PASS: gdb.base/solib-corrupted.exp: make solibs looping - info sharedlibrary^M - warning: Corrupted shared library list: 0x7ffff7ffe750 != 0x0^M - From To Syms Read Shared Object Library^M - 0x00007ffff7dd4170 0x00007ffff7df4090 Yes /lib64/ld-linux-x86-64.so.2^M - (gdb) FAIL: gdb.base/solib-corrupted.exp: corrupted list \ - (shared library list corrupted) - ... - due to commit 44288716537 ("gdb, testsuite: extend gdb_test_multiple checks"). - - Fix this by rewriting into gdb_test_multiple and using -early. - - Tested on x86_64-linux, with and without glibc debuginfo installed. - -2023-02-08 Vladimir Mezentsev - - gprofng: fix SIGSEGV when processing unusual dwarf - gprofng/ChangeLog - 2023-02-07 Vladimir Mezentsev - - PR gprofng/30093 - * src/Dwarf.cc: add nullptr check. - * src/DwarfLib.cc: Likewise. - -2023-02-08 Alan Modra - - Re: Resetting section vma after _bfd_dwarf2_find_nearest_line - f.bfd_ptr is set too early to be a reliable indicator of good debug - info. - - * dwarf2.c (_bfd_dwarf2_slurp_debug_info): Correct test for - debug info being previously found. - -2023-02-08 GDB Administrator - - Automatic date update in version.in - -2023-02-07 Andrew Burgess - - gdb: fix display of thread condition for multi-location breakpoints - This commit addresses the issue in PR gdb/30087. - - If a breakpoint with multiple locations has a thread condition, then - the 'info breakpoints' output is a little messed up, here's an example - of the current output: - - (gdb) break foo thread 1 - Breakpoint 2 at 0x401114: foo. (3 locations) - (gdb) break bar thread 1 - Breakpoint 3 at 0x40110a: file /tmp/src/gdb/testsuite/gdb.base/thread-bp-multi-loc.c, line 32. - (gdb) info breakpoints - Num Type Disp Enb Address What - 2 breakpoint keep y thread 1 - stop only in thread 1 - 2.1 y 0x0000000000401114 in foo at /tmp/src/gdb/testsuite/gdb.base/thread-bp-multi-loc.c:25 - 2.2 y 0x0000000000401146 in foo at /tmp/src/gdb/testsuite/gdb.base/thread-bp-multi-loc.c:25 - 2.3 y 0x0000000000401168 in foo at /tmp/src/gdb/testsuite/gdb.base/thread-bp-multi-loc.c:25 - 3 breakpoint keep y 0x000000000040110a in bar at /tmp/src/gdb/testsuite/gdb.base/thread-bp-multi-loc.c:32 thread 1 - stop only in thread 1 - - Notice that, at the end of the location for breakpoint 3, the 'thread - 1' condition is printed, but this is then repeated on the next line - with 'stop only in thread 1'. - - In contrast, for breakpoint 2, the 'thread 1' appears randomly, in the - "What" column, though slightly offset, non of the separate locations - have the 'thread 1' information. Additionally for breakpoint 2 we - also get a 'stop only in thread 1' line. - - There's two things going on here. First the randomly placed 'thread - 1' for breakpoint 2 is due to a bug in print_one_breakpoint_location, - where we check the variable part_of_multiple instead of - header_of_multiple. - - If I fix this oversight, then the output is now: - - (gdb) break foo thread 1 - Breakpoint 2 at 0x401114: foo. (3 locations) - (gdb) break bar thread 1 - Breakpoint 3 at 0x40110a: file /tmp/src/gdb/testsuite/gdb.base/thread-bp-multi-loc.c, line 32. - (gdb) info breakpoints - Num Type Disp Enb Address What - 2 breakpoint keep y - stop only in thread 1 - 2.1 y 0x0000000000401114 in foo at /tmp/src/gdb/testsuite/gdb.base/thread-bp-multi-loc.c:25 thread 1 - 2.2 y 0x0000000000401146 in foo at /tmp/src/gdb/testsuite/gdb.base/thread-bp-multi-loc.c:25 thread 1 - 2.3 y 0x0000000000401168 in foo at /tmp/src/gdb/testsuite/gdb.base/thread-bp-multi-loc.c:25 thread 1 - 3 breakpoint keep y 0x000000000040110a in bar at /tmp/src/gdb/testsuite/gdb.base/thread-bp-multi-loc.c:32 thread 1 - stop only in thread 1 - - The 'thread 1' condition is now displayed at the end of each location, - which makes the output the same for single location breakpoints and - multi-location breakpoints. - - However, there's still some duplication here. Both breakpoints 2 and - 3 include a 'stop only in thread 1' line, and it feels like the - additional 'thread 1' is redundant. In fact, there's a comment to - this very effect in the code: - - /* FIXME: This seems to be redundant and lost here; see the - "stop only in" line a little further down. */ - - So, lets fix this FIXME. The new plan is to remove all the trailing - 'thread 1' markers from the CLI output, we now get this: - - (gdb) break foo thread 1 - Breakpoint 2 at 0x401114: foo. (3 locations) - (gdb) break bar thread 1 - Breakpoint 3 at 0x40110a: file /tmp/src/gdb/testsuite/gdb.base/thread-bp-multi-loc.c, line 32. - (gdb) info breakpoints - Num Type Disp Enb Address What - 2 breakpoint keep y - stop only in thread 1 - 2.1 y 0x0000000000401114 in foo at /tmp/src/gdb/testsuite/gdb.base/thread-bp-multi-loc.c:25 - 2.2 y 0x0000000000401146 in foo at /tmp/src/gdb/testsuite/gdb.base/thread-bp-multi-loc.c:25 - 2.3 y 0x0000000000401168 in foo at /tmp/src/gdb/testsuite/gdb.base/thread-bp-multi-loc.c:25 - 3 breakpoint keep y 0x000000000040110a in bar at /tmp/src/gdb/testsuite/gdb.base/thread-bp-multi-loc.c:32 - stop only in thread 1 - - All of the above points are also true for the Ada 'task' breakpoint - condition, and the changes I've made also update how the task - information is printed, though in the case of the Ada task there was - no 'stop only in task XXX' line printed, so I've added one of those. - - Obviously it can't be quite that easy. For MI backwards compatibility - I've retained the existing code (but now only for MI like outputs), - which ensures we should generate backwards compatible output. - - I've extended an Ada test to cover the new task related output, and - updated all the tests I could find that checked for the old output. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30087 - - Approved-By: Pedro Alves - -2023-02-07 Nick Clifton - - Fix documentation of the 'n' symbol type displayed by nm. - PR 30080 * doc/binutils.texi (nm): Update description of the 'n' symbol type. - -2023-02-07 Tom de Vries - - [gdb/testsuite] Improve untested message in gdb.ada/finish-var-size.exp - I came across: - ... - UNTESTED: gdb.ada/finish-var-size.exp: GCC too told for this test - ... - The message only tells us that the compiler version too old, not what compiler - version is required. - - Fix this by rewriting using required: - ... - UNSUPPORTED: gdb.ada/finish-var-size.exp: require failed: \ - expr [gcc_major_version] >= 12 - ... - - Tested on x86_64-linux. - -2023-02-07 GDB Administrator - - Automatic date update in version.in - -2023-02-06 Simon Marchi - - gdb: adjust comment on target_desc_info::from_user_p - Remove the stale reference to INFO, which is now "this target - description info" now. - - Change-Id: I35dbdb089048ed7cfffe730d3134ee391b176abf - -2023-02-06 Andrew Burgess - - gdb/doc: extend the documentation for the 'handle' command - The documentation for the 'handle' command does not cover all of the - features of the command, and in one case, is just wrong. - - The user can specify 'all' as signal name, the documentation implies - that this will change the behaviour of all signals, in reality, this - changes all signals except SIGINT and SIGTRAP (the signals used by - GDB). I've updated the docs to list this limitation. - - The 'handle' command also allows the user to specify multiple signals - for a single command, e.g. 'handle SIGFPE SIGILL nostop pass print', - however the documentation doesn't describe this, so I've updated the - docs to describe this feature. - -2023-02-06 Alan Modra - - ppc32 and "LOAD segment with RWX permissions" - When using a bss-plt we'll always trigger the RWX warning, which - disturbs gcc test results. On the other hand, there may be reason to - want the warning when gcc is configured with --enable-secureplt. - So turning off the warning entirely for powerpc might not be the best - solution. Instead, we'll turn off the warning whenever a bss-plt is - generated, unless the user explicitly asked for the warning. - - bfd/ - * elf32-ppc.c (ppc_elf_select_plt_layout): Set - no_warn_rwx_segments on generating a bss plt, unless explicity - enabled by the user. Also show the bss-plt warning when - --warn-rwx-segments is given without --bss-plt. - include/ - * bfdlink.h (struct bfd_link_info): Add user_warn_rwx_segments. - ld/ - * lexsup.c (parse_args): Set user_warn_rwx_segments. - * testsuite/ld-elf/elf.exp: Pass --secure-plt for powerpc to - the rwx tests. - -2023-02-06 Tom de Vries - - [gdb/testsuite] Fix gdb.threads/schedlock.exp on fast cpu - Occasionally, I run into: - ... - (gdb) PASS: gdb.threads/schedlock.exp: schedlock=on: cmd=continue: \ - set scheduler-locking on - continue^M - Continuing.^M - PASS: gdb.threads/schedlock.exp: schedlock=on: cmd=continue: \ - continue (with lock) - [Thread 0x7ffff746e700 (LWP 1339) exited]^M - No unwaited-for children left.^M - (gdb) Quit^M - (gdb) FAIL: gdb.threads/schedlock.exp: schedlock=on: cmd=continue: \ - stop all threads (with lock) (timeout) - ... - - What happens is that this loop which is supposed to run "just short of forever": - ... - /* Don't run forever. Run just short of it :) */ - while (*myp > 0) - { - /* schedlock.exp: main loop. */ - MAYBE_CALL_SOME_FUNCTION(); (*myp) ++; - } - ... - finishes after 0x7fffffff iterations (when a signed wrap occurs), which on my - system takes only about 1.5 seconds. - - Fix this by: - - changing the pointed-at type of myp from signed to unsigned, which makes the - wrap defined behaviour (and which also make the loop run twice as long, - which is already enough to make it impossible for me to reproduce the FAIL. - But let's try to solve this more structurally). - - changing the pointed-at type of myp from int to long long, making the wrap - unlikely. - - making sure the loop runs forever, by setting the loop condition to 1. - - making sure the loop still contains different lines (as far as debug info is - concerned) by incrementing a volatile counter in the loop. - - making sure the program doesn't run forever in case of trouble, by adding an - "alarm (30)". - - Tested on x86_64-linux. - - PR testsuite/30074 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30074 - -2023-02-06 Andrew Burgess - - gdb: error if 'thread' or 'task' keywords are overused - When creating a breakpoint or watchpoint, the 'thread' and 'task' - keywords can be used to create a thread or task specific breakpoint or - watchpoint. - - Currently, a thread or task specific breakpoint can only apply for a - single thread or task, if multiple threads or tasks are specified when - creating the breakpoint (or watchpoint), then the last specified id - will be used. - - The exception to the above is that when the 'thread' keyword is used - during the creation of a watchpoint, GDB will give an error if - 'thread' is given more than once. - - In this commit I propose making this behaviour consistent, if the - 'thread' or 'task' keywords are used more than once when creating - either a breakpoint or watchpoint, then GDB will give an error. - - I haven't updated the manual, we don't explicitly say that these - keywords can be repeated, and (to me), given the keyword takes a - single id, I don't think it makes much sense to repeat the keyword. - As such, I see this more as adding a missing error to GDB, rather than - making some big change. However, I have added an entry to the NEWS - file as I guess it is possible that some people might hit this new - error with an existing (I claim, badly written) GDB script. - - I've added some new tests to check for the new error. - - Just one test needed updating, gdb.linespec/keywords.exp, this test - did use the 'thread' keyword twice, and expected the breakpoint to be - created. Looking at what this test was for though, it was checking - the use of '-force-condition', and I don't think that being able to - repeat 'thread' was actually a critical part of this test. - - As such, I've updated this test to expect the error when 'thread' is - repeated. - -2023-02-06 Alan Modra - - Resetting section vma after _bfd_dwarf2_find_nearest_line - There are failure paths in _bfd_dwarf2_slurp_debug_info that can - result in altered section vmas. Also, when setting ET_REL section - vmas it's not too difficult to handle cases where the original vma was - non-zero, so do that too. - - This patch was really in response to an addr2line buffer overflow - processing a fuzzed mips relocatable object file. The file had a - number of .debug_info sections with relocations that included lo16 and - hi16 relocs, and in that order. At least one section VMA was - non-zero. This resulted in processing of DWARF info twice, once via - the call to _bfd_dwarf2_find_nearest_line in - _bfd_mips_elf_find_nearest_line, and because that failed leaving VMAs - altered, the second via the call in _bfd_elf_find_nearest_line. The - first call left entries on mips_hi16_list pointing at buffers - allocated during the first call, the second call processed the - mips_hi16_list after the buffers had been freed. (At least when - running with asan and under valgrind. Under gdb with a non-asan - addr2line the second call allocated exactly the same buffer and the - bug didn't show.) Now I don't really care too much what happens with - fuzzed files, but the logic in _bfd_dwarf2_find_nearest_line is meant - to result in only one read of .debug_info, not multiple reads of the - same info when there are errors. This patch fixes that problem. - - * dwarf2.c (struct adjusted_section): Add orig_vma. - (unset_sections): Reset vma to it. - (place_sections): Handle non-zero vma too. Save orig_vma. - (_bfd_dwarf2_slurp_debug_info): Tidy. Correct outdated comment. - On error returns after calling place_sections, call - unset_sections. - (_bfd_dwarf2_find_nearest_line_with_alt): Simplify call to - unset_sections. - -2023-02-06 Romain Geissler - - [PR 30082] Pass $JANSSON_LIBS and $ZSTD_LIBS to ld-bootstrap/bootrap.exp - -2023-02-06 GDB Administrator - - Automatic date update in version.in - -2023-02-05 GDB Administrator - - Automatic date update in version.in - -2023-02-04 Andrew Burgess - - gdb/testsuite: don't try to set non-stop mode on a running target - The test gdb.threads/thread-specific-bp.exp tries to set non-stop mode - on a running target, something which the manual makes clear is not - allowed. - - This commit restructures the test a little, we now set the non-stop - mode as part of the GDBFLAGS, so the mode will be set before GDB - connects to the target. As a consequence I'm able to move the - with_test_prefix out of the check_thread_specific_breakpoint proc. - The check_thread_specific_breakpoint proc is now called within a loop. - - After this commit the gdb.threads/thread-specific-bp.exp test still - has some failures, this is because of an issue GDB currently has - printing "Thread ... exited" messages. This problem should be - addressed by this patch: - - https://sourceware.org/pipermail/gdb-patches/2022-December/194694.html - - when it is merged. - -2023-02-04 Dimitar Dimitrov - - ld: pru: Add optional section alignments - The Texas Instruments SoCs with AARCH64 host processors have stricter - alignment requirements than ones with ARM32 host processors. It's not - only the requirement for resource_table to be aligned to 8. But also - any loadable segment size must be a multiple of 4 [1]. - - The current PRU default linker script may output a segment size not - aligned to 4, which would cause firmware load failure on AARCH64 hosts. - - Fix this by using COMMONPAGESIZE and MAXPAGESIZE to signify respectively - the section memory size requirement and the resource table section's - start address alignment. This would avoid penalizing the ARM32 hosts, - for which the default values (1 and 1) are sufficient. - - For AARCH64 hosts, the alignments would be overwritten from GCC spec - files using the linker command line, e.g.: - -z common-page-size=4 -z max-page-size=8 - - [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/remoteproc/pru_rproc.c?h=v6.1#n555 - - ld/ChangeLog: - - * scripttempl/pru.sc (_data_end): Remove the alignment. - (.data): Align output section size to COMMONPAGESIZE. - (.resource_table): Ditto. - -2023-02-04 Dimitar Dimitrov - - ld: pru: Merge the bss input sections into data - The popular method to load PRU firmware is through the remoteproc Linux - kernel driver. In order to save a few bytes from the firmware, the PRU - CRT0 is spared from calling memset for the bss segment [1]. Instead the - host loader is supposed to zero out the bss segment. This is important - for PRU, which typically has only 8KB for instruction memory. - - The legacy non-mainline PRU host driver relied on the default - behaviour of the kernel core remoteproc [2]. That default is to zero - out the loadable memory regions not backed by file storage (i.e. the - bss sections). This worked for the libgloss' CRT0. - - But the PRU loader merged in mainline Linux explicitly changes the - default behaviour [3]. It no longer is zeroing out memory regions. - Hence the bss sections are not initialized - neither by CRT0, nor by the - host loader. - - This patch fixes the issue by aligning the GNU LD default linker script - with the mainline Linux kernel expectation. Since the mainline kernel - driver is submitted by the PRU manufacturer itself (Text Instruments), - we can consider that as defining the ABI. - - This change has been tested on Beaglebone AI-64 [4]. Static counter - variables in the firmware are now always starting from zero, as - expected. There was only one new toolchain test failure in orphan3.d, - due to reordering of the output sections. I believe this is a harmless - issue. I could not rewrite the PASS criteria to ignore the output - section ordering, so I have disabled that test case for PRU. - - [1] https://sourceware.org/git/?p=newlib-cygwin.git;a=blob;f=libgloss/pru/crt0.S;h=b3f0d53a93acc372f461007553e7688ca77753c9;hb=HEAD#l40 - [2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/remoteproc/remoteproc_elf_loader.c?h=v6.1#n228 - [3] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/remoteproc/pru_rproc.c?h=v6.1#n641 - [4] https://beagleboard.org/ai-64 - - ld/ChangeLog: - - * scripttempl/pru.sc (.data): Merge .bss input sections into the - .data output section. - * testsuite/ld-elf/orphan3.d: Disable for PRU. - -2023-02-04 GDB Administrator - - Automatic date update in version.in - -2023-02-03 Guillermo E. Martinez - - bpf: fix error conversion from long unsigned int to unsigned int [-Werror=overflow] - Regenerating BPF target using the maintainer mode emits: - .../opcodes/bpf-opc.c:57:11: error: conversion from ‘long unsigned int’ to ‘unsigned int’ changes value from ‘18446744073709486335’ to ‘4294902015’ [-Werror=overflow] - 57 | 64, 64, 0xffffffffffff00ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_CODE) }, { F (F_DSTLE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } } - - The use of a narrow size to handle the mask CGEN in instruction format - is causing this error. Additionally eBPF `call' instructions - constructed by expressions using symbols (BPF_PSEUDO_CALL) emits - annotations in `src' field of the instruction, used to identify BPF - target endianness. - - cpu/ - * bpf.cpu (define-call-insn): Remove `src' field from - instruction mask. - - include/ - *opcode/cge.h (CGEN_IFMT): Adjust mask bit width. - - opcodes/ - * bpf-opc.c: Regenerate. - -2023-02-03 Simon Marchi - - gdb: make target_desc_info_from_user_p a method of target_desc_info - Move the implementation over to target_desc_info. Remove the - target_desc_info forward declaration in target-descriptions.h, it's no - longer needed. - - Change-Id: Ic95060341685afe0b73af591ca6efe32f5e7e892 - -2023-02-03 Simon Marchi - - gdb: remove copy_inferior_target_desc_info - This function is now trivial, we can just copy inferior::tdesc_info - where needed. - - Change-Id: I25185e2cd4ba1ef24a822d9e0eebec6e611d54d6 - -2023-02-03 Simon Marchi - - gdb: remove get_tdesc_info - Remove this function, since it's now a trivial access to - inferior::tdesc_info. - - Change-Id: I3e88a8214034f1a4163420b434be11f51eef462c - -2023-02-03 Simon Marchi - - gdb: change inferior::tdesc_info to non-pointer - I initially made this field a unique pointer, to have automatic memory - management. But I then thought that the field didn't really need to be - allocated separately from struct inferior. So make it a regular - non-pointer field of inferior. - - Remove target_desc_info_free, as it's no longer needed. - - Change-Id: Ica2b97071226f31c40e86222a2f6922454df1229 - -2023-02-03 Simon Marchi - - gdb: move target_desc_info to inferior.h - In preparation for the following patch, where struct inferior needs to - "see" struct target_desc_info, move target_desc_info to the header file. - - I initially moved the structure to target-descriptions.h, and later made - inferior.h include target-descriptions.h. This worked, but it then - occured to me that target_desc_info is really an inferior property that - involves a target description, so I think it makes sense to have it in - inferior.h. - - Change-Id: I3e81d04faafcad431e294357389f3d4c601ee83d - -2023-02-03 Simon Marchi - - gdb: use assignment to initialize variable in tdesc_parse_xml - Since allocate_target_description returns a target_desc_up, use - assignment to initialize the description variable. - - Change-Id: Iab3311642c09b95648984f305936f4a4cde09440 - -2023-02-03 Jan Beulich - - x86: drop LOCK from XCHG when optimizing - Like with segment overrides on LEA, optimize away such a redundant - instruction prefix. - - x86-64: respect {nooptimize} when building VEX prefix - Swapping operands for commutative insns occurs outside of - optimize_encoding() and hence needs explicit checking for a request to - avoid any optimizations. - - x86: respect {nooptimize} for LEA - Dropping a meaningless segment prefix occurs outside of - optimize_encoding() and hence needs explicit checking for a request to - avoid any optimizations. - - x86-64: respect MOVABS when choosing alternative encodings - The alternative encoding is valid for MOV, but there's no such thing for - MOVABS. - - RISC-V: don't disassemble unrecognized insns as .byte - Insn width granularity being 16 bits, producing byte granular output - isn't very useful. With there being a way to specific otherwise - unknown insns to the assembler, use that same representation (to be - precise: its , flavor) for disassembly. - -2023-02-03 Alan Modra - - Add ECOFF Symbolic Header sanity checks - Anti-fuzzer measures. The checks don't ensure the various elements in - the header are distinct, but that isn't important as far as making - sure we don't overrun the buffer containing all the elements. Also, - we now don't care about offsets where the corresponding count is zero. - - * ecoff.c (_bfd_ecoff_slurp_symbolic_info): Sanity check offsets - in debug->symbolic_header. - -2023-02-03 GDB Administrator - - Automatic date update in version.in - -2023-02-02 Simon Marchi - - gdb: initial support for ROCm platform (AMDGPU) debugging - This patch adds the foundation for GDB to be able to debug programs - offloaded to AMD GPUs using the AMD ROCm platform [1]. The latest - public release of the ROCm release at the time of writing is 5.4, so - this is what this patch targets. - - The ROCm platform allows host programs to schedule bits of code for - execution on GPUs or similar accelerators. The programs running on GPUs - are typically referred to as `kernels` (not related to operating system - kernels). - - Programs offloaded with the AMD ROCm platform can be written in the HIP - language [2], OpenCL and OpenMP, but we're going to focus on HIP here. - The HIP language consists of a C++ Runtime API and kernel language. - Here's an example of a very simple HIP program: - - #include "hip/hip_runtime.h" - #include - - __global__ void - do_an_addition (int a, int b, int *out) - { - *out = a + b; - } - - int - main () - { - int *result_ptr, result; - - /* Allocate memory for the device to write the result to. */ - hipError_t error = hipMalloc (&result_ptr, sizeof (int)); - assert (error == hipSuccess); - - /* Run `do_an_addition` on one workgroup containing one work item. */ - do_an_addition<<>> (1, 2, result_ptr); - - /* Copy result from device to host. Note that this acts as a synchronization - point, waiting for the kernel dispatch to complete. */ - error = hipMemcpyDtoH (&result, result_ptr, sizeof (int)); - assert (error == hipSuccess); - - printf ("result is %d\n", result); - assert (result == 3); - - return 0; - } - - This program can be compiled with: - - $ hipcc simple.cpp -g -O0 -o simple - - ... where `hipcc` is the HIP compiler, shipped with ROCm releases. This - generates an ELF binary for the host architecture, containing another - ELF binary with the device code. The ELF for the device can be - inspected with: - - $ roc-obj-ls simple - 1 host-x86_64-unknown-linux file://simple#offset=8192&size=0 - 1 hipv4-amdgcn-amd-amdhsa--gfx906 file://simple#offset=8192&size=34216 - $ roc-obj-extract 'file://simple#offset=8192&size=34216' - $ file simple-offset8192-size34216.co - simple-offset8192-size34216.co: ELF 64-bit LSB shared object, *unknown arch 0xe0* version 1, dynamically linked, with debug_info, not stripped - ^ - amcgcn architecture that my `file` doesn't know about ----´ - - Running the program gives the very unimpressive result: - - $ ./simple - result is 3 - - While running, this host program has copied the device program into the - GPU's memory and spawned an execution thread on it. The goal of this - GDB port is to let the user debug host threads and these GPU threads - simultaneously. Here's a sample session using a GDB with this patch - applied: - - $ ./gdb -q -nx --data-directory=data-directory ./simple - Reading symbols from ./simple... - (gdb) break do_an_addition - Function "do_an_addition" not defined. - Make breakpoint pending on future shared library load? (y or [n]) y - Breakpoint 1 (do_an_addition) pending. - (gdb) r - Starting program: /home/smarchi/build/binutils-gdb-amdgpu/gdb/simple - [Thread debugging using libthread_db enabled] - Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". - [New Thread 0x7ffff5db7640 (LWP 1082911)] - [New Thread 0x7ffef53ff640 (LWP 1082913)] - [Thread 0x7ffef53ff640 (LWP 1082913) exited] - [New Thread 0x7ffdecb53640 (LWP 1083185)] - [New Thread 0x7ffff54bf640 (LWP 1083186)] - [Thread 0x7ffdecb53640 (LWP 1083185) exited] - [Switching to AMDGPU Wave 2:2:1:1 (0,0,0)/0] - - Thread 6 hit Breakpoint 1, do_an_addition (a=, - b=, - out=) at simple.cpp:24 - 24 *out = a + b; - (gdb) info inferiors - Num Description Connection Executable - * 1 process 1082907 1 (native) /home/smarchi/build/binutils-gdb-amdgpu/gdb/simple - (gdb) info threads - Id Target Id Frame - 1 Thread 0x7ffff5dc9240 (LWP 1082907) "simple" 0x00007ffff5e9410b in ?? () from /opt/rocm-5.4.0/lib/libhsa-runtime64.so.1 - 2 Thread 0x7ffff5db7640 (LWP 1082911) "simple" __GI___ioctl (fd=3, request=3222817548) at ../sysdeps/unix/sysv/linux/ioctl.c:36 - 5 Thread 0x7ffff54bf640 (LWP 1083186) "simple" __GI___ioctl (fd=3, request=3222817548) at ../sysdeps/unix/sysv/linux/ioctl.c:36 - * 6 AMDGPU Wave 2:2:1:1 (0,0,0)/0 do_an_addition ( - a=, - b=, - out=) at simple.cpp:24 - (gdb) bt - Python Exception : Unhandled dwarf expression opcode 0xe1 - #0 do_an_addition (a=, - b=, - out=) at simple.cpp:24 - (gdb) continue - Continuing. - result is 3 - warning: Temporarily disabling breakpoints for unloaded shared library "file:///home/smarchi/build/binutils-gdb-amdgpu/gdb/simple#offset=8192&size=67208" - [Thread 0x7ffff54bf640 (LWP 1083186) exited] - [Thread 0x7ffff5db7640 (LWP 1082911) exited] - [Inferior 1 (process 1082907) exited normally] - - One thing to notice is the host and GPU threads appearing under - the same inferior. This is a design goal for us, as programmers tend to - think of the threads running on the GPU as part of the same program as - the host threads, so showing them in the same inferior in GDB seems - natural. Also, the host and GPU threads share a global memory space, - which fits the inferior model. - - Another thing to notice is the error messages when trying to read - variables or printing a backtrace. This is expected for the moment, - since the AMD GPU compiler produces some DWARF that uses some - non-standard extensions: - - https://llvm.org/docs/AMDGPUDwarfExtensionsForHeterogeneousDebugging.html - - There were already some patches posted by Zoran Zaric earlier to make - GDB support these extensions: - - https://inbox.sourceware.org/gdb-patches/20211105113849.118800-1-zoran.zaric@amd.com/ - - We think it's better to get the basic support for AMD GPU in first, - which will then give a better justification for GDB to support these - extensions. - - GPU threads are named `AMDGPU Wave`: a wave is essentially a hardware - thread using the SIMT (single-instruction, multiple-threads) [3] - execution model. - - GDB uses the amd-dbgapi library [4], included in the ROCm platform, for - a few things related to AMD GPU threads debugging. Different components - talk to the library, as show on the following diagram: - - +---------------------------+ +-------------+ +------------------+ - | GDB | amd-dbgapi target | <-> | AMD | | Linux kernel | - | +-------------------+ | Debugger | +--------+ | - | | amdgcn gdbarch | <-> | API | <=> | AMDGPU | | - | +-------------------+ | | | driver | | - | | solib-rocm | <-> | (dbgapi.so) | +--------+---------+ - +---------------------------+ +-------------+ - - - The amd-dbgapi target is a target_ops implementation used to control - execution of GPU threads. While the debugging of host threads works - by using the ptrace / wait Linux kernel interface (as usual), control - of GPU threads is done through a special interface (dubbed `kfd`) - exposed by the `amdgpu` Linux kernel module. GDB doesn't interact - directly with `kfd`, but instead goes through the amd-dbgapi library - (AMD Debugger API on the diagram). - - Since it provides execution control, the amd-dbgapi target should - normally be a process_stratum_target, not just a target_ops. More - on that later. - - - The amdgcn gdbarch (describing the hardware architecture of the GPU - execution units) offloads some requests to the amd-dbgapi library, - so that knowledge about the various architectures doesn't need to be - duplicated and baked in GDB. This is for example for things like - the list of registers. - - - The solib-rocm component is an solib provider that fetches the list of - code objects loaded on the device from the amd-dbgapi library, and - makes GDB read their symbols. This is very similar to other solib - providers that handle shared libraries, except that here the shared - libraries are the pieces of code loaded on the device. - - Given that Linux host threads are managed by the linux-nat target, and - the GPU threads are managed by the amd-dbgapi target, having all threads - appear in the same inferior requires the two targets to be in that - inferior's target stack. However, there can only be one - process_stratum_target in a given target stack, since there can be only - one target per slot. To achieve it, we therefore resort the hack^W - solution of placing the amd-dbgapi target in the arch_stratum slot of - the target stack, on top of the linux-nat target. Doing so allows the - amd-dbgapi target to intercept target calls and handle them if they - concern GPU threads, and offload to beneath otherwise. See - amd_dbgapi_target::fetch_registers for a simple example: - - void - amd_dbgapi_target::fetch_registers (struct regcache *regcache, int regno) - { - if (!ptid_is_gpu (regcache->ptid ())) - { - beneath ()->fetch_registers (regcache, regno); - return; - } - - // handle it - } - - ptids of GPU threads are crafted with the following pattern: - - (pid, 1, wave id) - - Where pid is the inferior's pid and "wave id" is the wave handle handed - to us by the amd-dbgapi library (in practice, a monotonically - incrementing integer). The idea is that on Linux systems, the - combination (pid != 1, lwp == 1) is not possible. lwp == 1 would always - belong to the init process, which would also have pid == 1 (and it's - improbable for the init process to offload work to the GPU and much less - for the user to debug it). We can therefore differentiate GPU and - non-GPU ptids this way. See ptid_is_gpu for more details. - - Note that we believe that this scheme could break down in the context of - containers, where the initial process executed in a container has pid 1 - (in its own pid namespace). For instance, if you were to execute a ROCm - program in a container, then spawn a GDB in that container and attach to - the process, it will likely not work. This is a known limitation. A - workaround for this is to have a dummy process (like a shell) fork and - execute the program of interest. - - The amd-dbgapi target watches native inferiors, and "attaches" to them - using amd_dbgapi_process_attach, which gives it a notifier fd that is - registered in the event loop (see enable_amd_dbgapi). Note that this - isn't the same "attach" as in PTRACE_ATTACH, but being ptrace-attached - is a precondition for amd_dbgapi_process_attach to work. When the - debugged process enables the ROCm runtime, the amd-dbgapi target gets - notified through that fd, and pushes itself on the target stack of the - inferior. The amd-dbgapi target is then able to intercept target_ops - calls. If the debugged process disables the ROCm runtime, the - amd-dbgapi target unpushes itself from the target stack. - - This way, the amd-dbgapi target's footprint stays minimal when debugging - a process that doesn't use the AMD ROCm platform, it does not intercept - target calls. - - The amd-dbgapi library is found using pkg-config. Since enabling - support for the amdgpu architecture (amdgpu-tdep.c) depends on the - amd-dbgapi library being present, we have the following logic for - the interaction with --target and --enable-targets: - - - if the user explicitly asks for amdgcn support with - --target=amdgcn-*-* or --enable-targets=amdgcn-*-*, we probe for - the amd-dbgapi and fail if not found - - - if the user uses --enable-targets=all, we probe for amd-dbgapi, - enable amdgcn support if found, disable amdgcn support if not found - - - if the user uses --enable-targets=all and --with-amd-dbgapi=yes, - we probe for amd-dbgapi, enable amdgcn if found and fail if not found - - - if the user uses --enable-targets=all and --with-amd-dbgapi=no, - we do not probe for amd-dbgapi, disable amdgcn support - - - otherwise, amd-dbgapi is not probed for and support for amdgcn is not - enabled - - Finally, a simple test is included. It only tests hitting a breakpoint - in device code and resuming execution, pretty much like the example - shown above. - - [1] https://docs.amd.com/category/ROCm_v5.4 - [2] https://docs.amd.com/bundle/HIP-Programming-Guide-v5.4 - [3] https://en.wikipedia.org/wiki/Single_instruction,_multiple_threads - [4] https://docs.amd.com/bundle/ROCDebugger-API-Guide-v5.4 - - Change-Id: I591edca98b8927b1e49e4b0abe4e304765fed9ee - Co-Authored-By: Zoran Zaric - Co-Authored-By: Laurent Morichetti - Co-Authored-By: Tony Tye - Co-Authored-By: Lancelot SIX - Co-Authored-By: Pedro Alves - -2023-02-02 Simon Marchi - - gdb: make gdb_printing_disassembler::stream public - In the ROCm port, we need to access the underlying stream of a - gdb_printing_disassembler, so make it public. The reason we need to - access it is to know whether it supports style escape code. We then - pass that information to a temporary string_file we use while - symbolizing addresses. - - Change-Id: Ib95755a4a45b8f6478787993e9f904df60dd8dc1 - Approved-By: Andrew Burgess - -2023-02-02 Simon Marchi - - gdb/solib-svr4: don't disable probes interface if probe not found - In ROCm-GDB, we install an solib provider for the GPU code objects on - top of the svr4 provider for the host, in order to add solibs - representing the GPU code objects to the solib list containing the host - process' shared libraries. We override the target_so_ops::handle_event - function pointer with our own, in which we call svr4_so_ops.handle_event - (which contains svr4_handle_solib_event) manually. When the host - (un)loads a library, the ROCm part of handle_event is a no-op. When the - GPU (un)loads a code object, we want the host side (svr4) to be a no-op. - - The problem is that when handle_event is called because of a GPU event, - svr4_handle_solib_event gets called while not stopped at an svr4 - probe. It then assumes this means there's a problem with the probes - interface and disables it through the following sequence of events: - - - solib_event_probe_at return nullptr - - svr4_handle_solib_event returns early - - the make_scope_exit callback calls disable_probes_interface - - We could fix that by making the ROCm handle_event callback check if an - svr4 probe is that the stop address, and only call - svr4_so_ops.handle_event if so. However, it doesn't feel right to - include some svr4 implementation detail in the ROCm event handler. - - Instead, this patch changes svr4_handle_solib_event to not assume it is - an error if called while not at an svr4 probe location, and therefore - not disable the probes interface. That just means moving the - make_scope_exit call below where we lookup the probe by pc. - - Change-Id: Ie8ddf5beffa2e92b8ebfdd016454546252519244 - Co-Authored-By: Lancelot SIX - -2023-02-02 Simon Marchi - - gdb: add gdbarch_up - Add a gdbarch_up unique pointer type, that calls gdbarch_free on - deletion. This is used in the ROCm support patch at the end of this - series. - - Change-Id: I4b808892d35d69a590ce83180f41afd91705b2c8 - Approved-By: Andrew Burgess - -2023-02-02 Simon Marchi - - gdb: add inferior_pre_detach observable - Add an observable notified in target_detach just before calling the - detach method on the inferior's target stack. This allows observer to - do some work on the inferior while it's still ptrace-attached, in the - case of a native Linux inferior. Specifically, the amd-dbgapi target - will need it in order to call amd_dbgapi_process_detach before the - process gets ptrace-detached. - - Change-Id: I28b6065e251012a4c2db8a600fe13ba31671e3c9 - Approved-By: Andrew Burgess - -2023-02-02 Simon Marchi - - gdbsupport: add type definitions for pid, lwp and tid - A following patch will want to declare variables of the same type as - some ptid_t components. To make that easy (and avoid harcoding those - types everywhere), define some type definitions in the ptid_t struct for - each of them. Use them throughout ptid.h. - - I initially used pid_t, lwp_t and tid_t, but there is the risk of some - system defining the pid_t type using a macro instead of a typedef, which - would break things. So, use the _type suffix instead. - - Change-Id: I820b0bea9dafcb4914f1c9ba4bb96b5c666c8dec - Approved-By: Andrew Burgess - -2023-02-02 Pedro Alves - - gdb: make install_breakpoint return a non-owning reference - A following patch will want to install a breakpoint and then keep a - non-owning reference to it. Make install_breakpoint return a non-owning - reference, to make that easy. - - Co-Authored-By: Simon Marchi - Change-Id: I2e8106a784021ff276ce251e24708cbdccc2d479 - Approved-By: Andrew Burgess - -2023-02-02 Lancelot SIX - - gdb: add supports_arch_info callback to gdbarch_register - In the ROCm GDB port, there are some amdgcn architectures known by BFD - that we don't actually support in GDB. We don't want - gdbarch_printable_names to return these architectures. - - gdbarch_printable_names is used for a few things: - - - completion of the "set architecture" command - - the gdb.architecture_names function in Python - - foreach-arch selftests - - Add an optional callback to gdbarch_register that is a predicate - indicating whether the gdbarch supports the given bfd_arch_info. by - default, it is nullptr, meaning that the gdbarch accepts all "mach"s for - that architecture known by BFD. - - Change-Id: I712f94351b0b34ed1f42e5cf7fc7ba051315d860 - Co-Authored-By: Simon Marchi - Approved-By: Andrew Burgess - -2023-02-02 Tom de Vries - - [gas] Update .loc syntax comment in dwarf2dbg.c - I noticed that a comment in gas/dwarf2dbg.c describing .loc syntax was missing - the "view VALUE" option. - - Fix this by adding the missing option. - -2023-02-02 Enze Li - - gdb: remove gdb_indent.sh - GDB has been converted to a C++ program for many years[1], and the - gdb_indent.sh will not be used any more. Therefore, remove the script as - obvious. - - [1] https://sourceware.org/gdb/wiki/cxx-conversion - - Approved-By: Simon Marchi - -2023-02-02 Indu Bhagat - - ld/doc: use "stack trace" instead of "unwind" for SFrame - SFrame format is meant for generating stack traces only. - - ld/ - * ld.texi: Replace the use of "unwind" with "stack trace". - -2023-02-02 Indu Bhagat - - bfd: use "stack trace" instead of "unwind" for SFrame - SFrame format is meant for generating stack traces only. - - bfd/ - * elf-bfd.h: Replace the use of "unwind" with "stack trace". - * elf-sframe.c: Likewise. - * elf64-x86-64.c: Likewise. - * elfxx-x86.c: Likewise. - - include/ - * elf/common.h: Likewise. - -2023-02-02 Indu Bhagat - - gas: use "stack trace" instead of "unwind" for SFrame - SFrame format is meant for generating stack traces only. - - gas/ - * as.c: Replace the use of "unwind" with "stack trace". - * config/tc-aarch64.c: Likewise. - * config/tc-aarch64.h: Likewise. - * config/tc-i386.c: Likewise. - * config/tc-i386.h: Likewise. - * gen-sframe.c: Likewise. - * gen-sframe.h: Likewise. - * testsuite/gas/cfi-sframe/cfi-sframe-aarch64-2.s: Likewise. - * testsuite/gas/cfi-sframe/cfi-sframe-common-8.s: Likewise. - * testsuite/gas/cfi-sframe/common-empty-2.s: Likewise. - * testsuite/gas/cfi-sframe/common-empty-3.s: Likewise. - -2023-02-02 Indu Bhagat - - sframe: use "stack trace" instead of "unwind" for SFrame - SFrame format is meant for generating stack traces only. - - include/ - * sframe.h: Fix comments in the header file. - -2023-02-02 Indu Bhagat - - libsframe/doc: use "stack trace" instead of "unwind" for SFrame - SFrame format is meant for generating stack traces only. - - libsframe/ - * doc/sframe-spec.texi: Use "stack trace" instead of "unwind". - -2023-02-02 Alan Modra - - ld-elf/merge test update - The merge test fais on numerous targets because they don't support the - necessary pc-relative relocs. This patch removes that part of the - merge test, and makes references to the merged strings from .data - rather than .text to better support targets that relax text by - default. - -2023-02-02 GDB Administrator - - Automatic date update in version.in - -2023-02-01 Alan Modra - - obj-elf.h BYTES_IN_WORD - Don't define this. It is defined just before elf-bfd.h is included, - but doesn't have any relevance there. Instead is for aout64.h where - the default is 4 anyway. - -2023-02-01 Alan Modra - - gas obj_end - Provide a way for config/obj-* to clean up at end of assembly, and do - so for ELF. - - * obj.h (struct format_ops): Add "end". - * config/obj-aout.c (aout_format_ops): Init new field. - * config/obj-coff.c (coff_format_ops): Likewise. - * config/obj-ecoff.c (ecoff_format_ops): Likewise. - * config/obj-elf.c (elf_format_ops): Likewise. - (elf_begin): Move later in file. Clear some more variables. - (comment_section): Make file scope. - (free_section_idx): Rewrite. - (elf_adjust_symtab): Expand str_htab_create call and use - free_section_idx as delete function. - (elf_frob_file_after_relocs): Don't clean up groups.indexes here. - (elf_end): New function. - * config/obj-elf.h (obj_end): Define. - * config/obj-multi.h (obj_end): Define. - * output-file.c (output_file_close): Call obj_end. - -2023-02-01 Thiago Jung Bauermann - - gdbserver: Add PID parameter to linux_get_auxv and linux_get_hwcap - This patch doesn't change gdbserver behaviour, but after later changes are - made it avoids a null pointer dereference when HWCAP needs to be obtained - for a specific process while current_thread is nullptr. - - Fixing linux_read_auxv, linux_get_hwcap and linux_get_hwcap2 to take a PID - parameter seems more correct than setting current_thread in one particular - code path. - - Changes are propagated to allow passing the new parameter through the call - chain. - - Approved-By: Simon Marchi - -2023-02-01 Thiago Jung Bauermann - - gdbserver: Add assert in find_register_by_number - It helped me during development, catching bugs closer to when they actually - happened. - - Also remove the equivalent gdb_assert in regcache_raw_read_unsigned, since - it's checking the same condition a few frames above. - - Suggested-By: Simon Marchi - Approved-By: Simon Marchi - -2023-02-01 Andrew Burgess - - gdb/testsuite: fix fetch_src_and_symbols.exp with native-gdbserver board - I noticed that the gdb.debuginfod/fetch_src_and_symbols.exp script - doesn't work with the native-gdbserver board, I see this error: - - ERROR: tcl error sourcing /tmp/build/gdb/testsuite/../../../src/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp. - ERROR: gdbserver does not support run without extended-remote - while executing - "error "gdbserver does not support $command without extended-remote"" - (procedure "gdb_test_multiple" line 51) - invoked from within - - This was introduced with this commit: - - commit 7dd38e31d67c2548b52bea313ab18e40824c05da - Date: Fri Jan 6 18:45:27 2023 -0500 - - gdb/linespec.c: Fix missing source file during breakpoint re-set - - The problem is that the above commit introduces a direct use of the - "run" command, which doesn't work with 'target remote' targets, as - exercised by the native-gdbserver board. - - To avoid this, in this commit I switch to using runto_main. However, - calling runto_main will, by default, delete all the currently set - breakpoints. As the point of the above commit was to check that a - breakpoint set before stating an inferior would be correctly re-set, - we need to avoid this breakpoint deleting behaviour. - - To do this I make use of with_override, and override the - delete_breakpoints proc with a dummy proc which does nothing. - - By reverting the GDB changes in commit 7dd38e31d67c I have confirmed - that even after my changes in this commit, the test still fails. But - with the fixes in commit 7dd38e31d67c, this test now passed using the - unix, native-gdbserver, and native-extended-gdbserver boards. - -2023-02-01 Alexandra Hájková - - gdb: defer warnings when loading separate debug files - Currently, when GDB loads debug information from a separate debug - file, there are a couple of warnings that could be produced if things - go wrong. - - In find_separate_debug_file_by_buildid (build-id.c) GDB can give a - warning if the separate debug file doesn't include any actual debug - information, and in separate_debug_file_exists (symfile.c) we can warn - if the CRC checksum in the separate debug file doesn't match the - checksum in the original executable. - - The problem here is that, when looking up debug information, GDB will - try several different approaches, lookup by build-id, lookup by - debug-link, and then a lookup from debuginfod. GDB can potentially - give a warning from an earlier attempt, and then succeed with a later - attempt. In the cases I have run into this is primarily a warning - about some out of date debug information on my machine, but then GDB - finds the correct information using debuginfod. This can be confusing - to a user, they will see warnings from GDB when really everything is - working just fine. - - For example: - - warning: the debug information found in "/usr/lib/debug//lib64/ld-2.32.so.debug" \ - does not match "/lib64/ld-linux-x86-64.so.2" (CRC mismatch). - - This diagnostic was printed on Fedora 33 even when the correct - debuginfo was downloaded. - - In this patch I propose that we defer any warnings related to looking - up debug information from a separate debug file. If any of the - approaches are successful then GDB will not print any of the warnings. - As far as the user is concerned, everything "just worked". Only if - GDB completely fails to find any suitable debug information will the - warnings be printed. - - The crc_mismatch test compiles two executables: crc_mismatch and - crc_mismatch-2 and then strips them of debuginfo creating separate - debug files. The test then replaces crc_mismatch-2.debug with - crc_mismatch.debug to trigger "CRC mismatch" warning. A local - debuginfod server is setup to supply the correct debug file, now when - GDB looks up the debug info no warning is given. - - The build-id-no-debug-warning.exp is similar to the previous test. It - triggers the "separate debug info file has no debug info" warning by - replacing the build-id based .debug file with the stripped binary and - then loading it to GDB. It then also sets up local debuginfod server - with the correct debug file to download to make sure no warnings are - emitted. - -2023-02-01 Nick Clifton - - Fix compilation of the assembler with sanitization enabled. - * dwarf2dbg.c (emit_inc_line_addr): Use unsigned constants when checking addr_delta. - -2023-02-01 Alan Modra - - Recursion in as_info_where - This function has a gas_assert, ie. possible call to as_abort, which - calls as_report_context, which calls as_info_where. - - * messages.c (as_info_where): Don't gas_assert. - -2023-02-01 Simon Marchi - - gdb/dwarf: rename cooked_index_vector to cooked_index - See previous patch's commit message for rationale. - - Change-Id: I6b8cdc045dffccc1c01ed690ff258af09f6ff076 - Approved-By: Tom Tromey - -2023-02-01 Simon Marchi - - gdb/dwarf: rename cooked_index to cooked_index_shard - I propose to rename cooked_index_vector and cooked_index such that the - "main" object, that is the entry point to the index, is called - cooked_index. The fact that the cooked index is implemented as a vector - of smaller indexes is an implementation detail. - - This patch renames cooked_index to cooked_index_shard. The following - patch renames cooked_index_vector to cooked_index. - - Change-Id: Id650f97dcb23c48f8409fa0974cd093ca0b75177 - Approved-By: Tom Tromey - -2023-02-01 Tom de Vries - - [gas] Emit v2 .debug_line for -gdwarf-2 - Currently, when using -gdwarf-2, gas emits a v3 .debug_line contribution. - - Fix this by emitting a v2 .debug_line contribution instead. - - gas/ChangeLog: - - 2023-01-31 Tom de Vries - - PR 23941 - * dwarf2dbg.c (DWARF2_LINE_VERSION): Set to 2 for -gdwarf-2. - (DWARF2_LINE_OPCODE_BASE): Handle DWARF2_LINE_VERSION == 2. - (dwarf2_directive_loc): Bump dwarf_level when encountering - v3 .loc options. - (out_debug_line): Don't output v3 standard opcodes for v2. - * testsuite/gas/i386/debug1.d: Update. - * testsuite/gas/i386/dwarf2-line-1.d: Update. - * testsuite/gas/i386/dwarf2-line-4.d: Update. - -2023-02-01 GDB Administrator - - Automatic date update in version.in - -2023-01-31 Simon Marchi - - gdb: add nullptr check to cooked_index_functions::dump - Since commit 7d82b08e9e0a ("gdb/dwarf: dump cooked index contents in - cooked_index_functions::dump"), we see: - - maint print objfiles /home/smarchi/build/binutils-gdb/gdb/testsuite/outputs/gdb.dwarf2/dw2-error/dw2-error^M - ^M - Object file /home/smarchi/build/binutils-gdb/gdb/testsuite/outputs/gdb.dwarf2/dw2-error/dw2-error: Objfile at 0x614000005040, bfd at 0x6120000e08c0, 15 minsyms^M - ^M - Cooked index in use:^M - ^M - /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/gdb-checked-static-cast.h:58: internal-error: checked_static_cast: Assertion `result != nullptr' failed.^M - A problem internal to GDB has been detected,^M - further debugging may prove unreliable.^M - ----- Backtrace -----^M - FAIL: gdb.dwarf2/dw2-error.exp: maint print objfiles /home/smarchi/build/binutils-gdb/gdb/testsuite/outputs/gdb.dwarf2/dw2-error/dw2-error (GDB internal error) - - The problem is that when cooked_index_functions fails to build an index, - per_objfile->index_table is nullptr. Therefore, add a nullptr check, - like other methods of cooked_index_functions already do. - - Print the "Cooked index in use" message after the nullptr check, such - that if the cooked index failed to build, that message is not printed. - - Change-Id: Id67aef592e76c41b1e3bde9838a4e36cef873253 - -2023-01-31 Simon Marchi - - gdbsupport: allow passing nullptr to checked_static_cast - Both static_cast and dynamic_cast handle nullptr (they return nullptr), - so I think checked_static_cast should too. This will allow doing a null - check after a checked_static_cast: - - cooked_index_vector *table - = (gdb::checked_static_cast - (per_bfd->index_table.get ())); - if (table != nullptr) - return; - - Change-Id: If5c3134e63696f8e417c87b5f3901240c9f7ea97 - -2023-01-31 Simon Marchi - - gdb/testsuite: adjust ensure_gdb_index to cooked_index_functions::dump changes - Following 7d82b08e9e0a ("gdb/dwarf: dump cooked index contents in - cooked_index_functions::dump"), I see some failures like: - - (gdb) mt print objfiles with-mf^M - ^M - Object file /home/smarchi/build/binutils-gdb/gdb/testsuite/outputs/gdb.base/with-mf/with-mf: Objfile at 0x614000005040, bfd at 0x6120000e08c0, 18 minsyms ^M - ^M - Cooked index in use:^M - ^M - ... - (gdb) FAIL: gdb.base/with-mf.exp: check if index present - - This is because the format of the "Cooked index in use" line changed - slightly. Adjust ensure_gdb_index to expect the trailing colon. - - Change-Id: If0a87575c02d8a0bc0d4b8ead540c234c62760f8 - -2023-01-31 Simon Marchi - - gdb/testsuite: fix xfail in gdb.ada/ptype_tagged_param.exp - I see: - - ERROR: wrong # args: should be "xfail message" - while executing - "xfail "no debug info" $gdb_test_name" - ("uplevel" body line 3) - invoked from within - "uplevel { - if {!$has_runtime_debug_info} { - xfail "no debug info" $gdb_test_name - } else { - fail $gdb_test_name - } - }" - - This is because the xfail takes only one argument, fix that. - - Change-Id: I2e304d4fd3aa61067c04b5dac2be2ed34dab3190 - -2023-01-31 Nick Clifton - - Updated Swedish translation for the binutils sub-directory - -2023-01-31 Alan Modra - - Re: Another fix for EFI generation with LTO enabled - Revert 1c66b8a03989 and instead fix the broken list pointer. - - PR 29998 - * pe-dll.c (build_filler_bfd): Revert last change. - * ldlang.c (lang_process): When rescanning archives for lto, - fix file_chain.tail pointer if the insert point happens to be - at the end of the list. - -2023-01-31 Andrew Burgess - - gas/ppc: Additional tests for DFP instructions - I noticed that some of the Power6 DFP instructions were not covered by - the assembler tests. I've added a new test file which I believe - covers all the DFP Power6 instructions. - - The existing gas/testsuite/gas/ppc/power6.d test is called: - - POWER6 tests (includes DFP and Altivec) - - And does cover some of the DFP instructions. But, given the number of - additional instructions I'm adding I opted to add a whole new test - file. I've left the original power6.d unchanged, so there is now some - overlap, but I don't think that should hurt much. - -2023-01-31 Jan Beulich - - RISC-V: make C-extension JAL available again for (32-bit) assembly - Along with the normal JAL alias, the C-extension one should have been - moved as well by 839189bc932e ("RISC-V: re-arrange opcode table for - consistent alias handling"), for the assembler to actually be able to - use it where/when possible. - - Since neither this nor any other compressed branch insn was being tested - so far, take the opportunity and introduce a new testcase covering those. - -2023-01-31 Alan Modra - - Silence ubsan warning about 1<<31 - * merge.c (hash_blob): Write 1u << 31. - -2023-01-31 Alan Modra - - PR 30060, ASAN error in bfd_cache_close - After bfd_close nothing should access bfd memory. Now that bfd_close - always tidies up even after an error, attempting to tidy the cached - bfd list by calling bfd_cache_close is wrong and not needed. - - PR 30060 - * ar.c (remove_output): Don't call bfd_cache_close. - (output_bfd): Delete. - * arsup.c (ar_end): Call bfd_close_all_done, not bfd_cache_close. - -2023-01-31 Alan Modra - - testsuite XPASSes - This adjusts the testsuite to get rid of a number of XPASSes that have - appeared. Someone might like to look into a better patch for the s390 - change. - - aarch64-pe XPASS: weak symbols - arm-nacl XPASS: rgn-over8 - mcore-pe XPASS: ld-scripts/provide-8 - mips64-linux-gnuabi64 XPASS: vers4 - mips64-linux-gnuabi64 XPASS: vers4b - mips-linux-gnu XPASS: vers4 - mips-linux-gnu XPASS: vers4b - s390-linux-gnu XPASS: undefined line - sh4-linux-gnu XPASS: --gc-sections with __start_SECTIONNAME - sh-coff XPASS: objcopy object (simple copy) - sh-coff XPASS: objcopy executable (pr25662) - - binutils/ - * testsuite/binutils-all/objcopy.exp: Don't xfail "simple - copy" and "pr25662" on sh-*-coff. Remove all non-ELF xfails - on "ELF unknown section type" test. - ld/ - * testsuite/ld-elfvers/vers.exp (vers4, vers4b): Don't xfail - all mips, just xfail mips irix. - * testsuite/ld-gc/pr19161.d: Don't xfail sh. - * testsuite/ld-scripts/rgn-over8-ok.d: Don't xfail nacl. - * testsuite/ld-scripts/weak.exp: Don't xfail aarch64-pe. - * testsuite/ld-undefined/undefined.exp: Conditionally xfail - "undefined line" depending on gcc version for s390. - -2023-01-31 GDB Administrator - - Automatic date update in version.in - -2023-01-30 Tom Tromey - - Remove value_next declaration - value_next is declared but not defined. It's long obsolete. This - patch removes the stray declaration. - -2023-01-30 Simon Marchi - - gdb: fix dwarf2/cooked-index.c compilation on 32-bit systems - The i386 builder shows: - - ../../binutils-gdb/gdb/dwarf2/cooked-index.c: In member function ‘void cooked_index_vector::dump(gdbarch*) const’: - ../../binutils-gdb/gdb/dwarf2/cooked-index.c:492:40: error: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 2 has type ‘std::__underlying_type_impl::type’ {aka ‘long long unsigned int’} [-Werror=format=] - 492 | gdb_printf (" DIE offset: 0x%lx\n", - | ~~^ - | | - | long unsigned int - | %llx - 493 | to_underlying (entry->die_offset)); - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - | | - | std::__underlying_type_impl::type {aka long long unsigned int} - - The die_offset's underlying type is uint64, so use PRIx64 in the format - string. - - Change-Id: Ibdde4c624ed1bb50eced9a514a4e37aec70a1323 - -2023-01-30 Mark Wielaard - - gdb: Replace memcpy with std::copy to avoid some g++ warnings on sparc - For some reason g++ 12.2.1 on sparc produces spurious warnings for - stringop-overread and restrict in fbsd-tdep.c for a memcpy call. - Use std::copy to avoid the warnings: - - In function ‘void* memcpy(void*, const void*, size_t)’, - inlined from ‘gdb::optional > > > fbsd_make_note_desc(target_object, uint32_t)’ at ../../binutils-gdb/gdb/fbsd-tdep.c:666:10: - /usr/include/bits/string_fortified.h:29:33: error: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ specified bound 18446744073709551612 exceeds maximum object size 9223372036854775807 [-Werror=stringop-overflow=] - - In function ‘void* memcpy(void*, const void*, size_t)’, - inlined from ‘gdb::optional > > > fbsd_make_note_desc(target_object, uint32_t)’ at ../../binutils-gdb/gdb/fbsd-tdep.c:673:10: - /usr/include/bits/string_fortified.h:29:33: error: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ accessing 18446744073709551612 bytes at offsets 0 and 0 overlaps 9223372036854775801 bytes at offset -9223372036854775805 [-Werror=restrict] - - gdb/ChangeLog: - - * fbsd-tdep.c (fbsd_make_note_desc): Use std::copy instead - of memcpy. - -2023-01-30 Simon Marchi - - gdb/dwarf: dump cooked index contents in cooked_index_functions::dump - As I am investigating a crash I see with the cooked index, I thought it - would be useful to have a way to dump the index contents. For those not - too familiar with it (that includes me), it can help get a feel of what - it contains and how it is structured. - - The cooked_index_functions::dump function is called as part of the - "maintenance print objfiles" command. I tried to make the output - well structured and indented to help readability, as this prints a lot - of text. - - The dump function first dumps all cooked index entries, like this: - - [25] ((cooked_index_entry *) 0x621000121220) - name: __ioinit - canonical: __ioinit - DWARF tag: DW_TAG_variable - flags: 0x2 [IS_STATIC] - DIE offset: 0x21a4 - parent: ((cooked_index_entry *) 0x6210000f9610) [std] - - Then the information about the main symbol: - - main: ((cooked_index_entry *) 0x621000123b40) [main] - - And finally the address map contents: - - [1] ((addrmap *) 0x6210000f7910) - - [0x0] ((dwarf2_per_cu_data *) 0) - [0x118a] ((dwarf2_per_cu_data *) 0x60c000007f00) - [0x1cc7] ((dwarf2_per_cu_data *) 0) - [0x1cc8] ((dwarf2_per_cu_data *) 0x60c000007f00) - [0x1cdf] ((dwarf2_per_cu_data *) 0) - [0x1ce0] ((dwarf2_per_cu_data *) 0x60c000007f00) - - The display of address maps above could probably be improved, to show it - more as ranges, but I think this is a reasonable start. - - Note that this patch depends on Pedro Alves' patch "enum_flags - to_string" [1]. If my patch is to be merged before Pedro's series, I - will cherry-pick this patch from his series and merge it before mine. - - [1] https://inbox.sourceware.org/gdb-patches/20221212203101.1034916-8-pedro@palves.net/ - - Change-Id: Ida13e479fd4c8d21102ddd732241778bc3b6904a - -2023-01-30 Pedro Alves - - enum_flags to_string - This commit introduces shared infrastructure that can be used to - implement enum_flags -> to_string functions. With this, if we want to - support converting a given enum_flags specialization to string, we - just need to implement a function that provides the enumerator->string - mapping, like so: - - enum some_flag - { - SOME_FLAG1 = 1 << 0, - SOME_FLAG2 = 1 << 1, - SOME_FLAG3 = 1 << 2, - }; - - DEF_ENUM_FLAGS_TYPE (some_flag, some_flags); - - static std::string - to_string (some_flags flags) - { - static constexpr some_flags::string_mapping mapping[] = { - MAP_ENUM_FLAG (SOME_FLAG1), - MAP_ENUM_FLAG (SOME_FLAG2), - MAP_ENUM_FLAG (SOME_FLAG3), - }; - return flags.to_string (mapping); - } - - .. and then to_string(SOME_FLAG2 | SOME_FLAG3) produces a string like - "0x6 [SOME_FLAG2 SOME_FLAG3]". - - If we happen to forget to update the mapping array when we introduce a - new enumerator, then the string representation will pretty-print the - flags it knows about, and then the leftover flags in hex (one single - number). For example, if we had missed mapping SOME_FLAG2 above, we'd - end up with: - - to_string(SOME_FLAG2 | SOME_FLAG3) => "0x6 [SOME_FLAG2 0x4]"); - - Other than in the unit tests included, no actual usage of the - functionality is added in this commit. - - Approved-By: Simon Marchi - Change-Id: I835de43c33d13bc0c95132f42c3f97318b875779 - -2023-01-30 Tom Tromey - - Fix comparator bug in cooked index - Simon pointed out that the cooked index template-matching patch - introduced a failure in libstdc++ debug mode. In particular, the new - code violates the assumption of std::lower_bound and std::upper_bound - that the range is sorted with respect to the comparison. - - When I first debugged this, I thought the problem was unfixable as-is - and that a second layer of filtering would have to be done. However, - on irc, Simon pointed out that it could perhaps be solved if the - comparison function were assured that one operand always came from the - index, with the other always being the search string. - - This patch implements this idea. - - First, a new mode is introduced: a sorting mode for - cooked_index_entry::compare. In this mode, strings are compared - case-insensitively, but we're careful to always sort '<' before any - other printable character. This way, two names like "func" and - "func" will be sorted next to each other -- i.e., "func1" will - not be seen between them. This is important when searching. - - Second, the compare function is changed to work in a strcmp-like way. - This makes it easier to test and (IMO) understand. - - Third, the compare function is modified so that in non-sorting modes, - the index entry is always the first argument. This allows consistency - in compares. - - I regression tested this in libstdc++ debug mode on x86-64 Fedora 36. - It fixes the crash that Simon saw. - - This is v2. I believe it addresses the review comments, except for - the 'enum class' change, as I mentioned in email on the list. - - Approved-By: Simon Marchi - -2023-01-30 Tom Tromey - - Clean up lnp_state_machine constructor - This changes the lnp_state_machine constructor to initialize members - directly; and changes lnp_state_machine itself to initialize members - inline when possible. - - Reviewed-By: Lancelot Six - -2023-01-30 Tom Tromey - - Make addrmap const-correct in cooked index - After the cooked index is created, the addrmaps should be const. - - Change-Id: I8234520ab346ced40a8dd6e478ba21fc438c2ba2 - -2023-01-30 Simon Marchi - - gdb: provide const-correct versions of addrmap::find and addrmap::foreach - Users of addrmap::find and addrmap::foreach that have a const addrmap - should ideally receive const pointers to objects, to indicate they - should not be modified. However, users that have a non-const addrmap - should still receive a non-const pointer. - - To achieve this, without adding more virtual methods, make the existing - find and foreach virtual methods private and prefix them with "do_". - Add small non-const and const wrappers for find and foreach. - - Obviously, the const can be cast away, but if using static_cast - instead of C-style casts, then the compiler won't let you cast - the const away. I changed all the callers of addrmap::find and - addrmap::foreach I could find to make them use static_cast. - - Change-Id: Ia8e69d022564f80d961413658fe6068edc71a094 - -2023-01-30 Tom Tromey - - Use xfail in ptype_tagged_param.exp - Pedro pointed out that ptype_tagged_param.exp used a kfail, but an - xfail would be more appropriate as the problem appears to be in gcc, - not gdb. - -2023-01-30 Christina Schimpe - - gdb: Remove workaround for the vCont packet - The workaround for the vCont packet is no longer required due to the - former commit "gdb: Make global feature array a per-remote target array". - The vCont packet is now checked once when the connection is started and - the supported vCont actions are set to the target's remote state - attribute. - -2023-01-30 Christina Schimpe - - gdb: Add per-remote target variables for memory read and write config - This patch adds per-remote target variables for the configuration of - memory read- and write packet size. It is a further change to commit - "gdb: Make global feature array a per-remote target array" to apply the - fixme notes described in commit 5b6d1e4 "Multi-target support". - - The former global variables for that configuration are still available - to allow the command line configuration for all future remote - connections. Similar to the command line configuration of the per- - remote target feature array, the commands - - - set remotewritesize (deprecated) - - set remote memory-read-packet-size - - set remote memory-write-packet-size - - will configure the current target (if available). If no target is - available, the default configuration for future remote connections is - adapted. The show command will display the current remote target's - packet size configuration. If no remote target is selected, the default - configuration for future connections will be shown. - - It is required to adapt the test gdb.base/remote.exp which is failing - for --target_board=native-extended-gdbserver. With that board GDB - connects to gdbserver at gdb start time. Due to this patch two loggings - "The target may not be able to.." are shown if the command 'set remote - memory-write-packet-size fixed' is executed while a target is connected - for the current inferior. To fix this, the clean_restart command is - moved to a later time point of the test. It is sufficient to be - connected to the server when "runto_main" is executed. Now the - connection time is similar to a testrun with - --target_board=native-gdbserver. - - To allow the user to distinguish between the packet-size configuration - for future remote connections and for the currently selected target, the - commands' loggings are adapted. - -2023-01-30 Christina Schimpe - - gdb: Make global feature array a per-remote target array - This patch applies the appropriate FIXME notes described in commit 5b6d1e4 - "Multi-target support". - - "You'll notice that remote.c includes some FIXME notes. These refer to - the fact that the global arrays that hold data for the remote packets - supported are still globals. For example, if we connect to two - different servers/stubs, then each might support different remote - protocol features. They might even be different architectures, like - e.g., one ARM baremetal stub, and a x86 gdbserver, to debug a - host/controller scenario as a single program. That isn't going to - work correctly today, because of said globals. I'm leaving fixing - that for another pass, since it does not appear to be trivial, and I'd - rather land the base work first. It's already useful to be able to - debug multiple instances of the same server (e.g., a distributed - cluster, where you have full control over the servers installed), so I - think as is it's already reasonable incremental progress." - - Using this patch it is possible to configure per-remote targets' - feature packets. - - Given the following setup for two gdbservers: - - ~~~~ - gdbserver --multi :1234 - gdbserver --disable-packet=vCont --multi :2345 - ~~~~ - - Before this patch configuring of range-stepping was not possible for one - of two connected remote targets with different support for the vCont - packet. As one of the targets supports vCont, it should be possible to - configure "set range-stepping". However, the output of GDB looks like: - - (gdb) target extended-remote :1234 - Remote debugging using :1234 - (gdb) add-inferior -no-connection - [New inferior 2] - Added inferior 2 - (gdb) inferior 2 - [Switching to inferior 2 [] ()] - (gdb) target extended-remote :2345 - Remote debugging using :2345 - (gdb) set range-stepping on - warning: Range stepping is not supported by the current target - (gdb) inferior 1 - [Switching to inferior 1 [] ()] - (gdb) set range-stepping on - warning: Range stepping is not supported by the current target - ~~~~ - - Two warnings are shown. The warning for inferior 1 should not appear - as it is connected to a target supporting the vCont package. - - ~~~~ - (gdb) target extended-remote :1234 - Remote debugging using :1234 - (gdb) add-inferior -no-connection - [New inferior 2] - Added inferior 2 - (gdb) inferior 2 - [Switching to inferior 2 [] ()] - (gdb) target extended-remote :2345 - Remote debugging using :2345 - (gdb) set range-stepping on - warning: Range stepping is not supported by the current target - (gdb) inferior 1 - [Switching to inferior 1 [] ()] - (gdb) set range-stepping on - (gdb) - ~~~~ - - Now only one warning is shown for inferior 2, which is connected to - a target not supporting vCont. - - The per-remote target feature array is realized by a new class - remote_features, which stores the per-remote target array and - provides functions to determine supported features of the target. - A remote_target object now has a new member of that class. - - Each time a new remote_target object is initialized, a new per-remote - target array is constructed based on the global remote_protocol_packets - array. The global array is initialized in the function _initialize_remote - and can be configured using the command line. Before this patch the - command line configuration affected current targets and future remote - targets (due to the global feature array used by all remote - targets). This behavior is different and the configuration applies as - follows: - - - If a target is connected, the command line configuration affects the - current connection. All other existing remote targets are not - affected. - - - If not connected, the command line configuration affects future - connections. - - The show command displays the current remote target's configuration. If no - remote target is selected the default configuration for future - connections is shown. - - If we have for instance the following setup with inferior 2 being - selected: - ~~~~ - (gdb) info inferiors - Num Description Connection Executable - 1 1 (extended-remote :1234) - * 2 2 (extended-remote :2345) - ~~~~ - - Before this patch, if we run 'set remote multiprocess-feature-packet', the - following configuration was set: - The feature array of all remote targets (in this setup the two connected - targets) and all future remote connections are affected. - - After this patch, it will be configured as follows: - The feature array of target with port :2345 which is currently selected - will be configured. All other existing remote targets are not affected. - The show command 'show remote multiprocess-feature-packet' will display - the configuration of target with port :2345. - - Due to this configuration change, it is required to adapt the test - "gdb/testsuite/gdb.multi/multi-target-info-inferiors.exp" to configure the - multiprocess-feature-packet before the connections are created. - - To inform the gdb user about the new behaviour of the 'show remote - PACKET-NAME' commands and the new configuration impact for remote - targets using the 'set remote PACKET-NAME' commands the commands' - outputs are adapted. Due to this change it is required to adapt each - test using the set/show remote 'PACKET-NAME' commands. - -2023-01-30 GDB Administrator - - Automatic date update in version.in - -2023-01-29 GDB Administrator - - Automatic date update in version.in - -2023-01-28 GDB Administrator - - Automatic date update in version.in - -2023-01-27 Tom Tromey - - More const-correctness in cooked indexer - I noticed that iterating over the index yields non-const - cooked_index_entry objects. However, after finalization, they should - not be modified. This patch enforces this by adding const where - needed. - - v2 makes the find, all_entries, and wait methods const as well. - -2023-01-27 Tom de Vries - - [gdb/testsuite] Simplify gdb.base/unwind-on-each-insn.exp.tcl - Recent commit 1d98e564c97 ("[gdb/testsuite] Add - gdb.base/unwind-on-each-insn-{amd64,i386}.exp") broke commit eb015bf86b6 - ("[gdb/testsuite] Avoid using .eh_frame in gdb.base/unwind-on-each-insn.exp"), - in the sense that gdb.base/unwind-on-each-insn.exp no longer uses - -fno-asynchronous-unwind-tables, due to trying to concatenate two lists using: - ... - lappend srcfile2_flags $nodebug_flags - ... - which should instead be: - ... - lappend srcfile2_flags {*}$nodebug_flags - ... - - Fix this by simplifying gdb.base/unwind-on-each-insn.exp.tcl, completely - leaving the responsibility to set srcfile_flags and srcfile2_flags to each - includer. - - Tested on x86_64-linux. - -2023-01-27 Tom Tromey - - Invert test in gdb.ada/ptype_tagged_param.exp - Simon pointed out that the kfail check in - gdb.ada/ptype_tagged_param.exp is inverted. See: - - https://sourceware.org/pipermail/gdb-patches/2023-January/196296.html - - This patch fixes the problem. - -2023-01-27 Andrew Burgess - - gdb/tui: more debug output - Add some additional debug output that I've found really useful while - working on the previous set of patches. - - Unless tui debug is turned on, then there should be no user visible - changes with this commit. - -2023-01-27 Andrew Burgess - - gdb/tui: avoid extra refresh_window on vertical scroll - While working on the previous couple of patches I noticed that when I - scroll the src and asm windows vertically, I get two refresh_window - calls. - - The two calls can be traced back to - tui_source_window_base::update_source_window_as_is, in here we call - show_source_content, which calls refresh_window, and then - update_exec_info, which also calls refresh_window. - - In this commit I propose making the refresh_window call in - update_exec_info optional. In update_source_window_as_is I'll then - call update_exec_info before calling show_source_content, and pass a - flag to update_exec_info to defer the refresh. - - There are places where update_exec_info is used without any subsequent - refresh_window call (e.g. when a breakpoint is updated), so - update_exec_info does not to call refresh_window in some cases, which - is why I'm using a flag to control the refresh. - - With this changes I'm now only seeing a single refresh_window call for - each vertical scroll. - - There should be no user visible changes after this commit. - -2023-01-27 Andrew Burgess - - gdb/tui: avoid extra refresh_window on horizontal scroll - While working on the previous patches I noticed that in some cases I - was seeing two calls to tui_source_window_base::refresh_window when - scrolling the window horizontally. - - The two calls would trigger in for the tui-disasm-long-lines.exp test - when the pad needed to be refilled. The two called both come from - tui_source_window_base::show_source_content. The first call is nested - within check_and_display_highlight_if_needed, while the second call is - done directly at the end of show_source_content. - - The check_and_display_highlight_if_needed is being used to draw the - window box to the window, this is needed here because - show_source_content is what gets called when the window needs - updating, e.g. after a resize. We could potentially do the boxing in - refresh_window, but then we'd be doing it each time we scroll, even - though the box doesn't need changing in this case. - - However, we can move the check_and_display_highlight_if_needed to be - the last thing done in show_source_content, this means that we can - rely on the refresh_window call within it to be our single refresh - call. - - There should be no user visible changes after this commit. - -2023-01-27 Andrew Burgess - - gdb/tui: rewrite of tui_source_window_base to handle very long lines - This commit addresses an issue that is exposed by the test script - gdb.tui/tui-disasm-long-lines.exp, that is, tui_source_window_base - does not handle very long lines. - - The problem can be traced back to the newpad call in - tui_source_window_base::show_source_content, this is where we allocate - a backing pad to hold the window content. - - Unfortunately, there appears to be a limit to the size of pad that can - be allocated, and the gdb.tui/tui-disasm-long-lines.exp test goes - beyond this limit. As a consequence the newpad call fails and returns - nullptr. - - It just so happens that the reset of the tui_source_window_base code - can handle the pad being nullptr (this happens anyway when the window - is first created, so we already depend on nullptr handling), so all - that happens is the source window displays no content. - - ... well, sort of ... something weird does happen in the command - window, we seem to see a whole bunch of blank lines. I've not - bothered to track down exactly what's happening there, but it's some - consequence of GDB attempting to write content to a WINDOW* that is - nullptr. - - Before explaining my solution, I'll outline how things currently work: - - Consider we have the following window content to display: - - aaaaaaaaaa - bbbbbbbbbbbbbbbbbbbb - ccccccccccccccc - - the longest line here is 20 characters. If our display window is 10 - characters wide, then we will create a pad that is 20 characters wide, - and then copy the lines of content into the pad: - - .--------------------. - |aaaaaaaaaa | - |bbbbbbbbbbbbbbbbbbbb| - |ccccccccccccccc | - .--------------------. - - Now we will copy a 10 character wide view into this pad to the - display, our display will then see: - - .----------. - |aaaaaaaaaa| - |bbbbbbbbbb| - |cccccccccc| - .----------. - - As the user scrolls left and right we adjust m_horizontal_offset and - use this to select which part of the pad is copied onto the display. - - The benefit of this is that we only need to copy the content to the - pad once, which includes processing the ansi escape sequences, and - then the user can scroll left and right as much as they want - relatively cheaply. - - The problem then, is that if the longest content line is very long, - then we try to allocate a very large pad, which can fail. - - What I propose is that we allow both the pad and the display view to - scroll. Once we allow this, then it becomes possible to allocate a - pad that is smaller than the longest display line. We then copy part - of the content into the pad. As the user scrolls the view left and - right GDB will continue to copy content from the pad just as it does - right now. But, when the user scrolls to the edge of the pad, GDB - will copy a new block of content into the pad, and then update the - view as normal. This all works fine so long as the maximum pad size - is larger than the current window size - which seems a reasonable - restriction, if ncurses can't support a pad of a given size it seems - likely it will not support a display window of that size either. - - If we return to our example above, but this time we assume that the - maximum pad size is 15 characters, then initially the pad would be - loaded like this: - - .---------------. - |aaaaaaaaaa | - |bbbbbbbbbbbbbbb| - |ccccccccccccccc| - .---------------. - - Notice that the last 5 characters from the 'b' line are no longer - included in the pad. There is still enough content though to fill the - 10 character wide display, just as we did before. - - The pad contents remain unchanged until the user scrolls the display - right to this point: - - .----------. - |aaaaa | - |bbbbbbbbbb| - |cccccccccc| - .----------. - - Now, when the user scrolls right once more GDB spots that the user has - reached the end of the pad, and the pad contents are reloaded, like - this: - - .---------------. - |aaaaa | - |bbbbbbbbbbbbbbb| - |cccccccccc | - .---------------. - - The display can now be updated from the pad again just like normal. - - With this change in place the gdb.tui/tui-disasm-long-lines.exp test - now correctly loads the assembler code, and we can scroll around as - expected. - - Most of the changes are pretty mundane, just updating to match the - above. One interesting change though is the new member function - tui_source_window_base::puts_to_pad_with_skip. This replaces direct - calls to tui_puts when copying content to the pad. - - The content strings contain ansi escape sequences. When these strings - are written to the pad these escape sequences are translated into - ncurses attribute setting calls. - - Now however, we sometimes only write a partial string to the pad, - skipping some of the leading content. Imagine then that we have a - content line like this: - - "\033[31mABCDEFGHIJKLM\033[0m" - - Now the escape sequences in this content mean that the actual - content (the 'ABCDEFGHIJKLM') will have a red foreground color. - - If we want to copy this to the pad, but skip the first 3 characters, - then what we expect is to have the pad contain 'DEFGHIJKLM', but this - text should still have a red foreground color. - - It is this problem that puts_to_pad_with_skip solves. This function - skips some number of printable characters, but processes all the - escape sequences. This means that when we do start printing the - actual content the content will have the expected attributes. - / - -2023-01-27 Andrew Burgess - - gdb/tui: make m_horizontal_offset private - I noticed that tui_source_window_base::m_horizontal_offset was - protected, but could be made private, so lets do that. - - This makes more sense in the context of a later commit where I plan to - add another member variable that is similar to m_horizontal_offset. - The new member variable could also be private. - - So I had to choose, place the new member variable next to - m_horizontal_offset making it protected, but grouping similar - variables together, or make m_horizontal_offset private, and then add - the new variable as private too. - - I chose to make m_horizontal_offset private, which is this commit. - - There should be no user visible changes after this commit. - -2023-01-27 Andrew Burgess - - gdb/tui: disable tui mode when an assert triggers - When an assert triggers in tui mode the output is not great, the - internal backtrace that is generated is printed directly to the file - descriptor for gdb_stderr, and, as a result, does not currently format - itself correctly - the output uses only '\n' at the end of each line, - and so, when the terminal is in raw mode, the cursor does not return - to the start of each line after the '\n'. - - This is mostly fixable, we could update bt-utils.c to use '\r\n' - instead of just '\n', and this would fix most of the problems. The - one we can't easily fix is if/when GDB is built to use execinfo - instead of libbacktrace, in this case we use backtrace_symbols_fd to - print the symbols, and this function only uses '\n' as the line - terminator. Fixing this would require switching to backtrace_symbols, - but that API uses malloc, which is something we're trying to - avoid (this code is called when GDB hits an error, so ideally we don't - want to rely on malloc). - - However, the execinfo code is only used when libbacktrace is not - available (or the user specifically disables libbacktrace) so maybe we - can ignore that problem... - - ... but there is another problem. When the backtrace is printed in - raw mode, it is possible that the backtrace fills the screen. With - the terminal in raw mode we don't have the ability to scroll back, - which means we loose some of the backtrace, which isn't ideal. - - In this commit I propose that we should disable tui mode whenever we - handle a fatal signal, or when we hit the internal error code - path (e.g. when an assert triggers). With this done then we don't - need to update the bt-utils.c code, and the execinfo version of the - code (using backtrace_symbols_fd) works just fine. We also get the - ability to scroll back to view the error message and all of the - backtrace, assuming the users terminal supports scrolling back. - - The only downside I see with this change is if the tui_disable call - itself causes an error for some reason, or, if we handle a single at a - time when it is not safe to call tui_disable, in these cases the extra - tui_disable call might cause GDB to loose the original error. - - However, I think (just from personal experience) that the above two - issues are pretty rare and the benefits from this change far out - weighs the possible drawbacks. - -2023-01-27 Andrew Burgess - - gdb/tui: improve errors from tui focus command - This commit improves (I think) the errors from the tui focus command. - There are a number of errors that can be triggered by the focus - command, they include: - - (1) Window name "NAME" is ambiguous - - (2) Unrecognized window name "NAME" - - (3) Window "NAME" cannot be focused - - Error (1) is triggered when the user gives a partial window name, and - the name matches multiple windows in the current layout. - - It is worth noting that the ambiguity must be within the current - layout; if the partial name matches one window in the current layout, - and one or more windows not in the current layout, then this is not - ambiguous, and focus will shift to the matching window in the current - layout. - - This error was not previous being tested, but in this commit I make - use of the Python API to trigger and test this error. - - Error (3) is simple enough, and was already being tested. This is - triggered by something like 'focus status'. The named window needs to - be present in the current layout, and non-focusable in order to - trigger the error. - - Error (2) is what I'd like to improve in this commit. This error - triggers if the name the user gives doesn't match any window in the - current layout. Even if GDB does know about the window, but the - window isn't in the current layout, then GDB will say it doesn't - recognize the window name. - - In this commit I propose to to split this error into three different - errors. These will be: - - (a) Unrecognized window name "NAME" - - (b) No windows matching "NAME" in the current layout - - (c) Window "NAME" is not in the current layout - - Error (a) is the same as before, but will now only trigger if GDB - doesn't know about window NAME at all. If the window is known, but - not in the current layout then one of the other errors will trigger. - - Error (b) will trigger if NAME is ambiguous for multiple windows that - are not in the current layout. If NAME identifies a single window in - the current layout then that window will continue to be selected, just - as it currently is. Only in the case where NAME doesn't identify a - window in the current layout do we then check all the other known - windows, if NAME matches multiple of these, then (b) is triggered. - - Finally, error (c) is used when NAME uniquely identifies a single - window that is not in the current layout. - - The hope with these new errors is that the user will have a better - understanding of what went wrong. Instead of GDB claiming to not know - about a window, the mention of the current layout will hint to the - user that they should first switch layouts. - - There are tests included for all the new errors. - -2023-01-27 Andrew Burgess - - gdb/testsuite: fix line feed scrolling in tuiterm.exp - In a following commit I managed to trigger the line feed scrolling - case in tuiterm.exp. This case is currently unhandled, and this - commit fills in this missing functionality. - - The implementation is pretty simple, just scroll all the content up - one line at a time until the cursor is back on the screen (a single - line of scroll is all that should be needed). - - This change is untested in this commit, but is required by the next - commit. - -2023-01-27 Nick Clifton - - Another fix for EFI generation with LTO enabled. - PR 29998 * pe-dll.c (build_filler_bfd): Initialise the next field of the filler input statement, so that it does not break the file chain. - -2023-01-27 Jan Beulich - - x86: move reg_operands adjustment - Ideally we'd do away with this somewhat questionable adjustment (leaving - i.types[] untouched). That's non-trivial though as it looks, so only - - move the logic into process_operands(), putting it closer to related - logic and eliminating a conditional for operand-less insns, - - make it consistent (i.e. also affect %xmm0), eliminating an ugly - special case later in the function. - - x86: drop dead SSE2AVX-related code - All (there are just two) SSE2AVX templates with %xmm0 as first operand - also specify VEX3SOURCES. Hence there's no need for an "else" to the - respective if(), and the if() itself can become an assertion. - - x86: use ModR/M for FPU insns with operands - This is the correct way of expressing things; encoding the ModR/M byte - directly in base_opcode has always been bogus. - - x86/Intel: improve special casing of certain insns - Now that we have identifiers for the mnemonic strings we can avoid - opcode based comparisons, for (in many cases) being more expensive and - (in a few cases) being a little fragile and not self-documenting. - -2023-01-27 Jan Beulich - - opcodes: suppress internationalization on build helper tools - While one of the two actually having been instrumented (i386-gen.c) now - has that instrumentation dropped, there's still no point in honoring - such instrumentation in general (i.e. now for ia64-gen.c only), as that - only leads to a waste of resources. - - With CFILES then being merely an alias of LIBOPCODES_CFILES, drop the - former variable altogether. - -2023-01-27 Jan Beulich - - x86: remove internationalization from i386-gen.c - This is a build time helper utility, which doesn't require translation. - -2023-01-27 Alan Modra - - Call bfd_close_all_done in ld_cleanup - This is similar to "Call bfd_close_all_done in output_file_close", - but with some code tidying in the pe/pep write_build_id functions. - write_build_id is passed the output bfd as its parameter, so there is - no need to go looking for the output bfd via link_info (and doing so - will no longer work since I clear link_info.output_bfd before calling - bfd_close). - - * emultempl/pe.em (write_build_id): Rename t to td. Formatting. - Don't access pe_data(link_info.output_bfd), use td instead. - (setup_build_id): Rename t to td. Formatting. - * emultempl/pep.em: As for pe.em. - * ldmain.c (ld_cleanup): Call bfd_close_all_done on linker bfds. - (main): Clear link_info.output_bfd when closing. - -2023-01-27 Alan Modra - - Perform cleanup in bfd_close after errors - It seems reasonable to continue after errors in bfd_close_all_done, - particularly since bfd_close_all_done is typically called on an output - file after we've hit some sort of error elsewhere. The iovec test is - necessary if bfd_close_all_done is to work on odd bfd's opened by - bfd_create. - - * opncls.c (bfd_close): Call bfd_close_all_done after errors - from _bfd_write_contents. - (bfd_close_all_done): Call _bfd_delete_bfd after errors. - Don't call iovec->bclose when iovec is NULL. - -2023-01-27 Alan Modra - - Call bfd_close_all_done in output_file_close - bfd_cache_close_all is good for closing file descriptors, but doesn't - do the cleanup of bfd memory as in bfd_close_all_done. - - PR 13056 - * output-file.c (output_file_close): Call bfd_close_all_done, - not bfd_cache_close_all. - -2023-01-27 Alan Modra - - gas macro memory leaks - This tidies memory allocated for entries in macro_hash. Freeing the - macro name requires a little restructuring of the define_macro - interface due to the name being used in the error message, and exposed - the fact that the name and other fields were not initialised by the - iq2000 backend. - - There is also a fix for - .macro .macro - .endm - .macro .macro - .endm - which prior to this patch reported - mac.s:1: Warning: attempt to redefine pseudo-op `.macro' ignored - mac.s:3: Error: Macro `.macro' was already defined - rather than reporting the attempt to redefine twice. - - * macro.c (macro_del_f): New function. - (macro_init): Use it when creating macro_hash. - (free_macro): Free macro name too. - (define_macro): Return the macro_entry, remove idx, file, line and - namep params. Call as_where. Report errors here. Delete macro - from macro_hash on attempt to redefined pseudo-op. - (delete_macro): Don't call free_macro. - * macro.h (define_macro): Update prototype. - * read.c (s_macro): Adjust to suit. - * config/tc-iq2000.c (iq2000_add_macro): Init all fields of - macro_entry. - -2023-01-27 Mark Harmstone - - gas/testsuite: Add -gcodeview test for aarch64-w64-mingw32 - This is a copy of the x86 gas -gcodeview test, with changes made for the - differing instruction lengths between x86 and aarch64. - - gas: Add CodeView constant for aarch64 - Adds the correct constant to the S_COMPILE3 CodeView record when - assembling aarch64-w64-mingw32 with the -gcodeview flag. - -2023-01-27 Tom Tromey - - Use clean_restart in gdb.base - Change gdb.base to use clean_restart more consistently. - - Use clean_restart in gdb.python - Change gdb.python to use clean_restart more consistently. - - Use clean_restart in gdb.cp - Change gdb.cp to use clean_restart more consistently. - - Use clean_restart in gdb.disasm - Change gdb.disasm to use clean_restart more consistently. - - Use clean_restart in gdb.perf - Change gdb.perf to use clean_restart more consistently. - - Use clean_restart in gdb.go - Change gdb.go to use clean_restart more consistently. - - Use clean_restart in gdb.stabs - Change gdb.stabs to use clean_restart more consistently. - - Use clean_restart in gdb.fortran - Change gdb.fortran to use clean_restart more consistently. - - Use clean_restart in gdb.ada - Change gdb.ada to use clean_restart more consistently. - - Use clean_restart in gdb.dwarf2 - Change gdb.dwarf2 to use clean_restart more consistently. - - Use clean_restart in gdb.reverse - Change gdb.reverse to use clean_restart more consistently. - - Use clean_restart in gdb.arch - Change gdb.arch to use clean_restart more consistently. - - Use clean_restart in gdb.guile - Change gdb.guile to use clean_restart more consistently. - - Use clean_restart in gdb.threads - Change gdb.threads to use clean_restart more consistently. - - Use clean_restart in gdb.objc - Change gdb.objc to use clean_restart more consistently. - - Use clean_restart in gdb.trace - Change gdb.trace to use clean_restart more consistently. - - Use clean_restart in gdb.opencl - Change gdb.opencl to use clean_restart more consistently. - - Use clean_restart in gdb.linespec - Change gdb.linespec to use clean_restart more consistently. - - Use clean_restart in gdb.pascal - Change gdb.pascal to use clean_restart more consistently. - - Use mi_clean_restart more - This changes a number of MI tests to use mi_clean_restart rather than - separate calls. This reduces the number of lines, which is nice, and - also provides a nicer model to copy for future tests. - - Start gdb after building executable in mi-basics.exp - A lot of the MI tests start gdb and only then build the executable. - This just seemed weird to me, so I've fixed this up. In this patch, - no other cleanups are done, the startup is just moved to a more - logical (to me) spot. - - Remove unnecessary call to standard_testfile - This test does not build a program and does not need to call - standard_testfile. - - Minor "require" fixups - I found a couple of spots that could use "require", and one spot where - hoisting the "require" closer to the top of the file made it more - clear. - -2023-01-27 Tom Tromey - - Remove some dead code in gdb.fortran/info-types.exp - An early "return" in this test case prevents a test from running. - This seems to have been intentional and has been in place since: - - commit d57cbee932f86df06251498daa93154046dc77c0 - Author: Andrew Burgess - Date: Tue Dec 3 13:18:43 2019 +0000 - - gdb/testsuite/fortran: Fix info-modules/info-types for gfortran 8+ - - This patch removes the dead code. - -2023-01-27 Tom Tromey - - Eliminate spurious returns from the test suite - A number of tests end with "return". However, this is unnecessary. - This patch removes all of these. - - Use clean_restart in gdb.dlang - Change gdb.dlang to use clean_restart more consistently. - - Use ordinary calling convention for clean_restart - clean_restart accepts a single optional argument. Rather than using - {args} and handling the argument by hand, change it to use Tcl's own - argument-checking. - -2023-01-27 GDB Administrator - - Automatic date update in version.in - -2023-01-26 Alan Modra - - Free gas/dwarf2dbg.c dirs - Entries are allocated with xmemdup0. - - * dwarf2dbg.c (dwarf2_cleanup): Free dirs entries. - -2023-01-26 Alan Modra - - Sanity check dwarf5 form of .file - There's a comment a few lines earlier saying that demand_copy_C_string - has already reported an error if it returns NULL. Given the proximity - I decided not to duplicate the comment. - - * dwarf2dbg.c (dwarf2_directive_filename): Check return of - demand_copy_C_string for file. - -2023-01-26 Alan Modra - - resolve gas shift expressions with large exponents to zero - * expr.c (resolve_expression ): Resolve - shifts exceeding bits in a valueT to zero. - - segv in coff_aarch64_addr32nb_reloc - * coff-aarch64.c (coff_aarch64_addr32nb_reloc): When output_bfd - is NULL (which it is for objdump -W) get the output bfd via the - input section. - -2023-01-26 Simon Marchi - - gdb/testsuite: initialize "correct" variable in gdb.cp/cpexprs.exp.tcl - Due to a GDB bug (visible when building with -D_GLIBCXX_DEBUG), GDB - crashes somewhere in the middle of gdb.cp/cpexprs.exp, and thus fails to - read the string, at gdb.cp/cpexprs.exp.tcl:725. The "correct" variable - doesn't get set, and I then see this TCL error: - - ERROR: can't read "correct": no such variable - - Avoid the TCL error by initializing the "correct" variable to a dummy - value. - - Change-Id: I828968d9b2d105ef47f8da2ef598aa16a518c059 - -2023-01-26 Simon Marchi - - gdb/testsuite/dap: fix gdb.dap/basic-dap.exp disassembly test for PIE - Prior to this patch, I get: - - >>> {"seq": 17, "type": "request", "command": "disassemble", "arguments": {"memoryReference": "0x115d", "instructionCount": 1}} - Content-Length: 147 - - {"request_seq": 17, "type": "response", "command": "disassemble", "success": false, "message": "Cannot access memory at address 0x115d", "seq": 41}FAIL: gdb.dap/basic-dap.exp: disassemble one instruction success - FAIL: gdb.dap/basic-dap.exp: instructions in disassemble output - - The problem is that the PC to disassemble is taken from the breakpoint - insertion response, which happens before running. With a PIE - executable, that PC is unrelocated, but the disassembly request happens - after relocation. - - I chose to fix this by watching for a breakpoint changed event giving - the new breakpoint address, and recording the address from there. I - think this is an interesting way to fix it, because it adds a bit of - test coverage, I don't think these events are checked right now. - - Other ways to fix it would be: - - - Get the address by doing a breakpoint insertion after the program is - started, or some other way. - - Do the disassembly by symbol instead of by address. - - Do the disassembly before running the program. - - Change-Id: I3c396f796ac4c8b22e7dfd2fa1c5467f7a47e84e - -2023-01-26 Simon Marchi - - gdb/testsuite/dap: make dap_wait_for_event_and_check return preceding messages - In the following patch, I change gdb.dap/basic-dap.exp such that after - waiting for some event, it checks if it received another event - meanwhile. To help with this, make dap_wait_for_event_and_check and - _dap_dap_wait_for_event return a list with everything received before - the event of interest. This is similar to what - dap_check_request_and_response returns. - - Change-Id: I85c8980203a2dec833937e7552c2196bc137935d - -2023-01-26 Simon Marchi - - gdb/testsuite/dap: rename dap_read_event to dap_wait_for_event_and_check - I think that name describes a bit better what the proc does, it is - similar to "wait_for" in tuiterm.exp. - - Change-Id: Ie55aa011e6595dd1b5a874db13881ba572ace419 - -2023-01-26 Simon Marchi - - gdb/testsuite/dap: pass around dicts instead of TON objects - The DAP helper functions generally return TON objects. However, callers - almost all immediately use ton::2dict to convert them to dicts, to - access their contents. This commits makes things a bit simpler for them - by having function return dicts directly instead. - - The downside is that the TON objects contain type information. For - instance, a "2" in a TCL dict could have been the integer 2 or the - string "2" in JSON. By converting to TCL dicts, we lose that - information. If some tests specifically want to check the types of some - fields, I think we can add intermediary functions that return TON - objects, without having to complicate other callers who don't care. - - Change-Id: I2ca47bea355bf459090bae8680c6a917350b5c3f - -2023-01-26 Simon Marchi - - gdb/testsuite/dap: remove catch from dap_read_event - This catch didn't cause me any trouble, but for the same reason as the - preceding patch, I think it's a bit better to just let any exception - propagate, to make for easier debugging. - - Change-Id: I1779e62c788b77fef2d50434edf4c3d2ec5e1c4c - -2023-01-26 Simon Marchi - - gdb/testsuite/dap: make dap_request_and_response not catch / issue test result - Following some of my changes, dap_request_and_response was failing and I - didn't know why. I think it's better to make it not catch any - exception, and just make it do a simple "send request, read response". - If an exception is thrown while sending a request or reading a response, - things are going really badly, it's not like we'll want to recover from - that and continue the test. - - Change-Id: I27568d3547f753c3a74e3e5a730d38a8caef9356 - -2023-01-26 Simon Marchi - - gdb/testsuite/dap: write requests to gdb.log - This helps following what happens when reading gdb.log. The downside is - that it becomes harder to tell what text is from GDB and what text is - going to GDB, but I think that seeing responses without seeing requests - is even more confusing. At least, the lines are prefix with >>>, so - when you see this, you know that until the end of the line, it's - something that was sent to GDB, and not GDB output. - - Change-Id: I1ba1acd8b16f4e64686c5ad268cc41082951c874 - -2023-01-26 Simon Marchi - - gdb/testsuite/dap: prefix some procs with _ - Prefix some procs that are only used internally with an underscore, to - make it clear they are internal. If they need to be used by some test - later, we can always un-prefix them. - - Change-Id: Iacb8e77363b5d1f8b98d9ba5a6d115aee5c8925d - -2023-01-26 Simon Marchi - - gdb/testsuite/dap: use gdb_assert in gdb.dap/basic-dap.exp - Use gdb_assert instead of manual pass/fail. - - Change-Id: I71fbc4e37a0a1ef4783056c7424e932651fa397f - -2023-01-26 Vladimir Mezentsev - - gprofng: PR30043 libgprofng.so.* are installed to a wrong location - gprofng/ChangeLog - 2023-01-25 Vladimir Mezentsev - - PR gprofng/30043 - PR gprofng/28972 - * src/Makefile.am: Use lib_LTLIBRARIES instead of pkglib_LTLIBRARIES. - * src/Makefile.in: Rebuild. - -2023-01-26 Tom de Vries - - [gdb/testsuite] Add gdb.base/unwind-on-each-insn-{amd64,i386}.exp - The gcc 4.4.x (and earlier) compilers had the problem that the unwind info in - the epilogue was inaccurate. - - In order to work around this in gdb, epilogue unwinders were added with a - higher priority than the dwarf unwinders in the amd64 and i386 targets: - - amd64_epilogue_frame_unwind, and - - i386_epilogue_frame_unwind. - - Subsequently, the epilogue unwind info problem got fixed in gcc 4.5.0. - - However, the epilogue unwinders prevented gdb from taking advantage of the - fixed epilogue unwind info, so the scope of the epilogue unwinders was - limited, bailing out for gcc >= 4.5.0. - - There was no regression test added for this preference scheme, so if we now - declare epilogue unwind info from all gcc versions as trusted, no test will - start failing. - - Fix this by adding an amd64 and i386 regression test for this. - - I have no gcc 4.4.x lying around, so I fabricated the assembly files by: - - commenting out some .cfi directives to break the epilogue unwind info, and - - hand-editing the producer info to 4.4.7 to activate the fix. - - Tested on x86_64-linux, target boards unix/{-m64,-m32}. - -2023-01-26 Tom de Vries - - [gdb/testsuite] Add and use is_x86_64_m64_target - Add new proc is_x86_64_m64_target and use it where appropriate. - - Tested on x86_64-linux. - -2023-01-26 GDB Administrator - - Automatic date update in version.in - -2023-01-25 Mark Harmstone - - ld/testsuite: Add missing targets to PDB tests - -2023-01-25 Mark Harmstone - - ld: Add pdb support to aarch64-w64-mingw32 - This extends PDB support to the aarch64 PE targets. - - The changes to the test files are just to make it so they can be assembled as - either x86, x86_64, or aarch64, mainly by changing the comment style. - The only actual code change here is in adding the architecture constants - to pdb.c. - -2023-01-25 Torbjörn SVENSSON - - gdb/arm: Use new dwarf2 function cache - This patch resolves the performance issue reported in pr/29738 by - caching the values for the stack pointers for the inner frame. By - doing so, the impact can be reduced to checking the state and - returning the appropriate value. - -2023-01-25 Torbjörn SVENSSON - - gdb: dwarf2 generic implementation for caching function data - When there is no dwarf2 data for a register, a function can be called - to provide the value of this register. In some situations, it might - not be trivial to determine the value to return and it would cause a - performance bottleneck to do the computation each time. - - This patch allows the called function to have a "cache" object that it - can use to store some metadata between calls to reduce the performance - impact of the complex logic. - - The cache object is unique for each function and frame, so if there are - more than one function pointer stored in the dwarf2_frame_cache->reg - array, then the appropriate pointer will be supplied (the type is not - known by the dwarf2 implementation). - - dwarf2_frame_get_fn_data can be used to retrieve the function unique - cache object. - dwarf2_frame_allocate_fn_data can be used to allocate and retrieve the - function unique cache object. - -2023-01-25 Tom Tromey - - Clean up unusual code in mi-cmd-stack.c - I noticed some unusual code in mi-cmd-stack.c. This code is a switch, - where one of the cases appears in the middle of another block. It - seemed cleaner to me to have the earlier case just conditionally fall - through. - -2023-01-25 H.J. Lu - - i386: Pass -Wl,--no-as-needed to compiler as needed - Pass -Wl,--no-as-needed to linker tests to fix - - FAIL: Run pr19031 - FAIL: Run got1 - FAIL: Undefined weak symbol (-fPIE -no-pie) - FAIL: Undefined weak symbol (-fPIE -pie) - - when --as-needed is passed to linker by compiler. - - PR ld/30050 - * testsuite/ld-i386/i386.exp: Pass -Wl,--no-as-needed to compiler - as needed. - -2023-01-25 Tom Tromey - - Move target check into allow_altivec_tests - Pedro pointed out that only PPC can possibly have altivec, so we can - move the target check into allow_altivec_tests. - - Use require with is_remote - This changes some tests to use require with 'is_remote', rather than - an explicit test. This adds uniformity helps clean up more spots - where a test might exit early without any notification. - -2023-01-25 Tom Tromey - - Add unsupported calls where needed - A number of tests will exit early without saying why. This patch adds - "unsupported" at spots like this that I could readily find. - - There are definitely more of these; for example dw2-ranges.exp fails - silently because a compilation fails. I didn't attempt to address - these as that is a much larger task. - -2023-01-25 Tom Tromey - - Introduce and use is_any_target - A few tests work on two different targets that can't be detected with - a single call to istarget -- that proc only accepts globs, not regular - expressions. - - This patch introduces a new is_any_target proc and then converts these - tests to use it in a 'require'. - -2023-01-25 Tom Tromey - - Use require with istarget - This changes many tests to use require when checking 'istarget'. A - few of these conversions were already done in earlier patches. - - No change was needed to 'require' to make this work, due to the way it - is written. I think the result looks pretty clear, and it has the - bonus of helping to ensure that the reason that a test is skipped is - always logged. - -2023-01-25 Tom Tromey - - Rename skip_vsx_tests to allow form - This renames skip_vsx_tests to allow_vsx_tests and updates it users to - use require. - - Rename skip_power_isa_3_1_tests to allow form - This renames skip_power_isa_3_1_tests to allow_power_isa_3_1_tests and - updates its users to use require. - - Rename skip_float_test to allow form - This renames skip_float_test to allow_float_test and updates its users - to use require. - - Convert skip_altivec_tests to allow form - This renames skip_altivec_tests to allow_altivec_tests and updates its - users to use require. - -2023-01-25 Tom de Vries - - [gdb/testsuite] Fix gdb.base/unwind-on-each-insn.exp for -m32 - With test-case gdb.base/unwind-on-each-insn.exp and target board unix/-m32, I - now get: - ... - # of expected passes 25 - ... - instead of: - ... - # of expected passes 133 - ... - as I used to get before commit d25a8dbc7c3 ("[gdb/testsuite] Allow debug - srcfile2 in gdb.base/unwind-on-each-insn.exp"), due to the test-case trying to match - "rip = " and info frame printing "eip = " instead. - - Fix this by dropping "rip" from the regexp. - - Tested on x86_64-linux, target boards unix/{-m64,-m32}. - -2023-01-25 Tom de Vries - - [gdb/testsuite] Allow debug srcfile2 in gdb.base/unwind-on-each-insn.exp - Test-case gdb.base/unwind-on-each-insn.exp compiles $srcfile with debug info, and - $srcfile2 without. - - Occasionally, I try both files with debug info: - ... - - $srcfile $debug_flags $srcfile2 $nodebug_flags]]} { - + $srcfile $debug_flags $srcfile2 $debug_flags]]} { - ... - - This shortcuts the test due to no longer recognizing that stepi still lands - in foo. - - Fix this by determining whether still in foo by checking the info frame output. - - Tested on x86_64-linux. - -2023-01-25 Tom de Vries - - [gdb/testsuite] Allow nodebug srcfile in gdb.base/unwind-on-each-insn.exp - Test-case gdb.base/unwind-on-each-insn.exp compiles $srcfile with debug info, and - $srcfile2 without. - - Occasionally, I try both files with debug info: - ... - - $srcfile $debug_flags $srcfile2 $nodebug_flags]]} { - + $srcfile $debug_flags $srcfile2 $debug_flags]]} { - ... - and both files without: - ... - - $srcfile $debug_flags $srcfile2 $nodebug_flags]]} { - + $srcfile $nodebug_flags $srcfile2 $nodebug_flags]]} { - ... - - In the latter case, I run into: - ... - FAIL: gdb.base/unwind-on-each-insn.exp: foo: instruction 1: bt 2 - FAIL: gdb.base/unwind-on-each-insn.exp: foo: instruction 1: up - ... - due to a mismatch between the regexp and the different output due to using - nodebug. - - Fix this by making the regexp less strict. - - Tested on x86_64-linux. - -2023-01-25 Felix Willgerodt - - gdb, i386: Update stale comment in i386-tdep.h. - The comment seems no longer valid, the functions technically check for - non-pseudo registers, like zmmh. Which is a valid use case. - -2023-01-25 Tom de Vries - - [gdb/testsuite] Analyze non-leaf fn in gdb.base/unwind-on-each-insn.exp - In test-case gdb.base/unwind-on-each-insn.exp, we stepi through function foo - to check various invariants at each insn, in particular hoping to excercise - insns that modify stack and frame pointers. - - Function foo is a leaf function, so add a non-leaf function bar, and step - through it as well (using nexti instead of stepi). - - With the updated test-case, on powerpc64le-linux, I run into PR tdep/30049: - ... - FAIL: bar: instruction 5: bt 2 - FAIL: bar: instruction 5: up - FAIL: bar: instruction 5: [string equal $fid $::main_fid] - FAIL: bar: instruction 6: bt 2 - FAIL: bar: instruction 6: up - FAIL: bar: instruction 6: [string equal $fid $::main_fid] - ... - - Tested on: - - x86_64-linux (-m64 and -m32) - - s390x-linux (-m64 and -m31) - - aarch64-linux - - powerpc64le-linux - -2023-01-25 Tom de Vries - - [gdb/testsuite] Improve leaf fn in gdb.base/unwind-on-each-insn.exp - In test-case gdb.base/unwind-on-each-insn.exp, we stepi through function foo - to check various invariants at each insn, in particular hoping to excercise - insns that modify stack and frame pointers. - - For x86_64-linux, we have a reasonably complex foo (and similar for -m32): - ... - 4004bc: 55 push %rbp - 4004bd: 48 89 e5 mov %rsp,%rbp - 4004c0: 90 nop - 4004c1: 5d pop %rbp - 4004c2: c3 ret - ... - Both stack pointer (%rsp) and frame pointer (%rbp) are modified. - - Also for s390x-linux (and similar for -m31): - ... - 0000000001000668 : - 1000668: e3 b0 f0 58 00 24 stg %r11,88(%r15) - 100066e: b9 04 00 bf lgr %r11,%r15 - 1000672: e3 b0 b0 58 00 04 lg %r11,88(%r11) - 1000678: 07 fe br %r14 - ... - Frame pointer (%r11) is modified. - - Likewise for powerpc64le-linux: - ... - 00000000100006c8 : - 100006c8: f8 ff e1 fb std r31,-8(r1) - 100006cc: d1 ff 21 f8 stdu r1,-48(r1) - 100006d0: 78 0b 3f 7c mr r31,r1 - 100006d4: 00 00 00 60 nop - 100006d8: 30 00 3f 38 addi r1,r31,48 - 100006dc: f8 ff e1 eb ld r31,-8(r1) - 100006e0: 20 00 80 4e blr - ... - Both stack pointer (r1) and frame pointer (r31) are modified. - - But for aarch64-linux, we have: - ... - 00000000004005fc : - 4005fc: d503201f nop - 400600: d65f03c0 ret - ... - There's no insn that modifies stack or frame pointer. - - Fix this by making foo more complex, adding an (unused) argument: - ... - 0000000000400604 : - 400604: d10043ff sub sp, sp, #0x10 - 400608: f90007e0 str x0, [sp, #8] - 40060c: d503201f nop - 400610: 910043ff add sp, sp, #0x10 - 400614: d65f03c0 ret - ... - such that the stack pointer (sp) is modified. - - [ Note btw that we're seeing the effects of -momit-leaf-frame-pointer, with - -mno-omit-leaf-frame-pointer we have instead: - ... - 0000000000400604 : - 400604: a9be7bfd stp x29, x30, [sp, #-32]! - 400608: 910003fd mov x29, sp - 40060c: f9000fa0 str x0, [x29, #24] - 400610: d503201f nop - 400614: a8c27bfd ldp x29, x30, [sp], #32 - 400618: d65f03c0 ret - ... - such that also the frame pointer (x29) is modified. ] - - Having made foo more complex, we now run into the following fail on - x86_64/-m32: - ... - FAIL: gdb.base/unwind-on-each-insn.exp: instruction 1: $sp_value == $main_sp - .... - - The problem is that the stack pointer has changed inbetween the sampling of - main_sp and *foo, in particular by the push insn: - ... - 804841a: 68 c0 84 04 08 push $0x80484c0 - 804841f: e8 10 00 00 00 call 8048434 - ... - - Fix this by updating main_sp. - - On powerpc64le-linux, with gcc 7.5.0 I now run into PR tdep/30021: - ... - FAIL: gdb.base/unwind-on-each-insn.exp: insn 7: $fba_value == $main_fba - FAIL: gdb.base/unwind-on-each-insn.exp: insn 7: [string equal $fid $main_fid] - ... - but I saw the same failure before this commit with gcc 4.8.5. - - Tested on: - - x86_64-linux (-m64 and -m32) - - s390x-linux (-m64 and -m31) - - powerpc64le-linux - - aarch64-linux - - Also I've checked that the test-case still functions as regression test for PR - record/16678 on x86_64. - -2023-01-25 Andrew Burgess - - gdb/tui: make use of a scoped_restore - Make use of a scoped_restore object in tui_mld_read_key instead of - doing a manual save/restore. - - I don't think the existing code can throw an exception, so this is - just a cleanup rather than a bug fix. - - There should be no user visible changes after this commit. - -2023-01-25 Andrew Burgess - - gdb/tui: better filtering of tab completion results for focus command - While working on the previous couple of commits, I noticed that the - 'focus' command would happily suggest 'status' as a possible focus - completion, even though the 'status' window is non-focusable, and, - after the previous couple of commits, trying to focus the status - window will result in an error. - - This commit improves the tab-completion results for the focus command - so that the status window is not included. - -2023-01-25 Andrew Burgess - - gdb/tui: convert if/error to an assert - While working on the previous commit, I realised that there was an - error in tui_set_focus_command that could never be triggered. - - Since the big tui rewrite (adding dynamic layouts) it is no longer - true that there is a tui_win_info object for every window at all - times. We now only create a tui_win_info object for a particular - window, when the window is part of the current layout. As a result, - if we have a tui_win_info pointer, then the window must be visible - inside tui_set_focus_command (this function calls tui_enable as its - first action, which makes the current layout visible). - - The gdb.tui/tui-focus.exp test script exercises this area of code, and - doesn't trigger the assert, nor do any of our other existing tui - tests. - -2023-01-25 Andrew Burgess - - gdb/testsuite/tui: more testing of the 'focus' command - I noticed that we didn't have many tests of the tui 'focus' command, - so I started adding some. This exposed a bug in GDB; we are able to - focus windows that should not be focusable, e.g. the 'status' window. - - This is harmless until we then do 'focus next' or 'focus prev', along - this code path we assert that the currently focused window is - focusable, which obviously, is not always true, so GDB fails with an - assertion error. - - The fix is simple; add a check to the tui_set_focus_command function - to ensure that the selected window is focusable. If it is not then an - error is thrown. The new tests I've added cover this case. - -2023-01-25 Andrew Burgess - - gdb/testsuite: update gdb.tui/tui-nl-filtered-output.exp - Following on from the previous commit, in this commit I am updating - the test script gdb.tui/tui-nl-filtered-output.exp to take account of - the changes in commit: - - commit 9162a27c5f5828240b53379d735679e2a69a9f41 - Date: Tue Nov 13 11:59:03 2018 -0700 - - Change gdb test suite's TERM setting - - In the above commit the TERM environment variable was changed to be - 'dumb' by default, which means that tests, that previously activated - tui mode, no longer do unless TERM is set to 'ansi'. - - As the gdb.tui/tui-nl-filtered-output.exp script didn't do this, the - test stopped working. As the expect patterns in this script were - pretty generic no tests actually started failing, and we never - noticed. - - In this commit I update the test script to correctly activate our - terminal emulator, the test continues to pass after this update, but - now we are testing in tui mode. - -2023-01-25 Andrew Burgess - - gdb/testsuite: update gdb.tui/tui-disasm-long-lines.exp - Following on from the previous commit, in this commit I am updating - the test script gdb.tui/tui-disasm-long-lines.exp to take account of - the changes in commit: - - commit 9162a27c5f5828240b53379d735679e2a69a9f41 - Date: Tue Nov 13 11:59:03 2018 -0700 - - Change gdb test suite's TERM setting - - In the above commit the TERM environment variable was changed to be - 'dumb' by default, which means that tests, that previously activated - tui mode, no longer do unless TERM is set to 'ansi'. - - As the gdb.tui/tui-disasm-long-lines.exp script didn't do this, the - test stopped working. As the expect patterns in this script were - pretty generic no tests actually started failing, and we never - noticed. - - In this commit I update the script to use Term::clean_restart, which - correctly sets TERM to 'ansi'. I've also added a check that the asm - box does appear on the screen, which should indicate that tui mode has - correctly activated. - - However, I also notice that GDB doesn't appear to fully work - correctly. The test should display the disassembly for the test - program, but it doesn't. - - The test is trying to disassemble some code that (deliberately) uses a - very long symbol name, this eventually results in GDB entering - tui_source_window_base::show_source_content and trying to allocate an - ncurses pad in order to hold the current page of disassembler output. - - Unfortunately, due to the very long line, the call to newpad fails, - meaning that tui_source_window_base::m_pad is nullptr. Luckily non of - the following calls appear to crash when passed a nullptr, however, - all the output that is written to the pad is lost, which is why we - don't see any assembly code written to the screen. - - As the test history indicates that the script was originally checking - for a crash in GDB when the long identifier was encountered, I think - there is value in just leaving the test as it is for now, I have a fix - for the issue of the newpad call failing, which I'll post in a follow - up commit later. - -2023-01-25 Andrew Burgess - - gdb/testsuite: extend gdb.tui/tui-layout.exp test script - In passing I noticed that the gdb.tui/tui-layout.exp test script was a - little strange, it tests the layout command multiple times, but never - sets up our ANSI terminal emulator, so every layout command fails with - a message about the terminal lacking the required abilities. - - It turns out that this was caused by this commit: - - commit 9162a27c5f5828240b53379d735679e2a69a9f41 - Date: Tue Nov 13 11:59:03 2018 -0700 - - Change gdb test suite's TERM setting - - This was when we changed the testsuite to set the TERM environment - variable to "dumb" by default. - - After this, any tui test that didn't set the terminal mode back to - 'ansi' would fail to activate tui mode. - - For the tui-layout.exp test it just so happens that the test patterns - are generic enough that the test continued to pass, even after this - change. - - In this commit I have updated the test so we now check the layout - command both with a 'dumb' terminal and with the 'ansi' terminal. - When testing with the 'ansi' terminal, I have some limited validation - that GDB correctly entered tui mode. - - I figured that it is probably worth having at least one test in the - test suite that deliberately tries to enter tui mode in a dumb - terminal, it would be sad if we one day managed to break GDB such that - this caused a crash, and never noticed. - -2023-01-25 Andrew Burgess - - gdb/testsuite: rename test source file to match test script - The previous commit touched the source file for the test script - gdb.cp/cpcompletion.exp. This source file is called pr9594.cc. The - source file is only used by the one test script. - - This commit renames the source file to cpcompletion.cc to match the - test script, this is more inline with how we name source files these - days. - -2023-01-25 Andrew Burgess - - gdb/testsuite: use test_gdb_complete_unique more in C++ tests - Spotted in gdb.cp/cpcompletion.exp that we could replace some uses of - gdb_test with test_gdb_complete_unique, this will extend the - completion testing to check tab-completion as well as completion using - the 'complete' command in some additional cases. - -2023-01-25 GDB Administrator - - Automatic date update in version.in - -2023-01-24 Vladimir Mezentsev - - gprofng: PR29521 [docs] man pages are not in the release tarball - gprofng/ChangeLog - 2023-01-20 Vladimir Mezentsev - - PR gprofng/29521 - * configure.ac: Check if $MAKEINFO and $HELP2MAN are missing. - * Makefile.am: Build doc if $MAKEINFO exists. - * doc/gprofng.texi: Update documentation for gprofng. - * doc/Makefile.am: Build gprofng.1. - * src/Makefile.am: Move the build of gprofng.1 to doc/Makefile.am. - * configure: Rebuild. - * Makefile.in: Rebuild. - * doc/Makefile.in: Rebuild. - * src/Makefile.in: Rebuild. - -2023-01-24 Indu Bhagat - - libsframe/doc: fix some warnings - 'make pdf' in libsframe shows some warnings, some of which (especially - the Overfull warnings) are causing undesirable effects on the rendered - output. Few examples of the warnings: - - Underfull \hbox (badness 10000) in paragraph at lines 406--407 - @texttt pauth_ - - Underfull \hbox (badness 10000) in paragraph at lines 407--410 - @textrm Specify which key is used for signing the return - - ... - - Overfull \hbox (2.0987pt too wide) in paragraph at lines 412--413 - @texttt fdetype[]| - - ... - - Overfull \hbox (28.87212pt too wide) in paragraph at lines 446--447 - @textrm SFRAME[]FDE[]TYPE[]PCMASK| - - ... - - This patch adjusts column widths of the affected cells to fix a subset - of these warnings. For the rest of the warnings, use explicit newline - command to fix them. - - libsframe/ - * doc/sframe-spec.texi: Fix various underfull and overfull - warnings. - -2023-01-24 Nick Clifton - - Fix seg-fault when generating an empty DLL with LTO enabled. - ld PR 29998 - * pe-dll.c (generate_reloc): Handle sections - with no assigned output section. - Terminate early of there are no relocs to put - in the .reloc section. - (pe_exe_fill_sections): Do not emit an empty - .reloc section. - - bfd * cofflink.c (_bfd_coff_generic_relocate_section): - Add an assertion that the output section is set - for defined, global symbols. - -2023-01-24 Enze Li - - gdb: some int to bool conversion - When building GDB with clang 16, I got this, - - CXX maint.o - maint.c:1045:23: error: implicit truncation from 'int' to a one-bit wide bit-field changes value from 1 to -1 [-Werror,-Wsingle-bit-bitfield-constant-conversion] - m_space_enabled = 1; - ^ ~ - maint.c:1057:22: error: implicit truncation from 'int' to a one-bit wide bit-field changes value from 1 to -1 [-Werror,-Wsingle-bit-bitfield-constant-conversion] - m_time_enabled = 1; - ^ ~ - maint.c:1073:24: error: implicit truncation from 'int' to a one-bit wide bit-field changes value from 1 to -1 [-Werror,-Wsingle-bit-bitfield-constant-conversion] - m_symtab_enabled = 1; - ^ ~ - 3 errors generated. - - Work around this by using bool bitfields instead. - - Tested by rebuilding on x86_64-linux with clang 16 and gcc 12. - - Approved-By: Tom Tromey - -2023-01-24 Mark Harmstone - - ld: Avoid magic numbers for subsystems in pe.em and pep.em - -2023-01-24 GDB Administrator - - Automatic date update in version.in - -2023-01-23 Mark Harmstone - - ld: Set default subsystem for arm-pe to IMAGE_SUBSYSTEM_WINDOWS_GUI - This fixes the test failures introduced by 87a5cf5c, by changing the - default subsystem for arm-pe from 9 (IMAGE_SUBSYSTEM_WINDOWS_CE_GUI) to - 2 (IMAGE_SUBSYSTEM_WINDOWS_GUI), which matches what happens with other - PE targets. - - As far as I can tell there's no working modern Windows CE toolchain - knocking about anyway, so this change shouldn't inconvenience anyone. - -2023-01-23 Mark Harmstone - - Add support for secidx relocations to aarch64-w64-mingw32 - This patch adds support for the .secidx directive and its corresponding - relocation to aarch64-w64-mingw32. As with x86, this is a two-byte LE - integer which gets filled in with the 1-based index of the output - section that a symbol ends up in. - - This is needed for PDBs, which represent addresses as a .secrel32, - .secidx pair. - - The test is substantially the same as for amd64, but with changes made - for padding and alignment. - -2023-01-23 Tom de Vries - - [gdb/tdep, aarch64] Fix frame address of last insn - Consider the test-case test.c, compiled without debug info: - ... - void - foo (const char *s) - { - } - - int - main (void) - { - foo ("foo"); - return 0; - } - ... - - Disassembly of foo: - ... - 0000000000400564 : - 400564: d10043ff sub sp, sp, #0x10 - 400568: f90007e0 str x0, [sp, #8] - 40056c: d503201f nop - 400570: 910043ff add sp, sp, #0x10 - 400574: d65f03c0 ret - ... - - Now, let's do "info frame" at each insn in foo, as well as printing $sp - and $x29 (and strip the output of info frame to the first line, for brevity): - ... - $ gdb -q a.out - Reading symbols from a.out... - (gdb) b *foo - Breakpoint 1 at 0x400564 - (gdb) r - Starting program: a.out - - Breakpoint 1, 0x0000000000400564 in foo () - (gdb) display /x $sp - 1: /x $sp = 0xfffffffff3a0 - (gdb) display /x $x29 - 2: /x $x29 = 0xfffffffff3a0 - (gdb) info frame - Stack level 0, frame at 0xfffffffff3a0: - (gdb) si - 0x0000000000400568 in foo () - 1: /x $sp = 0xfffffffff390 - 2: /x $x29 = 0xfffffffff3a0 - (gdb) info frame - Stack level 0, frame at 0xfffffffff3a0: - (gdb) si - 0x000000000040056c in foo () - 1: /x $sp = 0xfffffffff390 - 2: /x $x29 = 0xfffffffff3a0 - (gdb) info frame - Stack level 0, frame at 0xfffffffff3a0: - (gdb) si - 0x0000000000400570 in foo () - 1: /x $sp = 0xfffffffff390 - 2: /x $x29 = 0xfffffffff3a0 - (gdb) info frame - Stack level 0, frame at 0xfffffffff3a0: - (gdb) si - 0x0000000000400574 in foo () - 1: /x $sp = 0xfffffffff3a0 - 2: /x $x29 = 0xfffffffff3a0 - (gdb) info frame - Stack level 0, frame at 0xfffffffff3b0: - pc = 0x400574 in foo; saved pc = 0x40058c - (gdb) si - 0x000000000040058c in main () - 1: /x $sp = 0xfffffffff3a0 - 2: /x $x29 = 0xfffffffff3a0 - ... - - The "frame at" bit lists 0xfffffffff3a0 except at the last insn, where it - lists 0xfffffffff3b0. - - The frame address is calculated here in aarch64_make_prologue_cache_1: - ... - unwound_fp = get_frame_register_unsigned (this_frame, cache->framereg); - if (unwound_fp == 0) - return; - - cache->prev_sp = unwound_fp + cache->framesize; - ... - - For insns after the prologue, we have cache->framereg == sp and - cache->framesize == 16, so unwound_fp + cache->framesize gives the wrong - answer once sp has been restored to entry value by the before-last insn. - - Fix this by detecting the situation that the sp has been restored. - - This fixes PRs tdep/30010 and tdep/30011. - - This also fixes the aarch64 FAILs in gdb.reverse/solib-precsave.exp and - gdb.reverse/solib-reverse.exp I reported in PR gdb/PR29721. - - Tested on aarch64-linux. - PR tdep/30010 - PR tdep/30011 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30010 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30011 - -2023-01-23 Tom de Vries - - [gdb/testsuite] Avoid using .eh_frame in gdb.base/unwind-on-each-insn.exp - One purpose of the gdb.base/unwind-on-each-insn.exp test-case is to test the - architecture-specific unwinders on foo, so unwind-on-each-insn-foo.c is - compiled with nodebug, to prevent the dwarf unwinders from taking effect. - - For for instance gcc x86_64 though, -fasynchronous-unwind-tables is enabled by - default, generating an .eh_frame section contribution which might enable the - dwarf unwinders and bypass the architecture-specific unwinders. - - Currently, that happens to be not the case due to the current implementation - of epilogue_unwind_valid, which assumes that in absence of debug info proving - that the compiler is gcc >= 4.5.0, the .eh_frame contribution is invalid. - - That may change though, see PR30028, in which case - gdb.base/unwind-on-each-insn.exp stops being a regression test for commit - 49d7cd733a7 ("Change calculation of frame_id by amd64 epilogue unwinder"). - - Fix this by making sure that we don't use .eh_frame info regardless of - epilogue_unwind_valid, simply by not generating it using - -fno-asynchronous-unwind-tables. - - Tested on x86_64-linux, target boards unix/{-m64,-m32}, using compilers - gcc 7.5.0 and clang 13.0.1. - -2023-01-23 Nick Clifton - - Updated Swedish translation for the binutils sub-directory - -2023-01-23 Tom de Vries - - [gdb/testsuite] Simplify gdb.base/unwind-on-each-insn.exp - In test-case gdb.base/unwind-on-each-insn.exp, we try to determine the last - disassembled insn in function foo. - - This in it self is fragile, as demonstrated by commit 91836f41e20 ("Powerpc - fix for gdb.base/unwind-on-each-insn.exp"). - - The use of the last disassembled insn in the test-case is to stop stepping in - foo once reaching it. - - However, the intent is to stop stepping just before returning to main. - - There is no guarantee that the last disassembled insn: - - is actually executed - - is executed just before returning to main - - is executed only once. - - Fix this by simplying the test-case to continue stepping till stepping out of - foo. - - Tested on x86_64-linux. - -2023-01-23 Tom de Vries - - [gdb/testsuite] Fix untested in gdb.base/frame-view.exp - When running test-case gdb.base/frame-view.exp, I see: - ... - gdb compile failed, ld: frame-view0.o: in function `main': - frame-view.c:73: undefined reference to `pthread_create' - ld: frame-view.c:76: undefined reference to `pthread_join' - collect2: error: ld returned 1 exit status - UNTESTED: gdb.base/frame-view.exp: failed to prepare - ... - - Fix this by adding pthreads to the compilation flags. - - Tested on x86_64-linux. - -2023-01-23 Vladislav Khmelevsky - - Fix objdump --reloc for specific symbol - If objdump is used with both --disassemble=symbol and --reloc options - skip relocations that have addresses before the symbol, so that they - are not displayed. - -2023-01-23 GDB Administrator - - Automatic date update in version.in - -2023-01-22 Tom Tromey - - Remove path name from test - The test suite reports several path names in tests. I couldn't find - most of these, and I suspect they are false reports, but I did manage - to locate one. This one is probably harmless, as I think the path - does not vary; but it's also easy to fix and suppress one warning. - - Minor cleanup in gdb.btrace/enable.exp - I noticed a weird-looking bit of code in gdb.btrace/enable.exp that is - left over from an earlier change. This patch moves the "!" inside the - braces, where it belongs. - - Minor fixup in allow_aarch64_sve_tests - An earlier patch failed to update a string in allow_aarch64_sve_tests. - -2023-01-22 GDB Administrator - - Automatic date update in version.in - -2023-01-21 GDB Administrator - - Automatic date update in version.in - -2023-01-20 Simon Marchi - - gdb: make frame_info_ptr auto-reinflatable - This is the second step of making frame_info_ptr automatic, reinflate on - demand whenever trying to obtain the wrapper frame_info pointer, either - through the get method or operator->. Make the reinflate method - private, it is used as a convenience method in those two. - - Add an "is_null" method, because it is often needed to know whether the - frame_info_ptr wraps an frame_info or is empty. - - Make m_ptr mutable, so that it's possible to reinflate const - frame_info_ptr objects. Whether m_ptr is nullptr or not does not change - the logical state of the object, because we re-create it on demand. I - believe this is the right use case for mutable. - - Change-Id: Icb0552d0035e227f81eb3c121d8a9bb2f9d25794 - Reviewed-By: Bruno Larsen - -2023-01-20 Simon Marchi - - gdb: make frame_info_ptr grab frame level and id on construction - This is the first step of making frame_info_ptr automatic. Remove the - frame_info_ptr::prepare_reinflate method, move that code to the - constructor. - - Change-Id: I85cdae3ab1c043c70e2702e7fb38e9a4a8a675d8 - Reviewed-By: Bruno Larsen - -2023-01-20 Simon Marchi - - gdb: make user-created frames reinflatable - This patch teaches frame_info_ptr to reinflate user-created frames - (frames created through create_new_frame, with the "select-frame view" - command). - - Before this patch, frame_info_ptr doesn't support reinflating - user-created frames, because it currently reinflates by getting the - current target frame (for frame 0) or frame_find_by_id (for other - frames). To reinflate a user-created frame, we need to call - create_new_frame, to make it lookup an existing user-created frame, or - otherwise create one. - - So, in prepare_reinflate, get the frame id even if the frame has level - 0, if it is user-created. In reinflate, if the saved frame id is user - create it, call create_new_frame. - - In order to test this, I initially enhanced the gdb.base/frame-view.exp - test added by the previous patch by setting a pretty-printer for the - type of the function parameters, in which we do an inferior call. This - causes print_frame_args to not reinflate its frame (which is a - user-created one) properly. On one machine (my Arch Linux one), it - properly catches the bug, as the frame is not correctly restored after - printing the first parameter, so it messes up the second parameter: - - frame - #0 baz (z1=hahaha, z2=) at /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/frame-view.c:40 - 40 return z1.m + z2.n; - (gdb) FAIL: gdb.base/frame-view.exp: with_pretty_printer=true: frame - frame - #0 baz (z1=hahaha, z2=) at /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/frame-view.c:40 - 40 return z1.m + z2.n; - (gdb) FAIL: gdb.base/frame-view.exp: with_pretty_printer=true: frame again - - However, on another machine (my Ubuntu 22.04 one), it just passes fine, - without the appropriate fix. I then thought about writing a selftest - for that, it's more reliable. I left the gdb.base/frame-view.exp pretty - printer test there, it's already written, and we never know, it might - catch some unrelated issue some day. - - Change-Id: I5849baf77991fc67a15bfce4b5e865a97265b386 - Reviewed-By: Bruno Larsen - -2023-01-20 Simon Marchi - - gdb: make it possible to restore selected user-created frames - I would like to improve frame_info_ptr to automatically grab the - information needed to reinflate a frame, and automatically reinflate it - as needed. One thing that is in the way is the fact that some frames - can be created out of thin air by the create_new_frame function. These - frames are not the fruit of unwinding from the target's current frame. - These frames are created by the "select-frame view" command. - - These frames are not correctly handled by the frame save/restore - functions, save_selected_frame, restore_selected_frame and - lookup_selected_frame. This can be observed here, using the test - included in this patch: - - $ ./gdb --data-directory=data-directory -nx -q testsuite/outputs/gdb.base/frame-view/frame-view - Reading symbols from testsuite/outputs/gdb.base/frame-view/frame-view... - (gdb) break thread_func - Breakpoint 1 at 0x11a2: file /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/frame-view.c, line 42. - (gdb) run - Starting program: /home/simark/build/binutils-gdb/gdb/testsuite/outputs/gdb.base/frame-view/frame-view - - [Thread debugging using libthread_db enabled] - Using host libthread_db library "/usr/lib/../lib/libthread_db.so.1". - [New Thread 0x7ffff7cc46c0 (LWP 4171134)] - [Switching to Thread 0x7ffff7cc46c0 (LWP 4171134)] - - Thread 2 "frame-view" hit Breakpoint 1, thread_func (p=0x0) at /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/frame-view.c:42 - 42 foo (11); - (gdb) info frame - Stack level 0, frame at 0x7ffff7cc3ee0: - rip = 0x5555555551a2 in thread_func (/home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/frame-view.c:42); saved rip = 0x7ffff7d4e8fd - called by frame at 0x7ffff7cc3f80 - source language c. - Arglist at 0x7ffff7cc3ed0, args: p=0x0 - Locals at 0x7ffff7cc3ed0, Previous frame's sp is 0x7ffff7cc3ee0 - Saved registers: - rbp at 0x7ffff7cc3ed0, rip at 0x7ffff7cc3ed8 - (gdb) thread 1 - [Switching to thread 1 (Thread 0x7ffff7cc5740 (LWP 4171122))] - #0 0x00007ffff7d4b4b6 in ?? () from /usr/lib/libc.so.6 - - Here, we create a custom frame for thread 1 (using the stack from thread - 2, for convenience): - - (gdb) select-frame view 0x7ffff7cc3f80 0x5555555551a2 - - The first calls to "frame" looks good: - - (gdb) frame - #0 thread_func (p=0x7ffff7d4e630) at /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/frame-view.c:42 - 42 foo (11); - - But not the second one: - - (gdb) frame - #0 0x00007ffff7d4b4b6 in ?? () from /usr/lib/libc.so.6 - - This second "frame" command shows the current target frame instead of - the user-created frame. - - It's not totally clear how the "select-frame view" feature is expected - to behave, especially since it's not tested. I heard accounts that it - used to be possible to select a frame like this and do "up" and "down" - to navigate the backtrace starting from that frame. The fact that - create_new_frame calls frame_unwind_find_by_frame to install the right - unwinder suggest that it used to be possible. But that doesn't work - today: - - (gdb) select-frame view 0x7ffff7cc3f80 0x5555555551a2 - (gdb) up - Initial frame selected; you cannot go up. - (gdb) down - Bottom (innermost) frame selected; you cannot go down. - - and "backtrace" always shows the actual thread's backtrace, it ignores - the user-created frame: - - (gdb) bt - #0 0x00007ffff7d4b4b6 in ?? () from /usr/lib/libc.so.6 - #1 0x00007ffff7d50403 in ?? () from /usr/lib/libc.so.6 - #2 0x000055555555521a in main () at /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/frame-view.c:56 - - I don't want to address all the `select-frame view` issues , but I think - we can agree that the "frame" command changing the selected frame, as - shown above, is a bug. I would expect that command to show the - currently selected frame and not change it. - - This happens because of the scoped_restore_selected_frame object in - print_frame_args. The frame information is saved in the constructor - (the backtrace below), and restored in the destructor. - - #0 save_selected_frame (frame_id=0x7ffdc0020ad0, frame_level=0x7ffdc0020af0) at /home/simark/src/binutils-gdb/gdb/frame.c:1682 - #1 0x00005631390242f0 in scoped_restore_selected_frame::scoped_restore_selected_frame (this=0x7ffdc0020ad0) at /home/simark/src/binutils-gdb/gdb/frame.c:324 - #2 0x000056313993581e in print_frame_args (fp_opts=..., func=0x62100023bde0, frame=..., num=-1, stream=0x60b000000300) at /home/simark/src/binutils-gdb/gdb/stack.c:755 - #3 0x000056313993ad49 in print_frame (fp_opts=..., frame=..., print_level=1, print_what=SRC_AND_LOC, print_args=1, sal=...) at /home/simark/src/binutils-gdb/gdb/stack.c:1401 - #4 0x000056313993835d in print_frame_info (fp_opts=..., frame=..., print_level=1, print_what=SRC_AND_LOC, print_args=1, set_current_sal=1) at /home/simark/src/binutils-gdb/gdb/stack.c:1126 - #5 0x0000563139932e0b in print_stack_frame (frame=..., print_level=1, print_what=SRC_AND_LOC, set_current_sal=1) at /home/simark/src/binutils-gdb/gdb/stack.c:368 - #6 0x0000563139932bbe in print_stack_frame_to_uiout (uiout=0x611000016840, frame=..., print_level=1, print_what=SRC_AND_LOC, set_current_sal=1) at /home/simark/src/binutils-gdb/gdb/stack.c:346 - #7 0x0000563139b0641e in print_selected_thread_frame (uiout=0x611000016840, selection=...) at /home/simark/src/binutils-gdb/gdb/thread.c:1993 - #8 0x0000563139940b7f in frame_command_core (fi=..., ignored=true) at /home/simark/src/binutils-gdb/gdb/stack.c:1871 - #9 0x000056313994db9e in frame_command_helper::base_command (arg=0x0, from_tty=1) at /home/simark/src/binutils-gdb/gdb/stack.c:1976 - - Since the user-created frame has level 0 (identified by the saved level - -1), lookup_selected_frame just reselects the target's current frame, - and the user-created frame is lost. - - My goal here is to fix this particular problem. - - Currently, select_frame does not set selected_frame_id and - selected_frame_level for frames with level 0. It leaves them at - null_frame_id / -1, indicating to restore_selected_frame to use the - target's current frame. User-created frames also have level 0, so add a - special case them such that select_frame saves their selected id and - level. - - save_selected_frame does not need any change. - - Change the assertion in restore_selected_frame that checks `frame_level - != 0` to account for the fact that we can restore user-created frames, - which have level 0. - - Finally, change lookup_selected_frame to make it able to re-create - user-created frame_info objects from selected_frame_level and - selected_frame_id. - - Add a minimal test case for the case described above, that is the - "select-frame view" command followed by the "frame" command twice. In - order to have a known stack frame to switch to, the test spawns a second - thread, and tells the first thread to use the other thread's top frame. - - Change-Id: Ifc77848dc465fbd21324b9d44670833e09fe98c7 - Reviewed-By: Bruno Larsen - -2023-01-20 Simon Marchi - - gdb: add create_new_frame(frame_id) overload - The subsequent patches will need to call create_new_frame with an - existing frame_id representing a user created frame. They could call - the existing create_new_frame, passing both addresses, but it seems - nicer to have a version of the function that takes a frame_id directly. - - Change-Id: If31025314fec0c3e644703e4391a5ef8079e1a32 - Reviewed-By: Bruno Larsen - -2023-01-20 Simon Marchi - - gdb: add user-created frames to stash - A subsequent patch makes it possible for frame_info_ptr to reinflate - user-created frames. If two frame_info_ptr objects wrapping the same - user-created frame_info need to do reinflation, we want them to end up - pointing to the same frame_info instance, and not create two separate - frame_infos. Otherwise, GDB gets confused down the line, as the state - kept in one frame_info object starts differing from the other - frame_info. - - Achieve this by making create_new_frame place the user-created frames in - the frame stash. This way, when the second frame_info_ptr does - reinflation, it will find the existing frame_info object, created by the - other frame_info_ptr, in the frame stash. - - To make the frame stash differentiate between regular and user-created - frame infos which would otherwise be equal, change frame_addr_hash and - frame_id::operator== to account for frame_id::user_created_p. - - I made create_new_frame look up existing frames in the stash, and only - create one if it doesn't find one. The goal is to avoid the - "select-frame view"/"info frame view"/"frame view" commands from - overriding existing entries into the stash, should the user specify the - same frame more than once. This will also help in the subsequent patch - that makes frame_info_ptr capable of reinflating user-created frames. - It will be able to just call create_new_frame and it will do the right - thing. - - Change-Id: I14ba5799012056c007b4992ecb5c7adafd0c2404 - Reviewed-By: Bruno Larsen - -2023-01-20 Simon Marchi - - gdb: add frame_id::user_created_p - Later in this series, we'll need to differentiate frame ids for regular - frames (obtained from the target state and unwinding from it) vs frame - ids for user-created frames (created with create_new_frame). Add the - frame_id::user_created_p field to indicate a frame is user-created, and - set it in create_new_frame. - - The field is otherwise not used yet, so not changes in behavior are - expected. - - Change-Id: I60de3ce581ed01bf0fddb30dff9bd932840120c3 - Reviewed-By: Bruno Larsen - -2023-01-20 Simon Marchi - - gdb: move frame_info_ptr to frame.{c,h} - A patch later in this series will make frame_info_ptr access some - fields internal to frame_info, which we don't want to expose outside of - frame.c. Move the frame_info_ptr class to frame.h, and the definitions - to frame.c. Remove frame-info.c and frame-info.h. - - Change-Id: Ic5949759e6262ea0da6123858702d48fe5673fea - Reviewed-By: Bruno Larsen - -2023-01-20 Simon Marchi - - gdb: move call site types to call-site.h - I hesitated between putting the file in the dwarf2 directory (as - gdb/dwarf2/call-site.h) or in the common directory (as gdb/call-site.h). - The concept of call site is not DWARF-specific, another debug info - reader could provide this information. But as it is, the implementation - is a bit DWARF-specific, as one form it can take is a DWARF expression - and parameters can be defined using a DWARF register number. So I ended up - choosing to put it under dwarf2/. If another debug info reader ever - wants to provide call site information, we can introduce a layer of - abstraction between the "common" call site and the "dwarf2" call site. - - The copyright start year comes from the date `struct call_site` was - introduced. - - Change-Id: I1cd84aa581fbbf729edc91b20f7d7a6e0377014d - Reviewed-By: Bruno Larsen - -2023-01-20 Simon Marchi - - gdb: move sect_offset and cu_offset to dwarf2/types.h - I want to move the call_site stuff out of gdbtypes.h, to a new header - file, to break some cyclic include problem. The call_site stuff uses - cu_offset, also defined in gdbtypes.h, so cu_offset also needs to move - somewhere else (otherwise, call-site.h will need to include gdbtypes.h, - and we are back to square 1). I could move cu_offset to the future new - file dwarf2/call-site.h, but it doesn't sound like a good place for it, - at cu_offset is not specific to call sites, it's used throughout - dwarf2/. So, move it to its own file, dwarf2/types.h. For now, - gdbtypes.h includes dwarf2/types.h, but that will be removed once the - call site stuff is moved to its own file. - - Move sect_offset with it too. sect_offset is not a DWARF-specific - concept, but for the moment it is only used in dwarf2/. - - Change-Id: I1fd2a3b7b67dee789c4874244b044bde7db43d8e - Reviewed-By: Bruno Larsen - -2023-01-20 Simon Marchi - - gdb: remove language.h include from frame.h - This helps resolve some cyclic include problem later in the series. - The only language-related thing frame.h needs is enum language, and that - is in defs.h. - - Doing so reveals that a bunch of files were relying on frame.h to - include language.h, so fix the fallouts here and there. - - Change-Id: I178a7efec1953c2d088adb58483bade1f349b705 - Reviewed-By: Bruno Larsen - -2023-01-20 Simon Marchi - - gdb: move compile_instance to compile/compile.h - struct compile_instance needs to be visible to users, since we use - std::unique. language.c and c-lang.c currently - includes compile-internal.h for this reason, which kind of defeats the - purpose of having an "internal" header file. - - Change-Id: Iedffe5f1173b3de7bdc1be533ee2a68e6f6c549f - Reviewed-By: Bruno Larsen - -2023-01-20 Simon Marchi - - gdb: move type_map_instance to compile/compile.c - It's only used in compile/compile.c, it doesn't need to be in a header. - - Change-Id: Ic5bec996b7b0cd7130055d1e8ff238b5ac4292a3 - Reviewed-By: Bruno Larsen - -2023-01-20 Indu Bhagat - - Upload SFrame spec files as well - binutils/ - * README-how-to-make-a-release: Include sframe-spec html and pdf - files. - -2023-01-20 Tom Tromey - - Use bool in pc_in_* functions - I noticed that pc_in_unmapped_range had a weird return type -- it was - returning a CORE_ADDR but intending to return a bool. This patch - changes all the pc_in_* functions to return bool instead. - -2023-01-20 Tom Tromey - - Constify notif_client - It seems to me that a notif_client is read-only, so this patch changes - the code to use "const" everywhere. - -2023-01-20 Simon Marchi - - gdb: remove struct trad_frame forward declaration - I found this forward declaration for a struct that doesn't exist, remove - it. - - Change-Id: Ib9473435a949452160598035e5e0fe19fcdc4d20 - -2023-01-20 Tom Tromey - - Make gdb.ada/ptype_tagged_param.exp pass - gdb.ada/ptype_tagged_param.exp is failing for me on x86-64 Fedora 36. - However, it's actually generating the correct output -- it is just - that the test thinks that the "ptype" will not work because I do not - have the GNAT debuginfo installed. - - This patch changes the code to accept either result, and then to issue - a kfail as appropriate. - -2023-01-20 Simon Marchi - - gdb/dwarf: fix UBsan crash in read_subrange_type - When running gdb.ada/arrayptr.exp (and others) on Ubuntu 22.04, with the - `gnat-11` package installed (not `gnat`), with UBSan activated, I get: - - (gdb) break foo.adb:40 - /home/smarchi/src/binutils-gdb/gdb/dwarf2/read.c:17689:20: runtime error: shift exponent 127 is too large for 64-bit type 'long unsigned int' - - The problematic DIEs are: - - 0x00001460: DW_TAG_subrange_type - DW_AT_lower_bound [DW_FORM_data1] (0x00) - DW_AT_upper_bound [DW_FORM_data16] (ffffffffffffffff3f00000000000000) - DW_AT_name [DW_FORM_strp] ("foo__packed_array___XP7___XDLU_0__1180591620717411303423") - DW_AT_type [DW_FORM_ref4] (0x0000153f "long_long_long_unsigned") - DW_AT_GNAT_descriptive_type [DW_FORM_ref4] (0x0000147e) - DW_AT_artificial [DW_FORM_flag_present] (true) - - 0x0000153f: DW_TAG_base_type - DW_AT_byte_size [DW_FORM_data1] (0x10) - DW_AT_encoding [DW_FORM_data1] (DW_ATE_unsigned) - DW_AT_name [DW_FORM_strp] ("long_long_long_unsigned") - DW_AT_artificial [DW_FORM_flag_present] (true) - - When processed by this code: - - negative_mask = - -((ULONGEST) 1 << (base_type->length () * TARGET_CHAR_BIT - 1)); - if (low.kind () == PROP_CONST - && !base_type->is_unsigned () && (low.const_val () & negative_mask)) - low.set_const_val (low.const_val () | negative_mask); - - When the base type's length (16 bytes in this case) is larger than a - ULONGEST (typically 8 bytes), the bit shift is too large. - - My obvious fix is just to skip the fixup for base types larger than a - ULONGEST (8 bytes). I don't think we really handle constant attribute - values larger than 8 bytes anyway, so this is part of a much larger - problem. - - Add a test that replicates this situation, but uses bounds that fit in a - signed 64 bit, so we get a sensible result. - - Change-Id: I8d0a24f3edd83b44e0761a0ce38922d3e2e112fb - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29386 - -2023-01-20 Simon Marchi - - gdb/testsuite: add test for negative subrange bounds with unsigned form - I am looking at this code [1]: - - /* Normally, the DWARF producers are expected to use a signed - constant form (Eg. DW_FORM_sdata) to express negative bounds. - But this is unfortunately not always the case, as witnessed - with GCC, for instance, where the ambiguous DW_FORM_dataN form - is used instead. To work around that ambiguity, we treat - the bounds as signed, and thus sign-extend their values, when - the base type is signed. */ - negative_mask = - -((ULONGEST) 1 << (base_type->length () * TARGET_CHAR_BIT - 1)); - if (low.kind () == PROP_CONST - && !base_type->is_unsigned () && (low.const_val () & negative_mask)) - low.set_const_val (low.const_val () | negative_mask); - if (high.kind () == PROP_CONST - && !base_type->is_unsigned () && (high.const_val () & negative_mask)) - high.set_const_val (high.const_val () | negative_mask); - - Nothing in the testsuite seems to exercise it, as when I remove it, all - of gdb.dwarf2 still passes. And tests in other directories would be - compiler-dependent, so would rely on having a buggy compiler. - - Update gdb.dwarf2/subrange.exp to have a test for it. When removing the - code above, the new test fails with: - - ptype array_with_buggy_negative_bounds_type^M - type = array [240..244] of signed_byte^M - (gdb) FAIL: gdb.dwarf2/subrange.exp: ptype array_with_buggy_negative_bounds_type - - instead of the expected: - - ptype array_with_buggy_negative_bounds_type^M - type = array [-16..-12] of signed_byte^M - (gdb) PASS: gdb.dwarf2/subrange.exp: ptype array_with_buggy_negative_bounds_type - - [1] https://gitlab.com/gnutools/binutils-gdb/-/blob/5ea14aa4e53fa37f4ba4517497ed2c1e4c60dee2/gdb/dwarf2/read.c#L17681-17695 - - Change-Id: I1992a3ff0cb1e90fa8a9114dae6c591792f059c2 - -2023-01-20 Michael Matz - - Add testcase ld-elf/merge4 - to check a situation that once failed with the new section merging - when it mishandled offsets pointing into alignment padding in mergable - string sections (i.e. pointing to zeros). It made bootstrap.exp fail - but that depends on many factors to actually go wrong so this is a more - explicit variant of it. - -2023-01-20 Michael Matz - - arm32: Fix rodata-merge-map - the test expects a second, but useless, $d mapping symbol for - the partially merged section, and specifically disallows one - for the completely merged section. The new merging algorithm - makes it so that also the partially merged sections are conceptually - SEC_EXCLUDED, except the first merge section (e.g. as if the very - first object file already contains all strings). So that second mapping - symbol is now missing. It never was needed anyway. - - So, adjust the test. - -2023-01-20 Michael Matz - - Faster string merging - * use power-of-two hash table - * use better hash function (hashing 32bits at once and with better - mixing characteristics) - * use input-offset-to-entry maps instead of retaining full input - contents for lookup time - * don't reread SEC_MERGE section multiple times - * care for cache behaviour for the hot lookup routine - - The overall effect is less usage in libz and much faster string merging - itself. On a debug-info-enabled cc1 the effect at the time of this - writing on the machine I used was going from 14400 perf samples to 9300 - perf samples or from 3.7 seconds to 2.4 seconds, i.e. about 33% . - -2023-01-20 Frederic Cambus - - Add OpenBSD ARM GAS support. - -2023-01-20 Jan Beulich - - x86: split i386-gen's opcode hash entry struct - All glibc malloc() implementations I've checked have a smallest - allocation size worth of 3 pointers, with an increment worth of 2 - pointers. Hence mnemonics with multiple templates can be stored more - efficiently when maintaining the shared "name" field only in the actual - hash entry. (To express the shared nature, also convert "name" to by - pointer-to-const.) - - While doing the conversation also pull out common code from the involved - if/else construct in expand_templates(). - -2023-01-20 Jan Beulich - - x86: embed register and alike names in disassembler - Register names are (including their nul terminators) on average almost 4 - bytes long. Otoh no register name is longer than 8 bytes. Hence even for - 32-bit builds using a pointer is only slightly more space efficient than - embedding the strings. A level of indirection can be also avoided by - embedding the names as an array of 8 characters directly in the arrays, - and the number of base relocations in libopcodes.so (or PIE builds of - statically linked executables) goes down as well. - - To amortize for the otherwise reduced folding of string literals by the - linker, use att_names_seg[] in place of string literals in append_seg() - and OP_ESreg(). - -2023-01-20 Jan Beulich - - x86: embed register names in reg_entry - Register names are (including their nul terminators) on average almost 4 - bytes long. Otoh no register name is longer than 7 bytes. Hence even for - 32-bit builds using a pointer is only slightly more space efficient than - embedding the strings. A level of indirection can be also avoided by - embedding the names as an array of 8 characters directly in the struct, - and the number of base relocations in PIE builds of gas goes down as - well. - - x86: avoid strcmp() in a few places - Now that we have identifiers for the mnemonic strings we can avoid - strcmp() in a number of places, comparing the offsets into the mnemonic - string table instead. While doing this also - - convert a leftover strncmp() to startswith() (apparently an oversight - when rebasing the original patch introducing the startswith() uses), - - use the new shorthand for current_templates->start also elsewhere in - md_assemble() (valid up to the point where match_template() is - called). - - x86: absorb allocation in i386-gen - When generating the mnemonic string table we already set up an - identifier for the following entry in a number of cases. Re-use that on - the next loop iteration rather than re-doing allocation and conversion. - - x86: re-use insn mnemonic strings as much as possible - Compact the mnemonic string table such that the tails of longer - mnemonics are re-used for shorter ones, going beyond what compilers - would typically do, but matching what ELF linkers may do when processing - SHF_MERGE|SHF_STRINGS sections. This reduces table size by about 12.5%. - -2023-01-20 Jan Beulich - - x86: move insn mnemonics to a separate table - Using full pointers to reference the insn mnemonic strings is not very - efficient. With overall string size presently just slightly over 20k, - even a 16-bit value would suffice. Use "unsigned int" for now, as - there's no good use we could presently make of the otherwise saved 16 - bits. - - For 64-bit builds this reduces table size by 6.25% (prior to the recent - ISA extension additions it would have been 12.5%), with a similar effect - on cache occupation of table entries accessed. For PIE builds of gas - this also reduces the number of base relocations quite a bit (obviously - independent of bitness). - -2023-01-20 Jan Beulich - - x86: abstract out obtaining of a template's mnemonic - In preparation for changing the representation of the "name" field - introduce a wrapper function. This keeps the mechanical change separate - from the functional one. - -2023-01-20 GDB Administrator - - Automatic date update in version.in - -2023-01-19 Tom Tromey - - Use "maint ignore-probes" in no-libstdcxx-probe.exp - While looking at some test output, I saw that no-libstdcxx-probe.exp - was not being run. However, it occurred to me that Tom de Vries' new - "maint ignore-probes" command could be used to enable this test - unconditionally. - - Reviewed-by: Tom de Vries - -2023-01-19 Rainer Orth - - i386: Don't emit unsupported TLS relocs on Solaris - Emit R_386_TLS_LE and R_386_TLS_IE, instead of R_386_TLS_LE_32 and - R_386_TLS_IE_32, on Solaris. - - PR ld/13671 - * elf32-i386.c (elf_i386_tls_transition): Only emit R_386_TLS_LE, - R_386_TLS_IE on Solaris. - (elf_i386_relocate_section): Only use R_386_TLS_GD->R_386_TLS_LE - transition on Solaris. - - Co-Authored-By: H.J. Lu - -2023-01-19 Andrew Burgess - - GDB/testsuite: Expand for character string limiting options - Modify test cases that verify the operation of the array element limit - with character strings such that they are executed twice, once with the - `set print characters' option set to `elements' and the limit controlled - with the `set print elements' option, and then again with the limit - controlled with the `set print characters' option instead. Similarly - with the `-elements' and `-characters' options for the `print' command. - Additionally verify that said `print' command options combined yield the - expected result. - - Verify correct $_gdb_setting and $_gdb_setting_str values for the `print - characters' setting, in particular the `void' value for the `elements' - default, which has no corresponding integer value exposed. - - Add Guile and Python coverage for the `print characters' GDB setting. - - There are new tests for Ada and Pascal, as the string printing code for - these languages is different than the generic string printing code used - by other languages. Modula2 also has different string printing code, - but (a) this is similar to Pascal, and (b) there are no existing modula2 - tests written in Modula2, so I'm not sure how I'd even test the Modula2 - string printing. - - Co-Authored-By: Maciej W. Rozycki - Approved-By: Simon Marchi - -2023-01-19 Andrew Burgess - - GDB: Add a character string limiting option - This commit splits the `set/show print elements' option into two. We - retain `set/show print elements' for controlling how many elements of an - array we print, but a new `set/show print characters' setting is added - which is used for controlling how many characters of a string are - printed. - - The motivation behind this change is to allow users a finer level of - control over how data is printed, reflecting that, although strings can - be thought of as arrays of characters, users often want to treat these - two things differently. - - For compatibility reasons by default the `set/show print characters' - option is set to `elements', which makes the limit for character strings - follow the setting of the `set/show print elements' option, as it used - to. Using `set print characters' with any other value makes the limit - independent from the `set/show print elements' setting, however it can - be restored to the default with the `set print characters elements' - command at any time. - - A corresponding `-characters' option for the `print' command is added, - with the same semantics, i.e. one can use `elements' to make a given - `print' invocation follow the limit of elements, be it set with the - `-elements' option also given with the same invocation or taken from the - `set/show print elements' setting, for characters as well regardless of - the current setting of the `set/show print characters' option. - - The GDB changes are all pretty straightforward, just changing references - to the old 'print_max' to use a new `get_print_max_chars' helper which - figures out which of the two of `print_max' and `print_max_chars' values - to use. - - Likewise, the documentation is just updated to reference the new setting - where appropriate. - - To make people's life easier the message shown by `show print elements' - now indicates if the setting also applies to character strings: - - (gdb) set print characters elements - (gdb) show print elements - Limit on string chars or array elements to print is 200. - (gdb) set print characters unlimited - (gdb) show print elements - Limit on array elements to print is 200. - (gdb) - - and the help text shows the dependency as well: - - (gdb) help set print elements - Set limit on array elements to print. - "unlimited" causes there to be no limit. - This setting also applies to string chars when "print characters" - is set to "elements". - (gdb) - - In the testsuite there are two minor updates, one to add `-characters' - to the list of completions now shown for the `print' command, and a bare - minimum pair of checks for the right handling of `set print characters' - and `show print characters', copied from the corresponding checks for - `set print elements' and `show print elements' respectively. - - Co-Authored-By: Maciej W. Rozycki - Approved-By: Simon Marchi - -2023-01-19 Maciej W. Rozycki - - GDB: Allow arbitrary keywords in integer set commands - Rather than just `unlimited' allow the integer set commands (or command - options) to define arbitrary keywords for the user to use, removing - hardcoded arrangements for the `unlimited' keyword. - - Remove the confusingly named `var_zinteger', `var_zuinteger' and - `var_zuinteger_unlimited' `set'/`show' command variable types redefining - them in terms of `var_uinteger', `var_integer' and `var_pinteger', which - have the range of [0;UINT_MAX], [INT_MIN;INT_MAX], and [0;INT_MAX] each. - - Following existing practice `var_pinteger' allows extra negative values - to be used, however unlike `var_zuinteger_unlimited' any number of such - values can be defined rather than just `-1'. - - The "p" in `var_pinteger' stands for "positive", for the lack of a more - appropriate unambiguous letter, even though 0 obviously is not positive; - "n" would be confusing as to whether it stands for "non-negative" or - "negative". - - Add a new structure, `literal_def', the entries of which define extra - keywords allowed for a command and numerical values they correspond to. - Those values are not verified against the basic range supported by the - underlying variable type, allowing extra values to be allowed outside - that range, which may or may not be individually made visible to the - user. An optional value translation is possible with the structure to - follow the existing practice for some commands where user-entered 0 is - internally translated to UINT_MAX or INT_MAX. Such translation can now - be arbitrary. Literals defined by this structure are automatically used - for completion as necessary. - - So for example: - - const literal_def integer_unlimited_literals[] = - { - { "unlimited", INT_MAX, 0 }, - { nullptr } - }; - - defines an extra `unlimited' keyword and a user-visible 0 value, both of - which get translated to INT_MAX for the setting to be used with. - - Similarly: - - const literal_def zuinteger_unlimited_literals[] = - { - { "unlimited", -1, -1 }, - { nullptr } - }; - - defines the same keyword and a corresponding user-visible -1 value that - is used for the requested setting. If the last member were omitted (or - set to `{}') here, then only the keyword would be allowed for the user - to enter and while -1 would still be used internally trying to enter it - as a part of a command would result in an "integer -1 out of range" - error. - - Use said error message in all cases (citing the invalid value requested) - replacing "only -1 is allowed to set as unlimited" previously used for - `var_zuinteger_unlimited' settings only rather than propagating it to - `var_pinteger' type. It could only be used for the specific case where - a single extra `unlimited' keyword was defined standing for -1 and the - use of numeric equivalents is discouraged anyway as it is for historical - reasons only that they expose GDB internals, confusingly different - across variable types. Similarly update the "must be >= -1" Guile error - message. - - Redefine Guile and Python parameter types in terms of the new variable - types and interpret extra keywords as Scheme keywords and Python strings - used to communicate corresponding parameter values. Do not add a new - PARAM_INTEGER Guile parameter type, however do handle the `var_integer' - variable type now, permitting existing parameters defined by GDB proper, - such as `listsize', to be accessed from Scheme code. - - With these changes in place it should be trivial for a Scheme or Python - programmer to expand the syntax of the `make-parameter' command and the - `gdb.Parameter' class initializer to have arbitrary extra literals along - with their internal representation supplied. - - Update the testsuite accordingly. - - Approved-By: Simon Marchi - -2023-01-19 Indu Bhagat - - libsframe: Use AM_SILENT_RULES macro in configure.ac - Silence 'make' by default. - - libsframe/ - * configure.ac: Use AM_SILENT_RULES. - * configure: Regenerate. - -2023-01-19 Tom Tromey - - Remove some unused includes - I noticed a few spots that include gnu-stabs.h but that do not need - to. This patch removes these unnecessary includes. Tested by - rebuilding. - -2023-01-19 Tom de Vries - - [gdb/tdep, aarch64] Remove fp and sp reg aliases, add x31 reg alias - In aarch64-tdep.c we find these register aliases: - ... - { - /* 64-bit register names. */ - {"fp", AARCH64_FP_REGNUM}, - {"lr", AARCH64_LR_REGNUM}, - {"sp", AARCH64_SP_REGNUM}, - ... - - The sp alias is superfluous, because the canonical name of x31 is already sp. - - The fp alias is superfluous, because it's already taken by the default meaning - of fp, assigned here in _initialize_frame_reg: - ... - user_reg_add_builtin ("fp", value_of_builtin_frame_fp_reg, NULL); - ... - - Fix this by removing the fp and sp aliases. - - While we're at it, add an x31 alias for sp. - - Approved-By: Luis Machado - - Tested on aarch64-linux. - PR tdep/30012 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30012 - -2023-01-19 Tom de Vries - - [gdb/testsuite] Fix gdb.python/py-value-cc.exp for big endian - On s390x-linux, I run into: - ... - (gdb) python print(u[u_fields[0]])^M - 99^M - (gdb) PASS: gdb.python/py-value-cc.exp: u's first field via field - python print(u[u_fields[1]])^M - 0 '\000'^M - (gdb) FAIL: gdb.python/py-value-cc.exp: u's second field via field - ... - - There's a var u of this type: - ... - union U { - int a; - char c; - }; - ... - and after assigning 99 to u.a, the test-case expects u.c to contain 99 (which - it does on x86_64), but instead it contains 0. - - Fix this by instead assigning 0x63636363, to ensure that u.c == 99 for both - little and big endian. - - Tested on x86_64-linux and s390x-linux. - -2023-01-19 Alan Modra - - Reinitialise macro_nest - * input-scrub.c (input_scrub_begin): Init macro_nest. - -2023-01-19 Alan Modra - - PR 30022, concurrent builds can fail - So let's not copy .libs/libbfd.a to libbfd.a now that nothing in the - binutils-gdb source tries to link against it. - - PR 30022 - * Makefile.am (noinst_LIBRARIES, libbfd_a_SOURCES, stamp-lib), - (libbfd.a): Delete rules. - (CLEANFILES): Adjust to suit. - -2023-01-19 Indu Bhagat - - toplevel: Makefile.def: add install-strip dependency on libsframe - As noted in PR libsframe/30014 - FTBFS: install-strip fails because - bfdlib relinks and fails to find libsframe, the install time - dependencies of libbfd need to be updated. - - PR libsframe/30014 - * Makefile.def: Reflect that libsframe needs to installed before - libbfd. Reorder a bit to better track libsframe dependencies. - * Makefile.in: Regenerate. - -2023-01-19 Alan Modra - - The fuzzers have found the reloc special functions in coff-aarch64.c - All of them need a bfd_reloc_offset_in_range check before accessing - data + reloc_entry->address. This patch adds the missing checks and - sanity checks reloc offsets in coff_pe_aarch64_relocate_section too. - - All of them also need changing to support objdump -W calls to - bfd_simple_get_relocated_section_contents. At least, secrel_reloc - needs the support, the others might not be present in dwarf debug - sections. - - * coff-aarch64.c (coff_aarch64_rel21_reloc): Range check - reloc offset. Support final-linking. - (coff_aarch64_po12l_reloc): Likewise. - (coff_aarch64_addr32nb_reloc): Likewise. - (coff_aarch64_secrel_reloc): Likewise. - (coff_pe_aarch64_relocate_section): Range check reloc offset. - -2023-01-19 Alan Modra - - Correct coff-aarch64 howtos and delete unnecessary special functions - The remaining special functions are still broken except when called - by gas bfd_install_relocation. - - * coff-aarch64.c (coff_aarch64_addr64_reloc), - (coff_aarch64_addr32_reloc, coff_aarch64_branch26_reloc), - (coff_aarch64_branch19_reloc, coff_aarch64_branch14_reloc), - (coff_aarch64_po12a_reloc): Delete. - (HOWTO_INSTALL_ADDEND): Define as 1. - (HOW): Remove pcrel_off. Correct all the howtos. - (CALC_ADDEND): Define. - (coff_aarch64_rtype_to_howto): New function. - (coff_rtype_to_howto): Define. - -2023-01-19 Alan Modra - - coff-aarch64.c howtos - This is just a patch to fix overlong lines. Wrapping the HOWTO macro - in a new HOW macro helps in this. No functional changes here. - - * coff-aarch64.c (HOW): Define and use for reloc howtos. - -2023-01-19 Alan Modra - - howto install_addend - This adds a new flag to the reloc howtos that can be used to - incrementally change targets over to simple bfd_install_relocation - that just installs the addend without any weird adjustments. - I've made a few other changes to bfd_install_relocation, removing dead - code and comments that are really only applicable to - bfd_perform_relocation. - - There is also a reloc offset bounds check change. I've moved the - check to where data is accessed, as it seems reasonable to me to not - perform the check unless it is needed. There is precedence for this; - Relocations against absolute symbols already avoided the check. - - I also tried always performing the reloc offset check, and ran into - testsuite failures due to _NONE and _ALIGN relocs at the end of - sections. These likely would be fixed if all such reloc howtos had - size set to zero, but I would rather not edit lots of files when it - involves checking that target code does not use the size. - - * reloc.c (struct reloc_howto_struct): Add install_addend. - (HOWTO_INSTALL_ADDEND): Define. - (HOWTO): Init new field with HOWTO_INSTALL_ADDEND. - (bfd_install_relocation): Remove comments copied from - bfd_perform_relocation that aren't applicable here. Remove - code dealing with output_offset and output_section. Just set - relocation to addend if install_addend. Move reloc offset - bounds check to just before section data is accessed, avoiding - the check when data is not accessed. - * bfd-in2.h: Regenerate. - -2023-01-19 Mike Frysinger - - sim: info: convert verbose field to a bool - The verbose argument has always been an int treated as a bool, so - convert it to an explicit bool. Further, update the API docs to - match the reality that the verbose value is actually used by some - of the internal modules. - - sim: unify sim-signal.o building - Now that sim-main.h has been reduced significantly, we can remove it - from sim-signal.c and unify it across all boards since it compiles to - the same code. - - sim: v850: reduce extra header inclusion to igen files - Limit these extra header includes to only when specific igen files - include us until we can move the includes to the igen fils directly. - - sim: v850: drop redundant define - This is already in v850/local.mk, so we can drop it from sim-main.h. - -2023-01-19 Mark Wielaard - - sim: mn10300: minimize mn10300-sim.h include in sim-main.h - sim-main.h is special since it is one of the files automatically - included in igen generated files. But this means anything including - sim-main.h might get everything included just for the igen files. - - To prevent clashing symbols/defines only include sim-fpu.h, - sim-signal.h, mn10300-sim.h from sim-main.h if it is included - from one of the generated igen C files. Add explicit includes - of mn10300-sim.h, sim-fpu.h and/or sim-signal.h to dv-mn103cpu.c, - interp.c and op_utils.c. - -2023-01-19 GDB Administrator - - Automatic date update in version.in - -2023-01-18 Maciej W. Rozycki - - GDB: Add references to erased args in cli-decode.c - Complement commit 1d7fe7f01b93 ("gdb: Introduce setting construct within - cmd_list_element") and commit 702991711a91 ("gdb: Have setter and getter - callbacks for settings") and update inline documentation accordingly for - `add_set_or_show_cmd' and `add_setshow_cmd_full_erased', documenting the - `args' parameter and removing references to `var', `set_setting_func' - and `get_setting_func'. - - Approved-By: Simon Marchi - -2023-01-18 Maciej W. Rozycki - - GDB: Add missing inline documentation for `add_setshow_cmd_full' - Complement commit 1d7fe7f01b93 ("gdb: Introduce setting construct - within cmd_list_element") and add missing description for - `add_setshow_cmd_full'. - - GDB: Correct inline documentation for `add_setshow_cmd_full_erased' - Use proper English in the description of SET_LIST and SHOW_LIST. - -2023-01-18 Maciej W. Rozycki - - GDB: Fix documentation for `theclass' parameters in cli-decode.c - Rename CLASS to THECLASS in the documentation for `theclass' parameters - throughout cli-decode.c, complementing commit fe978cb071b4 ("C++ keyword - cleanliness, mostly auto-generated"). - - Approved-By: Simon Marchi - -2023-01-18 Tom Tromey - - Fix 'make TAGS' in gdbserver - PR build/29003 points out that "make TAGS" is broken in gdbserver. - This patch fixes the problem that is pointed out there, plus another - one I noticed while working on that -- namely that the "sed" computes - the wrong names for some source files. Finally, a couple of obsolete - variable references are removed. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29003 - -2023-01-18 Carl Love - - Revert "X86: reverse-finish fix" - This reverts commit b22548ddb30bfb167708e82d3bb932461c1b703a. - - This patch is being reverted since the patch series is causing regressions. - -2023-01-18 Carl Love - - Revert "PowerPC: fix for gdb.reverse/finish-precsave.exp and gdb.reverse/finish-reverse.exp" - This reverts commit 92e07580db6a5572573d5177ca23933064158f89. - - Reverting patch as the patch series is causing regressions. - -2023-01-18 Jan Vrany - - gdb: care for dynamic objfiles in build_id_bfd_get () - Accessing gdb.Objfile.build_id caused GDB to crash when objfile is - dynamic, that is created by JIT reader API. - - The issue was NULL-pointer dereferencing in build_id_bfd_get () because - dynamic objfiles have no underlaying BFD structure. This commit fixes - the problem by a NULL-check in build_id_bfd_get (). - -2023-01-18 Nick Clifton - - Speed up objcopy's note merging. - PR 29993 - * objcopy.c (merge_gnu_build_notes): Remember the last non-deleted note in order to speed up the scan for matching notes. - -2023-01-18 Mike Frysinger - - sim: ppc: drop local psim link - This has never been installed, and it's not clear anyone cares about - it in the local build dir (when the main program is sim/ppc/run), so - drop all the logic to simplify. - -2023-01-18 Mark Harmstone - - Use subsystem to distinguish between pei-arm-little and pei-arm-wince-little - Running objdump against a 32-bit ARM PE file currently needs - disambiguation, as it gets picked up by both pei-arm-little and - pei-arm-wince-little. - - This adds a check in pe_bfd_object_p so that the subsystem in the PE - header is used to do the disambiguation for us, so that WinCE images get - assigned to pei-arm-wince-little, and everything else to pei-arm-little. - -2023-01-18 Vladimir Mezentsev - - Revert "gprofng: PR29987 bfd/archive.c:1447: undefined reference to `filename_ncmp'" - This reverts commit c2a5d74050ea9d7897b4122ef57c627d395683b3. - -2023-01-18 GDB Administrator - - Automatic date update in version.in - -2023-01-17 Tom Tromey - - Remove two unused fields from gdbarch - When I converted gdbarch to use the registry, I forgot to remove the - two fields that were used to implement the previous approach. This - patch removes them. Tested by rebuilding. - - Use require in paramless.exp - The new paramless.exp test was not converted to the new "require" - approach. This patch fixes the problem. - -2023-01-17 Carl Love - - PowerPC: fix for gdb.reverse/finish-precsave.exp and gdb.reverse/finish-reverse.exp - PR record/29927 - reverse-finish requires two reverse next instructions to - reach previous source line - - PowerPC uses two entry points called the local entry point (LEP) and the - global entry point (GEP). Normally the LEP is used when calling a - function. However, if the table of contents (TOC) value in register 2 is - not valid the GEP is called to setup the TOC before execution continues at - the LEP. When executing in reverse, the function finish_backward sets the - break point at the alternate entry point (GEP). However if the forward - execution enters via the normal entry point (LEP), the reverse execution - never sees the break point at the GEP of the function. Reverse execution - continues until the next break point is encountered or the end of the - recorded log is reached causing gdb to stop at the wrong place. - - This patch adds a new address to struct execution_control_state to hold the - address of the alternate function start address, known as the GEP on - PowerPC. The finish_backwards function is updated. If the stopping point - is between the two entry points (the LEP and GEP on PowerPC), the stepping - range is set to execute back to the alternate entry point (GEP on PowerPC). - Otherwise, a breakpoint is inserted at the normal entry point (LEP on - PowerPC). - - Function process_event_stop_test checks uses a stepping range to stop - execution in the caller at the first instruction of the source code line. - Note, on systems that only support one entry point, the address of the two - entry points are the same. - - Test finish-reverse-next.exp is updated to include tests for the - reverse-finish command when the function is entered via the normal entry - point (i.e. the LEP) and the alternate entry point (i.e. the GEP). - - The patch has been tested on X86 and PowerPC with no regressions. - -2023-01-17 Carl Love - - X86: reverse-finish fix - PR record/29927 - reverse-finish requires two reverse next instructions to - reach previous source line - - Currently on X86, when executing the finish command in reverse, gdb does a - single step from the first instruction in the callee to get back to the - caller. GDB stops on the last instruction in the source code line where - the call was made. When stopped at the last instruction of the source code - line, a reverse next or step command will stop at the first instruction - of the same source code line thus requiring two step/next commands to - reach the previous source code line. It should only require one step/next - command to reach the previous source code line. - - By contrast, a reverse next or step command from the first line in a - function stops at the first instruction in the source code line where the - call was made. - - This patch fixes the reverse finish command so it will stop at the first - instruction of the source line where the function call was made. The - behavior on X86 for the reverse-finish command now matches doing a - reverse-next from the beginning of the function. - - The proceed_to_finish flag in struct thread_control_state is no longer - used. This patch removes the declaration, initialization and setting of - the flag. - - This patch requires a number of regression tests to be updated. Test - gdb.mi/mi-reverse.exp no longer needs to execute two steps to get to the - previous line. The gdb output for tests gdb.reverse/until-precsave.exp - and gdb.reverse/until-reverse.exp changed slightly. The expected result in - tests gdb.reverse/amd64-failcall-reverse.exp and - gdb.reverse/singlejmp-reverse.exp are updated to the correct expected - result. - - This patch adds a new test gdb.reverse/finish-reverse-next.exp to test the - reverse-finish command when returning from the entry point and from the - body of the function. - - The step_until proceedure in test gdb.reverse/step-indirect-call-thunk.exp - was moved to lib/gdb.exp and renamed cmd_until. - - The patch has been tested on X86 and PowerPC to verify no additional - regression failures occured. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29927 - -2023-01-17 Simon Marchi - - gdb/testsuite: expect SIGSEGV from top GDB spawn id - When testing with the native-extended-gdbserver, I get: - - Thread 1 "xgdb" received signal SIGSEGV, Segmentation fault. - 0x00007ffff6d828f2 in GC_find_limit_with_bound () from /usr/lib/x86_64-linux-gnu/libgc.so.1 - (gdb) FAIL: gdb.gdb/selftest.exp: xgdb is at prompt - - This is because the -re that is supposed to match this SIGSEGV is after - `-i $inferior_spawn_id`. On native, the top and bottom GDB are on the - same spawn id, so it ends up working. But with a gdbserver board, - that's not the case. Move the SIGSEGV -re before the `-i - $inferior_spawn_id` line, such that it matches what the top GDB outputs. - - Do the same fix in gdb.gdb/python-helper.exp. - - Change-Id: I3291630e218a5a3a6a47805b999ddbc9b968c927 - Approved-By: Tom Tromey - -2023-01-17 Tom Tromey - - Fix parameter-less template regression in new DWARF reader - PR c++/29896 points out a regression in the new DWARF reader. It does - not properly handle a case like "break fn", where "fn" is a template - function. - - This happens because the new index uses strncasecmp to compare. - However, to make this work correctly, we need a custom function that - ignores template parameters. - - This patch adds a custom comparison function and fixes the bug. A new - test case is included. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29896 - -2023-01-17 Tom Tromey - - Move hash_entry and eq_entry into cooked_index::do_finalize - I was briefly confused by the hash_entry and eq_entry functions in the - cooked index. They are only needed in a single method, and that - method already has a couple of local lambdas for a different hash - table. So, it seemed cleaner to move these there as well. - - Don't erase empty indices in DWARF reader - The DWARF reader has some code to remove empty indices. However, I - think this code has been obsolete since some earlier changes to - parallel_for_each. This patch removes this code. - - Avoid submitting empty tasks in parallel_for_each - I found that parallel_for_each would submit empty tasks to the thread - pool. For example, this can happen if the number of tasks is smaller - than the number of available threads. In the DWARF reader, this - resulted in the cooked index containing empty sub-indices. This patch - arranges to instead shrink the result vector and process the trailing - entries in the calling thread. - -2023-01-17 Stam Markianos-Wright - - gas: arm: Change warning message to not reference specific A-class architecture revision - We noticed that a warning message about the use of scalar fp16 - instructions being UNPREDICTABLE when conditionalized in an IT - block referenced the specific A-class architecture revision - ARMv8.2-A. - Many of these instructions are now also part of ARMv8.1-M, so - the warning message had become misleading. Here we just change - the message to not specify an architecture revision at all and - update all testing accordingly. This was done with a simple - find-n-replace within the binutils sources. No tests have - regressed for the arm target. - - gas/ChangeLog: - - * config/tc-arm.c (do_scalar_fp16_v82_encode): Remove - ARMv8.2-A from the warning message. - (do_neon_movhf): Likewise - * testsuite/gas/arm/armv8-2-fp16-scalar-bad.l: Likewise - * testsuite/gas/arm/mve-vaddsub-it-bad.l: Likewise - * testsuite/gas/arm/mve-vcvtne-it-bad.l: Likewise - * testsuite/gas/arm/mve-vcvtne-it.d: Likewise - -2023-01-17 Stam Markianos-Wright - - gas: arm: Fix a further IT-predicated vcvt issue in the presense of MVE vcvtn - Previously we had experienced issues with assembling a "VCVTNE" instruction - in the presence of the MVE architecture extension, because it could be - interpreted both as: - - * The base instruction VCVT + NE for IT predication when inside an IT block. - * The MVE instruction VCVTN + E in the Else of a VPT block. - - Given a C reproducer of: - ``` - int test_function(float value) - { - int ret_val = 10; - if (value != 0.0) - { - ret_val = (int) value; - } - return ret_val; - } - ``` - GCC generates a VCVTNE instruction based on the `truncsisf2_vfp` - pattern, which will look like: - `vcvtne.s32.f32 s-reg, s-reg` - This still triggers an error due to being misidentified as "vcvtn+e" - Similar errors were found with other type combinations and instruction - patterns (these have all been added to the testing of this patch). - - This class of errors was previously worked around by: - https://sourceware.org/pipermail/binutils/2020-August/112728.html - which addressed this by looking at the operand types, however, - that isn't adequate to cover all the extra cases that have been - found. Instead, we add some special-casing logic earlier when - the instructions are parsed that is conditional on whether we are - in a VPT block or not, when the instruction is parsed. - - gas/ChangeLog: - - * config/tc-arm.c (opcode_lookup): Add special vcvtn handling. - * testsuite/gas/arm/mve-vcvtne-it-bad.l: Add further testing. - * testsuite/gas/arm/mve-vcvtne-it-bad.s: Likewise. - * testsuite/gas/arm/mve-vcvtne-it.d: Likewise. - * testsuite/gas/arm/mve-vcvtne-it.s: Likewise. - -2023-01-17 Nick Clifton - - Fix snafu in previous delta for elf32-csky.c - -2023-01-17 Xianmiao Qu - - C-SKY: Fix machine flag. - * elf32-csky.c (elf32_csky_merge_attributes): Don't save and restore the ARCH attribute, it will actually clear the ARCH attribute. (csky_elf_merge_private_bfd_data): Store the machine flag correctly. - -2023-01-17 GDB Administrator - - Automatic date update in version.in - -2023-01-16 Enze Li - - libctf: update regexp to allow makeinfo to build document - While trying to build gdb on latest openSUSE Tumbleweed, I noticed the - following warning, - - checking for makeinfo... makeinfo --split-size=5000000 - configure: WARNING: - *** Makeinfo is too old. Info documentation will not be built. - - then I checked the version of makeinfo, it said, - ====== - $ makeinfo --version - texi2any (GNU texinfo) 7.0.1 - - Copyright (C) 2022 Free Software Foundation, Inc. - License GPLv3+: GNU GPL version 3 or later - This is free software: you are free to change and redistribute it. - There is NO WARRANTY, to the extent permitted by law. - ====== - - After digging a little bit, it became quite obvious that a dot is - missing in regexp that makes it impossible to match versions higher than - 7.0, and here's the solution: - - - | egrep 'texinfo[^0-9]*(6\.[3-9]|[7-9][0-9])' >/dev/null 2>&1; then - + | egrep 'texinfo[^0-9]*(6\.[3-9]|[7-9]\.[0-9])' >/dev/null 2>&1; then - - However, Eli pointed out that the solution above has another problem: it - will stop working when Texinfo 10.1 will be released. Meanwhile, he - suggested to solve this problem permanently. That is, we don't care - about the minor version for Texinfo > 6.9, we only care about the major - version. - - In this way, the problem will be resolved permanently, thanks to Eli. - - libctf/ChangeLog: - - * configure: Regenerated. - * configure.ac: Update regexp to match versions higher than 7.0. - -2023-01-16 Alan Modra - - Correct ld-pe/aarch64.d test output - "foo" is at 0x2010. This corrects the expected output for .long and - .word referencing foo, showing a problem with relocation handling. - - * testsuite/ld-pe/aarch64.d: Correct expected output. - -2023-01-16 Alan Modra - - Tidy gas/expr.c static state - * expr.c (seen, nr_seen): Make file scope. - (expr_begin): Clear seen, nr_seen, and expr_symbol_lines. - (expr_end): New function. - * expr.h (expr_end): Declare. - * output-file.c (output_file_close): Call expr_end. - * config/tc-hppa.c (expr_end): Rename to expr_parse_end. - * config/tc-mips.c: Likewise. - * config/tc-riscv.c: Likewise. - * config/tc-sparc.c: Likewise. - - Leftover hack from i960-coff - * reloc.c (bfd_perform_relocation, bfd_install_relocation): Remove - i960-coff target hack. - -2023-01-16 Alan Modra - - COFF CALC_ADDEND comment - Old COFF (and AOUT) targets have unusual relocation addends. - - * coffcode.h (): Describe COFF addends. - -2023-01-16 Alan Modra - - PR29991, MicroMIPS flag erased after align directives - PR 29991 - * config/tc-mips.c (s_align): Call file_mips_check_options and - mips_mark_labels. - * testsuite/gas/mips/align-after-label.s, - * testsuite/gas/mips/mips-align-after-label.d, - * testsuite/gas/mips/micromips-align-after-label.d: New test. - * testsuite/gas/mips/mips.exp: Run it. - -2023-01-16 Nick Clifton - - Update release making howto - - Updated translations for the gas and binutils sub-directories - -2023-01-16 Mike Frysinger - - sim: assume sys/stat.h always exists (via gnulib) - We have many uses of sys/stat.h that are unprotected by HAVE_SYS_STAT_H, - so this is more formalizing the reality that we require this header. - Since we switched to gnulib, it guarantees that a sys/stat.h exists - for us to include, so we're doubly OK. - - sim: formally assume unistd.h always exists (via gnulib) - We have many uses of unistd.h that are unprotected by HAVE_UNISTD_H, - so this is more formalizing the reality that we require this header. - Since we switched to gnulib, it guarantees that a unistd.h exists - for us to include, so we're doubly OK. - - sim: build: stop probing system extensions (ourselves) - This logic was added in order to expose the strsignal prototype for - nrun.c. Since then, we've migrated to gnulib as our portability layer, - and it takes care of probing system extensions for us, so there's no - need to duplicate the work. - -2023-01-16 Mike Frysinger - - sim: modules.c: fix generation after recent refactors - Add explicit arch-specific modules.c rules to keep the build from - generating an incorrect common/modules.c. Otherwise the pattern - rules would cascade such that it'd look for $arch/modules.o which - turned into common/modules.c which triggered the gen rule. - - My local testing of this code didn't catch this bug because of how - Automake manages .Po (dependency files) in incremental builds -- it - was adding extra rules that override the pattern rules which caused - the build to generate correct modules.c files. But when building - from a cold cache, the pattern rules would force common/modules.c to - be used leading to crashes at runtime. - -2023-01-16 GDB Administrator - - Automatic date update in version.in - -2023-01-15 Mark Wielaard - - sim: microblaze, mn10300: remove signal.h include in interp.c - signal.h isn't needed in microblaze and mn10300 interp.c - so don't include it. - -2023-01-15 Mike Frysinger - - sim: m32r: fix typos in stamp depends - Copying & pasting the first rule missed updating the dep to the right - stamp file. - - sim: igen: simplify build logic a little - Now that all ports (that use igen) build in the top-level and depend - on igen, we can move the conditional logic out of configure. We also - switch from noinst_LIBRARIES to EXTRA_LIBRARIES so that the library - is only built when needed (i.e. the igen tool is used). - - sim: build: drop depdir subdir hack - Now that all the ports compile some C files in their arch dirs, Automake - guarantees creating the depdir for us, so we can drop our configure hack. - - sim: common: simplify modules.c deps - Now that all ports (other than ppc) build in the top-level, we don't - need to expand all the modules.c targets as a recursive dep. Each - port depends on their respective file now, and the ppc port doesn't - use it at all. - - sim: common: move modules.c to source tracking - This makes sure the arch-specific modules.c wildcard is matched and - not the common/%.c so that we compile it correctly. It also makes - sure each subdir has depdir logic enabled. - - sim: common: move libcommon.a dep to ppc code - Rather than force this to be built ahead of time for all targets, - move the dep to the ppc code since it's the only user of it now. - - sim: build: drop most recursive build deps - Now that we build these objects in the top dir & generate modules.c - there, we don't need to generate them all first -- we can let the - normal dependency graph take care of building things in parallel. - - sim: common: move libcommon.a objects to sources - This simplifies the build logic and avoids an Automake bug where the - common_libcommon_a_OBJECTS variable isn't set in the arch libsim.a - DEPENDENCIES for targets that, alphabetically, come before "common". - We aren't affected by that bug with the current code, but as we move - things out of SIM_ALL_RECURSIVE_DEPS and rely on finer dependencies, - we will trip over it. - - sim: igen: simplify build dep - Now that all ports (other than ppc) build in the top-level, we don't - need to mark the igen tool as a recursive dep. Each port depends on - the tool if it actually uses it, and ppc doesn't use it at all. - - sim: common: simplify hw-config.h deps - Now that all ports (other than ppc) build in the top-level, we don't - need to expand all the hw-config.h targets as a recursive dep. Each - port depends on their respective header now, and the ppc port doesn't - use it at all. - - sim: build: drop AM_MAKEFLAGS settings - We don't have any recursive builds anymore, so we can drop this logic. - -2023-01-15 GDB Administrator - - Automatic date update in version.in - -2023-01-14 Tom Tromey - - Pass internal gdb flags to --configuration invocations - The test suite uses the --configuration flag to feature-test gdb. - However, when I added this, I neglected to pass the internal gdbflags - to this, causing an error, which then caused failures in the test - suite (which would not be seen if you'd ever run "make install"). - - This patch fixes the bug. Tested by removing my install tree first, - to verify that I could reproduce the failure. - -2023-01-14 Nick Clifton - - Update how-to-make-a-release file now that the 2.40 release is out - -2023-01-14 GDB Administrator - - Automatic date update in version.in - -2023-01-13 Mike Frysinger - - sim: build: delete Make-common.in logic - Now that all (other than ppc) build in the top-level, this logic is - unused, so punt it all. - -2023-01-13 Tom Tromey - - Rename to allow_tui_tests - This changes skip_tui_tests to invert the sense, and renames it to - allow_tui_tests. It also rewrites this function to use the output of - "gdb --configuration", and it adds a note about the state of the TUI - to that output. - - Rename to allow_guile_tests - This changes skip_guile_tests to invert the sense, and renames it to - allow_guile_tests. It also rewrites this proc to check the output of - "gdb --configuration", as was done for Python. Then it changes the - code to use "require" where possible. - - Rename to allow_hw_breakpoint_tests - This changes skip_hw_breakpoint_tests to invert the sense, and renames - it to allow_hw_breakpoint_tests. This also converts some tests to use - "require" -- I missed this particular check in the first series. - - Rename to allow_tsx_tests - This changes skip_tsx_tests to invert the sense, and renames it to - allow_tsx_tests. - - Rename to allow_shlib_tests - This changes skip_shlib_tests to invert the sense, and renames it to - allow_shlib_tests. - - Rename to allow_rust_tests - This changes skip_rust_tests to invert the sense, and renames it to - allow_rust_tests. - - Rename to allow_python_tests - This changes skip_python_tests to invert the sense, and renames it to - allow_python_tests. - - Rename to allow_perf_tests - This changes skip_perf_tests to invert the sense, and renames it to - allow_perf_tests. - - Rename to allow_opencl_tests - This changes skip_opencl_tests to invert the sense, and renames it to - allow_opencl_tests. - - Rename to allow_ifunc_tests - This changes skip_ifunc_tests to invert the sense, and renames it to - allow_ifunc_tests. - - Rename to allow_hw_watchpoint_tests - This changes skip_hw_watchpoint_tests to invert the sense, and renames - it to allow_hw_watchpoint_tests. - - Rename to allow_hw_watchpoint_multi_tests - This changes skip_hw_watchpoint_multi_tests to invert the sense, and - renames it to allow_hw_watchpoint_multi_tests. - - Rename to allow_hw_watchpoint_access_tests - This changes skip_hw_watchpoint_access_tests to invert the sense, and - renames it to allow_hw_watchpoint_access_tests. - - Rename to allow_go_tests - This changes skip_go_tests to invert the sense, and renames it to - allow_go_tests. - - Rename to allow_gdbserver_tests - This changes skip_gdbserver_tests to invert the sense, and renames it - to allow_gdbserver_tests. - - Rename to allow_fortran_tests - This changes skip_fortran_tests to invert the sense, and renames it to - allow_fortran_tests. - - Rename to allow_d_tests - This changes skip_d_tests to invert the sense, and renames it to - allow_d_tests. - - Rename to allow_dlmopen_tests - This changes skip_dlmopen_tests to invert the sense, and renames it to - allow_dlmopen_tests. - - Rename to allow_debuginfod_tests - This changes skip_debuginfod_tests to invert the sense, and renames it - to allow_debuginfod_tests. - - Rename to allow_ctf_tests - This changes skip_ctf_tests to invert the sense, and renames it to - allow_ctf_tests. - - Rename to allow_cplus_tests and allow_stl_tests - This changes skip_cplus_tests to invert the sense, and renames it to - allow_cplus_tests. This one also converts skip_stl_tests to - allow_stl_tests, as that was convenient to do at the same time. - - Rename to allow_btrace_tests - This changes skip_btrace_tests to invert the sense, and renames it to - allow_btrace_tests. - - Rename to allow_btrace_pt_tests - This changes skip_btrace_pt_tests to invert the sense, and renames it - to allow_btrace_pt_tests. - - Rename to allow_avx512fp16_tests - This changes skip_avx512fp16_tests to invert the sense, and renames it - to allow_avx512fp16_tests. - - Rename to allow_avx512bf16_tests - This changes skip_avx512bf16_tests to invert the sense, and renames it - to allow_avx512bf16_tests. - - Rename to allow_ada_tests - This changes skip_ada_tests to invert the sense, and renames it to - allow_ada_tests. - - Rename to allow_aarch64_sve_tests - This changes skip_aarch64_sve_tests to invert the sense, and renames - it to allow_aarch64_sve_tests. - - Rename to allow_xml_test - This changes gdb_skip_xml_test to invert the sense, and renames it to - allow_xml_test. - - Use "require" for Python tests - This changes various tests to use "require" for the Python feature. - -2023-01-13 Tom Tromey - - Fix latent bug in default_prompt_gdb_start - default_prompt_gdb_start mimics default_gdb_start, but does not set - the use_gdb_stub global. This caused one Python test to work only - because it used the ordinary gdb_start before later using - default_prompt_gdb_start. - - This patch updates default_prompt_gdb_start to set this global as - well. - -2023-01-13 Tom Tromey - - Remove mi_skip_python_tests - mi_skip_python_tests was necessary because skip_python_tests used the - running gdb, and so needed to know what prompt to expect. Now that - skip_python_tests has been rewritten, mi_skip_python_tests is no - longer needed. - - Rewrite skip_python_tests - This rewrites skip_python_tests to examine the output of - "gdb --configuration". This is a bit nicer because it - does not require an already-running gdb. - - Use require gnat_runtime_has_debug_info - This changes some tests to use "require gnat_runtime_has_debug_info". - - Use require !skip_debuginfod_tests - This changes some tests to use "require !skip_debuginfod_tests". - - Use require using_fission - This changes some tests to use "require using_fission". - - Use require target_can_use_run_cmd - This changes some tests to use "require target_can_use_run_cmd". - - Use require !skip_opencl_tests - This changes some tests to use "require !skip_opencl_tests". - - Use require !skip_perf_tests - This changes some tests to use "require !skip_perf_tests". - - Use require gdb_trace_common_supports_arch - This changes some tests to use "require gdb_trace_common_supports_arch". - - Use require gdb_skip_xml_test - This changes some tests to use "require gdb_skip_xml_test". - - Use require !gdb_debug_enabled - This changes some tests to use "require !gdb_debug_enabled". - - Use require is_c_compiler_gcc - This changes some tests to use "require is_c_compiler_gcc". - - Use require !skip_shlib_tests - This changes some tests to use "require !skip_shlib_tests". This patch - cleans up a few spots that were missed in the earlier patch. - - Use require !skip_gdbserver_tests - This changes some tests to use "require !skip_gdbserver_tests". - - Use require isnative - This changes some tests to use "require isnative". - - Use require can_spawn_for_attach - This changes some tests to use "require can_spawn_for_attach". - - Use require !use_gdb_stub - This changes some tests to use "require !use_gdb_stub". - - Use require support_go_compile - This changes some tests to use "require support_go_compile". - - Use require supports_get_siginfo_type - This changes some tests to use "require supports_get_siginfo_type". - - Use require can_single_step_to_signal_handler - This changes some tests to use "require can_single_step_to_signal_handler". - - Use require is_elf_target - This changes some tests to use "require is_elf_target". - - Use require is_amd64_regs_target - This changes some tests to use "require is_amd64_regs_target". - - Use require is_aarch32_target - This changes some tests to use "require is_aarch32_target". - - Use require is_aarch64_target - This changes some tests to use "require is_aarch64_target". - - Use require support_displaced_stepping - This changes some tests to use "require support_displaced_stepping". - - Use require !skip_avx_* - This changes some tests to use "require" with !skip_avx_*. - - Use require !skip_btrace_tests - This changes some tests to use "require !skip_btrace_tests". - - Use require !skip_btrace_pt_tests - This changes some tests to use "require !skip_btrace_pt_tests" and - "require !skip_tsx_tests". - - Use require !skip_aarch64_sve_tests - This changes some tests to use "require !skip_aarch64_sve_tests". - - Use require !skip_ifunc_tests - This changes some tests to use "require !skip_ifunc_tests". - - Use require !skip_hw_watchpoint_tests - This changes some tests to use "require !skip_hw_watchpoint_tests". - - Use require !skip_ctf_tests - This changes some tests to use "require !skip_ctf_tests". - - Use require !skip_d_tests - This changes some tests to use "require !skip_d_tests". - - Use require !skip_go_tests - This changes some tests to use "require !skip_go_tests". - - Use require !skip_ada_tests - This changes some tests to use "require !skip_ada_tests". - - Use require !skip_fortran_tests - This changes some tests to use "require !skip_fortran_tests". - - Use require !skip_rust_tests - This changes some tests to use "require !skip_rust_tests". - - Use require !skip_stl_tests - This changes some tests to use "require !skip_stl_tests". - - Use require !skip_dlmopen_tests - This changes some tests to use "require !skip_dlmopen_tests". - - Use require !skip_shlib_tests - This changes some tests to use "require !skip_shlib_tests". - - Use require !skip_cplus_tests - This changes some tests to use "require !skip_cplus_tests". - - Use require is_x86_like_target - This changes some tests to use "require is_x86_like_target". - - Use require dwarf2_support - This changes some tests to use "require dwarf2_support". - - Use require supports_process_record - This changes some tests to use "require supports_process_record". - - Use require supports_reverse - This changes some tests to use "require supports_reverse". - -2023-01-13 Tom Tromey - - Use unsupported in 'require' - This changes 'require' to use 'unsupported' rather than 'untested'. - The latter doesn't really seem to be correct according to the DejaGNU - documentation: - - Declares a test was not run. `untested' writes in the log file a - message beginning with _UNTESTED_, appending the `message' argument. - For example, you might use this in a dummy test whose only role is to - record that a test does not yet exist for some feature. - - The example there, and some text elsewhere, is what makes me think - this isn't a great fit. On the other hand, 'unsupported' says: - - Declares that a test case depends on some facility that does not exist - in the testing environment. - -2023-01-13 Tom Tromey - - Change 'require' to accept a list of predicates - This changes 'require' to accept a list of simple predicates. For - now, each predicate is just the name of a proc, optionally prefixed - with "!" to indicate that the result should be inverted. - - It's possible to make this fancier, but so far I haven't done so. One - idea I had is to allow a predicate to have associated text to display - on failure. Another is to convert the predicates that need a running - gdb (e.g., skip_python_tests) to start their own gdb, and then - 'require' could enforce the rule that gdb not be running when it is - called. - -2023-01-13 Tom Tromey - - Don't use ensure_gdb_index with require - This series changes 'require' to take a list of simple predicates. - This patch backs out the one use of 'require' that doesn't conform to - this -- calling ensure_gdb_index. - -2023-01-13 Vladimir Mezentsev - - gprofng: PR29987 bfd/archive.c:1447: undefined reference to `filename_ncmp' - gprofng/ChangeLog - 2023-01-12 Vladimir Mezentsev - - PR gprofng/29987 - * configure.ac: Remove dependencies on libbfd and libiberty. - * gprofng/src/Makefile.am: Likewise. - * configure: Rebuild. - * Makefile.in: Rebuild. - * src/Makefile.in: Rebuild. - * doc/Makefile.in: Rebuild. - * gp-display-html/Makefile.in: Rebuild. - -2023-01-13 Indu Bhagat - - libsframe: replace an strncat with strcat - Calling strncat with the size of the src string is not so meaningful. - The length argument to strncat should specify the remaining bytes - bytes in the destination; although in this case, it appears to be - unncessary altogether to use strncat in the first place. - - libsframe/ - * sframe-dump.c (dump_sframe_func_with_fres): Use of strcat is - just as fine. - -2023-01-13 Andrew Burgess - - gdbserver: add comments to read_inferior_memory function - Just adding some comments to the gdbserver read_inferior_memory - function. No actual code changes. - - gdb/infrun: add debug print in print_signal_received_reason - It would have helped me to see an infrun debug line being printed from - print_signal_received_reason, so I'm adding one. - -2023-01-13 Andrew Burgess - - gdb: int to bool conversion for normal_stop - Change the return type of normal_stop (infrun.c) from int to bool. - Update callers. - - I've also converted the (void) to () in the function declaration and - definition, given I was changing those lines anyway. - - There should be no user visible changes after this commit. - -2023-01-13 Nick Clifton - - Updated Romainian translation for the bfd sub-directory - -2023-01-13 GDB Administrator - - Automatic date update in version.in - -2023-01-12 Tom Tromey - - Disable ptype/o for dynamic types - A user pointed out that "ptype/o" of a certain Ada type -- while in C - mode -- caused gdb to crash. - - The bug here is that dynamic types can't really be printed this way. - This patch avoids the bug by disabling the "/o" feature in this case. - - Note that using "ptype/o" in this way makes sense for the time being, - because the Ada code doesn't support the "/o" feature (yet); and in - any case gdb should not crash. - -2023-01-12 Hans-Peter Nilsson - - ARM: Fix ld bloat introduced between binutils-2.38 and 2.39 - Since commit 9833b7757d24, "PR28824, relro security issues", - ELF_MAXPAGESIZE matters much more, with regards to layout of - the linked file. That commit fixed an actual bug, but also - exposes a problem for targets were that value is too high. - - For example, for ARM(32, a.k.a. "Aarch32") specifically - bfd_arch_arm, it's set to 64 KiB, making all Linux(/GNU) - targets pay an extra amount of up to 60 KiB of bloat in - DSO:s and executables. This matters when there are many - such files, and where storage is expensive. - - It's *mostly* bloat when using a Linux kernel, as ARM(32) is - a good example of an target where ELF_MAXPAGESIZE is set to - an extreme value for an obscure corner-case. The ARM - (32-bit) kernel has 4 KiB pages, has had that value forever, - and can't be configured to any other value. The use-case is - IIUC "Aarch32" emulation on an "Aarch64" (arm64) kernel, but - not just that, but a setup where the Linux page-size is - configured to something other than the *default* 4 KiB. Not - sure there actually any such systems in use, again with - both Aarch32 compatibility support and a non-4KiB pagesize, - with all the warnings in the kernel config and requiring the - "EXPERT" level set on. - - So, let's do like x86-64 in a2267dbfc9e1 "x86-64: Use only - one default max-page-size" and set ELF_MAXPAGESIZE to 4096. - - bfd: - * elf32-arm.c (ELF_MAXPAGESIZE): Always set to 0x1000. - -2023-01-12 Hans-Peter Nilsson - - ld/testsuite: Adjust for ELF_MAXPAGESIZE 0x1000 - Many tests reflect a setting of ELF_MAXPAGESIZE to 64 KiB. - With ELF_MAXPAGESIZE changed to 4 KiB, layout is sometimes - different and symbols end up in other places. Avoid churn - and regexpification of old test patterns by passing the - max-page-size setting active at the time. - - ld/testsuite: - - * testsuite/ld-arm/arm-elf.exp, - testsuite/ld-arm/non-contiguous-arm2.d, - testsuite/ld-arm/non-contiguous-arm3.d, - testsuite/ld-arm/non-contiguous-arm5.d, - testsuite/ld-arm/non-contiguous-arm6.d, - testsuite/ld-arm/thumb-plt-got.d, testsuite/ld-arm/thumb-plt.d: - Pass -z max-page-size=0x10000 explicitly to test that rely on - that value in output-matching patterns. - -2023-01-12 Nick Alcock - - libctf: ctf-link outdated input check faulty - This check has a pair of faults which, combined, can lead to memory - corruption. Firstly, it assumes that the values of the ctf_link_inputs - hash are ctf_dict_t's: they are not, they are ctf_link_input_t's, a much - shorter structure. So the flags check which is the core of this is - faulty (but happens, by chance, to give the right output on most - architectures, since usually we happen to get a 0 here, so the test that - checks this usually passes). Worse, the warning that is emitted when - the test fails is added to the wrong dict -- it's added to the input - dict, whose warning list is never consumed, rendering the whole check - useless. But the dict it adds to is still the wrong type, so we end up - overwriting something deep in memory (or, much more likely, - dereferencing a garbage pointer and crashing). - - Fixing both reveals another problem: the link input is an *archive* - consisting of multiple members, so we have to consider whether to check - all of them for the outdated-func-info thing we are checking here. - However, no compiler exists that emits a mixture of members with this - flag on and members with it off, and the linker always reserializes (and - upgrades) such things when it sees them: so all members in a given - archive must have the same value of the flag, so we only need to check - one member per input archive. - - libctf/ - PR libctf/29983 - * ctf-link.c (ctf_link_warn_outdated_inputs): Get the types of - members of ctf_link_inputs right, fixing a possible spurious - tesst failure / wild pointer deref / overwrite. Emit the - warning message into the right dict. - -2023-01-12 Nick Alcock - - libctf: skip the testsuite from inside dejagnu - The libctf testsuite uses Tcl try/catch to trap run_output errors. This - is only supported in reasonably recent Tcls, so we detect the lack of - try/catch and suppress the testsuite via an Automake conditional in its - absence. - - But this turns out not to work: Automake produces a check-DEJAGNU target - regardless of the value of this conditional and sticks it in an - unconditionally-executed part of the makefile, so the testsuite gets - executed anyway, and fails with a nasty-looking syntax error. We can't - disable it by taking "dejagnu" out of AUTOMAKE_OPTIONS, because if you - do that Automake stops you using RUNTEST, RUNTESTFLAGS and other - variables users would expect to work. - - So move to disabling the testsuite from inside the testsuite itself, - importing the value of the former Automake conditional as a Tcl variable - and exiting very early in default.exp if it's false. - - * configure.ac (TCL_TRY): No longer an Automake conditional. - Rename to... - (HAVE_TCL_TRY): ... this. - * Makefile.am: Drop TCL_TRY. - (development.exp): Set have_tcl_try. - * testsuite/config/default.exp: Exit if have_tcl_try is false. - - * configure: Regenerated. - * Makefile.in: Likewise. - -2023-01-12 Nick Alcock - - ctf: fix various dreadful typos in the ctf_archive format comments - When defining a format it helps to a) get the endianness right when you - explicitly state what it is and b) define things in terms of fields that - exist rather than fields that don't. - - (A bunch of changes of names during implementation were not reflected in - these comments...) - - Thanks to Jose "Eye of the Eagle" Marchesi for spotting these. - - include/ - * ctf.h (struct ctf_archive) [ctfa_ctfs]: The size element of - this is in little-endian byte order, not network byte order. - (struct ctf_archive_modent): This is positioned right after the - end fo the struct ctf_archive, not at the offset of a - nonexistent field. The number of elements in the array depends - on ctfa_ndicts, not another nonexistent field. - -2023-01-12 Nick Clifton - - Ensure that libbacktrace/allocfail.sh is not deleted when creating release tarballs. - * Makefile.am (CLEANFILES): Import patch from upstream to prevent - allocafail.sh from being removed when running 'make clean'. - -2023-01-12 Alan Modra - - Use __func__ rather than __FUNCTION__ - We already use C99's __func__ in places, use it more generally. This - patch doesn't change uses in the testsuite. I've also left one in - gold.h that is protected by GCC_VERSION < 4003. If any of the - remaining uses bothers anyone I invite patches. - - bfd/ - * bfd-in.h: Replace __FUNCTION__ with __func__. - * elf32-bfin.c: Likewise. - * elfnn-aarch64.c: Likewise. - * elfxx-sparc.c: Likewise. - * bfd-in2.h: Regenerate. - gas/ - * config/tc-cris.c: Replace __FUNCTION__ with __func__. - * config/tc-m68hc11.c: Likewise. - * config/tc-msp430.c: Likewise. - gold/ - * dwp.h: Replace __FUNCTION__ with __func__. - * gold.h: Likewise, except for use inside GCC_VERSION < 4003. - ld/ - * emultempl/pe.em: Replace __FUNCTION__ with __func__. - * emultempl/pep.em: Likewise. - * pe-dll.c: Likewise. - -2023-01-12 Alan Modra - - Remove myself as hppa32 maintainer - Reflects the reality that I haven't done much on hppa32 for years. - -2023-01-12 Mike Frysinger - - sim: build: drop subdir Makefile.in files - These aren't used anymore, so punt them all. - -2023-01-12 GDB Administrator - - Automatic date update in version.in - -2023-01-11 Simon Marchi - - gdb/doc: fix install-html with Texinfo 7 - Starting with Texinfo 7 (this commit [1]), the output directory for the - HTML doc format is gdb/doc/gdb_html, rather than gdb/doc/gdb previously. - This breaks the install-html target, which expects the HTML doc to be in - gdb/doc/gdb: - - $ make install-html MAKEINFO=makeinfo DESTDIR=/tmp/install - make[1]: Entering directory '/home/simark/build/binutils-gdb/gdb' - make[2]: Entering directory '/home/simark/build/binutils-gdb/gdb/doc' - makeinfo -DHAVE_MAKEINFO_CLICK --html -I /home/simark/src/binutils-gdb/gdb/doc/../../readline/readline/doc -I /home/simark/src/binutils-gdb/gdb/doc/../mi -I /home/simark/src/binutils-gdb/gdb/doc /home/simark/src/binutils-gdb/gdb/doc/gdb.texinfo - makeinfo -DHAVE_MAKEINFO_CLICK --html -I /home/simark/src/binutils-gdb/gdb/doc /home/simark/src/binutils-gdb/gdb/doc/stabs.texinfo - makeinfo -DHAVE_MAKEINFO_CLICK --html -I /home/simark/src/binutils-gdb/gdb/doc /home/simark/src/binutils-gdb/gdb/doc/annotate.texinfo - test -z "/usr/local/share/doc/gdb" || /bin/sh /home/simark/src/binutils-gdb/gdb/doc/../../mkinstalldirs "/tmp/install/usr/local/share/doc/gdb" - /usr/bin/install -c -m 644 '/home/simark/src/binutils-gdb/gdb/doc/gdb' '/tmp/install/usr/local/share/doc/gdb/gdb' - /usr/bin/install: cannot stat '/home/simark/src/binutils-gdb/gdb/doc/gdb': No such file or directory - /usr/bin/install -c -m 644 '/home/simark/src/binutils-gdb/gdb/doc/stabs' '/tmp/install/usr/local/share/doc/gdb/stabs' - /usr/bin/install: cannot stat '/home/simark/src/binutils-gdb/gdb/doc/stabs': No such file or directory - /usr/bin/install -c -m 644 '/home/simark/src/binutils-gdb/gdb/doc/annotate' '/tmp/install/usr/local/share/doc/gdb/annotate' - /usr/bin/install: cannot stat '/home/simark/src/binutils-gdb/gdb/doc/annotate': No such file or directory - make[2]: *** [Makefile:278: install-html] Error 1 - make[2]: Leaving directory '/home/simark/build/binutils-gdb/gdb/doc' - make[1]: *** [Makefile:2240: subdir_do] Error 1 - make[1]: Leaving directory '/home/simark/build/binutils-gdb/gdb' - make: *** [Makefile:2006: install-html] Error 2 - - Fix this by adding -o switches to the HTML targets, to force the output - directories. - - [1] https://git.savannah.gnu.org/cgit/texinfo.git/commit/?id=a868421baf9c44227c43490687f8d6b8d6c95414 - - Change-Id: Ie147dc7b4a52eb2348005b8dc006a41b0784621f - -2023-01-11 Thiago Jung Bauermann - - gdb: Update gdbarch.py with latest changes in gdbarch.c - Commit 2b16913cdca2 ("gdb: make gdbarch_alloc take ownership of the tdep") - changed gdbarch.c without updating gdbarch.py. As a result, running - gdbarch.py reverts those changes and causes the build to fail. - - So change gdbarch.py to generate the current version of gdbarch.c. - - Approved-By: Simon Marchi - -2023-01-11 Tom Tromey - - Set _WIN32_WINNT in common.m4 configure check - GCC recently added support for the Windows thread model, enabling - libstdc++ to support Windows natively. However, this supporrt - requires a version of Windows later than the minimum version that is - supported by GDB. - - PR build/29966 points out that the GDB configure test for std::thread - does not work in this situation, because _WIN32_WINNT is not defined - in test program, and so seems to be fine. - - This patch is an attempt to fix the problem, by using the same setting - for _WIN32_WINNT at configure time as is used at build time. - - I don't have access to one of the older systems so I don't think I can - truly test this. I did do a mingw cross build, though. I'm going to - ask the bug reporter to test it. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29966 - -2023-01-11 Simon Marchi - - [gdb/testsuite] Fix regexp in gdb.threads/dlopen-libpthread.exp - Fix regexp in gdb.threads/dlopen-libpthread.exp: - 'libpthread\\.so' -> '/libpthread\\.so'. - - Tested on x86_64-linux. - -2023-01-11 Alan Modra - - Fix XPASS weak symbols on x86_64-mingw32 - Fixes commit 16fea92ccd99. - - * testsuite/ld-scripts/weak.exp: Don't xfail x86_64 PE targets. - Do xfail other PE OS triplets by moving code setting xfails. - -2023-01-11 Nick Clifton - - Fix a potential illegal memory access in the BFD library when parsing a corrupt DWARF file. - PR 29988 - * dwarf2.c (read_indexed_address): Fix check for an out of range - offset. - -2023-01-11 Tom de Vries - - [gdb/testsuite] Fix gdb.threads/dlopen-libpthread.exp for upstream glibc, again - On an x86_64 laptop running ubuntu 22.04.1 with unity desktop: - ... - $ echo $XDG_CURRENT_DESKTOP - Unity:Unity7:ubuntu - ... - I have: - ... - $ echo $LD_PRELOAD - libgtk3-nocsd.so.0 - ... - due to package gtk3-nocsd, a package recommended by unity-session. - - Consequently, for each exec these dependencies are pulled in, including - libpthread.so.0: - ... - $ lddtree /lib/x86_64-linux-gnu/libgtk3-nocsd.so.0 - libgtk3-nocsd.so.0 => /lib/x86_64-linux-gnu/libgtk3-nocsd.so.0 (interpreter => none) - libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 - libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 - libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 - ld-linux-x86-64.so.2 => /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 - ... - - So, while test-case gdb.threads/dlopen-libpthread.exp appears to run ok: - ... - # of expected passes 12 - # of unsupported tests 1 - ... - with LD_PRELOAD="" we have instead: - ... - (gdb) PASS: gdb.threads/dlopen-libpthread.exp: continue to breakpoint: notify - info sharedlibrary^M - From To Syms Read Shared Object Library^M - $hex $hex Yes /lib64/ld-linux-x86-64.so.2^M - $hex $hex Yes /lib/x86_64-linux-gnu/libc.so.6^M - $hex $hex Yes dlopen-libpthread.so^M - (gdb) FAIL: gdb.threads/dlopen-libpthread.exp: libpthread.so found - ... - - The problem is that libpthread is expected as dependency of - dlopen-libpthread.so, but it's missing: - ... - $ lddtree dlopen-libpthread.so - dlopen-libpthread.so => ./dlopen-libpthread.so (interpreter => none) - libc.so.6 => $outputs/gdb.threads/dlopen-libpthread/dlopen-libpthread.so.d/libc.so.6 - ld-linux-x86-64.so.2 => /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 - ... - due to having glibc 2.35, which has libpthread integrated into libc. - - Fix this by: - - adding a proc has_dependency - - using [has_dependency $exec libpthread.so] as hint that libpthread - may be preloaded - - using ![has_dependency $shlib libpthread.so] to detect that - the libpthread.so dependency is missing. - - Also add a missing return after untested "no matching probes". - - Tested on x86_64-linux, with and without LD_PRELOAD="". - -2023-01-11 Jan Beulich - - gas/RISC-V: adjust assembler for opcode table re-ordering - PR gas/29940 - - With the single-operand JAL entry now sitting ahead of the two-operand - one, the parsing of a two-operand insn would first try to parse an 'a'- - style operand, resulting in the insertion of bogus (and otherwise - unused) undefined symbols in the symbol table, having register names. - Since 'a' is used as 1st operand only with J and JAL, and since JAL is - the only insn _also_ allowing for a register as 1st operand (and then - there being a 2nd one), special case this parsing aspect right there. - - Reviewed-by: Palmer Dabbelt - -2023-01-11 Alan Modra - - Tidy some global bfd state used by gas - * subsegs.c (subsegs_end): Clear abs and und userdata. - -2023-01-11 Alan Modra - - now_seg after closing output file - now_seg, a pointer into the output file sections, isn't valid after - the output file is closed. gas doesn't and shouldn't use now_seg - after this point of course, but let's be safe. - - * output-file.c (output_file_close): Clear now_seg and now_subseg. - -2023-01-11 GDB Administrator - - Automatic date update in version.in - -2023-01-10 Tom Tromey - - Fix bug in 'say_where' transform - The patch to change say_where into a method introduced a bug. This - patch fixes it. - -2023-01-10 Mark Harmstone - - gas: Restore tc_pe_dwarf2_emit_offset for pe-aarch64 - Restores tc_pe_dwarf2_emit_offset in tc-aarch64.c, which is needed to - make sure that DWARF offsets are encoded correctly (they're secrels in - COFF). There were remnants of this there before, but they were removed - by Jedidiah's original patch - presumably because we didn't yet have - .secrel32. - -2023-01-10 Mark Harmstone - - Add aarch64-w64-mingw32 target - This adds a mingw target for aarch64, including windres and dlltool. - - Note that the old value of jmp_aarch64_bytes was wrong, and this does - the same thing as MSVC does. - -2023-01-10 Mark Harmstone - - Add .secrel32 for pe-aarch64 - Adds the .secrel32 pseudo-directive and its corresponding relocation. - - Add pe-aarch64 relocations - This adds the remaining pe-aarch64 relocations, and gets them working. - It also brings in the constant directives from ELF, as otherwise .word - would be 2 rather than 4 bytes, and .xword and .dword wouldn't be - defined. - -2023-01-10 Mark Harmstone - - Fix size of external_reloc for pe-aarch64 - This patch series finishes off the work by Jedidiah Thompson, and adds - support for creating aarch64 PE images. - - This should be essentially complete: I've used this to create a "hello - world" Windows program in asm, and (with GCC patches) a UEFI program in - C. I think the only things missing are the .secidx relocation, which is - needed for PDBs, and the SEH pseudos used for C++ exceptions. - - This first patch fixes the size of RELSZ; I'm not sure why it was 14 in - the first place. This is the size of the "Base Relocation Block" in - https://learn.microsoft.com/en-us/windows/win32/debug/pe-format, and - AFAIK should be 10 for everything. - -2023-01-10 Rohr, Stephan - - gdb/dwarf2: Fix 'rw_pieced_value' for values casted to different type. - The 'rw_pieced_value' function is executed when fetching a (lazy) - variable described by 'DW_OP_piece' or 'DW_OP_bit_piece'. The - function checks the 'type' and 'enclosing_type' fields of the value - for identity. - - * The 'type' field describes the type of a value. - * In most cases, the 'enclosing_type' field is identical to the - 'type' field. - * Scenarios where the 'type' and 'enclosing_type' of an object - differ are described in 'gdb/value.c'. Possible cases are: - * If a value represents a C++ object, then the 'type' field - gives the object's compile-time type. If the object actually - belongs to some class derived from `type', perhaps with other - base classes and additional members, then `type' is just a - subobject of the real thing, and the full object is probably - larger than `type' would suggest. - * If 'type' is a dynamic class (i.e. one with a vtable), then GDB - can actually determine the object's run-time type by looking at - the run-time type information in the vtable. GDB may then elect - to read the entire object. - * If the user casts a variable to a different type - (e.g. 'print ( []) '), the value's type is - updated before reading the value. - - If a lazy value is fetched, GDB allocates space based on the enclosing - type's length and typically reads the 'full' object. This is not - implemented for pieced values and causes an internal error if 'type' - and 'enclosing_type' of a value are not identical. - - However, GDB can read the value based on its type. Thus, this patch - fixes the previously mentioned cases by removing the check for identity. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28605 - - gdb/ChangeLog: - 2022-04-13 Stephan Rohr - - * dwarf2/loc.c (rw_pieced_value): Fix check on 'type' and - 'enlcosing_type' when reading pieced value 'v'. - - gdb/testsuite/ChangeLog: - 2022-04-13 Stephan Rohr - - * gdb.dwarf2/shortpiece.exp: Added test cases. - -2023-01-10 Tom Tromey - - Convert say_where to method on code_breakpoint - 'say_where' is only useful (and only called for) code breakpoints, so - convert it to be a protected method on code_breakpoint. - -2023-01-10 Simon Marchi - - gdb/doc: use @value{GDBP} in some spots - Examples are supposed to use @value{GDBP} instead of the literal "(gdb)" - (many of them already do). Update a bunch of spots where it wasn't the - case. - - Change-Id: I601adaad61fd277a5fceea1759e49cede72e456d - -2023-01-10 Simon Marchi - - gdb/doc: use @value{GDBN} in some spots - Change some spots to use "@value{GDBN}" instead of just "GDB". - - Change-Id: I3fc26438e603538271cf33e4d148be5fda9ece7e - -2023-01-10 Simon Marchi - - gdb/doc: some whitespace fixes - For consistency, replace tabs with spaces in all gdb.texinfo menus. - - Change-Id: I0801a72cf82a8afe49ec842244f42d30719634ce - -2023-01-10 Stefan Schulze Frielinghaus - - IBM zSystems: Fix offset relative to static TLS - For local exec TLS relocations of the form foo@NTPOFF+x the addend was - ignored. - - bfd/ChangeLog: - - * elf32-s390.c (elf_s390_relocate_section): Honor addend for - R_390_TLS_LE32. - * elf64-s390.c (elf_s390_relocate_section): Honor addend for - R_390_TLS_LE64. - - ld/ChangeLog: - - * testsuite/ld-s390/reloctlsle-1.d: New test. - * testsuite/ld-s390/reloctlsle-1.s: New test. - -2023-01-10 Pekka Seppänen - - PR 29981 references to init.texi - -2023-01-10 Alan Modra - - Re: Move bfd_init to bfd.c - Commit b1c95bc4dd73 resulted in - ...bfd.texi:246: @include: could not find init.texi - which went unnoticed due to not building in a clean directory. - - This fixes the problem by moving bfd_init earlier, giving it a - doc node, and stitching the nodes back together. - - * bfd.c (bfd_init): Move earlier. Give it a doc inode. - Adjust other inodes to suit. - * doc/bfd.texi: Don't include init.texi. Adjust nodes to suit. - -2023-01-10 Mike Frysinger - - sim: disable recursive make in (most) subdirs - Now that all (other than ppc) build in the top-level, we can disable - the recursive make calls to them. This speeds things up nicely. - - sim: common: move test-hw-events to top-level build - This is an internal developer target that isn't normally compiled, - but it can still be occasionally useful. Move it to the top-level - build so we can kill off common/Make-common.in. - - sim: move arch-specific file compilation of common/ files to top-level - - sim: v850: move arch-specific file compilation to top-level - The arch-specific compiler flags are duplicated, but they'll be cleaned - up once we move all subdir compiles to the top-level. - - sim: sh: move arch-specific file compilation to top-level - - sim: rx: move arch-specific file compilation to top-level - The arch-specific flags are only used by the arch-specific modules, - not the common/ files, so we can delete them too. - - sim: rl78: move arch-specific file compilation to top-level - - sim: riscv: move arch-specific file compilation to top-level - The arch-specific compiler flags are duplicated, but they'll be cleaned - up once we move all subdir compiles to the top-level. - - sim: pru: move arch-specific file compilation to top-level - - sim: or1k: move arch-specific file compilation to top-level - The arch-specific compiler flags are duplicated, but they'll be cleaned - up once we move all subdir compiles to the top-level. - - sim: msp430: move arch-specific file compilation to top-level - - sim: moxie: move arch-specific file compilation to top-level - The arch-specific flags are only used by the arch-specific modules, - not the common/ files, so we can delete them too. - - sim: mn10300: move arch-specific file compilation to top-level - The arch-specific compiler flags are duplicated, but they'll be cleaned - up once we move all subdir compiles to the top-level. - - sim: mips: move arch-specific file compilation to top-level - The arch-specific compiler flags are duplicated, but they'll be cleaned - up once we move all subdir compiles to the top-level. - - sim: microblaze: move arch-specific file compilation to top-level - - sim: mcore: move arch-specific file compilation to top-level - - sim: m68hc11: move arch-specific file compilation to top-level - The arch-specific compiler flags are duplicated, but they'll be cleaned - up once we move all subdir compiles to the top-level. - - sim: m32r: move arch-specific file compilation to top-level - - sim: m32c: move arch-specific file compilation to top-level - The arch-specific flags are only used by the arch-specific modules, - not the common/ files, so we can delete them too. - - sim: lm32: move arch-specific file compilation to top-level - - sim: iq2000: move arch-specific file compilation to top-level - - sim: h8300: move arch-specific file compilation to top-level - - sim: ft32: move arch-specific file compilation to top-level - - sim: frv: move arch-specific file compilation to top-level - The arch-specific flags are only used by the arch-specific modules, - not the common/ files, so we can delete them too. - - sim: example-synacor: move arch-specific file compilation to top-level - - sim: erc32: move arch-specific file compilation to top-level - The arch-specific flags are only used by the arch-specific modules, - not the common/ files, so we can delete them too. - - sim: d10v: move arch-specific file compilation to top-level - - sim: cris: move arch-specific file compilation to top-level - - sim: cr16: move arch-specific file compilation to top-level - - sim: bfin: move arch-specific file compilation to top-level - The arch-specific flags are only used by the arch-specific modules, - not the common/ files, so we can delete them too. - - sim: bpf: move arch-specific file compilation to top-level - We can drop the arch-specific rules from the subdir as they're no - longer used. - - sim: avr: move arch-specific file compilation to top-level - - sim: arm: move arch-specific file compilation to top-level - The arch-specific flags are only used by the arch-specific modules, - not the common/ files, so we can delete them too. - - sim: aarch64: move arch-specific file compilation to top-level - - sim: build: add basic framework for compiling arch objects in top-level - The code so far has been assuming that we only compile common/ objects. - Now that we're ready to compile arch-specific objects, refactor some of - the flags & checks a bit to support both. - - sim: modules.c: move generation to top-level - Now that all arches create libsim.a from the top-level, we have full - access to their inputs, and can move the actual generation from the - subdir up to the top-level. This avoids recursive makes and will - help simplify state passing between the two. - - sim: build: drop common/nrun.o subdir hack - Now that all the subdirs handle their own builds, we can drop this - common rule as it's unused, and we don't want to use it anymore. - - sim: build: drop support for creating libsim.a in subdirs - Now that all ports have moved to creating libsim.a in the top-level, - drop all the support code to create it in a subdir. - -2023-01-10 Mike Frysinger - - sim: v850: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: sh: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: rx: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: rl78: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: riscv: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: pru: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: or1k: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: msp430: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: moxie: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: mn10300: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: mips: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - - The mips code is a little more tricky than others because, for multi-run - targets, it generates the list of sources & objects on the fly in the - configure script. - -2023-01-10 Mike Frysinger - - sim: microblaze: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: mcore: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: m68hc11: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: m32r: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: m32c: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: lm32: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: iq2000: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: h8300: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: ft32: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: frv: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: example-synacor: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: erc32: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: d10v: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: cris: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: cr16: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: bpf: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: bfin: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: avr: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: arm: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: aarch64: move libsim.a creation to top-level - The objects are still compiled in the subdir, but the creation of the - archive itself is in the top-level. This is a required step before we - can move compilation itself up, and makes it easier to review. - - The downside is that each object compile is a recursive make instead of - a single one. On my 4 core system, it adds ~100msec to the build per - port, so it's not great, but it shouldn't be a big deal. This will go - away of course once the top-level compiles objects. - -2023-01-10 Mike Frysinger - - sim: build: drop support for subdir extra deps - Nothing uses this hook anymore, so punt it. It was largely used to - track generated files (which we do in the top-level now) and extra - header files (which we use automake depgen for now). - -2023-01-10 Mike Frysinger - - sim: modules: trigger generation from top-level - Add rules for tracking generated subdir modules.c files. This doesn't - actually generate the file from the top-level, but allows us to add - rules that need to be ordered wrt it. Once those changes land, we can - rework this to actually generate from the top-level. - - This currently builds off of the objects that go into the libsim.a as - we don't build those from the top-level either. Once we migrate that - up, we can switch this to the source files directly. It's a bit hacky - overall, but makes it easier to migrate things in smaller chunks, and - we aren't going to keep this logic long term. - -2023-01-10 Aaron Merey - - gdb/linespec.c: Fix missing source file during breakpoint re-set - During breakpoint re-setting, the source_filename of an - explicit_location_spec is used to lookup the symtabs associated with - the breakpoint being re-set. This source_filename is compared with each - known symtab filename in order to retrieve the breakpoint's symtabs. - - However the source_filename may have been originally copied from a - symtab's fullname (the path where GDB found the source file) when the - breakpoint was first created. If a breakpoint symtab's filename and - fullname differ and there is no substitute-path rule that converts the - fullname to the filename, this will cause a NOT_FOUND_ERROR to be thrown - during re-setting. - - Fix this by using a symtab's filename to set the explicit_location_spec - source_filename instead of the symtab's fullname. - -2023-01-10 Aaron Merey - - gdb/linespec.c: Fix -Wmaybe-uninitialized warning - Although the bool want_start_sal isn't actually used without being assigned - a value, initialize it to be false in order to prevent the following - -Wmaybe-uninitialized warning: - - linespec.c: In function ‘void minsym_found(linespec_state*, objfile*, minimal_symbol*, std::vector*)’: - linespec.c:4150:19: warning: ‘want_start_sal’ may be used uninitialized [-Wmaybe-uninitialized] - 4150 | if (is_function && want_start_sal) - -2023-01-10 GDB Administrator - - Automatic date update in version.in - -2023-01-09 Alan Modra - - Set dwarf2 stash pointer earlier - This fixes a memory leak in the vanishingly rare cases (found by - fuzzers of course) when something goes wrong in the save_section_vma, - htab_create_alloc or alloc_trie_leaf calls before *pinfo is written. - If *pinfo is not written, _bfd_dwarf2_cleanup_debug_info won't be able - to free that memory. - - * dwarf2.c (_bfd_dwarf2_slurp_debug_info): Save stash pointer - on setting up stash. - -2023-01-09 Alan Modra - - peXXigen.c sanity checks - Also fix a memory leak, and make some style changes. I tend to read - (sizeof * x) as a multiplication of two variables, which I would not - do if binutils followed the gcc coding conventions consistently (see - https://gcc.gnu.org/codingconventions.html#Expressions). (sizeof *x) - looks a lot better to me, or even (sizeof (*x)) which I've used here. - - * peXXigen.c (get_contents_sanity_check): New function. - (pe_print_idata): Use it here.. - (pe_print_edata): ..and here. Free data on error return. - (rsrc_parse_entry): Check entry size read from file. - (rsrc_parse_entries): Style fixes. - (rsrc_process_section): Use bfd_malloc_and_get_section. - (_bfd_XXi_final_link_postscript): Likewise. - -2023-01-09 Alan Modra - - Move mips_refhi_list to bfd tdata - Similar to commit c799eddb3512, but for mips-ecoff. mips-ecoff is - marked obsolete, but we still allow reading of these object files in - a number of mips targets. - - * coff-mips.c (struct mips_hi, mips_refhi_list): Delete. - (mips_refhi_reloc, mips_reflo_reloc): Access mips_refhi_list - in ecoff_data. - * ecoff.c (_bfd_ecoff_close_and_cleanup): New function. - * libecoff.h (struct mips_hi): Moved from coff-mips.c. - (struct ecoff_tdata): Add mips_refhi_list. - (_bfd_ecoff_close_and_cleanup): Declare. - -2023-01-09 Alan Modra - - Move bfd_init to bfd.c - init.c contains just one function that doesn't do much. Move it to - bfd.c and give it something to do, initialising static state. So far - the only initialisation is for bfd.c static variables. - - The idea behind reinitialising state is to see whether some set of - flaky oss-fuzz crashes go away. oss-fuzz stresses binutils in ways - that can't occur in reality, feeding multiple testcases into the - internals of binutils. So one testcase may affect the result of the - next testcase. - - * init.c: Delete file. Move bfd_init to.. - * bfd.c (bfd_init): ..here. Init static variables. - * Makefile.am (BFD32_LIBS): Remove init.lo. - (BFD32_LIBS_CFILES, BFD_H_FILES): Remove init.c. - * doc/local.mk: Remove mention of init.texi and init.c. - * Makefile.in: Regenerate. - * bfd-in2.h: Regenerate. - * po/SRC-POTFILES.in: Regenerate. - -2023-01-09 Tom Tromey - - Fix crash with C++ qualified names - PR c++/29503 points out that something like "b->Base::member" will - crash when 'b' does not have pointer type. This seems to be a simple - oversight in eval_op_member. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29503 - Reviewed-By: Bruno Larsen - -2023-01-09 Simon Marchi - - gdb/doc: fix @code{GDBN} -> @value{GDBN} - Change-Id: I928d6f8d6e6bc41d8c7ddbfae8f6ae0614f4993e - -2023-01-09 Christophe Lyon - - Skip ld/pr23169 test on arm. - The test is already skipped on several targets (including AArch64) - because it's invalid. - - * testsuite/ld-ifunc/ifunc.exp: Skip pr23169 on arm. - -2023-01-09 Christophe Lyon - - Fix PR18841 ifunc relocation ordering - In order to get the ifunc relocs properly sorted the correct class - needs to be returned. The code mimics what has been done for AArch64. - - Fixes: - FAIL: Run pr18841 with libpr18841b.so - FAIL: Run pr18841 with libpr18841c.so - FAIL: Run pr18841 with libpr18841bn.so (-z now) - FAIL: Run pr18841 with libpr18841cn.so (-z now) - - bfd/ - PR ld/18841 - * elf32-arm.c (elf32_arm_reloc_type_class): Return - reloc_class_ifunc for ifunc symbols. - - ld/testsuite/ - * ld-arm/ifunc-12.rd: Update relocations order. - * ld-arm/ifunc-3.rd: Likewise. - * ld-arm/ifunc-4.rd: Likewise. - -2023-01-09 Nick Clifton - - Updated transaltions for the gprof and binutils sub-directories - -2023-01-09 Tankut Baris Aktemur - - testsuite: add -O0 to Intel compilers if no 'optimize' option is given - icpx/icx give the following warning if '-g' is used without '-O'. - - icpx: remark: Note that use of '-g' without any optimization-level - option will turn off most compiler optimizations similar to use of - '-O0'; use '-Rno-debug-disables-optimization' to disable this - remark [-Rdebug-disables-optimization] - - The warning makes dejagnu think that compilation has failed. E.g.: - - $ make check TESTS="gdb.cp/local.exp" RUNTESTFLAGS="CXX_FOR_TARGET='icpx' CC_FOR_TARGET=icx" - ... - gdb compile failed, icpx: remark: Note that use of '-g' without any optimization-level option will turn off most compiler optimizations similar to use of '-O0'; use '-Rno-debug-disables-optimization' to disable this remark [-Rdebug-disables-optimization] - - === gdb Summary === - - # of untested testcases 1 - - Furthermore, if no -O flag is passed, icx/icc optimize - the code by default. This breaks assumptions in many GDB tests - that the code is unoptimized by default. E.g.: - - $ make check TESTS="gdb.cp/cmpd-minsyms.exp" RUNTESTFLAGS="CXX_FOR_TARGET='icpx' CC_FOR_TARGET=icx" - ... - FAIL: gdb.cp/cmpd-minsyms.exp: gdb_breakpoint: set breakpoint at 'GDB::a() const' - FAIL: gdb.cp/cmpd-minsyms.exp: gdb_breakpoint: set breakpoint at 'GDB::b() volatile' - FAIL: gdb.cp/cmpd-minsyms.exp: gdb_breakpoint: set breakpoint at 'GDB::c() const volatile' - FAIL: gdb.cp/cmpd-minsyms.exp: gdb_breakpoint: set breakpoint at GDB::operator == - FAIL: gdb.cp/cmpd-minsyms.exp: gdb_breakpoint: set breakpoint at GDB::operator==(GDB const&) - FAIL: gdb.cp/cmpd-minsyms.exp: gdb_breakpoint: set breakpoint at GDB::harder(char) - FAIL: gdb.cp/cmpd-minsyms.exp: gdb_breakpoint: set breakpoint at GDB::harder(int) - FAIL: gdb.cp/cmpd-minsyms.exp: gdb_breakpoint: set breakpoint at "int GDB::even_harder(char)" - FAIL: gdb.cp/cmpd-minsyms.exp: gdb_breakpoint: set breakpoint at GDB::simple() - - === gdb Summary === - - # of expected passes 1 - # of unexpected failures 9 - - To fix both problems, pass the -O0 flag explicitly, if no optimization - option is given. - - With this patch we get, e.g.: - - $ make check TESTS="gdb.cp/cmpd-minsyms.exp gdb.cp/local.exp" RUNTESTFLAGS="CXX_FOR_TARGET='icpx' CC_FOR_TARGET=icx" - ... - === gdb Summary === - - # of expected passes 19 - # of known failures 1 - - Approved-By: Tom Tromey - -2023-01-09 Nils-Christian Kempke - - testsuite: handle icc and icpc deprecated remarks - Starting with icc/icpc version 2021.7.0 and higher both compilers emit a - deprecation remark when used. E.g. - - >> icc --version - icc: remark #10441: The Intel(R) C++ Compiler Classic (ICC) is - deprecated and will be removed from product release in the second half - of 2023. The Intel(R) oneAPI DPC++/C++ Compiler (ICX) is the recommended - compiler moving forward. Please transition to use this compiler. Use - '-diag-disable=10441' to disable this message. - icc (ICC) 2021.7.0 20220713 - Copyright (C) 1985-2022 Intel Corporation. All rights reserved. - - >> icpc --version - icpc: remark #10441: The Intel(R) C++ Compiler Classic (ICC) is - deprecated ... - icpc (ICC) 2021.7.0 20220720 - Copyright (C) 1985-2022 Intel Corporation. All rights reserved. - - As the testsuite compile fails when unexpected output by the compiler is - seen this change in the compiler breaks all existing icc and icpc tests. - This patch makes the gdb testsuite more forgiving by a) allowing the - output of the remark when trying to figure out the compiler version - and by b) adding '-diag-disable=10441' to the compile command whenever - gdb_compile is called without the intention to detect the compiler. - - Approved-By: Tom Tromey - -2023-01-09 GDB Administrator - - Automatic date update in version.in - -2023-01-08 Alan Modra - - PR29972, inconsistent format specification in singular form - PR 29972 - * readelf.c (process_dynamic_section): Correct format string. - -2023-01-08 GDB Administrator - - Automatic date update in version.in - -2023-01-07 GDB Administrator - - Automatic date update in version.in - -2023-01-06 Indu Bhagat - - sframe: fix the defined SFRAME_FRE_TYPE_*_LIMIT constants - An earlier commit 3f107464 defined the SFRAME_FRE_TYPE_*_LIMIT - constants. These constants are used (by gas and libsframe) to pick an - SFrame FRE type based on the function size. Those constants, however, - were buggy, causing the generated SFrame sections to be bloated as - SFRAME_FRE_TYPE_ADDR2/SFRAME_FRE_TYPE_ADDR4 got chosen more often than - necessary. - - gas/ - * sframe-opt.c (sframe_estimate_size_before_relax): Use - typecast. - (sframe_convert_frag): Likewise. - - libsframe/ - * sframe.c (sframe_calc_fre_type): Use a more appropriate type - for argument. Adjust the check for SFRAME_FRE_TYPE_ADDR4_LIMIT - to keep it warning-free but meaningful. - - include/ - * sframe-api.h (sframe_calc_fre_type): Use a more appropriate - type for the argument. - * sframe.h (SFRAME_FRE_TYPE_ADDR1_LIMIT): Correct the constant. - (SFRAME_FRE_TYPE_ADDR2_LIMIT): Likewise. - (SFRAME_FRE_TYPE_ADDR4_LIMIT): Likewise. - -2023-01-06 Indu Bhagat - - libsframe: adjust an incorrect check in flip_sframe - When sframe_encoder_write needs to flip the buffer containing the SFrame - section before writing, it is not necessary that the SFrame FDES are in - the order of their sfde_func_start_fre_off. On the contrary, SFrame - FDEs will be sorted in the order of their start address. So, remove - this incorrect assumption which is basically assuming that the last - sfde_func_start_fre_off seen will help determine the end of the flipped - buffer. - - The function now keeps track of the bytes_flipped and then compares it with - the expected value. Also, added two more checks at appropriate places: - - check that the SFrame FDE read is within bounds - - check that the SFrame FRE read is within bounds - - libsframe/ - - * sframe.c (flip_sframe): Adjust an incorrect check. - Add other checks to ensure reads are within the buffer size. - -2023-01-06 Jan Beulich - - ld: yet another PDB build fix (or workaround) - Older bash looks to improperly deal with backslashes in here-documents, - leaving them in place on the escaped double quotes inside the parameter - expansion. Convert to a model without using such a construct, by simply - splitting the here-documents into three ones. - -2023-01-06 Nick Clifton - - Updated Bulgarian and Russian translations for LD and BFD respectively - -2023-01-06 Alan Modra - - Fix an aout memory leak - * aoutx.h (aout_bfd_free_cached_info): Free line_buf. - - Tidy pe flag in coff_data - Make it a bool, use obj_pe accessor everywhere. - -2023-01-06 Alan Modra - - Make coff backend data read-only - The bfd_coff_backend_data struct should be read-only, the only thing - preventing this is that objcopy writes to one of the fields, - _bfd_coff_long_section_names. This patch creates a copy of the field - in bfd coff_obj_tdata, which makes more sense anyway. When enabling - long section names the intent is to do so for a particular bfd, not - for all bfds that might happen to be using the target xvec. - - bfd/ - * coffcode.h: Update coff long section name comment. - (bfd_coff_set_long_section_names_allowed): Use macro accessor - to set flag. - (bfd_coff_set_long_section_names_disallowed): Tidy. - (coff_backend_info): Return a const pointer. - (bfd_coff_std_swap_table, ticoff0_swap_table, ticoff1_swap_table), - (bigobj_swap_table): Make const. - (bfd_coff_long_section_names): Use tdata copy. - (coff_mkobject): Set long_section_names from coff_backend_info. - * coff-go32.c (_bfd_go32_mkobject): Likewise. - * peicode.h (pe_mkobject): Likewise. - * coff-sh.c (bfd_coff_small_swap_table): Make const. - * libcoff-in.h (struct coff_tdata): Add long_section_names, - reorder fields. - * libcoff.h: Regenerate. - binutils/ - * objcopy.c (set_long_section_mode): Move earlier in file. - (copy_object): Call set_long_section_mode here, after setting - output format. - (copy_file): Don't call set_long_section_mode. - -2023-01-06 Bruno Larsen - - gdb/c++: Detect ambiguous variables in imported namespaces - When running gdb.cp/nsusing.cc and stopping at line 17, we can ask GDB - to print x and get a compiler-dependent answer. Using gcc 12.2.1, GDB - will print M::x, and using clang 16.0.0 prints N::x. Not only is this - behavior confusing to users, it is also not consistent with compiler - behaviors, which would warn that using x is ambiguous at this point. - - This commit makes GDB behavior consistent with compilers. it achieves - this by making it so instead of exiting early when finding any symbol - with the correct name, GDB continues searching through all include - directives, storing all matching symbols in a relational map betwen the - mangled name and the found symbols. - - If the resulting map has more than one entry, GDB says that the - reference is ambiguous and lists all possibilities. Otherwise it returns - the block_symbol structure for the desired symbol, or an empty struct if - nothing was found. - - The commit also changes gdb.cp/nsusing.exp to test the ambiguous - detection. - -2023-01-06 Bruno Larsen - - gdb/mi: add no-history stop reason - When executing in reverse and runs out of recorded history, GDB prints - a warning to the user, but does not add a reason in the stopped record, - for example: - - *stopped,frame={addr="0x000000000040113e",func="main",args=[],file="/home/blarsen/Documents/fsf_build/gdb/testsuite/../../../binutils-gdb/gdb/testsuite/gdb.reverse/solib-reverse.c",fullname="/home/blarsen/Documents/binutils-gdb/gdb/testsuite/gdb.reverse/solib-reverse.c",line="27",arch="i386:x86-64"},thread-id="1",stopped-threads="all",core="1" - - This problem was reported as record/29260. - - This commit adds the reason no-history to the record, making it easier - for interfaces using the mi interpreter to report the result. It also - changes the test gdb.mi/mi-reverse.exp to test that the reason shows up - correctly. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29260 - -2023-01-06 Bruno Larsen - - gdb/testsuite: Fix FAILs in gdb.linespec/cpcompletion.exp when using clang - When using clang 16.0.0 to test gdb.linespec/cpcompletion.exp, I get 99 - unexpected failures. They all fail to produce a complete list of - completion options for a function, either overload2_function, - overload3_function or anon_ns_function. This happens because clang is - optimizing them away, since they are never used. - - Fix this by adding __attribute__((used)) to all declarations to the - aforementioned functions. - -2023-01-06 Clément Chigot - - configure: remove dependencies on gmp and mpfr when gdb is disabled - Since 991180627851801f1999d1ebbc0e569a17e47c74, the configure checks - about GMP and MPFR for gdb builds have been moved to the toplevel - configure. - However, it doesn't take into account the --disable-gdb option. Meaning - that a build without gdb will require these libraries even if not - needed. - - ChangeLog: - - * configure.ac: Skip GMP and MPFR when --disable-gdb is - provided. - * configure: Regenerate. - -2023-01-06 GDB Administrator - - Automatic date update in version.in - -2023-01-05 Simon Marchi - - gdbsupport: fix scoped_debug_start_end's move constructor - I spotted a problem with scoped_debug_start_end's move constructor. - When constructing a scoped_debug_start_end through it, it doesn't - disable the moved-from object, meaning there are now two objects that - will do the side-effects of decrementing the debug_print_depth global - and printing the "end" message. Decrementing the debug_print_depth - global twice is actually problematic, because the increments and - decrements get out of sync, meaning we should hit this assertion, in - theory: - - gdb_assert (debug_print_depth > 0); - - However, in practice, we don't see that. This is because despite the - move constructor being required for this to compile: - - template - static inline scoped_debug_start_end ATTRIBUTE_NULL_PRINTF (6, 7) - make_scoped_debug_start_end (PT &&pred, const char *module, const char *func, - const char *start_prefix, - const char *end_prefix, const char *fmt, ...) - { - va_list args; - va_start (args, fmt); - auto res = scoped_debug_start_end (pred, module, func, start_prefix, - end_prefix, fmt, args); - va_end (args); - - return res; - } - - ... it is never actually called, because compilers elide the move - constructors all the way (the scoped_debug_start_end gets constructed - directly in the instance of the top-level caller). To confirm this, I - built GDB with -fno-elide-constructors, and now I see it: - - /home/simark/src/binutils-gdb/gdb/../gdbsupport/common-debug.h:147: internal-error: ~scoped_debug_start_end: Assertion `debug_print_depth > 0' failed. - - #9 0x00005614ba5f17c3 in internal_error_loc (file=0x5614b8749960 "/home/simark/src/binutils-gdb/gdb/../gdbsupport/common-debug.h", line=147, fmt=0x5614b8733fa0 "%s: Assertion `%s' failed.") at /home/simark/src/binutils-gdb/gdbsupport/errors.cc:58 - #10 0x00005614b8e1b2e5 in scoped_debug_start_end::~scoped_debug_start_end (this=0x7ffc6c5e7b40, __in_chrg=) at /home/simark/src/binutils-gdb/gdb/../gdbsupport/common-debug.h:147 - #11 0x00005614b96dbe34 in make_scoped_debug_start_end (pred=@0x5614baad7200: true, module=0x5614b891d840 "infrun", func=0x5614b891d800 "infrun_debug_show_threads", start_prefix=0x5614b891d7c0 "enter", end_prefix=0x5614b891d780 "exit", fmt=0x0) at /home/simark/src/binutils-gdb/gdb/../gdbsupport/common-debug.h:235 - - Fix this by adding an m_disabled field to scoped_debug_start_end, and - setting it in the move constructor. - - Change-Id: Ie5213269c584837f751d2d11de831f45ae4a899f - -2023-01-05 Simon Marchi - - gdbsupport: add gdb::string_view_hash - Add the string_view_hash type, which will be useful to be able to use - gdb::string_view as std::unordered_map keys. - - Use it in gdb/symtab.c, to exercise it. - - Change-Id: Id69a466ab19a9f6620b5df8a2dd29b5cddd94c00 - Approved-By: Andrew Burgess - -2023-01-05 Simon Marchi - - gdbsupport: move fast_hash to gdbsupport/common-utils.h - The following patch adds a hash type for gdb::string_view in gdbsupport, - which will use the fast_hash function. Move the latter to gdbsupport. - - Change-Id: Id74510e17801e775bd5ffa5f443713d79adf14ad - Approved-By: Andrew Burgess - -2023-01-05 Simon Marchi - - gdbsupport: move libxxhash configure check to gdbsupport - The following patch moves the fast_hash function, which uses libxxhash, - to gdbsupport. Move the libxxhash configure check to gdbsupport (and - transitively to gdbserver). - - Change-Id: I242499e50c8cd6fe9f51e6e92dc53a1b3daaa96e - Approved-By: Andrew Burgess - -2023-01-05 Simon Marchi - - gdb: make gdbarch_alloc take ownership of the tdep - It's currently not clear how the ownership of gdbarch_tdep objects - works. In fact, nothing ever takes ownership of it. This is mostly - fine because we never free gdbarch objects, and thus we never free - gdbarch_tdep objects. There is an exception to that however: when - initialization fails, we do free the gdbarch object that is not going to - be used, and we free the tdep too. Currently, i386 and s390 do it. - - To make things clearer, change gdbarch_alloc so that it takes ownership - of the tdep. The tdep is thus automatically freed if the gdbarch is - freed. - - Change all gdbarch initialization functions to pass a new gdbarch_tdep - object to gdbarch_alloc and then retrieve a non-owning reference from - the gdbarch object. - - Before this patch, the xtensa architecture had a single global instance - of xtensa_gdbarch_tdep. Since we need to pass a dynamically allocated - gdbarch_tdep_base instance to gdbarch_alloc, remove this global - instance, and dynamically allocate one as needed, like we do for all - other architectures. Make the `rmap` array externally visible and - rename it to the less collision-prone `xtensa_rmap` name. - - Change-Id: Id3d70493ef80ce4bdff701c57636f4c79ed8aea2 - Approved-By: Andrew Burgess - -2023-01-05 Simon Marchi - - gdb/testsuite: add back needed -re clause in gdb_breakpoint - Commit 4b9728be ("gdb: use gdb_test_multiple in gdb_breakpoint") caused, - amongst others: - - (gdb) break 1^M - No line 1 in the current file.^M - Make breakpoint pending on future shared library load? (y or [n]) n^M - (gdb) FAIL: gdb.dwarf2/dw2-main-no-line-number.exp: gdb_breakpoint: set breakpoint at 1 - FAIL: gdb.dwarf2/dw2-main-no-line-number.exp: !$breakpoint_at_missing_lineno_set - - This is because it removed one empty -re clause (matching just the - prompt) that is necessary after replying "n" to the pending breakpoint - question. Add this clause back. - - Change-Id: Ibfaa059d58bbea660bc29f0547e2f75c323fcbc6 - Approved-By: Tom de Vries - -2023-01-05 Tom de Vries - - [gdb/python] Avoid queue.SimpleQueue for python 3.6 - On openSUSE Leap 15.4 with python 3.6, the gdb.dap/basic-dap.exp test-case - fails as follows: - ... - ERROR: eof reading json header - while executing - "error "eof reading json header"" - invoked from within - "expect { - -i exp19 -timeout 10 - -re "^Content-Length: (\[0-9\]+)\r\n" { - set length $expect_out(1,string) - exp_continue - } - -re "^(\[^\r\n\]+)..." - ("uplevel" body line 1) - invoked from within - "uplevel $body" NONE eof reading json header - UNRESOLVED: gdb.dap/basic-dap.exp: startup - initialize - ... - - Investigation using a "catch throw" shows that: - ... - (gdb) - at gdb/python/py-utils.c:396 - 396 error (_("Error occurred in Python: %s"), msg.get ()); - (gdb) p msg.get () - $1 = 0x2b91d10 "module 'queue' has no attribute 'SimpleQueue'" - ... - - The python class queue.SimpleQueue was introduced in python 3.7. - - Fix this by falling back to queue.Queue for python <= 3.6. - - Tested on x86_64-linux, by successfully running the test-case: - ... - # of expected passes 47 - ... - -2023-01-05 Tom Tromey - - Add type to expression dump of symbol - I recently had cause to dump some expressions from gdb. I got output - like this: - - Operation: BINOP_GTR - Operation: OP_VAR_VALUE - Block symbol: - Symbol: small_value - Block: 0x39b4c20 - Operation: OP_LONG - Operation: OP_LONG - Type: int - Constant: 0x0000000000000014 - - This is ok, but it would have been handy to see the type of the - symbol. This patch adds this information. - - Reviewed-By: Bruno Larsen - -2023-01-05 Nick Clifton - - Remove Stephen Casner as the PDP11 maintainer. - - Add an extra emulation called arm64pe to the aarch64pe emulation. - -2023-01-05 Andreas K. Huettel - - Un xfail the PR19719 test for the AArch64 architecture - -2023-01-05 Nick Clifton - - Updated Bulgarian and Russian translations for the gprof subdirectory - -2023-01-05 Paul Koning - - PR29963, PDP11 link produces spurious relocation truncated messages - PDP11 is a 16-bit processor with 16-bit logical addresses. Therefore - wrapping should be allowed on the 16-bit relocs, and may as well be - allowed for the 32-bit reloc too. - - PR 29963 - * pdp11.c (howto_table_pdp11): Use complain_overflow_dont. - -2023-01-05 Mike Frysinger - - sim: mips: add multi source to built sources - The multirun generation mode is a bit of a mess as generated run files - depend on generate igen files, all with unknown names ahead of time. - In the multirun mode, be lazy and declare all of these generated source - files as built sources so they'll be created early on. - -2023-01-05 Tsukasa OI - - sim: Move getopt checking inside SIM_AC_PLATFORM - This commit moves getopt declaration checker originally in sim/ - configure.ac; added in commit 340aa4f6872c ("sim: Check known getopt - definition existence") to sim/m4/sim_ac_platform.m4 (inside the - SIM_AC_PLATFORM macro). - - It also regenerates configuration files using the maintainer mode. - -2023-01-05 Guillermo E. Martinez - - sim: bpf: fix testsuite due to linker warnings [PR sim/29954] - On a bpf-*-* testsuite fails: - ./ld/ld-new: warning: test has a LOAD segment with RWX permissions - - Adjusting `--memory-size=10Mb' to the simulator bpf testsuite passes. - - Tested on bpf-*-*: - - Bug: https://sourceware.org/PR29954 - - sim/testsuite: - * bpf/allinsn.exp (SIMFLAGS_FOR_TARGET): Adjust sim flags. - -2023-01-05 GDB Administrator - - Automatic date update in version.in - -2023-01-04 Indu Bhagat - - MAINTAINERS: add myself as maintainer of libsframe - binutils/ - * MAINTAINERS: Add myself as maintainer of libsframe. - -2023-01-04 H.J. Lu - - x86: Remove duplicated I386_PCREL_TYPE_P/X86_64_PCREL_TYPE_P - I386_PCREL_TYPE_P and X86_64_PCREL_TYPE_P are defined twice. Remove - the duplications. - - * elfxx-x86.h (I386_PCREL_TYPE_P): Remove duplication. - (X86_64_PCREL_TYPE_P): Likewise. - -2023-01-04 Lancelot SIX - - gdb: ensure test_name is initialized in gdb_breakpoint - A refactoring in 4b9728bec15 (gdb: use gdb_test_multiple in - gdb_breakpoint) left the $test_name variable undefined. - - This patch fixes this. - - Approved-By: Simon Marchi - -2023-01-04 Tom Tromey - - Use first_opcode in another spot - I found one place that could use expression::first_opcode. - - Reviewed-By: Lancelot Six - -2023-01-04 Tom Tromey - - Convert exp_uses_objfile to a method of expression - This changes the exp_uses_objfile function to be a method of - 'expression'. - - Reviewed-By: Lancelot Six - -2023-01-04 Simon Marchi - - gdb: use gdb_test_multiple in gdb_breakpoint - When running the testsuite in a non-optimized build on a slow machine, I - sometimes get: - - UNTESTED: gdb.gdb/selftest.exp: Cannot set breakpoint at captured_main, skipping testcase. - - do_self_tests, in lib/selftest-support.exp, uses `with_timeout_factor - 10`, to account for the fact that reading the debug info of the gdb - binary (especially in a non-optimized GDB) can take time. But then it - ends up calling gdb_breakpoint, which uses gdb_expect with a hard-coded - timeout of 30 seconds. - - Fix this by making gdb_breakpoint use gdb_test_multiple, which is a - desired change anyway for this kind of simple command / expected - output case. - - Change-Id: I9b06ce991cc584810d8cc231b2b4893980b8be75 - Reviewed-By: Lancelot Six - -2023-01-04 Alan Modra - - Re: Avoid unaligned pointer reads in PEP .idata section - Fix testsuite fallout. - - * testsuite/ld-pe/cfi.d: Adjust for changed .idata padding. - * testsuite/ld-pe/secidx_64.d: Likewise. - * testsuite/ld-pe/secrel_64.d: Likewise. - -2023-01-04 Alan Modra - - objcopy fuzzed pe out of memory - This occurs when attempting to read back a section from the output - file in _bfd_XX_bfd_copy_private_bfd_data_common. The copy of the - section failed size sanity checking, thus it won't be written. - - * objcopy.c (copy_object): Return false if copy_section or - copy_relocations_in_section fails. - -2023-01-04 Alan Modra - - fuzzed file timeout - objcopy of archive, element containing an object with a fuzzed section - size far exceeding the element size. copy_section detects this, but - the temp file is laid out for the large section. It can take a long - time to write terabytes of sparse file, a waste of time when it will - be deleted. - - * objcopy.c (copy_archive): Don't write element contents after - bad status result from copy_object. - -2023-01-04 Alan Modra - - asan: segv in parse_module - * vms-alpha.c (parse_module): Ignore DST__K_SRC_SETFILE data - if out of range. - -2023-01-04 Alan Modra - - addr2line out of memory on fuzzed file - Another case of fuzzers finding the section size sanity checks are - avoided with SHT_NOBITS sections. - - * dwarf2.c (read_section): Check that the DWARF section being - read has contents. - -2023-01-04 Andrew Burgess - - gdb: fix some #ifdef logic in bt-utils.h - In passing I spotted some incorrect #ifdef logic in bt-utils.h. The - logic in question has existed since the file was originally added in - commit: - - commit abbbd4a3e0ca51132e7fb31a43f896d29894dae0 - Date: Wed Aug 11 13:24:33 2021 +0100 - - gdb: use libbacktrace to create a better backtrace for fatal signals - - The code is trying to select between using libbacktrace or using the - execinfo supplied backtrace API. - - First we check to see if we can use libbacktrace. If we can then we - include some header files, and then set some defines to indicate that - libbacktrace is being used. - - Then we check if execinfo is available, if it is then we include - and set some alternative defines. - - In theory the second block of logic should not trigger if the first - block (that uses libbacktrace) has also triggered, but we incorrectly - check the define 'PRINT_BACKTRACE_ON_FATAL_SIGNAL' instead of checking - for 'GDB_PRINT_INTERNAL_BACKTRACE_USING_LIBBACKTRACE', so the second - block triggers more than it should. The - 'PRINT_BACKTRACE_ON_FATAL_SIGNAL' define is not defined anywhere, this - was a mistake in the original commit. - - In reality this is harmless, we include when we don't - need too, but in by-utils.c the libbacktrace define is always checked - for before the execinfo define, so we never actually end up using the - execinfo path (when libbacktrace is available). But I figure its - still worth cleaning this up. - - I've tested GDB in a "default" build where libbacktrace is used, and - when configuring with --disable-libbacktrace which causes the execinfo - backtrace API to be used instead, both still appear to work fine. - - There should be no user visible changes after this commit. - -2023-01-04 Bruno Larsen - - gdb: add 'maintenance print record-instruction' command - While chasing some reverse debugging bugs, I found myself wondering what - was recorded by GDB to undo and redo a certain instruction. This commit - implements a simple way of printing that information. - - If there isn't enough history to print the desired instruction (such as - when the user hasn't started recording yet or when they request 2 - instructions back but only 1 was recorded), GDB warns the user like so: - - (gdb) maint print record-instruction - Not enough recorded history - - If there is enough, GDB prints the instruction like so: - - (gdb) maint print record-instruction - 4 bytes of memory at address 0x00007fffffffd5dc changed from: 01 00 00 00 - Register eflags changed: [ IF ] - Register rip changed: (void (*)()) 0x401115 - - Approved-by: Eli Zaretskii - Reviewed-by: Alexandra Hajkova - Reviewed-by: Lancelot Six - Approved-by: Tom Tromey - -2023-01-04 Andreas K. Huettel - - Fix AArch64 linker testsuite failures trigeered by differences in build environments. - PR 29843 - * testsuite/ld-aarch64/bti-plt-5.d: Relax regxps slightly to allow - for differences in build environments. - * testsuite/ld-aarch64/tls-relax-gdesc-le-now.d: Likewise. - -2023-01-04 Mark Harmstone - - Avoid unaligned pointer reads in PEP .idata section - This is something I discovered when working on aarch64, though it's - relevant to x86_64 too. - - The PE32+ imports are located in the .idata section, which starts off - with a 20-byte structure for each DLL, containing offsets into the rest - of the section. This is the Import Directory Table in - https://learn.microsoft.com/en-us/windows/win32/debug/pe-format, which - is a concatenation of the .idata$2 sections. This is then followed by an - 20 zero bytes generated by the linker script, which calls this .idata$3. - - After this comes the .idata$4 entries for each function, which the - loader overwrites with the function pointers. Because there's no padding - between .idata$3 and .idata$4, this means that if there's an even number - of DLLs, the function pointers won't be aligned on an 8-byte boundary. - - Misaligned reads are slower on x86_64, but this is more important on - aarch64, as the e.g. `ldr x0, [x0, :lo12:__imp__func]` the compiler - might generate requires __imp__func (the .idata$4 entry) to be aligned - to 8 bytes. Without this you get IMAGE_REL_ARM64_PAGEOFFSET_12L overflow - errors. - -2023-01-04 Alan Modra - - Merge config/picflag.m4 from gcc - and regen libiberty/configure - -2023-01-04 Tsukasa OI - - sim: Regenerate using the maintainer mode - Those files have changed by regenerating using the maintainer mode. - The first line of sim/ppc/pk.h have changed by an effect of the commit - 319e41e83a40 ("sim: ppc: inline the sim-packages option"). - -2023-01-04 GDB Administrator - - Automatic date update in version.in - -2023-01-03 Max Filippov - - opcodes: xtensa: fix jump visualization for FLIX - opcodes/ - * xtensa-dis.c (print_insn_xtensa): Add local variables - insn_type, target and imm_pcrel to track control flow across - multiple slots. - - opcodes: xtensa: implement styled disassembly - opcodes/ - * xtensa-dis.c (print_xtensa_operand) - (print_insn_xtensa): Replace fprintf_func with - fprintf_styled_func. - -2023-01-03 Tom Tromey - - Add test case for "finish" with variably-sized types - This adds a test case for "finish" with variably-sized types, and for - inferior calls as well. This also extends the "runto" proc to handle - temporary breakpoints. - - Use value_at_non_lval in get_call_return_value - get_call_return_value can handle RETURN_VALUE_STRUCT_CONVENTION, - because the call is completely managed by gdb. However, it does not - handle variably-sized types correctly. The simplest way to fix this - is to use value_at_non_lval, which does type resolution. - - Fix inferior calls with variably-sized return type - This patch updates the gdbarch_return_value_as_value implementations - to work correctly with variably-sized return types. - - Convert selected architectures to gdbarch_return_value_as_value - This converts a few selected architectures to use - gdbarch_return_value_as_value rather than gdbarch_return_value. The - architectures are just the ones that I am able to test. This patch - should not introduce any behavior changes. - -2023-01-03 Tom Tromey - - Don't let property evaluation affect the current language - On PPC, we saw that calling an inferior function could sometimes - change the current language, because gdb would select the call dummy - frame -- associated with _start. - - This patch changes gdb so that the current language is never affected - by DWARF property evaluation. - -2023-01-03 Tom Tromey - - Introduce value_at_non_lval - In some cases, while a value might be read from memory, gdb should not - record the value as being equivalent to that memory. - - In Ada, the inferior call code will call ada_convert_actual -- and - here, if the argument is already in memory, that address will simply - be reused. However, for a call like "f(g())", the result of "g" might - be on the stack and thus overwritten by the call to "f". - - This patch introduces a new function that is like value_at but that - ensures that the result is non-lvalue. - -2023-01-03 Tom Tromey - - Don't emit gdbarch_return_value - The previous patch introduced a new overload of gdbarch_return_value. - The intent here is that this new overload always be called by the core - of gdb -- the previous implementation is effectively deprecated, - because a call to the old-style method will not work with any - converted architectures (whereas calling the new-style method is will - delegate when needed). - - This patch changes gdbarch.py so that the old gdbarch_return_value - wrapper function can be omitted. This will prevent any errors from - creeping in. - -2023-01-03 Tom Tromey - - Add new overload of gdbarch_return_value - The gdbarch "return_value" can't correctly handle variably-sized - types. The problem here is that the TYPE_LENGTH of such a type is 0, - until the type is resolved, which requires reading memory. However, - gdbarch_return_value only accepts a buffer as an out parameter. - - Fixing this requires letting the implementation of the gdbarch method - resolve the type and return a value -- that is, both the contents and - the new type. - - After an attempt at this, I realized I wouldn't be able to correctly - update all implementations (there are ~80) of this method. So, - instead, this patch adds a new method that falls back to the current - method, and it updates gdb to only call the new method. This way it's - possible to incrementally convert the architectures that I am able to - test. - -2023-01-03 Tom Tromey - - Fix crash in amd64-tdep.c - amd64-tdep.c could crash when 'finish'ing from a function whose return - type had variable length. In this situation, the value will be passed - by reference, and this patch avoids the crash. - - (Note that this does not fully fix the bug reported, but it does fix - the crash, so it seems worthwhile to land independently.) - -2023-01-03 Tom de Vries - - [gdb/testsuite] Add xfail in gdb.arch/i386-pkru.exp - On a x86_64-linux machine with pkru register, I run into: - ... - (gdb) PASS: gdb.arch/i386-pkru.exp: set pkru value - info register pkru^M - pkru 0x12345678 305419896^M - (gdb) FAIL: gdb.arch/i386-pkru.exp: read value after setting value - ... - - This is a regression due to kernel commit e84ba47e313d ("x86/fpu: Hook up PKRU - onto ptrace()"). This is fixed by recent kernel commit 4a804c4f8356 - ("x86/fpu: Allow PKRU to be (once again) written by ptrace."). - - The regression occurs for kernel versions v5.14-rc1 (the first tag containing - the regression) up to but excluding v6.2-rc1 (the first tag containing the fix). - - Fix this by adding an xfail for the appropriate kernel versions. - - Tested on x86_64-linux. - - PR testsuite/29790 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29790 - -2023-01-03 Tom Tromey - - Do not use PyObject_CallNoArgs - PyObject_CallNoArgs was introduced in Python 3.9, so avoid it in favor - of PyObject_CallObject. - -2023-01-03 Himal - - Fix a potential problem in the BFD library when accessing the Windows' nul device driver. - PR 29947 - * bfdio.c (_bfd_real_fopen): Do not add a prefix to the Windows' - nul device filename. - -2023-01-03 Nick Clifton - - Fix a translation problem in the x86 assembler. - PR 29952 - * config/tc-i386.c (md_assemble): Avoid constructing translatable - strings. - - Updated translations for various languages and sub-directories - -2023-01-03 Luis Machado - - Add new NT_ARM_ZA and NT_ARM_SSVE register set constants. - -2023-01-03 Andrew Burgess - - [gdb] Fix segfault during inferior call to ifunc - With a simple test-case: - ... - $ cat test.c - char *p = "a"; - int main (void) { - return strlen (p); - } - $ gcc -g test.c - ... - we run into this segfault: - ... - $ gdb -q -batch a.out -ex start -ex "p strlen (p)" - Temporary breakpoint 1 at 0x1151: file test.c, line 4. - [Thread debugging using libthread_db enabled] - Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". - - Temporary breakpoint 1, main () at test.c:4 - 4 return strlen (p); - - Fatal signal: Segmentation fault - ... - - The strlen is an ifunc, and consequently during the call to - call_function_by_hand_dummy for "p strlen (p)" another call - to call_function_by_hand_dummy is used to resolve the ifunc. - - This invalidates the get_current_frame () result in the outer call. - - Fix this by using prepare_reinflate and reinflate. - - Note that this series ( - https://inbox.sourceware.org/gdb-patches/20221214033441.499512-1-simon.marchi@polymtl.ca/ ) - should address this problem, but this patch is a simpler fix which is easy to - backport. - - Tested on x86_64-linux. - - Co-Authored-By: Tom de Vries - PR gdb/29941 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29941 - -2023-01-03 Mike Frysinger - - sim: sh: move some generated source files to built sources - This should have been part of the previous commit 80636a54bcfa2bca3dc8f - ("sim: build: move generated headers to built sources"), but they were - missed because they're .c files effectively treated as .h files. - - sim: build: add var for tracking sim enable directly - Rather than rely on SIM_SUBDIRS being set, add a dedicated variable - to track whether to enable the sim. While the current code works - fine, it won't work as we remove the recursive make logic (i.e. the - SIM_SUBDIRS variable). - - sim: common: drop libcommon.a linkage - All of these objects should be in libsim.a already, so don't link to - it too. In practice it never gets used, but no point in listing it. - -2023-01-03 Mike Frysinger - - sim: build: move generated headers to built sources - Automake's automatic header deptracking has a bootstrap problem where - it can't detect generated headers when compiling. We've been handling - that by adding a custom SIM_ALL_RECURSIVE_DEPS variable, but that only - works when building objects recursively in subdirs. As we move those - out to the top-level, we don't have any recursive steps anymore. The - Automake approach is to declare those headers in BUILT_SOURCES. - - This isn't completely foolproof as the Automake manual documents: it - only activates for `make all`, not `make foo.o`, but that shouldn't be - a huge limitation as it only affects the initial compile. After that, - rebuilds should work fine. - -2023-01-03 Mike Frysinger - - sim: cgen: drop common subdir build rules - Now that everything has been hoisted to the top-level, we can delete - this unused logic. - - sim: or1k: hoist cgen rules to top-level - - sim: m32r: hoist cgen rules to top-level - - sim: lm32: hoist cgen rules to top-level - - sim: iq2000: hoist cgen rules to top-level - - sim: frv: hoist cgen rules to top-level - - sim: cris: hoist cgen rules to top-level - - sim: bpf: hoist cgen rules to top-level - - sim: cgen: hoist rules to the top-level build - The rules seem to generate the same output as existing subdir cgen - rules with cgen ports, so hopefully this should be correct. These - are the last set of codegen rules that we run in subdirs, so this - will help unblock killing off subdir builds entirely. - - sim: build: use Automake include vars - Rather than define our own hack for emitting an include statement, - use the existing Automake include variables. These have the nice - side-effect of being more portable. - -2023-01-03 GDB Administrator - - Automatic date update in version.in - -2023-01-02 Tom Tromey - - Simplify debug_exp - debug_exp should call expression::dump rather than using the 'op' - member. - -2023-01-02 Tom Tromey - - Initial implementation of Debugger Adapter Protocol - The Debugger Adapter Protocol is a JSON-RPC protocol that IDEs can use - to communicate with debuggers. You can find more information here: - - https://microsoft.github.io/debug-adapter-protocol/ - - Frequently this is implemented as a shim, but it seemed to me that GDB - could implement it directly, via the Python API. This patch is the - initial implementation. - - DAP is implemented as a new "interp". This is slightly weird, because - it doesn't act like an ordinary interpreter -- for example it doesn't - implement a command syntax, and doesn't use GDB's ordinary event loop. - However, this seemed like the best approach overall. - - To run GDB in this mode, use: - - gdb -i=dap - - The DAP code will accept JSON-RPC messages on stdin and print - responses to stdout. GDB redirects the inferior's stdout to a new - pipe so that output can be encapsulated by the protocol. - - The Python code uses multiple threads to do its work. Separate - threads are used for reading JSON from the client and for writing JSON - to the client. All GDB work is done in the main thread. (The first - implementation used asyncio, but this had some limitations, and so I - rewrote it to use threads instead.) - - This is not a complete implementation of the protocol, but it does - implement enough to demonstrate that the overall approach works. - - There is a rudimentary test suite. It uses a JSON parser written in - pure Tcl. This parser is under the same license as Tcl itself, so I - felt it was acceptable to simply import it into the tree. - - There is also a bit of documentation -- just documenting the new - interpreter name. - -2023-01-02 Jonas Hoerberg - - Fix target remote pipe command for MinGW - The cced7cacecad104fff0 ("gdb: preserve `|` in connection details string") - commit added '|' detection and removal to ser-pipe.c, but missed to add it - to ser-mingw.c. - - This results in the error message below for MinGW hosts: - error starting child process '| ': CreateProcess: No such file or directory - - This commit add the missing '|' detection and removal to ser-mingw.c. - -2023-01-02 Tom Tromey - - Remove target: prefix from gdb_sysroot in find_separate_debug_file - I noticed that, when using gdbserver, gdb might print: - - Reading /usr/lib/debug/lib64//libcap.so.2.48-2.48-4.fc36.x86_64.debug from remote target... - Reading target:/usr/lib/debug/lib64//libcap.so.2.48-2.48-4.fc36.x86_64.debug from remote target... - - The second line has the "target:" prefix, but from the code it's clear - that this string is being passed verbatim to gdbserver -- which seems - wrong. - - I filed PR remote/29929 for this. - - The problem here is that find_separate_debug_file uses gdb_sysroot - without checking to see if it starts with the "target:" prefix. This - patch changes this code to be a little more careful. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29929 - -2023-01-02 Tom de Vries - - [gdb/testsuite] Fix gdb.python/py-breakpoint.exp with libstdc++ debug info - On x86_64-linux, I run into: - ... - (gdb) python hbp1 = gdb.Breakpoint("add", type=gdb.BP_HARDWARE_BREAKPOINT)^M - Hardware assisted breakpoint 2 at 0x40072e: add. (7 locations)^M - (gdb) FAIL: gdb.python/py-breakpoint.exp: test_hardware_breakpoints: \ - Set hardware breakpoint - ... - due to libstdc++ debug info: - ... - $ gdb -q -batch outputs/gdb.python/py-breakpoint/py-breakpoint \ - -ex start \ - -ex "b add" \ - -ex "info break" - Temporary breakpoint 1 at 0x40076a: file py-breakpoint.c, line 50. - - Temporary breakpoint 1, main (argc=1, argv=$hex) at py-breakpoint.c:50 - 50 int foo = 5; - Breakpoint 2 at 0x40072e: add. (7 locations) - Num Type Disp Enb Address What - 2 breakpoint keep y - 2.1 y 0x000000000040072e in add(int) at \ - py-breakpoint.c:39 - 2.2 y 0x00007ffff7b131de in \ - (anonymous namespace)::fast_float::bigint::add at \ - ../../../../../libstdc++-v3/src/c++17/fast_float/fast_float.h:1815 - ... - 2.7 y 0x00007ffff7b137e4 in \ - (anonymous namespace)::fast_float::bigint::add at \ - ../../../../../libstdc++-v3/src/c++17/fast_float/fast_float.h:1815 - ... - - Fix this by using qualified=True. - - Tested on x86_64-linux. - PR testsuite/29910 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29910 - -2023-01-02 Mike Frysinger - - sim: replace -I$srcroot/bfd include with -I$srcroot - Clean up includes a bit by making ports include bfd/ headers - explicitly. This matches other projects, and makes it more clear - where these headers are coming from. - - sim: replace -I$srcroot/opcodes include with -I$srcroot - Clean up includes a bit by making ports include opcodes/ headers - explicitly. This matches other projects, and makes it more clear - where these headers are coming from. - -2023-01-02 Alan Modra - - obsolete target tidy - Delete a few files only used for obsolete targets, and tidy config, - xfails and other pieces of support specific to those targets. And - since I was editing target triplets in test files, fix the nm - alpha-linuxecoff fails. - -2023-01-02 GDB Administrator - - Automatic date update in version.in - -2023-01-01 Mike Frysinger - - sim: build: drop unused SIM_EXTRA_LIBS - Now that all run binaries are linked in the topdir, this subdir libs - variable isn't used anywhere, so punt it. - - sim: erc32: drop -I$(srcroot) - Since the port doesn't actually use this include, drop it. - No other port is doing this either. - - sim: drop mention of & support for subdir configure - Now that no ports use these common configure APIs, delete the logic - and remove it from the documentation. - - sim: refresh copyright dates a bit - Update a few files that were missed, and revert the generated Automake - output that uses dates from Automake itself. - - sim: or1k: drop unused rules - These rules are the same as the common ones, so drop them to simplify. - - sim: iq2000: drop unused cpu define logic - These defines seem to have been added in anticipation of adding another - cpu port (IQ10BF?), but that was over 20 years ago, and that port has - yet to materialize. So drop these compile flags since they don't do - anything to the generated code. If another port ever shows up, it's - easy enough to readd things as needed. - -2023-01-01 Joel Brobecker - - manual copyright year range of various GDB files to add 2023 - This commit updates the following file... - - gdb/doc/gdb.texinfo - gdb/doc/refcard.tex - gdb/syscalls/update-netbsd.sh - - ... by hand as instructed by the gdb/copyright.py script. - The update by hand is needed because the copyright headers - to update are actually nested inside those files, rather - than located at the start of the file. - -2023-01-01 Joel Brobecker - - Update copyright year range in header of all files managed by GDB - This commit is the result of running the gdb/copyright.py script, - which automated the update of the copyright year range for all - source files managed by the GDB project to be updated to include - year 2023. - -2023-01-01 Joel Brobecker - - gdb/copyright.py: Adjust following rename of sim/ppc/ppc-instructions... - ... to sim/ppc/powerpc.igen - - This file is in the NOT_FSF_LIST because this file has a copyright - which is not assigned to the FSF. Since the file got renamed, - the corresponding entry in NOT_FSF_LIST needs to be renamed as well. - -2023-01-01 Joel Brobecker - - Update copyright year in help message of gdb, gdbserver, gdbreplay - This commit updates the copyright year displayed by gdb, gdbserver - and gdbreplay's help message from 2022 to 2023, as per our Start - of New Year procedure. The corresponding source files' copyright - header are also updated accordingly. - -2023-01-01 Alan Modra - - Update year range in gprofng copyright notices - This adds 'Innovative Computing Labs' as an external author to - update-copyright.py, to cover the copyright notice in - gprofng/common/opteron_pcbe.c, and uses that plus another external - author 'Oracle and' to update gprofng copyright dates. I'm not going - to commit 'Oracle and' as an accepted author, but that covers the - string "Copyright (c) 2006, 2012, Oracle and/or its affiliates. All - rights reserved." found in gprofng/testsuite/gprofng.display/jsynprog - files. - - Update year range in copyright notice of binutils files - The newer update-copyright.py fixes file encoding too, removing cr/lf - on binutils/bfdtest2.c and ld/testsuite/ld-cygwin/exe-export.exp, and - embedded cr in binutils/testsuite/binutils-all/ar.exp string match. - -2023-01-01 Alan Modra - - Update etc/update-copyright.py - This picks up some improvements from gcc/contrib. exceptions must - derive from BaseException, port to python3, retain original file mode, - fix name of script in examples. - - Adds libsframe to list of default dirs. I would have added gprofng - too but there are some files claiming copyright by authors other than - the Free Software Foundation. - -2023-01-01 GDB Administrator - - Automatic date update in version.in - -2022-12-31 Nick Clifton - - Update version numbers in howto-make-a-release document - - Update version number and regenerate files - - Add markers for 2.40 branch - - sync libiberty sources with gcc mainline - -2022-12-31 Tom de Vries - - [gdb/cli] Add maintenance ignore-probes - There's a command "disable probes", but SystemTap probes, for instance - libc:longjmp cannot be disabled: - ... - $ gdb -q -batch a.out -ex start -ex "disable probes libc ^longjmp$" - ... - Probe libc:longjmp cannot be disabled. - Probe libc:longjmp cannot be disabled. - Probe libc:longjmp cannot be disabled. - ... - - Add a command "maintenance ignore-probes" that ignores probes during - get_probes, such that we can easily pretend to use a libc without the - libc:longjmp probe: - ... - (gdb) maint ignore-probes -verbose libc ^longjmp$ - ignore-probes filter has been set to: - PROVIDER: 'libc' - PROBE_NAME: '^longjmp$' - OBJNAME: '' - (gdb) start ^M - ... - Ignoring SystemTap probe libc longjmp in /lib64/libc.so.6.^M - Ignoring SystemTap probe libc longjmp in /lib64/libc.so.6.^M - Ignoring SystemTap probe libc longjmp in /lib64/libc.so.6.^M - ... - - The "Ignoring ..." messages can be suppressed by not using -verbose. - - Note that as with "disable probes", running simply "maint ignore-probes" - ignores all probes. - - The ignore-probes filter can be reset by using: - ... - (gdb) maint ignore-probes -reset - ignore-probes filter has been reset - ... - - For now, the command is only supported for SystemTap probes. - - PR cli/27159 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=27159 - -2022-12-31 Mark Harmstone - - ld/testsuite: Don't add index to sizes in pdb.exp - - ld: Handle LF_VFTABLE types in PDBs - -2022-12-31 Mark Harmstone - - ld: Handle extended-length data structures in PDB types - A few fixes to minor issues I've discovered in my PDB patches. - - * If sizes or offsets are greater than 0x8000, they get encoded as - extended values in the same way as for enum values - e.g. a LF_ULONG - .short followed by a .long. - - * I've managed to coax MSVC to produce another type, LF_VFTABLE, which - is seen when dealing with COM. I don't think LLVM emits this. Note that - we can't just implement everything in Microsoft's header files, as most - of it is obsolete. - - * Fixes a stupid bug in the test program, where I was adding an index to - a size. The index was hard-coded to 0, so this didn't cause any actual - issues. - -2022-12-31 Nick Clifton - - Updated Romanian translation for the binutils sub-directory - -2022-12-31 Tom de Vries - - [gdb/python] Fix gdb.python/py-finish-breakpoint2.exp for -m32 - [ Partial resubmission of an earlier submission by Andrew ( - https://sourceware.org/pipermail/gdb-patches/2012-September/096347.html ), so - listing him as co-author. ] - - With x86_64-linux and target board unix/-m32, we have: - ... - (gdb) continue^M - Continuing.^M - Exception #10^M - ^M - Breakpoint 3, throw_exception_1 (e=10) at py-finish-breakpoint2.cc:23^M - 23 throw new int (e);^M - (gdb) FAIL: gdb.python/py-finish-breakpoint2.exp: \ - check FinishBreakpoint in catch() - ... - - The following scenario happens: - - set breakpoint in throw_exception_1, a function that throws an exception - - continue - - hit breakpoint, with call stack main.c:38 -> throw_exception_1 - - set a finish breakpoint - - continue - - hit the breakpoint again, with call stack main.c:48 -> throw_exception - -> throw_exception_1 - - Due to the exception, the function call did not properly terminate, and the - finish breakpoint didn't trigger. This is expected behaviour. - - However, the intention is that gdb detects this situation at the next stop - and calls the out_of_scope callback, which would result here in this test-case - in a rather confusing "exception did not finish" message. So the problem is - that this message doesn't show up, in other words, the out_of_scope callback - is not called. - - [ Note that the fact that the situation is detected only at the next stop - (wherever that happens to be) could be improved upon, and the earlier - submission did that by setting a longjmp breakpoint. But I'm considering this - problem out-of-scope for this patch. ] - - Note that the message does show up later, at thread exit: - ... - [Inferior 1 (process 20046) exited with code 0236]^M - exception did not finish ...^M - ... - - The decision on whether to call the out_of_scope call back is taken in - bpfinishpy_detect_out_scope_cb, and the interesting bit is here: - ... - if (b->pspace == current_inferior ()->pspace - && (!target_has_registers () - || frame_find_by_id (b->frame_id) == NULL)) - bpfinishpy_out_of_scope (finish_bp); - ... - - In the case of the thread exit, the callback triggers because - target_has_registers () == 0. - - So why doesn't the callback trigger in the case of the breakpoint? - - Well, the b->frame_id is the frame_id of the frame of main (the frame - in which the finish breakpoint is supposed to trigger), so AFAIU - frame_find_by_id (b->frame_id) == NULL will only be true once we've - left main, at which point I guess we don't stop till thread exit. - - Fix this by saving the frame in which the finish breakpoint was created, and - using frame_find_by_id () == NULL on that frame instead, such that we have: - ... - (gdb) continue^M - Continuing.^M - Exception #10^M - ^M - Breakpoint 3, throw_exception_1 (e=10) at py-finish-breakpoint2.cc:23^M - 23 throw new int (e);^M - exception did not finish ...^M - (gdb) FAIL: gdb.python/py-finish-breakpoint2.exp: \ - check FinishBreakpoint in catch() - ... - - Still, the test-case is failing because it's setup to match the behaviour that - we get on x86_64-linux with target board unix/-m64: - ... - (gdb) continue^M - Continuing.^M - Exception #10^M - stopped at ExceptionFinishBreakpoint^M - (gdb) PASS: gdb.python/py-finish-breakpoint2.exp: \ - check FinishBreakpoint in catch() - ... - - So what happens here? Again, due to the exception, the function call did not - properly terminate, but the finish breakpoint still triggers. This is somewhat - unexpected. This happens because it just so happens to be that the frame - return address at which the breakpoint is set, is also the first instruction - after the exception has been handled. This is a know problem, filed as - PR29909, so KFAIL it, and modify the test-case to expect the out_of_scope - callback. - - Also add a breakpoint after setting the finish breakpoint but before throwing - the exception, to check that we don't call the out_of_scope callback too early. - - Tested on x86_64-linux, with target boards unix/-m32. - - Co-Authored-By: Andrew Burgess - PR python/27247 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=27247 - -2022-12-31 Tom de Vries - - [gdb/testsuite] Fix gdb.base/print-symbol-loading.exp on ubuntu 22.04.1 - On ubuntu 22.04.1 x86_64, I run into: - ... - (gdb) PASS: gdb.base/print-symbol-loading.exp: shlib off: \ - set print symbol-loading off - sharedlibrary .*^M - Symbols already loaded for /lib/x86_64-linux-gnu/libc.so.6^M - Symbols already loaded for /lib/x86_64-linux-gnu/libpthread.so.0^M - (gdb) FAIL: gdb.base/print-symbol-loading.exp: shlib off: load shared-lib - ... - - The test-case expects the libc.so line, but not the libpthread.so line. - - However, we have: - ... - $ ldd /lib/x86_64-linux-gnu/libc.so.6 - linux-vdso.so.1 (0x00007ffd7f7e7000) - libgtk3-nocsd.so.0 => /lib/x86_64-linux-gnu/libgtk3-nocsd.so.0 (0x00007f4468c00000) - /lib64/ld-linux-x86-64.so.2 (0x00007f4469193000) - libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4468f3e000) - libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4468f39000) - ... - so it's not unexpected that libpthread.so is loaded if libc.so is loaded. - - Fix this by accepting the libpthread.so line. - - Tested on x86_64-linux. - - PR testsuite/29919 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29919 - -2022-12-31 Tom de Vries - - [gdb/testsuite] Replace deprecated pthread_yield in gdb.threads/watchpoint-fork.exp - On Ubuntu 22.04.1 x86_64, with glibc 2.35 I run into: - ... - watchpoint-fork-mt.c: In function 'start':^M - watchpoint-fork-mt.c:67:7: warning: 'pthread_yield' is deprecated: \ - pthread_yield is deprecated, use sched_yield instead \ - [-Wdeprecated-declarations]^M - 67 | i = pthread_yield ();^M - | ^^M - ... - - Fix this as suggested, by using sched_yield instead. - - Tested on x86_64-linux. - -2022-12-31 Tom de Vries - - [gdb/testsuite] Fix gdb.base/corefile.exp with glibc 2.35 - On Ubuntu 22.04.1 x86_64 (with glibc 2.35), I run into: - ... - (gdb) PASS: gdb.base/corefile.exp: $_exitcode is void - bt^M - #0 __pthread_kill_implementation (...) at ./nptl/pthread_kill.c:44^M - #1 __pthread_kill_internal (...) at ./nptl/pthread_kill.c:78^M - #2 __GI___pthread_kill (...) at ./nptl/pthread_kill.c:89^M - #3 0x00007f4985e1a476 in __GI_raise (...) at ../sysdeps/posix/raise.c:26^M - #4 0x00007f4985e007f3 in __GI_abort () at ./stdlib/abort.c:79^M - #5 0x0000556b4ea4b504 in func2 () at gdb.base/coremaker.c:153^M - #6 0x0000556b4ea4b516 in func1 () at gdb.base/coremaker.c:159^M - #7 0x0000556b4ea4b578 in main (...) at gdb.base/coremaker.c:171^M - (gdb) PASS: gdb.base/corefile.exp: backtrace - up^M - #1 __pthread_kill_internal (...) at ./nptl/pthread_kill.c:78^M - 78 in ./nptl/pthread_kill.c^M - (gdb) FAIL: gdb.base/corefile.exp: up - ... - - The problem is that the regexp used here: - ... - gdb_test "up" "#\[0-9\]* *\[0-9xa-fH'\]* in .* \\(.*\\).*" "up" - ... - does not fit the __pthread_kill_internal line which lacks the instruction - address due to inlining. - - Fix this by making the regexp less strict. - - Tested on x86_64-linux. - -2022-12-31 GDB Administrator - - Automatic date update in version.in - -2022-12-30 Tom de Vries - - [gdb/testsuite] Fix gdb.threads/dlopen-libpthread.exp for upstream glibc - On ubuntu 22.04.1 x86_64, I run into: - ... - (gdb) info probes all rtld rtld_map_complete^M - No probes matched.^M - (gdb) XFAIL: gdb.threads/dlopen-libpthread.exp: info probes all rtld rtld_map_complete - UNTESTED: gdb.threads/dlopen-libpthread.exp: no matching probes - ... - This has been filed as PR testsuite/17016. - - The problem is that the name rtld_map_complete is used, which was only - available in Fedora 17, and upstream the name map_complete was used. - - In the email thread discussing a proposed patch ( - https://sourceware.org/legacy-ml/gdb-patches/2014-09/msg00712.html ) it was - suggested to make the test-case handle both names. - - So, handle both names: map_complete and rtld_map_complete. - - This exposes the following FAIL: - ... - (gdb) info sharedlibrary^M - From To Syms Read Shared Object Library^M - $hex $hex Yes /lib64/ld-linux-x86-64.so.2^M - $hex $hex Yes (*) /lib/x86_64-linux-gnu/libgtk3-nocsd.so.0^M - $hex $hex Yes /lib/x86_64-linux-gnu/libc.so.6^M - $hex $hex Yes /lib/x86_64-linux-gnu/libdl.so.2^M - $hex $hex Yes /lib/x86_64-linux-gnu/libpthread.so.0^M - (*): Shared library is missing debugging information.^M - (gdb) FAIL: gdb.threads/dlopen-libpthread.exp: libpthread.so not found - ... - due to using a glibc (v2.35) that has libpthread integrated into libc. - - Fix this by changing the FAIL into UNSUPPORTED. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17016 - -2022-12-30 Tom de Vries - - [gdb/testsuite] Fix gdb.reverse/step-indirect-call-thunk.exp with -fcf-protection - On Ubuntu 22.04.1 x86_64, I run into: - ... - gdb.reverse/step-indirect-call-thunk.c: In function 'inc':^M - gdb.reverse/step-indirect-call-thunk.c:22:1: error: '-mindirect-branch' and \ - '-fcf-protection' are not compatible^M - 22 | { /* inc.1 */^M - | ^^M - ... - - Fix this by forcing -fcf-protection=none, if supported. - - Tested on x86_64-linux. - -2022-12-30 Tom de Vries - - [gdb/testsuite] Fix gdb.cp/step-and-next-inline.exp with -fcf-protection - On Ubuntu 22.04.1 x86_64, I run into: - ... - (gdb) PASS: gdb.cp/step-and-next-inline.exp: no_header: not in inline 1 - next^M - 51 if (t != NULL^M - (gdb) FAIL: gdb.cp/step-and-next-inline.exp: no_header: next step 1 - ... - - This is due to -fcf-protection, which adds the endbr64 at the start of get_alias_set: - ... - 0000000000001180 <_Z13get_alias_setP4tree>: - 1180: f3 0f 1e fa endbr64 - 1184: 48 85 ff test %rdi,%rdi - ... - so the extra insn gets an is-stmt line number entry: - ... - INDEX LINE ADDRESS IS-STMT PROLOGUE-END - ... - 11 50 0x0000000000001180 Y - 12 50 0x0000000000001180 - 13 51 0x0000000000001184 Y - 14 54 0x0000000000001184 - ... - and when stepping into get_alias_set we step to line 50: - ... - (gdb) PASS: gdb.cp/step-and-next-inline.exp: no_header: in main - step^M - get_alias_set (t=t@entry=0x555555558018 ) at step-and-next-inline.cc:50^M - 50 {^M - ... - - In contrast, with -fcf-protection=none, we get: - ... - 0000000000001170 <_Z13get_alias_setP4tree>: - 1170: 48 85 ff test %rdi,%rdi - ... - and: - ... - INDEX LINE ADDRESS IS-STMT PROLOGUE-END - ... - 11 50 0x0000000000001170 Y - 12 51 0x0000000000001170 Y - 13 54 0x0000000000001170 - ... - so when stepping into get_alias_set we step to line 51: - ... - (gdb) PASS: gdb.cp/step-and-next-inline.exp: no_header: in main - step^M - get_alias_set (t=t@entry=0x555555558018 ) at step-and-next-inline.cc:51^M - 51 if (t != NULL^M - ... - - Fix this by rewriting the gdb_test issuing the step command to check which - line the step lands on, and issuing an extra next if needed. - - Tested on x86_64-linux, both with and without -fcf-protection=none. - - PR testsuite/29920 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29920 - -2022-12-30 Tom de Vries - - [gdb/symtab] Make comp_unit_head.length private - Make comp_unit_head.length private, to enforce using accessor functions. - - Replace accessor function get_length with get_length_with_initial and - get_length_without_initial, to make it explicit which variant we're using. - - Tested on x86_64-linux. - - PR symtab/29343 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29343 - -2022-12-30 Alan Modra - - PR29948, heap-buffer-overflow in display_debug_lines_decoded - This fixes a couple of places in display_debug_lines_decoded that were - off by one in checking DWARF5 .debug_line directory indices. It also - displays the DWARF5 entry 0 for the program current directory rather - than "." as is done for pre-DWARF5. I decided against displaying - DW_AT_comp_dir for pre-DWARF5 since I figure it is better for readelf - to minimally interpret debug info. - - binutils/ - PR 29948 - * dwarf.c (display_debug_lines_decoded): Display the given - directory entry 0 for DWARF5. Properly check directory index - against number of entries in the table. Revert to using - unsigned int for n_directories and associated variables. - Correct warning messages. - gas/ - * testsuite/gas/elf/dwarf-5-loc0.d: Update. - -2022-12-30 GDB Administrator - - Automatic date update in version.in - -2022-12-29 Tsukasa OI - - RISC-V: Simplify riscv_csr_address logic on state enable extensions - This commit makes CSR class handling for 'Smstateen' and 'Ssstateen' - extensions simpler using fall-throughs (as used in CSR_CLASS_I{,_32}). - - gas/ChangeLog: - - * config/tc-riscv.c (riscv_csr_address): Simplify the logic for - 'Smstateen' and 'Ssstateen' extensions. - -2022-12-29 GDB Administrator - - Automatic date update in version.in - -2022-12-28 Tom Tromey - - Use $decimal in timestamp.exp - This patch fixes a review comment by Tom de Vries. He pointed out - that the new timestamp.exp should use the $decimal convenience regexp. - -2022-12-28 Tom Tromey - - Fix "set debug timestamp" - PR cli/29945 points out that "set debug timestamp 1" stopped working - -- this is a regression due to commit b8043d27 ("Remove a ui-related - memory leak"). - - This patch fixes the bug and adds a regression test. - - I think this should probably be backported to the gdb 13 branch. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29945 - -2022-12-28 GDB Administrator - - Automatic date update in version.in - -2022-12-27 H.J. Lu - - x86-64: Allocate input section memory if needed - When --no-keep-memory is used, the input section memory may not be cached. - Allocate input section memory for -z pack-relative-relocs if needed. - - bfd/ - - PR ld/29939 - * elfxx-x86.c (elf_x86_size_or_finish_relative_reloc): Allocate - input section memory if needed. - - ld/ - - PR ld/29939 - * testsuite/ld-elf/dt-relr-2i.d: New test. - -2022-12-27 Christoph Müllner - - RISC-V: Fix T-Head Fmv vendor extension encoding - A recent change in the XTheadFmv spec fixed an encoding bug in the - document. This patch changes the code to follow this bugfix. - - Spec patch can be found here: - https://github.com/T-head-Semi/thead-extension-spec/pull/11 - -2022-12-27 Tom Tromey - - Handle SIGSEGV in gdb selftests - The gdb.gdb self-tests were timing out for me, which turned out to be - PR testsuite/29325. Looking into it, the problem is that the version - of the Boehm GC that is used by Guile on my machine causes a SEGV - during stack probing. This unexpected stop confuses the tests and - causes repeated timeouts. - - This patch adapts the two failing tests. This makes them work for me, - and reduces the running time of gdb.gdb from 20 minutes to about 11 - seconds. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29325 - -2022-12-27 Mike Frysinger - - sim: build: clean up unused codegen logic - Now that all igen ports are in the top-level makefile, we don't need - this logic in any subdirs anymore, so clean it up. - - sim: mips: hoist "multi" igen rules up to common builds - Since these are the last mips igen rules, we can clean up a number of - bits in the local Makefile.in. - - sim: mips: hoist "m16" igen rules up to common builds - - sim: mips: hoist "single" igen rules up to common builds - - sim: mips: rename "igen" generation mode to "single" - The naming in here has grown organically and is confusing to follow. - Originally there was only one set of rules for generating code from - the igen sources, so calling it "tmp-igen" and such made sense. But - when other multigen modes were added ("m16" & "multi") which also - used igen, it's not clear what's common igen and what's specific to - this generation mode. So rename the set of rules from "igen" to - "single" so it's easier to follow. - - sim: mips: hoist itable igen rules up to common builds - Since this rule is pretty simple, hoist it up to the common build. - -2022-12-27 Mike Frysinger - - sim: mips: unify itable generation (a bit) - The m16 & multi targets generate itable once even when all the other - modules are generated multiple times. The default igen target will - generate itable with everything else out of convenience. This means - flags are passed which don't affect the generated itable there. - - We can unify the itable generation by making sure the right -F/-M - filter variables are passed down. Since there's already a dedicated - rule & variable in the multi build mode, generalize that and switch - the m16 & igen builds over too. - - I spent a lot of time staring at this code, building for diff mips - targets, and exploring all the shell code paths. I think this is - safe, but only time (and users) will really tell. - -2022-12-27 Mike Frysinger - - sim: mips: rename multi_flags to igen_itable_flags - This variable is only used to generate the itable files. In preparation - for merging the itable logic among all ports, rename "multi_flags" to a - more appropriate "igen_itable_flags" variable. There should be no real - chagnes here otherwise. - - sim: mips: drop unused micromips igen logic - This code appears to be unused since it was first merged. When - micromips was enabled, it was via the "MULTI" config, not the - "MICROMIPS" config, and the multi configs have sep vars. Since - nothing sets SIM_MIPS_GEN=MICROMIPS in the config, all of this - should be unreachable, so punt it to simplify. Further, the - SIM_MIPS_MICROMIPS16_FLAGS & SIM_MIPS_MICROMIPS_FLAGS settings - rely on sim_mips_micromips{,16}_{filter,machine} variables that - are never set in the configure script. - -2022-12-27 GDB Administrator - - Automatic date update in version.in - -2022-12-26 Tom Tromey - - Add initializers to comp_unit_head - PR symtab/29343 points out that it would be beneficial if - comp_unit_head had a constructor and used initializers. This patch - implements this. I'm unsure if this is sufficient to close the bug, - but at least it's a step. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29343 - -2022-12-26 Alan Modra - - bfd/dwarf2.c: allow use of DWARF5 directory entry 0 - I think the test for table->files[file].dir being non-zero is wrong - for DWARF5 where index zero is allowed and is the current directory of - the compilation. Most times this will be covered by the use of - table->comp_dir (from DW_AT_comp_dir) in concat_filename but the point - of putting the current dir in .debug_line was so the section could - stand alone without .debug_info. - - Also, there is no need to check for table->dirs non-NULL, the - table->num_dirs test is sufficient. - - * dwarf2.c (concat_filename): Correct and simplify tests of - directory index. - -2022-12-26 Flavio Cruz - - Add support for x86_64-*-gnu-* targets to build x86_64 gnumach/hurd - -2022-12-26 GDB Administrator - - Automatic date update in version.in - -2022-12-25 Mike Frysinger - - sim: build: drop support for subdir distclean - All ports that need to clean things up at distclean time have moved - to the top-level build, so we can drop support for this hook. - - sim: mips: move distclean settings to common build - This was missed when mips/configure was merged into the top-level. - -2022-12-25 Indu Bhagat - - libsframe: write out SFrame FRE start address correctly - The following test was failing on ppc64 and s390x: - "FAIL: encode-1: Encode buffer match" - - The offending stub was how we memcpy the FRE start address to the buffer - (on-disk format). When the host is big-endian, the address of the - source buffer for the memcpy needs to point to the uint8_t/uint16_t sized - value of the FRE start addr, not uint32_t sized value; we intend to copy - out only the fre_start_addr_sz number of bytes. - - ChangeLog: - - * libsframe/sframe.c (sframe_encoder_write_fre_start_addr): New - function. - (sframe_encoder_write_fre): Use it instead of memcpy. - -2022-12-25 Mike Frysinger - - sim: smp: plumb igen flag down to all users - While mips has respected sim_igen_smp at configure time (which was - always empty since it defaulted smp to off), no other igen port did. - Move this to a makefile variable and plumb it through the common - IGEN_RUN variable instead so everyone gets it by default. We also - clean up some redundant -N0 setting with multirun mips. - - sim: smp: make option available again - At some point we want this to work, but it's not easy to test if - the configure option isn't available. Restore it, but keep the - default off. - - sim: cpu: change default init to handle all cpus - All the runtimes were only initializing a single CPU. When SMP is - enabled, things quickly crash as none of the other CPU structs are - setup. Change the default from 0 to the compile time value. - - sim: msp430: add basic SMP cpu init - There's no need to assert there's only 1 CPU when setting them all - up here is trivial. - - sim: m32r: fix iterator typo when setting up cpus - This code loops over available cpus with "c", but then looks up the - cpu with "i". Fix the typo so the code works correctly with smp. - - sim: v850: fix SMP compile - The igen tool sets up the SD & CPU defines for code fragments to use, - but v850 was expecting "sd". Change all the igen related code to use - SD so it actually compiles, and fix a few places to use "CPU" instead - of hardcoding cpu0. - - sim: or1k: fix iterator typo when setting up cpus - This code loops over available cpus with "c", but then looks up the - cpu with "i". Fix the typo so the code works correctly with smp. - - sim: mn10300: fix SMP compile - The igen tool sets up the SD define for code fragments to use, but - mn10300 was expecting "sd". Change all the igen related code to use - SD so it actually compiles. - - sim: cpu: fix SMP msg prefix helper - This code fails to compile when SMP is enabled due to some obvious - errors. Fix those and change the logic to avoid CPP to prevent any - future rot from creeping back in. - - sim: mips: clean up a bit after mips/configure removal - Now that there is no subdir configure script, we can clean up some - logic that was spread between the files. - - sim: mips: move igen settings to top-level configure - This is the last bit of logic that exists in the mips configure - script, so move it to the top-level configure to kill it off. - We still have to move the Makefile.in igen logic to local.mk, - but this is a required first step for that. - - sim: mips: namespace igen configure vars - To prepare moving this logic to the top-level configure, the vars - need to be namespaced. Do that here to make it easier to review. - Basically sim_xxx -> SIM_MIPS_XXX when a var is exported from the - configure script to the Makefile, and sim_xxx -> sim_mips_xxx when - the var is internal in the configure script. - - sim: mips: add igen recursive dep - Make sure the igen tool exists before trying to compile the mips - subdir. This happens to work when mips has a subconfigure, but - hits a race condition when that is removed. - - sim: mips: drop unused ENGINE_ISSUE_POSTFIX_HOOK - Nothing defines this, and it isn't called in all the engine runtimes, - so drop it entirely to avoid confusion. - - sim: igen: drop move-if-changed usage - Now that igen itself has this logic, drop these custom build rules - to greatly simplify. - - sim: igen: support in-place updates ourself - Every file that igen outputs is then processed with the move-if-changed - shell script. This creates a lot of boilerplate in the build and not an - insignificant amount of build-time overhead. Move the simple "is the file - changed" logic into igen itself. - - sim: igen: constify itable data structures - These are const data arrays of strings and numbers. We don't want - or need them to be writable, so mark them all const. - -2022-12-25 GDB Administrator - - Automatic date update in version.in - -2022-12-24 Andrew Burgess - - gdb/testsuite: fix buffer overflow in gdb.base/signed-builtin-types.exp - In commit: - - commit 9f50fe0835850645bd8ea9bb1efe1fe6c48dfb12 - Date: Wed Dec 7 15:55:25 2022 +0000 - - gdb/testsuite: new test for recent dwarf reader issue - - A new test (gdb.base/signed-builtin-types.exp) was added that made use - of 'info sources' to figure out if the debug information for a - particular object file had been fully expanded or not. Unfortunately - some lines of the 'info sources' output can be very long, this was - observed on some systems where the debug information for the - dynamic-linker was installed, in this case, the list of source files - associated with the dynamic linker was so long it would cause expect's - internal buffer to overflow. - - This commit switches from using 'info sources' to 'maint print - objfile', the output from the latter command is more compact, but - also, can be restricted to a single named object file. - - With this change in place I am no longer seeing buffer overflow errors - from expect when running gdb.base/signed-builtin-types.exp. - -2022-12-24 Mike Frysinger - - sim: or1k: move arch-specific settings to internal header - There's no need for these settings to be in sim-main.h which is shared - with common/ sim code, so move it all out to the existing or1k-sim.h. - Unfortunately, we can't yet drop the or1k-sim.h include from sim-main.h - as many of the generated CGEN files refer only to sim-main.h. We'll - have to improve the CGEN interface before we can make more progress, - but this is at least a minor improvement. - -2022-12-24 GDB Administrator - - Automatic date update in version.in - -2022-12-23 Tom Tromey - - Use bool for dwarf2_has_info - This changes dwarf2_has_info to return bool. - -2022-12-23 Indu Bhagat - - libsframe: testsuite: fix memory leaks in testcases - ChangeLog: - - * libsframe/testsuite/libsframe.decode/be-flipping.c: Free - SFrame buffer. - * libsframe/testsuite/libsframe.decode/frecnt-1.c: Likewise. - * libsframe/testsuite/libsframe.decode/frecnt-2.c: Likewise. - -2022-12-23 Indu Bhagat - - libsframe: fix a memory leak in sframe_decode - sframe_decode () needs to malloc a temporary buffer of the same size as - the input buffer (containing the SFrame section bytes) when endian - flipping is needed. The decoder keeps the endian flipped contents in - this buffer for its usage. This code is necessary when the target - endianneess is not the same as host endianness. - - The malloc'd buffer needs to be kept track of, so that it can freed up in - sframe_decoder_free () later. - - ChangeLog: - - * libsframe/sframe-impl.h (struct sframe_decoder_ctx): Add new - member to keep track of the internally malloc'd buffer. - * libsframe/sframe.c (sframe_decoder_free): Free it up. - (sframe_decode): Update the reference to the buffer. - -2022-12-23 Simon Marchi - - gdb/testsuite: remove MPFR detection in gdb.base/float128.exp - I see this fail since commit 991180627851 ("Use toplevel configure for - GMP and MPFR for gdb"): - - FAIL: gdb.base/float128.exp: show configuration - - The test fails to find --with-mpfr or --without-mpfr in the "show - configuration" output. Since MPFR has become mandatory, we can just - remove that check and simplify the test to assume MPFR support is there. - - Change-Id: I4f3458470db0029705b390dfefed3a66dfc0633a - Approved-By: Tom de Vries - -2022-12-23 Mike Frysinger - - sim: m32r: move arch-specific settings to internal header - There's no need for these settings to be in sim-main.h which is shared - with common/ sim code, so move it all out to the existing m32r-sim.h. - Unfortunately, we can't yet drop the m32r-sim.h include from sim-main.h - as many of the generated CGEN files refer only to sim-main.h. We'll - have to improve the CGEN interface before we can make more progress, - but this is at least a minor improvement. - - sim: bfin: move arch-specific settings to internal header - There's no need for these settings to be in sim-main.h which is shared - with common/ sim code, so drop the bfin.h include and move the remaining - bfin-specific settings into it. - - sim: m68hc11: move arch-specific settings to internal header - There's no need for these settings to be in sim-main.h which is shared - with common/ sim code, so move it all out to a new header which only - this port will include. - - sim: sh: move arch-specific settings to internal header - There's no need for these settings to be in sim-main.h which is shared - with common/ sim code, so move it all out to a new header which only - this port will include. - - sim: mcore: move arch-specific settings to internal header - There's no need for these settings to be in sim-main.h which is shared - with common/ sim code, so move it all out to a new header which only - this port will include. - - sim: h8300: move arch-specific settings to internal header - There's no need for these settings to be in sim-main.h which is shared - with common/ sim code, so move it all out to a new header which only - this port will include. - - sim: pru: move arch-specific settings to internal header - There's no need for these settings to be in sim-main.h which is shared - with common/ sim code, so drop the pru.h include and move the remaining - pru-specific settings into it. - -2022-12-23 Mike Frysinger - - sim: mn10300: standardize the arch-specific settings a little - Rename mn10300_sim.h to mn10300-sim.h to match other ports, and move most - of the arch-specific content out of sim-main.h to it. This isn't a big - win though as we still have to include the header in sim-main.h due to the - igen interface: it hardcodes including sim-main.h in its files. So until - we can fix that, we have to keep bleeding these settings into the common - codes. - - Also take the opportunity to purge a lot of unused headers from these. - The local modules should already include the right headers, so there's - no need to force everyone to pull them in. A lot of this is a hold over - from the pre-igen days of this port. - -2022-12-23 Mike Frysinger - - sim: microblaze: move arch-specific settings to internal header - There's no need for these settings to be in sim-main.h which is shared - with common/ sim code, so move it all out to a new header which only - this port will include. - - sim: example-synacor: move arch-specific settings to internal header - There's no need for these settings to be in sim-main.h which is shared - with common/ sim code, so move it all out to a new header which only - this port will include. - - sim: moxie: move arch-specific settings to internal header - There's no need for these settings to be in sim-main.h which is shared - with common/ sim code, so move it all out to a new header which only - this port will include. - -2022-12-23 Mike Frysinger - - sim: riscv: move arch-specific settings to internal header - There's no need for these settings to be in sim-main.h which is shared - with common/ sim code, so move it all out to a new header which only - this port will include. - - We can also move the machs.h include out since the model logic was all - generalized from compile-time to runtime last year. - -2022-12-23 Mike Frysinger - - sim: v850: standardize the arch-specific settings a little - Rename v850_sim.h to v850-sim.h to match other ports, and move most - of the arch-specific content out of sim-main.h to it. This isn't a - big win though as we still have to include the header in sim-main.h - due to the igen interface: it hardcodes including sim-main.h in its - files. So until we can fix that, we have to keep bleeding these - settings into the common codes. - -2022-12-23 Mike Frysinger - - sim: msp430: move arch-specific settings to internal header - There's no need for these settings to be in sim-main.h which is shared - with common/ sim code, so drop the msp430-sim.h include and move it to - the few files that actually need it. - - While we're here, drop redundant includes from sim-main.h: - * sim-config.h & sim-types.h included by sim-basics.h already - * sim-engine.h included by sim-base.h already - And move sim-options.h to the one file that needs it. - -2022-12-23 Mike Frysinger - - sim: ft32: move arch-specific settings to internal header - There's no need for these settings to be in sim-main.h which is shared - with common/ sim code, so drop the ft32-sim.h include and move it to - the few files that actually need it. - -2022-12-23 Mike Frysinger - - sim: d10v: move arch-specific settings to internal header - There's no need for these settings to be in sim-main.h which is shared - with common/ sim code, so drop the d10v_sim.h include and move it to - the few files that actually need it. - - Also rename the file to standardize it a bit better with other ports. - -2022-12-23 Mike Frysinger - - sim: cr16: move arch-specific settings to internal header - There's no need for these settings to be in sim-main.h which is shared - with common/ sim code, so drop the cr16_sim.h include and move it to - the few files that actually need it. - - Also rename the file to standardize it a bit better with other ports. - -2022-12-23 Mike Frysinger - - sim: arm: move arch-specific settings to internal header - There's no need for these settings to be in sim-main.h which is shared - with common/ sim code, so move it all out to a new header which only - this port will include. - - The BIT override would be better in the place where it's redefined, so - move it to armdefs.h instead. - -2022-12-23 Mike Frysinger - - sim: aarch64: move arch-specific settings to internal header - There's no need for these settings to be in sim-main.h which is shared - with common/ sim code, so move it all out to a new header which only - this port will include. - - While we're here, drop redundant includes from sim-main.h: - * sim-types.h is included by sim-base.h already - * sim-base.h is included twice - * sim-io.h is included by sim-base.h already - -2022-12-23 Mike Frysinger - - sim: avr: move arch-specific settings to internal header - There's no need for these settings to be in sim-main.h which is shared - with common/ sim code, so move it all out to a new header which only - this port will include. - -2022-12-23 Nick Clifton - - Fix illegal memory access parsing corrupt DWARF information. - PR 29936 - * dwarf2.c (concat_filename): Fix check for a directory index off - the end of the directory table. - -2022-12-23 Eli Zaretskii - - Fix MinGW build using mingw.org's MinGW - This allows to build GDB even though the default value of - _WIN32_WINNT is lower than the one needed to expose some - new APIs used here, and leave the test for their actual - support to run time. - * gdb/nat/windows-nat.c (EXTENDED_STARTUPINFO_PRESENT): Define if - not defined. - (create_process_wrapper): Use 'gdb_lpproc_thread_attribute_list' - instead of 'PPROC_THREAD_ATTRIBUTE_LIST' (which might not be defined - at compile time). This fixes compilation error using mingw.org's - MinGW. - -2022-12-23 Mark Harmstone - - ld: Write linker symbols in PDB - - ld: Copy other symbols into PDB file - - ld: Write globals stream in PDB - - ld: Parse LF_UDT_SRC_LINE records when creating PDB file - - ld: Write types into IPI stream of PDB - - ld: Write types into TPI stream of PDB - - ld: Write DEBUG_S_LINES entries in PDB file - - ld: Fix segfault in populate_publics_stream - - ld: Write DEBUG_S_FILECHKSMS entries in PDBs - - ld: Generate PDB string table - -2022-12-23 Alan Modra - - pdb build fixes - Enable compilation of ld/pdb.c just for x86, as is done for bfd/pdb.c. - This reduces the size of ld and is necessary with the following - patches that call a COFF-only bfd function from ld/pdb.c. Without it - we'd break every non-COFF target build. - -2022-12-23 Mike Frysinger - - sim: lm32/m32r: drop redundant opcode/cgen.h include - The xxx-desc.h header file already includes this, and it's how the - other cgen ports are getting it, so drop it from these two. - - sim: ppc: drop unused types from sim-main.h - The common sim headers should define these for us already, so there's - no need for the ppc header to set them up. - - sim: cgen: move symcat.h include to where it's used - Move this out of the global sim-main.h and to the few files that - actually use functions from it. Only the cgen ports were pulling - this, so this makes cgen & non-cgen behave more the same. - - sim: cgen: move cgen-types.h include to cgen-defs.h - The cgen-types.h header sets up types that are needed by cgen-defs.h, - so move the include out of sim-main.h and to that header. It might - be needed in other specific modules, but for now let's kick it out of - sim-main.h to make some progress. Things still build with just this. - -2022-12-23 Mike Frysinger - - Revert "sim: mn10300: drop unused sim-main.c" - This reverts commit 681a422b855e4b20086554b170dae051361f00c7. - - I missed that this was included via common/sim-inline.c. I thought - I had grepped the top of the tree, but I must have only done mn10300. - - Add a comment to make it clear where/how this file is used. - -2022-12-23 Mike Frysinger - - sim: mn10300: drop unused sim-main.c - Nothing compiles or references this, so punt it. - - sim: endian: move bfd.h from header to source - The bfd APIs are used only by sim-n-endian.h which is only included by - sim-endian.c, so move the bfd.h include there and out of sim-endian.h - which is included by many other modules. - -2022-12-23 Mike Frysinger - - sim: move bfd.h include out of sim-main.h - Not all arches include this in sim-main.h, and the ones that do don't - actually use bfd defines in the sim-main.h header. Prune it to make - sim-main.h simpler so we can kill it off entirely in the future. - - We add the include to the files that utilize e.g. bfd_vma though. - -2022-12-23 Mike Frysinger - - sim: mcore: replace custom "word" type with int32_t - This is a 32-bit architecture with 32-bit registers, so replace the - custom "word" long int typedef with an explicit int32_t. This is - a correctness fix since long will be 64-bits on most 64-bit hosts. - - sim: moxie: replace custom "word" type with int32_t - This is a 32-bit architecture with 32-bit registers, so replace the - custom "word" int typedef with an explicit int32_t. Practically - speaking, this produces the same code, but it should hopefully make - it easier to merge common code in the future. - - sim: cr16/d10v/mcore/moxie: clean up unused word & uword types - Nothing actually uses these, so punt them. Some of the ports are - using local "word" types, but we'll clean those up in a follow up. - - sim: mips: trim redundant igen settings - These variables are setting the same value as the defaults. Trim - this redundant logic to make it easier to see the real differences - so we can try to keep unifying cases. - - sim: mips: merge mips64* with existing multi-run build - Change the default (unhandled) mips64* targets to use the existing - mips64 multi-run build. It already handles the formats, we just - have to list the mips8000 bfd for it. - - sim: mips: merge mips64vr5000 with existing multi-run build - The existing mips64vr-* multi-run build already handles mips5000 - targets, so reuse that for mips64vr5* targets too. This moves - more logic from build-time to runtime so we can have a single - binary that supports many targets. - -2022-12-23 Nelson Chu - - RISC-V: Relax the order checking for the architecture string - * riscv-toolchain-conventions, - PR, https://github.com/riscv-non-isa/riscv-toolchain-conventions/pull/14 - Issue, https://github.com/riscv-non-isa/riscv-toolchain-conventions/issues/11 - - * Refer to the commit afc41ffb, - RISC-V: Reorder the prefixed extensions which are out of order. - - In the past we only allow to reorder the prefixed extensions. But according - to the PR 14 in the riscv-toolchain-convention, we can also relax the order - checking to allow the whole extensions be written out of orders, including - the single standard extensions and the prefixed multi-letter extensions. - Just that we still need to follow the following rules as usual, - - 1. prefixed extensions need to be seperated with `_'. - 2. prefixed extensions need complete . version if set. - - Please see the details in the march-ok-reorder gas testcase. - - Passed the riscv-gnu-toolchain regressions. - - bfd/ - * elfxx-riscv.c (enum riscv_prefix_ext_class): Changed RV_ISA_CLASS_UNKNOWN - to RV_ISA_CLASS_SINGLE, since everything that does not belong to the - multi-keyword will possible be a single extension for the current parser. - (parse_config): Likewise. - (riscv_get_prefix_class): Likewise. - (riscv_compare_subsets): Likewise. - (riscv_parse_std_ext): Removed, and merged with riscv_parse_prefixed_ext - into riscv_parse_extensions. - (riscv_parse_prefixed_ext): Likewise. - (riscv_parse_subset): Only need to call riscv_parse_extensions to parse - both single standard and prefixed extensions. - gas/ - * testsuite/gas/riscv/march-fail-order-std.d: Removed since the relaxed - order checking. - * testsuite/gas/riscv/march-fail-order-std.l: Likewise. - * testsuite/gas/riscv/march-fail-order-x-std.d: Likewise. - * testsuite/gas/riscv/march-fail-order-z-std.d: Likewise. - * testsuite/gas/riscv/march-fail-order-zx-std.l: Likewise. - * testsuite/gas/riscv/march-fail-unknown-std.l: Updated. - * testsuite/gas/riscv/march-ok-reorder.d: New testcase. - -2022-12-23 Mike Frysinger - - sim: drop unused SIM_ADDR type [PR sim/7504] - Now that sim APIs either use 64-bit addresses all the time, or more - appropriate target-specific types, drop this now-unused 32-bit-only - address type. - - Bug: https://sourceware.org/PR7504 - -2022-12-23 Mike Frysinger - - sim: mips: switch from SIM_ADDR to address_word - The latter type matches the address size configured for this sim. - - Also take the opportunity to simplify printf logic by leveraging - PRI* macros. - -2022-12-23 Mike Frysinger - - sim: v850: switch from SIM_ADDR to address_word - The latter type matches the address size configured for this sim. - -2022-12-23 Mike Frysinger - - sim: switch sim_{read,write} APIs to 64-bit all the time [PR sim/7504] - We've been using SIM_ADDR which has always been 32-bit. This means - the upper 32-bit address range in 64-bit sims is inaccessible. Use - 64-bit addresses all the time since we want the APIs to be stable - regardless of the active arch backend (which can be 32 or 64-bit). - - The length is also 64-bit because it's completely feasible to have - a program that is larger than 4 GiB in size/image/runtime. Forcing - the caller to manually chunk those accesses up into 4 GiB at a time - doesn't seem useful to anyone. - - Bug: https://sourceware.org/PR7504 - -2022-12-23 Mike Frysinger - - sim: use bfd_vma when reading start addr from bfd info - Since SIM_ADDR is always 32-bit, it might truncate the address with - 64-bit ELFs. Since we load that addr from the bfd, use the bfd_vma - type which matches the bfd_get_start_address API. - - sim: m32r: include sim-hw.h for sim_hw_parse - -2022-12-23 Alan Modra - - COFF build-id writes uninitialised data to file - 1) The first write in write_build_id wrote rubbish past the struct - external_IMAGE_DEBUG_DIRECTORY, which was later overwritten with - correct data. No user visible problem there, except that tools like - valgrind complain. - 2) The size for the pdb name was incorrectly calculated. - - * emultempl/pe.em (write_build_id): Write the debug directory, - not the entire section contents. - (setup_build_id): Add size for the base name of pdb_name, not - the full path. - * emultempl/pep.em: Likewise. - * testsuite/ld-pe/pdb2-section-contrib.d: Update. - -2022-12-23 Mike Frysinger - - sim: mips: merge mips64vr4300 with existing multi-run build - The existing mips64vr-* multi-run build already handles mips4300 - targets, so reuse that for mips64vr43* targets too. This moves - more logic from build-time to runtime so we can have a single - binary that supports many targets. - -2022-12-23 GDB Administrator - - Automatic date update in version.in - -2022-12-22 Indu Bhagat - - sframe: doc: update documentation for pauth key in SFrame FDE - ChangeLog: - - * libsframe/doc/sframe-spec.texi - -2022-12-22 Indu Bhagat - - gas: sframe: testsuite: add testcase for .cfi_b_key_frame - This is actually a composite test that checks SFrame unwind information - generation for both the .cfi_negate_ra_state and .cfi_b_key_frame - directives on aarch64. - - ChangeLog: - - * testsuite/gas/cfi-sframe/cfi-sframe-aarch64-pac-ab-key-1.d: - New test. - * testsuite/gas/cfi-sframe/cfi-sframe-aarch64-pac-ab-key-1.s: - Likewise. - * testsuite/gas/cfi-sframe/cfi-sframe.exp: Run new test. - -2022-12-22 Indu Bhagat - - objdump/readelf: sframe: emit marker for SFrame FDE with B key - ChangeLog: - - * libsframe/sframe-dump.c (is_sframe_abi_arch_aarch64): New - definition. - (dump_sframe_func_with_fres): Emit a string if B key is used. - -2022-12-22 Indu Bhagat - - gas: sframe: add support for .cfi_b_key_frame - Gather the information from the DWARF FDE on whether frame's return - addresses are signed using the B key or A key. Reflect the information in - the SFrame counterpart data structure, the SFrame FDE. - - ChangeLog: - - * gas/gen-sframe.c (get_dw_fde_pauth_b_key_p): New definition. - (sframe_v1_set_func_info): Add new argument for pauth_key. - (sframe_set_func_info): Likewise. - (output_sframe_funcdesc): Likewise. - * gas/gen-sframe.h (struct sframe_version_ops): Add new argument - to the function pointer declaration. - * gas/sframe-opt.c (sframe_convert_frag): Handle pauth_key. - -2022-12-22 Indu Bhagat - - sframe.h: add support for .cfi_b_key_frame - ARM 8.3 provides five separate keys that can be used to authenticate - pointers. There are two key for executable (instruction) pointers. The - enum pointer_auth_key in gas/config/tc-aarch64.h currently holds two keys: - enum pointer_auth_key { - AARCH64_PAUTH_KEY_A, - AARCH64_PAUTH_KEY_B - }; - - Analogous to the above, in SFrame format V1, a bit is reserved in the SFrame - FDE to indicate which key is used for signing the frame's return addresses: - - SFRAME_AARCH64_PAUTH_KEY_A has a value of 0 - - SFRAME_AARCH64_PAUTH_KEY_B has a value of 1 - - Note that the information in this bit will always be used along with the - mangled_ra_p bit, the latter indicates whether the return addresses are - mangled/contain PAC auth bits. - - include/ChangeLog: - - * sframe.h (SFRAME_AARCH64_PAUTH_KEY_A): New definition. - (SFRAME_AARCH64_PAUTH_KEY_B): Likewise. - (SFRAME_V1_FUNC_INFO): Adjust to accommodate pauth_key. - (SFRAME_V1_FUNC_PAUTH_KEY): New macro. - (SFRAME_V1_FUNC_INFO_UPDATE_PAUTH_KEY): Likewise. - -2022-12-22 Jan Beulich - - gas: re-arrange listing output for .irp and alike - It is kind of odd to have the expansions of such constructs ahead of - their definition in listings with macro expansion enabled. Adjust this - by pulling ahead the output of the definition lines, taking care to - avoid producing a listing line for (non-existing) line 0 when the source - is stdin. - - Note that with the code movement the conditional operator isn't - necessary anymore - list->line now match up. - -2022-12-22 Jan Beulich - - x86: correct/improve TSX controls - TSXLDTRK takes RTM as a prereq. Additionally introduce an umbrella "tsx" - extension option covering both RTM and HLE, paralleling the "abm" one we - already have. - -2022-12-22 Jan Beulich - - x86: add dependencies on SVME - SEV-ES is an extension to SVME. SNP in turn is an extension to SEV-ES, - and yet in turn RMPQUERY is a SNP extension. - - Note that cpu_arch[] has no SNP entry, so CPU_ANY_SNP_FLAGS remains - unused (just like CPU_SNP_FLAGS already is). - -2022-12-22 Jan Beulich - - x86: add dependencies on VMX - Both EPT and VMFUNC are extensions to VMX. - -2022-12-22 Jan Beulich - - x86: correct XSAVE* dependencies - Like various other features AMX-TILE takes XSAVE as a prereq. - - XSAVES, unconditionally using compacted format, in turn effectively - takes XSAVEC as a prereq (an SDM clarification to this effect is in the - works). - -2022-12-22 Jan Beulich - - x86: correct dependencies of a few AVX512 sub-features - Like AVX512-FP16, several other extensions require wider than 16-bit - mask registers. As a result they take AVX512BW as a prereq, not (just) - AVX512F. Which in turn points out wrong expectations in the noavx512-1 - testcase. - - x86: rework noavx512-1 testcase - So far the set of ".noavx512*" has been accumulating, which isn't ideal. - In particular this hides issues with dependencies between features. - Switch back to the default ISA before disabling a particular subset. - Furthermore limit redundancy by wrapping the repeated block of insns in - an .irp. - - x86: add dependencies on AVX2 - Like AVX-VNNI both VAES and VPCLMUL take AVX2 as a prereq, for operating - on up to 256-bit packed integer vectors. - - x86: correct SSE dependencies - SSE itself takes FXSR as a prereq. Like AES, PCLMUL, and SHA both GFNI - and KL take SSE2 as a prereq, for operating on packed integers. And - while correcting KL also record it as a prereq to WIDEKL. - -2022-12-22 Jan Beulich - - x86: correct what gets disabled by certain ".arch .no*" - Features with prereqs as well as features with dependents cannot re-use - CPU_*_MASK for the 3rd argument of SUBARCH() - they need to use - CPU_ANY_*_MASK in order to avoid disabling too many (when there are - prereqs) and/or too few (when there are dependents) features. - - Generally any CPU_ANY_*_MASK which exist should not remain unused. - Exceptions are - - FISTTP which has no corresponding entry in cpu_arch[], - - IAMCU which is a base architecture and hence uses ARCH(), not - SUBARCH() (only extensions can be disabled, but unlike for Cpu*86 it - would be a little more clumsy to suppress generating of the #define). - -2022-12-22 Jan Beulich - - x86: re-work ISA extension dependency handling - Getting both forward and reverse ISA dependencies right / consistent has - been a permanent source of mistakes. Reduce what needs specifying - manually to just the direct forward dependencies. Transitive forward - dependencies as well as reverse ones are now derived and hence cannot go - out of sync anymore (at least in the vast majority of cases; there are a - few special cases to still take care of manually). In the course of this - several CPU_ANY_*_FLAGS disappear, requiring adjustment to the - assembler's cpu_arch[]. - - Note that to retain the correct reverse dependency of AVX512F wrt - AVX512-VP2INTERSECT, the latter has the previously missing AVX512F - prereq added. - - Note further that to avoid adding the following undue prereqs: - * ATHLON, K8, and AMDFAM10 gain CMOV and FXSR, - * IAMCU gains 387, - auxiliary table entries (including a colon-separated modifier) are - introduced in addition to the ones representing from converting the old - table. - - To maintain forward-only dependencies between AVX (XOP) and SSE* (SSE4a) - (i.e. "nosse" not disabling AVX), reverse dependency tracking is - artifically suppressed. - - As a side effect disabling of SSE or SSE2 will now also disable AES, - PCLMUL, and SHA (respective elements were missing from - CPU_ANY_SSE2_FLAGS). - -2022-12-22 Mike Frysinger - - sim: mips: match target on cpu settings - We don't need to enforce larger target settings when the only thing - the sim should care about is the CPU target. So reduce most of the - target matches to only check the CPU. - - sim: mips: move fpu bitsize defines to top-level configure - This drops support for the --enable-sim-float configure option, - but it's not clear anyone ever actually used that. Eventually - we'll want this to be a runtime option anyways. - - sim: mips: move bitsize defines to top-level configure - Since the msb value is always defined as the wordsize-1, stop - hardcoding that value directly, and use a CPP value instead. - - sim: mips: move subtarget defines to top-level configure - We want to kill off mips/configure entirely. Move this small part - out now to get started. - - sim: mips: always resolve active bfd mach dynamically - Don't assume that the default bfd that we configured for is the one - that is always active when running a program. We already have access - to the real runtime value, so use it directly. This simplifies the - code quite a bit, and will make it easier to support multiple mach's - in a single binary. - - sim: hw-config.h: move generation to top-level - In order to compile arch objects from the top-level, we need to - generate the hw-config.h header, so move that logic up to the top - level first. - - sim: build: hoist lists of hw devices up - We need these in the top-level to generate libsim.a, but also in the - subdirs to generate hw-config.h. Move it to the local.mk, and pass - it down when running recursive make. This avoids duplication, and - makes it available to both. We can simplify this once we move the - various steps up to the top-level too. - - sim: build: hoist lists of common objects up - In order to create libsim.a in the common dir, we need the list of - objects for each target. To avoid duplicating the list with the - recursive make in each port, pass it down as a variable. This is - a temporary hack until the top-level creates libsim.a for ports. - -2022-12-22 GDB Administrator - - Automatic date update in version.in - -2022-12-21 Alan Modra - - PR29925, Memory leak in find_abstract_instance - The testcase in the PR had a variable with both DW_AT_decl_file and - DW_AT_specification, where the DW_AT_specification also specified - DW_AT_decl_file. This leads to a memory leak as the file name is - malloced and duplicates are not expected. - - I've also changed find_abstract_instance to not use a temp for "name", - because that can result in a change in behaviour from the usual last - of duplicate attributes wins. - - PR 29925 - * dwarf2.c (find_abstract_instance): Delete "name" variable. - Free *filename_ptr before assigning new file name. - (scan_unit_for_symbols): Similarly free func->file and - var->file before assigning. - -2022-12-21 Andrew Pinski - - Fix compiling of top.c - When I moved my last patch forward, somehow I missed removing - the #endif for the HAVE_LIBMPFR case. - - Committed as obvious after a quick build. - - gdb/ChangeLog: - * top.c: Remove the extra #endif which was missed. - -2022-12-21 Andrew Pinski - - Use toplevel configure for GMP and MPFR for gdb - This patch uses the toplevel configure parts for GMP/MPFR for - gdb. The only thing is that gdb now requires MPFR for building. - Before it was a recommended but not required library. - Also this allows building of GMP and MPFR with the toplevel - directory just like how it is done for GCC. - We now error out in the toplevel configure of the version - of GMP and MPFR that is wrong. - - OK after GDB 13 branches? Build gdb 3 ways: - with GMP and MPFR in the toplevel (static library used at that point for both) - With only MPFR in the toplevel (GMP distro library used and MPFR built from source) - With neither GMP and MPFR in the toplevel (distro libraries used) - - Changes from v1: - * Updated gdb/README and gdb/doc/gdb.texinfo. - * Regenerated using unmodified autoconf-2.69 - - Thanks, - Andrew Pinski - - ChangeLog: - * Makefile.def: Add configure-gdb dependencies - on all-gmp and all-mpfr. - * configure.ac: Split out MPC checking from MPFR. - Require GMP and MPFR if the gdb directory exist. - * Makefile.in: Regenerate. - * configure: Regenerate. - - gdb/ChangeLog: - - PR bug/28500 - * configure.ac: Remove AC_LIB_HAVE_LINKFLAGS - for gmp and mpfr. - Use GMPLIBS and GMPINC which is provided by the - toplevel configure. - * Makefile.in (LIBGMP, LIBMPFR): Remove. - (GMPLIBS, GMPINC): Add definition. - (INTERNAL_CFLAGS_BASE): Add GMPINC. - (CLIBS): Exchange LIBMPFR and LIBGMP - for GMPLIBS. - * target-float.c: Make the code conditional on - HAVE_LIBMPFR unconditional. - * top.c: Remove code checking HAVE_LIBMPFR. - * configure: Regenerate. - * config.in: Regenerate. - * README: Update GMP/MPFR section of the config - options. - * doc/gdb.texinfo: Likewise. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28500 - -2022-12-21 Bruno Larsen - - gdb/c++: validate 'using' directives based on the current line - When asking GDB to print a variable from an imported namespace, we only - want to see variables imported in lines that the inferior has already - gone through, as is being tested last in gdb.cp/nsusing.exp. However - with the proposed change to gdb.cp/nsusing.exp, we get the following - failures: - - (gdb) PASS: gdb.cp/nsusing.exp: continue to breakpoint: marker10 stop - print x - $9 = 911 - (gdb) FAIL: gdb.cp/nsusing.exp: print x, before using statement - next - 15 y += x; - (gdb) PASS: gdb.cp/nsusing.exp: using namespace M - print x - $10 = 911 - (gdb) PASS: gdb.cp/nsusing.exp: print x, only using M - - Showing that the feature wasn't functioning properly, it just so - happened that gcc ordered the namespaces in a convenient way. - This happens because GDB doesn't take into account the line where the - "using namespace" directive is written. So long as it shows up in the - current scope, we assume it is valid. - - To fix this, add a new member to struct using_direct, that stores the - line where the directive was written, and a new function that informs if - the using directive is valid already. - - Unfortunately, due to a GCC bug, the failure still shows up. Compilers - that set the declaration line of the using directive correctly (such as - Clang) do not show such a bug, so the test includes an XFAIL for gcc - code. - - Finally, because the final test of gdb.cp/nsusing.exp has turned into - multiple that all would need XFAILs for older GCCs (<= 4.3), and that - GCC is very old, if it is detected, the test just exits early. - - Approved-by: Tom Tromey - -2022-12-21 Nick Clifton - - Updated Romanian translation for the BFD sub-directory. - - Fix an attempt to allocate an unreasonably large amount of memory when parsing a corrupt ELF file. - PR 29924 - * objdump.c (load_specific_debug_section): Check for excessively - large sections. - - Keep the .drectve section when performing a relocateable link. - PR 29900 - * scripttempl/pe.sc: Keep the .drectve section when performing a - relocateable link. - * scripttempl/pep.sc: Likewise. - -2022-12-21 Jan Beulich - - x86: rename CheckRegSize to CheckOperandSize - While originally indeed used for register size checking only, the - attribute has been used for memory operand size checking as well already - for quite a while, with more such uses recently having been added. - - gprofng/testsuite: restrict testing to native configurations - The binaries involved in testing gprofng are native ones, and hence a - cross build of binutils won't really test intended functionality. Since - this testing takes quite a bit of time (typically more than running all - of binutils, gas, and ld testsuites together), restrict the testing to - native configurations only. - -2022-12-21 Alan Modra - - enable-non-contiguous-regions warnings - The warning about discarded sections in elf_link_input_bfd doesn't - belong there since the code is dealing with symbols. Multiple symbols - in a discarded section will result in multiple identical warnings - about the section. Move the warning to a new function in ldlang.c. - - The patch also tidies the warning quoting of section and file names, - consistently using `%pA' and `%pB'. I'm no stickler for one style of - section and file name quoting, but they ought to be consistent within - a warning, eg. see the first one fixed in ldlang.c, and when a warning - is emitted for multiple targets they all ought to use exactly the same - format string to reduce translation work. elf64-ppc.c loses the - build_one_stub errors since we won't get there before hitting the - fatal errors in size_one_stub. - - bfd/ - * elflink.c (elf_link_input_bfd): Don't warn here about - discarded sections. - * elf32-arm.c (arm_build_one_stub): Use consistent style in - --enable-non-contiguous-regions error. - * elf32-csky.c (csky_build_one_stub): Likewise. - * elf32-hppa.c (hppa_build_one_stub): Likewise. - * elf32-m68hc11.c (m68hc11_elf_build_one_stub): Likewise. - * elf32-m68hc12.c (m68hc12_elf_build_one_stub): Likewise. - * elf32-metag.c (metag_build_one_stub): Likewise. - * elf32-nios2.c (nios2_build_one_stub): Likewise. - * elfnn-aarch64.c (aarch64_build_one_stub): Likewise. - * xcofflink.c (xcoff_build_one_stub): Likewise. - * elf64-ppc.c (ppc_size_one_stub): Likewise. - (ppc_build_one_stub): Delete dead code. - ld/ - * ldlang.c (lang_add_section): Use consistent style in - --enable-non-contiguous-regions warnings. - (size_input_section): Likewise. - (warn_non_contiguous_discards): New function. - (lang_process): Call it. - * testsuite/ld-arm/non-contiguous-arm.d: Update. - * testsuite/ld-arm/non-contiguous-arm4.d: Update. - * testsuite/ld-arm/non-contiguous-arm7.d: Add - --enable-non-contiguous-regions-warnings. - * testsuite/ld-arm/non-contiguous-arm7.err: New. - * testsuite/ld-powerpc/non-contiguous-powerpc.d: Update. - * testsuite/ld-powerpc/non-contiguous-powerpc64.d: Update. - -2022-12-21 Alan Modra - - PR29922, SHT_NOBITS section avoids section size sanity check - PR 29922 - * dwarf2.c (find_debug_info): Ignore sections without - SEC_HAS_CONTENTS. - -2022-12-21 Mike Frysinger - - sim: fully merge sim_cpu_base into sim_cpu - Now that all ports have migrated to the new framework, drop support - for the old sim_cpu_base layout. There's a lot of noise here, so - it's been split into a dedicated commit. - - sim: enable common sim_cpu usage everywhere - All ports should be migrated now. Drop the SIM_HAVE_COMMON_SIM_CPU - knob and require it be used everywhere now. - - sim: or1k: invert sim_cpu storage - The cpu.h change is in generated cgen code, but that has been sent - upstream too, so the next regen should include it automatically. - - sim: m32r: invert sim_cpu storage - The cpu*.h changes are in generated cgen code, but that has been sent - upstream too, so the next regen should include it automatically. - - sim: lm32: invert sim_cpu storage - The cpu.h change is in generated cgen code, but that has been sent - upstream too, so the next regen should include it automatically. - - sim: iq2000: invert sim_cpu storage - The cpu.h change is in generated cgen code, but that has been sent - upstream too, so the next regen should include it automatically. - - sim: frv: invert sim_cpu storage - The cpu.h change is in generated cgen code, but that has been sent - upstream too, so the next regen should include it automatically. - - sim: cris: invert sim_cpu storage - The cpu*.h changes are in generated cgen code, but that has been sent - upstream too, so the next regen should include it automatically. - - sim: bpf: invert sim_cpu storage - The cpu.h change is in generated cgen code, but that has been sent - upstream too, so the next regen should include it automatically. - - sim: cgen: prep for inverting sim_cpu storage - Some common cgen code changes to allow cgen ports to invert their - sim_cpu storage one-by-one. - - sim: riscv: invert sim_cpu storage - - sim: pru: invert sim_cpu storage - - sim: example-synacor: invert sim_cpu storage - - sim: h8300: invert sim_cpu storage - - sim: m68hc11: invert sim_cpu storage - - sim: mips: invert sim_cpu storage - - sim: v850: invert sim_cpu storage - - sim: mcore: invert sim_cpu storage - - sim: aarch64: invert sim_cpu storage - - sim: microblaze: invert sim_cpu storage - - sim: avr: invert sim_cpu storage - - sim: moxie: invert sim_cpu storage - - sim: msp430: invert sim_cpu storage - - sim: ft32: invert sim_cpu storage - - sim: bfin: invert sim_cpu storage - -2022-12-21 Mike Frysinger - - sim: sim_cpu: invert sim_cpu storage - Currently all ports have to declare sim_cpu themselves in their - sim-main.h and then embed the common sim_cpu_base in it. This - dynamic makes it impossible to share common object code among - multiple ports because the core data structure is always different. - - Let's invert this relationship: common code declares sim_cpu, and - the port uses the new arch_data field for its per-cpu state. - - This is the first in a series of changes: it adds a define to select - between the old & new layouts, then converts all the ports that don't - need custom state over to the new layout. This includes mn10300 that, - while it defines custom fields in its cpu struct, never uses them. - -2022-12-21 Mike Frysinger - - sim: move register headers into sim/ namespace [PR sim/29869] - These headers define the register numbers for each port to implement - the sim_fetch_register & sim_store_register interfaces. While gdb - uses these, the APIs are part of the sim, not gdb. Move the headers - out of the gdb/ include namespace and into sim/ instead. - - sim: ppc: drop old dgen.c generator - The spreg.[ch] files live in the source tree now and are created - with the dgen.py script, so we don't need this old tool anymore. - -2022-12-21 Mike Frysinger - - sim: ppc: move spreg.[ch] files to the source tree - Simplify the build by moving the generation of these files from - build-time (via dgen.c that we have to compile & execute on the - build system) to maintainer/release mode (via spreg-gen.py that - we only ever execute when the spreg table actually changes). It - speeds up the build process and makes it easier for us to reason - about & review changes to the code generator. - - The tool is renamed from "dgen" because it's hardcoded to only - generated spreg files. It isn't a generalized tool for creating - lookup tables. - -2022-12-21 GDB Administrator - - Automatic date update in version.in - -2022-12-20 Hannes Domani - - Fix install-strip target - The libtool patch broke install-strip of gdb: - - /bin/sh ../../gdb/../mkinstalldirs /src/gdb/inst/share/gdb/python/gdb - transformed_name=`t='s,y,y,'; \ - echo gdb | sed -e "$t"` ; \ - if test "x$transformed_name" = x; then \ - transformed_name=gdb ; \ - else \ - true ; \ - fi ; \ - /bin/sh ../../gdb/../mkinstalldirs /src/gdb/inst/bin ; \ - /bin/sh ./libtool --mode=install STRIPPROG='strip' /bin/sh /src/gdb/gdb.git/install-sh -c -s \ - gdb \ - /src/gdb/inst/bin/$transformed_name ; \ - /bin/sh ../../gdb/../mkinstalldirs /src/gdb/inst/include/gdb ; \ - /usr/bin/install -c -m 644 jit-reader.h /src/gdb/inst/include/gdb/jit-reader.h - libtool: install: `/src/gdb/inst/bin/gdb' is not a directory - libtool: install: Try `libtool --help --mode=install' for more information. - - Since INSTALL_PROGRAM_ENV is no longer at the beginning of the command, the - gdb executable is not installed with install-strip. - -2022-12-20 Torbjörn SVENSSON - - bfd: Discard symbol regardless of warning flag - The discard of symbols should be performed whether the warning for - the discard is enabled or not. - Without this patch, ld would segfault in bfd_section_removed_from_list, - called in the if-statement right after this block, as the argument - isec->output_section can be NULL. - - Co-Authored-By: Yvan ROUX - -2022-12-20 Alan Modra - - PR29915, bfdio.c does not compile with mingw.org's MinGW - PR 29915 - * configure.ac: Add AC_CHECK_DECLS test ___lc_codepage_func. - * configure: Regenerate. - * config.in: Regenerate. - * bfdio.c (___lc_codepage_func): Move declaration to.. - (_bfd_real_fopen): ..here, and use !HAVE_DECL____LC_CODEPAGE_FUNC. - - Re: x86: remove i386-opc.c - Regen opcodes/po/POTFILES.in - -2022-12-20 Mike Frysinger - - sim: ppc: change spreg switch table generation to compile-time - Simplify the generator by always outputting the switch tables, and - leave the choice of whether to use them to the compiler via a -D - flag. - -2022-12-20 Mike Frysinger - - sim: dv-core: add hw_detach_address method [PR sim/25211] - The core device has an attach address method as the root of the tree - which calls out to the sim API. But it doesn't have a corresponding - detach method which means we just crash if anything tries to detach - itself from the core. In practice, the m68hc11 is the only model - that actually tries to detach itself on the fly, so no one noticed - earlier. - - With this in place, we can delete the existing detach code from the - m68hc11 model since it defaults to "passthru" callback which will in - turn call the dv-core detach, and they have the same behavior -- call - the sim core API to detach from the address space. - - Bug: https://sourceware.org/PR25211 - -2022-12-20 Vladimir Mezentsev - - gprofng: PR29646 Various warnings - gprofng/ChangeLog - 2022-12-19 Vladimir Mezentsev - - PR gprofng/29646 - * common/core_pcbe.c: Fix missingReturn warning. - * libcollector/iolib.c: Fix -Waddress warnings. - * src/Settings.cc: Likewise. - * src/checks.cc: Likewise. - * libcollector/linetrace.c: Likewise. - * libcollector/iotrace.c: Fix va_end_missing error. - * libcollector/libcol_util.c: Fix uninitvar warning. - * src/Command.cc: Fix arrayIndexOutOfBounds error. - * src/Function.cc: Fix uninitStructMember warning. - * src/ipc.cc: Fix -Wwrite-strings warnings. - -2022-12-20 GDB Administrator - - Automatic date update in version.in - -2022-12-19 Tom Tromey - - Avoid compiler warning in dwarf-do-refresh - The Emacs 28 compiler warns about dwarf-mode.el: - - Warning (comp): dwarf-mode.el:180:32: Warning: Unused lexical argument `ignore' - - This is easily fixed by prepending "_" to the parameter's name. - - binutils/ChangeLog - 2022-12-19 Tom Tromey - - * dwarf-mode.el (dwarf-do-refresh): Avoid compiler warning. - -2022-12-19 Tom Tromey - - Use bool in bpstat - This changes bpstat to use 'bool' rather than 'char', and updates the - uses. - - Use bool constants for value_print_options - This changes the uses of value_print_options to use 'true' and 'false' - rather than integers. - - Remove quick_symbol_functions::relocated - quick_symbol_functions::relocated is only needed for psymtabs, and - there it is only needed for Rust. However, because we've switched the - DWARF reader away from psymtabs, this means there's no longer a need - for this method at all. - -2022-12-19 Tom Tromey - - Remove MI version 1 - MI version 1 is long since obsolete. Several years ago, I filed - PR mi/23170 for this. I think it's finally time to remove this. - Any users of MI 1 can and should upgrade to a newer version. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=23170 - -2022-12-19 Tom Tromey - - Remove vestiges of MI version 0 - I found a few vestiges of MI version 0 in the test suite. This patch - removes them. - -2022-12-19 Alan Modra - - Tidy PR29893 and PR29908 fix - PR 29893 - PR 29908 - * dwarf.c (display_debug_addr): Combine dwarf5 unit_length checks. - Delete dead code. - -2022-12-19 Jan Vrany - - gdb: fix command lookup in execute_command () - Commit b5661ff2 ("gdb: fix possible use-after-free when - executing commands") used lookup_cmd_exact () to lookup - command again after its execution to avoid possible - use-after-free error. - - However this change broke test gdb.base/define.exp which - defines a post-hook for subcommand ("target testsuite"). - In this case, lookup_cmd_exact () returned NULL because - there's no command 'testsuite' in top-level commands. - - This commit fixes this case by looking up the command again - using the original command line via lookup_cmd (). - - Approved-By: Simon Marchi - -2022-12-19 Nick Clifton - - Fix potential illegal memory accesses when parsing corrupt DWARF data. - PR 29914 - * dwarf.c (fetch_indexed_value): Fail if the section is not big - enough to contain a header size field. - (display_debug_addr): Fail if the computed address size is too big - or too small. - - New Romainian translation for the GOLD subdirectory. - -2022-12-19 Jan Beulich - - gprofng/testsuite: skip Java test without JDK - There's no point in even trying the Java test when gprofng was built - without Java support, and when the building of the constituents of the - testcase also would fail. On such systems this converts the respective - tests from "unresolved" to "unsupported", making the overall testsuite - run no longer report failure just because of this. - - gprofng/testsuite: eliminate bogus casts - Casting pointers to unsigned int is generally problematic and hence - compilers tend to warn about such. While here they're used only in - fprintf(), it still seems better to omit such casts, even if only to - avoid setting bad precedents. - - gprofng/testsuite: correct line continuation in endcases.c - A backslash used to indicate line continuation (in a macro definition - here) is not supposed to be followed by blanks or other white space; the - end-of-line indicator is to follow immediately. - - gprofng/testsuite: correct names for signal handling tests - The signal handling tests spend most of their time in the signal - handlers, and hence for profile output to match anything in program - output, the respective name fields need to hold the handler function - names. This converts both respective tests from "unresolved" to actually - succeeding. - - gprofng/testsuite: adjust linking of synprog - In order for so_syn.so and so_syx.so to be able to access the main - program's "testtime" variable, that variable needs exposing in the - dynamic symbol table. Since this is a test program only, do it the brute - force way and simply expose all global symbols. - - Arm: break gas dependency on libopcodes - gas doesn't use anything from libopcodes (anymore?) - suppress linking - in that library. - - x86: omit Cpu prefixes from opcode table - These enumerators can be used in only one specific field, and hence the - Cpu prefix isn't needed ther for disambiguation / name space separation. - -2022-12-19 GDB Administrator - - Automatic date update in version.in - -2022-12-18 Alan Modra - - Comment bfd_get_section_limit_octets and bfd_get_section_alloc_size - * bfd.c (bfd_get_section_limit_octets): Add comment. - (bfd_get_section_alloc_size): Likewise. - * libbfd.c (_bfd_generic_get_section_contents): Use - bfd_get_section_limit_octets. - * section.c (bfd_get_section_contents): Likewise. - * bfd-in2.h: Regenerate. - -2022-12-18 Alan Modra - - ld bootstrap test in build dir with path containing symlinks - This allows the bootstrap test to run if you have a symlink somewhere - in the build path directory. $ld depends on $base_dir which is set - via tcl [pwd], collapsing the symlink like /usr/bin/pwd, while $objdir - contains the symlink. - - * testsuite/ld-bootstrap/bootstrap.exp: Normalize paths when - checking for ld build directory. - -2022-12-18 Joel Brobecker - - Update gdb/NEWS after GDB 13 branch creation. - This commit a new section for the next release branch, and renames - the section of the current branch, now that it has been cut. - -2022-12-18 Joel Brobecker - - Bump version to 14.0.50.DATE-git. - Now that the GDB 13 branch has been created, - this commit bumps the version number in gdb/version.in to - 14.0.50.DATE-git - - For the record, the GDB 13 branch was created - from commit 71c90666e601c511a5f495827ca9ba545e4cb463. - - Also, as a result of the version bump, the following changes - have been made in gdb/testsuite: - - * gdb.base/default.exp: Change $_gdb_major to 14. - -2022-12-18 GDB Administrator - - Automatic date update in version.in - -2022-12-17 Alan Modra - - bfd_get_relocated_section_contents allow NULL data buffer - This patch removes the bfd_malloc in default_indirect_link_order and - bfd_simple_get_relocated_section_contents, pushing the allocation down - to bfd_get_relocated_section_contents. The idea is to make use of the - allocation done with sanity checking in bfd_get_full_section_contents, - which is called by bfd_generic_get_relocated_section_contents. - - Doing this exposed a bug in bfd_get_full_section_contents. With - relaxation it is possible that an input section rawsize is different - to the section size. In that case we want to use the larger of - rawsize (the on-disk size for input sections) and size. - - * reloc.c (bfd_generic_get_relocated_section_contents), - * reloc16.c (bfd_coff_reloc16_get_relocated_section_contents), - * coff-alpha.c (alpha_ecoff_get_relocated_section_contents), - * coff-sh.c (sh_coff_get_relocated_section_contents), - * elf-m10200.c (mn10200_elf_get_relocated_section_contents), - * elf-m10300.c (mn10300_elf_get_relocated_section_contents), - * elf32-avr.c (elf32_avr_get_relocated_section_contents), - * elf32-cr16.c (elf32_cr16_get_relocated_section_contents), - * elf32-crx.c (elf32_crx_get_relocated_section_contents), - * elf32-h8300.c (elf32_h8_get_relocated_section_contents), - * elf32-nds32.c (nds32_elf_get_relocated_section_contents), - * elf32-sh.c (sh_elf_get_relocated_section_contents), - * elfxx-mips.c (_bfd_elf_mips_get_relocated_section_contents): - Handle NULL data buffer. - * bfd.c (bfd_get_section_alloc_size): New function. - * bfd-in2.h: Regenerate. - * compress.c (bfd_get_full_section_contents): Correct section - malloc size. - * linker.c (default_indirect_link_order): Don't malloc memory - here before calling bfd_get_relocated_section_contents. - * simple.c (bfd_simple_get_relocated_section_contents): Likewise. - -2022-12-17 Alan Modra - - asan: elf.c:12621:18: applying zero offset to null pointer - That's this line in elf_parse_notes: - while (p < buf + size) - - * elf.c (_bfd_elf_make_section_from_shdr): Don't call - elf_parse_notes when sh_size is zero. - -2022-12-17 Alan Modra - - Re: The problem with warning in elf_object_p - Commit 5aa0f10c424e added a per_xvec_warn array to provide support for - warnings from elf_object_p (and a later patch for warnings from - pe_bfd_object_p) to be cached and then only printed if the target - matches. It was quite limited in the style of message supported, only - one message could be printed, and didn't really meet the stated aim of - only warning when a target matches: There are many other errors and - warnings that can be emitted by functions called from elf_object_p. - - So this patch extends the error handler functions to support printing - to a string buffer, extends per_xvec_warn to support multiple errors/ - warnings, and hooks this all into bfd_check_format_matches. If - bfd_check_format_matches succeeds then any errors/warnings are printed - for the matching target. If bfd_check_format_matches fails either due - to no match or to multiple matches and only one target vector produced - errors, then those errors are printed. - - * bfd.c (MAX_ARGS): Define, use throughout. - (print_func): New typedef. - (_bfd_doprnt): Add new print param. Replace calls to fprintf - with print. - (PRINT_TYPE): Similarly. - (error_handler_fprintf): Renamed from error_handler_internal. - Use _bfd_get_error_program_name. Add fprintf arg. Move code - setting up args.. - (_bfd_doprnt_scan): ..to here. Add ap param. - (struct buf_stream): New. - (err_sprintf): New function. - (error_handler_bfd): New static variable. - (error_handler_sprintf): New function. - (_bfd_set_error_handler_caching): New function. - (_bfd_get_error_program_name): New function. - * elfcode.h (elf_swap_shdr_in): Use _bfd_error_handler in - warning messages. - (elf_object_p): Likewise. - * format.c (print_warnmsg): New function. - (clear_warnmsg): Rewrite. - (null_error_handler): New function. - (bfd_check_format_matches): Ignore warnings from recursive calls - checking first element of an archive. Use caching error handler - otherwise. Print warnings on successful match, or when only one - target has emitted warnings/errors. - * peicode.h (pe_bfd_object_p): Use _bfd_error_handler in - warning messages. - * targets.c (per_xvec_warn): Change type of array elements. - (struct per_xvec_message): New. - (_bfd_per_xvec_warn): Rewrite. - * Makefile.am (LIBBFD_H_FILES): Add bfd.c. - * Makefile.in: Regenerate. - * bfd-in2.h: Regenerate. - * libbfd.h: Regenerate. - -2022-12-17 Indu Bhagat - - sframe: doc: update spec for the mangled-RA bit in FRE - ChangeLog: - - * libsframe/doc/sframe-spec.texi - -2022-12-17 Indu Bhagat - - gas: sframe: testsuite: add testcase for .cfi_negate_ra_state - Add a new test to check that .cfi_negate_ra_state on aarch64 is handled - well (a non-empty SFrame section with valid SFrame FREs is generated). - - ChangeLog: - - * testsuite/gas/cfi-sframe/cfi-sframe-aarch64-2.d: New test. - * testsuite/gas/cfi-sframe/cfi-sframe-aarch64-2.s: Likewise. - * testsuite/gas/cfi-sframe/cfi-sframe.exp: Adjust the list - accordingly. - -2022-12-17 Indu Bhagat - - objdump/readelf: sframe: emit marker for FREs with mangled RA - In the textual dump of the SFrame section, when an SFrame FRE recovers a - mangled RA, use string "[s]" in the output to indicate that the return - address is a signed (mangled) one. - - ChangeLog: - - * libsframe/sframe-dump.c (dump_sframe_func_with_fres): Postfix - with "[s]" if RA is signed with authorization code. - -2022-12-17 Indu Bhagat - - libsframe: provide new access API for mangled RA bit - include/ChangeLog: - - * sframe-api.h (sframe_fre_get_ra_mangled_p): New declaration. - - ChangeLog: - - * libsframe/sframe.c (sframe_get_fre_ra_mangled_p): New - definition. - (sframe_fre_get_ra_mangled_p): New static function. - -2022-12-17 Indu Bhagat - - gas: sframe: add support for .cfi_negate_ra_state - DW_CFA_AARCH64_negate_ra_state in aarch64 is multiplexed with - DW_CFA_GNU_window_save in the DWARF format. - - Remove the common-empty-4 testcase because the generated SFrame section - will not be be empty anymore. A relevant test will be added in a later - commit. - - ChangeLog: - - * gas/gen-sframe.c (sframe_v1_set_fre_info): Add new argument - for mangled_ra_p. - (sframe_set_fre_info): Likewise. - (output_sframe_row_entry): Handle mangled_ra_p. - (sframe_row_entry_new): Reset mangled_ra_p. - (sframe_row_entry_initialize): Initialize mangled_ra_p. - (sframe_xlate_do_gnu_window_save): New definition. - (sframe_do_cfi_insn): Handle DW_CFA_GNU_window_save. - * gas/gen-sframe.h (struct sframe_row_entry): New member. - (struct sframe_version_ops): Add a new argument for - mangled_ra_p. - * gas/testsuite/gas/cfi-sframe/cfi-sframe.exp: Remove test. - * gas/testsuite/gas/cfi-sframe/common-empty-4.d: Removed. - * gas/testsuite/gas/cfi-sframe/common-empty-4.s: Removed. - -2022-12-17 Indu Bhagat - - sframe.h: add support for .cfi_negate_ra_state - Use the last remaining bit in the 'SFrame FRE info' word to store whether - the RA is signed/unsigned with PAC authorization code: this bit is named - as the "mangled RA" bit. This bit is still unused for x86-64. - - The behaviour of the mangled-RA info bit in SFrame format closely - follows the behaviour of DW_CFA_AARCH64_negate_ra_state in DWARF. During - unwinding, whenever an SFrame FRE with non-zero "mangled RA" bit is - encountered, it means the upper bits of the return address contain Pointer - Authentication code. The unwinder, hence, must use appropriate means to - restore LR correctly in such cases. - - include/ChangeLog: - - * sframe.h (SFRAME_V1_FRE_INFO_UPDATE_MANGLED_RA_P): New macro. - (SFRAME_V1_FRE_MANGLED_RA_P): Likewise. - -2022-12-17 GDB Administrator - - Automatic date update in version.in - -2022-12-16 Pedro Alves - - Delay checking whether /proc/pid/mem is writable (PR gdb/29907) - As of 1bcb0708f229 ("gdb/linux-nat: Check whether /proc/pid/mem is - writable"), GDB checks if /proc/pid/mem is writable. This is done - early at GDB startup, in order to get a consistent warning, instead of - a warning that depends on whenever GDB writes to inferior memory. - - PR gdb/29907 points out that some build systems (like QEMU's, - apparently) may call 'gdb --version' to check GDB's presence & its - version on the system, and that Gentoo's build process has sandboxing - which blocks the /proc/pid/mem access and thus GDB warns, which - results in build fails. - - To help with that, this patch delays the /proc/pid/mem check until we - start or attach to an inferior. Ends up potentially emiting a warning - close where we already emit other ptrace- and /proc- related warnings, - which just Feels Right. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29907 - Change-Id: I5537653ecfbbe76a04ab035e40e59d09b4980763 - -2022-12-16 Nick Clifton - - Fix previous delta to allow for compilation on 32-bit systems - -2022-12-16 Tom de Vries - - [gdb/testsuite] Fix race in gdb.threads/detach-step-over.exp - Once in a while I run into: - ... - FAIL: gdb.threads/detach-step-over.exp: \ - breakpoint-condition-evaluation=host: target-non-stop=off: non-stop=off: \ - displaced=off: iter 1: all threads running - ... - - In can easily reproduce this by doing: - ... - # Wait a bit, to give time for the threads to hit the - # breakpoint. - - sleep 1 - - return true - ... - - Fix this by counting the running threads in a loop, effectively allowing 10 - seconds (instead of 1) for the threads to start running, but only sleeping if - needed. - - Reduces total execution time from 1m27s to 56s. - - Tested on x86_64-linux. - -2022-12-16 Andrew Burgess - - gdb: fix crash when getting the value of a label symbol - When the source program contains a goto label, it turns out it's - actually pretty hard for a user to find out more about that label. - For example: - - (gdb) p some_label - No symbol "some_label" in current context. - (gdb) disassemble some_label - No symbol "some_label" in current context. - (gdb) x/10i some_label - No symbol "some_label" in current context. - (gdb) break some_label - Breakpoint 2 at 0x401135: file /tmp/py-label-symbol-value.c, line 35. - - In all cases, some_label is a goto label within the current frame. - Only placing a breakpoint on the label worked. - - This all seems a little strange to me, it feels like asking about a - goto label would not be an unreasonable thing for a user to do. - - This commit doesn't fix any of the above issues, I mention them just - to provide a little context for why the following issue has probably - not been seen before. - - It turns out there is one way a user can access the symbol for a goto - label, through the Python API: - - python frame = gdb.selected_frame() - python frame_pc = frame.pc() - python block = gdb.current_progspace().block_for_pc(frame_pc) - python symbol,_ = gdb.lookup_symbol('some_label', block, gdb.SYMBOL_LABEL_DOMAIN) - python print(str(symbol.value())) - ../../src/gdb/findvar.c:204: internal-error: store_typed_address: Assertion `type->is_pointer_or_reference ()' failed. - - The problem is that label symbols are created using the - builtin_core_addr type, which is a pure integer type. - - When GDB tries to fetch the value of a label symbol then we end up in - findvar.c, in the function language_defn::read_var_value, in the - LOC_LABEL case. From here store_typed_address is called to store the - address of the label into a value object with builtin_core_addr type. - - The problem is that store_typed_address requires that the destination - type be a pointer or reference, which the builtin_core_addr type is - not. - - Now it's not clear what type a goto label address should have, but - GCC has an extension that allows users to take the address of a goto - label (using &&), in that case the result is of type 'void *'. - - I propose that when we convert the CORE_ADDR value to a GDB value - object, we use builtin_func_ptr type instead of builtin_core_addr, - this means the result will be of type 'void (*) ()'. The benefit of - this approach is that when gdbarch_address_to_pointer is called the - target type will be correctly identified as a pointer to code, which - should mean any architecture specific adjustments are done correctly. - - We can then cast the new value to 'void *' type with a call to - value_cast_pointer, this should not change the values bit - representation, but will just update the type. - - After this asking for the value of a label symbol works just fine: - - (gdb) python print(str(symbol.value())) - 0x401135 - - And the type is maybe what we'd expect: - - (gdb) python print(str(symbol.value().type)) - void * - -2022-12-16 Simon Marchi - - gdb: convert linux-osdata.c from buffer to std::string - Replace the use of struct buffer in linux-osdata.c with std::string. - There is no change in the logic, so there should be no user-visible - change. - - Change-Id: I27f53165d401650bbd0bebe8ed88221e25545b3f - Approved-By: Pedro Alves - -2022-12-16 Simon Marchi - - gdbsupport: add string_xml_appendf - Add a version of buffer_xml_printf (defined in gdbsupport/buffer.{c,h}) - that appends to an std::string, rather than a struct buffer. Call it - "string" rather than "buffer" since it operates on an std::string rather - than a buffer. And call it "appendf" rather than "printf", since it - appends to and does not replace the string's content. This mirrors - string_appendf. - - Place the new version in gdbsupport/xml-utils.h. - - The code is a direct copy of buffer_xml_printf. The old version is - going to disappear at some point, which is why I didn't do any effort to - share code. - - Change-Id: I30e030627ab4970fd0b9eba3b7e8cec78fa561ba - Approved-By: Pedro Alves - -2022-12-16 Andrew Burgess - - gdb: clean up some inefficient std::string usage - This commit: - - commit 53cf95c3389a3ecd97276d322e4a60fe3396a201 - Date: Wed Dec 14 14:17:44 2022 +0000 - - gdb: make more use of make_target_connection_string - - Introduced a couple of inefficient uses of std::string, both of which - are fixed in this commit. - - There should be no user visible changes after this commit. - - Approved-By: Simon Marchi - -2022-12-16 Nick Clifton - - Fix a potential illegal memory access when parsing corrupt DWARF information. - PR 29908 - * dwarf.c (display_debug_addr): Check for corrupt header lengths. - -2022-12-16 Jan Vrany - - gdb/testsuite: add test for Python commands redefining itself - This commit adds a test that creates a Python command that redefines - itself during its execution. This is to test use-after-free in - execute_command (). - - This test needs run with ASan enabled in order to fail when it - should. - - Approved-By: Simon Marchi - -2022-12-16 Luis Machado - - [aarch64] Fix removal of non-address bits for PAuth - PR gdb/28947 - - The address_significant gdbarch setting was introduced as a way to remove - non-address bits from pointers, and it is specified by a constant. This - constant represents the number of address bits in a pointer. - - Right now AArch64 is the only architecture that uses it, and 56 was a - correct option so far. - - But if we are using Pointer Authentication (PAuth), we might use up to 2 bytes - from the address space to store the required information. We could also have - cases where we're using both PAuth and MTE. - - We could adjust the constant to 48 to cover those cases, but this doesn't - cover the case where GDB needs to sign-extend kernel addresses after removal - of the non-address bits. - - This has worked so far because bit 55 is used to select between kernel-space - and user-space addresses. But trying to clear a range of bits crossing the - bit 55 boundary requires the hook to be smarter. - - The following patch renames the gdbarch hook from significant_addr_bit to - remove_non_address_bits and passes a pointer as opposed to the number of - bits. The hook is now responsible for removing the required non-address bits - and sign-extending the address if needed. - - While at it, make GDB and GDBServer share some more code for aarch64 and add a - new arch-specific testcase gdb.arch/aarch64-non-address-bits.exp. - - Bug-url: https://sourceware.org/bugzilla/show_bug.cgi?id=28947 - - Approved-By: Simon Marchi - -2022-12-16 Jan Beulich - - gas: restore Dwarf info generation after macro diagnostic adjustments - While 6fdb723799e2 ("gas: re-work line number tracking for macros and - their expansions") was meant to leave generated Dwarf as is, it really - didn't (and the testcase intended to catch that wasn't covering the case - which broke). Its adjustment to buffer_and_nest() didn't go far enough, - leading to the "linefile" directive inserted at the top to also be - processed later in the PR gas/16908 workaround (which clearly isn't - intended - it's being put there for processing during macro expansion - only). That unnoticed flaw in turn led me to work around it by a - (suspicious to me already at the time) conditional in as_where(). - - x86: change representation of extension opcode - Having a "None" field in the vast majority of entries is needlessly - cluttering the overall table. Instead of this being a separate field, - use a representation matching that of Intel SDM and AMD PM for the main - use of the field: Append the value after a / as the separator. - -2022-12-16 Simon Marchi - - gdbsupport: change xml_escape_text_append's parameter from pointer to reference - The passed in string can't be nullptr, it makes more sense to pass in a - reference. - - Change-Id: Idc8bd38abe1d6d9b44aa227d7856956848c233b3 - -2022-12-16 Simon Marchi - - gdb: remove static buffer in command_line_input - [I sent this earlier today, but I don't see it in the archives. - Resending it through a different computer / SMTP.] - - The use of the static buffer in command_line_input is becoming - problematic, as explained here [1]. In short, with this patch [2] that - attempt to fix a post-hook bug, when running gdb.base/commands.exp, we - hit a case where we read a "define" command line from a script file - using command_command_line_input. The command line is stored in - command_line_input's static buffer. Inside the define command's - execution, we read the lines inside the define using command_line_input, - which overwrites the define command, in command_line_input's static - buffer. After the execution of the define command, execute_command does - a command look up to see if a post-hook is registered. For that, it - uses a now stale pointer that used to point to the define command, in - the static buffer, causing a use-after-free. Note that the pointer in - execute_command points to the dynamically-allocated buffer help by the - static buffer in command_line_input, not to the static object itself, - hence why we see a use-after-free. - - Fix that by removing the static buffer. I initially changed - command_line_input and other related functions to return an std::string, - which is the obvious but naive solution. The thing is that some callees - don't need to return an allocated string, so this this an unnecessary - pessimization. I changed it to passing in a reference to an std::string - buffer, which the callee can use if it needs to return - dynamically-allocated content. It fills the buffer and returns a - pointers to the C string inside. The callees that don't need to return - dynamically-allocated content simply don't use it. - - So, it started with modifying command_line_input as described above, all - the other changes derive directly from that. - - One slightly shady thing is in handle_line_of_input, where we now pass a - pointer to an std::string's internal buffer to readline's history_value - function, which takes a `char *`. I'm pretty sure that this function - does not modify the input string, because I was able to change it (with - enough massaging) to take a `const char *`. - - A subtle change is that we now clear a UI's line buffer using a - SCOPE_EXIT in command_line_handler, after executing the command. - This was previously done by this line in handle_line_of_input: - - /* We have a complete command line now. Prepare for the next - command, but leave ownership of memory to the buffer . */ - cmd_line_buffer->used_size = 0; - - I think the new way is clearer. - - [1] https://inbox.sourceware.org/gdb-patches/becb8438-81ef-8ad8-cc42-fcbfaea8cddd@simark.ca/ - [2] https://inbox.sourceware.org/gdb-patches/20221213112241.621889-1-jan.vrany@labware.com/ - - Change-Id: I8fc89b1c69870c7fc7ad9c1705724bd493596300 - Reviewed-By: Tom Tromey - -2022-12-16 GDB Administrator - - Automatic date update in version.in - -2022-12-15 Indu Bhagat - - libsframe asan: avoid generating misaligned loads - There are two places where unaligned loads were seen on aarch64: - - #1. access to the SFrame FRE stack offsets in the in-memory - representation/abstraction provided by libsframe. - - #2. access to the SFrame FRE start address in the on-disk representation - of the frame row entry. - - For #1, we can fix this by reordering the struct members of - sframe_frame_row_entry in libsframe/sframe-api.h. - - For #2, we need to default to using memcpy instead, and copy out the bytes - to a location for output. - - SFrame format is an unaligned on-disk format. As such, there are other blobs - of memory in the on-disk SFrame FRE that are on not on their natural - boundaries. But that does not pose further problems yet, because the users - are provided access to the on-disk SFrame FRE data via libsframe's - sframe_frame_row_entry, the latter has its' struct members aligned on their - respective natural boundaries (and initialized using memcpy). - - PR 29856 libsframe asan: load misaligned at sframe.c:516 - - ChangeLog: - - PR libsframe/29856 - * bfd/elf64-x86-64.c: Adjust as the struct members have been - reordered. - * libsframe/sframe.c (sframe_decode_fre_start_address): Use - memcpy to perform 16-bit/32-bit reads. - * libsframe/testsuite/libsframe.encode/encode-1.c: Adjust as the - struct members have been reordered. - - include/ChangeLog: - - PR libsframe/29856 - * sframe-api.h: Reorder fre_offsets for natural alignment. - -2022-12-15 Simon Marchi - - gdb/testsuite: don't delete command files in gdb.base/commands.exp - Don't delete the runtime-generated command files. This makes it easier - to reproduce tests by hand. - - Change-Id: I4e53484eea216512f1c5d7dfcb5c464b36950946 - Approved-By: Tom Tromey - -2022-12-15 Tom Tromey - - Move streq and compare_cstrings to gdbsupport - It seems to me that streq and compare_cstrings belong near the other - string utility functions in common-utils.h; and furthermore that streq - ought to be inlined. This patch makes this change. - - Approved-By: Simon Marchi - -2022-12-15 Tom Tromey - - Remove subset_compare - I stumbled across subset_compare today, and after looking at the - callers I realized it could be removed and replaced with calls to - startswith. - - Approved-By: Simon Marchi - -2022-12-15 Andrew Burgess - - gdb: use gdb_assert not internal_error - Spotted a couple of places in findvar.c where we use: - - if ( ! CONDITION ) - internal_error ("..."); - - this commit changes these to be: - - gdb_assert ( CONDITION ); - - which I think is better. - - Unless we happen to hit the internal_error calls (which was bad) there - should be no user visible changes after this commit. - -2022-12-15 Andrew Burgess - - gdb: some int to bool conversion in remote-sim.c - Some obvious int to bool conversion in remote-sim.c, there should be - no user visible changes after this commit. - -2022-12-15 Andrew Burgess - - gdb: make more use of make_target_connection_string - I noticed that we have a function make_target_connection_string which - wraps all the logic for creating a string that describes a target - connection - but in some places we are not calling this function, - instead we duplicate the function's logic. - - This commit cleans this up, and calls make_target_connection_string - where possible. - - There should be no user visible changes after this commit. - -2022-12-15 Andrew Burgess - - gdb: int to bool conversion in tracefile.c - Some obvious int to bool conversion in tracefile.c. - - Should be no user visible changes after this commit. - -2022-12-15 Tom de Vries - - [gdb/testsuite] Fix gdb.base/condbreak-multi-context.exp with gcc 4.8.5 - With gcc 4.8.5, I run into: - ... - Running gdb.base/condbreak-multi-context.exp ... - gdb compile failed, condbreak-multi-context.cc:21:11: warning: non-static \ - data member initializers only available with -std=c++11 or -std=gnu++11 \ - [enabled by default] - int b = 20; - ^ - ... - - Fix this by making it a static const. - - Tested on x86_64-linux, with gcc 4.8.5, 7.5.0 and clang 13.0.1. - -2022-12-15 GDB Administrator - - Automatic date update in version.in - -2022-12-14 Andrew Burgess - - gdb/maint: add core file name to 'maint info program-spaces' output - Each program space can have an associated core file. Include this - information in the output of 'maint info program-spaces'. - -2022-12-14 Andrew Burgess - - gdb: ensure all targets are popped before an inferior is destructed - Now that the inferiors target_stack automatically manages target - reference counts, we might think that we don't need to unpush targets - when an inferior is deleted... - - ...unfortunately that is not the case. The inferior::unpush function - can do some work depending on the type of target, so it is important - that we still pass through this function. - - To ensure that this is the case, in this commit I've added an assert - to inferior::~inferior that ensures the inferior's target_stack is - empty (except for the ever present dummy_target). - - I've then added a pop_all_targets call to delete_inferior, otherwise - the new assert will fire in, e.g. the gdb.python/py-inferior.exp test. - -2022-12-14 Andrew Burgess - - gdb: remove the pop_all_targets (and friends) global functions - This commit removes the global functions pop_all_targets, - pop_all_targets_above, and pop_all_targets_at_and_above, and makes - them methods on the inferior class. - - As the pop_all_targets functions will unpush each target, which - decrements the targets reference count, it is possible that the target - might be closed. - - Right now, closing a target, in some cases, depends on the current - inferior being set correctly, that is, to the inferior from which the - target was popped. - - To facilitate this I have used switch_to_inferior_no_thread within the - new methods. Previously it was the responsibility of the caller to - ensure that the correct inferior was selected. - - In a couple of places (event-top.c and top.c) I have been able to - remove a previous switch_to_inferior_no_thread call. - - In remote_unpush_target (remote.c) I have left the - switch_to_inferior_no_thread call as it is required for the - generic_mourn_inferior call. - -2022-12-14 Andrew Burgess - - gdb: remove decref_target - The decref_target function is not really needed. Calling - target_ops::decref will just redirect to decref_target anyway, so why - not just rename decref_target to target_ops::decref? - - That's what this commit does. - - It's not exactly renaming to target_ops::decref, because the decref - functionality is handled by a policy class, so the new name is now - target_ops_ref_policy::decref. - - There should be no user visible change after this commit. - -2022-12-14 Andrew Burgess - - gdb: have target_stack automate reference count handling - This commit changes the target_stack class from using a C style array - of 'target_ops *' to using a C++ std::array. The - benefit of this change is that some of the reference counting of - target_ops objects is now done automatically. - - This commit fixes a crash in gdb.python/py-inferior.exp where GDB - crashes at exit, leaving a core file behind. - - The crash occurs in connpy_connection_dealloc, and is actually - triggered by this assert: - - gdb_assert (conn_obj->target == nullptr); - - Now a little aside... - - ... the assert is never actually printed, instead GDB crashes due - to calling a pure virtual function. The backtrace at the point of - crash looks like this: - - #7 0x00007fef7e2cf747 in std::terminate() () from /lib64/libstdc++.so.6 - #8 0x00007fef7e2d0515 in __cxa_pure_virtual () from /lib64/libstdc++.so.6 - #9 0x0000000000de334d in target_stack::find_beneath (this=0x4934d78, t=0x2bda270 ) at ../../s> - #10 0x0000000000df4380 in inferior::find_target_beneath (this=0x4934b50, t=0x2bda270 ) at ../.> - #11 0x0000000000de2381 in target_ops::beneath (this=0x2bda270 ) at ../../src/gdb/target.c:3047 - #12 0x0000000000de68aa in target_ops::supports_terminal_ours (this=0x2bda270 ) at ../../src/gd> - #13 0x0000000000dde6b9 in target_supports_terminal_ours () at ../../src/gdb/target.c:1112 - #14 0x0000000000ee55f1 in internal_vproblem(internal_problem *, const char *, int, const char *, typedef __va_li> - - Notice in frame #12 we called target_ops::supports_terminal_ours, - however, this is the_dummy_target, which is of type dummy_target, - and so we should have called dummy_target::supports_terminal_ours. - I believe the reason we ended up in the wrong implementation of - supports_terminal_ours (which is a virtual function) is because we - made the call during GDB's shut-down, and, I suspect, the vtables - were in a weird state. - - Anyway, the point of this patch is not to fix GDB's ability to - print an assert during exit, but to address the root cause of the - assert. With that aside out of the way, we can return to the main - story... - - Connections are represented in Python with gdb.TargetConnection - objects (or its sub-classes). The assert in question confirms that - when a gdb.TargetConnection is deallocated, the underlying GDB - connection has itself been removed from GDB. If this is not true then - we risk creating multiple different gdb.TargetConnection objects for - the same connection, which would be bad. - - To ensure that we have one gdb.TargetConnection object for each - connection, the all_connection_objects map exists, this maps the - process_stratum_target object (the connection) to the - gdb.TargetConnection object that represents the connection. - - When a connection is removed in GDB the connection_removed observer - fires, which we catch with connpy_connection_removed, this function - then sets conn_obj->target to nullptr, and removes the corresponding - entry from the all_connection_objects map. - - The first issue here is that connpy_connection_dealloc is being called - as part of GDB's exit code, which is run after the Python interpreter - has been shut down. The connpy_connection_dealloc function is used to - deallocate the gdb.TargetConnection Python object. Surely it is - wrong for us to be deallocating Python objects after the interpreter - has been shut down. - - The reason why connpy_connection_dealloc is called during GDB's exit - is that the global all_connection_objects map is still holding a - reference to the gdb.TargetConnection object. When the map is - destroyed during GDB's exit, the gdb.TargetConnection objects within - the map can finally be deallocated. - - The reason why all_connection_objects has contents when GDB exits, and - the reason the assert fires, is that, when GDB exits, there are still - some connections that have not yet been removed from GDB, that is, - they have a non-zero reference count. - - If we take a look at quit_force (top.c) you can see that, for each - inferior, we call pop_all_targets before we (later in the function) - call do_final_cleanups. It is the do_final_cleanups call that is - responsible for shutting down the Python interpreter. The - pop_all_targets calls should, in theory, cause all the connections to - be removed from GDB. - - That this isn't working indicates that some targets have a non-zero - reference count even after this final pop_all_targets call, and - indeed, when I debug GDB, that is what I see. - - I tracked the problem down to delete_inferior where we do some house - keeping, and then delete the inferior object, which calls - inferior::~inferior. - - In neither delete_inferior or inferior::~inferior do we call - pop_all_targets, and it is this missing call that means we leak some - references to the target_ops objects on the inferior's target_stack. - - In this commit I will provide a partial fix for the problem. I say - partial fix, but this will actually be enough to resolve the crash. - In a later commit I will provide the final part of the fix. - - As mentioned at the start of the commit message, this commit changes - the m_stack in target_stack to hold target_ops_ref objects. This - means that when inferior::~inferior is called, and m_stack is - released, we automatically decrement the target_ops reference count. - With this change in place we no longer leak any references, and now, - in quit_force the final pop_all_targets calls will release the final - references. This means that the targets will be correctly closed at - this point, which means the connections will be removed from GDB and - the Python objects deallocated before the Python interpreter shuts - down. - - There's a slight oddity in target_stack::unpush, where we std::move - the reference out of m_stack like this: - - auto ref = std::move (m_stack[stratum]); - - the `ref' isn't used explicitly, but it serves to hold the - target_ops_ref until the end of the scope while allowing the m_stack - entry to be reset back to nullptr. The alternative would be to - directly set the m_stack entry to nullptr, like this: - - m_stack[stratum] = nullptr; - - The problem here is that when we set the m_stack entry to nullptr we - first decrement the target_ops reference count, and then set the array - entry to nullptr. - - If the decrement means that the target_ops object reaches a zero - reference count then the target_ops object will be closed by calling - target_close. In target_close we ensure that the target being closed - is not in any inferiors target_stack. - - As we decrement before clearing, then this check in target_close will - fail, and an assert will trigger. - - By using std::move to move the reference out of m_stack, this clears - the m_stack entry, meaning the inferior no longer contains the - target_ops in its target_stack. Now when the REF object goes out of - scope and the reference count is decremented, target_close can run - successfully. - - I've made use of the Python connection_removed listener API to add a - test for this issue. The test installs a listener and then causes - delete_inferior to be called, we can then see that the connection is - then correctly removed (because the listener triggers). - -2022-12-14 Andrew Burgess - - gdb/remote: remove some manual reference count handling - While working on some other target_ops reference count related code, I - spotted that in remote.c we do some manual reference count handling, - i.e. we call target_ops::incref and decref_target (which wraps - target_ops::decref). - - I think it would be better to make use of gdb::ref_ptr to automate the - reference count management. - - So, this commit updates scoped_mark_target_starting in two ways, - first, I use gdb::ref_ptr to handle the reference counts. Then, - instead of using the scoped_mark_target_starting constructor and - destructor to set and reset the starting_up flag, I now use a - scoped_restore_tmpl object to set and restore the flag. - - The above changes mean that the scoped_mark_target_starting destructor - can be completely removed, and the constructor body is now empty. - - I've also fixed a typo in the class comment. - - The only change in behaviour after this commit is that previously we - didn't care what the value of starting_up was, we just set it to true - in the constructor and false in the destructor. - - Now, I assert that the flag is initially false, then set the flag true - when the scoped_mark_target_starting is created. - - As the starting_up flag is initialized to false then, for the assert - to fire, we would need to recursively enter - remote_target::start_remote_1, which I don't think is something we - should be doing, so I think the new assert is an improvement. - -2022-12-14 Alan Modra - - Re: ld, gold: remove support for -z bndplt (MPX prefix) - Don't attempt to run gold tests with -z bndplt - - * testsuite/Makefile.am (exception_x86_64_bnd_test, bnd_plt_1.sh), - (bnd_ifunc_1.sh, bnd_ifunc_2.sh): Delete rules. - * testsuite/Makefile.in: Regenerate. - * testsuite/bnd_ifunc_1.s: Delete. - * testsuite/bnd_ifunc_1.sh: Delete. - * testsuite/bnd_ifunc_2.s: Delete. - * testsuite/bnd_ifunc_2.sh: Delete. - * testsuite/bnd_plt_1.s: Delete. - * testsuite/bnd_plt_1.sh: Delete. - -2022-12-14 Alan Modra - - asan: buffer overflow in sh_reloc - * coff-sh.c (sh_reloc): Use bfd_reloc_offset_in_range. - -2022-12-14 Alan Modra - - Fix haiku ld dependencies - I noticed after commit 8ad93045ed, "ld, gold: remove support for -z - bndplt (MPX prefix)", that some of my builds were failing with - - eelf_x86_64_haiku.c:650:9: error: no member named 'bndplt' in 'struct elf_linker_x86_params' - params.bndplt = true; - ~~~~~~ ^ - - * emulparams/aarch64haiku.sh: Use "source_sh" rather than ".". - * emulparams/armelf_haiku.sh: Likewise. - * emulparams/elf32ppchaiku.sh: Likewise. - * emulparams/elf_mipsel_haiku.sh: Likewise. - * emulparams/elf_x86_64_haiku.sh: Likewise. - -2022-12-14 Andrew Burgess - - gdb: add SYMBOL_LOOKUP_SCOPED_DEBUG_ENTER_EXIT - After the previous commit converted symbol-lookup debug to use the new - debug scheme, this commit adds SYMBOL_LOOKUP_SCOPED_DEBUG_ENTER_EXIT. - - The previous commit didn't add SYMBOL_LOOKUP_SCOPED_DEBUG_ENTER_EXIT - because symbol-lookup debug is controlled by an 'unsigned int' rather - than a 'bool' control variable, we use the numeric value to offer - different levels of verbosity for symbol-lookup debug. - - The *_SCOPED_DEBUG_ENTER_EXIT mechanism currently relies on capturing - a reference to the bool control variable, and evaluating the variable - both on entry, and at exit, this is done in the scoped_debug_start_end - class (see gdbsupport/common-debug.h). - - This commit templates scoped_debug_start_end so that the class can - accept either a 'bool &' or an invokable object, e.g. a lambda - function, or a function pointer. - - The existing scoped_debug_start_end and scoped_debug_enter_exit macros - in common-debug.h are updated to support scoped_debug_enter_exit being - templated, however, nothing outside of common-debug.h needs to change. - - I've then added SYMBOL_LOOKUP_SCOPED_DEBUG_ENTER_EXIT in symtab.h, and - added a couple of token uses in symtab.c. I didn't want to add too - much in this first commit, this is really about updating - common-debug.h to support this new functionality. - - Within symtab.h I created a couple of global functions that can be - used to query the status of the symbol_lookup_debug control variable, - these functions are then used within the two existing macros: - - symbol_lookup_debug_printf - symbol_lookup_debug_printf_v - - and also in the new SYMBOL_LOOKUP_SCOPED_DEBUG_ENTER_EXIT macro. - -2022-12-14 Andrew Burgess - - gdb: convert 'set debug symbol-lookup' to new debug printing scheme - Convert the implementation of 'set debug symbol-lookup' to the new - debug printing scheme. - - In a few places I've updated the debug output to remove places where - the printed debug message included the function name, the new debug - scheme already adds that, but I haven't done all the possible updates. - -2022-12-14 Andrew Burgess - - gdb/testsuite: new test for recent dwarf reader issue - This commit provides a test for this commit: - - commit 55fc1623f942fba10362cb199f9356d75ca5835b - Date: Thu Nov 3 13:49:17 2022 -0600 - - Add name canonicalization for C - - Which resolves PR gdb/29105. My reason for writing this test was a - desire to better understand the above commit, my process was to study - the commit until I thought I understood it, then write a test to - expose the issue. As the original commit didn't have a test, I - thought it wouldn't hurt to commit this upstream. - - The problem tested for here is already described in the above commit, - but I'll give a brief description here. This description describes - GDB prior to the above commit: - - - Builtin types are added to GDB using their canonical name, - e.g. "short", not "signed short", - - - When the user does something like 'p sizeof(short)', then this is - handled in c-exp.y, and results in a call to lookup_signed_type - for the name "int". The "int" here is actually being looked up as - the type for the result of the 'sizeof' expression, - - - In lookup_signed_type GDB first adds a 'signed' and looks for that - type, so in this case 'signed int', and, if that lookup fails, GDB - then looks up 'int', - - - The problem is that 'signed int' is not the canonical name for a - signed int, so no builtin type with that name will be found, GDB - will then go to each object file in turn looking for a matching - type, - - - When checking each object file, GDB will first check the partial - symtab to see if the full symtab should be expanded or not. - Remember, at this point GDB is looking for 'signed int', there - will be no partial symbols with that name, so GDB will not expand - anything, - - - However, GDB checks each partial symbol using multiple languages, - not just the current language (C in this case), so, when GDB - checks using the C++ language, the symbol name is first - canonicalized (the code that does this can be found - lookup_name_info::language_lookup_name). As the canonical form of - 'signed int' is just 'int', GDB then looks for any symbols with - the name 'int', most partial symtabs will contain such a symbol, - so GDB ends up expanding pretty much every symtab. - - The above commit fixes this by avoiding the use of non-canonical names - with C, now the initial builtin type lookup will succeed, and GDB - never even considers whether to expand any additional symtabs. - - The test case creates a library that includes char, short, int, and - long types, and a test program that links against the library. - - In the test script we start the inferior, but don't allow it to - progress far enough that the debug information for the library has - been fully expanded yet. - - Then we evaluate some 'sizeof(TYPE)' expressions. - - In the buggy version of GDB this would cause the debug information - for the library to be fully expanded, while in the fixed version of - GDB this will not be the case. - - We use 'info sources' to determine if the debug information has been - fully expanded or not. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29105 - -2022-12-14 Andrew Burgess - - gdb/testsuite: fix readnow detection - The following commit broke the readnow detection in the testsuite: - - commit dfaa040b440084dd73ebd359326752d5f44fc02c - Date: Mon Mar 29 18:31:31 2021 -0600 - - Remove some "OBJF_READNOW" code from dwarf2_debug_names_index - - The testsuite checks if GDB was started with the -readnow flag by - using the 'maintenance print objfiles' command, and looking for the - string 'faked for "readnow"' in the output. This is implemented in - two helper procs `readnow` (gdb.exp) and `mi_readnow` (mi-support.exp). - - The following tests all currently depend on this detection: - - gdb.base/maint.exp - gdb.cp/nsalias.exp - gdb.dwarf2/debug-aranges-duplicate-offset-warning.exp - gdb.dwarf2/dw2-stack-boundary.exp - gdb.dwarf2/dw2-zero-range.exp - gdb.dwarf2/gdb-index-nodebug.exp - gdb.mi/mi-info-sources.exp - gdb.python/py-symbol.exp - gdb.rust/traits.exp - - The following test also includes detection of 'readnow', but does the - detection itself by checking $::GDBFLAGS for the readnow flag: - - gdb.opt/break-on-_exit.exp - - The above commit removed from GDB the code that produced the 'faked - for "readnow"' string, as a consequence the testsuite can no longer - correctly spot when readnow is in use, and many of the above tests - will fail (at least partially). - - When looking at the above tests, I noticed that gdb.rust/traits.exp - does call `readnow`, but doesn't actually use the result, so I've - removed the readnow call, this simplifies the next part of this patch - as gdb.rust/traits.exp was the only place an extra regexp was passed - to the readnow call. - - Next I have rewritten `readnow` to check the $GDBFLAGS for the - -readnow flag, and removed the `maintenance print objfiles` check. At - least for all the tests above, when using the readnow board, this is - good enough to get everything passing again. - - For the `mi_readnow` proc, I changed this to just call `readnow` from - gdb.exp, I left the mi_readnow name in place - in the future it might - be the case that we want to do some different checks here. - - Finally, I updated gdb.opt/break-on-_exit.exp to call the `readnow` - proc. - - With these changes, all of the tests listed above now pass correctly - when using the readnow board. - -2022-12-14 Li Xu - - RISC-V: Add string length check for operands in AS - The current AS accepts invalid operands due to miss of operands length check. - For example, "e6" is an invalid operand in (vsetvli a0, a1, e6, mf8, tu, ma), - but it's still accepted by assembler. In detail, the condition check "strncmp - (array[i], *s, len) == 0" in arg_lookup function passes with "strncmp ("e64", - "e6", 2)" in the case above. So the generated encoding is same as that of - (vsetvli a0, a1, e64, mf8, tu, ma). - - This patch fixes issue above by prompting an error in such case and also adds - a new testcase. - - gas/ChangeLog: - - * config/tc-riscv.c (arg_lookup): Add string length check for operands. - * testsuite/gas/riscv/vector-insns-fail-vsew.d: New testcase for an illegal vsew. - * testsuite/gas/riscv/vector-insns-fail-vsew.l: Likewise. - * testsuite/gas/riscv/vector-insns-fail-vsew.s: Likewise. - -2022-12-14 Jan Beulich - - x86: adjust type checking constructs - As Alan points out, ASAN takes issue with these constructs, for - current_templates being NULL. Wrap them in sizeof(), so the expressions - aren't actually evaluated. - -2022-12-14 Martin Liska - - ld, gold: remove support for -z bndplt (MPX prefix) - bfd/ChangeLog: - - * elf-linker-x86.h (struct elf_linker_x86_params): Remove - bndplt. - * elf64-x86-64.c (elf_x86_64_scan_relocs): Ignore - R_X86_64_PLT32_BND. - (elf_x86_64_relocate_section): Similarly here. - (elf_x86_64_link_setup_gnu_properties): Ignore bndplt. - * elfxx-x86.c: Likewise. - * elfxx-x86.h: Likewise. - - gold/ChangeLog: - - * NEWS: Document -z bndplt. - * options.h (class General_options): Remove bndplt option. - * x86_64.cc (class Output_data_plt_x86_64_bnd): Remove. - (Target_x86_64::do_make_data_plt): Do not use - Output_data_plt_x86_64_bnd. - (Target_x86_64::Scan::get_reference_flags): Likewise. - (Target_x86_64::Scan::check_non_pic): Likewise. - (Target_x86_64::Scan::local): Likewise. - (Target_x86_64::Scan::global): Likewise. - - ld/ChangeLog: - - * NEWS: Document -z bndplt. - * emulparams/elf_x86_64.sh: Remove bndplt option. - * ld.texi: Likewise. - * testsuite/ld-x86-64/x86-64.exp: - * testsuite/ld-x86-64/bnd-branch-1-now.d: Removed. - * testsuite/ld-x86-64/bnd-branch-1.d: Removed. - * testsuite/ld-x86-64/bnd-branch-1.s: Removed. - * testsuite/ld-x86-64/bnd-ifunc-1-now.d: Removed. - * testsuite/ld-x86-64/bnd-ifunc-1.d: Removed. - * testsuite/ld-x86-64/bnd-ifunc-1.s: Removed. - * testsuite/ld-x86-64/bnd-ifunc-2-now.d: Removed. - * testsuite/ld-x86-64/bnd-ifunc-2.d: Removed. - * testsuite/ld-x86-64/bnd-ifunc-2.s: Removed. - * testsuite/ld-x86-64/bnd-plt-1-now.d: Removed. - * testsuite/ld-x86-64/bnd-plt-1.d: Removed. - * testsuite/ld-x86-64/mpx.exp: Removed. - * testsuite/ld-x86-64/mpx1.out: Removed. - * testsuite/ld-x86-64/mpx1a.c: Removed. - * testsuite/ld-x86-64/mpx1a.rd: Removed. - * testsuite/ld-x86-64/mpx1b.c: Removed. - * testsuite/ld-x86-64/mpx1c.c: Removed. - * testsuite/ld-x86-64/mpx1c.rd: Removed. - * testsuite/ld-x86-64/mpx2.out: Removed. - * testsuite/ld-x86-64/mpx2a.c: Removed. - * testsuite/ld-x86-64/mpx2a.rd: Removed. - * testsuite/ld-x86-64/mpx2b.c: Removed. - * testsuite/ld-x86-64/mpx2c.c: Removed. - * testsuite/ld-x86-64/mpx2c.rd: Removed. - * testsuite/ld-x86-64/mpx3.dd: Removed. - * testsuite/ld-x86-64/mpx3a.s: Removed. - * testsuite/ld-x86-64/mpx3b.s: Removed. - * testsuite/ld-x86-64/mpx3n.dd: Removed. - * testsuite/ld-x86-64/mpx4.dd: Removed. - * testsuite/ld-x86-64/mpx4a.s: Removed. - * testsuite/ld-x86-64/mpx4b.s: Removed. - * testsuite/ld-x86-64/mpx4n.dd: Removed. - * testsuite/ld-x86-64/pr20800a.S: Removed. - * testsuite/ld-x86-64/pr20800b.S: Removed. - * testsuite/ld-x86-64/pr21038a-now.d: Removed. - * testsuite/ld-x86-64/pr21038a.d: Removed. - * testsuite/ld-x86-64/pr21038a.s: Removed. - * testsuite/ld-x86-64/pr21038b-now.d: Removed. - * testsuite/ld-x86-64/pr21038b.d: Removed. - * testsuite/ld-x86-64/pr21038b.s: Removed. - * testsuite/ld-x86-64/pr21038c-now.d: Removed. - * testsuite/ld-x86-64/pr21038c.d: Removed. - * testsuite/ld-x86-64/pr21038c.s: Removed. - -2022-12-14 Alan Modra - - asan: signed integer overflow in display_debug_frames - * dwarf.c (struct Frame_Chunk): Make col_offset an int64_t. - Adjust all places allocating col_offset and col_type to use - the size of the array element rather than the size of a type. - (frame_display_row): Adjust printing of col_offset. - (display_debug_frames): Factor out multiplication by - code_factor and data_factor. Avoid signed overflow. Use - 64-bit variables. - -2022-12-14 Alan Modra - - Don't access freed memory printing objcopy warning - abfd->filename will be freed if bfd_close gets far enough to delete - the bfd. It's possible to have an error from fclose at this point. - - * objcopy.c (copy_archive): Dup filename before closing bfd for - potential use in bfd_nonfatal_message. - -2022-12-14 GDB Administrator - - Automatic date update in version.in - -2022-12-13 Tom Tromey - - Fix control-c handling on Windows - As Hannes pointed out, the Windows target-async patches broke C-c - handling there. Looking into this, I found a few oddities, fixed - here. - - First, windows_nat_target::interrupt calls GenerateConsoleCtrlEvent. - I think this event can be ignored by the inferior, so it's not a great - way to interrupt. Instead, using DebugBreakProcess (or a more - complicated thing for Wow64) seems better. - - Second, windows_nat_target did not implement the pass_ctrlc method. - Implementing this lets us remove the special code to call - SetConsoleCtrlHandler and instead integrate into gdb's approach to C-c - handling. I believe that this should also fix the race that's - described in the comment that's being removed. - - Initially, I thought a simpler version of this patch would work. - However, I think what happens is that some other library (I'm not sure - what) calls SetConsoleCtrlHandler while gdb is running, and this - intercepts and handles C-c -- so that the gdb SIGINT handler is not - called. C-break continues to work, presumably because whatever - handler is installed ignores it. - - This patch works around this issue by ensuring that the gdb handler - always comes first. - -2022-12-13 Tom Tromey - - Refactor code to check for terminal sharing - This refactors the code to check for terminal sharing. - is_gdb_terminal is exported, and sharing_input_terminal_1 is renamed, - slightly refactored, and moved to posix-hdep.c. A new - Windows-specific implementation of this function is added to - mingw-hdep.c. - - MSDN has a warning about GetConsoleProcessList - - This API is not recommended and does not have a virtual terminal - equivalent. [...] Applications remoting via cross-platform - utilities and transports like SSH may not work as expected if - using this API. - - However, we believe this isn't likely to be an issue for gdb. - -2022-12-13 Tom Tromey - - Use gdb::optional for sigint_ours - sigint_ours (and sigquit_ours) can be used without being set. Avoid - this problem by changing them to gdb::optional and checking that they - are in fact set before using the value. - - Rename install_sigint_handler - A subsequent patch will introduce a global 'install_sigint_handler' - function, so first rename the static one in extension.c. - -2022-12-13 Tom de Vries - - [gdb/tdep] Fix s390_linux_nat_target::stopped_by_watchpoint - On s390x-linux, I run into: - ... - (gdb) continue^M - Continuing.^M - breakpoint.c:5784: internal-error: bpstat_stop_status_nowatch: \ - Assertion `!target_stopped_by_watchpoint ()' failed.^M - A problem internal to GDB has been detected,^M - further debugging may prove unreliable.^M - FAIL: gdb.threads/watchpoint-fork.exp: parent: singlethreaded: \ - breakpoint after the first fork (GDB internal error) - ... - - What happens is the follow: - - a watchpoint event triggers - - the event is processed, s390_linux_nat_target::stopped_by_watchpoint is called and - it returns true, as expected - - the watchpoint event is reported by gdb, and gdb stops - - we issue a continue command - - a fork event triggers - - the event is processed, and during processing that event - s390_linux_nat_target::stopped_by_watchpoint is called again, and returns - true - - the assertion fails, because the function is expected to return false - - The function s390_linux_nat_target::stopped_by_watchpoint returns true the - second time, because it looks at the exact same data that was looked at when - it was called the first time, and that data hasn't changed. - - There's code in the same function that intends to prevent that from happening: - ... - /* Do not report this watchpoint again. */ - memset (&per_lowcore, 0, sizeof (per_lowcore)); - if (ptrace (PTRACE_POKEUSR_AREA, s390_inferior_tid (), &parea, 0) < 0) - perror_with_name (_("Couldn't clear watchpoint status")); - ... - and that probably used to work for older kernels, but no longer does since - linux kernel commit 5e9a26928f55 ("[S390] ptrace cleanup"). - - Fix this by copying this: - ... - siginfo_t siginfo; - if (!linux_nat_get_siginfo (inferior_ptid, &siginfo)) - return false; - if (siginfo.si_signo != SIGTRAP - || (siginfo.si_code & 0xffff) != TRAP_HWBKPT) - return false; - ... - from aarch64_linux_nat_target::stopped_data_address and remove the - obsolete watchpoint status clearing code. - - Tested on s390x-linux. - - Approved-By: Ulrich Weigand - -2022-12-13 H.J. Lu - - gold: Remove BND from 64-bit x86-64 IBT PLT - Since MPX support has been removed from x86-64 psABI, remove BND from - 64-bit IBT PLT by using 32-bit IBT PLT. - - PR gold/29851 - * x86_64.cc (Output_data_plt_x86_64_ibt<32>::first_plt_entry): - Renamed to ... - (Output_data_plt_x86_64_ibt::first_plt_entry): This. - (Output_data_plt_x86_64_ibt<64>::first_plt_entry): Removed. - (Output_data_plt_x86_64_ibt::do_fill_first_plt_entry): - Drop the size == 32 check. - (Output_data_plt_x86_64_ibt<32>::plt_entry): Renamed to ... - (Output_data_plt_x86_64_ibt::plt_entry): This. - (Output_data_plt_x86_64_ibt<64>::plt_entry): Removed. - (Output_data_plt_x86_64_ibt<32>::aplt_entry): Renamed to ... - (Output_data_plt_x86_64_ibt::aplt_entry): This. - (Output_data_plt_x86_64_ibt<64>::aplt_entry): Removed. - (Output_data_plt_x86_64_ibt::do_fill_plt_entry): Drop the - size == 32 check. - (Output_data_plt_x86_64_ibt::fill_aplt_entry): Likewise. - -2022-12-13 Tom Tromey - - Remove two unnecessary casts - A couple of calls to parse_probe_linespec had an unnecessary cast. I - suspect this cast was never needed, but once commands were changed to - take a 'const' argument, they became completely obsolete. Tested by - rebuilding. - -2022-12-13 Andrew Burgess - - gdb/testsuite: avoid creating temp file in gdb/testsuite/ directory - After this commit: - - commit 33c1395cf5e9deec7733691ba32c450e5c27f757 - Date: Fri Nov 11 15:26:46 2022 +0000 - - gdb/testsuite: fix gdb.trace/unavailable-dwarf-piece.exp with Clang - - The gdb.trace/unavailable-dwarf-piece.exp test script was creating a - temporary file in the build/gdb/testsuite/ directory, instead of in - the expected place in the outputs directory. - - Fix this by adding a call to standard_output_file. - -2022-12-13 Tom de Vries - - [gdb/testsuite] Fix gdb.python/py-disasm.exp on s390x - On s390x-linux, I run into: - ... - (gdb) disassemble test^M - Dump of assembler code for function test:^M - 0x0000000001000638 <+0>: stg %r11,88(%r15)^M - 0x000000000100063e <+6>: lgr %r11,%r15^M - 0x0000000001000642 <+10>: nop 0^M - => 0x0000000001000646 <+14>: nop 0^M - 0x000000000100064a <+18>: nop 0^M - 0x000000000100064e <+22>: lhi %r1,0^M - 0x0000000001000652 <+26>: lgfr %r1,%r1^M - 0x0000000001000656 <+30>: lgr %r2,%r1^M - 0x000000000100065a <+34>: lg %r11,88(%r11)^M - 0x0000000001000660 <+40>: br %r14^M - End of assembler dump.^M - (gdb) FAIL: gdb.python/py-disasm.exp: global_disassembler=: disassemble test - ... - - The problem is that the test-case expects "nop" but on s390x we have instead - "nop\t0". - - Fix this by allowing the insn. - - Tested on s390x-linux and x86_64-linux. - -2022-12-13 Jan Beulich - - gas: re-work line number tracking for macros and their expansions - The PR gas/16908 workaround aimed at uniformly reporting line numbers - to reference macro invocation sites. As mentioned in a comment this may - be desirable for small macros, but often isn't for larger ones. As a - first step improve diagnostics to report both locations, while aiming at - leaving generated debug info unaltered. - - Note that macro invocation context is lost for any diagnostics issued - only after all input was processed (or more generally for any use of - as_*_where(), as the functions can't know whether the passed in location - is related to [part of] the present stack of locations). To maintain the - intended workaround behavior for PR gas/16908, a new as_where() is - introduced to "look through" macro invocations, while the existing - as_where() is renamed (and used in only very few places for now). Down - the road as_where() will likely want to return a list of (file,line) - pairs. - -2022-12-13 Jan Beulich - - Arm: avoid unhelpful uses of .macro in testsuite - Macros with just a single use site are a little pointless to have, and - even in further cases .irp is more suitable for the purpose. Expand such - inline, avoiding the need to touch the testcases when diagnostics are - changed for code resulting from macro expansion. - - While there also make what was "iter_mla" in sp-usage-thumb2-relax cover - smlatt as well, rather than testing smlabt twice. - -2022-12-13 Tom Tromey - - Fix crash in is_nocall_function - is_nocall_function anticipates only being called for a function or a - method. However, PR gdb/29871 points out a situation where an unusual - expression -- but one that parses to a valid, if extremely weird, - function call -- breaks this assumption. - - This patch changes is_nocall_function to remove this assert and - instead simply return 'false' in this case. - - Approved-By: Simon Marchi - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29871 - -2022-12-13 Johnson Sun - - Replace gdbpy_should_stop with gdbpy_breakpoint_cond_says_stop - In 2014, the function `gdbpy_should_stop' has been replaced with - `gdbpy_breakpoint_cond_says_stop' - - This replaces `gdbpy_should_stop' with `gdbpy_breakpoint_cond_says_stop' in the - comments. - - Since `gdbpy_should_stop' has been renamed as noted in `gdb/ChangeLog-2014': - - * python/py-breakpoint.c (gdbpy_breakpoint_cond_says_stop): Renamed - from gdbpy_should_stop. Change result type to enum scr_bp_stop. - - Change-Id: I0ef3491ce5e057c5e75ef8b569803b30a5838575 - Approved-By: Simon Marchi - -2022-12-13 Alan Modra - - asan: mips_hi16_list segfault in bfd_get_section_limit_octets - static variables like mips_hi16_list are nasty for applications using - bfd. It is possible when opening and closing bfds with mis-matched - hi/lo relocs to leave a stale section pointer on the list. That can - cause a segfault if multiple bfds are being processed. - - Tidying the list when closing is sufficient to stop this happening - (and fixes small memory leaks). This patch goes further and moves - mips_hi16_list to where it belongs in the bfd tdata. - - * elf32-mips.c (bfd_elf32_close_and_cleanup(: Define. - * elf64-mips.c (bfd_elf64_close_and_cleanup): Define. - * elfn32-mips.c (bfd_elf32_close_and_cleanup(: Define. - * elfxx-mips.c (struct mips_hi16): Move earlier. - (mips_hi16_list): Move to.. - (struct mips_elf_obj_tdata): ..here. - (_bfd_mips_elf_close_and_cleanup): New function. - (_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_lo16_reloc), - (_bfd_elf_mips_get_relocated_section_contents): Adjust uses of - mips_hi16_list. - * elfxx-mips.h (_bfd_mips_elf_close_and_cleanup): Declare. - -2022-12-13 GDB Administrator - - Automatic date update in version.in - -2022-12-12 Indu Bhagat - - libctf: remove unnecessary zstd constructs - This patch is essentially a revert of - commit-id: 8818c80cbd4116ef5af171ec47c61167179e225c - (libctf: Add ZSTD_LIBS to LIBS so that ac_cv_libctf_bfd_elf can be true) - - As the specific configure check now uses libtool, this explicit mention of the - dependency $ZSTD_LIBS is not needed anymore. - - ChangeLog: - - * libctf/Makefile.in: Regenerated. - * libctf/aclocal.m4: Likewise. - * libctf/config.h.in: Likewise. - * libctf/configure: Likewise. - * libctf/configure.ac: Remove ZSTD_LIBS from LIBS. Cleanup - unused AC_ZSTD. - -2022-12-12 Indu Bhagat - - libctf: remove AC_CONFIG_MACRO_DIR - ACLOCAL_AMFLAGS is being set already. So using AC_CONFIG_MACRO_DIR is - unnecessary. - - ChangeLog: - - * libctf/configure: Regenerated. - * libctf/configure.ac: remove AC_CONFIG_MACRO_DIR usage. - -2022-12-12 Indu Bhagat - - libctf: remove unnecessary zlib constructs - This dependency is managed via libtool. So explicit addition to LDFLAGS - and LIBS is not necessary anymore. - - ChangeLog: - - * libctf/configure: Regenerated. - * libctf/configure.ac: remove zlib from LDFLAGS and LIBS. - -2022-12-12 Tom de Vries - - [gdb/testsuite] Fix PR20630 regression test in gdb.base/printcmds.exp - On s390x-linux, I run into: - ... - (gdb) print {unsigned char}{65}^M - $749 = 0 '\000'^M - (gdb) FAIL: gdb.base/printcmds.exp: print {unsigned char}{65} - ... - - In contrast, on x86_64-linux, we have: - ... - (gdb) print {unsigned char}{65}^M - $749 = 65 'A'^M - (gdb) PASS: gdb.base/printcmds.exp: print {unsigned char}{65} - ... - - The first problem here is that the test is supposed to be a regression test - for PR20630, which can be reproduced (for an unfixed gdb) like this: - ... - (gdb) p {unsigned char[]}{0x17} - gdbtypes.c:4641: internal-error: copy_type: \ - Assertion `TYPE_OBJFILE_OWNED (type)' failed. - ... - but it's not due to insufficient quoting (note the dropped '[]'). - - That's easy to fix, but after that we have on s390 (big endian): - ... - (gdb) print {unsigned char[]}{65}^M - $749 = ""^M - ... - and on x86_64 (little endian): - ... - (gdb) print {unsigned char[]}{65}^M - $749 = "A"^M - ... - - Fix this by using 0xffffffff, such that in both cases we have: - ... - (gdb) print {unsigned char[]}{0xffffffff}^M - $749 = "\377\377\377\377"^M - ... - - Tested on x86_64-linux and s390x-linux. - -2022-12-12 Alan Modra - - PR29893, buffer overflow in display_debug_addr - PR 29893 - * dwarf.c (display_debug_addr): Sanity check dwarf5 unit_length - field. Don't read past end. - -2022-12-12 Tom Tromey - - Another Rust operator precedence bug - My earlier patch to fix PR rust/29859 introduced a new operator - precedence bug in the Rust parser. Assignment operators are - right-associative in Rust. And, while this doesn't often matter, as - Rust assignments always have the value (), still as a matter of - principle we should get this correct. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29859 - -2022-12-12 Tom de Vries - - [gdb/testsuite] Fix gdb.base/write_mem.exp for big endian - On s390x-linux (big endian), I run into: - ... - (gdb) x /xh main^M - 0x1000638
: 0x0000^M - (gdb) FAIL: gdb.base/write_mem.exp: x /xh main - ... - - In contrast, on x86_64-linux (little endian), we have the expected: - ... - (gdb) x /xh main^M - 0x4004a7
: 0x4242^M - (gdb) PASS: gdb.base/write_mem.exp: x /xh main - ... - - The problem is that the test-case hard-codes expectations about endiannes by - writing an int-sized value (4 bytes in this case) and then printing only a - halfword by using "/h" (so, two bytes). - - If we print 4 bytes, we have for s390x: - ... - 0x1000638
: 0x00004242^M - ... - and for x86_64: - ... - 0x4004a7
: 0x00004242^M - ... - - Fix this by removing the "/h". - - Tested on x86_64-linux and s390x-linux. - -2022-12-12 Jan Vrany - - gdb: fix possible use-after-free when executing commands - In principle, `execute_command()` does following: - - struct cmd_list_element *c; - c = lookup_cmd ( ... ); - ... - /* If this command has been pre-hooked, run the hook first. */ - execute_cmd_pre_hook (c); - ... - /* ...execute the command `c` ...*/ - ... - execute_cmd_post_hook (c); - - This may lead into use-after-free error. Imagine the command - being executed is a user-defined Python command that redefines - itself. In that case, struct `cmd_list_element` pointed to by - `c` is deallocated during its execution so it is no longer valid - when post hook is executed. - - To fix this case, this commit looks up the command once again - after it is executed to get pointer to (possibly newly allocated) - `cmd_list_element`. - -2022-12-12 Jan Beulich - - x86: further re-work insn/suffix recognition to also cover MOVSX - PR gas/29524 - - Having templates with a suffix explicitly present has always been - quirky. After prior adjustment all that's left to also eliminate the - anomaly from move-with-sign-extend is to consolidate the insn templates - and to make may_need_pass2() cope (plus extend testsuite coverage). - -2022-12-12 Jan Beulich - - x86: drop (now) stray IsString - The need for them on the operand-less string insns has gone away with - the removal of maybe_adjust_templates() and associated logic. Since - i386_index_check() needs adjustment then anyway, take the opportunity - and also simplify it, possible again as a result of said removal (plus - the opcode template adjustments done here). - -2022-12-12 Jan Beulich - - x86: move bad-use-of-TLS-reloc check - Having it in match_template() is unhelpful. Neither does looking for the - next template to possibly match make any sense in that case, nor is the - resulting diagnostic making clear what the problem is. - - While moving the check, also generalize it to include all SIMD and VEX- - encoded insns. This way an existing conditional can be re-used in - md_assemble(). Note though that this still leaves a lof of insns which - are also wrong to use with these relocations. - - Further fold the remaining check (BFD_RELOC_386_GOT32) with the XRELEASE - related one a few lines down. This again allows re-using an existing - conditional. - -2022-12-12 Jan Beulich - - x86-64: allow HLE store of accumulator to absolute 32-bit address - In commit 1212781b35c9 ("ix86: allow HLE store of accumulator to - absolute address") I was wrong to exclude 64-bit code. Dropping the - check also leads to better diagnostics in 64-bit code ("MOV", after - all, isn't invalid with "XRELEASE"). - - While there also limit the amount of further checks done: The operand - type checks that were there were effectively redundant with other ones - anyway, plus it's quite fine to also have "xrelease mov , %eax" - look for the next MOV template (in fact again also improving - diagnostics). - -2022-12-12 Jan Beulich - - ix86: don't recognize/derive Q suffix in the common case - Have its use, except where actually legitimate, result in the same "only - supported in 64-bit mode" diagnostic as emitted for other 64-bit only - insns. Also suppress deriving of the suffix in Intel mode except in the - legitimate cases. This in exchange allows dropping the respective code - from match_template(). - - To maintain reasonable diagnostics (in particular to avoid "`mov' is - only supported in 64-bit mode" on the SIMD forms of MOVQ) we need to - defer parse_insn()'s emitting of errors unrelated to prefix parsing. - Utilize i.error just like match_template() does. - - Oddly enough despite gcc's preference towards FILDQ and FIST{,T}Q we - had no testcase whatsoever for these. Therefore such tests are being - added. Note that the removed line in the x86-64-lfence-load testcase - was redundant with the exact same one a few lines up. - -2022-12-12 Jan Beulich - - x86: re-work insn/suffix recognition - Having templates with a suffix explicitly present has always been - quirky. Introduce a 2nd matching pass in case the 1st one couldn't find - a suitable template _and_ didn't itself already need to trim off a - suffix to find a match at all. This requires error reporting adjustments - (albeit luckily fewer than I was afraid might be necessary), as errors - previously reported during matching now need deferring until after the - 2nd pass (because, obviously, we must not emit any error if the 2nd pass - succeeds). While also related to PR gas/29524, it was requested that - move-with-sign-extend be left as broken as it always was. - - PR gas/29525 - Note that with the dropped CMPSD and MOVSD Intel Syntax string insn - templates taking operands, mixed IsString/non-IsString template groups - (with memory operands) cannot occur anymore. With that - maybe_adjust_templates() becomes unnecessary (and is hence being - removed). - - PR gas/29526 - Note further that while the additions to the intel16 testcase aren't - really proper Intel syntax, we've been permitting all of those except - for the MOVD variant. The test therefore is to avoid re-introducing such - an inconsistency. - -2022-12-12 Jan Beulich - - x86: constify parse_insn()'s input - The function doesn't alter its input buffer: Reflect this in its - prototype. To avoid using any kind of cast, simply calculate the update - of "line" from the function's input and output. - - x86: revert disassembler parts of "x86: Allow 16-bit register source for LAR and LSL" - This reverts the disassembler parts of 859aa2c86dc9 ("x86: Allow 16-bit - register source for LAR and LSL"), adjusting testcases as necessary. - That change was itself a partial revert of c9f5b96bdab0 ("x86: correct - handling of LAR and LSL"), without actually saying so. While the earlier - commit was properly agreed upon, the partial revert was not, and hence - should not have been committed. This is even more so that the revert - part of that change wasn't even necessary to address PR gas/29844. - -2022-12-12 Alan Modra - - PR29892, Field file_table of struct module is uninitialized - PR 29892 - * vms-alphs.c (new_module): Use bfd_zmalloc to alloc file_table. - (parse_module): Rewrite file_table reallocation code and clear. - - Lack of bounds checking in vms-alpha.c parse_module - PR 29873 - PR 29874 - PR 29875 - PR 29876 - PR 29877 - PR 29878 - PR 29879 - PR 29880 - PR 29881 - PR 29882 - PR 29883 - PR 29884 - PR 29885 - PR 29886 - PR 29887 - PR 29888 - PR 29889 - PR 29890 - PR 29891 - * vms-alpha.c (parse_module): Make length param bfd_size_type. - Delete length == -1 checks. Sanity check record_length. - Sanity check DST__K_MODBEG, DST__K_RTNBEG, DST__K_RTNEND lengths. - Sanity check DST__K_SOURCE and DST__K_LINE_NUM elements - before accessing. - (build_module_list): Pass dst_section size to parse_module. - -2022-12-12 Alan Modra - - PR29872, uninitialised value in display_debug_lines_decoded dwarf.c:5413 - Plus segvs if the C-library doesn't handle printf %s of NULL. - - PR 29872 - * dwarf.c (null_name): New function. - (process_debug_info): Use it here.. - (display_debug_lines_raw): ..and here.. - (display_debug_lines_decoded): ..and here. xcalloc directory_table. - Simplify xcalloc of file_table. - -2022-12-12 Jan Beulich - - gas/codeview: avoid "shadowing" of glibc function name - While not "index" this time, old enough glibc also has an (unguarded) - declaration of fileno() in stdio.h, which triggers a "shadows a global - declaration" warning with our choice of warning level and with at least - some gcc versions. - - x86: generate template sets data at build time - Speed up gas startup by avoiding runtime allocation of the instances of - type "templates". At the same time cut the memory requirement to just - very little over half (not even accounting for any overhead - notes_alloc() may incur) by reusing the "end" slot of a preceding entry - for the "start" slot of the subsequent one. - - x86: drop sentinel from i386_optab[] - Now that the table is local to gas, ARRAY_SIZE() can be used to - determine the end of the table. Re-arrange the processing loop in - md_begin() accordingly, at the same time folding the two calls to - notes_alloc() into just one. - - x86: add generated tables dependency check to gas - As requested by H.J., just for the sake of people potentially building - in gas/ alone, add a check that the generated files in opcodes/ are - actually up-to-date. Personally I think this should at best be a - warning, but I can see how this may not be easily noticable among other - make output (depending in particular on the verbosity level). - - x86: break gas dependency on libopcodes - gas doesn't use anything from libopcodes anymore - suppress linking in - that library. - - x86: remove i386-opc.c - Remove the now empty i386-opc.c. To compensate, tie table generation in - opcodes/ to the building of i386-dis.o, despite the file not really - depending on the generated data. - -2022-12-12 Jan Beulich - - x86: instantiate i386_{op,reg}tab[] in gas instead of in libopcodes - Unlike many other architectures, x86 does not share an opcode table - between assembly and disassembly. Any consumer of libopcodes would only - ever access one of the two. Since gas is the only consumer of the - assembly data, move it there. While doing so mark respective entities - "static" in i386-gen (we may want to do away with i386_regtab_size - altogether). - - This also shrinks the number of relocations to be processed for - libopcodes.so by about 30%. - -2022-12-12 GDB Administrator - - Automatic date update in version.in - -2022-12-11 Alan Modra - - PR29870, objdump SEGV in display_debug_lines_decoded dwarf.c:5524 - DWARF5 directory and file table allow more opportunity for fuzzers - to break things. There are likely other places in dwarf.c that should - be fixed too. - - PR 29870 - * dwarf.c (display_debug_lines_decoded): Handle NULL file_table - name entry. - -2022-12-11 GDB Administrator - - Automatic date update in version.in - -2022-12-10 Tom de Vries - - [gdb/tdep] Fix larl handling in s390_displaced_step_fixup - On s390x-linux with target board unix/-m31, I run into: - ... - (gdb) PASS: gdb.guile/scm-lazy-string.exp: bad length - print ptr^M - $1 = 0x804006b0 ^M - (gdb) FAIL: gdb.guile/scm-lazy-string.exp: ptr: print ptr - ... - - A minimal example is: - ... - $ gdb -q -batch -ex "set trace-commands on" -x gdb.in - +file scm-lazy-string - +break main - Breakpoint 1 at 0x4005d2: file scm-lazy-string.c, line 23. - +run - - Breakpoint 1, main () at scm-lazy-string.c:23 - 23 const char *ptr = "pointer"; - +step - 24 const char array[] = "array"; - +print ptr - $1 = 0x804006b0 - ... - - If we delete the breakpoint after running to it, we have instead the expected: - ... - +delete - +step - 24 const char array[] = "array"; - +print ptr - $1 = 0x4006b0 "pointer" - ... - - The problem is in displaced stepping, forced by the presence of the breakpoint, - when stepping over this insn: - ... - 0x4005d2 larl %r1,0x4006b0 - ... - - With normal stepping we have: - ... - (gdb) p /x $r1 - $2 = 0x3ff004006b0 - ... - but with displaced stepping we have instead (note the 0x80000000 difference): - ... - (gdb) p /x $r1 - $1 = 0x3ff804006b0 - (gdb) - ... - - The difference comes from this code in s390_displaced_step_fixup: - ... - /* Handle LOAD ADDRESS RELATIVE LONG. */ - else if (is_ril (insn, op1_larl, op2_larl, &r1, &i2)) - { - /* Update PC. */ - regcache_write_pc (regs, from + insnlen); - /* Recompute output address in R1. */ - regcache_cooked_write_unsigned (regs, S390_R0_REGNUM + r1, - amode | (from + i2 * 2)); - } - ... - where the "amode |" adds the 0x80000000. - - Fix this by removing the "amode |". - - Tested on s390-linux, with native and target board unix/-m31. - - Approved-By: Ulrich Weigand - -2022-12-10 GDB Administrator - - Automatic date update in version.in - -2022-12-09 Indu Bhagat - - objdump: sframe: fix memory leaks - ChangeLog: - - * binutils/objdump.c (dump_section_sframe): free up contents and - SFrame decoder context on exit. - -2022-12-09 Indu Bhagat - - libsframe: rename API sframe_fde_func_info to sframe_fde_create_func_info - The new name better reflects the purpose of the function. - - ChangeLog: - - * bfd/elfxx-x86.c (_bfd_x86_elf_create_sframe_plt): Use new - name. - * libsframe/sframe.c (sframe_fde_create_func_info): Rename - sframe_fde_func_info to this. - * libsframe/testsuite/libsframe.encode/encode-1.c: Use new name. - - include/ChangeLog: - - * sframe-api.h (sframe_fde_create_func_info): Rename - sframe_fde_func_info to this. - -2022-12-09 Indu Bhagat - - gas: sframe: fine tune the fragment fixup for SFrame func info - SFrame function info is an unsigned 8-bit field comprising of the following - (from LSB to MSB): - - 4-bits: FRE type - - 1-bit: FRE start address encoding - - 3-bits: Unused - - At the moment, the most-significat 4-bits are zero (The FRE start - address encoding of SFRAME_FDE_TYPE_PCINC has a value of zero, and the upper - 3-bits are unused). So the current implementation works without this patch. - - To be precise, however, the fragment fixup logic is meant to fixup only the - least-significant 4-bits (i.e., only the FRE type needs to be updated - according to the function size). - - This patch makes the gas implementation a bit more resilient: In the - future, when the format does evolve to make use of the currently unused - 3-bits in various ways, the values in those 3-bits can be propagated - unchanged while the fragment fixup continues to update the lowermost - 4-bits to indicate the selected FRE type. - - ChangeLog: - - * gas/gen-sframe.c (create_func_info_exp): New definition. - (output_sframe_funcdesc): Call create_func_info_exp. - * gas/sframe-opt.c (sframe_estimate_size_before_relax): The - associated fragment uses O_modulus now. - (sframe_convert_frag): Adjust the fragment fixup code according - to the new composite exp. - -2022-12-09 Indu Bhagat - - sframe: gas: libsframe: define constants and remove magic numbers - Define constants in sframe.h for the various limits associated with the - range of offsets that can be encoded in the start address of an SFrame - FRE. E.g., sframe_frame_row_entry_addr1 is used when start address - offset can be encoded as 1-byte unsigned value. - - Update the code in gas to use these defined constants as it checks for - these limits, and remove the usage of magic numbers. - - ChangeLog: - - * gas/sframe-opt.c (sframe_estimate_size_before_relax): - (sframe_convert_frag): Do not use magic numbers. - * libsframe/sframe.c (sframe_calc_fre_type): Likewise. - - include/ChangeLog: - - * sframe.h (SFRAME_FRE_TYPE_ADDR1_LIMIT): New constant. - (SFRAME_FRE_TYPE_ADDR2_LIMIT): Likewise. - (SFRAME_FRE_TYPE_ADDR4_LIMIT): Likewise. - -2022-12-09 Indu Bhagat - - sframe.h: make some macros more precise - include/ChangeLog: - - * sframe.h (SFRAME_V1_FUNC_INFO): Use specific bits only. - (SFRAME_V1_FRE_INFO): Likewise. - -2022-12-09 Indu Bhagat - - libsframe: minor formatting nits - ChangeLog: - - * libsframe/sframe.c: Fix formatting nits. - -2022-12-09 Luis Machado - - [aarch64] Add TPIDR2 register support for Linux - With the AArch64 Scalable Matrix Extension we have a new TPIDR2 register, and - it will be added to the existing NT_ARM_TLS register set. Kernel patches are - being reviewed here: - - https://lore.kernel.org/linux-arm-kernel/20220818170111.351889-1-broonie@kernel.org/ - - From GDB's perspective, we handle it in a similar way to the existing TPIDR - register. But we need to consider cases of systems that only have TPIDR and - systems that have both TPIDR and TPIDR2. - - With that in mind, the following patch adds the required code to support - TPIDR2 and turns the org.gnu.gdb.aarch64.tls feature into a - dynamically-generated target description as opposed to a static target - description containing only TPIDR. - - That means we can remove the gdb/features/aarch64-tls.xml file and replace the - existing gdb/features/aarch64-tls.c auto-generated file with a new file that - dynamically generates the target description containing either TPIDR alone or - TPIDR and TPIDR2. - - In the future, when *BSD's start to support this register, they can just - enable it as is being done for the AArch64 Linux target. - - The core file read/write code has been updated to support TPIDR2 as well. - - On GDBserver's side, there is a small change to the find_regno function to - expose a non-throwing version of it. - - It always seemed strange to me how find_regno causes the whole operation to - abort if it doesn't find a particular register name. The patch moves code - from find_regno into find_regno_no_throw and makes find_regno call - find_regno_no_throw instead. - - This allows us to do register name lookups to find a particular register - number without risking erroring out if nothing is found. - - The patch also adjusts the feature detection code for aarch64-fbsd, since - the infrastructure is shared amongst all aarch64 targets. I haven't added - code to support TPIDR2 in aarch64-fbsd though, as I'm not sure when/if - that will happen. - -2022-12-09 Alan Modra - - PR28306, segfault in _bfd_mips_elf_reloc_unshuffle - Access to section data during relocation processing should be bounds - checked, as it is in bfd_perform_relocation. bfd_perform_relocation - does these checks after any special_function is called. So a reloc - special_function needs to do its own bounds checking before accessing - section data. This patch adds many such checks to the mips backend. - - Checking mips relocs is not without some difficulty. See the comment - in _bfd_mips_reloc_offset_in_range. In a multitple reloc sequence - applied to the same location, relocs that may appear somewhere other - than the last one of the sequence need to be treated specially since - they apply to the addend for the next relocation rather than the - section contents. If the addend is in the section then it needs to be - checked but not when the addend is in the reloc. check_inplace - handles this situation. _bfd_mips_reloc_offset_in_range with - check_shuffle handles the case where contents are shuffled before - applying the relocation. - - PR 28306 - * elf32-mips.c (_bfd_mips_elf32_gprel16_reloc): Check reloc - address using _bfd_mips_reloc_offset_in_range. - (gprel32_with_gp, mips16_gprel_reloc): Likewise. - * elf64-mips.c (mips_elf64_gprel32_reloc): Likewise. - (mips16_gprel_reloc): Likewise. - * elfn32-mips.c (mips16_gprel_reloc): Likewise. - (gprel32_with_gp): Check reloc address using - bfd_reloc_offset_in_range. - * elfxx-mips.h (enum reloc_check): Define. - (_bfd_mips_reloc_offset_in_range): Declare. - * elfxx-mips.c (needs_shuffle): New function. - (_bfd_mips_elf_reloc_unshuffle, _bfd_mips_elf_reloc_shuffle): Use it. - (_bfd_mips_reloc_offset_in_range): New function. - (_bfd_mips_elf_gprel16_with_gp): Move reloc address checks to - partial_inplace handling. Use bfd_reloc_offset_in_range. - (_bfd_mips_elf_lo16_reloc): Check reloc address using - bfd_reloc_offset_in_range. - (_bfd_mips_elf_generic_reloc): Check reloc address using - _bfd_mips_reloc_offset_in_range. - (mips_elf_calculate_relocation): Check reloc address before calling - mips_elf_nullify_got_load. - (_bfd_mips_elf_check_relocs): Likewise. - (mips_elf_read_rel_addend): Add sec param, check reloc address - before reading. Adjust callers. - (mips_elf_add_lo16_rel_addend): Add sec param, adjust callers. - -2022-12-09 Tom de Vries - - [gdb/testsuite] Fix gdb.guile/scm-symtab.exp for ppc64le - On powerpc64le-linux, I run into: - ... - (gdb) PASS: gdb.guile/scm-symtab.exp: step out of func2 - guile (print (> (sal-line (find-pc-line (frame-pc (selected-frame)))) line))^M - = #f^M - (gdb) FAIL: gdb.guile/scm-symtab.exp: test find-pc-line with resume address - ... - - The problem is as follows: the instructions for the call to func2 are: - ... - 1000070c: 39 00 00 48 bl 10000744 - 10000710: 00 00 00 60 nop - 10000714: 59 00 00 48 bl 1000076c - 10000718: 00 00 00 60 nop - 1000071c: 00 00 20 39 li r9,0 - ... - and the corresponding line number info is: - ... - scm-symtab.c: - File name Line number Starting address View Stmt - scm-symtab.c 42 0x1000070c x - scm-symtab.c 43 0x10000714 x - scm-symtab.c 44 0x1000071c x - ... - - The test-case looks at the line numbers for two insns: - - the insn of the call to func2 (0x10000714), and - - the insn after that (0x10000718), - and expects the line number of the latter to be greater than the line number - of the former. - - However, both insns have the same line number: 43. - - Fix this by replacing ">" with ">=". - - Tested on x86_64-linux and powerpc64le-linux. - -2022-12-09 GDB Administrator - - Automatic date update in version.in - -2022-12-08 H.J. Lu - - x86-64: Remove BND from 64-bit IBT PLT - Since MPX support has been removed from x86-64 psABI, remove BND from - 64-bit IBT PLT by using x32 IBT PLT. - - bfd/ - - PR ld/29851 - * elf64-x86-64.c (elf_x86_64_get_synthetic_symtab): Also check - x32 IBT PLT for 64-bit. - (elf_x86_64_link_setup_gnu_properties): Always use x32 IBT PLT. - - ld/ - - PR ld/29851 - * testsuite/ld-x86-64/ibt-plt-1.d: Updated. - * testsuite/ld-x86-64/ibt-plt-2a.d: Likewise. - * testsuite/ld-x86-64/ibt-plt-2b.d: Likewise. - * testsuite/ld-x86-64/ibt-plt-2c.d: Likewise. - * testsuite/ld-x86-64/ibt-plt-2d.d: Likewise. - * testsuite/ld-x86-64/ibt-plt-3a.d: Likewise. - * testsuite/ld-x86-64/ibt-plt-3b.d: Likewise. - * testsuite/ld-x86-64/ibt-plt-3c.d: Likewise. - * testsuite/ld-x86-64/ibt-plt-3d.d: Likewise. - * testsuite/ld-x86-64/plt-main-ibt-x32.dd: Moved to ... - * testsuite/ld-x86-64/plt-main-ibt.dd: This. - * testsuite/ld-x86-64/x86-64.exp: Don't use plt-main-ibt-x32.dd. - -2022-12-08 Tom de Vries - - [gdb/testsuite] Require debug info for gdb.tui/tui-layout-asm-short-prog.exp - When running test-case gdb.tui/tui-layout-asm-short-prog.exp on SLE-12-SP3 - aarch64, I run into: - ... - FAIL: gdb.tui/tui-layout-asm-short-prog.exp: check asm box contents - FAIL: gdb.tui/tui-layout-asm-short-prog.exp: check asm box contents again - ... - due to: - ... - (gdb) file tui-layout-asm-short-prog^M - Reading symbols from tui-layout-asm-short-prog...^M - (No debugging symbols found in tui-layout-asm-short-prog)^M - ... - - I managed to reproduce the same behaviour on openSUSE Leap 15.4 x86_64, by - removing the debug option. - - Fix this by making the test-case unsupported if no debug info is found. - - Tested on x86_64-linux. - -2022-12-08 Enze Li - - gdb/testsuite: update a pattern in gdb_file_cmd - When building GDB with the following CFLAGS and CXXFLAGS as part of - configure line: - - CFLAGS=-std=gnu11 CXXFLAGS=-std=gnu++11 - - Then run the selftest.exp, I see: - - ====== - Running /home/lee/dev/binutils-gdb/gdb/testsuite/gdb.gdb/selftest.exp - ... - FAIL: gdb.gdb/selftest.exp: run until breakpoint at captured_main - WARNING: Couldn't test self - - === gdb Summary === - - # of unexpected failures 1 - /home/lee/dev/binutils-gdb/gdb/gdb version 13.0.50.20221206-git -nw -nx - -iex "set height 0" -iex "set width 0" -data-directory - /home/lee/dev/binutils-gdb/gdb/testsuite/../data-directory - ====== - - It is the fact that when I use the previously mentioned CFLAGS and - CXXFLAGS as part of the configuration line, the default value (-O2 -g) - is overridden, then GDB has no debug information. When there's no debug - information, GDB should not run the testcase in selftest.exp. - - The root cause of this FAIL is that the $gdb_file_cmd_debug_info didn't - get the right value ("nodebug") during the gdb_file_cmd procedure. - - That's because in this commit, - - commit 3453e7e409f44a79ac6695589836edb8a49bfb08 - Date: Sat May 19 11:25:20 2018 -0600 - - Clean up "Reading symbols" output - - It changed "no debugging..." to "No debugging..." which causes the above - problem. This patch only updates the corresponding pattern to fix this - issue. - - With this patch applied, I see: - - ====== - Running /home/lee/dev/binutils-gdb/gdb/testsuite/gdb.gdb/selftest.exp - ... - - === gdb Summary === - - # of untested testcases 1 - /home/lee/dev/binutils-gdb/gdb/gdb version 13.0.50.20221206-git -nw -nx - -iex "set height 0" -iex "set width 0" -data-directory - /home/lee/dev/binutils-gdb/gdb/testsuite/../data-directory - ====== - - Tested on x86_64-linux. - - Approved-By: Simon Marchi - -2022-12-08 Nick Clifton - - Update the description of the linker script's TYPE directive. - PR 29861 - * ld.texi (Output Section Type): Note that setting the output - section type only works if the section contains untyped data. - -2022-12-08 Jan Vrany - - gdb: skip objfiles with no BFD in DWARF unwinder - While playing with JIT reader I experienced GDB to crash on null-pointer - dereference when stepping through non-jitted code. - - The problem was that dwarf2_frame_find_fde () assumed that all objfiles - have BFD but that's not always true. To address this problem, this - commit skips such objfiles. - - To test the fix we put breakpoint in jit_function_add (). The JIT reader - does not know how unwind this function so unwinding eventually falls - back to DWARF unwinder which in turn iterates over objfiles. Since the - the code is jitted, it is guaranteed it would eventually process JIT - objfile. - - Approved-By: Simon Marchi - -2022-12-08 Alan Modra - - libctf: avoid potential double free - * ctf-link.c (ctf_link_add_cu_mapping): Set t NULL after free. - -2022-12-08 GDB Administrator - - Automatic date update in version.in - -2022-12-07 Peter Bergner - - PowerPC: Add support for RFC02655 - Saturating Subtract Instruction - opcodes/ - * ppc-opc.c (XOL): New define. - (XOL_MASK): Likewise. - (powerpc_opcodes): Add subfus, subfus., subwus, subwus., subdus, subdus. - - gas/ - * testsuite/gas/ppc/rfc02655.s: New test. - * testsuite/gas/ppc/rfc02655.d: Likewise - * testsuite/gas/ppc/future-raw.s: Likewise. - * testsuite/gas/ppc/future-raw.d: Likewise. - * testsuite/gas/ppc/ppc.exp: Run them. - -2022-12-07 Peter Bergner - - PowerPC: Add support for RFC02656 - Enhanced Load Store with Length Instructions - opcodes/ - * ppc-opc.c (PPCVSXF): New define. - (powerpc_opcodes): Add lxvrl, lxvrll, lxvprl, lxvprll, stxvrl, - stxvrll, stxvprl, stxvprl. - - gas/ - * testsuite/gas/ppc/rfc02656.s: New test. - * testsuite/gas/ppc/rfc02656.d: Likewise. - * testsuite/gas/ppc/ppc.exp: Run it. - -2022-12-07 Simon Marchi - - gdb: add invalidate_selected_frame function - Instead of using `select_frame (nullptr)` to invalidate the selected - frame, introduce a function to do that. There is no change in behavior, - but it makes the intent a bit clearer. It also allows adding an assert - in select_frame that fi is not nullptr, so it avoids passing nullptr by - mistake. - - Change-Id: I61643f46bc8eca428334513ebdaadab63997bdd0 - Reviewed-By: Bruno Larsen - -2022-12-07 Tom de Vries - - [gdb/testsuite] Add KFAILs in gdb.base/longjmp.exp - Add KFAILs in test-case gdb.base/longjmp.exp for PR gdb/26967, covering - various ways that gdb is unable to recover the longjmp target if the libc - probe is not supported. - - Tested on x86_64-linux. - - Approved-By: Simon Marchi - -2022-12-07 Tom Tromey - - Remove unnecessary xstrdup from bppy_init - I saw that bppy_init used a non-const "char *". Fixing this revealed - that the xstrdup here was also unnecessary, so this patch removes it. - -2022-12-07 Alan Modra - - coff make_a_section_from_file tidy - Also support compressing a few more sections. - - * coffgen.c (make_a_section_from_file): Rename return_section - to newsect. Don't try to be clever matching section name. - Compress .gnu.debuglto_.debug_ and .gnu.linkonce.wi. too. - Only rename debug sections when decompressing for linker. - -2022-12-07 Alan Modra - - gas compress_debug tidy - * write.c (compress_debug): Don't set up "ob" until after - seginfo NULL check. Simplify SEC_CONTENTS test. Localise - variables. Use bfd_debug_name_to_zdebug. - - _bfd_elf_slurp_secondary_reloc_section sanity check - * elf.c (_bfd_elf_slurp_secondary_reloc_section): Sanity check - section header against file size. Avoid overflow in - reloc_count. - - bfd_compress_section_contents access to elf_section_data - * compress.c (bfd_compress_section_contents): Don't access - elf_section_data for non-ELF. - -2022-12-07 Alan Modra - - Compression tidy and fixes - Tidies: - - Move stuff from bfd-in.h and libbfd.c to compress.c - - Delete COMPRESS_DEBUG from enum compressed_debug_section_type - - Move compress_debug field out of link_info to ld_config. - Fixes: - - Correct test in bfd_convert_section_setup to use obfd flags, - not ibfd. - - Apply bfd_applicable_file_flags to compression bfd flags added - by gas and ld to the output bfd. - - bfd/ - * bfd-in.h (enum compressed_debug_section_type), - (struct compressed_type_tuple), - (bfd_get_compression_algorithm), - (bfd_get_compression_algorithm_name), - * libbfd.c (compressed_debug_section_names), - (bfd_get_compression_algorithm), - (bfd_get_compression_algorithm_name): Move.. - * compress.c: ..to here, deleting COMPRESS_DEBUG from - enum compressed_debug_section_type. - (bfd_convert_section_setup): Test obfd flags not ibfd for - compression flags. - * elf.c (elf_fake_sections): Replace link_info->compress_debug - test with abfd->flags test. - * bfd-in2.h: Regenerate. - binutils/ - * objcopy.c (copy_file): Tidy setting of bfd compress flags. - Expand comment. - gas/ - * write.c (compress_debug): Test bfd compress flags rather than - flag_compress_debug. - (write_object_file): Apply bfd_applicable_file_flags to compress - debug flags added to output bfd. - include/ - * bfdlink.h (struct bfd_link_info): Delete compress_debug. - ld/ - * ld.h (ld_config_type): Add compress_debug. - * emultempl/elf.em: Replace references to link_info.compress_debug - with config.compress_debug. - * lexsup.c (elf_static_list_options): Likewise. - * ldmain.c (main): Likewise. Apply bfd_applicable_file_flags - to compress debug flags added to output bfd. - -2022-12-07 GDB Administrator - - Automatic date update in version.in - -2022-12-06 H.J. Lu - - bfd: Avoid signed overflow for new_size adjustment - When bfd_size_type is unsigned 64-bit integer and sizeof is unsigned - 32-bit integer, subtraction in - - *new_size += sizeof (Elf32_External_Chdr) - sizeof (Elf64_External_Chdr); - - will overflow. Use - - *new_size -= sizeof (Elf64_External_Chdr) - sizeof (Elf32_External_Chdr); - - to avoid overflow. - - PR binutils/29860 - * compress.c (bfd_convert_section_setup): Avoid signed overflow - for new_size adjustment. - -2022-12-06 Tom Tromey - - Cosmetic fix in ppc-sysv-tdep.c - This is just a couple of cosmetic fixes in ppc-sysv-tdep.c: fixing - some formatting and correcting a typo. - - Fix operator precedence bug in Rust parser - PR rust/29859 points out an operator precedence bug in the Rust - parser. This patch fixes it and adds a regression test. - -2022-12-06 Nick Clifton - - Fix a dereference of NULL when scanning the symbol hashes array in the ARM linker. - PR 29852 - * elf32-arm.c (cmse_scan): Check for NULL entries in the - sym_hashes array. - (elf32_arm_gc_mark_extra_sections): Likewise. - -2022-12-06 Tom de Vries - - [gdb/testsuite] Fix test names in gdb.base/longjmp.exp - When running test-case gdb.base/longjmp.exp, we have: - ... - PASS: gdb.base/longjmp.exp: next over setjmp (1) - ... - PASS: gdb.base/longjmp.exp: next over setjmp (2) - ... - - The trailing " (1)" and " (2)" are interpreted as comments rather than parts - of the test name, and therefore this is a duplicate, which is currently not - detected by our duplicate detection mechanism (PR testsuite/29772). - - Fix the duplicate by using with_test_prefix. - - Tested on x86_64-linux. - -2022-12-06 Tom de Vries - - [gdb/testsuite] Make gdb.base/longjmp.exp FAIL more stable across archs - When running test-case gdb.base/longjmp.exp on x86_64-linux, the master - longjmp breakpoint is set using probes and the test-case passes: - ... - (gdb) PASS: gdb.base/longjmp.exp: next to longjmp (1) - next^M - 0x00000000004005cc 49 if (setjmp (env) == 0) /* patt1 */^M - (gdb) PASS: gdb.base/longjmp.exp: next over longjmp(1) - next^M - 56 resumes++;^M - (gdb) PASS: gdb.base/longjmp.exp: next into else block (1) - ... - - However, if I disable - create_longjmp_master_breakpoint_probe, we have instead: - ... - (gdb) PASS: gdb.base/longjmp.exp: next to longjmp (1) - next^M - 56 resumes++;^M - (gdb) FAIL: gdb.base/longjmp.exp: next over longjmp(1) - ... - - At first glance, the failure mode doesn't look too bad: we stop - a few insns later than the passing scenario. - - For contrast, if we do the same on powerpc64le, the failure mode is: - ... - (gdb) PASS: gdb.base/longjmp.exp: next to longjmp (1) - next^M - ^M - Breakpoint 3, main () at longjmp.c:59^M - 59 i = 1; /* miss_step_1 */^M - (gdb) FAIL: gdb.base/longjmp.exp: next over longjmp(1) - ... - Here we only stop because of running into the safety net breakpoint at - miss_step_1. - - So, how does this happen on x86_64? Let's look at the code: - ... - 4005c7: e8 94 fe ff ff call 400460 <_setjmp@plt> - 4005cc: 85 c0 test %eax,%eax - 4005ce: 75 1e jne 4005ee - 4005d0: 8b 05 8e 0a 20 00 mov 0x200a8e(%rip),%eax # 601064 - 4005d6: 83 c0 01 add $0x1,%eax - 4005d9: 89 05 85 0a 20 00 mov %eax,0x200a85(%rip) # 601064 - 4005df: be 01 00 00 00 mov $0x1,%esi - 4005e4: bf 80 10 60 00 mov $0x601080,%edi - 4005e9: e8 82 fe ff ff call 400470 - 4005ee: 8b 05 74 0a 20 00 mov 0x200a74(%rip),%eax # 601068 - ... - The next over the longjmp call at 4005e9 is supposed to stop at the longjmp - target at 4005cc, but instead we stop at 4005ee, where we have the step-resume - breakpoint inserted by the next. In other words, we accidentally "return" - from the longjmp call to the insn immediately after it (even though - a longjmp is a noreturn function). - - Try to avoid this accident and make the failure mode on x86_64 the same as on - powerpc64le, by switching the then and else branch. - - Tested on x86_64-linux. - -2022-12-06 Xiao Zeng - - gdb/riscv: correct dwarf to gdb register number mapping - According to the riscv psabi, the mapping relationship between the - DWARF registers and the machine registers is as follows: - - DWARF Number | Register Name | Description - 0 - 31 | x0 - x31 | Integer Registers - 32 - 63 | f0 - f31 | Floating-point Registers - - This is not modelled quite right in riscv_dwarf_reg_to_regnum, the - DWARF register numbers 31 and 63 are not handled correctly due to a - use of '<' instead of '<='. This commit fixes this issue. - -2022-12-06 Haochen Jiang - - x86: Remove unnecessary vex.w check for xh_mode in disassembler - For all the xh_mode usage in table, they are all using %XH, which will - print "{bad}" while EVEX.W=1. This makes this vex.w check unnecessary. - - opcodes/ChangeLog: - - * i386-dis.c (OP_E_memory): Remove vex.w check for xh_mode. - -2022-12-06 Alan Modra - - Get rid of SEC_ELF_COMPRESS - This flag also isn't needed, except for some sanity checks which we - can omit. - - * elf.c (elf_fake_sections): Don't set SEC_ELF_COMPRESS for - compressed debug sections, just leave sh_name as -1. - (assign_file_positions_for_non_load_sections), - (assign_file_positions_except_relocs): Decide whether a section - needs compressing and thus should not have its file offset set - by looking at sh_name. - (_bfd_elf_assign_file_positions_for_non_load): Similarly decide - which sections need compressing. - * elflink.c (bfd_elf_final_link): Don't test SEC_ELF_COMPRESS. - * merge.c (_bfd_write_merged_section): Likewise. - * section.c (SEC_ELF_COMPRESS): Don't define. - (SEC_ELF_PURECODE): Renumber. - * bfd-in2.h: Regenerate. - -2022-12-06 Alan Modra - - Get rid of SEC_ELF_RENAME - SEC_ELF_RENAME is a flag used to effect section name changes when - compressing/decompressing zlib-gnu debug sections. This can be - accomplished more directly in one of the objcopy specific bfd - functions. Renaming for ld input is simplified too. Ld input object - files always have BFD_DECOMPRESS set. - - bfd/ - * compress.c (bfd_convert_section_size): Rename to.. - (bfd_convert_section_setup): ..this. Handle objcopy renaming - of compressed/decompressed debug sections. - * elf.c (_bfd_elf_make_section_from_shdr): Only rename zdebug - input for linker. - (elf_fake_sections): Don't handle renaming of debug sections for - objcopy here. - * section.c (SEC_ELF_RENAME): Delete. - * bfd-in2.h: Regenerate. - binutils/ - * objcopy.c (setup_section): Call bfd_convert_section_setup. - Don't call bfd_convert_section_size. - -2022-12-06 Alan Modra - - Compression header enum - Define an enum instead of using ELFCOMPRESS_ZLIB and ELFCOMPRESS_ZSTD - in bfd and binutils, and move some functions from bfd.c to compress.c. - When looking at the COFF/PE debug compression support, I wondered - about extending it to support zstd. I likely won't do that, but - the compression header ch_type field isn't just ELF specific if these - headers are to be used in COFF/PE too. - - bfd/ - * bfd.c (bfd_update_compression_header), - (bfd_check_compression_header, bfd_get_compression_header_size), - (bfd_convert_section_size, bfd_convert_section_contents): Move to.. - * compress.c: ..here. - (enum compression_type): New. Use it throughout file. - * elf.c (_bfd_elf_make_section_from_shdr): Replace uses of - ELFCOMPRESS_ZLIB and ELFCOMPRESS_ZSTD with ch_compress_zlib and - ch_compress_zstd. - * bfd-in2.h: Regenerate. - binutils/ - * readelf.c (process_section_headers, dump_section_as_strings), - (dump_section_as_bytes, load_specific_debug_section): Replace - uses of ELFCOMPRESS_ZLIB and ELFCOMPRESS_ZSTD with - ch_compress_zlib and ch_compress_zstd. - -2022-12-06 mengqinggang - - LoongArch: Fix dynamic reloc not generated bug in some cases. - bfd/ChangeLog: - - * elfnn-loongarch.c (loongarch_elf_relocate_section): Likewise. - -2022-12-06 Alan Modra - - PR29855, ch_type in bfd_init_section_decompress_status can be uninitialized - PR 29855 - * compress.c (bfd_init_section_decompress_status): Set ch_type - to zero for zlib-gnu case. - -2022-12-06 GDB Administrator - - Automatic date update in version.in - -2022-12-05 Simon Marchi - - gdb/linux-nat: add ptid parameter to linux_xfer_siginfo - Make the inferior_ptid bubble up to linux_nat_target::xfer_partial. - - Change-Id: I62dbc5734c26648bb465f449c2003c73751cd812 - -2022-12-05 Simon Marchi - - gdb/linux-nat: use l linux_nat_get_siginfo in linux_xfer_siginfo - I noticed we could reduce duplication a bit here. - - Change-Id: If24e54d1dac71b46f7c1f68a18a073d4c084b644 - -2022-12-05 Simon Marchi - - gdb/linux-nat: check ptrace return value in linux_nat_get_siginfo - Not a big deal, but it seems strange to check errno instead of the - ptrace return value to know whether it succeeded. - - Change-Id: If0a6d0280ab0e5ecb077e546af0d6fe489c5b9fd - -2022-12-05 Simon Marchi - - gdb/linux-nat: don't memset siginfo on failure in linux_nat_get_siginfo - No caller cares about the value of *SIGINFO on failure. It's also - documented in the function doc that *SIGINFO is uninitialized (I - understand "untouched") on failure. - - Change-Id: I5ef38a5f58e3635e109b919ddf6f827f38f1225a - -2022-12-05 Simon Marchi - - gdb/linux-nat: bool-ify linux_nat_get_siginfo - Change return type to bool. - - Change-Id: I1bf0360bfdd1b5994cd0f96c268d806f96fe51a4 - -2022-12-05 Simon Marchi - - gdb/linux-nat: use get_ptrace_pid in two spots - No behavior change expected. - - Change-Id: Ifaa64ecd619483646b024fd7c62e571e92a8eedb - -2022-12-05 Simon Marchi - - gdb/testsuite: remove perror calls when failing to run - I noticed that when running these two tests in sequence: - - Running /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.ada/arrayptr.exp ... - ERROR: GDB process no longer exists - ERROR: Couldn't run foo-all - Running /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.ada/assign_1.exp ... - - The results in gdb.sum are: - - Running /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.ada/arrayptr.exp ... - PASS: gdb.ada/arrayptr.exp: scenario=all: compilation foo.adb - ERROR: GDB process no longer exists - UNRESOLVED: gdb.ada/arrayptr.exp: scenario=all: gdb_breakpoint: set breakpoint at foo.adb:40 (eof) - ERROR: Couldn't run foo-all - Running /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.ada/assign_1.exp ... - UNRESOLVED: gdb.ada/assign_1.exp: changing the language to ada - PASS: gdb.ada/assign_1.exp: set convenience variable $xxx to 1 - - The UNRESOLVED for arrayptr.exp is fine, as GDB crashes in that test, - while trying to run to main. However, the UNRESOLVED in assign_1.exp - doesn't make sense, GDB behaves as expected in that test: - - (gdb) set lang ada^M - (gdb) UNRESOLVED: gdb.ada/assign_1.exp: changing the language to ada - print $xxx := 1^M - $1 = 1^M - (gdb) PASS: gdb.ada/assign_1.exp: set convenience variable $xxx to 1 - - The problem is that arrayptr.exp calls perror when failing to run to - main, then returns. perror makes it so that the next test (as in - pass/fail) will be recorded as UNRESOLVED. However, here, the next test - (as in pass/fail) is in the next test (as in .exp). Hence the spurious - UNRESOLVED in assign_1.exp. - - These perror when failing to run to X are not really useful, especially - since runto records a FAIL on error, by default. Remove all the - perrors on runto failure I could find. - - When there wasn't one already, add a return statement when failing to - run, to avoid running the test of the test unnecessarily. - - I thought of adding a check ran between test (in gdb_finish - probably) where we would emit a warning if errcnt > 0, meaning a test - quit and left a perror "active". However, reading that variable would - poke into the DejaGNU internals, not sure it's a good idea. - - Change-Id: I2203df6d06e199540b36f56470d1c5f1dc988f7b - -2022-12-05 Luis Machado - - Add missing newline to gdbarch_tdep debugging output - The missing newline causes testsuite issues because the gdb prompt gets output - to an unexpected location. - -2022-12-05 Nick Clifton - - Prevent an illegal memory access when comparing the prefix of a section name regexp. - PR 29849 - * ldlang.c (spec_match): Check that there is sufficient length in - the target name to match the spec's prefix. - -2022-12-05 Martin Liska - - testsuite: support mold linker - Mold linker demotes symbols like main to be local and the patch - adjusts expected output from nm. - - Moreover, simplify the regex patterns. - -2022-12-05 Thiago Jung Bauermann - - gdbarch.py: Fix indentation in the generated set_gdbarch_* definitions - Use as many tabs as possible for indentation and pad with spaces to keep - the argument aligned to the opening parenthesis in the line above. - - Co-developed-by: Simon Marchi - Approved-By: Simon Marchi - -2022-12-05 Thiago Jung Bauermann - - gdbarch.py: Fix indentation in the generated gdbarch_dump function - Use tab for the first eight spaces of indentation, and align the gdb_printf - arguments to the open parenthesis of the function call. - - Approved-By: Simon Marchi - -2022-12-05 Thiago Jung Bauermann - - gdb: Update my email address in MAINTAINERS - -2022-12-05 Jan Beulich - - gas: add Dwarf line number test for .macro expansions - Before fiddling with the code let's put in place a test covering what - PR/gas 16908 aimed at. - - gas: squash (some) .linefile from listings - Not so long ago we started to insert these artificially when expanding - certain macro-like constructs; zap them as cluttering what actually - results from user input. - -2022-12-05 Jan Beulich - - gas: avoid inserting extra newline in buffer_and_nest() - In "-alm" listings I've noticed an odd blank line following the inserted - .linefile one. This results from the explicit NL inserted being - redundant with the one left in place from the original input line by all - respective callers. Note that we need to compensate for the removed line - by bumping the directive argument (which in turn is decremented again in - s_linefile() before calling new_logical_line_flags(), and I have to - confess that when putting together the original change I was a little - puzzled by the imbalance of increments/decrements, but then I forgot to - actually go look for the cause). - - While there also switch to sb_add_string() instead of effectively open- - coding it to some degree. - -2022-12-05 Jan Beulich - - Arm: .noinit and .persistent are not supported for Linux targets - Respective tests being run means guaranteed failures. - -2022-12-05 Nick Clifton - - Fix an illegal memory access when parsing a corrupt VMS Alpha file. - PR 29848 - * vms-alpha.c (parse_module): Fix potential out of bounds memory - access. - -2022-12-05 Andrew Burgess - - libopcodes/mips: add support for disassembler styling - This commit adds disassembler styling support for MIPS. After this - commit objdump and GDB will style disassembler output. - - This is a pretty straight forward change, we switch to use the - disassemble_info::fprintf_styled_func callback, and pass an - appropriate style through as needed. No additional tricks were - needed (compared to say i386, or ARM). - - Tested by running all of the objdump commands used by the gas - testsuite and manually inspecting the styled output, everything looks - reasonable, though I'm not a MIPS expert, so it is possible that I've - missed some corner cases. Worst case though is that something will be - styled incorrectly, the actual content should be unchanged. - - All the gas, ld, and binutils tests still pass for me. - -2022-12-05 Andrew Burgess - - opcodes/mips: use .word/.short for undefined instructions - While working on disassembler styling for MIPS, I noticed that - undefined instructions are printed by the disassembler as raw number - with no assembler directive prefix (e.g. without .word or .short). - - I think adding something like .word, or .short, helps to make it - clearer the size of the value that is being displayed, and is inline - with what many of the other libopcode disassemblers do. - - In this commit I've added the .word and .short directives, and updated - all the tests that I spotted that failed as a result. - -2022-12-05 Alan Modra - - Re: Renaming .debug to .zdebug and vice versa - * compress.c (bfd_debug_name_to_zdebug): Fix C++ compile error. - (bfd_zdebug_name_to_debug): Likewise. - * bfd-in2.h: Regenerate. - -2022-12-05 GDB Administrator - - Automatic date update in version.in - -2022-12-04 Alan Modra - - PR29846, segmentation fault in objdump.c compare_symbols - Fixes a fuzzed object file problem where plt relocs were manipulated - in such a way that two synthetic symbols were generated at the same - plt location. Won't occur in real object files. - - PR 29846 - PR 20337 - * objdump.c (compare_symbols): Test symbol flags to exclude - section and synthetic symbols before attempting to check flavour. - -2022-12-04 Alan Modra - - COFF compressed debug support - Since commit 4bea06d73c04 COFF support for compressed debug sections - has been broken due to the "flags" variable not getting SEC_HAS_CONTENTS. - - * coffgen.c (make_a_section_from_file): Correct section flags - handling. Delete extraneous condition. Update error messages - to be the same as in elf.c. - -2022-12-04 Alan Modra - - Renaming .debug to .zdebug and vice versa - Move a couple of elf.c functions to compress.c. - - * compress.c (bfd_debug_name_to_zdebug): New inline function. - (bfd_zdebug_name_to_debug): Likewise. - * elf.c (convert_debug_to_zdebug, convert_zdebug_to_debug): Delete. - (_bfd_elf_make_section_from_shdr, elf_fake_sections), - (_bfd_elf_assign_file_positions_for_non_load): Adjust to suit. - * coffgen.c (make_a_section_from_file): Use new inlines here. - -2022-12-04 GDB Administrator - - Automatic date update in version.in - -2022-12-03 H.J. Lu - - Revert "ld: Add .note.GNU-stack to ld-plugin/dummy.s" - This reverts commit 44e59b5a7d8a874f6546a1471b8a003911853aa0. - - It works only for ELF targets. - -2022-12-03 H.J. Lu - - ld: Add .note.GNU-stack to ld-plugin/dummy.s - * testsuite/ld-plugin/dummy.s: Add .note.GNU-stack. - -2022-12-03 H.J. Lu - - x86: Allow 16-bit register source for LAR and LSL - Since LAR and LSL only access 16 bits of the source operand, regardless - of operand size, allow 16-bit register source for LAR and LSL, and always - disassemble LAR and LSL with 16-bit source operand. - - gas/ - - PR gas/29844 - * testsuite/gas/i386/i386.s: Add tests for LAR and LSL. - * testsuite/gas/i386/x86_64.s: Likewise. - * testsuite/gas/i386/intelbad.s: Remove "lar/lsl eax, ax". - * testsuite/gas/i386/i386-intel.d: Updated. - * testsuite/gas/i386/i386.d: Likewise. - * testsuite/gas/i386/intel-intel.d: Likewise. - * testsuite/gas/i386/intel.d: Likewise. - * testsuite/gas/i386/intelbad.l: Likewise. - * testsuite/gas/i386/x86_64-intel.d: Likewise. - * testsuite/gas/i386/x86_64.d: Likewise. - - opcodes/ - - PR gas/29844 - * i386-dis.c (MOD_0F02): Removed. - (MOD_0F03): Likewise. - (dis386_twobyte): Restore larS and lslS. - (mod_table): Remove MOD_0F02 and MOD_0F03. - * i386-opc.tbl: Allow 16-bit register source for LAR and LSL. - * i386-tbl.h: Regenerated. - -2022-12-03 GDB Administrator - - Automatic date update in version.in - -2022-12-02 Simon Marchi - - gdb/linux-nat: add pid parameter to linux_proc_xfer_memory_partial - Add a pid parameter to linux_proc_xfer_memory_partial, making the - inferior_ptid reference bubble up close to the target_ops::xfer_partial - boundary. No behavior change expected. - - Change-Id: I58171b00ee1bba1ea22efdbb5dcab8b1ab3aac4c - -2022-12-02 Simon Marchi - - gdb: add some debug statements to solib-svr4.c - Add a few debug statements that were useful to me when debugging why the - glibc probes interface wasn't getting used. - - Change-Id: Ic20744f9fc80a90f196896b0829949411620c540 - -2022-12-02 Simon Marchi - - gdb: merge solib-frv aix-solib debug options into "set/show debug solib" - solib implementations are typically used one at a time. So it will be - rare that you will want to enable debug for one solib kind, and - absolutely want to keep the others disabled. To make things simpler, - instead of adding separate variables / macros / commands for each solib - implementation, merge the existing ones (frv and aix) into a unified - "set/show debug solib", with the solib_debug_printf macro. - - Change-Id: I6e18bbc7401724f37ae66681badb079d75ecf7fa - -2022-12-02 Nick Clifton - - Add Jan Beulich as an x86_64 maintainer. - -2022-12-02 Jan Beulich - - x86: drop most OPERAND_TYPE_* (and rework the rest) - With the general use of C99 there's no need anymore to have i386-gen - produce these. For more frequently used ones introduce local #define-s, - while others are simply spelled out directly. While doing this move - some static constants into more narrow scopes. - - Note that as a "side effect" this corrects type_names[]'es imm8s entry. - -2022-12-02 Jan Beulich - - x86: simplify and slightly correct XCHG vs NOP checking - For one, because of CheckRegSize, there's no need to check the size of - both (register) operands. And then in process_suffix() check opcode - space rather than the (potentially ambiguous) extension opcode. - - x86: also use D for XCHG and TEST - Leverage the C (commutative) attribute to also reduce the number of XCHG - and TEST templates we have. This way the reg <-> r/m (and reg <-> reg for - XCHG) forms can also be folded into a single template each, utilizing D. - -2022-12-02 Tom de Vries - - [gdb/testsuite] Prevent timeout in gdb.ada/float-bits.exp - Recent commit 32a5aa26256 ("[gdb/testsuite] Fix gdb.ada/float-bits.exp - for powerpc64le") started using command "maint print architecture", which - produces ~275 lines. - - Rewrite the corresponding gdb_test_multiple to read line-by-line, to prevent - timeouts on slower test setups. - - Note that this doesn't fix a timeout in the test-case on aarch64 due to: - ... - gdbarch_dump: read_core_file_mappings = <0x817438> - (gdb) aarch64_dump_tdep: Lowest pc = 0x0x8000 - ... - - Tested on x86_64-linux. - -2022-12-02 GDB Administrator - - Automatic date update in version.in - -2022-12-01 Carl Love - - PowerPC, fix gdb.reverse/finish-reverse-bkpt.exp and gdb.reverse/next-reverse-bkpt-over-sr.exp - The tests set a break point with the command break *func. This sets a - breakpoint on the first instruction of the function. PowerPC uses - Global Entry Points (GEP) and Local Entry Points (LEP). The first - instruction in the function is the GEP. The GEP sets up register - r2 before reaching the LEP. When the function is called with func() the - function is entered via the LEP and the test fails because GDB does not - see the breakpoint on the GEP. However, if the function is called via a - function pointer, execution begins at the GEP as the test expects. - - Currently finish-reverse-bkpt.exp uses source file finish-reverse.c and - next-reverse-bpkt-over-sr.exp uses source file step-reverse.c A new - source file was created for tests finish-reverse-bkpt.exp and - next-reverse-bkpt-over-sr.exp. The new files use the new function - pointer method to call the functions so the tests will work correctly on - both PowerPC with a GEP and LEP as well as on other systems. The GEP is - the same as the LEP on non PowerPC systems. - - The expect files were changed to use the new source files and to set the - initial break point for the rest of the test on the function pointer call - for the function. - - This patch fixes two PowerPC test failures in each of the tests - gdb.reverse/finish-reverse-bkpt.exp and - gdb.reverse/next-reverse-bkpt-over-sr.exp. - - Patch tested on PowerPC and Intel X86-64 with no regressions. - - Reviewed-By: Bruno Larsen - -2022-12-01 Tom Tromey - - Remove call to registers_changed from windows-nat.c - I noticed that windows_nat_target::interrupt calls registers_changed. - However, I don't think there's any reason to do this, because this - will happen automatically when the inferior stop is processed. - - Approved-By: Simon Marchi - -2022-12-01 Tom Tromey - - Remove the_windows_nat_target global - I belatedly realized that the "the_windows_nat_target" global isn't - really necessary. It's only used in one place, where 'this' would be - simpler and clearer. This patch removes the global entirely. - - Approved-By: Simon Marchi - -2022-12-01 Simon Marchi - - gdb: make frame_register static - It is only used inside frame.c. - - Change-Id: I44eb46a5992412f8f8b4954b2284b0ef3b549504 - -2022-12-01 Tom Tromey - - Add name canonicalization for C - PR symtab/29105 shows a number of situations where symbol lookup can - result in the expansion of too many CUs. - - What happens is that lookup_signed_typename will try to look up a type - like "signed int". In cooked_index_functions::expand_symtabs_matching, - when looping over languages, the C++ case will canonicalize this type - name to be "int" instead. Then this method will proceed to expand - every CU that has an entry for "int" -- i.e., nearly all of them. A - crucial component of this is that the caller, objfile::lookup_symbol, - does not do this canonicalization, so when it tries to find the symbol - for "signed int", it fails -- causing the loop to continue. - - This patch fixes the problem by introducing name canonicalization for - C. The idea here is that, by making C and C++ agree on the canonical - name when a symbol name can have multiple spellings, we avoid the bad - behavior in objfile::lookup_symbol (and any other such code -- I don't - know if there is any). - - Unlike C++, C only has a few situations where canonicalization is - needed. And, in particular, due to the lack of overloading (thus - avoiding any issues in linespec) and due to the way c-exp.y works, I - think that no canonicalization is needed during symbol lookup -- only - during symtab construction. This explains why lookup_name_info is not - touched. - - The stabs reader is modified on a "best effort" basis. - - The DWARF reader needed one small tweak in dwarf2_name to avoid a - regression in dw2-unusual-field-names.exp. I think this is adequately - explained by the comment, but basically this is a scenario that should - not occur in real code, only the gdb test suite. - - lookup_signed_typename is simplified. It used to search for two - different type names, but now gdb can search just for the canonical - form. - - gdb.dwarf2/enum-type.exp needed a small tweak, because the - canonicalizer turns "unsigned integer" into "unsigned int integer". - It seems better here to use the correct C type name. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29105 - Tested-by: Simon Marchi - Reviewed-by: Andrew Burgess - -2022-12-01 Tom Tromey - - Refactor cooked_index::do_finalize - This refactors cooked_index::do_finalize, reordering an 'if' to make - it a little less redundant. This change makes a subsequent patch - easier to read. - - Reviewed-by: Andrew Burgess - -2022-12-01 Tom Tromey - - Remove language check from dwarf2_compute_name - dwarf2_compute_name has a redundant check of the CU's language -- this - is also checked in dwarf2_canonicalize_name. Removing this slightly - simplifies a future patch. - - Reviewed-by: Andrew Burgess - -2022-12-01 Simon Marchi - - gdb/dwarf: add some QUIT macros - While testing the fix for PR 29105, I noticed I couldn't ctrl-C my way - out of GDB expanding many symtabs. GDB was busy in a loop in - cooked_index_functions::expand_symtabs_matching. Add a QUIT there. I - also happened to see a spot in - cooked_index_functions::expand_matching_symbols where a QUIT would be - useful too, since we iterate over a potentially big number of index - entries and expand CUs in the loop. Add one there too. - - Change-Id: Ie1d650381df7f944c16d841b3e592d2dce7306c3 - Approved-By: Kevin Buettner - -2022-12-01 Simon Marchi - - gdb: remove prune_threads in thread_db_target::update_thread_list - Pedro mentioned that this prune_threads call in - thread_db_target::update_thread_list was not needed, and it was probably - an oversight to leave it there in the work following commit e8032dde10b - ("Push pruning old threads down to the target"). That commit changed - the "find new threads" target operation to "update thread list", making - the target responsible of adding new threads and removing exited - threads, rather than just adding new threads. Commit e8032dde10b moved - the prune_threads calls previously done in common code into each - target's update_thread_list method, in order to keep the existing - behavior, which is why this prune_threads call ended up there. - - In the mean time, the linux-nat target was taught to update_thread_list, - and thread_db_target::update_thread_list defers to that for any live - inferior, so the prune_threads call is not needed there. Otherwise, the - thread_db_target::update_thread_list implementation based on - td_ta_thr_iter_p only knows how to add new threads, not how to delete - exited threads, but that is only used for non-live inferiors, where - threads can't exit anyway. So the prune_threads call is not needed for - that case either. - - Change-Id: I127fd4f84c25086f97853dadf34c5cec6816840d - Approved-By: Pedro Alves - -2022-12-01 H.J. Lu - - opcodes: Remove i386-init.h and i386-tbl.h from HFILES - i386-init.h and i386-tbl.h are generated files. There is nothing to - translate. Remove them from HFILES (POTFILES). - - * Makefile.am (HFILES): Remove i386-init.h and i386-tbl.h. - * Makefile.in: Regenerated. - * po/POTFILES.in: Likewise. - -2022-12-01 Tom Tromey - - Avoid timeouts in gdb.compile - PR compile/29541 points out that some of the C++ tests in gdb.compile - will time out when the glibc debuginfo is installed. This was - interfering with my hacking on gdb by making test runs extremely long, - so I looked into it. - - Internally the bug seems to be that gdb tries to convert multiple - symbols named "var" via the compiler interface; one such symbol (I - didn't track it down too far) causes the C++ compiler plugin to crash. - - Unfortunately, the crash is reported as a timeout, as the gdb side of - the plugin simply hangs. This seems like a bug in the plugin RPC - mechanism and, worse, apparently when I wrote this stuff I didn't - really consider error reporting very much at all, so gdb can't really - detect failures in the first place. - - Anyway... this patch works around the timeout by compiling a simple - test that should provoke this bug, and then using "untested" if it - notices a GCC crash. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29541 - -2022-12-01 Tom Tromey - - Remove obsolete check from skip_compile_feature_tests - skip_compile_feature_tests checks for "Command not supported on this - host", but this error was removed by commit e8d8cce6 ("Import mkdtemp - gnulib module, fix mingw build"). This patch removes the obsolete - test. - - Remove one copy of skip_compile_feature_tests - I noticed that there are two identical copies of - skip_compile_feature_tests in the test suite. This removes one from - gdb.exp, in favor of the one in compile-support.exp. - -2022-12-01 Clément Chigot - - binutils: improve holes detection in .debug_loclists. - The previous warnings about holes in .debug_loclists sections don't - take into account the headers of each CU and could include the locviews - if they precede the loclist. - - The following warning can be triggered between two CU. - ... ... - 0000001d - - 0000002a v000000000000000 v000000000000000 location view pair - 0000002c v000000000000000 v000000000000000 location view pair - - readelf: Warning: There is a hole [0x1e - 0x2e] in .debug_loclists section. - 0000002e v000000000000000 v000000000000000 views at 0000002a for: - ... - - But [0x1e - 0x2a] corresponds to the CU header and [0x2a - 0x2e] are - the locviews. Thus there is no hole here. - - binutils/ChangeLog: - - * dwarf.c (display_debug_loc): Adjust holes detections for - headers and locviews. - -2022-12-01 Nick Clifton - - Fix verilog output when the width is > 1. - PR 25202 - bfd * bfd.c (VerilogDataEndianness): New variable. - (verilog_write_record): Use VerilogDataEndianness, if set, to - choose the endianness of the output. - (verilog_write_section): Adjust the address by the data width. - - binutils* objcopy.c (copy_object): Set VerilogDataEndianness to the - endianness of the input file. - (copy_main): Verifiy the value set by the --verilog-data-width - option. - * testsuite/binutils-all/objcopy.exp: Add tests of the new behaviour. - * testsuite/binutils-all/verilog-I4.hex: New file. - -2022-12-01 Jan Beulich - - x86: rework of match_template()'s suffix checking - (Ab)using i386_opcode_modifier for this has been overkill, as the logic - doesn't really require the full structure. With the removal of - LONG_DOUBLE_MNEM_SUFFIX and No_ldSuf there's no good reason at all - anymore to pull out such a loop invariant: We're dealing a check of a - bit in the loop for a simple comparison. Do the original compares inside - the loop, thus also making it easier to understand what is actually - being checked. - - x86: drop No_ldSuf - With LONG_DOUBLE_MNEM_SUFFIX gone there'salso no use for No_ldSuf - anymore. - - x86/Intel: drop LONG_DOUBLE_MNEM_SUFFIX - With the removal of its use for FPU insns the suffix is now finally - properly misnamed. Drop its use altogether, replacing it by a separate - boolean instead. - - x86/Intel: restrict use of LONG_DOUBLE_MNEM_SUFFIX - As a comment near the top of match_template() already says: We really - only need this pseudo-suffix for far branch handling. Stop "deriving" it - for floating point insns. (Don't bother renaming the now properly - misnamed LONG_DOUBLE_MNEM_SUFFIX, to e.g. FAR_BRANCH_SUFFIX - it's going - to disappear anyway.) - -2022-12-01 Tom de Vries - - [gdb/testsuite] Wait longer for core generation - When I run the gdb testsuite on a powerpc64le-linux system with (slow) nfs - file system, I run into timeouts due to core generation, like for instance: - ... - (gdb) gcore $outputs/gdb.ada/task_switch_in_core/crash.gcore^M - FAIL: gdb.ada/task_switch_in_core.exp: save a corefile (timeout) - ... - - Fix this by using with_timeout_factor 3 in gdb_gcore_cmd. - - Tested on powerpc64le-linux. - Approved-By: Tom Tromey - -2022-12-01 Tom de Vries - - [gdb/testsuite] Fix gdb.ada/float-bits.exp for powerpc64le - On powerpc64le-linux, I run into: - ... - (gdb) print 16llf#4000921fb54442d18469898cc51701b8#^M - $9 = ^M - (gdb) FAIL: gdb.ada/float-bits.exp: print \ - 16llf#4000921fb54442d18469898cc51701b8# - ... - - The problem is that we're using a hex string for the 128-bit IEEE quad long - double format, but the actual long double float format is: - ... - gdbarch_dump: long_double_format = floatformat_ibm_long_double_little^M - ... - - Fix this by using the hex string obtained by compiling test.c: - ... - long double a = 5.0e+25L; - ... - like so: - ... - $ gcc -mlittle test.c -c -g - ... - and running gdb: - ... - $ gdb -q -batch test.o -ex "p /x a" - $1 = 0xc1e1c000000000004544adf4b7320335 - ... - and likewise for -mbig: - ... - $ gdb -q -batch test.o -ex "p /x a" - $1 = 0x4544adf4b7320335c1e1c00000000000 - ... - - Tested on powerpc64le-linux. - - I excercised the case of floatformat_ibm_long_double_big by - using "set endian big" in the test-case. - - Note that for this patch to work correctly, recent commit aaa79cd62b8 ("[gdb] - Improve printing of float formats") is required. - - PR testsuite/29816 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29816 - Approved-By: Tom Tromey - -2022-12-01 GDB Administrator - - Automatic date update in version.in - -2022-11-30 Tom de Vries - - [gdb/testsuite] Fix DUPLICATEs in s390-multiarch.exp - On s390x-linux, I run into: - ... - DUPLICATE: gdb.arch/s390-multiarch.exp: Linux v2 - DUPLICATE: gdb.arch/s390-multiarch.exp: Linux v2 - DUPLICATE: gdb.arch/s390-multiarch.exp: Linux v2 - ... - - Fix this by using with_test_prefix. - - Tested on s390x-linux. - -2022-11-30 Tom de Vries - - [gdb/testsuite] Enable gdb.arch/s390-disassembler-options.exp for --enable-targets=all - On s390x-linux, I run into: - ... - DUPLICATE: gdb.arch/s390-disassembler-options.exp: \ - show disassembler-options esa - ... - - First, reproduce this on x86_64-linux with --enable-targets=all, by replacing - the test for 'istarget "s390*-*-*"' with a test for 'get_set_option_choices - "set architecture" "s390"'. - - Fix the DUPLICATE by using with_test_prefix. - - Also modernize the test-case by using clean_restart instead of gdb_exit/gdb_start. - - Tested on x86_64-linux. - -2022-11-30 Michael Matz - - section-select: Fix exclude-file-3 - this testcase wasn't correctly testing everything, it passed, even - though sections from an excluded file were included. Fixing this - reveals a problem in the new section selector. This fixes that as - well. - - section-select: Remove unused code - walk_wild_file, hence walk_wild_section and walk_wild_section_handler - aren't called with the prefix tree. Hence initialization of the latter - and all potential special cases for it aren't used anymore. That also - removes the need to handler_data[] and some associated helper functions. - So, remove all of that. - -2022-11-30 Michael Matz - - section-select: Implement a prefix-tree - Now that we have a list of potentially matching sections per wild - statement we can actually pre-fill that one by going once over all input - sections and match their names against a prefix-tree that points to the - potentially matching wild statements. - - So instead of looking at all sections names for each glob for each wild - statement we now look at the sections only once and then only check - against those globs that have a possibility of a match at all (usually - only one or two). - - This pushes the whole section selection off the profiles. - -2022-11-30 Michael Matz - - section-select: Completely rebuild matches - The check_relocs callback (and others) might have created new - section behind our back and some of them (e.g. on powerpc the - "linker stubs" .got) need to come in front of all others, despite - being created late (a symptom would be "TOC opt*" failing on powerpc). - - This resets all section matches before updating for newly created - sections (i.e. completely rebuilds the matches). - -2022-11-30 Michael Matz - - section-select: Lazily resolve section matches - and remember the results. Before this the order of section matching - is basically: - - foreach script-wild-stmt S - foreach pattern P of S - foreach inputfile I - foreach section S of I - match S against P - if match: do action for S - - And this process is done three or four times: for each top-level call to - walk_wild() or wild(), that is: check_input_sections, lang_gc_sections, - lang_find_relro_sections and of course map_input_to_output_sections. - - So we iterate over all sections of all files many many times (for each - glob). Reality is a bit more complicated (some special glob types don't - need the full iteration over all sections, only over all files), but - that's the gist of it. - - For future work this shuffles the whole ordering a bit by lazily doing - the matching process and memoizing results, trading a little memory for - a 75% speedup of the overall section selection process. - - This lazy resolution introduces a problem with sections added late - that's corrected in the next patch. - -2022-11-30 Tom Tromey - - Bounds check access to Ada task state names - While looking into Ada tasking a little, I noticed that no bounds - checking is done on accesses to the Ada task state names arrays. This - isn't a problem currently, but if the runtime ever added numbers -- or - if there was some kind of runtime corruption -- it could cause a gdb - crash. - - This patch adds range checking. It also adds a missing _() call when - printing from the 'task_states' array. - -2022-11-30 Tom Tromey - - Use ui_file_up in mi_interp - This changes mi_interp to use ui_file_up rather than explicit - management. - - Approved-By: Simon Marchi - -2022-11-30 Tom Tromey - - Rename fields of cli_interp_base::saved_output_files - This renames the fields of cli_interp_base::saved_output_files, as - requested by Simon. I tried to choose names that more obviously - reflect what the field is used for. I also added a couple of - comments. - - Approved-By: Simon Marchi - -2022-11-30 Tom de Vries - - [gdb] Improve printing of float formats - Currently, on x86_64, a little endian target, I get: - ... - $ gdb -q -batch -ex "maint print architecture" | grep " = floatformat" - gdbarch_dump: bfloat16_format = floatformat_bfloat16_big - gdbarch_dump: double_format = floatformat_ieee_double_big - gdbarch_dump: float_format = floatformat_ieee_single_big - gdbarch_dump: half_format = floatformat_ieee_half_big - gdbarch_dump: long_double_format = floatformat_i387_ext - ... - which suggests big endian. - - This is due to this bit of code in pformat: - ... - /* Just print out one of them - this is only for diagnostics. */ - return format[0]->name; - ... - - Fix this by using gdbarch_byte_order to pick the appropriate index, such that - we have the more accurate: - ... - gdbarch_dump: bfloat16_format = floatformat_bfloat16_little - gdbarch_dump: half_format = floatformat_ieee_half_little - gdbarch_dump: float_format = floatformat_ieee_single_little - gdbarch_dump: double_format = floatformat_ieee_double_little - gdbarch_dump: long_double_format = floatformat_i387_ext - ... - - Tested on x86_64-linux. - -2022-11-30 Alan Modra - - Correct ordering problem in comm-data.exp - * testsuite/ld-elf/comm-data.exp: Build libcomm-data.so before - attempting to read it to set ELF64. - - regen SRC-POTFILES.in - -2022-11-30 Jan Beulich - - x86/Intel: adjustment to restricted suffix derivation - In "x86/Intel: restrict suffix derivation" I think I screwed up - slightly, bringing a piece of code out of sync with its comment, and - resulting in a suffix potentially being derived when one isn't needed. - -2022-11-30 Jan Beulich - - x86: clean up after removal of support for gcc <= 2.8.1 - At the very least a comment in process_operands() is stale. Beyond that - there are effectively two options: - 1) It is possible that FADDP and FMULP were mistakenly not marked as - being in need of dealing with the compiler anomaly, and hence the - respective templates weren't removed at the time when they should - have been. - 2) It is also possible that there are indeed uses known beyond compiler - generated output for these two commutative opcodes, and hence the - templates need to stay. - To be on the safe side assume 2: Update the comment and fold the - templates into their "normal" ones (utilizing D), adjusting consuming - code accordingly. - - For FMULP also add a comment paralleling a similar one FADDP has. - -2022-11-30 Jan Beulich - - x86: drop FloatR - There are just 4 templates using it, which can be easily identified by - other means, as D is set only on a very limited number of FPU templates. - Also move the respective conditional out of the code path taken by all - "reverse match" insns (it probably should have been this way already - before, to avoid the one conditional in the common case). - - With this the templates which had FloatR dropped no longer differ from - their AT&T syntax + mnemonic counterparts - the only difference is now - which of the two would be recognized. For this, however, we don't need - two templates - we can simply arrange the condition for setting - Opcode_FloatR accordingly. - -2022-11-30 Jan Beulich - - x86: extend FPU test coverage for AT&T / Intel mnemonic differences - Before touching the templates, let's ensure we actually cover things: - For one FSUB{,R} and FDIV{,R} would better be tested with operands in - both possible orders. And then -mmnemonic=intel wasn't tested at all. - -2022-11-30 Joel Brobecker - - src-release.sh: Fix gdb source tarball build failure due to libsframe - This script was recently changed as follow: - - | commit e619dddb3a45780ae66d762756882a3b896b617d - | Date: Tue Nov 15 15:07:13 2022 -0800 - | Subject: src-release.sh: Add libsframe - | - | Add libsframe to the list of top level directories that will be included - | in a release. - - Since then, the gdb source tarball has been failing with the error - below during the "make configure-host configure-target" phase: - - | make[3]: *** No rule to make target '../libsframe/libsframe.la', - | needed by 'libbfd.la'. Stop. - | make[3]: Leaving directory '/tmp/gdb-public/bfd' - - This patch fixes the issue by adding libsframe to the list of - GDB_SUPPORT_DIRS, similar to what was done for BINUTILS. - - ChangeLog: - - * src-release.sh (GDB_SUPPORT_DIRS): Add libsframe. - -2022-11-30 GDB Administrator - - Automatic date update in version.in - -2022-11-29 Tom de Vries - - [gdb/testsuite] Fix gdb.base/vla-optimized-out.exp for ppc64le - On powerpc64le-linux, I run into: - ... - (gdb) PASS: gdb.base/vla-optimized-out.exp: o1: printed optimized out vla - p sizeof (a)^M - $2 = ^M - (gdb) FAIL: gdb.base/vla-optimized-out.exp: o1: \ - printed size of optimized out vla - ... - - The problem happens as follows. - - In order to find the size of the optimized out vla, gdb needs to evaluate: - ... - <155> DW_AT_upper_bound : 13 byte block: f3 1 53 23 1 8 20 24 8 20 26 31 1c \ - (DW_OP_GNU_entry_value: (DW_OP_reg3 (r3)); DW_OP_plus_uconst: 1; - DW_OP_const1u: 32; DW_OP_shl; DW_OP_const1u: 32; DW_OP_shra; DW_OP_lit1; - DW_OP_minus) - ... - - When trying to evaluate DW_OP_GNU_entry_value, it looks for a call site - matching the pc, but doesn't find it: - ... - $ gdb -q -batch outputs/gdb.base/vla-optimized-out/vla-optimized-out-o1 \ - -ex "break f1" -ex run -ex "set debug entry-values 1" -ex "print sizeof (a)" - Breakpoint 1 at 0x1000067c: file vla-optimized-out.c, line 34. - - Breakpoint 1, f1 (i=5) at vla-optimized-out.c:34 - 34 } - DW_OP_entry_value resolving cannot find DW_TAG_call_site 0x100006b0 in main - $1 = - .... - - The call site lookup fails because the call site label .LVL4: - ... - bl f1 # 11 *call_value_nonlocal_aixdi [length = 8] - nop - .LVL4: - ... - is not placed directly after the bl insn. This is gcc PR target/107909. - - However, after manually fixing the .s file we have instead: - ... - Cannot find matching parameter at DW_TAG_call_site 0x10000690 at main - $1 = - ... - due to the fact that the call site has no call site parameters. - - The call site does have a reference to the corresponding function f1, with - parameter i, for which we find location list entries: - ... - 0037 1000067c 10000680 (DW_OP_reg3 (r3)) - 004a 10000680 10000690 (DW_OP_GNU_entry_value: (DW_OP_reg3 (r3)); - DW_OP_stack_value) - ... - and we could use the fact that the current pc is in the 1000067c-10000680 - range, and that that the range starts at the start of the function, to deduce - that DW_OP_GNU_entry_value: (DW_OP_reg3 (r3)) == DW_OP_reg3 (r3). - But that's a non-trivial enhancement, filed as enhancement PR symtab/29836. - - Fix this by allowing for target powerpc and the gcc compiler. - - Reviewed-By: Carl Love - Tested-By: Carl Love - PR testsuite/29813 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29813 - -2022-11-29 Simon Marchi - - gdb/testsuite: make gdb_unload use gdb_test_multiple - In the failure seen by Philippe here: - - https://inbox.sourceware.org/gdb-patches/20221120173024.3647464-1-philippe.waroquiers@skynet.be/ - - gdb_unload crashed GDB, leaving no trace in the test results. Change it - to use gdb_test_multiple, so that it leaves an UNRESOLVED result. I - think it is good practice anyway. - - Make it return the result of gdb_test_multiple directly, change - gdb.python/py-objfile.exp accordingly. - - Change gdb.base/endian.exp as well to avoid duplicate test names. - - Change gdb.base/gnu-debugdata.exp to avoid recording a test result, - since gdb_unload does it already now. - - Change-Id: I59a1e4947691330797e6ce23277942547c437a48 - Approved-By: Tom de Vries - -2022-11-29 Simon Marchi - - gdb/testsuite: make gdb_test_multiple return immediately if send_gdb fails - In the failure seen by Philippe here: - - https://inbox.sourceware.org/gdb-patches/20221120173024.3647464-1-philippe.waroquiers@skynet.be/ - - ... the testsuite only outputs PASSes, and an ERROR, resulting from an - uncaught exception. This is a bit sneaky, because ERRORs are not - reported in the test summary. In certain circumstances, it can be easy - to miss. - - Normally, gdb_test_multiple outputs an UNRESOLVED when GDB crashes. But - this is only if it manages to send the command, and it's that command - that crashes GDB. Here, the ERROR is due to the fact that GDB had - already crashed by the time we entered gdb_test_multiple and tried to - send a command. GDB was crashed by the previous "file" command, sent by - gdb_unload. Because gdb_unload uses bare expect, it didn't record a - test failure when crashing GDB (this will be addressed separately). - - In this patch, I propose to make gdb_test_multiple call unresolved - directly and return -1 send_gdb fails. This way, if GDB is already - crashed by the time we enter gdb_test_multiple, it will leave a trace in - the test results in the form of an UNRESOLVED. It will also spare us - the not-so-useful-in-my-opinion TCL backtrace. - - Before, it looks like: - - ERROR: Couldn't send python print(objfile.filename) to GDB. - ERROR: : spawn id exp9 not open - while executing - "expect { - -i exp9 -timeout 10 - -re ".*A problem internal to GDB has been detected" { - fail "$message (GDB internal error)" - gdb_internal_error..." - ("uplevel" body line 1) - invoked from within - "uplevel $body" NONE : spawn id exp9 not open - - And after: - - Couldn't send python print(objfile.filename) to GDB. - UNRESOLVED: gdb.python/py-objfile.exp: objfile.filename after objfile is unloaded - - Change-Id: I72af8dc0d687826fc3f76911c27a9e5f91b677ba - Approved-By: Tom de Vries - -2022-11-29 Vladimir Mezentsev - - gprofng: remove unused gprofng/src/DbeSession.cc.1 - -2022-11-29 Max Filippov - - xtensa: allow dynamic configuration - Import include/xtensa-dynconfig.h that defines XCHAL_* macros as fields - of a structure returned from the xtensa_get_config_v function call. - Define that structure and fill it with default parameter values - specified in the include/xtensa-config.h. - Define reusable function xtensa_load_config that tries to load - configuration and return an address of an exported object from it. - Define functions xtensa_get_config_v{1,2} that use xtensa_load_config - to get structures xtensa_config_v{1,2}, either dynamically configured - or the default. - - bfd/ - * Makefile.am (BFD32_BACKENDS, BFD32_BACKENDS_CFILES): Append - xtensa-dynconfig.c. - * Makefile.in: Regenerate. - * configure: Regenerate. - * configure.ac (xtensa_elf32_be_vec, xtensa_elf32_le_vec): Add - xtensa-dynconfig.lo to the tb. - * elf32-xtensa.c (xtensa-config.h): Replace #include with - xtensa-dynconfig.h. - (XSHAL_ABI, XTHAL_ABI_WINDOWED, XTHAL_ABI_CALL0): Remove - definitions. - * xtensa-dynconfig.c: New file. - * xtensa-isa.c (xtensa-dynconfig.h): New #include. - (xtensa_get_modules): New function. - (xtensa_isa_init): Call xtensa_get_modules instead of taking - address of global xtensa_modules. - - gas/ - * config/tc-xtensa.c (xtensa-config.h): Replace #include with - xtensa-dynconfig.h. - (XTHAL_ABI_WINDOWED, XTHAL_ABI_CALL0, XTENSA_MARCH_EARLIEST): - Remove definitions. - * config/tc-xtensa.h (xtensa-config.h): Replace #include with - xtensa-dynconfig.h. - * config/xtensa-relax.c (xtensa-config.h): Replace #include with - xtensa-dynconfig.h. - (XCHAL_HAVE_WIDE_BRANCHES): Remove definition. - - include/ - * xtensa-dynconfig.h: New file. - - ld/ - * emultempl/xtensaelf.em (xtensa-config.h): Replace #include - with xtensa-dynconfig.h. - (XTHAL_ABI_WINDOWED, XTHAL_ABI_CALL0): Remove definitions. - -2022-11-29 GDB Administrator - - Automatic date update in version.in - -2022-11-28 Andrew Burgess - - gdb/testsuite: remove use of then keyword from library files - The canonical form of 'if' in modern TCL is 'if {} {}'. But there's - still a bunch of places in the testsuite where we make use of the - 'then' keyword, and sometimes these get copies into new tests, which - just spreads poor practice. - - This commit removes all use of the 'then' keyword from the testsuite - library files (in boards/, config/, and lib/). Previous commits have - removed all uses of the 'then' keyword from the test script files, - this commit just cleans up the library files. - - There should be no changes in what is tested after this commit. - -2022-11-28 Andrew Burgess - - gdb/testsuite: remove use of then keyword from gdb.*/*.exp scripts - The canonical form of 'if' in modern TCL is 'if {} {}'. But there's - still a bunch of places in the testsuite where we make use of the - 'then' keyword, and sometimes these get copies into new tests, which - just spreads poor practice. - - This commit removes all use of the 'then' keyword from the remaining - gdb.*/*.exp scripts. Previous commits have done the bulk of this - removal, this commit just handles the remaining directories that each - contain a low number of instances. - - There should be no changes in what is tested after this commit. - -2022-11-28 Andrew Burgess - - gdb/testsuite: remove use of then keyword from gdb.multi/*.exp - The canonical form of 'if' in modern TCL is 'if {} {}'. But there's - still a bunch of places in the testsuite where we make use of the - 'then' keyword, and sometimes these get copies into new tests, which - just spreads poor practice. - - This commit removes all use of the 'then' keyword from the gdb.multi/ - test script directory. - - There should be no changes in what is tested after this commit. - -2022-11-28 Andrew Burgess - - gdb/testsuite: remove use of then keyword from gdb.fortran/*.exp - The canonical form of 'if' in modern TCL is 'if {} {}'. But there's - still a bunch of places in the testsuite where we make use of the - 'then' keyword, and sometimes these get copies into new tests, which - just spreads poor practice. - - This commit removes all use of the 'then' keyword from the gdb.fortran/ - test script directory. - - There should be no changes in what is tested after this commit. - -2022-11-28 Andrew Burgess - - gdb/testsuite: remove use of then keyword from gdb.disasm/*.exp - The canonical form of 'if' in modern TCL is 'if {} {}'. But there's - still a bunch of places in the testsuite where we make use of the - 'then' keyword, and sometimes these get copies into new tests, which - just spreads poor practice. - - This commit removes all use of the 'then' keyword from the gdb.disasm/ - test script directory. - - There should be no changes in what is tested after this commit. - -2022-11-28 Andrew Burgess - - gdb/testsuite: remove use of then keyword from gdb.reverse/*.exp - The canonical form of 'if' in modern TCL is 'if {} {}'. But there's - still a bunch of places in the testsuite where we make use of the - 'then' keyword, and sometimes these get copies into new tests, which - just spreads poor practice. - - This commit removes all use of the 'then' keyword from the gdb.reverse/ - test script directory. - - There should be no changes in what is tested after this commit. - -2022-11-28 Andrew Burgess - - gdb/testsuite: remove use of then keyword from gdb.trace/*.exp - The canonical form of 'if' in modern TCL is 'if {} {}'. But there's - still a bunch of places in the testsuite where we make use of the - 'then' keyword, and sometimes these get copies into new tests, which - just spreads poor practice. - - This commit removes all use of the 'then' keyword from the gdb.trace/ - test script directory. - - There should be no changes in what is tested after this commit. - -2022-11-28 Andrew Burgess - - gdb/testsuite: remove use of then keyword from gdb.threads/*.exp - The canonical form of 'if' in modern TCL is 'if {} {}'. But there's - still a bunch of places in the testsuite where we make use of the - 'then' keyword, and sometimes these get copies into new tests, which - just spreads poor practice. - - This commit removes all use of the 'then' keyword from the gdb.threads/ - test script directory. - - There should be no changes in what is tested after this commit. - -2022-11-28 Andrew Burgess - - gdb/testsuite: remove use of then keyword from gdb.python/*.exp - The canonical form of 'if' in modern TCL is 'if {} {}'. But there's - still a bunch of places in the testsuite where we make use of the - 'then' keyword, and sometimes these get copies into new tests, which - just spreads poor practice. - - This commit removes all use of the 'then' keyword from the gdb.python/ - test script directory. - - There should be no changes in what is tested after this commit. - -2022-11-28 Andrew Burgess - - gdb/testsuite: remove use of then keyword from gdb.cp/*.exp - The canonical form of 'if' in modern TCL is 'if {} {}'. But there's - still a bunch of places in the testsuite where we make use of the - 'then' keyword, and sometimes these get copies into new tests, which - just spreads poor practice. - - This commit removes all use of the 'then' keyword from the gdb.cp/ - test script directory. - - There should be no changes in what is tested after this commit. - -2022-11-28 Andrew Burgess - - gdb/testsuite: remove use of then keyword from gdb.arch/*.exp - The canonical form of 'if' in modern TCL is 'if {} {}'. But there's - still a bunch of places in the testsuite where we make use of the - 'then' keyword, and sometimes these get copies into new tests, which - just spreads poor practice. - - This commit removes all use of the 'then' keyword from the gdb.arch/ - test script directory. - - There should be no changes in what is tested after this commit. - -2022-11-28 Andrew Burgess - - gdb/testsuite: remove use of then keyword from gdb.base/*.exp - The canonical form of 'if' in modern TCL is 'if {} {}'. But there's - still a bunch of places in the testsuite where we make use of the - 'then' keyword, and sometimes these get copies into new tests, which - just spreads poor practice. - - This commit removes all use of the 'then' keyword from the gdb.base/ - test script directory. - - There should be no changes in what is tested after this commit. - -2022-11-28 Andrew Burgess - - gdb/testsuite: remove use of then keyword from gdb.ada/*.exp - The canonical form of 'if' in modern TCL is 'if {} {}'. But there's - still a bunch of places in the testsuite where we make use of the - 'then' keyword, and sometimes these get copies into new tests, which - just spreads poor practice. - - This commit removes all use of the 'then' keyword from the gdb.ada/ - test script directory. - - There should be no changes in what is tested after this commit. - -2022-11-28 Andrew Burgess - - gdb/testsuite: remove DOS line endings from a test script - The gdb.fortran/nested-funcs.exp test script has DOS line endings. I - can see no reason why this script needs DOS line endings. - - Convert to UNIX line endings. - - There should be no change in what is tested after this commit. - -2022-11-28 Tom Tromey - - Don't let gdb_stdlog use pager - When using the "set logging" commands, cli_interp_base::set_logging - will send gdb_stdlog output (among others) to the tee it makes for - gdb_stdout. However, this has the side effect of also causing logging - to use the pager. This is PR gdb/29787. - - This patch fixes the problem by keeping stderr and stdlog separate - from stdout, preserving the rule that only gdb_stdout should page. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29787 - -2022-11-28 Tom Tromey - - Don't let tee_file own a stream - Right now, tee_file owns the second stream it writes to. This is done - for the convenience of the users. In a subsequent patch, this will no - longer be convenient, so this patch moves the responsibility for - ownership to the users of tee_file. - - Remove 'saved_output' global - CLI redirect uses a global variable, 'saved_output'. However, globals - are generally bad, and there is no need for this one -- it can be a - member of cli_interp_base. This patch makes this change. - -2022-11-28 Hannes Domani - - Remove no longer used jump label - The out label is unused since wait_for_debug_event is in a different thread. - - Actually set m_is_async to current async mode - Looks like this was missed in the async mode implementation. - -2022-11-28 Hannes Domani - - Don't use auto for lambda parameter - Older gcc versions (here 4.9.2) can't handle auto for a lambda parameter: - - ../../gdb/windows-nat.c: In member function 'void windows_nat_target::delete_thread(ptid_t, DWORD, bool)': - ../../gdb/windows-nat.c:629:12: error: use of 'auto' in lambda parameter declaration only available with -std=c++1y or -std=gnu++1y [-Werror] - [=] (auto &th) - ^ - -2022-11-28 Hannes Domani - - Fix calling convention of thread entry point - For i686 the CreateThread entry point function needs the WINAPI (stdcall) - calling convention: - - ../../gdb/windows-nat.c: In constructor 'windows_nat_target::windows_nat_target()': - ../../gdb/windows-nat.c:450:56: error: invalid user-defined conversion from 'windows_nat_target::windows_nat_target()::' to 'LPTHREAD_START_ROUTINE' {aka 'long unsigned int (__attribute__((stdcall)) *)(void*)'} [-fpermissive] - 450 | HANDLE bg_thread = CreateThread (nullptr, 64 * 1024, fn, this, 0, nullptr); - | ^~ - ../../gdb/windows-nat.c:444:13: note: candidate is: 'constexpr windows_nat_target::windows_nat_target()::::operator DWORD (*)(LPVOID)() const' (near match) - 444 | auto fn = [] (LPVOID self) -> DWORD - | ^ - ../../gdb/windows-nat.c:444:13: note: no known conversion from 'DWORD (*)(LPVOID)' {aka 'long unsigned int (*)(void*)'} to 'LPTHREAD_START_ROUTINE' {aka 'long unsigned int (__attribute__((stdcall)) *)(void*)'} - - Since it's not possible to change the calling convention of a lambda, I've - moved it to a separate function. - -2022-11-28 Andrew Burgess - - gdb: mark disassembler function callback types as noexcept - In disasm.h we define a set of types that are used by the various - disassembler classes to hold callback functions before passing the - callbacks into libopcodes. - - Because libopcodes is C code, and on some (many?) targets, C code is - compiled without exception support, it is important that GDB not try - to throw an exception over libopcode code. - - In the previous commit all the existing callbacks were marked as - noexcept, however, this doesn't protect us from a future change to GDB - either adding a new callback that is not noexcept, or removing the - noexcept keyword from an existing callback. - - In this commit I mark all the callback types as noexcept. This means - that GDB's disassembler classes will no longer compile if we try to - pass a callback that is not marked as noexcept. - - At least, that's the idea. Unfortunately, it's not that easy. - - Before C++17, the noexcept keyword on a function typedef would be - ignored, thus: - - using func_type = void (*) (void) noexcept; - - void - a_func () - { - throw 123; - } - - void - some_func (func_type f) - { - f (); - } - - int - main () - { - some_func (a_func); - return 0; - } - - Will compile just fine for C++11 and C++14 with GCC. Clang on the - other hand complains that 'noexcept' should not appear on function - types, but then does appear to correctly complain that passing a_func - is a mismatch in the set of exceptions that could be thrown. - - Switching to C++17 and both GCC and Clang correctly point out that - passing a_func is an invalid conversion relating to the noexcept - keyword. Changing a_func to: - - void - a_func () noexcept - { /* Nothing. */ } - - And for C++17 both GCC and Clang compile this just fine. - - My conclusion then is that adding the noexcept keyword to the function - types is pointless while GDB is not compiled as C++17, and silencing - the warnings would require us to jump through a bunch of hoops. - - And so, in this commit, I define a macro LIBOPCODE_CALLBACK_NOEXCEPT, - this macro expands to noexcept when compiling for C++17, but otherwise - expands to nothing. I then add this macro to the function types. - - I've compiled GDB as the default C++11 and also forced the compile to - C++17. When compiling as C++17 I spotted a few additional places - where callbacks needed to be marked noexcept (these fixes were merged - into the previous commit, but this confirmed to be that the macro is - working as expected). - -2022-11-28 Andrew Burgess - - gdb/disasm: mark functions passed to the disassembler noexcept - While working on another patch, Simon pointed out that GDB could be - improved by marking the functions passed to the disassembler as - noexcept. - - https://sourceware.org/pipermail/gdb-patches/2022-October/193084.html - - The reason this is important is the on some hosts, libopcodes, being C - code, will not be compiled with support for handling exceptions. As - such, an attempt to throw an exception over libopcodes code will cause - GDB to terminate. - - See bug gdb/29712 for an example of when this happened. - - In this commit all the functions that are passed to the disassembler, - and which might be used as callbacks by libopcodes are marked - noexcept. - - Ideally, I would have liked to change these typedefs: - - using read_memory_ftype = decltype (disassemble_info::read_memory_func); - using memory_error_ftype = decltype (disassemble_info::memory_error_func); - using print_address_ftype = decltype (disassemble_info::print_address_func); - using fprintf_ftype = decltype (disassemble_info::fprintf_func); - using fprintf_styled_ftype = decltype (disassemble_info::fprintf_styled_func); - - which are declared in disasm.h, as including the noexcept keyword. - However, when I tried this, I ran into this warning/error: - - In file included from ../../src/gdb/disasm.c:25: - ../../src/gdb/disasm.h: In constructor ‘gdb_printing_disassembler::gdb_printing_disassembler(gdbarch*, ui_file*, gdb_disassemble_info::read_memory_ftype, gdb_disassemble_info::memory_error_ftype, gdb_disassemble_info::print_address_ftype)’: - ../../src/gdb/disasm.h:116:3: error: mangled name for ‘gdb_printing_disassembler::gdb_printing_disassembler(gdbarch*, ui_file*, gdb_disassemble_info::read_memory_ftype, gdb_disassemble_info::memory_error_ftype, gdb_disassemble_info::print_address_ftype)’ will change in C++17 because the exception specification is part of a function type [-Werror=noexcept-type] - 116 | gdb_printing_disassembler (struct gdbarch *gdbarch, - | ^~~~~~~~~~~~~~~~~~~~~~~~~ - - So I've left that change out. This does mean that if somebody adds a - new use of the disassembler classes in the future, and forgets to mark - the callbacks as noexcept, this will compile fine. We'll just have to - manually check for that during review. - -2022-11-28 Andrew Burgess - - gdb/python: avoid throwing an exception over libopcodes code - Bug gdb/29712 identifies a problem with the Python disassembler API. - In some cases GDB will try to throw an exception through the - libopcodes disassembler code, however, not all targets include - exception unwind information when compiling C code, for targets that - don't include this information GDB will terminate when trying to pass - the exception through libopcodes. - - To explain what GDB is trying to do, consider the following trivial - use of the Python disassembler API: - - class ExampleDisassembler(gdb.disassembler.Disassembler): - - class MyInfo(gdb.disassembler.DisassembleInfo): - def __init__(self, info): - super().__init__(info) - - def read_memory(self, length, offset): - return super().read_memory(length, offset) - - def __init__(self): - super().__init__("ExampleDisassembler") - - def __call__(self, info): - info = self.MyInfo(info) - return gdb.disassembler.builtin_disassemble(info) - - This disassembler doesn't add any value, it defers back to GDB to do - all the actual work, but it serves to allow us to discuss the problem. - - The problem occurs when a Python exception is raised by the - MyInfo.read_memory method. The MyInfo.read_memory method is called - from the C++ function gdbpy_disassembler::read_memory_func. The C++ - stack at the point this function is called looks like this: - - #0 gdbpy_disassembler::read_memory_func (memaddr=4198805, buff=0x7fff9ab9d2a8 "\220ӹ\232\377\177", len=1, info=0x7fff9ab9d558) at ../../src/gdb/python/py-disasm.c:510 - #1 0x000000000104ba06 in fetch_data (info=0x7fff9ab9d558, addr=0x7fff9ab9d2a9 "ӹ\232\377\177") at ../../src/opcodes/i386-dis.c:305 - #2 0x000000000104badb in ckprefix (ins=0x7fff9ab9d100) at ../../src/opcodes/i386-dis.c:8571 - #3 0x000000000104e28e in print_insn (pc=4198805, info=0x7fff9ab9d558, intel_syntax=-1) at ../../src/opcodes/i386-dis.c:9548 - #4 0x000000000104f4d4 in print_insn_i386 (pc=4198805, info=0x7fff9ab9d558) at ../../src/opcodes/i386-dis.c:9949 - #5 0x00000000004fa7ea in default_print_insn (memaddr=4198805, info=0x7fff9ab9d558) at ../../src/gdb/arch-utils.c:1033 - #6 0x000000000094fe5e in i386_print_insn (pc=4198805, info=0x7fff9ab9d558) at ../../src/gdb/i386-tdep.c:4072 - #7 0x0000000000503d49 in gdbarch_print_insn (gdbarch=0x5335560, vma=4198805, info=0x7fff9ab9d558) at ../../src/gdb/gdbarch.c:3351 - #8 0x0000000000bcc8c6 in disasmpy_builtin_disassemble (self=0x7f2ab07f54d0, args=0x7f2ab0789790, kw=0x0) at ../../src/gdb/python/py-disasm.c:324 - - ### ... snip lots of frames as we pass through Python itself ... - - #22 0x0000000000bcd860 in gdbpy_print_insn (gdbarch=0x5335560, memaddr=0x401195, info=0x7fff9ab9e3c8) at ../../src/gdb/python/py-disasm.c:783 - #23 0x00000000008995a5 in ext_lang_print_insn (gdbarch=0x5335560, address=0x401195, info=0x7fff9ab9e3c8) at ../../src/gdb/extension.c:939 - #24 0x0000000000741aaa in gdb_print_insn_1 (gdbarch=0x5335560, vma=0x401195, info=0x7fff9ab9e3c8) at ../../src/gdb/disasm.c:1078 - #25 0x0000000000741bab in gdb_disassembler::print_insn (this=0x7fff9ab9e3c0, memaddr=0x401195, branch_delay_insns=0x0) at ../../src/gdb/disasm.c:1101 - - So gdbpy_disassembler::read_memory_func is called from the libopcodes - disassembler to read memory, this C++ function then calls into user - supplied Python code to do the work. - - If the user supplied Python code raises an gdb.MemoryError exception - indicating the memory read failed, this is fine. The C++ code - converts this exception back into a return value that libopcodes can - understand, and returns to libopcodes. - - However, if the user supplied Python code raises some other exception, - what we want is for this exception to propagate through GDB and appear - as if raised by the call to gdb.disassembler.builtin_disassemble. To - achieve this, when gdbpy_disassembler::read_memory_func spots an - unknown Python exception, we must pass the information about this - exception from frame #0 to frame #8 in the above backtrace. Frame #8 - is the C++ implementation of gdb.disassembler.builtin_disassemble, and - so it is this function that we want to re-raise the unknown Python - exception, so the user can, if they want, catch the exception in their - code. - - The previous mechanism by which the exception was passed was to pack - the details of the Python exception into a C++ exception, then throw - the exception from frame #0, and catch the exception in frame #8, - unpack the details of the Python exception, and re-raise it. - - However, this relies on the exception passing through frames #1 to #7, - some of which are in libopcodes, which is C code, and so, might not be - compiled with exception support. - - This commit proposes an alternative solution that does not rely on - throwing a C++ exception. - - When we spot an unhandled Python exception in frame #0, we will store - the details of this exception within the gdbpy_disassembler object - currently in use. Then we return to libopcodes a value indicating - that the memory_read failed. - - libopcodes will now continue to disassemble as though that memory read - failed (with one special case described below), then, when we - eventually return to disasmpy_builtin_disassemble we check to see if - there is an exception stored in the gdbpy_disassembler object. If - there is then this exception can immediately be installed, and then we - return back to Python, when the user will be able to catch the - exception. - - There is one extra change in gdbpy_disassembler::read_memory_func. - After the first call that results in an exception being stored on the - gdbpy_disassembler object, any future calls to the ::read_memory_func - function will immediately return as if the read failed. This avoids - any additional calls into user supplied Python code. - - My thinking here is that should the first call fail with some unknown - error, GDB should not keep trying with any additional calls. This - maintains the illusion that the exception raised from - MyInfo.read_memory is immediately raised by - gdb.disassembler.builtin_disassemble. I have no tests for this change - though - to trigger this issue would rely on a libopcodes disassembler - that will try to read further memory even after the first failed - read. I'm not aware of any such disassembler that currently does - this, but that doesn't mean such a disassembler couldn't exist in the - future. - - With this change in place the gdb.python/py-disasm.exp test should now - pass on AArch64. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29712 - - Approved-By: Simon Marchi - -2022-11-28 Tom Tromey - - Remove reset_ecs and execution_control_state::reset - I noticed that execution_control_state has a 'reset' method, and - there's also a 'reset_ecs' function that calls it. This patch cleans - this area up a little by adding a parameter to the constructor and (a - change Simon suggested) removing the reset method. Some extraneous - variables are also removed, like: - - - struct execution_control_state ecss; - - struct execution_control_state *ecs = &ecss; - - Here 'ecs' is never changed, so this patch removes it entirely in - favor of just using the object everywhere. - - Regression tested on x86-64 Fedora 34. - - Approved-By: Simon Marchi - -2022-11-28 Andrew Burgess - - gdb: relax requirement for the map_failed stap probe to be present - From glibc 2.35 and later, the "map_failed" stap probe is no longer - included in glibc. The removal of the probe looks like an accident, - but it was caused by a glibc commit which meant that the "map_failed" - probe could no longer be reached; the compiler then helpfully - optimised out the probe. - - In GDB, in solib-svr4.c, we have a list of probes that we look for - related to the shared library loading detection. If any of these - probes are missing then GDB will fall back to the non-probe based - mechanism for detecting shared library loading. The "map_failed" - probe is include in the list of required probes. - - This means that on glibc 2.35 (or later) systems, GDB is going to - always fall back to the non-probes based mechanism for detecting - shared library loading. - - I raised a glibc bug to discuss this issue: - - https://sourceware.org/bugzilla/show_bug.cgi?id=29818 - - But, whatever the ultimate decision from the glibc team, given there - are version of glibc in the wild without the "map_failed" probe, we - probably should update GDB to handle this situation. - - The "map_failed" probe is already a little strange, very early - versions of glibc didn't include this probe, so, in some cases, if - this probe is missing GDB is happy to ignore it. This is fine, the - action associated with this probe inside GDB is DO_NOTHING, this means - the probe isn't actually required in order for GDB to correctly detect - the loading of shared libraries. - - In this commit I propose changing the rules so that any probe whose - action is DO_NOTHING, is optional. - - There is one possible downside to this change, and that concerns 'set - stop-on-solib-events on'. If a probe is removed from glibc, but the - old style breakpoint based mechanism is still in place within glibc - for that same event, then GDB will stop when using the old style - non-probe based mechanism, but not when using the probes based - mechanism. - - For the map_failed case this is not a problem, both the map_failed - probe, and the call to the old style breakpoint location were - optimised out, and so neither event (probes based, or breakpoint - based) will trigger. This would only become an issue if glibc removed - a probe, but left the breakpoint in place (this would almost certainly - be a bug in glibc). - - For now, I'm proposing that we just don't worry about this. Because - some probes have actions that are not DO_NOTHING, then we know the - user will always seem _some_ stops when a shared library is - loaded/unloaded, and (I'm guessing), in most cases, that's all they - care about. I figure when someone complains then we can figure out - what the right solution is then. - - With this commit in place, then, when using a glibc 2.35 or later - system, GDB will once again use the stap probes for shared library - detection. - - Reviewed-By: Lancelot SIX - -2022-11-28 Tom de Vries - - [gdb/testsuite] Require hw watchpoint in gdb.ada/task_watch.exp - On powerpc64le-linux I run into: - ... - (gdb) PASS: gdb.ada/task_watch.exp: info tasks before inserting breakpoint - watch -location value task 3^M - Watchpoint 2: -location value^M - (gdb) PASS: gdb.ada/task_watch.exp: watch -location value task 3 - continue^M - Continuing.^M - [Thread 0x7ffff7ccf170 (LWP 65550) exited]^M - [Thread 0x7ffff7abf170 (LWP 65551) exited]^M - FAIL: gdb.ada/task_watch.exp: continue to watchpoint (timeout) - ... - - On x86_64-linux (where the test-case passes), a hardware watchpoint is used: - ... - (gdb) PASS: gdb.ada/task_watch.exp: info tasks before inserting breakpoint - watch -location value task 3^M - Hardware watchpoint 2: -location value^M - ... - and after forcing "set can-use-hw-watchpoints 0" we can intermittently - reproduce the same failure. - - In the gdb documentation related to watchpoints in multi-threaded programs, we - read: - ... - Warning: In multi-threaded programs, software watchpoints have only limited - usefulness. If GDB creates a software watchpoint, it can only watch the value - of an expression in a single thread. If you are confident that the expression - can only change due to the current thread’s activity (and if you are also - confident that no other thread can become current), then you can use software - watchpoints as usual. However, GDB may not notice when a non-current thread’s - activity changes the expression. (Hardware watchpoints, in contrast, watch an - expression in all threads.) - ... - - Since the ada task construct is mapped onto threads, it seems that the - same limitation holds for tasks. - - Fix this by using skip_hw_watchpoint_tests. - - Tested on powerpc64-linux. - Tested-By: Carl Love - -2022-11-28 Tom de Vries - - [gdb/testsuite] Fix gdb.ada/out_of_line_in_inlined.exp for ppc64le - On powerpc64le-linux, with test-case gdb.ada/out_of_line_in_inlined.exp I run - into: - ... - (gdb) run ^M - Starting program: foo_o224_021-all ^M - ^M - Breakpoint 1, 0x0000000010002f48 in foo_o224_021.child1.child2 (s=...) at \ - foo_o224_021.adb:24^M - 24 function Child2 (S : String) return Boolean is -- STOP^M - (gdb) FAIL: gdb.ada/out_of_line_in_inlined.exp: scenario=all: \ - run to foo_o224_021.child1.child2 - ... - - The breakpoint is correctly set at the local entry point, and given that the - local entry point doesn't correspond to a line number entry, the instruction - address of the breakpoint is shown. - - The problem is that test-case doesn't expect the breakpoint address. - - Fix this by allowing the breakpoint address to occur. - - Tested on powerpc64le-linux. - -2022-11-28 Michael Matz - - Only use wild_sort_fast - there's no reason why the tree-based variant can't always be used - when sorting is required, it merely needs to also support filename - sorting and have a fast path for insertion at end (aka rightmost tree - leaf). - - The filename sorting isn't tested anywhere and the only scripttempl - that uses it is avr (for 'SORT(*)(.ctors)'), and I believe even there it - was a mistake. Either way, this adds a testcase for filename sorting as - well. - - Then the non-BST based sorting can be simplified to only support - the fast case of no sorting required at all (at the same time renaming - the two variants to _sort and _nosort). - -2022-11-28 Michael Matz - - Special case more simple patterns - fnmatch is slow, so avoiding it in more cases is good. This implements - a more generic version of match_simple_wild which needs some - pre-processing of patterns. In particular it supports patterns of the - form PREFIX*SUFFIX (where all parts are optional), i.e. a super set of - what's handled now. Most section matchers of this form and hence don't - need any calls to fnmatch anymore. - - We retain the implementation of match_simple_wild for the filename - matchers (they aren't called often enough to matter). - -2022-11-28 Simon Marchi - - gdb/testsuite: fail if gdb_start_cmd fails - I broke gdb.ada/start.exp, and did not notice it, because it outputs an - UNTESTED if gdb_start_cmd fails. I don't really see when start would - fail and it's not a problem that should be looked at. Change all spots - that call untested after a gdb_start_cmd failure, use fail instead. - - Doing so caused some failures with the native-gdbserver board. Some - tests that use "start" were relying on the fact that start would fail - with that board to just return with "untested". Change them to add an - early return if use_gdb_stub returns true. - - Some gdb.pascal tests also failed with native-gdbserver, because they - did use gdb_start_cmd to start the inferior, for no good reason. - Convert them to use runto_main instead, which does the right thing if - the target is a stub. - - A further refactoring could be to make gdb_start_cmd match the expected - breakpoint hit and the prompt, which it doesn't do currently (it leaves - that to the callers, but not all of them do). - - Change-Id: I097370851213e798ff29fb6cf8ba25ef7d2be007 - Reviewed-By: Bruno Larsen - Approved-By: Andrew Burgess - -2022-11-28 Tom Tromey - - Fix range type signed-ness heuristic - The code to create a range type has a heuristic to decide whether the - range is unsigned. However, this heuristic can fail if the upper - bound of the range has its high bit set, because the test is done - using LONGEST. - - With this patch, if the underlying type of a range is unsigned, then - the range will always be unsigned. A new test is included. - - Regression tested on x86-64 Fedora 34. We've also been using this - internally at AdaCore for a while. - -2022-11-28 Simon Marchi - - gdb: disable commit resumed in target_kill - New in this version: - - - Better comment in target_kill - - Uncomment line in test to avoid hanging when exiting, when testing on - native-extended-gdbserver - - PR 28275 shows that doing a sequence of: - - - Run inferior in background (run &) - - kill that inferior - - Run again - - We get into this assertion: - - /home/smarchi/src/binutils-gdb/gdb/target.c:2590: internal-error: target_wait: Assertion `!proc_target->commit_resumed_state' failed. - - #0 internal_error_loc (file=0x5606b344e740 "/home/smarchi/src/binutils-gdb/gdb/target.c", line=2590, fmt=0x5606b344d6a0 "%s: Assertion `%s' failed.") at /home/smarchi/src/binutils-gdb/gdbsupport/errors.cc:54 - #1 0x00005606b6296475 in target_wait (ptid=..., status=0x7fffb9390630, options=...) at /home/smarchi/src/binutils-gdb/gdb/target.c:2590 - #2 0x00005606b5767a98 in startup_inferior (proc_target=0x5606bfccb2a0 , pid=3884857, ntraps=1, last_waitstatus=0x0, last_ptid=0x0) at /home/smarchi/src/binutils-gdb/gdb/nat/fork-inferior.c:482 - #3 0x00005606b4e6c9c5 in gdb_startup_inferior (pid=3884857, num_traps=1) at /home/smarchi/src/binutils-gdb/gdb/fork-child.c:132 - #4 0x00005606b50f14a5 in inf_ptrace_target::create_inferior (this=0x5606bfccb2a0 , exec_file=0x604000039f50 "/home/smarchi/build/binutils-gdb/gdb/test", allargs="", env=0x61500000a580, from_tty=1) - at /home/smarchi/src/binutils-gdb/gdb/inf-ptrace.c:105 - #5 0x00005606b53b6d23 in linux_nat_target::create_inferior (this=0x5606bfccb2a0 , exec_file=0x604000039f50 "/home/smarchi/build/binutils-gdb/gdb/test", allargs="", env=0x61500000a580, from_tty=1) - at /home/smarchi/src/binutils-gdb/gdb/linux-nat.c:978 - #6 0x00005606b512b79b in run_command_1 (args=0x0, from_tty=1, run_how=RUN_NORMAL) at /home/smarchi/src/binutils-gdb/gdb/infcmd.c:468 - #7 0x00005606b512c236 in run_command (args=0x0, from_tty=1) at /home/smarchi/src/binutils-gdb/gdb/infcmd.c:526 - - When running the kill command, commit_resumed_state for the - process_stratum_target (linux-nat, here) is true. After the kill, when - there are no more threads, commit_resumed_state is still true, as - nothing touches this flag during the kill operation. During the - subsequent run command, run_command_1 does: - - scoped_disable_commit_resumed disable_commit_resumed ("running"); - - We would think that this would clear the commit_resumed_state flag of - our native target, but that's not the case, because - scoped_disable_commit_resumed iterates on non-exited inferiors in order - to find active process targets. And after the kill, the inferior is - exited, and the native target was unpushed from it anyway. So - scoped_disable_commit_resumed doesn't touch the commit_resumed_state - flag of the native target, it stays true. When reaching target_wait, in - startup_inferior (to consume the initial expect stop events while the - inferior is starting up and working its way through the shell), - commit_resumed_state is true, breaking the contract saying that - commit_resumed_state is always false when calling the targets' wait - method. - - (note: to be correct, I think that startup_inferior should toggle - commit_resumed between the target_wait and target_resume calls, but I'll - ignore that for now) - - I can see multiple ways to fix this. In the end, we need - commit_resumed_state to be cleared by the time we get to that - target_wait. It could be done at the end of the kill command, or at the - beginning of the run command. - - To keep things in a coherent state, I'd like to make it so that after - the kill command, when the target is left with no threads, its - commit_resumed_state flag is left to false. This way, we can keep - working with the assumption that a target with no threads (and therefore - no running threads) has commit_resumed_state == false. - - Do this by adding a scoped_disable_commit_resumed in target_kill. It - clears the target's commit_resumed_state on entry, and leaves it false - if the target does not have any resumed thread on exit. That means, - even if the target has another inferior with stopped threads, - commit_resumed_state will be left to false, which makes sense. - - Add a test that tries to cover various combinations of actions done - while an inferior is running (and therefore while commit_resumed_state - is true on the process target). - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28275 - Change-Id: I8e6fe6dc1f475055921520e58cab68024039a1e9 - Approved-By: Andrew Burgess - -2022-11-28 Simon Marchi - - gdbserver: switch to right process in find_one_thread - New in this version: add a dedicated test. - - When I do this: - - $ ./gdb -nx --data-directory=data-directory -q \ - /bin/sleep \ - -ex "maint set target-non-stop on" \ - -ex "tar ext :1234" \ - -ex "set remote exec-file /bin/sleep" \ - -ex "run 1231 &" \ - -ex add-inferior \ - -ex "inferior 2" - Reading symbols from /bin/sleep... - (No debugging symbols found in /bin/sleep) - Remote debugging using :1234 - Starting program: /bin/sleep 1231 - Reading /lib64/ld-linux-x86-64.so.2 from remote target... - warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead. - Reading /lib64/ld-linux-x86-64.so.2 from remote target... - Reading /usr/lib/debug/.build-id/a6/7a1408f18db3576757eea210d07ba3fc560dff.debug from remote target... - [New inferior 2] - Added inferior 2 on connection 1 (extended-remote :1234) - [Switching to inferior 2 [] ()] - (gdb) Reading /lib/x86_64-linux-gnu/libc.so.6 from remote target... - attach 3659848 - Attaching to process 3659848 - /home/smarchi/src/binutils-gdb/gdb/thread.c:85: internal-error: inferior_thread: Assertion `current_thread_ != nullptr' failed. - - Note the "attach" command just above. When doing it on the command-line - with a -ex switch, the bug doesn't trigger. - - The internal error of GDB is actually caused by GDBserver crashing, and - the error recovery of GDB is not on point. This patch aims to fix just - the GDBserver crash, not the GDB problem. - - GDBserver crashes with a segfault here: - - (gdb) bt - #0 0x00005555557fb3f4 in find_one_thread (ptid=...) at /home/smarchi/src/binutils-gdb/gdbserver/thread-db.cc:177 - #1 0x00005555557fd5cf in thread_db_thread_handle (ptid=, handle=0x7fffffffc400, handle_len=0x7fffffffc3f0) - at /home/smarchi/src/binutils-gdb/gdbserver/thread-db.cc:461 - #2 0x000055555578a0b6 in linux_process_target::thread_handle (this=0x5555558a64c0 , ptid=, handle=0x7fffffffc400, - handle_len=0x7fffffffc3f0) at /home/smarchi/src/binutils-gdb/gdbserver/linux-low.cc:6905 - #3 0x00005555556dfcc6 in handle_qxfer_threads_worker (thread=0x60b000000510, buffer=0x7fffffffc8a0) at /home/smarchi/src/binutils-gdb/gdbserver/server.cc:1645 - #4 0x00005555556e00e6 in operator() (__closure=0x7fffffffc5e0, thread=0x60b000000510) at /home/smarchi/src/binutils-gdb/gdbserver/server.cc:1696 - #5 0x00005555556f54be in for_each_thread >(struct {...}) (func=...) at /home/smarchi/src/binutils-gdb/gdbserver/gdbthread.h:159 - #6 0x00005555556e0242 in handle_qxfer_threads_proper (buffer=0x7fffffffc8a0) at /home/smarchi/src/binutils-gdb/gdbserver/server.cc:1694 - #7 0x00005555556e04ba in handle_qxfer_threads (annex=0x629000000213 "", readbuf=0x621000019100 '\276' ..., writebuf=0x0, offset=0, len=4097) - at /home/smarchi/src/binutils-gdb/gdbserver/server.cc:1732 - #8 0x00005555556e1989 in handle_qxfer (own_buf=0x629000000200 "qXfer:threads", packet_len=26, new_packet_len_p=0x7fffffffd630) at /home/smarchi/src/binutils-gdb/gdbserver/server.cc:2045 - #9 0x00005555556e720a in handle_query (own_buf=0x629000000200 "qXfer:threads", packet_len=26, new_packet_len_p=0x7fffffffd630) at /home/smarchi/src/binutils-gdb/gdbserver/server.cc:2685 - #10 0x00005555556f1a01 in process_serial_event () at /home/smarchi/src/binutils-gdb/gdbserver/server.cc:4176 - #11 0x00005555556f4457 in handle_serial_event (err=0, client_data=0x0) at /home/smarchi/src/binutils-gdb/gdbserver/server.cc:4514 - #12 0x0000555555820f56 in handle_file_event (file_ptr=0x607000000250, ready_mask=1) at /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:573 - #13 0x0000555555821895 in gdb_wait_for_event (block=1) at /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:694 - #14 0x000055555581f533 in gdb_do_one_event (mstimeout=-1) at /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:264 - #15 0x00005555556ec9fb in start_event_loop () at /home/smarchi/src/binutils-gdb/gdbserver/server.cc:3512 - #16 0x00005555556f0769 in captured_main (argc=4, argv=0x7fffffffe0d8) at /home/smarchi/src/binutils-gdb/gdbserver/server.cc:3992 - #17 0x00005555556f0e3f in main (argc=4, argv=0x7fffffffe0d8) at /home/smarchi/src/binutils-gdb/gdbserver/server.cc:4078 - - The reason is a wrong current process when find_one_thread is called. - The current process is the 2nd one, which was just attached. It does - not yet have thread_db data (proc->priv->thread_db is nullptr). As we - iterate on all threads of all process to fulfull the qxfer:threads:read - request, we get to a thread of process 1 for which we haven't read - thread_db information yet (lwp_info::thread_known is false), so we get - into find_one_thread. find_one_thread uses - `current_process ()->priv->thread_db`, assuming the current process - matches the ptid passed as a parameter, which is wrong. A segfault - happens when trying to dereference that thread_db pointer. - - Fix this by making find_one_thread not assume what the current process / - current thread is. If it needs to call into libthread_db, which we know - will try to read memory from the current process, then temporarily set - the current process. - - In the case where the thread is already know and we return early, we - don't need to switch process. - - Add a test to reproduce this specific situation. - - Change-Id: I09b00883e8b73b7e5f89d0f47cb4e9c0f3d6caaa - Approved-By: Andrew Burgess - -2022-11-28 Tom Tromey - - Fix crash in "document" command - PR cli/29800 points out that "document" will now crash when the - argument is an undefined command. This is a regression due to the - "document user-defined aliases" patch. - - Approved-By: Joel Brobecker - Reviewed-By: Philippe Waroquiers - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29800 - -2022-11-28 Tom de Vries - - [gdb/testsuite] Fix gdb.opt/solib-intra-step.exp for powerpc64le - On powerpc64le-linux, I run into: - ... - (gdb) PASS: gdb.opt/solib-intra-step.exp: first-hit - step^M - 28 { /* first-retry */^M - (gdb) FAIL: gdb.opt/solib-intra-step.exp: second-hit - ... - - It's a bit easier to understand what happens if we do a full stepping session: - ... - Temporary breakpoint 1, main () - at solib-intra-step-main.c:23 - 23 shlib_first (); - (gdb) step - shlib_first () at solib-intra-step-lib.c:29 - 29 shlib_second (0); /* first-hit */ - (gdb) step - 28 { /* first-retry */ - (gdb) step - 29 shlib_second (0); /* first-hit */ - (gdb) step - shlib_second (dummy=0) - at solib-intra-step-lib.c:23 - 23 abort (); /* second-hit */ - ... - and compare that to the line info: - ... - CU: solib-intra-step-lib.c: - File name Line number Starting address View Stmt - solib-intra-step-lib.c 22 0x710 x - solib-intra-step-lib.c 23 0x724 x - solib-intra-step-lib.c 28 0x740 x - solib-intra-step-lib.c 29 0x74c x - solib-intra-step-lib.c 28 0x750 x - solib-intra-step-lib.c 29 0x758 x - solib-intra-step-lib.c 30 0x760 x - solib-intra-step-lib.c - 0x77c - ... - - So we step from line 29 to line 28, and back to line 29, which is behaviour - that matches the line table. The peculiar order is due to using optimization. - The problem is that the test-case doesn't expect this order. - - Fix this by allowing this order in the test-case. - - Tested on powerpc64le-linux. - - PR testsuite/29792 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29792 - -2022-11-28 Andrew Burgess - - gdb: fix assert when quitting GDB while a thread is stepping - This commit addresses one of the issues identified in PR gdb/28275. - - Bug gdb/28275 identifies a number of situations in which this assert: - - Assertion `!proc_target->commit_resumed_state' failed. - - could be triggered. There's actually a number of similar places where - this assert is found in GDB, the two of interest in gdb/28275 are in - target_wait and target_stop. - - In one of the comments: - - https://sourceware.org/bugzilla/show_bug.cgi?id=28275#c1 - - steps to trigger the assertion within target_stop were identified when - using a modified version of the gdb.threads/detach-step-over.exp test - script. - - In the gdb.threads/detach-step-over.exp test, we attach to a - multi-threaded inferior, and continue the inferior in asynchronous - (background) mode. Each thread is continuously hitting a conditional - breakpoint where the condition is always false. While the inferior is - running we detach. The goal is that we detach while GDB is performing a - step-over for the conditional breakpoint in at least one thread. - - While detaching, if a step-over is in progress, then GDB has to - complete the step over before we can detach. This involves calling - target_stop and target_wait (see prepare_for_detach). - - As far as gdb/28275 is concerned, the interesting part here, is the - the process_stratum_target::commit_resumed_state variable must be - false when target_stop and target_wait are called. - - This is currently ensured because, in detach_command (infrun.c), we - create an instance of scoped_disable_commit_resumed, this ensures that - when target_detach is called, ::commit_resumed_state will be false. - - The modification to the test that I propose here, and which exposed - the bug, is that, instead of using "detach" to detach from the - inferior, we instead use "quit". Quitting GDB after attaching to an - inferior will cause GDB to first detach, and then exit. - - When we quit GDB we end up calling target_detach via a different code - path, the stack looks like: - - #0 target_detach - #1 kill_or_detach - #2 quit_force - #3 quit_command - - Along this path there is no scoped_disable_commit_resumed created. - ::commit_resumed_state can be true when we reach prepare_for_detach, - which calls target_wait and target_stop, so the assertion will trigger. - - In this commit, I propose fixing this by adding the creation of a - scoped_disable_commit_resumed into target_detach. This will ensure - that ::commit_resumed_state is false when calling prepare_for_detach - from within target_detach. - - I did consider placing the scoped_disable_commit_resumed in - prepare_for_detach, however, placing it in target_detach ensures that - the target's commit_resumed_state flag is left to false if the detached - inferior was the last one for that target. It's the same rationale as - for patch "gdb: disable commit resumed in target_kill" that comes later - in this series, but for detach instead of kill. - - detach_command still includes a scoped_disable_commit_resumed too, but I - think it is still relevant to cover the resumption at the end of the - function. - - Co-Authored-By: Simon Marchi - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28275 - Change-Id: Ie128f7aba6ef0e018859275eca372e6ea738e96f - -2022-11-28 Andrew Burgess - - gdb/testsuite: refactor gdb.threads/detach-step-over.exp - Factor out some bits of gdb.threads/detach-step-over.exp to procs in - preparation to adding some new variations of the test. Rename the - existing "test" proc and make it use proc_with_prefix. - - Co-Authored-By: Simon Marchi - Change-Id: Ib4412545c81c8556029e0f7bfa9dd48d7a9f3189 - -2022-11-28 Simon Marchi - - gdb/testsuite: remove global declarations in gdb.threads/detach-step-over.exp - Before doing further changes to this file, change to use the :: notation - instead of declaring global variables with the `global` keyword. - - Change-Id: I72301fd8f4693fea61aac054ba17245a1f4442fb - Approved-By: Andrew Burgess - -2022-11-28 Tom de Vries - - [gdb/testsuite] Fix gdb.arch/altivec-regs.exp with gcc 4.8.5 - On powerpc64le-linux, using gcc 4.8.5, I run into: - ... - (gdb) PASS: gdb.arch/altivec-regs.exp: next (1) - next^M - 11 c = vec_add (a, b);^M - (gdb) PASS: gdb.arch/altivec-regs.exp: next (2) - print/x a^M - $67 = {0xfefefefe, 0xfefefefe, 0xfefefefe, 0xfefefefe}^M - (gdb) FAIL: gdb.arch/altivec-regs.exp: print vector parameter a - ... - - Looking at the disassembly and the debug info, it's clear why there's - a FAIL. - - The debug info says that the variable can be found at some stack location, but - the instructions don't seem to be writing there. - - We can work around this by marking variable a volatile. Likewise for b. - - Note that marking the variables as volatile doesn't change the location - information. - - Tested on power64le-linux. - -2022-11-28 Tom de Vries - - [gdb/tdep] Fix gdb.base/msym-bp-shl.exp for ppc64le - With test-case gdb.base/msym-bp-shl.exp on powerpc64le-linux, I run into: - ... - (gdb) PASS: gdb.base/msym-bp-shl.exp: debug=0: before run: break foo - info breakpoint^M - Num Type Disp Enb Address What^M - 1 breakpoint keep y ^M - 1.1 y 0x00000000000008d4 ^M - 1.2 y 0x0000000000000a34 crti.S:88^M - (gdb) FAIL: gdb.base/msym-bp-shl.exp: debug=0: before run: info breakpoint - ... - - The problem is that the prologue skipper walks from foo@plt at 0xa28 to 0xa34: - ... - 0000000000000a28 : - a28: c0 ff ff 4b b 9e8 <__glink_PLTresolve> - - Disassembly of section .fini: - - 0000000000000a2c <_fini>: - a2c: 02 00 4c 3c addis r2,r12,2 - a30: d4 74 42 38 addi r2,r2,29908 - a34: a6 02 08 7c mflr r0 - ... - - This is caused by ppc_elfv2_elf_make_msymbol_special which marks foo@plt as - having a local entry point, due to incorrectly accessing an asymbol struct - using a (larger) elf_symbol_type. - - Fix this by simply ignoring artificial symbols in - ppc_elfv2_elf_make_msymbol_special. - - Tested on powerpc64le. - - Approved-By: Ulrich Weigand - Reviewed-By: Carl Love - Tested-By: Carl Love - PR tdep/29814 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29814 - -2022-11-28 Alan Modra - - PR10368, ISO 8859 mentioned as 7bit encoding in strings documentation - PR 10368 - * doc/binutils.texi (strings): Delete example of 7-bit encoding. - - Use bfd_rename_section in msp430.em - * emultempl/msp430.em (add_region_prefix ): Use - bfd_rename_section. - * testsuite/ld-msp430-elf/msp430-tiny-rom.ld: Handle varian data - and bss input sections. - - asan: pef: buffer overflow - * pef.c (bfd_pef_parse_traceback_table): Correct size moved when - stripping leading dot. - - regen gas/Makefile.in - -2022-11-28 Tsukasa OI - - RISC-V: Allow merging 'H' extension - Because riscv_merge_std_ext function did not merge the 'H' extension, linked - executables lacked 'H' extension when multiple objects are merged. - - This issue is found while building OpenSBI with 'H' extension (resulting - ELF files did not contain "h1p0" in "Tag_RISCV_arch" even if *all* linked - object files contained it). - - This commit adds 'h' to standard_exts variable to merge 'H' extension. - - bfd/ChangeLog: - - * elfnn-riscv.c (riscv_merge_std_ext): Add 'H' extension merging. - -2022-11-28 Tsukasa OI - - RISC-V: Better support for long instructions (tests) - This commit tests both (assembler and disassembler) fixes of "Better support - for long instructions". - - gas/ChangeLog: - - * testsuite/gas/riscv/insn.s: Add testcases such that big number - handling is required and should be disassembled as long ".byte" - sequence with correct instruction bits. - * testsuite/gas/riscv/insn.d: Likewise. - * testsuite/gas/riscv/insn-na.d: Likewise. - * testsuite/gas/riscv/insn-dwarf.d: Likewise. - -2022-11-28 Tsukasa OI - - RISC-V: Better support for long instructions (assembler) - Commit bb996692bd96 ("RISC-V/gas: allow generating up to 176-bit - instructions with .insn") tried to start supporting long instructions but - it was insufficient. - - 1. It heavily depended on the bignum internals (radix of 2^16), - 2. It generates "value conflicts with instruction length" even if a big - number instruction encoding does not exceed its expected length and - 3. Because long opcode was handled separately (from struct riscv_cl_insn), - some information like DWARF line number correspondence was missing. - - To resolve these problems, this commit: - - 1. Handles bignum (and its encodings) precisely and - 2. Incorporates long opcode handling into regular instruction handling. - - This commit will be tested on the separate commit. - - gas/ChangeLog: - - * config/tc-riscv.c (struct riscv_cl_insn): Add long opcode field. - (create_insn) Clear long opcode marker. - (install_insn) Install longer opcode as well. - (s_riscv_insn) Likewise. - (riscv_ip_hardcode): Make big number handling stricter. Length and - the value conflicts only if the bignum size exceeds the expected - maximum length. - -2022-11-28 Tsukasa OI - - RISC-V: Better support for long instructions (disassembler) - Commit bb996692bd96 ("RISC-V/gas: allow generating up to 176-bit - instructions with .insn") tried to start supporting long instructions but - it was insufficient. - - On the disassembler, correct ".byte" output was limited to the first 64-bits - of an instruction. After that, zeroes are incorrectly printed. - - Note that, it only happens on ".byte" output (instruction part) and not on - hexdump (data) part. For example, before this commit, hexdump and ".byte" - produces different values: - - Assembly: - .insn 22, 0xfedcba98765432100123456789abcdef55aa33cc607f - objdump output example (before the fix): - 10: 607f 33cc 55aa cdef .byte 0x7f, 0x60, 0xcc, 0x33, 0xaa, 0x55, 0xef, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - 18: 89ab 4567 0123 3210 - 20: 7654 ba98 fedc - - Note that, after 0xcd (after first 64-bits of the target instruction), all - ".byte" values are incorrectly printed as zero while hexdump prints correct - instruction bits. - - To resolve this, this commit adds "packet" argument to support dumping - instructions longer than 64-bits (to print correct instruction bits on - ".byte"). This commit will be tested on the separate commit. - - Assembly: - .insn 22, 0xfedcba98765432100123456789abcdef55aa33cc607f - objdump output example (after the fix): - 10: 607f 33cc 55aa cdef .byte 0x7f, 0x60, 0xcc, 0x33, 0xaa, 0x55, 0xef, 0xcd, 0xab, 0x89, 0x67, 0x45, 0x23, 0x01, 0x10, 0x32, 0x54, 0x76, 0x98, 0xba, 0xdc, 0xfe - 18: 89ab 4567 0123 3210 - 20: 7654 ba98 fedc - - opcodes/ChangeLog: - - * riscv-dis.c (riscv_disassemble_insn): Print unknown instruction - using the new argument packet. - (riscv_disassemble_data): Add unused argument packet. - (print_insn_riscv): Pass packet to the disassemble function. - -2022-11-28 GDB Administrator - - Automatic date update in version.in - -2022-11-27 Philippe Waroquiers - - Fix leak in the dwarf reader - Valgrind reports a leak in the dwarf reader (see details below). - The function dw2_get_file_names_reader is interning in the per_objfile - all the file names it finds, except the name of 'fnd file name and directory'. - Instead, it was xstrdup-ing the name. - Fix the leaks by also interning the name. - - This was validated running the tests natively, and under valgrind. - Leaks have decreased as mentionned below. - Valgrind detected no error such as double free or use after free. - - Stack trace of the leak: - ==4113266== 490,735 bytes in 17,500 blocks are definitely lost in loss record 7,061 of 7,074 - ==4113266== at 0x483979B: malloc (vg_replace_malloc.c:393) - ==4113266== by 0x25A454: xmalloc (alloc.c:57) - ==4113266== by 0x7D1E1E: xstrdup (xstrdup.c:34) - ==4113266== by 0x39D141: dw2_get_file_names_reader (read.c:2825) - ==4113266== by 0x39D141: dw2_get_file_names(dwarf2_per_cu_data*, dwarf2_per_objfile*) (read.c:2851) - ==4113266== by 0x39DD6C: dw_expand_symtabs_matching_file_matcher(dwarf2_per_objfile*, gdb::function_view) (read.c:4149) - ==4113266== by 0x3BC8B5: cooked_index_functions::expand_symtabs_matching(objfile*, gdb::function_view, lookup_name_info const*, gdb::function_view, gdb::function_view, enum_flags, domain_enum, search_domain) (read.c:18688) - ==4113266== by 0x5DD1EA: objfile::map_symtabs_matching_filename(char const*, char const*, gdb::function_view) (symfile-debug.c:207) - ==4113266== by 0x5F04CC: iterate_over_symtabs(char const*, gdb::function_view) (symtab.c:633) - ==4113266== by 0x477EE3: collect_symtabs_from_filename(char const*, program_space*) (linespec.c:3712) - ==4113266== by 0x477FC1: symtabs_from_filename(char const*, program_space*) (linespec.c:3726) - ==4113266== by 0x47A9B8: convert_explicit_location_spec_to_linespec(linespec_state*, linespec*, char const*, char const*, symbol_name_match_type, char const*, line_offset) (linespec.c:2329) - ==4113266== by 0x47E86E: convert_explicit_location_spec_to_sals (linespec.c:2388) - ==4113266== by 0x47E86E: location_spec_to_sals(linespec_parser*, location_spec const*) (linespec.c:3104) - ==4113266== by 0x47EDAC: decode_line_full(location_spec*, int, program_space*, symtab*, int, linespec_result*, char const*, char const*) (linespec.c:3149) - ... - - Without the fix, the top 10 leaks are: - ./gdb/testsuite/outputs/gdb.base/condbreak-bad/gdb.log:345:==3213924== definitely lost: 130,937 bytes in 5,409 blocks - ./gdb/testsuite/outputs/gdb.base/hbreak2/gdb.log:619:==3758919== definitely lost: 173,323 bytes in 7,204 blocks - ./gdb/testsuite/outputs/gdb.mi/mi-var-cp/gdb.log:1320:==4152873== definitely lost: 172,826 bytes in 7,207 blocks - ./gdb/testsuite/outputs/gdb.base/advance-until-multiple-locations/gdb.log:398:==2992643== definitely lost: 172,965 bytes in 7,211 blocks - ./gdb/testsuite/outputs/gdb.mi/mi-var-cmd/gdb.log:2302:==4159476== definitely lost: 173,129 bytes in 7,211 blocks - ./gdb/testsuite/outputs/gdb.cp/gdb2384/gdb.log:222:==3811851== definitely lost: 218,106 bytes in 7,761 blocks - ./gdb/testsuite/outputs/gdb.cp/mb-templates/gdb.log:310:==3787344== definitely lost: 290,311 bytes in 10,340 blocks - ./gdb/testsuite/outputs/gdb.mi/mi-var-rtti/gdb.log:2568:==4158350== definitely lost: 435,427 bytes in 15,507 blocks - ./gdb/testsuite/outputs/gdb.mi/mi-catch-cpp-exceptions/gdb.log:1704:==4119722== definitely lost: 435,405 bytes in 15,510 blocks - ./gdb/testsuite/outputs/gdb.mi/mi-vla-fortran/gdb.log:768:==4113266== definitely lost: 508,585 bytes in 18,109 blocks - - With the fix: - ./gdb/testsuite/outputs/gdb.base/fork-running-state/gdb.log:1536:==2924193== indirectly lost: 13,848 bytes in 98 blocks - ./gdb/testsuite/outputs/gdb.base/fork-running-state/gdb.log:1675:==2928777== indirectly lost: 13,848 bytes in 98 blocks - ./gdb/testsuite/outputs/gdb.python/py-inferior-leak/gdb.log:4729:==3353335== definitely lost: 3,360 bytes in 140 blocks - ./gdb/testsuite/outputs/gdb.base/kill-detach-inferiors-cmd/gdb.log:210:==2746927== indirectly lost: 13,246 bytes in 154 blocks - ./gdb/testsuite/outputs/gdb.base/inferior-clone/gdb.log:179:==3034984== indirectly lost: 12,921 bytes in 161 blocks - ./gdb/testsuite/outputs/gdb.base/interrupt-daemon/gdb.log:209:==3006248== indirectly lost: 20,683 bytes in 174 blocks - ./gdb/testsuite/outputs/gdb.threads/watchpoint-fork/gdb.log:714:==3512403== indirectly lost: 20,707 bytes in 175 blocks - ./gdb/testsuite/outputs/gdb.threads/watchpoint-fork/gdb.log:962:==3514498== indirectly lost: 20,851 bytes in 178 blocks - ./gdb/testsuite/outputs/gdb.base/multi-forks/gdb.log:336:==2585839== indirectly lost: 53,630 bytes in 386 blocks - ./gdb/testsuite/outputs/gdb.base/multi-forks/gdb.log:1338:==2592417== indirectly lost: 100,008 bytes in 1,154 blocks - - Approved-By: Simon Marchi - -2022-11-27 Philippe Waroquiers - - fix leak in gdb_environ - valgrind reports a leak when assigning a gdb_environ to another gdb_environ. - The memory allocated for the target gdb_environ env variables is not released. - The gdb_environ selftest reproduces the leak (see below). - Fix the leak by clearing the target gdb_environ before std::move-ing the - members. - - Tested natively and re-running all tests under valgrind. - - ==3261873== 4,842 bytes in 69 blocks are definitely lost in loss record 6,772 of 6,839 - ==3261873== at 0x483979B: malloc (vg_replace_malloc.c:393) - ==3261873== by 0x25A454: xmalloc (alloc.c:57) - ==3261873== by 0x7D1E4E: xstrdup (xstrdup.c:34) - ==3261873== by 0x7E2A51: gdb_environ::from_host_environ() (environ.cc:56) - ==3261873== by 0x66F1C8: test_reinit_from_host_environ (environ-selftests.c:78) - ==3261873== by 0x66F1C8: selftests::gdb_environ_tests::run_tests() (environ-selftests.c:285) - ==3261873== by 0x7EFC43: operator() (std_function.h:622) - = - - Approved-By: Simon Marchi - -2022-11-27 Philippe Waroquiers - - Use false/true for some inferior class members instead of 0/1 - Some class members were changed to bool, but there was - still some assignments or comparisons using 0/1. - - Approved-By: Simon Marchi - -2022-11-27 Tom de Vries - - [gdb/server] Emit warning for SIGINT failure - Consider the executable from test-case gdb.base/interrupt-daemon.exp. - - When starting it using gdbserver: - ... - $ ./build/gdbserver/gdbserver localhost:2345 \ - ./outputs/gdb.base/interrupt-daemon/interrupt-daemon - ... - and connecting to it using gdb: - ... - $ gdb -q -ex "target remote localhost:2345" \ - -ex "set follow-fork-mode child" \ - -ex "break daemon_main" -ex cont - ... - we are setup to do the same as in the test-case: interrupt a running inferior - using ^C. - - So let's try: - ... - (gdb) continue - Continuing. - ^C - ... - After pressing ^C, nothing happens. This a known problem, filed as - PR remote/18772. - - The problem is that in linux_process_target::request_interrupt, a kill is used - to send a SIGINT, but it fails. And it fails silently. - - Make the failure verbose by adding a warning, such that the gdbserver output - becomes more helpful: - ... - Process interrupt-daemon created; pid = 15068 - Listening on port 2345 - Remote debugging from host ::1, port 35148 - Detaching from process 15068 - Detaching from process 15085 - gdbserver: Sending SIGINT to process group of pid 15068 failed: \ - No such process - ... - - Note that the failure can easily be reproduced using the test-case and target - board native-gdbserver: - ... - (gdb) continue^M - Continuing.^M - PASS: gdb.base/interrupt-daemon.exp: fg: continue - ^CFAIL: gdb.base/interrupt-daemon.exp: fg: ctrl-c stops process (timeout) - ... - as reported in PR server/23382. - - Tested on x86_64-linux. - Approved-By: Simon Marchi - -2022-11-27 GDB Administrator - - Automatic date update in version.in - -2022-11-26 Tom de Vries - - [gdb/testsuite] Don't generate core in gdb.base/bt-on-fatal-signal.exp - When running test-case gdb.base/bt-on-fatal-signal.exp on powerpc64le-linux I - noticed: - ... - FAIL: gdb.base/bt-on-fatal-signal.exp: SEGV: scan for backtrace (timeout) - ... - - The timeout is 10 seconds, but generating the core file takes more than a - minute, probably due to slow NFS. - - I managed to reproduce this behaviour independently of gdb, by compiling - "int main (void) { __builtin_abort (); }" and running it, which took 1.5 - seconds for a core file 50 times smaller than the one for gdb. - - Fix this by preventing the core file from being generated, using a wrapper - around gdb that does "ulimit -c 0". - - Tested on x86_64-linux. - -2022-11-26 Tom de Vries - - [gdb/symtab] Handle failure to open .gnu_debugaltlink file - If we instrument cc-with-tweaks.sh to remove the .gnu_debugaltlink file after - dwz has created it, with test-case - gdb.threads/access-mem-running-thread-exit.exp and target board cc-with-dwz-m - we run into: - ... - (gdb) file access-mem-running-thread-exit^M - Reading symbols from access-mem-running-thread-exit...^M - could not find '.gnu_debugaltlink' file for access-mem-running-thread-exit^M - ... - followed a bit later by: - ... - (gdb) file access-mem-running-thread-exit^M - Reading symbols from access-mem-running-thread-exit...^M - gdb/dwarf2/read.c:7284: internal-error: create_all_units: \ - Assertion `per_objfile->per_bfd->all_units.empty ()' failed.^M - ... - - The problem is that create_units does not catch the error thrown by - dwarf2_get_dwz_file. - - Fix this by catching the error and performing the necessary cleanup, getting - the same result for the first and second file command. - - PR symtab/29805 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29805 - -2022-11-26 Philippe Waroquiers - - Fix jump on uninit producer_is_clang bit of cu.h dwarf2_cu struct. - Valgrind reports a "jump on unitialised bit error" when running - e.g. gdb.base/macro-source-path.exp (see details below). - - Fix this by initializing producer_is_clang member variable of dwarf2_cu. - - Tested on amd64/debian11 and re-running gdb.base/macro-source-path.exp - under valgrind. - - ==2140965== Conditional jump or move depends on uninitialised value(s) - ==2140965== at 0x5211F7: dwarf_decode_macro_bytes(dwarf2_per_objfile*, buildsym_compunit*, bfd*, unsigned char const*, unsigned char const*, macro_source_file*, line_header const*, dwarf2_section_info const*, int, int, unsigned int, dwarf2_section_info*, dwarf2_section_info*, gdb::optional, htab*, dwarf2_cu*) (macro.c:676) - ==2140965== by 0x52158A: dwarf_decode_macros(dwarf2_per_objfile*, buildsym_compunit*, dwarf2_section_info const*, line_header const*, unsigned int, unsigned int, dwarf2_section_info*, dwarf2_section_info*, gdb::optional, int, dwarf2_cu*) (macro.c:967) - ==2140965== by 0x523BC4: dwarf_decode_macros(dwarf2_cu*, unsigned int, int) (read.c:23379) - ==2140965== by 0x552AB5: read_file_scope(die_info*, dwarf2_cu*) (read.c:9687) - ==2140965== by 0x54F7B2: process_die(die_info*, dwarf2_cu*) (read.c:8660) - ==2140965== by 0x5569C7: process_full_comp_unit (read.c:8429) - ==2140965== by 0x5569C7: process_queue (read.c:7675) - ==2140965== by 0x5569C7: dw2_do_instantiate_symtab (read.c:2063) - ==2140965== by 0x5569C7: dw2_instantiate_symtab(dwarf2_per_cu_data*, dwarf2_per_objfile*, bool) (read.c:2085) - ==2140965== by 0x55700B: dw2_expand_symtabs_matching_one(dwarf2_per_cu_data*, dwarf2_per_objfile*, gdb::function_view, gdb::function_view) (read.c:3984) - ==2140965== by 0x557EA3: cooked_index_functions::expand_symtabs_matching(objfile*, gdb::function_view, lookup_name_info const*, gdb::function_view, gdb::function_view, enum_flags, domain_enum, search_domain) (read.c:18781) - ==2140965== by 0x778977: objfile::lookup_symbol(block_enum, char const*, domain_enum) (symfile-debug.c:276) - .... - ==2140965== Uninitialised value was created by a heap allocation - ==2140965== at 0x4839F01: operator new(unsigned long) (vg_replace_malloc.c:434) - ==2140965== by 0x533A64: cutu_reader::cutu_reader(dwarf2_per_cu_data*, dwarf2_per_objfile*, abbrev_table*, dwarf2_cu*, bool, abbrev_cache*) (read.c:6264) - ==2140965== by 0x5340C2: load_full_comp_unit(dwarf2_per_cu_data*, dwarf2_per_objfile*, dwarf2_cu*, bool, language) (read.c:7729) - ==2140965== by 0x548338: load_cu(dwarf2_per_cu_data*, dwarf2_per_objfile*, bool) (read.c:2021) - ==2140965== by 0x55634C: dw2_do_instantiate_symtab (read.c:2048) - ==2140965== by 0x55634C: dw2_instantiate_symtab(dwarf2_per_cu_data*, dwarf2_per_objfile*, bool) (read.c:2085) - ==2140965== by 0x55700B: dw2_expand_symtabs_matching_one(dwarf2_per_cu_data*, dwarf2_per_objfile*, gdb::function_view, gdb::function_view) (read.c:3984) - ==2140965== by 0x557EA3: cooked_index_functions::expand_symtabs_matching(objfile*, gdb::function_view, lookup_name_info const*, gdb::function_view, gdb::function_view, enum_flags, domain_enum, search_domain) (read.c:18781) - ==2140965== by 0x778977: objfile::lookup_symbol(block_enum, char const*, domain_enum) (symfile-debug.c:276) - .... - -2022-11-26 Philippe Waroquiers - - remove the declared but undefined/unused method find_partial_die - The method - struct partial_die_info *find_partial_die (sect_offset sect_off); - in cu.h is defined, but is used nowhere and not implemented. - -2022-11-26 GDB Administrator - - Automatic date update in version.in - -2022-11-25 Martin Liska - - Revert "readelf: Do not require EI_OSABI for IFUNC." - This reverts commit ffbbab0b3a1000f862b6d4ce3d9a76ed14f08801. - -2022-11-25 Christoph Müllner - - riscv: Add AIA extension support (Smaia, Ssaia) - This commit adds the AIA extensions (Smaia and Ssaia) CSRs. - - bfd/ChangeLog: - - * elfxx-riscv.c: Add 'smaia' and 'ssaia' to the list - of known standard extensions. - - gas/ChangeLog: - - * config/tc-riscv.c (enum riscv_csr_class): - (riscv_csr_address): Add CSR classes for Smaia/Ssaia. - * testsuite/gas/riscv/csr-dw-regnums.d: Add new CSRs. - * testsuite/gas/riscv/csr-dw-regnums.s: Likewise. - * testsuite/gas/riscv/csr-version-1p10.d: Likewise. - * testsuite/gas/riscv/csr-version-1p10.l: Likewise. - * testsuite/gas/riscv/csr-version-1p11.d: Likewise. - * testsuite/gas/riscv/csr-version-1p11.l: Likewise. - * testsuite/gas/riscv/csr-version-1p12.d: Likewise. - * testsuite/gas/riscv/csr-version-1p12.l: Likewise. - * testsuite/gas/riscv/csr-version-1p9p1.d: Likewise. - * testsuite/gas/riscv/csr-version-1p9p1.l: Likewise. - * testsuite/gas/riscv/csr.s: Likewise. - - include/ChangeLog: - - * opcode/riscv-opc.h (CSR_MISELECT): New CSR macro. - (CSR_MIREG): Likewise. - (CSR_MTOPEI): Likewise. - (CSR_MTOPI): Likewise. - (CSR_MVIEN): Likewise. - (CSR_MVIP): Likewise. - (CSR_MIDELEGH): Likewise. - (CSR_MIEH): Likewise. - (CSR_MVIENH): Likewise. - (CSR_MVIPH): Likewise. - (CSR_MIPH): Likewise. - (CSR_SISELECT): Likewise. - (CSR_SIREG): Likewise. - (CSR_STOPEI): Likewise. - (CSR_STOPI): Likewise. - (CSR_SIEH): Likewise. - (CSR_SIPH): Likewise. - (CSR_HVIEN): Likewise. - (CSR_HVICTL): Likewise. - (CSR_HVIPRIO1): Likewise. - (CSR_HVIPRIO2): Likewise. - (CSR_VSISELECT): Likewise. - (CSR_VSIREG): Likewise. - (CSR_VSTOPEI): Likewise. - (CSR_VSTOPI): Likewise. - (CSR_HIDELEGH): Likewise. - (CSR_HVIENH): Likewise. - (CSR_HVIPH): Likewise. - (CSR_HVIPRIO1H): Likewise. - (CSR_HVIPRIO2H): Likewise. - (CSR_VSIEH): Likewise. - (CSR_VSIPH): Likewise. - (DECLARE_CSR): Add CSRs for Smaia and Ssaia. - - Changes for v3: - - Imply ssaia for smaia - - Imply zicsr for ssaia (and transitively smaia) - - Move hypervisor CSRs to Ssaia+H - - Rebase on upstream/master - - Changes for v2: - - Add hypervisor and VS CSRs - - Fix whitespace issue - -2022-11-25 GDB Administrator - - Automatic date update in version.in - -2022-11-24 Indu Bhagat - - sframe/doc: remove usage of xrefautomaticsectiontitle - xrefautomaticsectiontitle appears to be available from texinfo 5.0 or - greater. As such, it is not worthwhile to add requirement for a minimum - necessary makeinfo version. So remove the usage of it. - - Also align node name with section title where possible. - - ChangeLog: - - * libsframe/doc/sframe-spec.texi: Remove usage of - xrefautomaticsectiontitle. - -2022-11-24 Andrew Burgess - - gdb: fix typo in debug output message - Spotted a minor type, a missing ')', in a debug message. - -2022-11-24 Simon Marchi - - gdb/testsuite/gdb.base/break.exp: split test_break - Move all the remaining tests to a single test_break proc. It's a bit - big, but all of these are kind of tied together. The procs starts by - setting breakpoints, checks that we can see them in "info breakpoints", - and tries stopping on them. - - Move all the "set bp_locationX" calls together at the top. - - Change-Id: Id05f98957e1a3462532d2dbd577cd0a7c7263900 - Approved-By: Kevin Buettner - -2022-11-24 Simon Marchi - - gdb/testsuite/gdb.base/break.exp: split test_tbreak - Leave setting bp_location11 in the global scope, so that it's accessible - to other procs. - - Change-Id: I8928f01640d3a1e993649b2168b9eda0724ee1d9 - Approved-By: Kevin Buettner - -2022-11-24 Simon Marchi - - gdb/testsuite/gdb.base/break.exp: split test_no_break_on_catchpoint - Change-Id: Ifa7070943f1de22c2839fedf5f346d6591bb5a76 - Approved-By: Kevin Buettner - - gdb/testsuite/gdb.base/break.exp: split test_break_nonexistent_line - Change-Id: I4390dd5da23bae83ccc513ad0de0169ddff7df12 - Approved-By: Kevin Buettner - -2022-11-24 Simon Marchi - - gdb/testsuite/gdb.base/break.exp: split test_break_default - One special thing here is that the part just above this one, that sets - catchpoints and verifies they are not hit, requires that we resume - execution to verify that the catchpoints are indeed not hit. I guess - it was previously achieved by the until command, but it doesn't happen - now that the until is moved into test_break_default. Add a - gdb_continue_to_end after setting the catchpoints. If any catchpoint - were to be hit, it would catch the problem. - - Change-Id: I5d4b43da91886b1beda9f6e56b05aa04331a9c05 - Approved-By: Kevin Buettner - -2022-11-24 Simon Marchi - - gdb/testsuite/gdb.base/break.exp: split test_break_silent_and_more - This one is a bit tricky. The clear tests seem to depend on the various - breakpoints that have been set before, starting with the "silent" - breakpoints. So, move all this in a single chunk, it can always be - split later if needed. - - Change-Id: I7ba61a5b130ade63eda0c4790534840339f8a72f - Approved-By: Kevin Buettner - -2022-11-24 Simon Marchi - - gdb/testsuite/gdb.base/break.exp: split test_break_line_convenience_var - Change-Id: I593002373da971a0a4d6b5355d3fe321873479ab - Approved-By: Kevin Buettner - - gdb/testsuite/gdb.base/break.exp: split test_break_user_call - Change-Id: I9151ce9db9435722b758f41c6606b461bf15f320 - Approved-By: Kevin Buettner - - gdb/testsuite/gdb.base/break.exp: split test_finish_arguments - Change-Id: Id84babed1eeb3ce7d14b94ff332795964e8ead51 - Approved-By: Kevin Buettner - -2022-11-24 Simon Marchi - - gdb/testsuite/gdb.base/break.exp: use proc_with_prefix for test_next_with_recursion - This one is already in a proc, just make the proc use proc_with_prefix, - for consistency. - - Change-Id: I313ecf5097ff04526c29396529baeba84e37df5a - Approved-By: Kevin Buettner - -2022-11-24 Simon Marchi - - gdb/testsuite/gdb.base/break.exp: split test_break_optimized_prologue - Change-Id: Ibf17033c8ce72aa5cfe1b739be2902e84a5e945d - Approved-By: Kevin Buettner - - gdb/testsuite/gdb.base/break.exp: split test_rbreak_shlib - Change-Id: I130e8914c2713095aab03e84aba1481b4c7af978 - Approved-By: Kevin Buettner - - gdb/testsuite/gdb.base/break.exp: split test_break_file_line_convenience_var - Change-Id: I0c31b037669b2917e062bf431372fb6531f8f53c - Approved-By: Kevin Buettner - - gdb/testsuite/gdb.base/break.exp: split test_break_commands_clear - Change-Id: Ia58f90117d52fc419fc494836d9b4ed5d902fe9b - Approved-By: Kevin Buettner - -2022-11-24 Nick Clifton - - Impport libiberty commit: 885b6660c17f from gcc mainline. Fix gas's acinclude.m4 to stop a potwntial configure time warning message. - -2022-11-24 Martin Liska - - readelf: Do not require EI_OSABI for IFUNC. - PR 29718 - - binutils/ChangeLog: - - * readelf.c (get_symbol_type): Consider STT_GNU_IFUNC as - reserved name. - -2022-11-24 Jan Beulich - - x86: widen applicability and use of CheckRegSize - First of all make operand_type_register_match() apply to all sized - operands, i.e. in Intel Syntax also to respective memory ones. This - addresses gas wrongly accepting certain SIMD insns where register and - memory operand sizes should match but don't. This apparently has - affected all templates with one memory-only operand and one or more - register ones, both permitting at least two sizes, due to CheckRegSize - not taking effect. - - Then also add CheckRegSize to a couple of non-SIMD templates matching - that same pattern of memory-only vs register operands. This replaces - bogus (for Intel Syntax) diagnostics referring to a wrong suffix (when - none was used at all) by "type mismatch" ones, just like already emitted - for insns where the template allows a register operand alongside a - memory one at any particular position. - - This also is a prereq to limiting (ideally eliminating in the long run) - suffix "derivation" in Intel Syntax mode. - - While making the code adjustment also flip order of checks to do the - cheaper one first in both cases. - -2022-11-24 Jan Beulich - - x86: add missing CheckRegSize - To properly and predictably determine operand size encoding (operand - size or REX.W prefixes), consistent operand sizes need to be specified. - Add CheckRegSize where this was previously missing. - - x86: correct handling of LAR and LSL - Both uniformly only ever take 16-bit memory operands while at the same - time requiring matching (in size) register operands, which then also - should disassemble that way. This in particular requires splitting each - of the templates for the assembler and separating decode of the - register and memory forms in the disassembler. - -2022-11-24 Alan Modra - - Tidy objdump printing of section size - * objdump.c (load_specific_debug_section): Use PRIx64 format. - - Constify nm format array - * nm.c (formats, format): Make const. - -2022-11-24 Alan Modra - - PR16995, m68k coldfire emac immediate to macsr incorrect disassembly - Mode/reg bits for these insns are 000 Dy, 001 Ay, and 111 100 for the - move immediate. - - * m68k-opc.c (m68k_opcodes): Only accept 000 and 001 as mode - for move reg to macsr/mask insns. - -2022-11-24 Mark Harmstone - - gas: Disable --gcodeview on PE targets with no O_secrel - -2022-11-24 GDB Administrator - - Automatic date update in version.in - -2022-11-23 Torbjörn SVENSSON - - gdb/arm: Include FType bit in EXC_RETURN pattern on v8m - For v8m, the EXC_RETURN pattern, without security extension, consists of - FType, Mode and SPSEL. These are the same bits that are used in v7m. - This patch extends the list of patterns to include also the FType bit - and not just Mode and SPSEL bits for v8m targets without security - extension. - -2022-11-23 Alan Modra - - regen POTFILES.in - -2022-11-23 Alan Modra - - PR22509 - Null pointer dereference on coff_slurp_reloc_table - This extends the commit 4581a1c7d304 fix to more targets, which - hardens BFD a little. I think the real underlying problem was the - bfd_canonicalize_reloc call in load_specific_debug_section which - passed a NULL for "symbols". Fix that too. - - PR 22509 - bfd/ - * aoutx.h (swap_ext_reloc_out): Gracefully handle NULL symbols. - * i386lynx.c (swap_ext_reloc_out): Likewise. - * pdp11.c (pdp11_aout_swap_reloc_out): Likewise. - * coff-tic30.c (reloc_processing): Likewise. - * coff-tic4x.c (tic4x_reloc_processing): Likewise. - * coff-tic54x.c (tic54x_reloc_processing): Likewise. - * coff-z80.c (reloc_processing): Likewise. - * coff-z8k.c (reloc_processing): Likewise. - * ecoff.c (ecoff_slurp_reloc_table): Likewise. - * som.c (som_set_reloc_info): Likewise. - binutils/ - * objdump.c (load_specific_debug_section): Pass syms to - bfd_canonicalize_reloc. - -2022-11-23 Alan Modra - - asan: NULL deref in filter_symbols - If tdata->symbols is NULL, make tdata->symcount zero too. This makes - wasm_get_symtab_upper_bound return the proper result and stops - cascading errors. - - * wasm-module.c (wasm_scan_name_function_section): Clear - tdata->symcount on error. - -2022-11-23 Luis Machado - - Document the memory_tagged argument for memory region callbacks - There were no comments in some instances (gdb/defs.h, gdb/core.c and - gdb/linux-tdep.c), so address that by adding comments where those are missing. - -2022-11-23 Tom de Vries - - Fix gdb.cp/gdb2495.exp on powerpc64le - On powerpc64le-linux I ran into this FAIL: - ... - (gdb) p exceptions.throw_function()^M - terminate called after throwing an instance of 'int'^M - ^M - Program received signal SIGABRT, Aborted.^M - 0x00007ffff7979838 in raise () from /lib64/libc.so.6^M - The program being debugged was signaled while in a function called from GDB.^M - GDB remains in the frame where the signal was received.^M - To change this behavior use "set unwindonsignal on".^M - Evaluation of the expression containing the function^M - (SimpleException::throw_function()) will be abandoned.^M - When the function is done executing, GDB will silently stop.^M - (gdb) FAIL: gdb.cp/gdb2495.exp: call a function that raises an exception \ - without a handler. - ... - - The following happens: - - we start an inferior call - - an internal breakpoint is set on the global entry point of std::terminate - - the inferior call uses the local entry point - - the breakpoint is not triggered - - we run into std::terminate - - We can fix this by simply adding the missing gdbarch_skip_entrypoint call in - create_std_terminate_master_breakpoint, but we try to do this a bit more - generic, by: - - adding a variant of function create_internal_breakpoint which takes a - minimal symbol instead of an address as argument - - in the new function: - - using both gdbarch_convert_from_func_ptr_addr and gdbarch_skip_entrypoint - - documenting why we don't need to use gdbarch_addr_bits_remove - - adding a note about possibly - needing gdbarch_deprecated_function_start_offset. - - using the new function in: - - create_std_terminate_master_breakpoint - - create_exception_master_breakpoint_hook, which currently uses only - gdbarch_convert_from_func_ptr_addr. - - Note: we could use the new function in more locations in breakpoint.c, but - as we're not aware of any related failures, we declare this out of scope for - this patch. - - Tested on x86_64-linux, powerpc64le-linux. - - Co-Authored-By: Ulrich Weigand - Tested-by: Carl Love - PR tdep/29793 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29793 - -2022-11-23 Xiao Zeng - - RISC-V: Make R_RISCV_SUB6 conforms to riscv ABI standard - According to the riscv psabi, R_RISCV_SUB6 only allows 6 least significant - bits are valid, but since binutils implementation, we usually get 8 bits - field for it. That means, the high 2 bits could be other field and have - different purpose. Therefore, we should filter the 8 bits to 6 bits before - calculate, and then only encode the valid 6 bits back. By the way, we also - need the out-of-range check for R_RISCV_SUB6, and the overflow checks for - all R_RISCV_ADD/SUB/SET relocations, but we can add them in the future patches. - - Passing riscv-gnu-toolchain regressions. - - bfd/ChangeLog: - - * elfnn-riscv.c (riscv_elf_relocate_section): Take the R_RISCV_SUB6 - lower 6 bits as the significant bit. - * elfxx-riscv.c (riscv_elf_add_sub_reloc): Likewise. - -2022-11-23 Mark Harmstone - - gas: Add --gcodeview option - - ld: Add section contributions substream to PDB files - -2022-11-23 GDB Administrator - - Automatic date update in version.in - -2022-11-22 John Baldwin - - aarch64-fbsd: Use a static regset for the TLS register set. - This uses custom collect/supply regset handlers which pass the TLS - register number from the gdbarch_tdep as the base register number. - - Approved-By: Simon Marchi - -2022-11-22 John Baldwin - - arm-fbsd: Use a static regset for the TLS register set. - This uses custom collect/supply regset handlers which pass the TLS - register number from the gdbarch_tdep as the base register number. - - Approved-By: Simon Marchi - -2022-11-22 John Baldwin - - fbsd-nat: Pass an optional register base to the register set helpers. - This is needed to permit using the helpers for register sets with a - variable base. In particular regnum needs to be converted into a - relative register number before passed to regcache_map_supplies. - - Approved-By: Simon Marchi - -2022-11-22 John Baldwin - - fbsd-nat: Use regset supply/collect methods. - fbsd-nat includes various helper routines for fetching and storing - register sets via ptrace where the register set is described by a - regset. These helper routines directly invoke the - supply/collect_regset regcache methods which doesn't permit a regset - to provide custom logic when fetching or storing a register set. - Instead, just use the function pointers from the struct regset - directly. - - Approved-By: Simon Marchi - -2022-11-22 John Baldwin - - regcache: Add collect/supply_regset variants that accept a register base. - Some register sets described by an array of regcache_map_entry - structures do not have fixed register numbers in their associated - architecture but do describe a block of registers whose numbers are at - fixed offsets relative to some base register value. An example of - this are the TLS register sets for the ARM and AArch64 architectures. - - Currently OS-specific architectures create register maps and register - sets dynamically using the register base number. However, this - requires duplicating the code to create the register map and register - set. To reduce duplication, add variants of the collect_regset and - supply_regset regcache methods which accept a base register number. - For valid register map entries (i.e. not REGCACHE_MAP_SKIP), add this - base register number to the value from the map entry to determine the - final register number. - - Approved-By: Simon Marchi - -2022-11-22 H.J. Lu - - x86: Don't define _TLS_MODULE_BASE_ for ld -r - bfd/ - - PR ld/29820 - * elfxx-x86.c (_bfd_x86_elf_always_size_sections): Don't define - _TLS_MODULE_BASE_ for ld -r. - - ld/ - - PR ld/29820 - * testsuite/ld-x86-64/pr29820.d: New file. - * testsuite/ld-x86-64/pr29820.s: Likewise. - * testsuite/ld-x86-64/x86-64.ex: Run pr29820. - -2022-11-22 Alan Modra - - Don't use "long" in readelf for file offsets - The aim here is to improve readelf handling of large 64-bit object - files on LLP64 hosts (Windows) where long is only 32 bits. The patch - changes more than just file offsets. Addresses and sizes are also - changed to avoid "long". Most places get to use uint64_t even where - size_t may be more appropriate, because that allows some overflow - checks to be implemented easily (*alloc changes). - - * dwarf.c (cmalloc, xcmalloc, xcrealloc, xcalloc2): Make nmemb - parameter uint64_t. - * dwarf.h: Update prototypes. - (struct dwarf_section): Make num_relocs uint64_t. - * elfcomm.c (setup_archive): Update error format. - * elfcomm.h (struct archive_info): Make sym_size, longnames_size, - nested_member_origin, next_arhdr_offset uint64_t. - * readelf.c (struct filedata): Make archive_file_offset, - archive_file_size, string_table_length, dynamic_addr, - dynamic_nent, dynamic_strings_length, num_dynamic_syms, - dynamic_syminfo_offset uint64_t. - (many functions): Replace uses of "unsigned long" with - "uint64_t" or "size_t". - -2022-11-22 Alan Modra - - Re: readelf: use fseeko64 or fseeko if possible - Replace the macros with a small wrapper function that verifies the fseek - offset arg isn't overlarge. - - * readelf.c (FSEEK_FUNC): Delete, replace uses with.. - (fseek64): ..this new function. - (process_program_headers): Don't cast p_offset to long. - -2022-11-22 Torbjörn SVENSSON - - gdb/arm: Fix obvious typo in b0b23e06c3a - As part of the rebase of the patch, I managed to loose the local - changes I had for the comments from Tomas in - https://sourceware.org/pipermail/gdb-patches/2022-November/193413.html - This patch corrects the obvious two typos. - -2022-11-22 Michael Matz - - binutils/configure.ac: integrate last change - Integrate back checks for fseeko{,64} into configure.ac, so - that regeneration works. - - binutils/ - * configure.ac: Add fseeko, fseeko64 checks. - * configure: Regenerate. - -2022-11-22 Shahab Vahedi - - opcodes: Correct address for ARC's "isa_config" aux reg - This patch changes the address for "isa_config" auxiliary register - from 0xC2 to the correct value 0xC1. Moreover, it only exists in - arc700+ and not all ARCs. - - opcodes/ChangeLog: - - * arc-regs.h: Change isa_config address to 0xc1. - isa_config exists for ARC700 and ARCV2 and not ARCALL. - -2022-11-22 Bruno Larsen - - gdb/testsuite: remove gcc restriction from gdb.dwarf2/clang-cli-macro.exp - With the recent changes to the dwarf assembler, there is no longer a - need to test for gcc in gdb.dwarf2/clang-cli-macro.exp and mark it as - untested. This commit removes that logic. - -2022-11-22 Jan Beulich - - gas/sframe: avoid "shadowing" of glibc function name - Once again: Old enough glibc has an (unguarded) declaration of index() - in string.h, which triggers a "shadows a global declaration" warning - with our choice of wanring level and with at least some gcc versions. - -2022-11-22 GDB Administrator - - Automatic date update in version.in - -2022-11-21 Brett Werling - - readelf: use fseeko64 or fseeko if possible - Changes readelf to make use first of fseeko64 and then fseeko, - depending on which of those is available. If neither is available, - reverts to the previous behavior of using fseek. - - This is necessary when building readelf for LLP64 systems, where a - long will only be 32 bits wide. If the elf file in question is >= 2 GiB, - that is greater than the max long value and therefore fseek will fail - indicating that the offset is negative. On such systems, making use of - fseeko64 or fseeko will result in the ability so seek past the 2 GiB - max long boundary. - - Note that large archive handling in readelf remains to be fixed. - -2022-11-21 Alan Modra - - PR29807, SIGSEGV when linking fuzzed PE object - PR 29807 - * cofflink.c (_bfd_coff_generic_relocate_section): Skip relocs - against symbols with a NULL section. - -2022-11-21 Alan Modra - - Re: ld: Always output local symbol for relocatable link - Remove this code dating back to commit 98790d3a95fc entirely, what it - was trying to do is done elsewhere. - - PR ld/29761 - * elflink.c (elf_link_output_symstrtab): Don't handle symbols - in SEC_EXCLUDE sections here. - -2022-11-21 Philippe Waroquiers - - When getting the locno of a bpstat, handle the case of bp with null locations. - The test py-objfile.exp unloads the current file while debugging the process. - This results in bpstat bs->b->loc to become nullptr. - Handle this case in breakpoint.c:bpstat_locno. - - Note: GDB crashes on this problem with an internal error, - but the end of gdb summary shows: - ... - === gdb Summary === - - # of expected passes 36 - - The output also does not contain a 'FAIL:'. - After the fix, the nr of expected passes increased. - - In the gdb.log output, one can see: - ... - Fatal signal: Segmentation fault - ----- Backtrace ----- - 0x55698905c5b9 gdb_internal_backtrace_1 - ../../binutils-gdb/gdb/bt-utils.c:122 - 0x55698905c5b9 _Z22gdb_internal_backtracev - ... - - ERROR: Couldn't send python print(objfile.filename) to GDB. - ERROR: : spawn id exp9 not open - while executing - "expect { - -i exp9 -timeout 10 - -re ".*A problem internal to GDB has been detected" { - fail "$message (GDB internal error)" - gdb_internal_error..." - ("uplevel" body line 1) - invoked from within - .... - - Wondering if it might be possible to improve gdb_test to have - gdb_test "python print(objfile.filename)" "None" \ - "objfile.filename after objfile is unloaded" - reporting a failed result instead of just producing the internal error. - -2022-11-21 Philippe Waroquiers - - Fix use after free introduced by $_hit_bpnum/$_hit_locno variables. - If the commands of the bpstat bs contain commands such as step or next or - continue, the BS and its commands are freed by execute_control_command. - - So, we cannot remember the BS that was printed. Instead, remember - the bpnum and locno. - - Regtested on debian/amd64 and re-run a few tests under valgrind. - -2022-11-21 Philippe Waroquiers - - Fix step-over-syscall.exp matching regexp for $bpnum.$locno matching - step-over-syscall.exp has some specific tests for gdbserver. - The regexp matching breakpoint hit must take the added locno into account. - - Test re-run in 3 modes (normal, native-gdbserver and native-extended-gdbserver). - -2022-11-21 Nick Clifton - - Fix ARM and AArch64 assembler tests to work in a multi-arch environment. - PR 29764 - gas * testsuite/gas/arm/cpu-cortex-a76ae.d: Add arm prefix to the -m - option passed to objdump. - * testsuite/gas/arm/cpu-cortex-a77.d: Likewise. - * testsuite/gas/aarch64/cpu-cortex-a76ae.d: Add aarch64 prefix to - the -m option passed to objdump. - * testsuite/gas/aarch64/cpu-cortex-a77.d: Likewise. - - bfd * cpu-arm.c (scan): Accept machine names prefixed with "arm:". - * cpu-aarch64.c (scan): Accept machine names prefixed with "aarch64:". - - bin * doc/binutils.texi (objdump): Note that the -m option supports - the : syntax. - -2022-11-21 Torbjörn SVENSSON - - gdb/arm: Ensure that stack pointers are in sync - For targets with secext, msp and psp can be seen as an alias for one - of msp_s, msp_ns, psp_s or psp_ns. - Without this patch, sp might be secure, but msp or psp is non-secure - (this state can not happen in the hardware). - - gdb/arm: Update active msp/psp when switching stack - For targets with secext, msp and psp can be seen as an alias for one - of msp_s, msp_ns, psp_s or psp_ns. When switching active sp, the - corresponding msp/psp needs to be switched too. - -2022-11-21 Jiangshuai Li - - gdb/csky just return type from csky_vector_type() for vector resgisters - Some gdb stubs may not describe the type for vector registers in the - tdesc-xml and only send bitsize="128", gdb can't deal with a reg - with default type int with bitsize==128. So Just return csky_vector_type() - for vector resgisters. - - gdb/csky return type int32 for float and vector pseudo regs - When reg_nr is one of the float and vector pseudo registers, - return builtin_type (gdbarch)->builtin_int32 for it. - -2022-11-21 GDB Administrator - - Automatic date update in version.in - -2022-11-20 Rainer Orth - - [PR build/29791] gnulib: Disable _GL_ATTRIBUTE_DEALLOC on Solaris - gdbsupport compilation badly fails with GCC 12 on Solaris, with errors - like - - ../gnulib/config.h:1693:72: error: ‘malloc’ attribute argument 1 is ambiguous - 1693 | # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) - | ^ - ../gnulib/config.h:1693:72: note: use a cast to the expected type to disambiguate - - We've not yet been able to determine where the ambiguity actually lies, - so this patch works around the issue by disabling _GL_ATTRIBUTE_DEALLOC - on Solaris, at least as a workaround for GDB 13. - - As Tom suggested in the PR, this is done using our infrastructure for - local gnulib patches. - - Tested on sparcv9-sun-solaris2.11, amd64-pc-solaris2.11, and - x86_64-pc-linux-gnu. - - Approved-By: Simon Marchi - -2022-11-20 Rainer Orth - - Fix sol-thread.c compilation on 32-bit Solaris - sol-thread.c fails to compile on 32-bit Solaris: there are several - instances of - - In file included from /vol/src/gnu/gdb/hg/master/local/gdb/../gdbsupport/common-defs.h:203, - from /vol/src/gnu/gdb/hg/master/local/gdb/defs.h:28, - from /vol/src/gnu/gdb/hg/master/local/gdb/sol-thread.c:51: - /vol/src/gnu/gdb/hg/master/local/gdb/sol-thread.c: In member function ‘virtual void sol_thread_target::resume(ptid_t, int, gdb_signal)’: - /vol/src/gnu/gdb/hg/master/local/gdb/sol-thread.c:416:20: error: format ‘%ld’ expects argument of type ‘long int’, but argument 2 has type ‘ULONGEST’ {aka ‘long long unsigned int’} [-Werror=format=] - 416 | warning (_("Specified thread %ld seems to have terminated"), - | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - /vol/src/gnu/gdb/hg/master/local/gdb/../gdbsupport/gdb_locale.h:28:29: - note: in definition of macro ‘_’ - 28 | # define _(String) gettext (String) - | ^~~~~~ - /vol/src/gnu/gdb/hg/master/local/gdb/sol-thread.c:416:40: note: format - string is defined here - 416 | warning (_("Specified thread %ld seems to have terminated"), - | ~~^ - | | - | long int - | %lld - - Fixed by using pulongest () instead. - - Tested on i386-pc-solaris2.11, amd64-pc-solaris2.11, - sparc-sun-solaris2.11, and sparcv9-sun-solaris2.11 (together with - Simon's patch for PR build/29798). - -2022-11-20 GDB Administrator - - Automatic date update in version.in - -2022-11-19 Philippe Waroquiers - - Add missing gdb_prompt in ctxobj.exp to avoid random failure, fix typo. - ctxobj.exp fails randomly when computer is loaded. - With the addition of $gdb_prompt in the regexp testing for breakpoint hit, - I could not make it fail anymore. - - Also fixed a typo in a comment. - -2022-11-19 Philippe Waroquiers - - Show locno for 'multi location' breakpoint hit msg+conv var $_hit_bbnum $_hit_locno PR breakpoints/12464 - This implements the request given in PR breakpoints/12464. - - Before this patch, when a breakpoint that has multiple locations is reached, - GDB printed: - Thread 1 "zeoes" hit Breakpoint 1, some_func () at somefunc1.c:5 - - This patch changes the message so that bkpt_print_id prints the precise - encountered breakpoint: - Thread 1 "zeoes" hit Breakpoint 1.2, some_func () at somefunc1.c:5 - - In mi mode, bkpt_print_id also (optionally) prints a new table field "locno": - locno is printed when the breakpoint hit has more than one location. - Note that according to the GDB user manual node 'GDB/MI Development and Front - Ends', it is ok to add new fields without changing the MI version. - - Also, when a breakpoint is reached, the convenience variables - $_hit_bpnum and $_hit_locno are set to the encountered breakpoint number - and location number. - - $_hit_bpnum and $_hit_locno can a.o. be used in the command list of a - breakpoint, to disable the specific encountered breakpoint, e.g. - disable $_hit_bpnum.$_hit_locno - - In case the breakpoint has only one location, $_hit_locno is set to - the value 1, so as to allow a command such as: - disable $_hit_bpnum.$_hit_locno - to disable the breakpoint even when the breakpoint has only one location. - - This also fixes a strange behaviour: when a breakpoint X has only - one location, - enable|disable X.1 - is accepted but transforms the breakpoint in a multiple locations - breakpoint having only one location. - - The changes in RFA v4 handle the comments of Tom Tromey: - - Changed convenience var names from $bkptno/$locno to - $_hit_bpnum/$_hit_locno. - - updated the tests and user manual accordingly. - User manual also explictly describes that $_hit_locno is set to 1 - for a breakpoint with a single location. - - The variable values are now set in bpstat_do_actions_1 so that - they are set for silent breakpoints, and when several breakpoints - are hit at the same time, that the variables are set to the printed - breakpoint. - - The changes in RFA v3 handle the additional comments of Eli: - GDB/NEW: - - Use max 80-column - - Use 'code location' instead of 'location'. - - Fix typo $bkpno - - Ensure that disable $bkptno and disable $bkptno.$locno have - each their explanation inthe example - - Reworded the 'breakpoint-hit' paragraph. - gdb.texinfo: - - Use 'code location' instead of 'location'. - - Add a note to clarify the distinction between $bkptno and $bpnum. - - Use @kbd instead of examples with only one command. - - Compared to RFA v1, the changes in v2 handle the comments given by - Keith Seitz and Eli Zaretskii: - - Use %s for the result of paddress - - Use bkptno_numopt_re instead of 2 different -re cases - - use C@t{++} - - Add index entries for $bkptno and $locno - - Added an example for "locno" in the mi interface - - Added examples in the Break command manual. - -2022-11-19 Tsukasa OI - - RISC-V: Add 'Ssstateen' extension and its CSRs - This commit adds 'Ssstateen' extension, which is a supervisor-visible view - of the 'Smstateen' extension. It means, this extension implements sstateen* - and hstateen* CSRs of the 'Smstateen' extension. - - Note that 'Smstateen' extension itself is unchanged but due to - implementation simplicity, it is implemented so that 'Smstateen' implies - 'Ssstateen' (just like 'M' implies 'Zmmul'). - - This is based on the latest version of RISC-V Profiles - (version 0.9-draft, Frozen): - - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_implicit_subsets): Update implication rules. - (riscv_supported_std_s_ext) Add 'Ssstateen' extension. - - gas/ChangeLog: - - * config/tc-riscv.c (enum riscv_csr_class): Rename - CSR_CLASS_SMSTATEEN_AND_H{,_32} to CSR_CLASS_SSSTATEEN_... - Add CSR_CLASS_SSSTATEEN. - (riscv_csr_address): Support new/renamed CSR classes. - * testsuite/gas/riscv/csr.s: Add 'Ssstateen' extension to comment. - * testsuite/gas/riscv/csr-version-1p9p1.l: Reflect changes to - error messages. - * testsuite/gas/riscv/csr-version-1p10.l: Likewise. - * testsuite/gas/riscv/csr-version-1p11.l: Likewise. - * testsuite/gas/riscv/csr-version-1p12.l: Likewise. - * testsuite/gas/riscv/ssstateen-csr.s: Test for 'Ssstateen' CSRs. - * testsuite/gas/riscv/ssstateen-csr.d: Likewise. - * testsuite/gas/riscv/smstateen-csr-s.d: Test to make sure that - supervisor/hypervisor part of 'Smstateen' CSRs are accessible from - 'RV32IH_Smstateen', not just from 'RV32IH_Ssstateen' that is tested - in ssstateen-csr.d. - - include/ChangeLog: - - * opcode/riscv-opc.h: Update DECLARE_CSR declarations with - new CSR classes. - -2022-11-19 GDB Administrator - - Automatic date update in version.in - -2022-11-18 Simon Marchi - - gdbserver/linux-x86: move lwp declaration out of __x86_64__ region - Commit 4855cbdc3d8f ("gdbserver/linux-x86: make is_64bit_tdesc accept - thread as a parameter") caused this when building in 32 bits / i386 - mode: - - CXX linux-x86-low.o - In file included from /home/smarchi/src/binutils-gdb/gdbserver/linux-x86-low.cc:24: - /home/smarchi/src/binutils-gdb/gdbserver/linux-x86-low.cc: In member function ‘virtual int x86_target::low_get_thread_area(int, CORE_ADDR*)’: - /home/smarchi/src/binutils-gdb/gdbserver/linux-x86-low.cc:357:47: error: ‘lwp’ was not declared in this scope - 357 | struct thread_info *thr = get_lwp_thread (lwp); - | ^~~ - /home/smarchi/src/binutils-gdb/gdbserver/linux-low.h:709:31: note: in definition of macro ‘get_lwp_thread’ - 709 | #define get_lwp_thread(lwp) ((lwp)->thread) - | ^~~ - - This is because it moved the lwp variable declaration inside the - __x86_64__ guard, making it unavailable when building in 32 bits mode. - Move the lwp variable outside of the __x86_64__ region. - - Change-Id: I7fa3938c6b44b345c27a52c8b8d3ea12aba53e05 - -2022-11-18 Simon Marchi - - gdbserver: use current_process in ps_getpid - The following patch ("gdbserver: switch to right process in - find_one_thread") makes it so find_one_thread calls into libthread_db - with a current process but no current thread. This tripped on ps_getpid - using current_thread in order to get the process' pid. Get the pid from - `current_process ()` instead, which removes the need to have a current - thread. Eventually, it would be good to get it from the - gdb_ps_prochandle_t structure, to avoid the need for a current process - as well. - - Reviewed-By: Andrew Burgess - Change-Id: I9d2fae266419199a2fbc2fde0a5104c6e0dbd2d5 - -2022-11-18 Simon Marchi - - gdbserver/linux-x86: make is_64bit_tdesc accept thread as a parameter - ps_get_thread_area receives as a parameter the lwpid it must work on. - It then calls is_64bit_tdesc, which uses the current_thread as the - thread to work on. However, it is not said that both are the same. - - This became a problem when working in a following patch that makes - find_one_thread switch to a process but to no thread (current_thread == - nullptr). When libthread_db needed to get the thread area, - is_64bit_tdesc would try to get the regcache of a nullptr thread. - - Fix that by making is_64bit_tdesc accept the thread to work on as a - parameter. Find the right thread from the context, when possible (when - we know the lwpid to work on). Otherwise, pass "current_thread", to - retain the existing behavior. - - Reviewed-By: Andrew Burgess - Change-Id: I44394d6be92392fa28de71982fd04517ce8a3007 - -2022-11-18 Simon Marchi - - gdbserver/linux: take condition out of callback in find_lwp_pid - Just a small optimization, it's not necessary to recompute lwp at each - iteration. - - While at it, change the variable type to long, as ptid_t::lwp returns a - long. - - Reviewed-By: Andrew Burgess - Change-Id: I181670ce1f90b59cb09ea4899367750be2ad9105 - -2022-11-18 Johnson Sun - - Fix deletion of FinishBreakpoints - Currently, FinishBreakpoints are set at the return address of a frame based on - the `finish' command, and are meant to be temporary breakpoints. However, they - are not being cleaned up after use, as reported in PR python/18655. This was - happening because the disposition of the breakpoint was not being set - correctly. - - This commit fixes this issue by correctly setting the disposition in the - post-stop hook of the breakpoint. It also adds a test to ensure this feature - isn't regressed in the future. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=18655 - -2022-11-18 Simon Marchi - - gdb: fix symtab.c build on 32 bit targets - When building on Ubuntu 22.04, gcc 12, x86-64 with -m32 and -O2, I get: - - CXX symtab.o - /home/smarchi/src/binutils-gdb/gdb/symtab.c: In member function ‘std::vector global_symbol_searcher::search() const’: - /home/smarchi/src/binutils-gdb/gdb/symtab.c:4961:44: error: ‘__builtin___sprintf_chk’ may write a terminating nul past the end of the destination [-Werror=format-overflow=] - 4961 | sprintf (tmp, "operator%.*s%s", fix, " ", opname); - | ^ - In file included from /usr/include/stdio.h:894, - from ../gnulib/import/stdio.h:43, - from /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/common-defs.h:86, - from /home/smarchi/src/binutils-gdb/gdb/defs.h:28, - from /home/smarchi/src/binutils-gdb/gdb/symtab.c:20: - In function ‘int sprintf(char*, const char*, ...)’, - inlined from ‘std::vector global_symbol_searcher::search() const’ at /home/smarchi/src/binutils-gdb/gdb/symtab.c:4961:16: - /usr/include/i386-linux-gnu/bits/stdio2.h:38:34: note: ‘__builtin___sprintf_chk’ output between 9 and 2147483648 bytes into a destination of size 2147483647 - 38 | return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1, - | ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 39 | __glibc_objsize (__s), __fmt, - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 40 | __va_arg_pack ()); - | ~~~~~~~~~~~~~~~~~ - - PR build/29798 shows a similar error message but on Solaris. - - Work around that by using string_printf. It is a good thing to get rid - of the alloca anyway. - - Change-Id: Ifbac11fee3062ad7f134d596b4e2229dc5d166f9 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29798 - -2022-11-18 Andrew Burgess - - gdb/testsuite: rewrite gdb.cp/call-method-register.exp with dwarf assembler - Convert the gdb.cp/call-method-register.exp test to make use of the - DWARF assembler. - - The existing gdb.cp/call-method-register.exp test relies on a GCC - extension - forcing a local variable into a particular named register. - - This means that the test will only work with Clang, and, as we have to - name the register into which the variable will be placed, will only - work for those targets where we've selected a suitable register, - currently this is x86-64, i386, and ppc64. - - By switching to the DWARF assembler, the test will work with gcc and - clang, and should work on most, if not all, architectures. - - The test creates a small structure, something that can fit within a - register, and then tries to call a method on the structure from within - GDB. This should fail because GDB can't take the address of the in - register structure (for the `this` pointer). - - As the test is for a failure case, then we don't really care _which_ - register the structure is in, and I take advantage of this for the - DWARF assembler test, I just declare that the variable is in - DW_OP_reg0, whatever that might be. I've tested the new test on - x86-64, ppc, aarch64, and risc-v, and the test runs, and passes on all - these architectures, which is already more than we used to cover. - - Additionally, on x86-64, I've tested with Clang and gcc, and the test - runs and passed with both compilers. - - Reviewed-By: Lancelot SIX - -2022-11-18 Andrew Burgess - - gdb/testsuite: fix gdb.debuginfod/fetch_src_and_symbols.exp with Clang - The gdb.debuginfod/fetch_src_and_symbols.exp test is showing a single - failure when run with some older versions of Clang, e.g. 9.0.1. - - The problem appears to be with Clang's generated line table. The test - source looks like this: - - int - main() - { - asm ("main_label: .globl main_label"); - return 0; - } - - In GDB, when we 'start', we expect to stop at the 'return 0;' line. - This is the behaviour when the compiler is gcc, or later versions of - Clang. - - However, with Clang 9.0.2, I see GDB stop on the 'asm' line. - - In this commit I'll fix this issue by placing a breakpoint on the - return line, and then using gdb_continue_to_breakpoint to ensure we - have stopped in the correct place. - - Of course, using gdb_continue_to_breakpoint will only work if we are - not already stopped at the breakpoint location, so I've added some - filler work before the 'return 0;' line. With this done we can use - gdb_continue_to_breakpoint in all cases. - - As a result of adding the new filler work, one of the later tests, - that used the 'list' command, no longer see the correct expected - output (the top line of the source file is no longer included in the - output). I've fixed this by listing a known specific line, the test - is checking that GDB managed to find the source file, it doesn't - matter which source line we list, as long as we can list something. - -2022-11-18 Andrew Burgess - - gdb/testsuite: rename source file gdb.debuginfod/main.c - The test gdb.debuginfod/fetch_src_and_symbols.exp uses a source file - named main.c. I can't see any particular reason why the file is named - as such. - - Usually test source files are named after the test script. - - This commit just renames the source file inline with the test script, - and updates the call to standard_testfile (removing the reference to - main.c). - - There's no particular reason for this change other than seeing the - file named main.c made me thing that the source file must be shared - with some other test (it isn't). - - There should be no change in what is tested after this commit. - -2022-11-18 Andrew Burgess - - gdb/testsuite: add (and use) a new build-id compile option - I noticed that the gdb.debuginfod/fetch_src_and_symbols.exp test was - failing when run with Clang as the compiler. - - This test relies on the compiled binaries having a build-id within - them. For GCC, really GNU ld, the default is to always include a - build-id. - - When compiling with Clang though, the default is for no build-id. - - I did consider *always* turning on the build-id feature when the - compiler is Clang, but that felt a little weird. - - Instead, I propose that we add a new 'build-id' compiler option to - gdb_compile, this flag indicates that the test _requires_ a build-id. - In gcc_compile we can then add the required flags if the compiler is - Clang so that we do get a build-id. - - With this change the gdb.debuginfod/fetch_src_and_symbols.exp test - now (mostly) passes with Clang 9.0.1 and 15.0.2, and still passes with - gcc. The 'mostly' part is an unrelated issue, and will be addressed - in a later commit in this series. - - Reviewed-By: Lancelot SIX - -2022-11-18 Andrew Burgess - - gdb/testsuite: fix gdb.compile/compile-ops.exp with clang - I noticed that the gdb.compile/compile-ops.exp test was failing when - run with Clang as the compiler. - - This test makes use of the DWARF assembler, and, it turns out, uses - a technique which is not portable to Clang. This problem is - described in the comment on the function_range proc in lib/dwarf.exp, - the explanation is: - - # If the compiler is gcc, we can do the following to get function start - # and end address too: - # - # asm ("func_start: .globl func_start"); - # static void func (void) {} - # asm ("func_end: .globl func_end"); - # - # however, this isn't portable, because other compilers, such as clang, - # may not guarantee the order of global asms and function. The code - # becomes: - # - # asm ("func_start: .globl func_start"); - # asm ("func_end: .globl func_end"); - # static void func (void) {} - - These start/end labels are used for computing the function start, end, - and length. The portable solution is to place a label within the - function, like this: - - # int main (void) - # { - # asm ("main_label: .globl main_label"); - # return 0; - # } - - And make use of 'proc function_range' (from lib/dwarf.exp). - - So, that's what I do in this commit. - - One consequence of this change is that we need to compile the source - file, and have it loaded into a GDB session, before calling - function_range, so I've added an early call to prepare_for_testing. - - Additionally, this test script was generating the DWARF assembler into - a file called gdbjit-ops.S, I suspect a copy and paste issue there, so - I've switched this to use compile-ops-dbg.S instead, which is more - inline with what other DWARF assembler tests do. - - The only other change, which might be a problem, is that I also - deleted these two lines from the source file: - - asm (".section \".text\""); - asm (".balign 8"); - - These lines were setting the alignment of the .text section. What I - don't know is whether this was significant or not. If it is - significant, then I can't see why. - - On x86-64, the test still passes fine without these lines, but that - doesn't mean the test wont start failing on some other architecture. - - Still, I figure, lets remove them, then, if/when we find a test that - starts failing, we can add the lines back, along with an explanation - for why the extra alignment is required. - - But, if people would prefer to be more conservative, then I'm happy to - just add the lines back. - - Reviewed-By: Lancelot SIX - -2022-11-18 Andrew Burgess - - gdb/testsuite: fix gdb.trace/unavailable-dwarf-piece.exp with Clang - I noticed that the test gdb.trace/unavailable-dwarf-piece.exp was - failing when run with Clang. Or rather, the test was not running as - the test executable failed to compile. - - The problem is that Clang was emitting this warning: - - warning: argument unused during compilation: '-fdiagnostics-color=never' [-Wunused-command-line-argument] - - This warning is emitted when compiling the assembler file generated - by the DWARF assembler. - - Most DWARF assembler tests generate the assembler file into a file - with the '.S' extension. However, this particular test uses a '.s' - extension. - - Now a .S file will be passed through the preprocessor, while a .s will - be sent straight to the assembler. My guess is that Clang doesn't - support the -fdiagnostics-color=never option for the assembler, but - does for the preprocessor. - - That's a little annoying, but easily worked around. We don't care if - our assembler file is passed through the preprocessor, so, in this - commit, I just change the file extension from .s to .S, and the - problem is fixed. - - Currently, the unavailable-dwarf-piece.exp script names the assembler - file using standard_output_file, in this commit I've switched to make - use of standard_testfile, as that seems to be the more common way of - doing this sort of thing. - - With these changes the test now passes with Clang 9.0.1 and 15.0.2, - and also still passes with gcc. - - Reviewed-By: Lancelot SIX - -2022-11-18 Andrew Burgess - - gdb/testsuite: don't avoid DWARF assembler tests with Clang - Two tests make the claim that the DWARF assembler requires gcc, - however, this isn't true. I think at one point, when the DWARF - assembler was first added, we did use some techniques that were not - portable (see the comments in lib/dwarf.exp on function_range for - details), however, I think most DWARF assembler tests will now work - fine with Clang. - - The two tests that I modify in this commit both work fine with Clang, - at least, I've tested with Clang 9.0.1 and 15.0.2, and don't see any - problems, so I'm removing the early return logic that stops these - tests from running with Clang. - - Reviewed-By: Lancelot SIX - -2022-11-18 Zac Walker - - GAS fix alignment for aarch64-pe - Fixes issue where various values of '.align' causes writing of COFF files to fail. - Specific to the aarch64-pe target. - -2022-11-18 Alan Modra - - PR29799 heap buffer overflow in display_gdb_index dwarf.c:10548 - PR 29799 - * dwarf.c (display_gdb_index): Typo fix. - - go32 sanity check - * coff-stgo32 (go32exe_check_format): Sanity check stubsize against - filesize before malloc. - - Regen potfiles for sframe - -2022-11-18 GDB Administrator - - Automatic date update in version.in - -2022-11-17 Indu Bhagat - - [gas, aarch64]: fix build breakage for aarch64-pe - SFrame is supported for ELF only. Keep the definitions and declarations - guarded with OBJ_ELF consistently. - - ChangeLog: - - * gas/config/tc-aarch64.h: Guard SFrame related definitions - with OBJ_ELF. - -2022-11-17 Tom Tromey - - Fix static initialization order problem in windows-nat.c - This patch fixes a static initialization order problem in - windows-nat.c that was pointed out by Jon Turney. The underlying - problem is that the windows_nat_target constructor relies on - serial_logfile already being constructed, but this is not enforced by - C++ rules. This patch fixes the problem by initializing the global - windows_nat_target later. - -2022-11-17 H.J. Lu - - opcodes: Define NoSuf in i386-opc.tbl - Use NoSuf to replace No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf - and add the explicit NoSuf to AddrPrefixOpReg in templates. - - * i386-opc.tbl (NoSuf): New macro. - (AddrPrefixOpReg): Remove No_?Suf. - Replace No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf with - NoSuf in templates. - Add NoSuf to AddrPrefixOpReg in templates. - -2022-11-17 H.J. Lu - - i386: Move i386_seg_prefixes to gas - gas/ - - * config/tc-i386.c (i386_seg_prefixes): New. Moved from opcodes. - - opcodes/ - - * i386-opc.c (i386_seg_prefixes): Removed. - * i386-opc.h (i386_seg_prefixes): Likewise. - -2022-11-17 Carl Love - - PowerPC, fix gdb.base/retval-large-struct.exp - Support for printining non-trivial return values was recently added in - commit: - - commit a0eda3df5b750ae32576a9be092b361281a41787 - Author: Carl Love - Date: Mon Nov 14 16:22:37 2022 -0500 - - PowerPC, fix support for printing the function return value for non-trivial values. - - The functionality can now be used to fix gdb.base/retval-large-struct.exp. - The test just needs to be compiled with -fvar-tracking to enable GDB to - determine the address off the return buffer when the function is called. - - The current output from the test: - - 34 return big_struct; - (gdb) PASS: gdb.base/retval-large-struct.exp: continue to breakpoint: Break in print_large_struct - finish - warning: Cannot determine the function return value. - Try compiling with -fvar-tracking. - Run till exit from #0 return_large_struct () at binutils-gdb-current/gdb/testsuite/gdb.base/retval-large-struct.c:34 - main (argc=1, argv=0x7fffffffcd58) at binutils-gdb-current/gdb/testsuite/gdb.base/retval-large-struct.c:44 - 44 return 0; - Value returned has type: struct big_struct_t. Cannot determine contents - (gdb) FAIL: gdb.base/retval-large-struct.exp: finish from return_large_struct - testcase binutils-gdb-current/gdb/testsuite/gdb.base/retval-large-struct.exp completed in 1 seconds - - This patch adds the command line argument -fvar-tracking to enable gdb to - determine the return vaule and thus fixing the test. - - Patch tested on Power 10 with no regressions. - -2022-11-17 Tom Tromey - - Use boolean literals for pagination_enabled - I noticed a couple of spots that used '0' rather than 'false' when - modifying pagination_enabled. This patch cleans these up. - -2022-11-17 Carl Love - - Change NULL to nullptr in gdb/infcmd.c and gdb/infrun.c - The GDB coding standard specifies that nullptr should be used instead of - NULL. There are numerous uses of NULL and nullptr in files infcmd.c and - infrun.c. This patch replaces the various uses of NULL with nullptr in - the source files. The use of NULL in the comments was not changed. - - The patch does not introduce any functional changes. - - The patch has been tested on PowerPC and Intel X86_64 with no new unexpected - test failures, unresolved tests, new core files etc. - -2022-11-17 H.J. Lu - - ld: Always call elf_backend_output_arch_local_syms - Always call elf_backend_output_arch_local_syms since only the backend - knows if elf_backend_output_arch_local_syms is needed when all symbols - are striped. elf_backend_output_arch_local_syms is defined only for - x86, ARM and AARCH64. On x86, elf_backend_output_arch_local_syms must - be called to handle local IFUNC symbols even if all symbols are striped. - Update ARM and AARCH64 to skip elf_backend_output_arch_local_syms when - symbols aren't needed. - - bfd/ - - PR ld/29797 - * elf32-arm.c (elf32_arm_output_arch_local_syms): Skip if symbols - aren't needed. - * elfnn-aarch64.c (elfNN_aarch64_output_arch_local_syms): - Likewise. - * elflink.c (bfd_elf_final_link): Always call - elf_backend_output_arch_local_syms if available. - - ld/ - - PR ld/29797 - * testsuite/ld-elf/linux-x86.exp: Run PR ld/29797 test. - * testsuite/ld-elf/pr29797.c: New file. - -2022-11-17 Andrew Burgess - - gdb: new $_inferior_thread_count convenience variable - Add a new convenience variable $_inferior_thread_count that contains - the number of live (non-exited) threads in the current inferior. This - can be used in command scripts, or breakpoint conditions, etc to - adjust the behaviour for multi-threaded inferiors. - - This value is only stable in all-stop mode. In non-stop mode, where - new threads can be started, and existing threads exit, at any time, - this convenience variable can give a different value each time it is - evaluated. - -2022-11-17 Tom Tromey - - Remove two obsolete declarations - I happened to find a couple of obsolete declarations in cli-interp.h. - This patch removes them. Tested by rebuilding. - -2022-11-17 Andrew Burgess - - gdb/testsuite: fix failure in gdb.python/py-send-packet.exp - While working on another patch I noticed that, when run on an AArch64 - target, the test gdb.python/py-send-packet.exp was failing: - - Traceback (most recent call last): - File "", line 1, in - File "/tmp/build/gdb/testsuite/outputs/gdb.python/py-send-packet/py-send-packet.py", - line 106, in run_auxv_send_packet_test - assert string == expected_result - AssertionError - Error while executing Python code. - (gdb) FAIL: gdb.python/py-send-packet.exp: call python run_auxv_send_packet_test function - - The test uses 'maint packet ...' to send a packet to gdbserver, and - then captures the output in TCL. This output is then passed through - to a Python function, which performs some actions using the Python - API, and compares the results from the Python API to the results - captured in TCL from 'maint packet ...'. - - The problem is that the output captured in TCL contains lots of things - like '\x000', when this is passed through to Python the '\x' causes - this to be treated as an escape code, which isn't what we want - we - want the actual string "\x000". - - So, in the TCL part of the test we were expanding '\x' to '\\x', this - seemed to work fine for my testing on x86-64. - - However, on AArch64 what I see is that the results from 'maint packet - ...' contain a literal '\' character followed by a literal 'x' - character. When GDB prints this in the 'maint packet' output, GDB - escapes the '\' for us, thus we get '\\x' printed by 'maint packet'. - - However, now our TCL test script kicks in and tries to "fix" the '\x', - this means we now have '\\\x', which isn't correct. - - The problem is that in the TCL script we are too restrictive, we - expand '\x' to '\\x', but really, we should be expanding all '\' - characters, regardless of what follows them. This is what this patch - does. - - After this the gdb.python/py-send-packet.exp test passes on AArch64 - for me. - -2022-11-17 Aditya Vidyadhar Kamath - - Fix call functions command bug in 64 bits programs for AIX - In AIX for 64 bit programs we need to zero extend variables - of integer or enum or char data type. - - Otherwise a zero will get dumped in the register as we memset - our word to 0 and we copy non zero extended contents to the cache. - -2022-11-17 Andrew Burgess - - gdb/fortran/testsuite: print values and types of string variables - While looking through the Fortran tests, I couldn't find a test of GDB - printing the value and type of a Fortran string defined using the - 'character*SIZE' notation. - - This works fine in GDB right now, but I thought it wouldn't hurt to - have a test for this, so this commit adds such a test. - - The test also includes printing a string that includes some embedded - special characters: \n \r \t \000 - that's right, as Fortran strings - are stored as an address and length, it is fine to include an embedded - null, so this test includes an example of that. - - Standard Fortran doesn't support backslash escape sequences within - strings, the special characters must be generated using the `achar` - function. However, when GDB prints the strings we currently print - using the standard C like backslash sequences. - - I'm not currently proposing to change that behaviour, the backslash - sequences are more compact than the standard Fortran way of doing - things, and are so widely used that I suspect most Fortran programmers - will understand them. - -2022-11-17 Rainer Orth - - Fix various procfs.c compilation errors - procfs.c has accumulated several compilation errors lately (some of them - new with GCC 12), which are fixed by this patch: - - * auxv_parse gets: - - /vol/src/gnu/gdb/hg/master/dist/gdb/procfs.c:144:7: error: ‘int - procfs_target::auxv_parse(gdb_byte**, gdb_byte*, CORE_ADDR*, CORE_ADDR*)’ - marked ‘override’, but does not override - 144 | int auxv_parse (gdb_byte **readptr, - | ^~~~~~~~~~ - - Obviouly, procfs.c was missed in the auxv_parse constification. - - * dead_procinfo has: - - /vol/src/gnu/gdb/hg/master/dist/gdb/procfs.c: In function ‘void - dead_procinfo(procinfo*, const char*, int)’: - /vol/src/gnu/gdb/hg/master/dist/gdb/procfs.c:563:11: warning: the address - of ‘procinfo::pathname’ will never be NULL [-Waddress] - 563 | if (pi->pathname) - | ~~~~^~~~~~~~ - /vol/src/gnu/gdb/hg/master/dist/gdb/procfs.c:238:8: note: - ‘procinfo::pathname’ declared here - 238 | char pathname[MAX_PROC_NAME_SIZE]; /* Pathname to /proc entry */ - | ^~~~~~~~ - - The warning is correct, so the code can lose support for the NULL - pathname case. - - * create_inferior has this ugly warning: - - /vol/src/gnu/gdb/hg/master/dist/gdb/procfs.c: In member function ‘virtual void procfs_target::create_inferior(const char*, const std::string&, char**, int)’: - /vol/src/gnu/gdb/hg/master/dist/gdb/procfs.c:2815:19: warning: ‘char* std::strncpy(char*, const char*, size_t)’ output truncated before terminating nul copying as many bytes from a string as its length [-Wstringop-truncation] - 2815 | strncpy (tryname, p, len); - | ~~~~~~~~^~~~~~~~~~~~~~~~~ - /vol/src/gnu/gdb/hg/master/dist/gdb/procfs.c:2814:26: note: length computed here - 2814 | len = strlen (p); - | ~~~~~~~^~~ - - It seems that this is another case of GCC PR middle-end/88059, which - Martin Sebor refuses to fix. So I'm using the hack suggested in the - PR to use memcpy instead of strncpy. - - * find_memory_regions_callback fails with - - /vol/src/gnu/gdb/hg/master/dist/gdb/procfs.c: In function ‘int find_memory_regions_callback(prmap*, find_memory_region_ftype, void*)’: - /vol/src/gnu/gdb/hg/master/dist/gdb/procfs.c:3167:18: error: too few arguments to function - 3167 | return (*func) ((CORE_ADDR) map->pr_vaddr, - | ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ - 3168 | map->pr_size, - | ~~~~~~~~~~~~~ - 3169 | (map->pr_mflags & MA_READ) != 0, - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 3170 | (map->pr_mflags & MA_WRITE) != 0, - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 3171 | (map->pr_mflags & MA_EXEC) != 0, - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 3172 | 1, /* MODIFIED is unknown, pass it as true. */ - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 3173 | data); - | ~~~~~ - - Again, procfs.c was overlooked when adding the new memory_tagged arg. - Unfortunately, it wasn't even documented in gdb/defs.h when it was - added in - - commit 68cffbbd4406b4efe1aa6e18460b1d7ca02549f1 - Author: Luis Machado - Date: Thu Mar 31 11:42:35 2022 +0100 - - [AArch64] MTE corefile support - - With those changes, procfs.c compiles again. Together with the hack - from the Solaris gdbsupport breakage reported in PR build/29791, I was - able to build and test gdb on both amd64-pc-solaris2.11 and - sparcv9-sun-solaris2.11. - - Approved-By: Simon Marchi - -2022-11-17 Christoph Müllner - - RISC-V: Add T-Head Int vendor extension - This patch adds the XTheadInt extension, which provides interrupt - stack management instructions. - - The XTheadFmv extension is documented in the RISC-V toolchain - contentions: - https://github.com/riscv-non-isa/riscv-toolchain-conventions - - Co-developed-by: Lifang Xia - -2022-11-17 Christoph Müllner - - RISC-V: Add T-Head Fmv vendor extension - This patch adds the XTheadFmv extension, which allows to access the - upper 32 bits of a double-precision floating-point register in RV32. - - The XTheadFmv extension is documented in the RISC-V toolchain - contentions: - https://github.com/riscv-non-isa/riscv-toolchain-conventions - - Co-developed-by: Lifang Xia - -2022-11-17 Tom de Vries - - [gdb/testsuite] Fix DUPLICATE in gdb.arch/ppc-fp.exp - I noticed: - ... - DUPLICATE: gdb.arch/ppc-fp.exp: next - ... - - Fix this by adding unique test names. - - Tested on powerpc64le-linux. - -2022-11-17 GDB Administrator - - Automatic date update in version.in - -2022-11-16 Kévin Le Gouguec - - Add myself to the gdb/MAINTAINERS write-after-approval list - -2022-11-16 Kévin Le Gouguec - - Guard against frame.c destructors running before frame-info.c's - On x86_64-windows, since 04e2ac7b2a7, we observe this internal error: - - [...]/gdbsupport/intrusive_list.h:458: internal-error: erase_element: - Assertion `elem_node->prev != INTRUSIVE_LIST_UNLINKED_VALUE' failed. - - Breaking in the destructors for intrusive_list and frame_info_ptr shows that - in this configuration, the destructors for frame.c's statically-stored - objects are run before frame-info.c's: - - Thread 1 hit Breakpoint 7, intrusive_list >::~intrusive_list (this=0x7ff69c418c90 - , __in_chrg=) - [...]/../gdbsupport/intrusive_list.h:250 - 250 clear (); - (gdb) bt - #0 intrusive_list > - ::~intrusive_list (this=0x7ff69c418c90 , - __in_chrg=) [...]/../gdbsupport/intrusive_list.h:250 - #1 0x00007ff69b78edba in __tcf_1 () [...]/frame-info.c:27 - #2 0x00007ff9c457aa9f in msvcrt!_initterm_e () - from C:\Windows\System32\msvcrt.dll - #3 0x00007ff69b8246a6 in captured_main_1 (context=0x5ffe00) - [...]/main.c:1111 - #4 0x00007ff69b825149 in captured_main (data=0x5ffe00) [...]/main.c:1320 - #5 0x00007ff69b8251b1 in gdb_main (args=0x5ffe00) [...]/main.c:1345 - #6 0x00007ff69b5d1730 in main (argc=2, argv=0x751730) [...]/gdb.c:32 - (gdb) c - Continuing. - - Thread 1 hit Breakpoint 8, frame_info_ptr::~frame_info_ptr - (this=0x7ff69c418e20 , __in_chrg=) - [...]/frame-info.h:74 - 74 if (is_linked ()) - (gdb) bt - #0 frame_info_ptr::~frame_info_ptr (this=0x7ff69c418e20 , - __in_chrg=) [...]/frame-info.h:74 - #1 0x00007ff69b79a643 in __tcf_1 () [...]/frame.c:1675 - #2 0x00007ff9c457aa9f in msvcrt!_initterm_e () from - C:\Windows\System32\msvcrt.dll - #3 0x00007ff69b8246a6 in captured_main_1 (context=0x5ffe00) - [...]/main.c:1111 - #4 0x00007ff69b825149 in captured_main (data=0x5ffe00) [...]/main.c:1320 - #5 0x00007ff69b8251b1 in gdb_main (args=0x5ffe00) [...]/main.c:1345 - #6 0x00007ff69b5d1730 in main (argc=2, argv=0x751730) [...]/gdb.c:32 - - Approved-By: Simon Marchi - -2022-11-16 Vladimir Mezentsev - - PR29788, gprofng cannot display Java's generated assembly code - gprofng/ChangeLog - 2022-11-15 Vladimir Mezentsev - - PR gprofng/29788 - * src/Experiment.h: Declare dyntext_name. - * src/Experiment.cc: Use dyntext_name to initialize img_fname. - -2022-11-16 Tom de Vries - - [gdb/testsuite] Use gdb_gcore_cmd in gdb.threads/gcore-thread.exp - I noticed a plain gcore command in test-case gdb.threads/gcore-thread.exp: - ... - gdb_test "gcore $core0file" "Saved corefile .*" \ - "save a zeroed-threads corefile" - ... - - Use gdb_gcore_cmd instead. - - Tested on x86_64-linux. - -2022-11-16 Carl Love - - Bug fix in commit for printing the function return value for non-trivial values - The recent commit: - - commit a0eda3df5b750ae32576a9be092b361281a41787 - Author: Carl Love - Date: Mon Nov 14 16:22:37 2022 -0500 - - PowerPC, fix support for printing the function return value for non-trivial values. - - Is generating a segmentation fault on x86_64-linux. - - segfault: - ... - PASS: gdb.asm/asm-source.exp: info source asmsrc1.s - ERROR: GDB process no longer exists - UNRESOLVED: gdb.asm/asm-source.exp: finish from foo3 - ... - - Reproduced on command line: - ... - $ gdb -q -batch -x outputs/gdb.asm/asm-source/gdb.in.1 - ... - - The problem seems to be that: - ... - Thread 1 "gdb" received signal SIGSEGV, Segmentation fault. - 0x000000000043de7a in symbol::type (this=0x0) at - .../gdb_versions/devel/src/gdb/symtab.h:1287 - 1287 return m_type; - ... - because: - ... - (gdb) up - #1 0x0000000000852d94 in finish_command (arg=0x0, from_tty=0) - at .../gdb_versions/devel/src/gdb/infcmd.c:1887 - 1887 = check_typedef (sm->function->type ()->target_type ()); - (gdb) p sm->function - $1 = (symbol *) 0x0 - - The code is not checking if sm->function is NULL. If sm->function is NULL - the check for the return buffer should be skipped. - -2022-11-16 Tom Tromey - - Update Ada tasks documentation - My co-worker Kévin noticed that the Ada tasks documentation is - slightly out of date -- it does not document all the states that can - be reported by ada-tasks.c. - - This patch adds the missing states to the appropriate node, and - updates one state to reflect a change made some time ago. - -2022-11-16 Pedro Alves - - gdb: add "set style tui-current-position on|off", default to off - As discussed at: - - https://sourceware.org/pipermail/gdb-patches/2020-June/169519.html - - this patch disables source and assembly code highlighting for the - text highlighted by the TUI's current position indicator, and adds a - command to enable it back. - -2022-11-16 Tom de Vries - - [gdb/testsuite] Modernize gdb.arch/i386-biarch-core.exp - I noticed in test-case gdb.arch/i386-biarch-core.exp that we run into the - completion limit for "complete set gnutarget": - ... - set gnutarget vms-libtxt^M - set gnutarget *** List may be truncated, max-completions reached. ***^M - (gdb) PASS: gdb.arch/i386-biarch-core.exp: complete set gnutarget - ... - - Fix this by using get_set_option_choices. - - Also use get_set_option_choices for "complete set architecture i386", which - required extending get_set_option_choices to accept a second argument, such - that we can do: - ... - set archs [get_set_option_choices "set architecture" "i386"] - ... - because this returns an empty list: - ... - set archs [get_set_option_choices "set architecture i386"] - ... - because it does "complete set architecture i386 ". - - Also clean up the explicit gdb_exit/gdb_start and use clean_restart instead. - - Tested on x86_64-linux. - -2022-11-16 Tom de Vries - - [gdb/testsuite] Fix gdb.arch/ppc64-symtab-cordic.exp without bzip2 - After de-installing bzip2, I run into: - ... - Running ppc64-symtab-cordic.exp ... - sh: bzip2: command not found - PATH: gdb.arch/ppc64-symtab-cordic.exp: failed bzip2 for \ - src/gdb/testsuite/gdb.arch/cordic.ko.bz2 - ... - - Fix these by: - - using remote_exec instead of catch system, and - - using file tail in the untested message. - - I've tried making output redirection work with remote_exec, but that seems to - be broken, so we now: - - copy the file $f.bz2 into the desired location $dir/$f.bz2, and - - decompress the bz2 file using "bzip2 -df $dir/$f.bz2", resulting in a file - $dir/$f. - - Factor out new function decompress_bz2 to make the test-case less verbose, and - also use it in gdb.arch/i386-biarch-core.exp. - - Tested on x86_64-linux, without and with bzip2 installed. - -2022-11-16 GDB Administrator - - Automatic date update in version.in - -2022-11-15 Indu Bhagat - - doc: add SFrame spec file - ChangeLog: - - * libsframe/Makefile.am: Add info-in-builddir to - AUTOMAKE_OPTIONS. Include doc/local.mk. - * libsframe/Makefile.in: Regenerated. - * libsframe/configure: Likewise. - * libsframe/configure.ac: Check for makeinfo and set BUILD_INFO. - * libsframe/doc/local.mk: New file. - * libsframe/doc/sframe-spec.texi: Likewise. - -2022-11-15 Indu Bhagat - - gas/NEWS: add text about new command line option and SFrame support - ChangeLog: - - * gas/NEWS: Add SFrame related news. - -2022-11-15 Indu Bhagat - - binutils/NEWS: add text for SFrame support - ChangeLog: - - * binutils/NEWS: Add item for SFrame support. - -2022-11-15 Indu Bhagat - - src-release.sh: Add libsframe - Add libsframe to the list of top level directories that will be included - in a release. - - ChangeLog: - - * src-release.sh: Add libsframe - -2022-11-15 Indu Bhagat - - readelf/objdump: support for SFrame section - This patch adds support for SFrame in readelf and objdump. The arguments - of --sframe are optional for both readelf and objdump. - - include/ChangeLog: - - * sframe-api.h (dump_sframe): New function declaration. - - ChangeLog: - - * binutils/Makefile.am: Add dependency on libsframe for - readelf and objdump. - * binutils/Makefile.in: Regenerate. - * binutils/doc/binutils.texi: Document --sframe=[section]. - * binutils/doc/sframe.options.texi: New file. - * binutils/objdump.c: Add support for SFrame format. - * binutils/readelf.c: Likewise. - * include/sframe-api.h: Add new API for dumping .sframe - section. - * libsframe/Makefile.am: Add sframe-dump.c. - * libsframe/Makefile.in: Regenerate. - * libsframe/sframe-dump.c: New file. - -2022-11-15 Indu Bhagat - - bfd: linker: merge .sframe sections - The linker merges all the input .sframe sections. When merging, the - linker verifies that all the input .sframe sections have the same - abi/arch. - - The linker uses libsframe library to perform key actions on the - .sframe sections - decode, read, and create output data. This - implies buildsystem changes to make and install libsframe before - libbfd. - - The linker places the output .sframe section in a new segment of its - own: PT_GNU_SFRAME. A new segment is not added, however, if the - generated .sframe section is empty. - - When a section is discarded from the final link, the corresponding - entries in the .sframe section for those functions are also deleted. - - The linker sorts the SFrame FDEs on start address by default and sets - the SFRAME_F_FDE_SORTED flag in the .sframe section. - - This patch also adds support for generation of SFrame unwind - information for the .plt* sections on x86_64. SFrame unwind info is - generated for IBT enabled PLT, lazy/non-lazy PLT. - - The existing linker option --no-ld-generated-unwind-info has been - adapted to include the control of whether .sframe unwind information - will be generated for the linker generated sections like PLT. - - Changes to the linker script have been made as necessary. - - ChangeLog: - - * Makefile.def: Add install dependency on libsframe for libbfd. - * Makefile.in: Regenerated. - * bfd/Makefile.am: Add elf-sframe.c - * bfd/Makefile.in: Regenerated. - * bfd/bfd-in2.h (SEC_INFO_TYPE_SFRAME): Regenerated. - * bfd/configure: Regenerate. - * bfd/configure.ac: Add elf-sframe.lo. - * bfd/elf-bfd.h (struct sframe_func_bfdinfo): New struct. - (struct sframe_dec_info): Likewise. - (struct sframe_enc_info): Likewise. - (struct elf_link_hash_table): New member for encoded .sframe - object. - (struct output_elf_obj_tdata): New member. - (elf_sframe): New access macro. - (_bfd_elf_set_section_sframe): New declaration. - * bfd/elf.c (get_segment_type): Handle new segment - PT_GNU_SFRAME. - (bfd_section_from_phdr): Likewise. - (get_program_header_size): Likewise. - (_bfd_elf_map_sections_to_segments): Likewise. - * bfd/elf64-x86-64.c (elf_x86_64_link_setup_gnu_properties): Add - contents to the .sframe sections or .plt* entries. - * bfd/elflink.c (elf_section_ignore_discarded_relocs): Handle - SEC_INFO_TYPE_SFRAME. - (_bfd_elf_default_action_discarded): Handle .sframe section. - (elf_link_input_bfd): Merge .sframe section. - (bfd_elf_final_link): Write the output .sframe section. - (bfd_elf_discard_info): Handle discarding .sframe section. - * bfd/elfxx-x86.c (_bfd_x86_elf_size_dynamic_sections): Create - .sframe section for .plt and .plt.sec. - (_bfd_x86_elf_finish_dynamic_sections): Handle .sframe from - .plt* sections. - * bfd/elfxx-x86.h (PLT_SFRAME_FDE_START_OFFSET): New - definition. - (SFRAME_PLT0_MAX_NUM_FRES): Likewise. - (SFRAME_PLTN_MAX_NUM_FRES): Likewise. - (struct elf_x86_sframe_plt): New structure. - (struct elf_x86_link_hash_table): New member. - (struct elf_x86_init_table): New members for .sframe - creation. - * bfd/section.c: Add new definition SEC_INFO_TYPE_SFRAME. - * binutils/readelf.c (get_segment_type): Handle new segment - PT_GNU_SFRAME. - * ld/ld.texi: Update documentation for - --no-ld-generated-unwind-info. - * ld/scripttempl/elf.sc: Support .sframe sections. - * ld/Makefile.am (TESTSFRAMELIB): Use it. - (check-DEJAGNU): Likewise. - * ld/Makefile.in: Regenerated. - * ld/configure.ac (TESTSFRAMELIB): Set to the .so or .a like TESTBFDLIB. - * ld/configure: Regenerated. - * bfd/elf-sframe.c: New file. - - include/ChangeLog: - - * elf/common.h (PT_GNU_SFRAME): New definition. - * elf/internal.h (struct elf_segment_map): Handle new segment - type PT_GNU_SFRAME. - - ld/testsuite/ChangeLog: - - * ld/testsuite/ld-bootstrap/bootstrap.exp: Add SFRAMELIB. - * ld/testsuite/ld-aarch64/aarch64-elf.exp: Add new test - sframe-simple-1. - * ld/testsuite/ld-aarch64/sframe-bar.s: New file. - * ld/testsuite/ld-aarch64/sframe-foo.s: Likewise. - * ld/testsuite/ld-aarch64/sframe-simple-1.d: Likewise. - * ld/testsuite/ld-sframe/sframe-empty.d: New test. - * ld/testsuite/ld-sframe/sframe-empty.s: New file. - * ld/testsuite/ld-sframe/sframe.exp: New testsuite. - * ld/testsuite/ld-x86-64/sframe-bar.s: New file. - * ld/testsuite/ld-x86-64/sframe-foo.s: Likewise. - * ld/testsuite/ld-x86-64/sframe-simple-1.d: Likewise. - * ld/testsuite/ld-x86-64/sframe-plt-1.d: Likewise. - * ld/testsuite/ld-x86-64/sframe-simple-1.d: Likewise. - * ld/testsuite/ld-x86-64/x86-64.exp: Add new tests - - sframe-simple-1, sframe-plt-1. - * ld/testsuite/lib/ld-lib.exp: Add new proc to check if - assembler supports SFrame section. - * ld/testsuite/ld-sframe/discard.d: New file. - * ld/testsuite/ld-sframe/discard.ld: Likewise. - * ld/testsuite/ld-sframe/discard.s: Likewise. - -2022-11-15 Weimin Pan - - libsframe: add the SFrame library - libsframe is a library that allows you to: - - decode a .sframe section - - probe and inspect a .sframe section - - encode (and eventually write) a .sframe section. - - This library is currently being used by the linker, readelf, objdump. - This library will also be used by the SFrame unwinder which is still - to be upstream'd. - - The file include/sframe-api.h defines the user-facing APIs for decoding, - encoding and probing .sframe sections. A set of error codes together - with their error message strings are also defined. - - Endian flipping is performed automatically at read and write time, if - cross-endianness is detected. - - ChangeLog: - - * Makefile.def: Add libsframe as new module with its - dependencies. - * Makefile.in: Regenerated. - * binutils/Makefile.am: Add libsframe. - * binutils/Makefile.in: Regenerated. - * configure: Regenerated - * configure.ac: Add libsframe to host_libs. - * libsframe/Makefile.am: New file. - * libsframe/Makefile.in: New file. - * libsframe/aclocal.m4: New file. - * libsframe/config.h.in: New file. - * libsframe/configure: New file. - * libsframe/configure.ac: New file. - * libsframe/sframe-error.c: New file. - * libsframe/sframe-impl.h: New file. - * libsframe/sframe.c: New file. - - include/ChangeLog: - - * sframe-api.h: New file. - - testsuite/ChangeLog: - - * libsframe/testsuite/Makefile.am: New file. - * libsframe/testsuite/Makefile.in: Regenerated. - * libsframe/testsuite/libsframe.decode/Makefile.am: New - file. - * libsframe/testsuite/libsframe.decode/Makefile.in: - Regenerated. - * libsframe/testsuite/libsframe.decode/decode.exp: New file. - * libsframe/testsuite/libsframe.encode/Makefile.am: - Likewise. - * libsframe/testsuite/libsframe.encode/Makefile.in: - Regenerated. - * libsframe/testsuite/libsframe.encode/encode.exp: New file. - * libsframe/testsuite/libsframe.encode/encode-1.c: Likewise. - * libsframe/testsuite/libsframe.decode/be-flipping.c: Likewise. - * libsframe/testsuite/libsframe.decode/frecnt-1.c: Likewise. - * libsframe/testsuite/libsframe.decode/frecnt-2.c: Likewise. - * libsframe/testsuite/libsframe.decode/DATA-BE: New file. - * libsframe/testsuite/libsframe.decode/DATA1: Likewise. - * libsframe/testsuite/libsframe.decode/DATA2: Likewise. - -2022-11-15 Indu Bhagat - - gas: testsuite: add new tests for SFrame unwind info - Earlier these tests were in the same commit as previous which adds the - support in GNU assembler to generate .sframe section from CFI - directives. Splitting this out here for ease of applying and testing. - - ChangeLog: - - * gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-1.d: New file. - * gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-1.s: Likewise. - * gas/testsuite/gas/cfi-sframe/cfi-sframe-common-1.d: Likewise. - * gas/testsuite/gas/cfi-sframe/cfi-sframe-common-1.s: Likewise. - * gas/testsuite/gas/cfi-sframe/cfi-sframe-common-2.d: Likewise. - * gas/testsuite/gas/cfi-sframe/cfi-sframe-common-2.s: Likewise. - * gas/testsuite/gas/cfi-sframe/cfi-sframe-common-3.d: Likewise. - * gas/testsuite/gas/cfi-sframe/cfi-sframe-common-3.s: Likewise. - * gas/testsuite/gas/cfi-sframe/cfi-sframe-common-4.d: Likewise. - * gas/testsuite/gas/cfi-sframe/cfi-sframe-common-4.s: Likewise. - * gas/testsuite/gas/cfi-sframe/cfi-sframe-common-5.d: Likewise. - * gas/testsuite/gas/cfi-sframe/cfi-sframe-common-5.s: Likewise. - * gas/testsuite/gas/cfi-sframe/cfi-sframe-common-6.d: Likewise. - * gas/testsuite/gas/cfi-sframe/cfi-sframe-common-6.s: Likewise. - * gas/testsuite/gas/cfi-sframe/cfi-sframe-common-7.d: Likewise. - * gas/testsuite/gas/cfi-sframe/cfi-sframe-common-7.s: Likewise. - * gas/testsuite/gas/cfi-sframe/cfi-sframe-common-8.d: Likewise. - * gas/testsuite/gas/cfi-sframe/cfi-sframe-common-8.s: Likewise. - * gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-1.d: Likewise. - * gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-1.s: Likewise. - * gas/testsuite/gas/cfi-sframe/cfi-sframe.exp: Likewise. - * gas/testsuite/gas/cfi-sframe/common-empty-1.d: Likewise. - * gas/testsuite/gas/cfi-sframe/common-empty-1.s: Likewise. - * gas/testsuite/gas/cfi-sframe/common-empty-2.d: Likewise. - * gas/testsuite/gas/cfi-sframe/common-empty-2.s: Likewise. - * gas/testsuite/gas/cfi-sframe/common-empty-3.d: Likewise. - * gas/testsuite/gas/cfi-sframe/common-empty-3.s: Likewise. - * gas/testsuite/gas/cfi-sframe/common-empty-4.d: Likewise. - * gas/testsuite/gas/cfi-sframe/common-empty-4.s: Likewise. - -2022-11-15 Indu Bhagat - - gas: generate .sframe from CFI directives - Currently supported for x86_64 and aarch64 only. - - [PS: Currently, the compiler has not been adapted to generate - ".cfi_sections" with ".sframe" in it. The newly added command line - option of --gsframe provides an easy way to try out .sframe support - in the toolchain.] - - gas interprets the CFI directives to generate DWARF-based .eh_frame - info. These internal DWARF structures are now consumed by - gen-sframe.[ch] sub-system to, in turn, create the SFrame unwind - information. These internal DWARF structures are read-only for the - purpose of SFrame unwind info generation. - - SFrame unwind info generation does not impact .eh_frame unwind info - generation. Both .eh_frame and .sframe can co-exist in an ELF file, - if so desired by the user. - - Recall that SFrame unwind information only contains the minimal - necessary information to generate backtraces and does not provide - information to recover all callee-saved registers. The reason being - that callee-saved registers other than FP are not needed for stack - unwinding, and hence are not included in the .sframe section. - - Consequently, gen-sframe.[ch] only needs to interpret a subset of - DWARF opcodes in gas. More details follow. - - [Set 1, Interpreted] The following opcodes are interpreted: - - DW_CFA_advance_loc - - DW_CFA_def_cfa - - DW_CFA_def_cfa_register - - DW_CFA_def_cfa_offset - - DW_CFA_offset - - DW_CFA_remember_state - - DW_CFA_restore_state - - DW_CFA_restore - - [Set 2, Bypassed] The following opcodes are acknowledged but are not - necessary for generating SFrame unwind info: - - DW_CFA_undefined - - DW_CFA_same_value - - Anything else apart from the two above-mentioned sets is skipped - altogether. This means that any function containing a CFI directive not - in Set 1 or Set 2 above, will not have any SFrame unwind information - generated for them. Holes in instructions covered by FREs of a single - FDE are not representable in the SFrame unwind format. - - As few examples, following opcodes are not processed for .sframe - generation, and are skipped: - - .cfi_personality* - - .cfi_*lsda - - .cfi_escape - - .cfi_negate_ra_state - - ... - - Not processing .cfi_escape, .cfi_negate_ra_state will cause SFrame - unwind information to be absent for SFrame FDEs that contain these CFI - directives, hence affecting the asynchronicity. - - x86-64 and aarch64 backends need to have a few new definitions and - functions for .sframe generation. These provide gas with architecture - specific information like the SP/FP/RA register numbers and an - SFrame-specific ABI marker. - - Lastly, the patch also implements an optimization for size, where - specific fragments containing SFrame FRE start address and SFrame FDE - function are fixed up. This is similar to other similar optimizations - in gas, where fragments are sized and fixed up when the associated - symbols can be resolved. This optimization is controlled by a #define - SFRAME_FRE_TYPE_SELECTION_OPT and should be easy to turn off if needed. - The optimization is on by default for both x86_64 and aarch64. - - ChangeLog: - - * gas/Makefile.am: Include gen-sframe.c and sframe-opt.c. - * gas/Makefile.in: Regenerated. - * gas/as.h (enum _relax_state): Add new state rs_sframe. - (sframe_estimate_size_before_relax): New function. - (sframe_relax_frag): Likewise. - (sframe_convert_frag): Likewise. - * gas/config/tc-aarch64.c (aarch64_support_sframe_p): New - definition. - (aarch64_sframe_ra_tracking_p): Likewise. - (aarch64_sframe_cfa_ra_offset): Likewise. - (aarch64_sframe_get_abi_arch): Likewise. - (md_begin): Set values of sp/fp/ra registers. - * gas/config/tc-aarch64.h (aarch64_support_sframe_p): New - declaration. - (support_sframe_p): Likewise. - (SFRAME_CFA_SP_REG): Likewise. - (SFRAME_CFA_FP_REG): Likewise. - (SFRAME_CFA_RA_REG): Likewise. - (aarch64_sframe_ra_tracking_p): Likewise. - (sframe_ra_tracking_p): Likewise. - (aarch64_sframe_cfa_ra_offset): Likewise. - (sframe_cfa_ra_offset): Likewise. - (aarch64_sframe_get_abi_arch): Likewise. - (sframe_get_abi_arch): Likewise. - * gas/config/tc-i386.c (x86_support_sframe_p): New definition. - (x86_sframe_ra_tracking_p): Likewise. - (x86_sframe_cfa_ra_offset): Likewise. - (x86_sframe_get_abi_arch): Likewise. - * gas/config/tc-i386.h (x86_support_sframe_p): New declaration. - (support_sframe_p): Likewise. - (SFRAME_CFA_SP_REG): Likewise. - (SFRAME_CFA_FP_REG): Likewise. - (x86_sframe_ra_tracking_p): Likewise. - (sframe_ra_tracking_p): Likewise. - (x86_sframe_cfa_ra_offset): Likewise. - (sframe_cfa_ra_offset): Likewise. - (x86_sframe_get_abi_arch): Likewise. - (sframe_get_abi_arch): Likewise. - * gas/config/tc-xtensa.c (unrelaxed_frag_max_size): Add case for - rs_sframe. - * gas/doc/as.texi: Add .sframe to the documentation for - .cfi_sections. - * gas/dw2gencfi.c (cfi_finish): Create a .sframe section. - * gas/dw2gencfi.h (CFI_EMIT_sframe): New definition. - * gas/write.c (cvt_frag_to_fill): Handle rs_sframe. - (relax_segment): Likewise. - * gas/gen-sframe.c: New file. - * gas/gen-sframe.h: New file. - * gas/sframe-opt.c: New file. - -2022-11-15 Indu Bhagat - - gas: add new command line option --gsframe - When --gsframe is specified, the assembler will generate a .sframe - section from the CFI directives in the assembly. - - ChangeLog: - - * gas/as.c (parse_args): Parse args and set flag_gen_sframe. - * gas/as.h: Introduce skeleton for --gsframe. - * gas/doc/as.texi: document --gsframe. - -2022-11-15 Indu Bhagat - - sframe.h: Add SFrame format definition - The header sframe.h defines the SFrame format. - - The SFrame format is the Simple Frame format. It can be used to - represent the minimal necessary unwind information required for - backtracing. The current version supports AMD64 and AARCH64. - - More details of the SFrame format are included in the documentation - of the header file in this patch. - - include/ChangeLog: - * sframe.h: New file. - -2022-11-15 Alan Modra - - Re: [gas] arm: Add support for new unwinder directive ".pacspval". - * testsuite/gas/arm/ehabi-pacbti-m.d: Limit test to ELF. - -2022-11-15 Alan Modra - - aarch64-pe can't fill 16 bytes in section .text - Without commit b66e671854, this: - .p2align 4 - nop - .p2align 3 - nop - results in an error when coff_frob_section attempts to pad out the - section to a 16-byte boundary. Due to miscalculating the pad pattern - repeat count, write.c:write_contents attempts to shove 16 bytes of - padding into the remaining 4 bytes of the .text section. - - * config/obj-coff.c (coff_frob_section): Correct fill count. - Don't pad after errors. - -2022-11-15 Jose E. Marchesi - - gdb/configure: regenerate - The commit bbaabc767a4293492817a0840819aef2768cce90 introduced an - incorrect thunk for the `configure' script. This patch regenerates - configure by calling autoreconf. - -2022-11-15 Jose E. Marchesi - - gdb: use libtool in GDB_AC_CHECK_BFD - The GDB_AC_CHECK_BFD macro defined in gdb/acinclude.m4 uses the - AC_LINK_IFELSE autoconf macro in order to link a simple program to - check features of libbfd. - - If libbfd's link dependencies change, it was necessary to reflect them - either in the definition of the macro, or as a consequence of checking - for them with an autoconf macro resulting in an addition to LIBS. - - This patch modifies the definition of the GDB_CHECK_BFD macro in order - to use libtool to perform the test link. This makes it possible to - not have to list dependencies of libbfd (which are indirect to GDB) at - all. - - After this patch: - - configure:28553: checking for ELF support in BFD - configure:28573: ./libtool --quiet --mode=link gcc -o conftest \ - -I../../gdb/../include -I../bfd \ - -I../../gdb/../bfd -g -O2 \ - -L../bfd -L../libiberty conftest.c -lbfd -liberty \ - -lncursesw -lm -ldl >&5 - configure:28573: $? = 0 - configure:28583: result: yes - - Tests performed: - - - Configure --with-system-zlib and --without-system-zlib. - - Check link dependencies of installed GDB with both --enable-shared - and --disable-shared. - - Run installed GDB in both cases. - - Approved-By: Simon Marchi - -2022-11-15 Tom Tromey - - Fix crash in ada_print_type - The "varstring" paramter to ada_print_type can be null, but one spot - failed to check this. This could cause a crash in some situations. - - As this is Ada-specific, and we've been using it internally at AdaCore - for a while, I am going to push it. - -2022-11-15 Tejas Joshi - - Add AMD znver4 processor support - 2022-09-28 Tejas Joshi - - gas/ - - * config/tc-i386.c (cpu_arch): Add znver4 ARCH and rmpquery SUBARCH. - (md_assemble): Expand comment before swap_operands() with rmpquery. - * doc/c-i386.texi: Add znver4. - * testsuite/gas/i386/arch-14-1.d: New. - * testsuite/gas/i386/arch-14-1.s: New. - * testsuite/gas/i386/arch-14-znver4.d: New. - * testsuite/gas/i386/i386.exp: Add new znver4 test cases. - * testsuite/gas/i386/rmpquery.d: New. - * testsuite/gas/i386/rmpquery.s: New. - * testsuite/gas/i386/x86-64-arch-4-1.d: New. - * testsuite/gas/i386/x86-64-arch-4-1.s: New. - * testsuite/gas/i386/x86-64-arch-4-znver4.d: New. - - opcodes/ - - * i386-dis.c (x86_64_table): Add rmpquery. - * i386-gen.c (cpu_flag_init): Add CPU_ZNVER4_FLAGS and - CPU_RMPQUERY_FLAGS. - (cpu_flags): Add CpuRMPQUERY. - * i386-opc.h (enum): Add CpuRMPQUERY. - (i386_cpu_flags): Add cpurmpquery. - * i386-opc.tbl: Add rmpquery insn. - * i386-init.h: Re-generated. - * i386-tbl.h: Re-generated. - -2022-11-15 Simon Marchi - - gdb/testsuite: get_set_option_choices: expect \r\n after each item - I get some random failures since commit 8d45c3a82a0e ("[gdb/testsuite] - Set completions to unlimited in get_set_option_choices"), which can be - reproduced with: - - $ make check-read1 TESTS="gdb.base/parse_number.exp" - - For instance: - - set architecture A^M - Ambiguous item "A".^M - (gdb) FAIL: gdb.base/parse_number.exp: arch=A: set architecture A - - The problem is the regexp in get_set_option_choices, it is possible that - is only matches part of a completion result. With check-read1, that is - always one letter. - - Fix this by expecting the \r\n at the end of the line, so we only match - entire results. Use ^ in match patterns to ensure we don't miss any - output. - - Approved-By: Tom de Vries - Change-Id: Ib1733737feab7dde0f7095866e089081a891054e - -2022-11-15 Andre Vieira - - aarch64, testsuite: Fixed recently added cssc.d - Fixed wrong paste in cssc.d. - - gas/ChangeLog: - - * testsuite/gas/aarch64/cssc.d: Removed duplicate head. - -2022-11-15 Tom de Vries - - [gdb/testsuite] Normalize gdbserver path name - Currently for the target board remote-gdbserver-on-localhost we use the - gdbserver file on build, using a file name which includes "/../". - - Fix this by using a normalized file name instead. - - This allows us to be more restrictive about which files REMOTE_TARGET_USERNAME - can access: - ... - - remote_exec build "chmod go-rx $objdir/outputs" - + remote_exec build "chmod go-rx $objdir" - ... - - Tested on x86_64-linux. - -2022-11-15 Tom de Vries - - [gdb/testsuite] Fix gdb.base/jit-elf-so.exp for remote target - With test-case gdb.base/jit-elf-so.exp and target board - remote-gdbserver-on-localhost (using REMOTE_TARGET_USERNAME) we run into some - failures. - - Fix these by: - - setting jit_libname with the name as returned by gdb_load_shlib - - allowing the libraries to be prefixed with the remote target directory. - - Tested on x86_64-linux. - - Co-Authored-by: Ivan Tetyushkin - -2022-11-15 Tom de Vries - - [gdb/testsuite] Fix gdb.base/jit-reader-exec.exp for remote target - With test-case gdb.base/jit-reader-exec.exp and target board - remote-gdbserver-on-localhost (using REMOTE_TARGET_USERNAME) we run into some - failures. - - Fix this by adding the missing gdb_remote_download. - - Tested on x86_64-linux. - - Co-Authored-by: Ivan Tetyushkin - -2022-11-15 Tom de Vries - - [gdb/testsuite] Fix gdb.base/info-shared.exp for remote target - With test-case gdb.base/info-shared.exp and target board - remote-gdbserver-on-localhost (using REMOTE_TARGET_USERNAME) we run into some - failures. - - Fix these by adding the missing gdb_load_shlib. - - Tested on x86_64-linux. - - Co-Authored-by: Ivan Tetyushkin - -2022-11-15 Tom de Vries - - [gdb/testsuite] Fix gdb.base/solib-vanish.exp for remote target - When running test-case gdb.base/solib-vanish.exp with target board - remote-gdbserver-on-localhost (using REMOTE_TARGET_USERNAME) we run into some - failures. - - Fix these by adding the missing gdb_load_shlib. - - Tested on x86_64-linux. - - Co-Authored-by: Ivan Tetyushkin - -2022-11-15 Tom de Vries - - [gdb/testsuite] Fix gdb.base/infcall-exec.exp for remote target - When running test-case gdb.base/infcall-exec.exp with target board - remote-gdbserver-on-localhost (using REMOTE_TARGET_USERNAME) we run into: - ... - (gdb) call (int) execlp ("$outputs/gdb.base/infcall-exec/infcall-exec2", \ - "$outputs/gdb.base/infcall-exec/infcall-exec2", (char *)0)^M - $1 = -1^M - (gdb) FAIL: gdb.base/infcall-exec.exp: call execlp - ... - - Fix this by using just: - ... - (gdb) call (int) execlp ("infcall-exec2", "infcall-exec2", (char *)0)^M - ... - and using putenv ("PATH=...") to allow infcall-exec to exec infcall-exec2 - if it's available alongside. - - Also fix the exec name in the test-case, such that we can successfully - run the test-case: - ... - $ ./outputs/gdb.base/infcall-exec/infcall-exec - PATH SETTING: 'PATH=./outputs/gdb.base/infcall-exec' - $ - ... - - Tested on x86_64-linux. - - Co-Authored-by: Ivan Tetyushkin - -2022-11-15 Tom de Vries - - [gdb/testsuite] Fix gdb.base/print-file-var.exp for remote target - When running test-case gdb.base/print-file-var.exp with target board - remote-gdbserver-on-localhost (using REMOTE_TARGET_USERNAME) we run into some - failures. - - Fix these by using the name of a shared lib as returned by gdb_load_shlib. - - This required splitting up the gdb_load_shlib functionality, which is now - defined as: - ... - proc gdb_load_shlib { file } { - set dest [gdb_download_shlib $file] - gdb_locate_shlib $file - return $dest - } - ... - such that we can do gdb_download_shlib before gdb is started. - - Tested on x86_64-linux. - - Co-Authored-by: Ivan Tetyushkin - -2022-11-15 Tom de Vries - - [gdb/testsuite] Add REMOTE_TARGET_USERNAME in remote-gdbserver-on-localhost.exp - As reported here - ( https://sourceware.org/pipermail/gdb-patches/2022-October/193147.html ) a - number of test-cases fails with a remote target setup, for instance test-case - gdb.base/print-file-var.exp. - - So, why don't we see these fails with our remote target boards in - gdb/testsuite/boards, say remote-gdbserver-on-localhost.exp? - - The problem is that the target board uses the same machine and user for - both (by-definition-local) build and remote target, and when using absolute - pathnames to refer to files on build, we can access those files on target, - which in a real remote target setup wouldn't be the case: we'd have to - download them to target first, and then the filename would also be different. - - For aforementioned test-case, this happens when the name of a shared library is - passed as absolute file name to gcc: - ... - gcc ... -DSHLIB_NAME="$outputs/gdb.base/print-file-var/\ - print-file-var-lib2-hidden0-dlopen1-version_id_main0_c.so" - ... - - Make these problems visible with remote-gdbserver-on-localhost.exp by - adding an option to specify a test account (still on the same machine) - using REMOTE_TARGET_USERNAME. - - We make sure by restricting file permissions, that the test account cannot see - the build files on the $USER account, and that the $USER account cannot see - the target files on the test account. - - And so we can reproduce the reported fails: - ... - $ cd build/gdb - $ tc="gdb.base/print-file-var.exp" - $ tb="--target_board remote-gdbserver-on-localhost" - $ tbu="REMOTE_TARGET_USERNAME=remote-target" - $ make check RUNTESTFLAGS="$tb $tbu $tc" - ... - FAIL: gdb.base/print-file-var.exp: lang=c: hidden=0: dlopen=1: \ - version_id_main=0: continue to STOP marker - ... - - Tested on x86_64-linux. - - Reported-by: Ivan Tetyushkin - -2022-11-15 Tom de Vries - - [gdb/testsuite] Fix gdb.base/info_sources_2.exp for remote target - With test-case gdb.base/info_sources_2.exp and target board - remote-gdbserver-on-localhost (using REMOTE_TARGET_USERNAME) we run into some - failures. - - Fix these by adding the missing gdb_load_shlib. - - Tested on x86_64-linux. - -2022-11-15 Tom de Vries - - [gdb/testsuite] Fix gdb.base/foll-exec.exp for remote target - When running test-case gdb.base/foll-exec.exp with target board - remote-gdbserver-on-localhost.exp, I run into: - ... - (gdb) PASS: gdb.base/foll-exec.exp: insert first exec catchpoint - continue^M - Continuing.^M - [Inferior 1 (process 4476) exited normally]^M - (gdb) FAIL: gdb.base/foll-exec.exp: continue to first exec catchpoint (the program e\ - xited) - ... - - The problem is that the foll-exec executable expects the exec-ed executable - execd-prog alongside it, but it's missing. - - Fix this by adding the missing gdb_remote_download. - - Likewise in a few other test-cases. - - Tested on x86_64-linux. - -2022-11-15 Tom de Vries - - [gdb/testssuite] Skip aarch64 in skip_gdbserver_test if no xml support - On aarch64-linux, with a gdb build without libexpat, so without xml support, I - run into: - ... - (gdb) builtin_spawn attach-no-multi-process^M - attach 26808^M - Attaching to Remote target^M - warning: Can not parse XML target description; XML support was disabled at \ - compile time^M - Reading symbols from attach-no-multi-process...^M - Remote 'g' packet reply is too long (expected 788 bytes, got 796 bytes): ... ^M - ... - - The test-case checks for skip_gdbserver_tests and that one contains a check - for xml support: - ... - # If GDB is lack of XML support, and targets, like arm, have - # multiple target descriptions, GDB doesn't know which target - # description GDBserver uses, and may fail to parse 'g' packet - # after connection. - if { [gdb_skip_xml_test] - && ([istarget "arm*-*-linux*"] - || [istarget "mips*-*-linux*"] - || [istarget "powerpc*-*-linux*"] - || [istarget "s390*-*-linux*"] - || [istarget "x86_64-*-linux*"] - || [istarget "i\[34567\]86-*-linux*"]) } { - return 1 - } - ... - but it doesn't trigger because aarch64 is missing. - - Fix this by adding istarget "aarch64*-*-linux*". - - Tested on aarch64-linux. - - Approved-By: Luis Machado - -2022-11-15 Aditya Vidyadhar Kamath - - Enable multi-process debugging for AIX - This patch adds multi-process debugging feature in AIX. - - Till now AIX supported debugging only one inferior at a time, - now we can be able to debug multi process. Users can use set - follow fork mode in child or parent and set detach on fork on - or off to enable/disable simultaneous debugging of parent/child. - -2022-11-15 GDB Administrator - - Automatic date update in version.in - -2022-11-14 Carl Love - - PowerPC, fix support for printing the function return value for non-trivial values. - Currently, a non-trivial return value from a function cannot currently be - reliably determined on PowerPC. This is due to the fact that the PowerPC - ABI uses register r3 to store the address of the buffer containing the - non-trivial return value when the function is called. The PowerPC ABI - does not guarantee the value in register r3 is not modified in the - function. Thus the value in r3 cannot be reliably used to obtain the - return addreses on exit from the function. - - This patch adds a new gdbarch method to allow PowerPC to access the value - of r3 on entry to a function. On PowerPC, the new gdbarch method attempts - to use the DW_OP_entry_value for the DWARF entries, when exiting the - function, to determine the value of r3 on entry to the function. This - requires the use of the -fvar-tracking compiler option to compile the - user application thus generating the DW_OP_entry_value in the binary. The - DW_OP_entry_value entries in the binary file allows GDB to resolve the - DW_TAG_call_site entries. This new gdbarch method is used to get the - return buffer address, in the case of a function returning a nontrivial - data type, on exit from the function. The GDB function should_stop checks - to see if RETURN_BUF is non-zero. By default, RETURN_BUF will be set to - zero by the new gdbarch method call for all architectures except PowerPC. - The get_return_value function will be used to obtain the return value on - all other architectures as is currently being done if RETURN_BUF is zero. - On PowerPC, the new gdbarch method will return a nonzero address in - RETURN_BUF if the value can be determined. The value_at function uses the - return buffer address to get the return value. - - This patch fixes five testcase failures in gdb.cp/non-trivial-retval.exp. - The correct function return values are now reported. - - Note this patch is dependent on patch: "PowerPC, function - ppc64_sysv_abi_return_value add missing return value convention". - - This patch has been tested on Power 10 and x86-64 with no regressions. - -2022-11-14 Carl Love - - PowerPC, function ppc64_sysv_abi_return_value add missing return value convention - This patch address five testcase failures in gdb.cp/non-trivial-retval.exp. - The following commit resulted in the five testcases failures on PowerPC. - The value returned by the function is being reported incorrectly. - - commit b1718fcdd1d2a5c514f8ee504ba07fb3f42b8608 - Author: Andrew Burgess - Date: Mon Dec 13 16:56:16 2021 +0000 - - gdb: on x86-64 non-trivial C++ objects are returned in memory - - Fixes PR gdb/28681. It was observed that after using the `finish` - command an incorrect value was displayed in some cases. Specifically, - this behaviour was observed on an x86-64 target. - - The function: - - enum return_value_convention - ppc64_sysv_abi_return_value (struct gdbarch *gdbarch, struct value *function, - struct type *valtype, struct regcache *regcache, - gdb_byte *readbuf, const gdb_byte *writebuf) - - should return RETURN_VALUE_STRUCT_CONVENTION if the valtype->code() is - TYPE_CODE_STRUCT and if the language_pass_by_reference is not - trivially_copyable. - - This patch adds the needed code to return the value - RETURN_VALUE_STRUCT_CONVENTION in this case. - - With this patch, the five test cases still fail but with the message "Value - returned has type: A. Cannot determine contents". The PowerPC ABI stores - the address of the buffer containing the function return value in register - r3 on entry to the function. However, the PowerPC ABI does not guarentee - that r3 will not be modified in the function. So when the function returns, - the return buffer address cannot be reliably obtained from register r3. - Thus the message "Cannot determine contents" is appropriate in this case. - -2022-11-14 Tom Tromey - - Remove dump_prefix_expression - Since the expression rewrite, dump_prefix_expression has been - misnamed. This patch cleans this up by removing the function, turning - it into a method on struct expression. - -2022-11-14 Andre Vieira - - aarch64: Add support for Common Short Sequence Compression extension - This patch adds support for the CSSC extension and its corresponding - instructions: ABS, CNT, CTZ, SMAX, UMAX, SMIN, UMIN. - - gas/ChangeLog: - - * config/tc-aarch64.c (parse_operands): Handle new operand types. - * doc/c-aarch64.texi: Document new extension. - * testsuite/gas/aarch64/cssc.d: New test. - * testsuite/gas/aarch64/cssc.s: New test. - - include/ChangeLog: - - * opcode/aarch64.h (AARCH64_FEATURE_CSSC): New feature Macro. - (enum aarch64_opnd): New operand types. - (enum aarch64_insn_class): New instruction class. - - opcodes/ChangeLog: - - * aarch64-asm-2.c: Regenerate. - * aarch64-dis-2.c: Regenerate. - * aarch64-opc-2.c: Regenerate. - * aarch64-opc.c (operand_general_constraint_met_p): Update for new - operand types. - (aarch64_print_operand): Likewise. - * aarch64-opc.h (enum aarch64_field_kind): Declare FLD_CSSC_imm8 field. - * aarch64-tbl.h (aarch64_feature_cssc): Define new feature set. - (CSSC): Define new feature set Macro. - (CSSC_INSN): Define new instruction type. - (aarch64_opcode_table): Add new instructions. - -2022-11-14 Jan Beulich - - x86: fold special-operand insn attributes into a single enum - Attributes which aren't used together in any single insn template can be - converted from individual booleans to a single enum, as was done for a few - other attributes before. This is more space efficient. Collect together - all attributes which express special operand constraints (and which fit - the criteria for folding). - -2022-11-14 Dimitar Dimitrov - - pru: bfd: Correct default to no execstack - Data and instruction memories are strictly separated, so it is not - possible to execute instructions from the stack memory on PRU. - - I don't see any difference in testsuite results with or without this - change. - - bfd/ChangeLog: - - * elf32-pru.c (elf_backend_default_execstack): Define as 0. - - ld/ChangeLog: - - * testsuite/ld-elf/elf.exp (target_defaults_to_execstack): - Return 0 for pru. - -2022-11-14 Srinath Parvathaneni - - [gas] arm: Add support for new unwinder directive ".pacspval". - This patch adds the assembler support for the new unwinder - directive ".pacspval" and encodes this directives with opcode - "0xb5". This opcode indicates the unwinder to use effective - vsp as modifier for PAC validation. - - gas/ChangeLog: - - 2022-11-07 Srinath Parvathaneni - - * doc/c-arm.texi: Document directive. - * config/tc-arm.c (s_arm_unwind_pacspval): Define function. - (md_pseudo_table): Add entry for pacspval directive. - * testsuite/gas/arm/ehabi-pacbti-m.d: New test. - * testsuite/gas/arm/ehabi-pacbti-m.s: Likewise. - -2022-11-14 Srinath Parvathaneni - - [readelf] arm: Support for new pacbti unwind opcode 0xb5. - This patch adds readelf support for decoding the exception - table opcode "0xb5", which indicates to use effective vsp - as modifier for PAC validation as defined by EHABI - (https://github.com/ARM-software/abi-aa/releases/download/2022Q3/ehabi32.pdf - Section 10.3). - - binutils/ChangeLog: - - 2022-11-07 Srinath Parvathaneni - - * readelf.c (decode_arm_unwind_bytecode): Add entry to decode opcode 0xb5. - -2022-11-14 Tsukasa OI - - gdb/unittests: PR28413, suppress warnings generated by Gnulib - Gnulib generates a warning if the system version of certain functions - are used (to redirect the developer to use Gnulib version). It caused a - compiler error when... - - - Compiled with Clang - - -Werror is specified (by default) - - C++ standard used by Clang is before C++17 (by default as of 15.0.0) - when this unit test is activated. - - This issue is raised as PR28413. - - However, previous proposal to fix this issue (a "fix" to Gnulib): - - was rejected because it ruins the intent of Gnulib warnings. - - So, we need a Binutils/GDB-side solution. - - This commit tries to address this issue on the GDB side. We have - "include/diagnostics.h" to disable certain warnings only when necessary. - - This commit suppresses the Gnulib warnings by surrounding entire #include - block with DIAGNOSTIC_IGNORE_USER_DEFINED_WARNINGS to disable Gnulib- - generated warnings on all standard C++ header files. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28413 - Approved-By: Simon Marchi - Change-Id: Ieeb5a31a6902808d4c7263a2868ae19a35e0ccaa - -2022-11-14 Srinath Parvathaneni - - arm: Add support for Cortex-X1C CPU. - This patch adds support for Cortex-X1C CPU in Arm. - - bfd/ChangeLog: - - 2022-11-09 Srinath Parvathaneni - - * cpu-arm.c (processors): Add Cortex-X1C CPU entry. - - gas/ChangeLog: - - 2022-11-09 Srinath Parvathaneni - - * NEWS: Update docs. - * config/tc-arm.c (arm_cpus): Add cortex-x1c to -mcpu. - * doc/c-arm.texi: Update docs. - * testsuite/gas/arm/cpu-cortex-x1c.d: New test. - -2022-11-14 Tom de Vries - - [gdb/testsuite] Run gdb.arch/ppc64-symtab-cordic.exp for --enable-targets=all - While looking at test-case gdb.arch/ppc64-symtab-cordic.exp I realized that - the test-case is too restrictive here: - ... - if {![istarget "powerpc*"] || ![is_lp64_target]} { - verbose "Skipping powerpc64 separate debug file symtab test." - return - } - ... - and can also be run on x86_64-linux, if "set arch powerpc:common64" is - supported, which is the case if we've build gdb with --enable-targets=all. - - Fix this by instead checking if powerpc:common64 is in the completion list for - "set arch". - - This allows us to remove the 'untested "powerpc:common64 is not supported"'. - - While we're at it, clean up the test-case by using clean_restart. - - Tested on x86_64-linux. - -2022-11-14 Tom de Vries - - [gdb/testsuite] Handle with_set arch - I realized that the more irregular output of show arch: - ... - (gdb) show arch^M - The target architecture is set to "auto" (currently "i386").^M - ... - would be a problem for something like: - ... - with_set arch powerpc:common64 {} - ... - and indeed: - ... - (gdb) set arch powerpc:common64^M - The target architecture is set to "powerpc:common64".^M - (gdb) FAIL: gdb.base/foo.exp: set arch powerpc:common64 - ... - and: - ... - (gdb) set arch set to "auto" (currently "i386")^M - Undefined item: "set".^M - ... - - Fix this in with_set by handling this type of output. - - Tested on x86_64-linux. - -2022-11-14 Tom de Vries - - [gdb/testsuite] Set completions to unlimited in get_set_option_choices - In some test-case I tried to use get_set_option_choices "set architecture" and - ran into max-completions: - ... - set architecture simple^M - set architecture tomcat^M - set architecture xscale^M - set architecture *** List may be truncated, max-completions reached. ***^M - (gdb) PASS: gdb.base/foo.exp: complete set architecture - ... - - There's only one test-case using this currently: gdb.base/parse_number.exp, - and it locally sets max-completions to unlimited. - - Fix this by: - - factoring out a new proc with_set out of proc with_complaints, and - - using it to temporarily set max-completions to unlimited in - get_set_option_choice. - - Tested on x86_64-linux, by running test-cases that excercise - get_set_option_choice and with_complaints. - -2022-11-14 Alan Modra - - Re: objcopy renaming section with explicit flags - For now, xfail the new test. Some header/aux-header rewriting is - required at the very least. - - * testsuite/binutils-all/rename-section-01.d: xfail xcoff. - -2022-11-14 Alan Modra - - objcopy renaming section with explicit flags - This tidies SEC_RELOC handling in bfd, in the process fixing a bug - with objcopy when renaming sections. - - bfd/ - * reloc.c (_bfd_generic_set_reloc): Set/clear SEC_RELOC depending - on reloc count. - * elf64-sparc.c (elf64_sparc_set_reloc): Likewise. - binutils/ - * objcopy.c (copy_relocations_in_section): Remove now unnecessary - clearing of SEC_RELOC. - * testsuite/binutils-all/rename-section-01.d: New test. - * testsuite/binutils-all/objcopy.exp: Run it. - gas/ - * write.c (size_seg): Remove unneccesary twiddle of SEC_RELOC. - (write_relocs): Likewise. Always call bfd_set_reloc. - -2022-11-14 GDB Administrator - - Automatic date update in version.in - -2022-11-13 Jon Turney - - Fix Cygwin build after 02d04eac - Commit 02d04eac "Use strwinerror in gdb/windows-nat.c" also moves - strwinerror() under the USE_WIN32API conditional, which is not defined - for Cygwin (and looks like it shouldn't be, as appears to imply - non-POSIX and MiNGW and WinSock...) - - Also enable the declaration and definition of strwinerror() when - __CYGWIN__ is defined. - -2022-11-13 Jon Turney - - Drop apparently unneeded include of winsock2.h - Commit d08bae3d ("Implement target async for Windows") unconditionally - includes winsock2.h. We don't want to do that on Cygwin, since - including both winsock2.h and sys/select.h causes incompatible - redefinition problems. - - Since that include is apparently unneeded, just drop it. - - Fixes: d08bae3d - -2022-11-13 GDB Administrator - - Automatic date update in version.in - -2022-11-12 Dimitar Dimitrov - - sim: pru: Fix behaviour when loop count is zero - If the counter for LOOP instruction is provided by a register with - value zero, then the instruction must cause a PC jump directly to the - loop end. But in that particular case simulator must not initialize - its internal loop variables, because loop body will not be executed. - Instead, simulator must obtain the loop's end address directly from - the LOOP instruction. - -2022-11-12 Alan Modra - - PowerPC64 paddi -Mraw - On a testcase like - pla 8,foo@pcrel - disassembled with -Mpower10 results in - 0: 00 00 10 06 pla r8,0 # 0 - 4: 00 00 00 39 - 0: R_PPC64_PCREL34 foo - but with -Mpower10 -Mraw - 0: 00 00 10 06 .long 0x6100000 - 0: R_PPC64_PCREL34 foo - 4: 00 00 00 39 addi r8,0,0 - - The instruction is unrecognised due to the hack we have in - extract_pcrel0 in order to disassemble paddi with RA0=0 and R=1 as - pla. I could have just added "&& !(dialect & PPC_OPCODE_RAW)" to the - condition in extract_pcrel0 under which *invalid is set, but went for - this larger patch that reorders the extended insn pla to the more - usual place before its underlying machine insn. (la is after addi - because we never disassemble to la.) - - gas/ - * testsuite/gas/ppc/raw.d, - * testsuite/gas/ppc/raw.s: Add pla. - opcodes/ - * ppc-opc.c (extract_pcrel1): Rename from extract_pcrel0 and - invert *invalid logic. - (PCREL1): Rename from PCREL0. - (prefix_opcodes): Sort pla before paddi, adjusting R operand - for pla, paddi and psubi. - -2022-11-12 Indu Bhagat - - libctf: use libtool for link test in configure - The configure check for ELF support in BFD uses the AC_TRY_LINK. If - libbfd's dependencies change, this macro will need to be updated - manually with explicit additions to LDFLAGS and LIBS. - - This patch updates the check to use libtool instead. - - ChangeLog: - - * libctf/configure.ac: Use libtool instead. - * libctf/configure: Regenerated. - -2022-11-12 GDB Administrator - - Automatic date update in version.in - -2022-11-11 Simon Marchi - - gdb: fix start breakpoint expression not working in some languages - Commit 0be837be9fb4 ("gdb: make "start" breakpoint inferior-specific") - regresses gdb.ada/start.exp: - - (gdb) start - Error in expression, near `1'. - (gdb) UNTESTED: gdb.ada/start.exp: start failed to land inside the right procedure - - This is because in Ada, the equality operator is =, not ==. - - I checked the other languages supported by GDB, these other languages - use = for equality: - - - Pascal: tests like gdb.pascal/hello.exp are affected too - - Modula-2: I tried building a Modula-2 hello world using gm2, but it - seems like the generated DWARF doesn't specify the Modula-2 language - in the CUs, it's C++ and C, so the selected language isn't - "modula-2". But if I manually do "set language modula-2" on a dummy - program and then "start", I get the same error. - - Other languages all use ==. - - So, a short term fix would be to use = or == in the expression, based on - the current language. If this was meant to be permanent, I would - suggest adding something like an "equality_operator" method to - language_defn, that returns the right equality operator for the - language. But the goal is to replace all this with proper - inferior-specific breakpoints, so I hope all this is temporary. - - Approved-By: Tom de Vries - Change-Id: Id4d38e14a80e6bbbb1ad2b2277f974dd55192969 - -2022-11-11 Mike Frysinger - - sim: igen: cleanup archaic pointer-to-long printf casts - Use proper %p to printf a pointer instead of casting it to long and - using 0x%lx. It's cleaner, more correct, and doesn't break on LLP64. - -2022-11-11 Tom de Vries - - [gdb/testsuite] Don't timeout on prompt in gdb_start_cmd - We're currently running into a timeout at: - ... - (gdb) start ^M - Error in expression, near `1'.^M - (gdb) UNTESTED: gdb.ada/start.exp: start failed to land inside the right \ - procedure - ... - due to the fact that gdb_start_cmd doesn't handle a prompt as reaction to - the start command. - - Fix this by handling the prompt. Reduces execution time of the test-case from - 1m1s to 1s. - - Tested on x86_64-linux. - -2022-11-11 Tom de Vries - - [gdb/testsuite] Better error checking in has_hw_wp_support - With gdb 12.1, on powerpc64le I ran into ERRORs related to has_hw_wp_support - usage, which was already fixed on trunk by commits: - - 13f72372413 ("gdb/testsuite: fix gdb.base/break-idempotent.exp on ppc"), and - - 01a32ee0b8c ("PowerPC, fix gdb.base/watchpoint.exp on Power 9") - - While looking into these ERRORs and the commits that fix them, it occurred to - me that while the commits fix the root cause, the failure mode is not great. - - The test-cases expect a running instance of gdb upon return, which is not - there, so there's an long stream of ERRORs generated as a result. - - Fix this at the start of has_hw_wp_support, by (instead of accomodating a - running gdb instance by calling gdb_exit), checking whether it's called - without a running gdb instance, and erroring out otherwise. This way, there's - just one error. - - I also noticed that in case we do an early exit due to !runto_main, we don't - clean up, so copy the missing cleanups (gdb_exit and $obj file deletion) from - the regular exit. - - Tested on x86_64-linux, using has_hw_wp_support for x86_64 in - skip_hw_watchpoint_tests. - -2022-11-11 Lancelot SIX - - gdb/py-inferior: Keep inferior threads in a map - The python code maintains a list of threads for each inferior. This - list is implemented as a linked list. When the number of threads grows - high, this implementation can begin to be a performance bottleneck as - finding a particular thread_object in the list has a complexity of O(N). - - We see this in ROCgdb[1], a downstream port of GDB for AMDGUP. On - AMDGPU devices, the number of threads can get significantly higher than - on usual GDB workloads. - - In some situations, we can reach the end of the inferior process with - GDB still having a substantial list of known threads. While running - target_mourn_inferior, we end up in inferior::clear_thread_list which - iterates over all remaining threads and marks each thread exited. This - fires the gdb::observers::thread_exit observer and eventually - py-inferior.c:set_thread_exited gets called. This function searches in - the linked list with poor performances. - - This patch proposes to change the linked list that keeps the per - inferior_object list of thread_objects into a std::unordered_map. This - allows to have the search operation complexity be O(1) on average - instead of O(N). - - With this patch, we can complete clear_thread_list in about 2.5 seconds - compared to 10 minutes without it. - - Except for the performance change, no user visible change is expected. - - Regression tested on Ubuntu-22.04 x86_64. - - [1] https://github.com/ROCm-Developer-Tools/ROCgdb - -2022-11-11 Luis Machado - - Make sure a copy_insn_closure is available when we have a match in copy_insn_closure_by_addr - PR gdb/29272 - - Investigating PR29272, it was mentioned a particular test used to work on - GDB 10, but it started failing with GDB 11 onwards. I tracked it down to - some displaced stepping improvements on commit - 187b041e2514827b9d86190ed2471c4c7a352874. - - In particular, one of the corner cases using copy_insn_closure_by_addr got - silently broken. It is hard to spot because it doesn't have any good tests - for it, and the situation is quite specific to the Arm target. - - Essentially, the change from the displaced stepping improvements made it so - we could still invoke copy_insn_closure_by_addr correctly to return the - pointer to a copy_insn_closure, but it always returned nullptr due to - the order of the statements in displaced_step_buffer::prepare. - - The way it is now, we first write the address of the displaced step buffer - to PC and then save the copy_insn_closure pointer. - - The problem is that writing to PC for the Arm target requires figuring - out if the new PC is thumb mode or not. - - With no copy_insn_closure data, the logic to determine the thumb mode - during displaced stepping doesn't work, and gives random results that - are difficult to track (SIGILL, SIGSEGV etc). - - Fix this by reordering the PC write in displaced_step_buffer::prepare - and, for safety, add an assertion to - displaced_step_buffer::copy_insn_closure_by_addr so GDB stops right - when it sees this invalid situation. If this gets broken again in the - future, it will be easier to spot. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29272 - - Approved-By: Simon Marchi - -2022-11-11 Felix Willgerodt - - gdb, btrace: Fix rn-dl-bind.exp for new icx remark. - When running the test with the latest Intel compiler: - - Running gdb/gdb/testsuite/gdb.btrace/rn-dl-bind.exp ... - gdb compile failed, icpx: warning: treating 'c' input as 'c++' when - in C++ mode, this behavior is deprecated [-Wdeprecated] - - The test doesn't seem to test something specifically for C++, - so I removed the C++ compilation option. Alternatively we could rename - rn-dl-bind.exp.c to rn-dl-bind.exp.cc. - -2022-11-11 Bruno Larsen - - gdb/testsuite: disable gdb.cp/call-method-register.exp when not using gcc - The test gdb.cp/call-method-register.exp assumes that the class will be - placed on a register. However, this keyword has been deprecated since - C++11, and Clang, for instance, does not feel the need to follow it. - Since this test is not usable without this working, this commit marks - this test as untested. - - Approved-by: Tom Tromey - -2022-11-11 Bruno Larsen - - gdb/testsuite: remove XFAIL on gdb.cp/temargs.exp - gdb.cp/temargs.exp last 2 tests always setup an XFAILs, despite checking - for old gcc versions. However, Clang does not fail in this test, - turning into XPASSes and slighty annoying when comparing between - compilers. To change this, make the xfails only happen if we using gcc. - - Approved-by: Tom Tromey - -2022-11-11 Bruno Larsen - - gdb/testsuite: disable some tests of gdb.cp/typeid.exp when using Clang - Since Clang chooses to not add any debug information for base types, - expecting it to be included with libraries' informations, gdb.cp/typeid.exp - will always fail if the program hasn't started. This commit fixes that by - making it so when using Clang, the base type variables aren't tested. - - Approved-by: Tom Tromey - -2022-11-11 Bruno Larsen - - gdb/testsuite: skip gdb.cp/anon-struct.exp when using Clang - When Clang compiles anonymous structures, it does not add linkage names in - their dwarf representations. This is compounded by Clang not adding linkage - names to subprograms of those anonymous structs (for instance, the - constructor). With these 2 things together, GDB is unable to refer to - any of them, so there is no way to pass any of the tests of - gdb.cp/anon-struct.exp - - Since this isn't a bug on Clang or GDB according to the DWARF - specifications as DW_AT_name is optional for all DIEs, the test was marked - as untested. - - Since I was already touching the file, I also added a comment at the top - of the file explaining what it is testing for. - - Approved-by: Tom Tromey - -2022-11-11 Bruno Larsen - - gdb/testsuite: allow for Clang style destructors on gdb.cp/m-static.exp - when running gdb.cp/m-static.exp using Clang, we get the following - failures: - - print test1.~gnu_obj_1^M - $6 = {void (gnu_obj_1 * const)} 0x555555555470 ^M - (gdb) FAIL: gdb.cp/m-static.exp: simple object instance, print destructor - ptype test1.~gnu_obj_1^M - type = void (gnu_obj_1 * const)^M - (gdb) FAIL: gdb.cp/m-static.exp: simple object instance, ptype destructor - print test1.'~gnu_obj_1'^M - $7 = {void (gnu_obj_1 * const)} 0x555555555470 ^M - (gdb) FAIL: gdb.cp/m-static.exp: simple object instance, print quoted destructor - - This is because the test is expecting an extra integer parameter on the - destructor. Looking at the debuginfo, it seems that there is nothing - actually wrong with this output, so these tests were changed to test - multiple possible regexps. - - Approved-by: Tom Tromey - -2022-11-11 Bruno Larsen - - gdb/testsuite: add XFAIL to gdb.cp/derivation.exp when using Clang - When running gdb.cp/derivation.exp using Clang, we get an unexpected - failure when printing the type of a class with an internal typedef. This - happens because Clang doesn't add accessibility information for typedefs - inside classes (see https://github.com/llvm/llvm-project/issues/57608 - for more info). To help with Clang testing, an XFAIL was added to this - test. - - Approved-by: Tom Tromey - -2022-11-11 Bruno Larsen - - gdb/testsuite: account for clang's nested destructor calls on gdb.cp/mb-ctor.exp - When compiling virtual classes's destructors, two versions are compiled, - one with a single parameter (this) and the other with 2 parameters (this - and vtt). - - GCC's compilation makes it so either the version with 1 - parameter or the one with 2 parameters is called, depending on whether - the destructor is being called by the class itself or by an inherited - class. On the test gdb.cp/mb-ctor.exp, this means that the breakpoint - set at the destructor will be hit 4 times. - - Clang, on the other hand, makes the single-parameter version call the 2 - parameter version, probably in an attempt to reduce the size of the - resulting executable. This means that the gdb.cp/mb-ctor.exp will hit 6 - breakpoints before finishing, and is the reason why this test was - failing. To make this test stop failing, a compiler check is added and - another "continue" instruction is issued to account for this difference. - - Approved-by: Tom Tromey - -2022-11-11 Bruno Larsen - - gdb/testsuite: enable running gdb.cp/classes.exp with clang - When attempting to run the gdb.cp/classes.exp test using Clang++, the - test fails to prepare with -Wnon-c-typedef-for-linkage like the - previously fixed gdb.cp/class2.exp. Upon fixing this, the test shows 5 - unexpected failures. One such failures is: - - ptype/r class class_with_public_typedef - type = class class_with_public_typedef { - private: - int a; - public: - class_with_public_typedef::INT b; - - private: - typedef int INT; - } - (gdb) FAIL: gdb.cp/classes.exp: ptype class class_with_public_typedef // wrong access specifier for typedef: private - - While g++ provided the following output: - - ptype/r class class_with_public_typedef - type = class class_with_public_typedef { - private: - int a; - public: - class_with_public_typedef::INT b; - - typedef int INT; - } - (gdb) PASS: gdb.cp/classes.exp: ptype class class_with_public_typedef - - This error happens because Clang does not add DW_AT_accessibility to - typedefs inside classes, and without this information GDB defaults to - assuming the typedef is private. Since there is nothing that GDB can do - about this, these tests have been set as xfails, and Clang bug 57608 has - been filed. - - Bug: https://github.com/llvm/llvm-project/issues/57608 - Approved-by: Tom Tromey - -2022-11-11 Bruno Larsen - - gdb/testsuite: ignore Non-C-typedefs for gdb.cp/class2.exp - When attempting to test gdb.cp/class2.exp using Clang, it fails to - prepare with the following error: - - Executing on host: clang++ -fdiagnostics-color=never -Wno-unknown-warning-option -c -g -o /home/blarsen/Documents/fsf_build/gdb/testsuite/outputs/gdb.cp/class2/class20.o /home/blarsen/Documents/fsf_build/gdb/testsuite/../../../binutils-gdb/gdb/testsuite/gdb.cp/class2.cc (timeout = 300) - builtin_spawn -ignore SIGHUP clang++ -fdiagnostics-color=never -Wno-unknown-warning-option -c -g -o /home/blarsen/Documents/fsf_build/gdb/testsuite/outputs/gdb.cp/class2/class20.o /home/blarsen/Documents/fsf_build/gdb/testsuite/../../../binutils-gdb/gdb/testsuite/gdb.cp/class2.cc - /home/blarsen/Documents/fsf_build/gdb/testsuite/../../../binutils-gdb/gdb/testsuite/gdb.cp/class2.cc:53:14: warning: anonymous non-C-compatible type given name for linkage purposes by typedef declaration; add a tag name here [-Wnon-c-typedef-for-linkage] - typedef class { - ^ - Dbase - /home/blarsen/Documents/fsf_build/gdb/testsuite/../../../binutils-gdb/gdb/testsuite/gdb.cp/class2.cc:54:2: note: type is not C-compatible due to this member declaration - public: - ^~~~~~~ - /home/blarsen/Documents/fsf_build/gdb/testsuite/../../../binutils-gdb/gdb/testsuite/gdb.cp/class2.cc:58:3: note: type is given name 'Dbase' for linkage purposes by this typedef declaration - } Dbase; - ^ - 1 warning generated. - gdb compile failed, /home/blarsen/Documents/fsf_build/gdb/testsuite/../../../binutils-gdb/gdb/testsuite/gdb.cp/class2.cc:53:14: warning: anonymous non-C-compatible type given name for linkage purposes by typedef declaration; add a tag name here [-Wnon-c-typedef-for-linkage] - typedef class { - ^ - Dbase - /home/blarsen/Documents/fsf_build/gdb/testsuite/../../../binutils-gdb/gdb/testsuite/gdb.cp/class2.cc:54:2: note: type is not C-compatible due to this member declaration - public: - ^~~~~~~ - /home/blarsen/Documents/fsf_build/gdb/testsuite/../../../binutils-gdb/gdb/testsuite/gdb.cp/class2.cc:58:3: note: type is given name 'Dbase' for linkage purposes by this typedef declaration - } Dbase; - ^ - 1 warning generated. - UNTESTED: gdb.cp/class2.exp: failed to prepare - - This can be silenced by adding -Wno-non-c-typedef-for-linkage for Clang - 11 or later. The test shows no failures with this change. - - Approved-by: Tom Tromey - -2022-11-11 Jan Beulich - - gas: accept custom ".linefile ." - While .linefile is generally intended for gas internal use only, its use - in a source file would better not result in an internal error. Give use - of it outside of any macro(-like) construct the meaning of restoring the - original (physical) input file name. - - x86: drop stray IsString from PadLock insns - The need for IsString on the PadLock insns went away with the - introduction of RepPrefixOk. Drop these leftovers. - - x86: drop duplicate sse4a entry from cpu_arch[] - Of the two instances the first is correct in using ANY_SSE4A as 3rd - argument to SUBARCH(), so drop the wrong/redundant/dead 2nd one. - -2022-11-11 Alan Modra - - PR28834, PR26946 sanity checking section size - This patch provides a new function to sanity check section sizes. - It's mostly extracted from what we had in bfd_get_full_section_contents - but also handles compressed debug sections. - Improvements are: - - section file offset is taken into account, - - added checks that a compressed section can be read from file. - - The function is then used when handling multiple .debug_* sections - that need to be read into a single buffer, to sanity check sizes - before allocating the buffer. - - PR 26946, PR 28834 - * Makefile.am (LIBBFD_H_FILES): Add section.c. - * compress.c (bfd_get_full_section_contents): Move section size - sanity checks.. - * section.c (_bfd_section_size_insane): ..to here. New function. - * dwarf2.c (read_section): Use _bfd_section_size_insane. - (_bfd_dwarf2_slurp_debug_info): Likewise. - * Makefile.in: Regenerate. - * libbfd.h: Regenerate. - -2022-11-11 Alan Modra - - Sanity check SHT_MIPS_OPTIONS size - * elfxx-mips.c (_bfd_mips_elf_section_from_shdr): Use - bfd_malloc_and_get_section to read contents of .MIPS.options. - - Re: gold: add --compress-debug-sections=zstd [PR 29641] - Fix the following: - compressed_output.cc:86:8: error: assignment of read-only variable ‘size’ - 86 | size = ZSTD_compress(*compressed_data + header_size, size, uncompressed_data, - -2022-11-11 Fangrui Song - - gold: add --compress-debug-sections=zstd [PR 29641] - This option compresses output debug sections with zstd and sets ch_type - to ELFCOMPRESS_ZSTD. Latest gdb and lldb support ELFCOMPRESS_ZSTD. - - There will be an error if zstd is not enabled at configure time. - - error: --compress-debug-sections=zstd: gold is not built with zstd support - -2022-11-11 Fangrui Song - - gold, dwp: support zstd compressed input debug sections [PR 29641] - This feature is enabled if config/zstd.m4 uses zstd. - -2022-11-11 Vladimir Mezentsev - - gprofng: fix typo in configure.ac - gprofng/ChangeLog - 2022-11-10 Vladimir Mezentsev - - * configure.ac: Fix typo in redirect operator. - * configure: Rebuild. - -2022-11-11 Vladislav Khmelevsky - - Fix adrp distance check - gold/ - * aarch64.cc (aarch64_valid_for_adrp_p): Shift offset - as a signed number. - -2022-11-11 GDB Administrator - - Automatic date update in version.in - -2022-11-10 Mike Frysinger - - sim: v850: rename v850.dc to align with other ports - Other arches use the .dc extension for the instruction decode table. - - sim: igen: fix hang when decoding boolean rule constants - The parser for boolean rules fails to skip over the , separator in - the options which makes it hang forever. No dc files in the tree - use boolean rules atm which is why no one noticed. - - sim: igen: mark error func as noreturn since it exits - - sim: igen: mark output funcs with printf attribute - ... and fix the legitimate bug that it catches. - - sim: igen: constify various func arguments - - sim: ppc: rename ppc-instructions to powerpc.igen - To make it clear this is an input to the igen tool, rename it with an - igen extension. This matches the other files in the ppc dir (altivec - & e500 igen files), and the other igen ports (mips, mn10300, v850). - -2022-11-10 H.J. Lu - - i386: Check invalid (%dx) usage - (%dx) isn't a valid memory address in any modes. It is used as a special - memory operand for input/output port address in AT&T syntax and should - only be used with input/output instructions. Update i386_att_operand to - set i.input_output_operand to true for (%dx) and issue an error if (%dx) - is used with non-input/output instructions. - - PR gas/29751 - * config/tc-i386.c (_i386_insn): Add input_output_operand. - (md_assemble): Issue an error if input/output memory operand is - used with non-input/output instructions. - (i386_att_operand): Set i.input_output_operand to true for - (%dx). - * testsuite/gas/i386/inval.l: Updated. - * testsuite/gas/i386/x86-64-inval.l: Likewise. - * testsuite/gas/i386/inval.s: Add tests for invalid (%dx) usage. - * testsuite/gas/i386/x86-64-inval.s: Likewise. - -2022-11-10 Simon Marchi - - gdb: make "start" breakpoint inferior-specific - I saw this failure on a CI: - - (gdb) add-inferior - [New inferior 2] - Added inferior 2 - (gdb) PASS: gdb.threads/vfork-multi-inferior.exp: method=non-stop: add-inferior - inferior 2 - [Switching to inferior 2 [] ()] - (gdb) PASS: gdb.threads/vfork-multi-inferior.exp: method=non-stop: inferior 2 - kill - The program is not being run. - (gdb) file /home/jenkins/workspace/binutils-gdb_master_linuxbuild/platform/jammy-amd64/target_board/unix/tmp/tmp.GYATAXR8Ku/gdb/testsuite/outputs/gdb.threads/vfork-multi-inferior/vfork-multi-inferior-sleep - Reading symbols from /home/jenkins/workspace/binutils-gdb_master_linuxbuild/platform/jammy-amd64/target_board/unix/tmp/tmp.GYATAXR8Ku/gdb/testsuite/outputs/gdb.threads/vfork-multi-inferior/vfork-multi-inferior-sleep... - (gdb) run & - Starting program: /home/jenkins/workspace/binutils-gdb_master_linuxbuild/platform/jammy-amd64/target_board/unix/tmp/tmp.GYATAXR8Ku/gdb/testsuite/outputs/gdb.threads/vfork-multi-inferior/vfork-multi-inferior-sleep - (gdb) PASS: gdb.threads/vfork-multi-inferior.exp: method=non-stop: run inferior 2 - inferior 1 - [Switching to inferior 1 [] ()] - (gdb) PASS: gdb.threads/vfork-multi-inferior.exp: method=non-stop: inferior 1 - kill - The program is not being run. - (gdb) file /home/jenkins/workspace/binutils-gdb_master_linuxbuild/platform/jammy-amd64/target_board/unix/tmp/tmp.GYATAXR8Ku/gdb/testsuite/outputs/gdb.threads/vfork-multi-inferior/vfork-multi-inferior - Reading symbols from /home/jenkins/workspace/binutils-gdb_master_linuxbuild/platform/jammy-amd64/target_board/unix/tmp/tmp.GYATAXR8Ku/gdb/testsuite/outputs/gdb.threads/vfork-multi-inferior/vfork-multi-inferior... - (gdb) break should_break_here - Breakpoint 1 at 0x11b1: file /home/jenkins/workspace/binutils-gdb_master_linuxbuild/platform/jammy-amd64/target_board/unix/src/binutils-gdb/gdb/testsuite/gdb.threads/vfork-multi-inferior.c, line 25. - (gdb) PASS: gdb.threads/vfork-multi-inferior.exp: method=non-stop: break should_break_here - [Thread debugging using libthread_db enabled] - Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". - start - Temporary breakpoint 2 at 0x11c0: -qualified main. (2 locations) - Starting program: /home/jenkins/workspace/binutils-gdb_master_linuxbuild/platform/jammy-amd64/target_board/unix/tmp/tmp.GYATAXR8Ku/gdb/testsuite/outputs/gdb.threads/vfork-multi-inferior/vfork-multi-inferior - [Thread debugging using libthread_db enabled] - Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". - - Thread 2.1 "vfork-multi-inf" hit Temporary breakpoint 2, main () at /home/jenkins/workspace/binutils-gdb_master_linuxbuild/platform/jammy-amd64/target_board/unix/src/binutils-gdb/gdb/testsuite/gdb.threads/vfork-multi-inferior-sleep.c:23 - 23 sleep (30); - (gdb) FAIL: gdb.threads/vfork-multi-inferior.exp: method=non-stop: start inferior 1 - - What happens is: - - 1. We start inferior 2 with "run&", it runs very slowly, takes time to - get to main - 2. We switch to inferior 1, and run "start" - 3. The temporary breakpoint inserted by "start" applies to all inferiors - 4. Inferior 2 hits that breakpoint and GDB reports that hit - - To avoid this, breakpoints inserted by "start" should be - inferior-specific. However, we don't have a nice way to make - inferior-specific breakpoints yet. It's possible to make - pspace-specific breakpoints (for example how the internal_breakpoint - constructor does) by creating a symtab_and_line manually. However, - inferiors can share program spaces (usually on particular embedded - targets), so we could have a situation where two inferiors run the same - code in the same program space. In that case, it would just not be - possible to insert a breakpoint in one inferior but not the other. - - A simple solution that should work all the time is to add a condition to - the breakpoint inserted by "start", to check the inferior reporting the - hit is the expected one. This is what this patch implements. - - Add a test that does: - - - start in background inferior 1 that sleeps before reaching its main - function (using a sleep in a global C++ object's constructor) - - start inferior 2 with the "start" command, which also sleeps before - reaching its main function - - validate that we hit the breakpoint in inferior 2 - - Without the fix, we hit the breakpoint in inferior 1 pretty much all the - time. There could be some unfortunate scheduling causing the test not - to catch the bug, for instance if the scheduler decides not to schedule - inferior 1 for a long time, but it would be really rare. If the bug is - re-introduced, the test will catch it much more often than not, so it - will be noticed. - - Reviewed-By: Bruno Larsen - Approved-By: Pedro Alves - Change-Id: Ib0148498a476bfa634ed62353c95f163623c686a - -2022-11-10 Bruno Larsen - - gdb: Fix regressions caused by 041de3d73aa121f2ff0c077213598963bfb34b79 - Commit 041de3d73aa changed the output format of all error messages when - GDB couldn't determine a compatible overload for a given function, but - it was only supposed to change if the failure happened due to incomplete - types. This commit removes the stray . that was added - -2022-11-10 Aaron Merey - - gdb/debuginfod: Improve progress updates - If the download size is known, a progress bar is displayed along with - the percentage of completion and the total download size. - - Downloading separate debug info for /lib/libxyz.so - [############ ] 25% (10.01 M) - - If the download size is not known, a progress indicator is displayed - with a ticker ("###") that moves across the screen at a rate of 1 tick - every 0.5 seconds. - - Downloading separate debug info for /lib/libxyz.so - [ ### ] - - If the output stream is not a tty, batch mode is enabled, the screen is - too narrow or width has been set to 'unlimited', then only a static - description of the download is printed. No bar or ticker is displayed. - - Downloading separate debug info for /lib/libxyz.so... - - In any case, if the size of the download is known at the time the - description is printed then it will be included in the description. - - Downloading 10.01 MB separate debug info for /lib/libxyz.so... - -2022-11-10 Simon Marchi - - gdb: add special handling for frame level 0 in frame_info_ptr - I noticed this problem while preparing the initial submission for the - ROCm GDB port. One particularity of this patch set is that it does not - support unwinding frames, that requires support of some DWARF extensions - that will come later. It was still possible to run to a breakpoint and - print frame #0, though. - - When rebasing on top of the frame_info_ptr work, GDB started tripping on - a prepare_reinflate call, making it not possible anymore to event print - the frame when stopping on a breakpoint. One thing to know about frame - 0 is that its id is lazily computed when something requests it through - get_frame_id. See: - - https://gitlab.com/gnutools/binutils-gdb/-/blob/23912acd402f5af9caf91b257e5209ec4c58a09c/gdb/frame.c#L2070-2080 - - So, up to that prepare_reinflate call, frame 0's id was not computed, - and prepare_reinflate, calling get_frame_id, forces it to be computed. - Computing the frame id generally requires unwinding the previous frame, - which with my ROCm GDB patch fails. An exception is thrown and the - printing of the frame is simply abandonned. - - Regardless of this ROCm GDB problem (which is admittedly temporary, it - will be possible to unwind with subsequent patches), we want to avoid - prepare_reinflate to force the computing of the frame id, for the same - reasons we lazily compute it in the first place. - - In addition, frame 0's id is subject to change across a frame cache - reset. This is why save_selected_frame and restore_selected_frame have - special handling for frame 0: - - https://gitlab.com/gnutools/binutils-gdb/-/blob/23912acd402f5af9caf91b257e5209ec4c58a09c/gdb/frame.c#L1841-1863 - - For this last reason, we also need to handle frame 0 specially in - prepare_reinflate / reinflate. Because the frame id of frame 0 can - change across a frame cache reset, we must not rely on the frame id from - that frame to reinflate it. We should instead just re-fetch the current - frame at that point. - - This patch adds a frame_info_ptr::m_cached_level field, set in - frame_info_ptr::prepare_reinflate, so we can tell if a frame is frame 0. - There are cases where a frame_info_ptr object wraps a sentinel frame, - for which frame_relative_level returns -1, so I have chosen the value -2 - to represent "invalid frame level", for when the frame_info_ptr object - is empty. - - In frame_info_ptr::prepare_reinflate, only cache the frame id if the - frame level is not 0. It's fine to cache the frame id for the sentinel - frame, it will be properly handled by frame_find_by_id later. - - In frame_info_ptr::reinflate, if the frame level is 0, call - get_current_frame to get the target's current frame. Otherwise, use - frame_find_by_id just as before. - - This patch should not have user-visible changes with upstream GDB. But - it will avoid forcing the computation of frame 0's when calling - prepare_reinflate. And, well, it fixes the upcoming ROCm GDB patch - series. - - Change-Id: I176ed7ee9317ddbb190acee8366e087e08e4d266 - Reviewed-By: Bruno Larsen - -2022-11-10 Simon Marchi - - gdb: add missing prepare_reinflate call in print_frame_info - print_frame_info calls frame_info_ptr::reinflate, but not - frame_info_ptr::prepare_reinflate, add the call to prepare_reinflate. - It works right now, because all callers of print_frame_info that could - possibly lead to the pretty printers being called, and the frame_info - objects being invalidated, do call prepare_reinflate themselves. And - since the cached frame id is copied when passing a frame_info_ptr by - value, print_frame_info does have a cached frame id on entry. So - technically, this change isn't needed. But I don't think it's good for - a function to rely on its callers to have called prepare_reinflate, if - it intends to call reinflate. - - Change-Id: Ie332b2d5479aef46f83fdc1120c7c83f4e84d1b0 - Reviewed-By: Bruno Larsen - -2022-11-10 Simon Marchi - - gdb: use frame_id_p instead of comparing to null_frame_id in frame_info_ptr::reinflate - The assertion - - gdb_assert (m_cached_id != null_frame_id); - - is always true, as comparing equal to null_frame_id is always false - (it's the first case in frame_id::operator==, not sure why it's not this - way, but that's what it is). - - Replace the comparison with a call to frame_id_p. - - Approved-By: Tom Tromey - Change-Id: I93986e6a85ac56353690792552e5b3b4cedec7fb - -2022-11-10 Simon Marchi - - gdb: remove manual frame_info reinflation code in backtrace_command_1 - With the following patch applied (gdb: use frame_id_p instead of - comparing to null_frame_id in frame_info_ptr::reinflate), I would get: - - $ ./gdb -q -nx --data-directory=data-directory testsuite/outputs/gdb.base/bt-selected-frame/bt-selected-frame -ex "b breakpt" -ex r -ex "bt full" - Reading symbols from testsuite/outputs/gdb.base/bt-selected-frame/bt-selected-frame... - Breakpoint 1 at 0x1131: file /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.base/bt-selected-frame.c, line 22. - Starting program: /home/smarchi/build/binutils-gdb/gdb/testsuite/outputs/gdb.base/bt-selected-frame/bt-selected-frame - [Thread debugging using libthread_db enabled] - Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". - - Breakpoint 1, breakpt () at /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.base/bt-selected-frame.c:22 - 22 } - #0 breakpt () at /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.base/bt-selected-frame.c:22 - No locals. - /home/smarchi/src/binutils-gdb/gdb/frame-info.c:42: internal-error: reinflate: Assertion `frame_id_p (m_cached_id)' failed. - - This is because the code in backtrace_command_1 to manually reinflate - `fi` steps overs frame_info_ptr's toes. - - When calling - - fi.prepare_reinflate (); - - `fi` gets properly filled with the cached frame id. But when this - happens: - - fi = frame_find_by_id (frame_id); - - `fi` gets replaced by a brand new frame_info_ptr that doesn't have a - cached frame id. Then this is called without a cached frame id: - - fi.reinflate (); - - That doesn't cause any problem currently, since - - - the gdb_assert in the reinflate method doesn't actually do anything - (the following patch fixes that) - - `fi.m_ptr` will always be non-nullptr, since we just got it from - frame_find_by_id, so reinflate will not do anything, it won't try to - use m_cached_id - - Fix that by removing the code to manually re-fetch the frame. That - should be taken care of by frame_info_ptr::reinflate. - - Note that the old code checked if we successfully re-inflated the frame - or not, and if not it did emit a warning. The equivalent in - frame_info_ptr::reinflate asserts that the frame has been successfully - re-inflated. It's not clear if / when this can happen, but if it can - happen, we'll need to find a solution to this problem globally - (everywhere a frame_info_ptr can be re-inflated), not just here. So I - propose to leave it like this, until it does become a problem. - - Reviewed-By: Bruno Larsen - Change-Id: I07b783d94e2853e0a2d058fe7deaf04eddf24835 - -2022-11-10 Simon Marchi - - gdb: move frame_info_ptr method implementations to frame-info.c - I don't see any particular reason why the implementations of the - frame_info_ptr object are in the header file. It only seems to add some - complexity. Since we can't include frame.h in frame-info.h, we have to - add declarations of functions defined in frame.c, in frame-info.h. By - moving the implementations to a new frame-info.c, we can avoid that. - - Change-Id: I435c828f81b8a3392c43ef018af31effddf6be9c - Reviewed-By: Bruno Larsen - Reviewed-By: Tom Tromey - -2022-11-10 Simon Marchi - - gdb: add prepare_reinflate/reinflate around print_frame_args in info_frame_command_core - I noticed this crash: - - $ ./gdb --data-directory=data-directory -nx -q \ - testsuite/outputs/gdb.python/pretty-print-call-by-hand/pretty-print-call-by-hand \ - -x testsuite/outputs/gdb.python/pretty-print-call-by-hand/pretty-print-call-by-hand.py \ - -ex "b g" -ex r - (gdb) info frame - Stack level 0, frame at 0x7fffffffdd80: - rip = 0x555555555160 in g - (/home/simark/src/binutils-gdb/gdb/testsuite/gdb.python/pretty-print-call-by-hand.c:41); saved rip = 0x5555555551a3 - called by frame at 0x7fffffffdda0 - source language c. - Arglist at 0x7fffffffdd70, args: mt=mytype is 0x555555556004 "hello world", - depth=10 - - Fatal signal: Segmentation fault - - This is another case of frame_info being invalidated under a function's - feet. The stack trace when the frame_info get invalidated looks like: - - ... many frames to pretty print the arg, that eventually invalidate the frame_infos ... - #35 0x00005568d0a8ab24 in print_frame_arg (fp_opts=..., arg=0x7ffc3216bcb0) at /home/simark/src/binutils-gdb/gdb/stack.c:489 - #36 0x00005568d0a8cc75 in print_frame_args (fp_opts=..., func=0x621000233210, frame=..., num=-1, stream=0x60b000000300) - at /home/simark/src/binutils-gdb/gdb/stack.c:898 - #37 0x00005568d0a9536d in info_frame_command_core (fi=..., selected_frame_p=true) at /home/simark/src/binutils-gdb/gdb/stack.c:1682 - - print_frame_args knows that print_frame_arg can invalidate frame_info - objects, and therefore calls prepare_reinflate/reinflate. However, - info_frame_command_core has a separate frame_info_ptr instance (it is - passed by value / copy). So info_frame_command_core needs to know that - print_frame_args can invalidate frame_info objects, and therefore needs - to prepare_reinflate/reinflate as well. Add those calls, and enhance - the gdb.python/pretty-print-call-by-hand.exp test to test that command. - - Reviewed-By: Bruno Larsen - Change-Id: I9edaae06d62e97ffdb30938d364437737238a960 - -2022-11-10 Simon Marchi - - gdb: clear other.m_cached_id in frame_info_ptr's move ctor - We do it in the move assignment operator, so I think it makes sense to - do it here too for consistency. I don't think it's absolutely necessary - to clear the other object's fields (in other words, copy constructor and - move constructor could be the same), as there is no exclusive resource - being transfered. The important thing is to leave the moved-from object - in an unknown, but valid state. But still, I think that clearing the - fields of the moved-from object is not a bad idea, it helps ensure we - don't rely on the moved-from object after. - - Change-Id: Iee900ff9d25dad51d62765d694f2e01524351340 - Reviewed-By: Bruno Larsen - -2022-11-10 Bruno Larsen - - gdb/c++: Improve error messages in overload resolution - When resolving overloaded functions, GDB relies on knowing relationships - between types, i.e. if a type inherits from another. However, some - compilers may not add complete information for given types as a way to - reduce unnecessary debug information. In these cases, GDB would just say - that it couldn't resolve the method or function, with no extra - information. - - The problem is that sometimes the user may not know that the type - information is incomplete, and may just assume that there is a bug in - GDB. To improve the user experience, we attempt to detect if the - overload match failed because of an incomplete type, and warn the user - of this. - - This commit also adds a testcase confirming that the message is only - triggered in the correct scenario. This test was not developed as an - expansion of gdb.cp/overload.cc because it needed the dwarf assembler, - and porting all of overload.cc seemed unnecessary. - - Approved-By: Tom Tromey - -2022-11-10 Bruno Larsen - - gdb/testsuite: allowed for function_range to deal with mangled functions - When calling get_func_info inside a test case, it would cause failures - if the function was printed using a C++ style mangled name. The current - patch fixes this by allowing for mangled names along with the current - rules. - - Approved-By: Tom Tromey - -2022-11-10 Clément Chigot - - ld/testsuite: skip ld-size when -shared is not supported - ld/ChangeLog: - - * testsuite/ld-size/size.exp: Skip when -shared is not - supported. - -2022-11-10 Alan Modra - - mach-o reloc size overflow - * mach-o.c (bfd_mach_o_canonicalize_reloc): Set bfd_error on - multiply overflow. - -2022-11-10 Alan Modra - - Sanity check reloc count in get_reloc_upper_bound - The idea here is the stop tools from allocating up to 32G per section - for the arelent pointer array, only to find a little later that the - section reloc count was fuzzed. This usually doesn't hurt much (on - systems that allow malloc overcommit) except when compiled with asan. - - We already do this for ELF targets, and while fixing the logic - recently I decided other targets ought to do the same. - - * elf64-sparc.c (elf64_sparc_get_reloc_upper_bound): Sanity check - section reloc count against file size. - * mach-o.c (bfd_mach_o_get_reloc_upper_bound): Likewise. - * aoutx.h (get_reloc_upper_bound): Likewise, and don't duplicate - check done in bfd_get_reloc_upper_bound. - * pdp11.c (get_reloc_upper_bound): Likewise. - * coffgen.c (coff_get_reloc_upper_bound): Likewise. - -2022-11-10 Lancelot SIX - - gdb/testsuite: Fix rtld-step-nodebugsym.exp - The test case introduced in bafcc335266 (Fix stepping in rtld without - debug symbol) fails on some systems as reported by PR/29768. This can - be seen if the system does not have debug info for the libc: - - (gdb) step^M - Single stepping until exit from function main,^M - which has no line number information.^M - hello world[Inferior 1 (process 48203) exited normally]^M - (gdb) PASS: gdb.base/rtld-step-nodebugsym.exp: step - continue^M - The program is not being run.^M - (gdb) FAIL: gdb.base/rtld-step-nodebugsym.exp: continue until exit (the program is no longer running) - - Without glibc debug info, GDB steps until the program finishes, and - then "gdb_continue_to_end" fails. - - As this test was designed to check that GDB does not crash in the "step" - command, the continue does not carry real meaning to the test. - - Replace it by "print 0" so we still check that after the step command - GDB is still alive, which is what we care about. - - Tested on Ubuntu-22.04 x86_64, with and without libc6-dbg. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29768 - Approved-By: Simon Marchi - -2022-11-10 Mike Frysinger - - sim: ppc: drop old makefile fragment - Support for these files was dropped almost 30 years ago, but the ppc - arch was missed. Clean that up now too. - - sim: ppc: drop support for dgen -L option - Nothing passes this to dgen, and even if it did, nothing would happen - because the generated spreg.[ch] files don't include any references - back to the original data table. So drop it to simplify. - - sim: ppc: collapse is_readonly & length switch tables heavily - Since we know we'll return 0 by default, we don't have to output case - statements for readonly or length fields whose values are also zero. - This is the most common case by far and thus generates a much smaller - switch table in the end. - -2022-11-10 Mike Frysinger - - sim: ppc: collapse is_valid switch table more - Instead of writing: - case 1: - return 1; - case 2: - return 1; - ...etc... - - Output a single return so we get: - case 1: - case 2: - case ... - return 1; - - This saves ~100 lines of code. Hopefully the compiler was already - smart enough to optimize to the same code, but if not, this probably - helps there too :). - -2022-11-10 Mike Frysinger - - sim: ppc: pull default switch return out - This saves a single line for the same result. By itself, it's not - interesting, but we can further optimize the generated output and - completely omit the switch table in some cases. Which we'll do in - follow up commits. - - sim: ppc: constify spreg table - This internal table is only ever read, so constify it. - -2022-11-10 Mark Harmstone - - ld: Add module information substream to PDB files - -2022-11-10 Luis Machado - - [opcodes/arm] Fix potential null pointer dereferences - PR tdep/29598 - - As pointed out in the bug ticket, we have a couple potential null pointer - dereferencing situations. Harden those. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29598 - -2022-11-10 Luis Machado - - [gdb/aarch64] Use safer memory read routines - PR tdep/28796 - - As reported, we are using some memory read routines that don't handle read - errors gracefully. Convert those to use the safe_* versions if available. - - This allows the code to handle those read errors in a more sensible way. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28796 - -2022-11-10 GDB Administrator - - Automatic date update in version.in - -2022-11-09 Lancelot SIX - - Fix stepping in rtld without debug symbol - Commit be6276e0aed "Allow debugging of runtime loader / dynamic linker" - introduced a small regression when stepping into the runtime loader / - dynamic linker from function we do not have debug information for. This - is reported in PR/29747. - - This can be shown by the following example (given by Simon Marchi in - buzilla bug report): - - $ cat test.c - #include - - int main() - { - printf("Hi\n"); - return 0; - } - $ gcc test.c -O0 -o test - $ ./gdb -q -nx --data-directory=data-directory test -ex start -ex s - Reading symbols from test... - (No debugging symbols found in test) - Temporary breakpoint 1 at 0x1151 - Starting program: .../binutils-gdb/gdb/test - [Thread debugging using libthread_db enabled] - Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". - - Temporary breakpoint 1, 0x0000555555555151 in main () - Single stepping until exit from function main, - which has no line number information. - /home/smarchi/src/binutils-gdb/gdb/infrun.c:6960:64: runtime error: member call on null pointer of type 'struct symbol' - - The crash happens here: - - #0 __sanitizer::Die () at ../../../../src/libsanitizer/sanitizer_common/sanitizer_termination.cpp:50 - #1 0x00007ffff5dd7128 in __ubsan::__ubsan_handle_type_mismatch_v1_abort (Data=, Pointer=) at ../../../../src/libsanitizer/ubsan/ubsan_handlers.cpp:148 - #2 0x000055556183e1a7 in process_event_stop_test (ecs=0x7fffffffccd0) at .../binutils-gdb/gdb/infrun.c:6960 - #3 0x0000555561838ea4 in handle_signal_stop (ecs=0x7fffffffccd0) at .../binutils-gdb/gdb/infrun.c:6615 - #4 0x000055556182f77b in handle_inferior_event (ecs=0x7fffffffccd0) at .../binutils-gdb/gdb/infrun.c:5866 - - When evaluating: - - 6956 if (execution_direction != EXEC_REVERSE - 6957 && ecs->event_thread->control.step_over_calls == STEP_OVER_UNDEBUGGABLE - 6958 && in_solib_dynsym_resolve_code (ecs->event_thread->stop_pc ()) - 6959 && !in_solib_dynsym_resolve_code ( - 6961 ecs->event_thread->control.step_start_function->value_block () - 6962 ->entry_pc ())) - - we dereference, ecs->event_thread->control.step_start_function which is - nullptr. - - This patch changes this condition so it evaluates to true if - ecs->event_thread->control.step_start_function is nullptr since this - matches the behaviour before be6276e0aed. - - Tested on ubuntu-22.04 x86_64. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29747 - Reviewed-By: Bruno Larsen - Approved-By: Kevin Buettner - -2022-11-09 Mike Frysinger - - sim: igen: add missing newline to various error messages - The error() function expects a trailing newline in its message. - Most callers do this already, so adding it to the few that don't. - - sim: restore lstat & mkdir func checks - When merging ppc configure checks into the top-level, these 2 funcs - were accidentally dropped (probably due to incorrect resolution of - conflicts). Restore them since the ppc code utilizes them both. - - sim: ppc: drop obsolete USE_WIN32API check - This controls only one thing: how to call mkdir(). The gnulib code - already has a mkdir module that provides this exact logic for us, so - punt the code entirely. - -2022-11-09 Tankut Baris Aktemur - - gdbserver: do not report btrace support if target does not announce it - Gdbserver unconditionally reports support for btrace packets. Do not - report the support, if the underlying target does not say it supports - it. Otherwise GDB would query the server with btrace-related packets - unnecessarily. - -2022-11-09 Tom Tromey - - Allow 'ptype/o' for assembly - PR exp/28359 points out that 'ptype/o' does not work when the current - language is "asm". - - I tracked this down to a hard-coded list of languages in typeprint.c. - This patch replaces this list with a method on 'language_defn' - instead. If all languages are ever updated to have this feature, the - method could be removed; but in the meantime this lets each language - control what happens. - - I looked at having each print_type method simply modify the flags - itself, but this doesn't work very well with the feature that disables - method-printing by default (but allows it via a flag). - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28359 - Approved-By: Andrew Burgess - Approved-By: Keith Seitz - -2022-11-09 Mike Frysinger - - sim: ppc: add missing parens with e500 macro - This macro expansion was missing a set of outer-most parenthesis which - some compilers would complain about depending on how the macro is used. - This is just standard good macro hygiene too. - - sim: ppc: drop useless linking of helper tools - We've never run these helper programs directly. The igen program - includes the relevant source files directly and runs the code that - way. So stop wasting developer CPU time linking programs that are - never run. We leave the rules in place for people who need to test - and debug the specific bits of code every now & then. - -2022-11-09 Jan Beulich - - x86/Intel: don't accept malformed EXTRQ / INSERTQ - Operand swapping was mistakenly suppressed when the first two operands - were immediate ones, not taking into account overall operand count. This - way EXTRQ / INSERTQ would have been accepted also with kind-of-AT&T - operand order. - - For the testcase being extended, in order to not move around "GAS - LISTING" expectations, suppress pagination. - -2022-11-09 Alan Modra - - Re: Fuzzed files in archives - Like commit ffbe89531c2e this avoids more silliness writing output - that is going to be deleted. bfd_close and bfd_close_all_done differ - in that only the former calls _bfd_write_contents. - - * objcopy.c (copy_archive): Don't call bfd_close for elements - that are going to be deleted, call bfd_close_all_done instead. - Do the same for the archive itself. - -2022-11-09 Christoph Müllner - - RISC-V: xtheadfmemidx: Use fp register in mnemonics - Although the encoding for scalar and fp registers is identical, - we should follow common pratice and use fp register names - when referencing fp registers. - - The xtheadmemidx extension consists of indirect load/store instructions - which all load to or store from fp registers. - Let's use fp register names in this case and adjust the test cases - accordingly. - - gas/ - * testsuite/gas/riscv/x-thead-fmemidx-fail.l: Updated since rd need to - be float register. - * testsuite/gas/riscv/x-thead-fmemidx-fail.s: Likewise. - * testsuite/gas/riscv/x-thead-fmemidx.d: Likewise. - * testsuite/gas/riscv/x-thead-fmemidx.s: Likewise. - opcodes/ - * riscv-opc.c (riscv_opcodes): Updated since rd need to be float register. - -2022-11-09 H.J. Lu - - ld: Always output local symbol for relocatable link - PR ld/29761 - * elflink.c (elf_link_output_symstrtab): Don't skip local symbol - in SEC_EXCLUDE section for relocatable link. - -2022-11-09 GDB Administrator - - Automatic date update in version.in - -2022-11-08 Simon Marchi - - gdb/linux-nat: get core count using /sys/devices/system/cpu/possible - I get this test failure on my CI; - - FAIL: gdb.base/info-os.exp: get process list - - The particularity of this setup is that builds are done in containers - who are allocated 4 CPUs on a machine that has 40. The code in - nat/linux-osdata.c fails to properly fetch the core number for each - task. - - linux_xfer_osdata_processes uses `sysconf (_SC_NPROCESSORS_ONLN)`, which - returns 4, so it allocates an array of 4 integers. However, the core - numbers read from /proc/pid/task/tid/stat, by function - linux_common_core_of_thread, returns a value anywhere between 0 and 39. - The core numbers above 3 are therefore ignored, many processes end up - with no core value, and the regexp in the test doesn't match (it - requires an integer as the core field). - - The way this the CPUs are exposed to the container is that the container - sees 40 CPUs "present" and "possible", but only 4 arbitrary CPUs - actually online: - - root@ci-node-jammy-amd64-04-08:~# cat /sys/devices/system/cpu/present - 0-39 - root@ci-node-jammy-amd64-04-08:~# cat /sys/devices/system/cpu/online - 5,11,24,31 - root@ci-node-jammy-amd64-04-08:~# cat /sys/devices/system/cpu/possible - 0-39 - - The solution proposed in this patch is to find out the number of - possible CPUs using /sys/devices/system/cpu/possible. In practice, this - will probably always contain `0-N`, where N is the number of CPUs, minus - one. But the documentation [1] doesn't such guarantee, so I'll assume - that it can contain a more complex range list such as `2,4-31,32-63`, - like the other files in that directory can have. The solution is to - iterate over these numbers to find the highest possible CPU id, and - use that that value plus one as the size of the array to allocate. - - [1] https://www.kernel.org/doc/Documentation/admin-guide/cputopology.rst - - Change-Id: I7abce2e43b000c1327fa94cd7b99d46e49d7ccf3 - -2022-11-08 Simon Marchi - - gdbsupport, gdb: add read_text_file_to_string, use it in linux_common_core_of_thread - I would like to add more code to nat/linux-osdata.c that reads an entire - file from /proc or /sys and processes it as a string afterwards. I - would like to avoid duplicating the somewhat error-prone code that reads - an entire file to a buffer. I think we should have a utility function - that does that. - - Add read_file_to_string to gdbsupport/filestuff.{c,h}, and make - linux_common_core_of_thread use it. I want to make the new function - return an std::string, and because strtok doesn't play well with - std::string (it requires a `char *`, std::string::c_str returns a `const - char *`), change linux_common_core_of_thread to use std::string methods - instead. - - Approved-By: Tom Tromey - Change-Id: I1793fda72a82969c28b944a84acb953f74c9230a - -2022-11-08 Peter Bergner - - PowerPC: Add XSP operand define - opcodes/ - * ppc-opc.c (XSP): New define. - (powerpc_opcodes) : Use it. - -2022-11-08 Tom de Vries - - [gdb/cli] Make quit really quit after remote connection closed - Consider a hello world a.out, started using gdbserver: - ... - $ gdbserver --once 127.0.0.1:2345 ./a.out - Process ./a.out created; pid = 15743 - Listening on port 2345 - ... - that we can connect to using gdb: - ... - $ gdb -ex "target remote 127.0.0.1:2345" - Remote debugging using 127.0.0.1:2345 - Reading /home/vries/a.out from remote target... - ... - 0x00007ffff7dd4550 in _start () from target:/lib64/ld-linux-x86-64.so.2 - (gdb) - ... - - After that, we can for instance quit with confirmation: - ... - (gdb) quit - A debugging session is active. - - Inferior 1 [process 16691] will be killed. - - Quit anyway? (y or n) y - $ - ... - - Or, kill with confirmation and quit: - ... - (gdb) kill - Kill the program being debugged? (y or n) y - [Inferior 1 (process 16829) killed] - (gdb) quit - $ - ... - - Or, monitor exit, kill with confirmation, and quit: - ... - (gdb) monitor exit - (gdb) kill - Kill the program being debugged? (y or n) y - Remote connection closed - (gdb) quit - $ - ... - - But when doing monitor exit followed by quit with confirmation, we get the gdb - prompt back, requiring us to do quit once more: - ... - (gdb) monitor exit - (gdb) quit - A debugging session is active. - - Inferior 1 [process 16944] will be killed. - - Quit anyway? (y or n) y - Remote connection closed - (gdb) quit - $ - ... - - So, the first quit didn't quit. This happens as follows: - - quit_command calls query_if_trace_running - - a TARGET_CLOSE_ERROR is thrown - - it's caught in remote_target::get_trace_status, but then - rethrown because it's TARGET_CLOSE_ERROR - - catch_command_errors catches the error, at which point the quit command - has been aborted. - - The TARGET_CLOSE_ERROR is defined as: - ... - /* Target throwing an error has been closed. Current command should be - aborted as the inferior state is no longer valid. */ - TARGET_CLOSE_ERROR, - ... - so in a way this is expected behaviour. But aborting quit because the inferior - state (which we've already confirmed we're not interested in) is no longer - valid, and having to type quit again seems pointless. - - Furthermore, the purpose of not catching errors thrown by - query_if_trace_running as per commit 2f9d54cfcef ("make -gdb-exit call - disconnect_tracing too, and don't lose history if the target errors on - "quit""), was to make sure that error (_("Not confirmed.") had effect. - - Fix this in quit_command by catching only the TARGET_CLOSE_ERROR exception - during query_if_trace_running and reporting it: - ... - (gdb) monitor exit - (gdb) quit - A debugging session is active. - - Inferior 1 [process 19219] will be killed. - - Quit anyway? (y or n) y - Remote connection closed - $ - ... - - Tested on x86_64-linux. - - PR server/15746 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=15746 - Approved-By: Tom Tromey - -2022-11-08 Tom de Vries - - [gdb/testsuite] Remove test-case from test name - Remove test-cases from test-names, such that we don't have the redundant: - ... - PASS: gdb.base/corefile.exp: backtrace in corefile.exp - ... - but simply: - ... - PASS: gdb.base/corefile.exp: backtrace - ... - - Fixed all instances found using: - ... - $ grep ":.*:.*\.exp" gdb.sum - ... - - Tested on x86_64-linux. - -2022-11-08 Tom de Vries - - [gdb/testsuite] Fix find_core_file for core named core - With test-case gdb.base/bigcore.exp I run into: - ... - (gdb) PASS: gdb.base/bigcore.exp: get inferior pid - signal SIGABRT^M - Continuing with signal SIGABRT.^M - ^M - Program terminated with signal SIGABRT, Aborted.^M - The program no longer exists.^M - (gdb) PASS: gdb.base/bigcore.exp: signal SIGABRT - UNTESTED: gdb.base/bigcore.exp: can't generate a core file - ... - due to find_core_file returning "". - - There is a core file name core: - ... - $ ls ./outputs/gdb.base/bigcore - bigcore bigcore.corefile core gdb.cmd.1 gdb.in.1 gdbserver.cmd.1 - ... - but it's not found. - - The problem is this statement: - ... - lappend files [list ${::testfile}.core core] - ... - which adds a single list item "${::testfile}.core core". - - Fix this in the most readable way: - ... - lappend files ${::testfile}.core - lappend files core - ... - - Tested on x86_64-linux. - -2022-11-08 Mike Frysinger - - sim: mips: call Unpredictable instead of setting bogus values [PR sim/29276] - The intention of this code seems to be to indicate that this insn - should not be used and produces undefined behavior, so instead of - setting registers to bogus values, call Unpredictable. This fixes - build warnings due to 32-bit/64-bit type conversions, and outputs - a log message for users at runtime instead of silent corruption. - - Bug: https://sourceware.org/PR29276 - -2022-11-08 Mike Frysinger - - sim: drop unused CORE_ADDR_TYPE - This hasn't been used by gdb in decades, and doesn't make sense with - a standalone sim program/library where the ABI is fixed. So punt it - to simplify the code. - -2022-11-08 Haochen Jiang - - x86: Correct wrong comments in vex_w_table - Hi all, - - This wrong comment was introduced by previous AVX-VNNI-INT8 commit. - - Committed as obvious fix. - - BRs, - Haochen - - opcodes/ChangeLog: - - * i386-dis.c (VEX_W_0F3851): Corrected from - VEX_W_0F3851_P_0. - -2022-11-08 Kong Lingling - - Support Intel RAO-INT - gas/ChangeLog: - - * NEWS: Support Intel RAO-INT. - * config/tc-i386.c: Add raoint. - * doc/c-i386.texi: Document .raoint. - * testsuite/gas/i386/i386.exp: Run RAO_INT tests. - * testsuite/gas/i386/raoint-intel.d: New test. - * testsuite/gas/i386/raoint.d: Ditto. - * testsuite/gas/i386/raoint.s: Ditto. - * testsuite/gas/i386/x86-64-raoint-intel.d: Ditto. - * testsuite/gas/i386/x86-64-raoint.d: Ditto. - * testsuite/gas/i386/x86-64-raoint.s: Ditto. - - opcodes/ChangeLog: - - * i386-dis.c (PREFIX_0F38FC): New. - (prefix_table): Add PREFIX_0F38FC. - * i386-gen.c: (cpu_flag_init): Add CPU_RAO_INT_FLAGS and - CPU_ANY_RAO_INT_FLAGS. - * i386-init.h: Regenerated. - * i386-opc.h: (CpuRAO_INT): New. - (i386_cpu_flags): Add cpuraoint. - * i386-opc.tbl: Add RAO_INT instructions. - * i386-tbl.h: Regenerated. - -2022-11-08 GDB Administrator - - Automatic date update in version.in - -2022-11-07 Tom Tromey - - Silence libtool during link - The switch to linking with libtool now shows a very long link line - even when V=0. This patch arranges to silence libtool in this - situation. - - Approved-By: Simon Marchi - -2022-11-07 Simon Marchi - - gdb: make lookup_selected_frame static - Change-Id: Ide2749a34333110c7f0112b25852c78cace0d2b4 - -2022-11-07 Mike Frysinger - - sim: riscv: add missing AC_MSG_RESULT call - Previous commit in here forgot to include this. - - sim: v850: drop subdir configure logic - We've been using this only to set the default word size to 32. We - can easily move this into the makefile via a -D compiler flag and - clean up the build logic quite a bit. - - sim: mn10300: drop subdir configure logic - We've been using this only to set the default word size to 32. We - can easily move this into the makefile via a -D compiler flag and - clean up the build logic quite a bit. - - sim: or1k: drop subdir configure logic - We've been using this only to set the default word size to 32. We - can easily move this into the makefile via a -D compiler flag and - clean up the build logic quite a bit. - - sim: bpf: drop subdir configure logic - We've been using this only to set the default word size to 64. We - can easily move this into the makefile via a -D compiler flag and - clean up the build logic quite a bit. - - sim: riscv: drop subdir configure logic - We've been using this only to set the default word size to 32-vs-64 - based on the $target. We can easily merge this with the top-level - configure script to clean things up a bit. - -2022-11-07 Jose E. Marchesi - - gdb: link executables with libtool - This patch changes the GDB build system in order to use libtool to - link the several built executables. This makes it possible to refer - to libtool libraries (.la files) in CLIBS. - - As an application of the above, - - BFD now refers to ../libbfd/libbfd.la - OPCODES now refers to ../opcodes/libopcodes.la - LIBBACKTRACE_LIB now refers to ../libbacktrace/libbacktrace.la - LIBCTF now refers to ../libctf/libctf.la - - NOTE1: The addition of libtool adds a few new configure-time options - to GDB. Among these, --enable-shared and --disable-shared, which were - previously ignored. Now GDB shall honor these options when linking, - picking up the right version of the referred libtool libraries - automagically. - - NOTE2: I have not tested the insight build. - - NOTE3: For regenerating configure I used an environment with Autoconf - 2.69 and Automake 1.15.1. This should match the previously - used version as announced in the configure script. - - NOTE4: Now the installed shared objects libbfd.so, libopcodes.so and - libctf.so are used by gdb if binutils is installed with - --enable-shared. - - Testing performed: - - - --enable-shared and --disable-shared (the default in binutils) work - as expected: the linked executables link with the archive or shared - libraries transparently. - - - Makefile.in modified for EXEEXT = .exe. It installs the binaries - just fine. The installed gdb.exe runs fine. - - - Native build regtested in x86_64. No regressions found. - - - Cross build for aarch64-linux-gnu built to exercise - program_transform_name and friends. The installed - aarch64-linux-gnu-gdb runs fine. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29372 - Approved-By: Simon Marchi - -2022-11-07 Simon Marchi - - gdb/testsuite: use a more unique name in gdb.mi/mi-breakpoint-multiple-locations.exp - I see failures in this test, due to the function name "add" being too - generic, and unexpected breakpoint locations being found in my - libstdc++, such as (wrapped for readability): - - { - number="2.4",enabled="y",addr="0x00007ffff7d67e68", - func="(anonymous namespace)::fast_float::bigint::add", - file="/usr/src/debug/gcc/libstdc++-v3/src/c++17/fast_float/fast_float.h", - fullname="/usr/src/debug/gcc/libstdc++-v3/src/c++17/fast_float/fast_float.h", - line="1815", thread-groups=["i1"] - } - - Change the test to use a more unique name. - - Change-Id: I91de781be62d246eb41c73eaa410ebdd12633d1d - -2022-11-07 Pedro Alves - - Don't explicitly set clone child ptrace options - linux_handle_extended_wait calls target_post_attach if we're handling - a PTRACE_EVENT_CLONE, and libthread_db.so isn't active. - target_post_attach just calls linux_init_ptrace_procfs to set the - lwp's ptrace options. However, this is completely unnecessary, - because, as man ptrace [1] says, options are inherited: - - "Flags are inherited by new tracees created and "auto-attached" via - active PTRACE_O_TRACEFORK, PTRACE_O_TRACEVFORK, or PTRACE_O_TRACECLONE - options." - - This removes the unnecessary call. - - [1] - https://man7.org/linux/man-pages/man2/ptrace.2.html - - Approved-By: Simon Marchi - Change-Id: I533eaa60b700f7e40760311fc0d344d0b3f19a78 - -2022-11-07 Mike Frysinger - - sim: .gdbinit: generate for all arch subdirs - This was being skipped for ports that had a recursive configure, - but we want it for them too. - - sim: build: add a proper var for enabled arches - The install code was using $SUBDIRS to track all enabled arches. This - works, but isn't great if we want to add a subdir that isn't an arch - port, or as we merge the subdirs into the top-level. Create a new var - explicitly to track the list of enabled arches instead. - -2022-11-07 Christophe Lyon - - configure: require libzstd >= 1.4.0 - gas uses ZSTD_compressStream2 which is only available with libzstd >= - 1.4.0, leading to build errors when an older version is installed. - - This patch updates the check libzstd presence to check its version is - >= 1.4.0. However, since gas seems to be the only component requiring - such a recent version this may imply that we disable ZSTD support for - all components although some would still benefit from an older - version. - - I ran 'autoreconf -f' in all directories containing a configure.ac - file, using vanilla autoconf-2.69 and automake-1.15.1. I noticed - several errors from autoheader in readline, as well as warnings in - intl, but they are unrelated to this patch. - - This should fix some of the buildbots. - - OK for trunk? - - Thanks, - - Christophe - -2022-11-07 Clément Chigot - - ld/testsuite: skip tests related to -shared when disabled - Call the helper function "check_shared_lib_support" to ensure -shared - is enabled before launching ld-shared, ld-elfweak and ld-elfvers. - This allows to catch custom targets explicitly disabling it. - - ld/ChangeLog: - - * testsuite/ld-elfvers/vers.exp: Call check_shared_lib_support. - * testsuite/ld-elfweak/elfweak.exp: Likewise. - * testsuite/ld-shared/shared.exp: Likewise. - -2022-11-07 Tsukasa OI - - RISC-V: Remove RV32EF conflict - Despite that the RISC-V ISA Manual version 2.2 prohibited "RV32EF", later - versions beginning with the version 20190608-Base-Ratified removed this - restriction. Because the 'E' extension is still a draft, the author chose - to *just* remove the conflict (not checking the ISA version). - - Note that, because RV32E is only used with a soft-float calling convention, - there's no valid official ABI for RV32EF. It means, even if we can assemble - a program with -march=rv32ef -mabi=ilp32e, floating-point registers are kept - in an unmanaged state (outside ABI management). - - The purpose of this commit is to suppress unnecessary errors while parsing - an ISA string and/or disassembling, not to allow hard-float with RVE. - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_parse_check_conflicts): Accept RV32EF - because only older specifications disallowed it. - - gas/ChangeLog: - - * testsuite/gas/riscv/march-fail-rv32ef.d: Remove as not directly - prohibited. - * testsuite/gas/riscv/march-fail-rv32ef.l: Likewise. - -2022-11-07 GDB Administrator - - Automatic date update in version.in - -2022-11-06 Mike Frysinger - - sim: build: respect AM_MAKEFLAGS when entering subdirs - This doesn't matter right now, but it will as we add more flags to - the recursive make step to pass state down. - - sim: build: stop passing down SIM_PRIMARY_TARGET - This was needed when the install step was run in subdirs, but now - that we process that entirely in the top-level, we don't need to - pass this down, so drop it. - -2022-11-06 GDB Administrator - - Automatic date update in version.in - -2022-11-05 Tom Tromey - - Deprecate MI version 1 - MI version 1 is long since obsolete. Rather than remove it - immediately (though I did send a patch for that), instead let's - deprecate it in GDB 13 and then remove it for GDB 14. - - This version of the patch incorporates Simon's warning change, and - Luis' recommendation to mention the gdb versions here. - -2022-11-05 Mike Frysinger - - sim: fix readline linkage - Now that we link programs in the top dir instead of the arch subdir, - update the readline library path to be relative to the top dir. - - sim: use libtool to install programs - Now that we use libtool to link, we have to use it to install instead - of keeping the manual logic so we don't install wrapper shell scripts. - - sim: bfin: move linux-fixed-code.h to top-level - -2022-11-05 Mike Frysinger - - sim: run: move linking into top-level - Automake will run each subdir individually before moving on to the next - one. This means that the linking phase, a single threaded process, will - not run in parallel with anything else. When we have to link ~32 ports, - that's 32 link steps that don't take advantage of parallel systems. On - my really old 4-core system, this cuts a multi-target build from ~60 sec - to ~30 sec. We eventually want to move all compile+link steps to this - common dir anyways, so might as well move linking now for a nice speedup. - - We use noinst_PROGRAMS instead of bin_PROGRAMS because we're taking care - of the install ourselves rather than letting automake process it. - -2022-11-05 Mike Frysinger - - sim: build: add uninstall support - This never worked before, but adding it to the common top-level dir - is pretty easy to do now that we're unified. - - sim: build: move install steps to the top-level - We still have to maintain custom install rules due to how we rename - arch-specific files with an arch prefix in their name, but we can at - least unify the logic in the common dir. - - sim: cris: move rvdummy linking to top-level - This is only used by `make check`, so we can move it out of the - default build too. - - sim: build: add SIM_HW_CFLAGS to top-level build too - This matches what we do with targets already. - - sim: drop unused SIM_HARDWARE variable - This hasn't been used since the refactor way back in commit - f872d0d643968c1101bb8c07b252edd54f626da2 ("Only enable H/W - on some mips targets."), so punt it. - - sim: adjust sim_hw options style - We use uppercase for other variables, and are already turning it to - uppercase in the arch-subdir.mk, so convert it in the configure step. - - sim: ppc: drop unused /dev/zero logic - Nothing in the tree checks this option, or has checked for decades. - The pre-cvs-import ChangeLog suggests this was added & removed back - then, but can't be sure as that history doesn't exist in the VCS. - - sim: ppc: delete unused host bitsize settings - Nothing checks this define anywhere, so drop all the logic. We don't - want this to be a configure option in the first place as all such usage - should be automatic & following proper types. - - sim: ppc: inline the sim-packages option - This has only ever had a single option that's enabled by default. - The objects it adds are pretty small and don't add overhead at - runtime if it isn't used, so just enable it all the time to make - the build code simpler. - -2022-11-05 GDB Administrator - - Automatic date update in version.in - -2022-11-04 H.J. Lu - - binutils: Run PR binutils/26160 test - Update expected PR binutils/26160 test output for readelf out change - and run PR binutils/26160 test. - - PR binutils/26160 - * testsuite/binutils-all/pr26160.r: Updated. - * testsuite/binutils-all/readelf.exp: Run PR binutils/26160 test. - -2022-11-04 Lancelot SIX - - [testsuite] gdb.base/dlmopen: Fix test name and use gdb_attach - One test name in gdb.base/dlmopen.exp changes from run to run - since it includes a process id: - - PASS: gdb.base/dlmopen.exp: attach 3442682 - - This is not convenient do diff gdb.sum files to compare test runs. - - Fix by using gdb_attach helper function to handle attaching to the - process as it produce a constant test name. - - While at it also check gdb_attach's return value to only run the - rest of the test if the attach was successful. - - Approved-By: Simon Marchi - -2022-11-04 Carl Love - - PowerPC update comments for the MMA instruction name changes. - The mnemonics for the pmxvf16ger*, pmxvf32ger*,pmxvf64ger*, pmxvi4ger8*, - pmxvi8ger4*, and pmxvi16ger2* instructions were officially changed to - pmdmxbf16ger*, pmdmxvf32ger*, pmdmxvf64ger*, pmdmxvi4ger8*, pmdmxvi8ger4*, - pmdmxvi16ger* respectively. The old mnemonics are still supported by the - assembler as extended mnemonics. The disassembler generates the new - mnemonics. The name changes occurred in commit: - - commit bb98553cad4e017f1851153fa5de91f2cee98fb2 - Author: Peter Bergner - Date: Sat Oct 8 16:19:51 2022 -0500 - - PowerPC: Add support for RFC02658 - MMA+ Outer-Product Instructions - - gas/ - * config/tc-ppc.c (md_assemble): Only check for prefix opcodes. - * testsuite/gas/ppc/rfc02658.s: New test. - * testsuite/gas/ppc/rfc02658.d: Likewise. - * testsuite/gas/ppc/ppc.exp: Run it. - - opcodes/ - * ppc-opc.c (XMSK8, P_GERX4_MASK, P_GERX2_MASK, XX3GERX_MASK): New. - (powerpc_opcodes): Add dmxvi8gerx4pp, dmxvi8gerx4, dmxvf16gerx2pp, - dmxvf16gerx2, dmxvbf16gerx2pp, dmxvf16gerx2np, dmxvbf16gerx2, - dmxvi8gerx4spp, dmxvbf16gerx2np, dmxvf16gerx2pn, dmxvbf16gerx2pn, - dmxvf16gerx2nn, dmxvbf16gerx2nn, pmdmxvi8gerx4pp, pmdmxvi8gerx4, - pmdmxvf16gerx2pp, pmdmxvf16gerx2, pmdmxvbf16gerx2pp, pmdmxvf16gerx2np, - pmdmxvbf16gerx2, pmdmxvi8gerx4spp, pmdmxvbf16gerx2np, pmdmxvf16gerx2pn, - pmdmxvbf16gerx2pn, pmdmxvf16gerx2nn, pmdmxvbf16gerx2nn. - - This patch updates the comments in the various gdb files to reflect the - name changes. There are no functional changes made by this patch. - - The older instruction names are still used in the test - gdb.reverse/ppc_record_test_isa_3_1.exp for backwards compatibility. - - Patch has been tested on Power 10 with no regressions. - -2022-11-04 Carl Love - - PowerPC fix for the gdb.arch/powerpc-power10.exp test. - The mnemonics for the pmxvf16ger*, pmxvf32ger*,pmxvf64ger*, pmxvi4ger8*, - pmxvi8ger4*, pmxvi16ger2* instructions were officially changed to - pmdmxvf16ger*, pmdmxvf32ger*, pmdmxvf64ger*, pmdmxvi4ger8*, pmdmxvi8ger4*, - pmdmxvi16ger* respectively. The old mnemonics are still supported by the - assembler as extended mnemonics. The disassembler generates the new - mnemonics. The name changes occurred in commit: - - commit bb98553cad4e017f1851153fa5de91f2cee98fb2 - Author: Peter Bergner - Date: Sat Oct 8 16:19:51 2022 -0500 - - PowerPC: Add support for RFC02658 - MMA+ Outer-Product Instructions - - gas/ - * config/tc-ppc.c (md_assemble): Only check for prefix opcodes. - * testsuite/gas/ppc/rfc02658.s: New test. - * testsuite/gas/ppc/rfc02658.d: Likewise. - * testsuite/gas/ppc/ppc.exp: Run it. - - opcodes/ - * ppc-opc.c (XMSK8, P_GERX4_MASK, P_GERX2_MASK, XX3GERX_MASK): New. - (powerpc_opcodes): Add dmxvi8gerx4pp, dmxvi8gerx4, dmxvf16gerx2pp, - dmxvf16gerx2, dmxvbf16gerx2pp, dmxvf16gerx2np, dmxvbf16gerx2, - dmxvi8gerx4spp, dmxvbf16gerx2np, dmxvf16gerx2pn, dmxvbf16gerx2pn, - dmxvf16gerx2nn, dmxvbf16gerx2nn, pmdmxvi8gerx4pp, pmdmxvi8gerx4, - pmdmxvf16gerx2pp, pmdmxvf16gerx2, pmdmxvbf16gerx2pp, pmdmxvf16gerx2np, - pmdmxvbf16gerx2, pmdmxvi8gerx4spp, pmdmxvbf16gerx2np, pmdmxvf16gerx2pn, - pmdmxvbf16gerx2pn, pmdmxvf16gerx2nn, pmdmxvbf16gerx2nn. - - The above commit results in about 224 failures on Power 10 since the - disassembled names do not match the expected names in the test. This - patch updates the expected names in the test to match the values produced - by the disassembler. - - This patch updates file gdb.arch/powerpc-power10.exp with the new expected - values to the instructions. The comment giving the name of the instruction - for each binary value in the file gdb.arch/powerpc-power10.c is updated - with the new name. There are no functional changes in file - gdb.arch/powerpc-power10.c. - -2022-11-04 Carl Love - - Powerpc fix for gdb.base/unwind-on-each-insn.exp - The test disassembles function foo and searches for the line - "End of assembler dump" to determing the last address in the function. The - assumption is the last instruction will be given right before the line - "End of assembler dump". This assumption fails on PowerPC. - - The PowerPC disassembly of the function foo looks like: - Dump of assembler code for function foo: - # => 0x00000000100006dc <+0>: std r31,-8(r1) - # 0x00000000100006e0 <+4>: stdu r1,-48(r1) - # 0x00000000100006e4 <+8>: mr r31,r1 - # 0x00000000100006e8 <+12>: nop - # 0x00000000100006ec <+16>: addi r1,r31,48 - # 0x00000000100006f0 <+20>: ld r31,-8(r1) - # 0x00000000100006f4 <+24>: blr - # 0x00000000100006f8 <+28>: .long 0x0 - # 0x00000000100006fc <+32>: .long 0x0 - # 0x0000000010000700 <+36>: .long 0x1000180 - # End of assembler dump. - - The blr instruction is the last instruction in function foo. The lines - with .long following the blr instruction need to be ignored. - - This patch adds a new condition to the gdb_test_multiple "disassemble foo" - test to ignore the lines with the .long. - - The patch has been tested on PowerPC and Intel X86-64. - -2022-11-04 Jan Beulich - - x86: adjust recently introduced testcases - The issue addressed by 2c02c72c62d2 ("re: Support Intel AMX-FP16") has - been introduced once again in a number of new tests. - -2022-11-04 Nick Clifton - - Update release documentation with regard to uploading gprofng docs - -2022-11-04 Bruno Larsen - - gdb/testsuite: add KFAILs to gdb.reverse/step-reverse.exp - Recent changes to gdb.reverse/step-reverse.exp revealed the latent bug - PR record/29745, where we can't skip one funcion forward if we're using - native-gdbserver. This commit just adds kfails to the test. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29745 - Approved-By: Simon Marchi - -2022-11-04 Andrew Burgess - - opcodes/arm: silence compiler warning about uninitialized variable use - After this commit: - - commit 6576bffe6cbbb53c5756b2fccd2593ba69b74cdf - Date: Thu Jul 7 13:43:45 2022 +0100 - - opcodes/arm: add disassembler styling for arm - - Some people were seeing their builds failing with complaints about a - possible uninitialized variable usage. I previously fixed an instance - of this issue in this commit: - - commit 2df82cd4b459fbc32120e0ad1ce19e26349506fe - Date: Tue Nov 1 10:36:59 2022 +0000 - - opcodes/arm: silence compiler warning about uninitialized variable use - - which did fix the build problems that the sourceware buildbot was - hitting, however, an additional instance of the same problem was - brought to my attention, and that is fixed in this commit. - - Where commit 2df82cd4b4 fixed the uninitialized variable problem in - print_mve_unpredictable, this commit fixes the same problem in - print_mve_undefined. - - As with the previous commit, I don't believe we could really ever get - an uninitialized variable usage, based on the current usage of the - function, so I have just initialized the reason variable to "??". - -2022-11-04 Mike Frysinger - - sim: rx: drop unused $arch setting - This is only needed for CGEN ports which RX isn't, so drop it. - -2022-11-04 Mike Frysinger - - sim: build: remove various obsolete generation dep variables - These manual settings were necessary when we weren't doing automatic - header dependency tracking. That was changed a while ago, and we use - automake now to do it all for us. As a result, many of these vars - aren't even referenced anymore. - - Further, some of the source file generation (e.g. .c files, or igen, - or cgen outputs) were moved to the common automake build, and it takes - care of dependency tracking for us with the object files. - -2022-11-04 Mike Frysinger - - sim: don't hardcode -ldl for SDL support - Since we use AC_SEARCH_LIBS to find dlopen, we don't need to hardcode - -ldl when using SDL ourselves. - -2022-11-04 konglin1 - - Support Intel AVX-NE-CONVERT - gas/ChangeLog: - - * NEWS: Support Intel AVX-NE-CONVERT. - * config/tc-i386.c: Add avx_ne_convert. - * doc/c-i386.texi: Document .avx_ne_convert. - * testsuite/gas/i386/i386.exp: Run AVX NE CONVERT tests. - * testsuite/gas/i386/avx-ne-convert-intel.d: New test. - * testsuite/gas/i386/avx-ne-convert.d: Ditto. - * testsuite/gas/i386/avx-ne-convert.s: Ditto. - * testsuite/gas/i386/x86-64-avx-ne-convert-intel.d: Ditto. - * testsuite/gas/i386/x86-64-avx-ne-convert.d: Ditto. - * testsuite/gas/i386/x86-64-avx-ne-convert.s: Ditto. - - opcodes/ChangeLog: - - * i386-dis.c (Mw): New. - (PREFIX_VEX_0F3872): Ditto. - (PREFIX_VEX_0F38B0_W_0): Ditto. - (PREFIX_VEX_0F38B1_W_0): Ditto. - (VEX_W_0F3872_P_1): Ditto. - (VEX_W_0F38B0): Ditto. - (VEX_W_0F38B1): Ditto. - (prefix_table): Add PREFIX_VEX_0F3872, PREFIX_VEX_0F38B0_W_0, - PREFIX_VEX_0F38B1_W_0. - (vex_w_table): Add VEX_W_0F3872_P_1, VEX_W_0F38B0, VEX_W_0F38B1. - * i386-gen.c (cpu_flag_init): Add CPU_AVX_NE_CONVERT_FLGAS and - CPU_ANY_AVX_NE_CONVERT_FLAGS. - (cpu_flags): Add CpuAVX_NE_CONVERT. - * i386-init.h: Regenerated. - * i386-opc.h (CpuAVX_NE CONVERT): New. - (i386_cpu_flags): Add cpuavx_ne_convert. - * i386-opc.tbl: Add Intel AVX-NE-CONVERT instructions. - * i386-tbl.h: Regenerated. - -2022-11-04 konglin1 - - i386: Rename template. - opcodes/ - * i386-opc.tbl: Rename template for VEX insn with x/y suffix to . - Rename for EVEX insn with x/y suffix to . - -2022-11-04 Jojo R - - Support multiple .eh_frame sections - This patch is based on MULTIPLE_FRAME_SECTIONS and EH_FRAME_LINKONCE, - it allows backend to enable this feature and use '--gc-sections' simply. - - * gas/dw2gencfi.h (TARGET_MULTIPLE_EH_FRAME_SECTIONS): New. - (MULTIPLE_FRAME_SECTIONS): Add TARGET_MULTIPLE_EH_FRAME_SECTIONS. - * gas/dw2gencfi.c (EH_FRAME_LINKONCE): Add TARGET_MULTIPLE_EH_FRAME_SECTIONS. - (is_now_linkonce_segment): Likewise. - (get_cfi_seg): Create relocation info between .eh_frame.* and .text.* section. - - * bfd/elf-bfd.h (elf_backend_can_make_multiple_eh_frame): New. - * bfd/elfxx-target.h (elf_backend_can_make_multiple_eh_frame): Likewise. - * bfd/elflink.c (_bfd_elf_default_action_discarded): Add checking for - elf_backend_can_make_multiple_eh_frame. - -2022-11-04 Jojo R - - gas/doc/internals.texi: fix typo - * gas/doc/internals.texi (md_emit_single_noop_insn): - fix '@var missing closing brace' - * gas/doc/internals.texi (Hash tables): - fix '@menu reference to nonexistent node `Hash tables'' - -2022-11-04 Mike Frysinger - - sim: drop -lm from SIM_EXTRA_LIBS - We have configure tests for this in the top-level configure script - to link this when necessary, so we don't need to explicitly list it - for specific ports. - - sim: build: change AC_CHECK_LIB to AC_SEARCH_LIBS - With more C libraries moving functions entirely into the main -lc, - change the AC_CHECK_LIB calls to AC_SEARCH_LIBS so we look in there - first and avoid extra linkage when possible. - - sim: build: drop duplicate $(LIBS) usage - COMMON_LIBS is set to $(LIBS), and CONFIG_LIBS is set to that plus - @LIBS@. This leds to the values being used twice. Inline the - CONFIG_LIBS variable without @LIBS@ since it's used only once. - - sim: build: switch to bfd & opcodes libtool linker scripts - Now that we use libtool to link, we don't need to duplicate all the - libs that bfd itself uses. This simplifies the configure & Makefile. - - sim: build: switch to libtool for linking - The top-level already sets up a libtool script for the host, so use - that when linking rather than invoking CC directly. This will also - happen when we (someday) move the building to pure automake. - -2022-11-04 GDB Administrator - - Automatic date update in version.in - -2022-11-03 Mike Frysinger - - sim: testsuite: fix cris stat3 in diff setups - This test uses the test itself as an input to stating regular files. - This gets funky though: when we run check in parallel, the output - object dir is the subdir that matches the .exp file. When we run - with -j1, the output object dir is the sim builddir itself. - - The old test would append argv[0] to find the file, while the new - test uses basename on it. Each method works in only one of the - aforementioned build scenarios. Rather than complicate this any - more, switch to a different file that we know will always exist: - the Makefile. - -2022-11-03 Mike Frysinger - - sim: testsuite: fix cris badarch in multi-target builds - This test assumes that /bin/sh will never be a CRIS ELF by way of - assuming that the current bfd cannot load it (since a basic cris - cross-compiler only understands CRIS ELFs). In a multi-target - build though, bfd understands just about every ELF out there, so - we're able to read the /bin/sh format before failing at a diff - point in the cris code. - - Let's switch to using / instead since it'll fail for a similar - reason (at least similar enough for what this test is testing). - -2022-11-03 Mike Frysinger - - sim: cleanup unused SIM_EXTRA_CFLAGS - We want to eventually delete this, so at least drop the empty ones. - - sim: m32c/rx: drop useless $(ENDLIST) - This is used to allow for dangling \ in object lists, but these are the - only ports that do it, and it isn't really necessary. Punt it to keep - the various makefiles harmonized. - - sim: mips: simplify fpu configure logic - The configure code always defaults to HARD_FLOATING_POINT, so inline - that value and drop redundant target checks as a result. - -2022-11-03 Mike Frysinger - - sim: erc32: link sis to run program - The erc32 sim does a lot itself, including handling of the CLI. It - used to provide a run-compatible interface in the pre-nrun days, but - it was dropped when the old run interface was punted. Since the old - commit 465fb143c87076b6416a8d0d5dd79bb016060fe3 ("sim: make nrun the - default run program"), the erc32 run & sis programs have been the - same, and erc32 hasn't provide a real run-compatible interface. - - Simplify this by linking the two programs via ln/cp instead of running - the linking phase twice to produce the same result. If/when we fix up - the erc32 port to have a proper run interface, it should be easy to - split these back apart into real programs. - - Note: the interf.o reference in here is a bit of a misdirect. Since - that object is placed into libsim.a, it's never been linked into the - programs since the linker ignores objects that aren't referenced, and - only gdb uses those symbols. - -2022-11-03 Nick Clifton - - V850 Linker: do not complain about RWX segments. - PR 29748 - * configure.tgt (ac_default_ld_warn_rwx_segments): Set to 0 for - the V850. - -2022-11-03 Mike Frysinger - - sim: v850: switch to standard (high-level) trace defines - The v850 port uses -DDEBUG to control whether to enable internal tracing. - We already have such options via the common trace framework, and those - can be controlled at build time via configure flags (which the v850 code - currently cannot). So switch it over to WITH_TRACE_ANY_P to simplify the - v850 build code even if it doesn't (yet) respect any other trace options. - - sim: ppc: include copyright & license in --version - This makes it match the other sim run programs and GNU tools. - - sim: update --version copyright year - Probably should have done this 11 months ago ... - - sim: ppc: drop use of DATE & TIME - No other tool does this, sim or otherwise, and it makes the ppc build - non-reproducible. Drop it to simplify & make reproducible. - -2022-11-03 Bruno Larsen - - gdb: Fix issue with Clang CLI macros - Clang up to version 15 (current) adds macros that were defined in the - command line or by "other means", according to the Dwarf specification, - after the last DW_MACRO_end_file, instead of before the first - DW_MACRO_start_file, as the specification dictates. When GDB reads the - macros after the last file is closed, the macros never end up "in scope" - and so we can't print them. This has been submitted as a bug to Clang - developers (https://github.com/llvm/llvm-project/issues/54506), and PR - macros/29034 was opened for GDB to keep track of this. - - Seeing as there is no expected date for it to be fixed, add a workaround - for all current versions of Clang. The workaround detects when - the main file would be closed and if the producer is Clang, and turns - that operation into a noop, so we keep a reference to the current_file - as those macros are read. - - A test case was added to confirm the functionality, and the KFAIL for - running gdb.base/macro-source-path when using clang. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29034 - Approved-By: Simon Marchi - -2022-11-03 Nick Clifton - - AVR Linker: Allow the start of the data region to be specified on the linker command line. [Fix PR number in ChangeLog entry] - PR 29741 - * scripttempl/avr.sc (__DATA_REGION_ORIGIN__): Define. If a value - has not been provided on the command line then use DATA_ORIGIN. - (MEMORY): Use __DATA_REGION_ORIGIN__ as the start of the data region. - - AVR Linker: Allow the start of the data region to specified on the command line. - PR 29471 - * scripttempl/avr.sc (__DATA_REGION_ORIGIN__): Define. If a value - has not been provided on the command line then use DATA_ORIGIN. - (MEMORY): Use __DATA_REGION_ORIGIN__ as the start of the data region. - -2022-11-03 Mike Frysinger - - sim: move common flags to default AM_CPPFLAGS - Since all host files we compile use these settings, move them out of - libcommon.a and into the default AM_CPPFLAGS. This has the effect of - dropping the custom per-target automake rules. Currently it saves us - ~150 lines, but since it's about ~8 lines per object, the overhead - will increase quite a bit as we merge more files into a single build. - - This also changes the object output names, so we have to tweak the - rules that were pulling in the common objects when linking. - -2022-11-03 Mike Frysinger - - sim: merge gnulib logic into the top-level - We aren't using this just yet, but we will, so make it available to - building of common sim files. - - sim: common: remove unused include paths - A bunch of these paths don't include any headers, and most likely - never will, so there's no real need to keep them. This will let - us harmonize paths with the top-level Makefile more easily, which - will in turn make it easier to move more compile steps there. - -2022-11-03 GDB Administrator - - Automatic date update in version.in - -2022-11-02 Christophe Lyon - - arm: PR 29739 Fix typo where ';' should not have been replaced with '@' - ';' does not always indicate the start of a comment, and commit - 8cb6e17571f3fb66ccd4fa19f881602542cd06fc incorrectly replaced 3 - instances of ';' with '@' in expected diagnostics, leading to tests - failures. - - This patch restores the original ';' as needed in these testcases. - - Fixes bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29739 - -2022-11-02 Mike Frysinger - - sim: split CPPFLAGS between build & host - In order to merge more common/ files into the top-level, we need to - add more host flags to CPPFLAGS, and that conflicts with our current - use with build-time tools. So split them apart like we do with all - other build flags to avoid the issue. - - sim: h8300: switch to cpu for state - Rather than rely on pulling out the first cpu from the sim state - for cpu state, pass down the active cpu that's already available. - - sim: common: change sim_{fetch,store}_register helpers to use void* buffers - When reading/writing arbitrary data to the system's memory, the unsigned - char pointer type doesn't make that much sense. Switch it to void so we - align a bit with standard C library read/write functions, and to avoid - having to sprinkle casts everywhere. - -2022-11-02 Jon Turney - - Fix Cygwin build after 20489cca - Update code under __CYGWIN__ which accesses inferior process information - which is now stored in windows_process_info rather than globals. - -2022-11-02 Jon Turney - - Fix Cygwin build after bcb9251f - Absent _UNICODE being defined (which gdb's Makefile doesn't do), - windows.h will always define STARTUPINFO is as STARTUPINFOA, so this - cast isn't correct when create_process expects a STARTUPINFOW - parameter (i.e. in a Cygwin build). - - Instead write this as &info_ex.StartupInfo (which is always of the - correct type). - -2022-11-02 Jan Beulich - - x86: drop bogus Tbyte - Prior to commit 1cb0ab18ad24 ("x86/Intel: restrict suffix derivation") - the Tbyte modifier on the FLDT and FSTPT templates was pointless, as - No_ldSuf would have prevented it being accepted. Due to the special - nature of LONG_DOUBLE_MNEM_SUFFIX said commit, however, has led to these - insns being accepted in Intel syntax mode even when "tbyte ptr" was - present. Restore original behavior by dropping Tbyte there. (Note that - these insns in principle should by marked AT&T syntax only, but since - they haven't been so far we probably shouldn't change that.) - - x86: simplify expressions in update_imm() - Comparing the sum of the relevant .imm fields against a constant imo - makes more obvious what is actually meant. It allows dropping of two - static variables, with a 3rd drop requiring two more minor adjustments - elsewhere, utilizing that "i" is zeroed first thing in md_assemble(). - This also increases the chances of the compiler doing the calculations - all in registers. - -2022-11-02 Nelson Chu - - RISC-V: Fixed the missing $x+arch when adding odd paddings for alignment. - Consider the case, - - .option arch, rv32i - .option norelax - .option arch, +c - .byte 1 - .align 2 - addi a0, zero, 1 - - Assembler adds $d for the odd .byte, and then adds $x+arch for the - alignment. Since norelax, riscv_add_odd_padding_symbol will add the - $d and $x for the odd alignment, but accidently remove the $x+arch because - it has the same address as $d. Therefore, we will get the unexpected result - before applying this patch, - - .byte 1 # $d - .align 2 # odd alignment, $xrv32ic replaced by $d + $x - - After this patch, the expected result should be, - - .byte 1 # $d - .align 2 # odd alignment, $xrv32ic replaced by $d + $xrv32ic - - gas/ - * config/tc-riscv.c (make_mapping_symbol): If we are adding mapping symbol - for odd alignment, then we probably will remove the $x+arch by accidently - when it has the same address of $d. Try to add the removed $x+arch back - after the $d rather than just $x. - (riscv_mapping_state): Updated since parameters of make_mapping_symbol are - changed. - (riscv_add_odd_padding_symbol): Likewise. - (riscv_remove_mapping_symbol): Removed and moved the code into the - riscv_check_mapping_symbols. - (riscv_check_mapping_symbols): Updated. - * testsuite/gas/riscv/mapping-dis.d: Updated and added new testcase. - * testsuite/gas/riscv/mapping-symbols.d: Likewise. - * testsuite/gas/riscv/mapping.s: Likewise. - -2022-11-02 Hu, Lin1 - - Support Intel MSRLIST - gas/ChangeLog: - - * NEWS: Support Intel MSRLIST. - * config/tc-i386.c: Add msrlist. - * doc/c-i386.texi: Document .msrlist. - * testsuite/gas/i386/i386.exp: Add MSRLIST tests. - * testsuite/gas/i386/msrlist-inval.l: New test. - * testsuite/gas/i386/msrlist-inval.s: Ditto. - * testsuite/gas/i386/x86-64-msrlist-intel.d: Ditto. - * testsuite/gas/i386/x86-64-msrlist.d: Ditto. - * testsuite/gas/i386/x86-64-msrlist.s: Ditto. - - opcodes/ChangeLog: - - * i386-dis.c (X86_64_0F01_REG_0_MOD_3_RM_6_P_1): New. - (X86_64_0F01_REG_0_MOD_3_RM_6_P_3): Ditto. - (prefix_table): New entry for msrlist. - (x86_64_table): Add X86_64_0F01_REG_0_MOD_3_RM_6_P_1 - and X86_64_0F01_REG_0_MOD_3_RM_6_P_3. - * i386-gen.c (cpu_flag_init): Add CPU_MSRLIST_FLAGS - and CPU_ANY_MSRLIST_FLAGS. - * i386-init.h: Regenerated. - * i386-opc.h (CpuMSRLIST): New. - (i386_cpu_flags): Add cpumsrlist. - * i386-opc.tbl: Add MSRLIST instructions. - * i386-tbl.h: Regenerated. - -2022-11-02 Hu, Lin1 - - Support Intel WRMSRNS - gas/ChangeLog: - - * NEWS: Support Intel WRMSRNS. - * config/tc-i386.c: Add wrmsrns. - * doc/c-i386.texi: Document .wrmsrns. - * testsuite/gas/i386/i386.exp: Add WRMSRNS tests. - * testsuite/gas/i386/wrmsrns-intel.d: New test. - * testsuite/gas/i386/wrmsrns.d: Ditto. - * testsuite/gas/i386/wrmsrns.s: Ditto. - * testsuite/gas/i386/x86-64-wrmsrns-intel.d: Ditto. - * testsuite/gas/i386/x86-64-wrmsrns.d: Ditto. - - opcodes/ChangeLog: - - * i386-dis.c (PREFIX_0F01_REG_0_MOD_3_RM_6): New. - (prefix_table): Add PREFIX_0F01_REG_0_MOD_3_RM_6. - (rm_table): New entry for wrmsrns. - * i386-gen.c (cpu_flag_init): Add CPU_WRMSRNS_FLAGS - and CPU_ANY_WRMSRNS_FLAGS. - (cpu_flags): Add CpuWRMSRNS. - * i386-init.h: Regenerated. - * i386-opc.h (CpuWRMSRNS): New. - (i386_cpu_flags): Add cpuwrmsrns. - * i386-opc.tbl: Add WRMSRNS instructions. - * i386-tbl.h: Regenerated. - -2022-11-02 Kong Lingling - - Add handler for more i386_cpu_flags - gas/ChangeLog: - - * config/tc-i386.c (cpu_flags_all_zero): Add new ARRAY_SIZE handle. - (cpu_flags_equal): Ditto. - (cpu_flags_and): Ditto. - (cpu_flags_or): Ditto. - (cpu_flags_and_not): Ditto. - -2022-11-02 Haochen Jiang - - Support Intel CMPccXADD - gas/ChangeLog: - - * NEWS: Support Intel CMPccXADD. - * config/tc-i386.c: Add cmpccxadd. - (build_modrm_byte): Add operations for Vex.VVVV reg - on operand 0 while have memory operand. - * doc/c-i386.texi: Document .cmpccxadd. - * testsuite/gas/i386/i386.exp: Run CMPccXADD tests. - * testsuite/gas/i386/cmpccxadd-inval.s: New test. - * testsuite/gas/i386/cmpccxadd-inval.l: Ditto. - * testsuite/gas/i386/x86-64-cmpccxadd-intel.d: Ditto. - * testsuite/gas/i386/x86-64-cmpccxadd.s: Ditto. - * testsuite/gas/i386/x86-64-cmpccxadd.d: Ditto. - - opcodes/ChangeLog: - - * i386-dis.c (Mdq): New. - (X86_64_VEX_0F38E0): Ditto. - (X86_64_VEX_0F38E1): Ditto. - (X86_64_VEX_0F38E2): Ditto. - (X86_64_VEX_0F38E3): Ditto. - (X86_64_VEX_0F38E4): Ditto. - (X86_64_VEX_0F38E5): Ditto. - (X86_64_VEX_0F38E6): Ditto. - (X86_64_VEX_0F38E7): Ditto. - (X86_64_VEX_0F38E8): Ditto. - (X86_64_VEX_0F38E9): Ditto. - (X86_64_VEX_0F38EA): Ditto. - (X86_64_VEX_0F38EB): Ditto. - (X86_64_VEX_0F38EC): Ditto. - (X86_64_VEX_0F38ED): Ditto. - (X86_64_VEX_0F38EE): Ditto. - (X86_64_VEX_0F38EF): Ditto. - (x86_64_table): Add X86_64_VEX_0F38E0, X86_64_VEX_0F38E1, - X86_64_VEX_0F38E2, X86_64_VEX_0F38E3, X86_64_VEX_0F38E4, - X86_64_VEX_0F38E5, X86_64_VEX_0F38E6, X86_64_VEX_0F38E7, - X86_64_VEX_0F38E8, X86_64_VEX_0F38E9, X86_64_VEX_0F38EA, - X86_64_VEX_0F38EB, X86_64_VEX_0F38EC, X86_64_VEX_0F38ED, - X86_64_VEX_0F38EE, X86_64_VEX_0F38EF. - * i386-gen.c (cpu_flag_init): Add CPU_CMPCCXADD_FLAGS and - CPU_ANY_CMPCCXADD_FLAGS. - (cpu_flags): Add CpuCMPCCXADD. - * i386-init.h: Regenerated. - * i386-opc.h (CpuCMPCCXADD): New. - (i386_cpu_flags): Add cpucmpccxadd. Comment unused for it is actually 0. - * i386-opc.tbl: Add Intel CMPccXADD instructions. - * i386-tbl.h: Regenerated. - -2022-11-02 Cui,Lili - - Support Intel AVX-VNNI-INT8 - gas/ - * NEWS: Support Intel AVX-VNNI-INT8. - * config/tc-i386.c: Add avx_vnni_int8. - * doc/c-i386.texi: Document avx_vnni_int8. - * testsuite/gas/i386/avx-vnni-int8-intel.d: New file. - * testsuite/gas/i386/avx-vnni-int8.d: Likewise. - * testsuite/gas/i386/avx-vnni-int8.s: Likewise. - * testsuite/gas/i386/x86-64-avx-vnni-int8-intel.d: Likewise. - * testsuite/gas/i386/x86-64-avx-vnni-int8.d: Likewise. - * testsuite/gas/i386/x86-64-avx-vnni-int8.s: Likewise. - * testsuite/gas/i386/i386.exp: Run AVX VNNI INT8 tests. - - opcodes/ - * i386-dis.c: (PREFIX_VEX_0F3850) New. - (PREFIX_VEX_0F3851): Likewise. - (VEX_W_0F3850_P_0): Likewise. - (VEX_W_0F3850_P_1): Likewise. - (VEX_W_0F3850_P_2): Likewise. - (VEX_W_0F3850_P_3): Likewise. - (VEX_W_0F3851_P_0): Likewise. - (VEX_W_0F3851_P_1): Likewise. - (VEX_W_0F3851_P_2): Likewise. - (VEX_W_0F3851_P_3): Likewise. - (VEX_W_0F3850): Delete. - (VEX_W_0F3851): Likewise. - (prefix_table): Add PREFIX_VEX_0F3850 and PREFIX_VEX_0F3851. - (vex_table): Add PREFIX_VEX_0F3850 and PREFIX_VEX_0F3851, - delete VEX_W_0F3850 and VEX_W_0F3851. - (vex_w_table): Add VEX_W_0F3850_P_0, VEX_W_0F3850_P_1, VEX_W_0F3850_P_2 - VEX_W_0F3850_P_3, VEX_W_0F3851_P_0, VEX_W_0F3851_P_1, VEX_W_0F3851_P_2 - and VEX_W_0F3851_P_3, delete VEX_W_0F3850 and VEX_W_0F3851. - * i386-gen.c: (cpu_flag_init): Add CPU_AVX_VNNI_INT8_FLAGS - and CPU_ANY_AVX_VNNI_INT8_FLAGS. - (cpu_flags): Add CpuAVX_VNNI_INT8. - * i386-opc.h (CpuAVX_VNNI_INT8): New. - * i386-opc.tbl: Add Intel AVX_VNNI_INT8 instructions. - * i386-init.h: Regenerated. - * i386-tbl.h: Likewise. - -2022-11-02 Hongyu Wang - Haochen Jiang - - Support Intel AVX-IFMA - x86: Support Intel AVX-IFMA - - Intel AVX IFMA instructions are marked with CpuVEX_PREFIX, which is - cleared by default. Without {vex} pseudo prefix, Intel IFMA instructions - are encoded with EVEX prefix. {vex} pseudo prefix will turn on VEX - encoding for Intel IFMA instructions. - - gas/ - - * NEWS: Support Intel AVX-IFMA. - * config/tc-i386.c (cpu_arch): Add avx_ifma. - * doc/c-i386.texi: Document .avx_ifma. - * testsuite/gas/i386/avx-ifma.d: New file. - * testsuite/gas/i386/avx-ifma-intel.d: Likewise. - * testsuite/gas/i386/avx-ifma.s: Likewise. - * testsuite/gas/i386/x86-64-avx-ifma.d: Likewise. - * testsuite/gas/i386/x86-64-avx-ifma-intel.d: Likewise. - * testsuite/gas/i386/x86-64-avx-ifma.s: Likewise. - * testsuite/gas/i386/i386.exp: Run AVX IFMA tests. - - opcodes/ - - * i386-dis.c (PREFIX_VEX_0F38B4): New. - (PREFIX_VEX_0F38B5): Likewise. - (VEX_W_0F38B4_P_2): Likewise. - (VEX_W_0F38B5_P_2): Likewise. - (prefix_table): Add PREFIX_VEX_0F38B4 and PREFIX_VEX_0F38B5. - (vex_table): Add VEX_W_0F38B4_P_2 and VEX_W_0F38B5_P_2. - * i386-dis-evex.h: Fold AVX512IFMA entries to AVX-IFMA. - * i386-gen.c (cpu_flag_init): Clear the CpuAVX_IFMA bit in - CPU_UNKNOWN_FLAGS. Add CPU_AVX_IFMA_FLGAS and - CPU_ANY_AVX_IFMA_FLAGS. Add CpuAVX_IFMA to CPU_AVX2_FLAGS. - (cpu_flags): Add CpuAVX_IFMA. - * i386-opc.h (CpuAVX_IFMA): New. - (i386_cpu_flags): Add cpuavx_ifma. - * i386-opc.tbl: Add Intel AVX IFMA instructions. - * i386-init.h: Regenerated. - * i386-tbl.h: Likewise. - -2022-11-02 GDB Administrator - - Automatic date update in version.in - -2022-11-01 Andrew Burgess - - opcodes/arm: don't pass non-string literal to printf like function - The earlier commit: - - commit 6576bffe6cbbb53c5756b2fccd2593ba69b74cdf - Date: Thu Jul 7 13:43:45 2022 +0100 - - opcodes/arm: add disassembler styling for arm - - introduced two places where a register name was passed as the format - string to the disassembler's fprintf_styled_func callback. This will - cause a warning from some compilers, like this: - - ../../binutils-gdb/opcodes/arm-dis.c: In function ‘print_mve_vld_str_addr’: - ../../binutils-gdb/opcodes/arm-dis.c:6005:3: error: format not a string literal and no format arguments [-Werror=format-security] - 6005 | func (stream, dis_style_register, arm_regnames[gpr]); - | ^~~~ - - This commit fixes these by using "%s" as the format string. - -2022-11-01 Andrew Burgess - - opcodes/arm: silence compiler warning about uninitialized variable use - The earlier commit: - - commit 6576bffe6cbbb53c5756b2fccd2593ba69b74cdf - Date: Thu Jul 7 13:43:45 2022 +0100 - - opcodes/arm: add disassembler styling for arm - - was causing a compiler warning about a possible uninitialized variable - usage within opcodes/arm-dis.c. - - The problem is in print_mve_unpredictable, and relates to the reason - variable, which is set by a switch table. - - Currently the switch table does cover every valid value, though there - is no default case. The variable switched on is passed in as an - argument to the print_mve_unpredictable function. - - Looking at how print_mve_unpredictable is used, there is only one use, - the second argument is the one that is used for the switch table, - looking at how this argument is set, I don't believe it is possible - for this argument to take an invalid value. - - So, I think the compiler warning is a false positive. As such, my - proposed solution is to initialize the reason variable to the string - "??", this will silence the warning, and the "??" string should never - end up being printed. - -2022-11-01 Andrew Burgess - - opcodes/arm: add disassembler styling for arm - This commit adds disassembler styling for the ARM architecture. - - The ARM disassembler is driven by several instruction tables, - e.g. cde_opcodes, coprocessor_opcodes, neon_opcodes, etc - - The type for elements in each table can vary, but they all have one - thing in common, a 'const char *assembler' field. This field - contains a string that describes the assembler syntax of the - instruction. - - Embedded within that assembler syntax are various escape characters, - prefixed with a '%'. Here's an example of a very simple instruction - from the arm_opcodes table: - - "pld\t%a" - - The '%a' indicates a particular type of operand, the function - print_insn_arm processes the arm_opcodes table, and includes a switch - statement that handles the '%a' operand, and takes care of printing - the correct value for that instruction operand. - - It is worth noting that there are many print_* functions, each - function handles a single *_opcodes table, and includes its own switch - statement for operand handling. As a result, every *_opcodes table - uses a different mapping for the operand escape sequences. This means - that '%a' might print an address for one *_opcodes table, but in a - different *_opcodes table '%a' might print a register operand. - - Notice as well that in our example above, the instruction mnemonic - 'pld' is embedded within the assembler string. Some instructions also - include comments within the assembler string, for example, also from - the arm_opcodes table: - - "nop\t\t\t@ (mov r0, r0)" - - here, everything after the '@' is a comment that is displayed at the - end of the instruction disassembly. - - The next complexity is that the meaning of some escape sequences is - not necessarily fixed. Consider these two examples from arm_opcodes: - - "ldrex%c\tr%12-15d, [%16-19R]" - "setpan\t#%9-9d" - - Here, the '%d' escape is used with a bitfield modifier, '%12-15d' in - the first instruction, and '%9-9d' in the second instruction, but, - both of these are the '%d' escape. - - However, in the first instruction, the '%d' is used to print a - register number, notice the 'r' immediately before the '%d'. In the - second instruction the '%d' is used to print an immediate, notice the - '#' just before the '%d'. - - We have two problems here, first, the '%d' needs to know if it should - use register style or immediate style, and secondly, the 'r' and '#' - characters also need to be styled appropriately. - - The final thing we must consider is that some escape codes result in - more than just a single operand being printed, for example, the '%q' - operand as used in arm_opcodes ends up calling arm_decode_shift, which - can print a register name, a shift type, and a shift amount, this - could end up using register, sub-mnemonic, and immediate styles, as - well as the text style for things like ',' between the different - parts. - - I propose a three layer approach to adding styling: - - (1) Basic state machine: - - When we start printing an instruction we should maintain the idea - of a 'base_style'. Every character from the assembler string will - be printed using the base_style. - - The base_style will start as mnemonic, as each instruction starts - with an instruction mnemonic. When we encounter the first '\t' - character, the base_style will change to text. When we encounter - the first '@' the base_style will change to comment_start. - - This simple state machine ensures that for simple instructions the - basic parts, except for the operands themselves, will be printed in - the correct style. - - (2) Simple operand styling: - - For operands that only have a single meaning, or which expand to - multiple parts, all of which have a consistent meaning, then I - will simply update the operand printing code to print the operand - with the correct style. This will cover a large number of the - operands, and is the most consistent with how styling has been - added to previous architectures. - - (3) New styling syntax in assembler strings: - - For cases like the '%d' that I describe above, I propose adding a - new extension to the assembler syntax. This extension will allow - me to temporarily change the base_style. Operands like '%d', will - then print using the base_style rather than using a fixed style. - - Here are the two examples from above that use '%d', updated with - the new syntax extension: - - "ldrex%c\t%{R:r%12-15d%}, [%16-19R]" - "setpan\t%{I:#%9-9d%}" - - The syntax has the general form '%{X:....%}' where the 'X' - character changes to indicate a different style. In the first - instruction I use '%{R:...%}' to change base_style to the register - style, and in the second '%{I:...%}' changes base_style to - immediate style. - - Notice that the 'r' and '#' characters are included within the new - style group, this ensures that these characters are printed with - the correct style rather than as text. - - The function decode_base_style maps from character to style. I've - included a character for each style for completeness, though only - a small number of styles are currently used. - - I have updated arm-dis.c to the above scheme, and checked all of the - tests in gas/testsuite/gas/arm/, and the styling looks reasonable. - - There are no regressions on the ARM gas/binutils/ld tests that I can - see, so I don't believe I've changed the output layout at all. There - were two binutils tests for which I needed to force the disassembler - styling off. - - I can't guarantee that I've not missed some untested corners of the - disassembler, or that I might have just missed some incorrectly styled - output when reviewing the test results, but I don't believe I've - introduced any changes that could break the disassembler - the worst - should be some aspect is not styled correctly. - -2022-11-01 Andrew Burgess - - opcodes/arm: use '@' consistently for the comment character - Looking at the ARM disassembler output, every comment seems to start - with a ';' character, so I assumed this was the correct character to - start an assembler comment. - - I then spotted a couple of places where there was no ';', but instead, - just a '@' character. I thought that this was a case of a missing - ';', and proposed a patch to add the missing ';' characters. - - Turns out I was wrong, '@' is actually the ARM assembler comment - character, while ';' is the statement separator. Thus this: - - nop ;@ comment - - is two statements, the first is the 'nop' instruction, while the - second contains no instructions, just the '@ comment' comment text. - - This: - - nop @ comment - - is a single 'nop' instruction followed by a comment. And finally, - this: - - nop ; comment - - is two statements, the first contains the 'nop' instruction, while the - second contains the instruction 'comment', which obviously isn't - actually an instruction at all. - - Why this matters is that, in the next commit, I would like to add - libopcodes syntax styling support for ARM. - - The question then is how should the disassembler style the three cases - above? - - As '@' is the actual comment start character then clearly the '@' and - anything after it can be styled as a comment. But what about ';' in - the second example? Style as text? Style as a comment? - - And the third example is even harder, what about the 'comment' text? - Style as an instruction mnemonic? Style as text? Style as a comment? - - I think the only sensible answer is to move the disassembler to use - '@' consistently as its comment character, and remove all the uses of - ';'. - - Then, in the next commit, it's obvious what to do. - - There's obviously a *lot* of tests that get updated by this commit, - the only actual code changes are in opcodes/arm-dis.c. - -2022-11-01 GDB Administrator - - Automatic date update in version.in - -2022-10-31 Tom Tromey - - Add missing TYPE_CODE_* constants to Python - A user noticed that TYPE_CODE_FIXED_POINT was not exported by the gdb - Python layer. This patch fixes the bug, and prevents future - occurences of this type of bug. - -2022-10-31 Carl Love - - Remove REPARSE condition to force hardware resource checking when updating watchpoints - Currently the resource checking is done if REPARSE is true. The hardware - watchpoint resource checking in update_watchpoint needs to be redone on - each call to function update_watchpoints as the value chain may have - changed. The number of hardware registers needed for a watchpoint can - change if the variable being watched changes. This situation occurs in - this test when watching variable **global_ptr_ptr. Initially when the - watch command is issued, only two addresses need to be watched as - **global_ptr_ptr has not yet been initialized. Once the value of - **global_ptr_ptr is initialized the locations to be tracked increase to - three addresses. However, update_watchpoints is not called again with - REPARSE set to 1 to force the resource checking to be redone. When the - test is run on Power 10, an internal gdb error occurs when the PowerPC - routine tries to setup the three hardware watchpoint address since the hw - only has two hardware watchpoint registers. The error occurs because the - resource checking was not redone in update_watchpoints after - **global_ptr_ptr changed. - - The following descibes the situation in detail that occurs on Power 10 with - gdb running on the binary for gdb.base/watchpoint.c. - - 1 break func4 - 2 run - 3 watch *global_ptr - 4 next execute source code: buf[0] = 3; - 5 next execute source code: global_ptr = buf; - 6 next execute source code: buf[0] = 7; - 7 delete 2 (delete watch *global_ptr) - 8 watch **global_ptr_ptr - 9 next execute source code: buf[1] = 5; - 10 next global_ptr_ptr = &global_ptr; - 11 next buf[0] = 9; - - In step 8, the the watch **global_ptr_prt command calls update_watchpoint - in breakpoint.c with REPARSE set to 1. The function update_watchpoint - calls can_use_hardware_watchpoint to see if there are enough - resources available to add the watchpoint since REPARSE is set to 1. At - this point, **global_ptr_ptr has not been initialized so only two addresses - are watched. The val_chain contains the address for **global_ptr_ptr and 0 - since **global_ptr_ptr has not been initialized. The update_watchpoint - updates the breakpoint list as follows: - - breakpoint 0 - loc 0: b->address = 0x100009c0 - breakpoint 1 - loc 1: b->address = 0x7ffff7f838a0 - breakpoint 2 - loc 2: b->address = 0x7ffff7b7fc54 - breakpoint 3 - loc 3: b->address = 0x7ffff7a5788c - breakpoint 4 - loc 4: b->address = 0x0 <-- location pointed to by global_ptr_ptr - loc 5: b->address = 0x100200b8 <-- global_ptr_ptr watchpoint - breakpoint 5 - loc 6: b->address = 0x7ffff7b7fc54 - - In step 10, the next command executes the source code - global_ptr_ptr = &global_ptr. This changes the set of locations to be - watched for the watchpoint **global_ptr_prt. The list of addresses for the - breakpoint consist of the address for global_ptr_prt, global_ptr and buf. - The breakpoint list gets updated by update_watchpoint as follows: - - breakpoint 0 - loc 0: b->address = 0x100009c0 - breakpoint 1 - loc 1: b->address = 0x7ffff7f838a0 - breakpoint 2 - loc 2: b->address = 0x7ffff7b7fc54 - breakpoint 3 - loc 3: b->address = 0x7ffff7a5788c - breakpoint 4 - loc 4: b->address = 0x10020050 buf - loc 5: b->address = 0x100200b0 watch *global_ptr - loc 6: b->address = 0x100200b8 watch **global_ptr_ptr - breakpoint 5 - loc 7: b->address = 0x7ffff7b7fc54 - breakpoint 6 - - However, the hardware resource checking was not redone because - update_breakpoint was called with REPARSE equal to 0. - - Step 11, execute the third next command. The function - ppc_linux_nat_target::low_prepare_to_resume() attempts a ptrace - call to setup each of the three address for breakpoint 4. The slot - value returned for the third ptrace call is -1 indicating an error - because there are only two hardware watchpoint registers available on - Power 10. - - This patch removes just the statement "if (reparse)" in function - update_watchpoint to force the resources to be rechecked on every call to - the function. This ensures that any changes to the val_chain resulting - in needing more resources then available will be caught. - - The patch has been tested on Power 8, Power 10 and X86-64. Note the patch - has no effect on Power 9 since hardware watchpoint support is disabled on - that processor. - -2022-10-31 Carl Love - - PowerPC, add support for recording pipe2 system call. - Test gdb.reverse/pipe-reverse.exp fails on Power 10 running the fedora 36 - distro. The gdb record error message is: - - Process record and replay target doesn't support syscall number 317. - - System call 317 on PowerPC maps to the pipe2 system call. - - This patch adds support for the missing pipe2 system call for PowerPC. - - Patch fixes the test failure in gdb.reverse/pipe-reverse.exp. - - The patch has been tested on Power 10 with no regression failures. - -2022-10-31 Jan Beulich - - x86: minor improvements to optimize_imm() (part III) - Earlier tidying still missed an opportunity: There's no need for the - "anyimm" static variable. Instead of using it in the loop to mask - "allowed" (which is necessary to satisfy operand_type_or()'s assertions) - simply use "mask", requiring it to be calculated first. That way the - post-loop masking by "mask" ahead of the operand_type_all_zero() can be - dropped. - -2022-10-31 Mike Frysinger - - sim: reg: constify store helper - These functions only read from memory, so mark the pointer as const. - - sim: constify various integer readers - These functions only read from memory, so mark the pointer as const. - - sim: cgen: constify GETT helpers - These functions only read from memory, so mark the pointer as const. - - sim: common: change sim_read & sim_write to use void* buffers - When reading/writing arbitrary data to the system's memory, the unsigned - char pointer type doesn't make that much sense. Switch it to void so we - align a bit with standard C library read/write functions, and to avoid - having to sprinkle casts everywhere. - -2022-10-31 H.J. Lu - - x86: Silence GCC 12 warning on tc-i386.c - Silence GCC 12 warning on tc-i386.c: - - gas/config/tc-i386.c: In function ‘md_assemble’: - gas/config/tc-i386.c:5039:16: error: too many arguments for format [-Werror=format-extra-args] - 5039 | as_warn (_("only support RIP-relative address"), i.tm.name); - - * config/tc-i386.c (md_assemble): Print mnemonic in RIP-relative - warning. - * estsuite/gas/i386/x86-64-prefetchi-warn.l: Updated. - -2022-10-31 Tom Tromey - - Use enum for gdbarch's call_dummy_location - This changes gdbarch to use an enum for call_dummy_location, providing - a little more type safety. - - Inline initialization of gdbarch members - This changes gdbarch to use the "predefault" to initialize its members - inline. This required changing a couple of the Value instantiations - to avoid a use of "gdbarch" during initialization, but on the whole I - think this is better -- it removes a hidden ordering dependency. - -2022-10-31 Tom Tromey - - Fix regression in pointer-to-member printing - PR c++/29243 points out that "info func" on a certain C++ executable - will cause an infinite loop in gdb. - - I tracked this down to a bug introduced by commit 6b5a7bc76 ("Handle - member pointers directly in generic_value_print"). Before this - commit, the C++ code to print a member pointer would wind up calling - value_print_scalar_formatted; but afterward it simply calls - generic_value_print and gets into a loop. - - This patch restores the previous behavior and adds a regression test. - -2022-10-31 Nick Clifton - - Updated Romainain translation for the binutils sub-directory and Swedish translations for the ld and opcodes sub-directories. - -2022-10-31 Cui, Lili - - Support Intel PREFETCHI - gas/ChangeLog: - - * NEWS: Add support for Intel PREFETCHI instruction. - * config/tc-i386.c (load_insn_p): Use prefetch* to fold all prefetches. - (md_assemble): Add warning for illegal input of PREFETCHI. - * doc/c-i386.texi: Document .prefetchi. - * testsuite/gas/i386/i386.exp: Run PREFETCHI tests. - * testsuite/gas/i386/x86-64-lfence-load.d: Add PREFETCHI. - * testsuite/gas/i386/x86-64-lfence-load.s: Likewise. - * testsuite/gas/i386/x86-64-prefetch.d: New test. - * testsuite/gas/i386/x86-64-prefetchi-intel.d: Likewise. - * testsuite/gas/i386/x86-64-prefetchi-inval-register.d: Likewise.. - * testsuite/gas/i386/x86-64-prefetchi-inval-register.s: Likewise. - * testsuite/gas/i386/x86-64-prefetchi-warn.l: Likewise. - * testsuite/gas/i386/x86-64-prefetchi-warn.s: Likewise. - * testsuite/gas/i386/x86-64-prefetchi.d: Likewise. - * testsuite/gas/i386/x86-64-prefetchi.s: Likewise. - - opcodes/ChangeLog: - - * i386-dis.c (reg_table): Add MOD_0F18_REG_6 and MOD_0F18_REG_7 - (x86_64_table): Add X86_64_0F18_REG_6_MOD_0 and X86_64_0F18_REG_7_MOD_0. - (mod_table): Add MOD_0F18_REG_6 and MOD_0F18_REG_7. - (prefix_table): Add PREFIX_0F18_REG_6_MOD_0_X86_64 and - PREFIX_0F18_REG_7_MOD_0_X86_64. - (PREFETCHI_Fixup): New. - * i386-gen.c (cpu_flag_init): Add CPU_PREFETCHI_FLAGS. - (cpu_flags): Add CpuPREFETCHI. - * i386-opc.h (CpuPREFETCHI): New. - (i386_cpu_flags): Add cpuprefetchi. - * i386-opc.tbl: Add Intel PREFETCHI instructions. - * i386-init.h: Regenerated. - * i386-tbl.h: Likewise. - -2022-10-31 Bruno Larsen - - gdb/testsuite: fix gdb.cp/converts.exp to run with clang - Clang attempts to minimize the size of the debug-info by not adding - complete information about types that aren't constructed in a given - file. Specifically, this meant that there was minimal information about - class B in the test gdb.cp/converts.exp. To fix this, we just need to - construct any object of type B in that file. - - Approved-By: Andrew Burgess - -2022-10-31 Bruno Larsen - - gdb/testsuite: add XFAIL to gdb.cp/ptype-flags.exp when using clang - When running gdb.cp/ptype-flags.exp using Clang, we get an unexpected - failure when printing the type of a class with an internal typedef. This - happens because Clang doesn't add accessibility information for typedefs - inside classes (see https://github.com/llvm/llvm-project/issues/57608 - for more info). To help with Clang testing, an XFAIL was added to this - test. - -2022-10-31 Yoshinori Sato - - RX assembler: switch arguments of thw MVTACGU insn. - -2022-10-31 Nick Clifton - - objdump: Add configure time option to enable colored disassembly output by default. - PR 29457 - * configure.ac: Add --enable-colored-disassembly. - * objdump.c: Add --disassembler-color=terminal. - * doc/binutils.texi (objdump): Document the new option. - * NEWS: Mention new feature. - * config.in: Regenerate in. - * configure: Regenerate. - -2022-10-31 Mark Harmstone - - ld: Add publics stream to PDB files - - ld: Add section header stream to PDB files - - ld: Use %E in einfo in pdb.c - Resubmission, taking into account - https://sourceware.org/pipermail/binutils/2022-October/123948.html. - -2022-10-31 GDB Administrator - - Automatic date update in version.in - -2022-10-30 Alan Modra - - Pool section entries for DWP version 1 - Ref: https://gcc.gnu.org/wiki/DebugFissionDWP?action=recall&rev=3 - - Fuzzers have found a weakness in the code stashing pool section - entries. With random nonsensical values in the index entries (rather - than each index pointing to its own set distinct from other sets), - it's possible to overflow the space allocated, losing the NULL - terminator. Without a terminator, find_section_in_set can run off the - end of the shndx_pool buffer. Fix this by scanning the pool directly. - - binutils/ - * dwarf.c (add_shndx_to_cu_tu_entry): Delete range check. - (end_cu_tu_entry): Likewise. - (process_cu_tu_index): Fill shndx_pool by directly scanning - pool, rather than indirectly from index entries. - -2022-10-30 GDB Administrator - - Automatic date update in version.in - -2022-10-29 Maciej W. Rozycki - - gdb/testsuite: Wrap `param_integer_error' in gdb.guile/scm-parameter.exp - Wrap an overlong line in the definition of `param_integer_error' in - gdb.guile/scm-parameter.exp. No functional change. - -2022-10-29 Tsukasa OI - - sim/sh: Remove redundant function declaration - Clang generates a warning if there is a function declaration/definition - with zero arguments. Such declarations/definitions without a prototype (an - argument list) are deprecated forms of indefinite arguments - ("-Wdeprecated-non-prototype"). On the default configuration, it causes a - build failure (unless "--disable-werror" is specified). - - But there is another issue. This function declaration in sim/sh/interp.c - is completely redundant. This commit just removes that declaration. - -2022-10-29 Tsukasa OI - - sim/m32r: Initialize "list" variable - The variable "list" is only initialized when arg1 > 0 and when arg1 == 0, - an uninitialized value is passed to translate_endian_h2t function. - - Although this behavior is harmless, this commit adds initialization to avoid - a GCC warning ("-Wmaybe-uninitialized"). - -2022-10-29 Tsukasa OI - - sim/erc32: Use int32_t as IRQ callback argument - Clang generates a warning if an argument is passed to a function without - prototype (zero arguments, even without (void)). Such calls are deprecated - forms of indefinite arguments passing ("-Wdeprecated-non-prototype"). - On the default configuration, it (somehow) doesn't cause a build failure but - a warning is generated. - - But because the cause is the same as the issue the author fixed in - "sim/erc32: Use int32_t as event callback argument", it would be better to - fix it now to prevent problems in the future. - - To fix the issue, this commit makes struct irqcall to use int32_t as a - callback (callback) argument of an IRQ. - -2022-10-29 Tsukasa OI - - sim/erc32: Use int32_t as event callback argument - Clang generates a warning if an argument is passed to a function without - prototype (zero arguments, even without (void)). Such calls are deprecated - forms of indefinite arguments passing ("-Wdeprecated-non-prototype"). - On the default configuration, it causes a build failure (unless - "--disable-werror" is specified). - - To fix that, this commit makes struct evcell to use int32_t as a callback - (cfunc) argument of an event. int32_t is chosen because "event" function - accepts "int32_t arg". - -2022-10-29 Tsukasa OI - - sim/erc32: Insert void parameter - Clang generates a warning if there is a function declaration/definition - with zero arguments. Such declarations/definitions without a prototype (an - argument list) are deprecated forms of indefinite arguments - ("-Wdeprecated-non-prototype"). On the default configuration, it causes a - build failure (unless "--disable-werror" is specified). - - This commit replaces () with (void) to avoid this warning. - -2022-10-29 Tom de Vries - - [gdb/testsuite] Use ssh -t in remote-*.exp - When running test-case gdb.server/multi-ui-errors.exp on target board - remote-gdbserver-on-localhost.exp, I run into: - ... - (gdb) PASS: gdb.server/multi-ui-errors.exp: connect to gdbserver - continue^M - Continuing.^M - PASS: gdb.server/multi-ui-errors.exp: continue - extra UI - Remote debugging from host ::1, port 35466^M - FAIL: gdb.server/multi-ui-errors.exp: ensure inferior is running - ... - - The problem is that the target board uses ssh -T, which fails to guarantee - that output from the inferior will be available. - - Fix this by copying proc ${board}_spawn from local-remote-host.exp, which - ensures using ssh -t. [ It would be nice to define an ssh base board to - get rid of the copies, but I'm not addressing that in this commit. ] - - Likewise for target board remote-stdio-gdbserver.exp. - - Tested on x86_64-linux. - -2022-10-29 Tom de Vries - - [gdb/testsuite] Fix gdb.server/multi-ui-errors.exp with local-remote-host-notty - With test-case gdb.server/multi-ui-errors.exp and host board - local-remote-host-notty, I run into: - ... - (gdb) PASS: gdb.server/multi-ui-errors.exp: interact with GDB's main UI - Executing on target: kill -9 29666 (timeout = 300) - builtin_spawn -ignore SIGHUP kill -9 29666^M - echo^M - Remote connection closed^M - (gdb) (gdb) FAIL: gdb.server/multi-ui-errors.exp: \ - main UI, prompt after gdbserver dies (timeout) - ... - - In contrast, with local-remote-host (so, everything the same but editing off): - ... - (gdb) PASS: gdb.server/multi-ui-errors.exp: interact with GDB's main UI - Executing on target: kill -9 31245 (timeout = 300) - builtin_spawn -ignore SIGHUP kill -9 31245^M - Remote connection closed^M - (gdb) echo^M - (gdb) PASS: gdb.server/multi-ui-errors.exp: main UI, prompt after gdbserver dies - ... - - The test-case issues a kill, which results in a "Remote connection closed" - message and a prompt. - - The problem is that the prompt is not consumed, so the subsequent echo may be - issued before that prompt, which causes a mismatch when matching the result - of the echo. - - Fix this by consuming the "Remote connection closed" message and prompt. - - Tested on x86_64-linux. - -2022-10-29 Tom de Vries - - [gdb/testsuite] Consume output asap in gdb.server/multi-ui-errors.exp - With test-case gdb.server/multi-ui-errors.exp we see: - ... - (gdb) PASS: multi-ui-errors.exp: main UI, prompt after gdbserver dies - continue^M - Continuing.^M - echo^M - (gdb) PASS: multi-ui-errors.exp: extra UI, prompt after gdbserver dies - ... - - The continue is issued earlier in the test-case, but the output has not been - consumed, which makes it show up much later. - - Consume the continue output asap, to make it clear when the continue is issued: - ... - (gdb) PASS: gdb.server/multi-ui-errors.exp: connect to gdbserver - continue^M - Continuing.^M - PASS: gdb.server/multi-ui-errors.exp: continue - extra UI - ... - - Tested on x86_64-linux. - -2022-10-29 Tom de Vries - - [gdb/testsuite] Remove REMOTE_PORTNUM in remote-stdio-gdbserver.exp - The usage for board remote-stdio-gdbserver.exp is advertised as: - ... - # bash$ make check RUNTESTFLAGS="--target_board=remote-stdio-gdbserver \ - # REMOTE_USERNAME=... REMOTE_HOSTNAME=... REMOTE_PORTNUM=... \ - # [REMOTE_TMPDIR=${remote_dir}] [GDBSERVER=${remote_gdbserver}]" - ... - but when adding REMOTE_PORTNUM=22, I run into: - ... - Running stop-reply-no-thread-multi.exp ... - ERROR: tcl error sourcing stop-reply-no-thread-multi.exp. - ERROR: couldn't execute "/usr/bin/ssh -p22": no such file or directory - while executing - "builtin_spawn {/usr/bin/ssh -p22} -l vries localhost {/usr/bin/gdbserver \ - --once localhost:2346 \ - /home/vries/gdb_versions/devel/build/gdb/testsuite/outp..." - ... - - Fix this by simply removing REMOTE_PORTNUM. - - Tested on x86_64-linux. - -2022-10-29 Tsukasa OI - - sim, sim/{m32c,ppc,rl78}: Use getopt_long - Because of a Libiberty hack, getopt on GNU libc (2.25 or earlier) is - currently unusable on sim, causing a regression on CentOS 7. - - This is caused as follows: - - 1. If HAVE_DECL_GETOPT is defined (getopt declaration with known prototype - is detected while configuration), a declaration of getopt in - "include/getopt.h" is suppressed. - The author started to define HAVE_DECL_GETOPT in sim with the commit - 340aa4f6872c ("sim: Check known getopt definition existence"). - 2. GNU libc (2.25 or earlier)'s includes with a - special purpose macro defined to declare only getopt function but due - to include path (not tested while configuration), it causes - to include Libiberty's "include/getopt.h". - 3. If both 1. and 2. are satisfied, despite that tries to - declare getopt by including , "include/getopt.h" does not do - so, causing getopt function undeclared. - - Getting rid of "include/getopt.h" (e.g. renaming this header file) is the - best solution to avoid hacking but as a short-term solution, this commit - replaces getopt with getopt_long under sim/. - -2022-10-29 Alan Modra - - pef: sanity check before malloc - And do the sanity check in a way that can't overflow. - - * pef.c (bfd_pef_parse_function_stubs): Sanity check header - imported_library_count and total_imported_symbol_count before - allocating memory. - -2022-10-29 Alan Modra - - Fix small objcopy memory leak - * objcopy.c (copy_archive): Free l->name. - -2022-10-29 Alan Modra - - NULL dereference read in som_write_object_contents - objcopy copy_object may omit the call to bfd_copy_private_bfd_data for - various conditions deemed non-fatal, in which case obj_som_exec_data - will be NULL for the output file. - - * som.c (som_finish_writing): Don't dereference NULL - obj_som_exec_data. - -2022-10-29 Nelson Chu - - RISC-V: Always generate mapping symbols at the start of the sections. - Before figuring out the suppress rule of mapping symbol with architecture - (changed back to $x), always generate them at the start of the sections. - - gas/ - * config/tc-riscv.c (need_arch_map_symbol): Removed. - (riscv_mapping_state): Updated. - (riscv_check_mapping_symbols): Updated. - * testsuite/gas/riscv/mapping-non-arch.d: Removed. - * testsuite/gas/riscv/mapping-non-arch.s: Likewise. - -2022-10-29 GDB Administrator - - Automatic date update in version.in - -2022-10-28 Palmer Dabbelt - - gas: NEWS: Note support for RISC-V Zawrs - This has been supported since eb668e50036 ("RISC-V: Add Zawrs ISA - extension support"). - - gas: NEWS: Add a missing newline - -2022-10-28 Tom Tromey - - Convert compunit_language to a method - This changes compunit_language to be a method on compunit_symtab. - - Approved-By: Simon Marchi - -2022-10-28 Tsukasa OI - - RISC-V: Improve "bits undefined" diagnostics - This commit improves internal error message - "internal: bad RISC-V opcode (bits 0x%lx undefined): %s %s" - to display actual unused bits (excluding non-instruction bits). - - gas/ChangeLog: - - * config/tc-riscv.c (validate_riscv_insn): Exclude non- - instruction bits from displaying internal diagnostics. - Change error message slightly. - -2022-10-28 Tsukasa OI - - RISC-V: Fallback for instructions longer than 64b - We don't support instructions longer than 64-bits yet. Still, we can - modify validate_riscv_insn function to prevent unexpected behavior by - limiting the "length" of an instruction to 64-bit (or less). - - gas/ChangeLog: - - * config/tc-riscv.c (validate_riscv_insn): Fix function - description comment based on current spec. Limit instruction - length up to 64-bit for now. Make sure that required_bits does - not corrupt even if unsigned long long is longer than 64-bit. - -2022-10-28 Jan Beulich - - RISC-V/gas: fix build with certain gcc versions - Some versions of gcc warn by default about shadowed outer-scope - declarations. This affects frag_align_code, which is declared in - frags.h. Rename the offending function parameter. While there also - switch to using true/false at the function call sites. - -2022-10-28 Tsukasa OI - - RISC-V: Fix build failure for -Werror=maybe-uninitialized - Commit 40f1a1a4564b ("RISC-V: Output mapping symbols with ISA string.") - caused a build failure on GCC 12 as follows: - - make[3]: Entering directory '$(builddir)/gas' - CC config/tc-riscv.o - In file included from $(srcdir)/gas/config/tc-riscv.c:23: - $(srcdir)/gas/as.h: In function ‘make_mapping_symbol’: - $(srcdir)/gas/as.h:123:15: error: ‘buff’ may be used uninitialized [-Werror=maybe-uninitialized] - 123 | #define xfree free - | ^~~~ - $(srcdir)/gas/config/tc-riscv.c:487:9: note: ‘buff’ was declared here - 487 | char *buff; - | ^~~~ - cc1: all warnings being treated as errors - make[3]: *** [Makefile:1425: config/tc-riscv.o] Error 1 - - This is caused by a false positive of "maybe uninitialized" variable - detection (-Wmaybe-uninitialized). To avoid this error, this commit - initializes the local variable buff to NULL first in all cases. - - gas/ChangeLog: - - * config/tc-riscv.c (make_mapping_symbol): Initialize variable - buff with NULL to avoid build failure caused by a GCC's false - positive of maybe uninitialized variable detection. - -2022-10-28 Markus Metzger - - gdb, btrace: fix family and model computation - In gdb/nat/linux-btrace.c:btrace_this_cpu() we initialize the cpu - structure given to the libipt btrace decoder. - - We only consider the extended model field for family 0x6 and forget about - family 0xf and we don't consider the extended family field. Fix it. - -2022-10-28 Tsukasa OI - - include: Define macro to ignore -Wdeprecated-declarations on GCC - "-Wdeprecated-declarations" warning option can be helpful to track - deprecated function delarations but sometimes we need to disable this - warning for a good reason. - - DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS is an existing macro but only - defined on Clang. Since "-Wdeprecated-declarations" is also available on - GCC (>= 3.4.0), this commit adds equivalent definition as Clang. - - __GNUC__ and __GNUC_MINOR__ are not checked because this header file seems - to assume GCC >= 4.6 (with "GCC diagnostic push/pop"). - - include/ChangeLog: - - * diagnostics.h (DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS): - Define also on GCC. - -2022-10-28 Nelson Chu - - RISC-V: Output mapping symbols with ISA string. - RISC-V Psabi pr196, - https://github.com/riscv-non-isa/riscv-elf-psabi-doc/pull/196 - - bfd/ - * elfxx-riscv.c (riscv_release_subset_list): Free arch_str if needed. - (riscv_copy_subset_list): Copy arch_str as well. - * elfxx-riscv.h (riscv_subset_list_t): Store arch_str for each subset list. - gas/ - * config/tc-riscv.c (riscv_reset_subsets_list_arch_str): Update the - architecture string in the subset_list. - (riscv_set_arch): Call riscv_reset_subsets_list_arch_str after parsing new - architecture string. - (s_riscv_option): Likewise. - (need_arch_map_symbol): New boolean, used to indicate if .option - directives do affect instructions. - (make_mapping_symbol): New boolean parameter reset_seg_arch_str. Need to - generate $x+arch for MAP_INSN, and then store it into tc_segment_info_data - if reset_seg_arch_str is true. - (riscv_mapping_state): Decide if we need to add $x+arch for MAP_INSN. For - now, only add $x+arch if the architecture strings in subset list and segment - are different. Besides, always add $x+arch at the start of section, and do - not add $x+arch for code alignment, since rvc for alignment can be judged - from addend of R_RISCV_ALIGN. - (riscv_remove_mapping_symbol): If current and previous mapping symbol have - same value, then remove the current $x only if the previous is $x+arch; - Otherwise, always remove previous. - (riscv_add_odd_padding_symbol): Updated. - (riscv_check_mapping_symbols): Don't need to add any $x+arch if - need_arch_map_symbol is false, so changed them to $x. - (riscv_frag_align_code): Updated since riscv_mapping_state is changed. - (riscv_init_frag): Likewise. - (s_riscv_insn): Likewise. - (riscv_elf_final_processing): Call riscv_release_subset_list to release - subset_list of riscv_rps_as, rather than only release arch_str in the - riscv_write_out_attrs. - (riscv_write_out_attrs): No need to call riscv_arch_str, just get arch_str - from subset_list of riscv_rps_as. - * config/tc-riscv.h (riscv_segment_info_type): Record current $x+arch mapping - symbol of each segment. - * testsuite/gas/riscv/mapping-0*: Merged and replaced by mapping.s. - * testsuite/gas/riscv/mapping.s: New testcase, to test most of the cases in - one file. - * testsuite/gas/riscv/mapping-symbols.d: Likewise. - * testsuite/gas/riscv/mapping-dis.d: Likewise. - * testsuite/gas/riscv/mapping-non-arch.s: New testcase for the case that - does need any $x+arch. - * testsuite/gas/riscv/mapping-non-arch.d: Likewise. - * testsuite/gas/riscv/option-arch-01a.d: Updated. - opcodes/ - * riscv-dis.c (riscv_disassemble_insn): Set riscv_fpr_names back to - riscv_fpr_names_abi or riscv_fpr_names_numeric when zfinx is disabled - for some specfic code region. - (riscv_get_map_state): Recognized mapping symbols $x+arch, and then reset - the architecture string once the ISA is different. - -2022-10-28 Lifang Xia - - binutils: Update my e-mail and Yunhai's e-mail - binutils/ - * MAINTAINERS(C-SKY): update e-mails of Lifang & Yunhai. - -2022-10-28 Peter Bergner - - PowerPC: Add support for RFC02658 - MMA+ Outer-Product Instructions - gas/ - * config/tc-ppc.c (md_assemble): Only check for prefix opcodes. - * testsuite/gas/ppc/rfc02658.s: New test. - * testsuite/gas/ppc/rfc02658.d: Likewise. - * testsuite/gas/ppc/ppc.exp: Run it. - - opcodes/ - * ppc-opc.c (XMSK8, P_GERX4_MASK, P_GERX2_MASK, XX3GERX_MASK): New. - (powerpc_opcodes): Add dmxvi8gerx4pp, dmxvi8gerx4, dmxvf16gerx2pp, - dmxvf16gerx2, dmxvbf16gerx2pp, dmxvf16gerx2np, dmxvbf16gerx2, - dmxvi8gerx4spp, dmxvbf16gerx2np, dmxvf16gerx2pn, dmxvbf16gerx2pn, - dmxvf16gerx2nn, dmxvbf16gerx2nn, pmdmxvi8gerx4pp, pmdmxvi8gerx4, - pmdmxvf16gerx2pp, pmdmxvf16gerx2, pmdmxvbf16gerx2pp, pmdmxvf16gerx2np, - pmdmxvbf16gerx2, pmdmxvi8gerx4spp, pmdmxvbf16gerx2np, pmdmxvf16gerx2pn, - pmdmxvbf16gerx2pn, pmdmxvf16gerx2nn, pmdmxvbf16gerx2nn. - -2022-10-28 Peter Bergner - - PowerPC: Add support for RFC02653 - Dense Math Facility - gas/ - * config/tc-ppc.c (pre_defined_registers): Add dense math registers. - (md_assemble): Check dmr specified in correct operand. - * testsuite/gas/ppc/outerprod.s : Add new tests. - * testsuite/gas/ppc/outerprod.d: Likewise. - * testsuite/gas/ppc/rfc02653.s: New test. - * testsuite/gas/ppc/rfc02653.d: Likewise. - * testsuite/gas/ppc/ppc.exp: Run it. - - include/ - * opcode/ppc.h (PPC_OPERAND_DMR): Define. Renumber following - PPC_OPERAND defines. - - opcodes/ - * ppc-dis.c (print_insn_powerpc): Prepend 'dm' when printing DMR regs. - * ppc-opc.c (insert_p2, (extract_p2, (insert_xa5, (extract_xa5, - insert_xb5, (extract_xb5): New functions. - (insert_xa6a, extract_xa6a, insert_xb6a, extract_xb6a): Disallow - operand overlap only on Power10. - (DMR, DMRAB, P1, P2, XA5p, XB5p, XDMR_MASK, XDMRDMR_MASK, XX2ACC_MASK, - XX2DMR_MASK, XX3DMR_MASK): New defines. - (powerpc_opcodes): Add dmmr, dmsetaccz, dmsetdmrz, dmxor, dmxvbf16ger2, - dmxvbf16ger2nn, dmxvbf16ger2np, dmxvbf16ger2pn, dmxvbf16ger2pp, - dmxvf16ger2, dmxvf16ger2nn, dmxvf16ger2np, dmxvf16ger2pn, dmxvf16ger2pp, - dmxvf32ger, dmxvf32gernn, dmxvf32gernp, dmxvf32gerpn, dmxvf32gerpp, - dmxvf64ger, dmxvf64gernn, dmxvf64gernp, dmxvf64gerpn, dmxvf64gerpp, - dmxvi16ger2, dmxvi16ger2pp, dmxvi16ger2s, dmxvi16ger2spp, dmxvi4ger8, - dmxvi4ger8pp, dmxvi8ger4, dmxvi8ger4pp, dmxvi8ger4spp, dmxxextfdmr256, - dmxxextfdmr512, dmxxinstdmr256, dmxxinstdmr512, dmxxmfacc, dmxxmtacc, - pmdmxvbf16ger2, pmdmxvbf16ger2nn, pmdmxvbf16ger2np, pmdmxvbf16ger2pn, - pmdmxvbf16ger2pp, pmdmxvf16ger2, pmdmxvf16ger2nn, pmdmxvf16ger2np, - pmdmxvf16ger2pn, pmdmxvf16ger2pp, pmdmxvf32ger, pmdmxvf32gernn, - pmdmxvf32gernp, pmdmxvf32gerpn, pmdmxvf32gerpp, pmdmxvf64ger, - pmdmxvf64gernn, pmdmxvf64gernp, pmdmxvf64gerpn, pmdmxvf64gerpp, - pmdmxvi16ger2, pmdmxvi16ger2pp, pmdmxvi16ger2s, pmdmxvi16ger2spp, - pmdmxvi4ger8, pmdmxvi4ger8pp, pmdmxvi8ger4, pmdmxvi8ger4pp, - pmdmxvi8ger4spp. - -2022-10-28 GDB Administrator - - Automatic date update in version.in - -2022-10-27 Andrew Burgess - - sim/cgen: initialize variable at creation in engine_run_n - Zero initialize engine_fns entirely at creation, then override those - fields we intend to use, rather than zero just initializing the unused - fields later on. - - There should be no user visible changes after this commit. - -2022-10-27 Tom de Vries - - [gdb/testsuite] Remove address from test names - I noticed an address in a test name: - ... - PASS: gdb.base/eh_return.exp: gdb_breakpoint: \ - set breakpoint at *0x000000000040071b - ... - - Stabilize the test name by using "set breakpoint on address" instead. - - Likewise in two other test-cases. - - Tested on x86_64-linux. - -2022-10-27 Tom de Vries - - [gdb/testsuite] Disable styling in host board local-remote-host-native.exp - Propagate fix from commit 17c68d98f74 ("[gdb/testsuite] Disable styling in host - board local-remote-host.exp") to local-remote-host-native.exp. - - Tested on x86_64-linux. - -2022-10-27 Tom de Vries - - [gdb/testsuite] Fix silent timeouts in gdb.mi/mi-exec-run.exp with remote host - I noticed that running test-case gdb.mi/mi-exec-run.exp with host board - local-remote-host.exp takes about 44 seconds. - - I found two silent timeouts responsible for this. - - The first is in mi_gdb_exit, where we have: - ... - if { [is_remote host] && [board_info host exists fileid] } { - send_gdb "999-gdb-exit\n" - gdb_expect 10 { - -re "y or n" { - send_gdb "y\n" - exp_continue - } - -re "Undefined command.*$gdb_prompt $" { - send_gdb "quit\n" - exp_continue - } - -re "DOSEXIT code" { } - } - } - ... - so in gdb.log we see: - ... - 999-gdb-exit^M - 999^exit^M - =thread-exited,id="1",group-id="i1"^M - =thread-group-exited,id="i1"^M - ... - after which expect just waits for the timeout. - - Fix this by adding a gdb_expect clause to parse the exit: - ... - -re "\r\n999\\^exit\r\n" { } - ... - - Note that we're not parsing the thread-exited/thread-group-exited messages, because - they may not be present: - ... - $ gdb -i=mi - =thread-group-added,id="i1" - (gdb) - 999-gdb-exit - 999^exit - $ - ... - - After fixing that, we have: - ... - (gdb) ^M - saw mi error - PASS: gdb.mi/mi-exec-run.exp: inferior-tty=separate: mi=separate: \ - force-fail=1: run failure detected - quit^M - &"quit\n"^M - ... - - What seems to be happening is that default_gdb_exit sends a cli interpreter - quit command to an mi interpreter, after which again expect just waits for the - timeout. - - Fix this by adding mi_gdb_exit to the end of the test-case, as in many other - gdb.mi/*.exp test-cases. - - After these two fixes, the test-case takes about 4 seconds. - - Tested on x86_64-linux. - -2022-10-27 Tom de Vries - - [gdb/testsuite] Use remote_exec chmod instead of remote_spawn - I build gdb using -O2, and ran the testsuite using taskset -c 0, and ran into: - ... - (gdb) PASS: gdb.server/connect-with-no-symbol-file.exp: sysroot=: \ - action=delete: setup: adjust sysroot - builtin_spawn gdbserver --once localhost:2385 /connect-with-no-symbol-file^M - /bin/bash: connect-with-no-symbol-file: Permission denied^M - /bin/bash: line 0: exec: connect-with-no-symbol-file: cannot execute: \ - Permission denied^M - During startup program exited with code 126.^M - Exiting^M - target remote localhost:2385^M - `connect-with-no-symbol-file' has disappeared; keeping its symbols.^M - localhost:2385: Connection timed out.^M - (gdb) FAIL: gdb.server/connect-with-no-symbol-file.exp: sysroot=: \ - action=delete: connection to GDBserver succeeded - ... - - The expected series of events is (skipping disconnect and detach as I don't - think they're relevant to the problem): - - enter scenario "permission" - - cp $exec.bak $exec - - gdbserver start with $exec - - chmod 000 $exec - - connect to gdbserver - - enter scenario "delete" - - cp $exec.bak $exec - - gdbserver start with $exec - - delete $exec - - connect to gdbserver - - The problem is that the chmod is executed using remote_spawn: - ... - } elseif { $action == "permission" } { - remote_spawn target "chmod 000 $target_exec" - } - ... - without waiting on the resulting spawn id, so we're not sure when the - chmod will have effect. - - The FAIL we're seeing above is explained by the chmod having effect during the - delete scenario, after the "cp $exec.bak $exec" and before the "gdbserver - start with $exec". - - Fix this by using remote_exec instead. - - Likewise, fix a similar case in gdb.mi/mi-exec-run.exp. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29726 - -2022-10-27 Nelson Chu - - RISC-V: Fix build failures for -Werror=sign-compare. - elfnn-riscv.c: In function ‘riscv_relax_resolve_delete_relocs’: - elfnn-riscv.c:4256:30: error: operand of ‘?:’ changes signedness from ‘int’ to ‘unsigned int’ due to unsignedness of other operand [-Werror=sign-compare] - - So make the operands unsigned could resolve problem. - - bfd/ - * elfnn-riscv.c (riscv_relax_resolve_delete_relocs): Fixed build - failures for -Werror=sign-compare. - -2022-10-27 Alan Modra - - Fuzzed files in archives - Given a fuzzed object file in an archive with section size exceeding - file size, objcopy will report an error like "section size (0xfeffffff - bytes) is larger than file size (0x17a bytes)" but will create a copy - of the object laid out for the large section. That means a large - temporary file on disk that is read back and written to the output - archive, which can take a while. The output archive is then deleted - due to the error. Avoid some of this silliness. - - * objcopy.c (copy_section): If section contents cannot be read - set output section size to zero. - -2022-10-27 Martin Liska - - tests: use canonical option name - ld/ChangeLog: - - * testsuite/ld-size/size.exp: Use canonical option name. - -2022-10-27 Alan Modra - - re: Support Intel AMX-FP16 - Fix these fails due to the target padding out sections with nops. - x86_64-w64-mingw32 +FAIL: x86_64 AMX-FP16 insns - x86_64-w64-mingw32 +FAIL: x86_64 AMX-FP16 insns (Intel disassembly) - - * testsuite/gas/i386/x86-64-amx-fp16-intel.d: Accept trailing nops. - * testsuite/gas/i386/x86-64-amx-fp16.d: Likewise. - -2022-10-27 Alan Modra - - Re: ld/testsuite: adjust ld-arm to run shared tests only when supported - commit 67527cffcd enabled previously disabled tests unresolved-1-dyn, - thumb-plt and thumb-plt-got for nacl. The first fails due to trying - to link against mixed-lib.so which isn't compiled for nacl. The last - two fail with - objdump: tmpdir/dump(.rel.plt): relocation 0 has invalid symbol index 14885104 - and - readelf: Error: bad symbol index: 00e320f0 in reloc - - Relocation section '.rel.plt' at offset 0x128 contains 1 entry: - Offset Info Type Sym. Value Symbol's Name - e320f000 e320f000 R_ARM_NONE - - * testsuite/ld-arm/arm-elf.exp: Disable unresolved-1-dyn, - thumb-plt and thumb-plt-got for nacl. - -2022-10-27 GDB Administrator - - Automatic date update in version.in - -2022-10-26 Simon Marchi - - gdb/testsuite: fix gdb.guile/scm-parameter.exp "wrong type argument" test pattern for Guile >= 2.2 - Since commit 90319cefe3 ("GDB/Guile: Don't assert that an integer value - is boolean"), I see: - - FAIL: gdb.guile/scm-parameter.exp: kind=PARAM_ZINTEGER: test-PARAM_ZINTEGER-param: guile (set-parameter-value! test-PARAM_ZINTEGER-param #:unlimited) - FAIL: gdb.guile/scm-parameter.exp: kind=PARAM_ZUINTEGER: test-PARAM_ZUINTEGER-param: guile (set-parameter-value! test-PARAM_ZUINTEGER-param #:unlimited) - - This comes from the fact that GDB outputs this: - - ERROR: In procedure set-parameter-value!: - In procedure gdbscm_set_parameter_value_x: Wrong type argument in position 2 (expecting integer): #:unlimited - Error while executing Scheme code. - - while the test expects an additional "ERROR:" on the second line, - something like this: - - ERROR: In procedure set-parameter-value!: - ERROR: In procedure gdbscm_set_parameter_value_x: Wrong type argument in position 2 (expecting integer): #:unlimited - Error while executing Scheme code. - - Guile 2.0 outputs the `ERROR:` on the second line, while later versions - do not. Change the pattern to accept both outputs. This is similar to - commit 6bbe1a929c6 ("[gdb/testsuite] Fix gdb.guile/scm-breakpoint.exp - with guile 3.0"). - - Change-Id: I9dc45e7492a4f08340cad974610242ed689de959 - -2022-10-26 Luis Machado - - gdb/arm: Fix M-profile EXC_RETURN - Arm v8-M Architecture Reference Manual, - D1.2.95 EXC_RETURN, Exception Return Payload - describes ES bit: - - "ES, bit [0] - Exception Secure. The security domain the exception was taken to. - The possible values of this bit are: - 0 Non-secure. - 1 Secure" - - arm-tdep.c:3443, arm_m_exception_cache () function tests this bit: - - exception_domain_is_secure = (bit (lr, 0) == 0); - - The test is negated! - - Later on line 3553, the condition evaluates if an additional state - context is stacked: - - /* With the Security extension, the hardware saves R4..R11 too. */ - if (tdep->have_sec_ext && secure_stack_used - && (!default_callee_register_stacking || exception_domain_is_secure)) - - RM, B3.19 Exception entry, context stacking - reads: - RPLHM "In a PE with the Security Extension, on taking an exception, - the PE hardware: - ... - 2. If exception entry requires a transition from Secure state to - Non-secure state, the PE hardware extends the stack frame and also - saves additional state context." - - So we should test for !exception_domain_is_secure instead of non-negated - value! - These two bugs compensate each other so unstacking works correctly. - - But another test of exception_domain_is_secure (negated due to the - first bug) prevents arm_unwind_secure_frames to work as expected: - - /* 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) - - Test with GNU gdb (GDB) 13.0.50.20221016-git. - Stopped in a non-secure handler: - - (gdb) set arm unwind-secure-frames 0 - (gdb) bt - #0 HAL_SYSTICK_Callback () at C:/dvl/stm32l5trustzone/GPIO_IOToggle_TrustZone/NonSecure/Src/nsmain.c:490 - #1 0x0804081c in SysTick_Handler () - at C:/dvl/stm32l5trustzone/GPIO_IOToggle_TrustZone/NonSecure/Src/nsstm32l5xx_it.c:134 - #2 - #3 HAL_GPIO_ReadPin (GPIOx=0x52020800, GPIO_Pin=8192) - at C:/dvl/stm32l5trustzone/GPIO_IOToggle_TrustZone/Drivers/STM32L5xx_HAL_Driver/Src/stm32l5xx_hal_gpio.c:386 - #4 0x0c000338 in SECURE_Mode () at C:/dvl/stm32l5trustzone/GPIO_IOToggle_TrustZone/Secure/Src/main.c:86 - #5 0x080403f2 in main () at C:/dvl/stm32l5trustzone/GPIO_IOToggle_TrustZone/NonSecure/Src/nsmain.c:278 - Backtrace stopped: previous frame inner to this frame (corrupt stack?) - - The frames #3 and #4 are secure. backtrace should stop before #3. - - Stopped in a secure handler: - - (gdb) bt - #0 HAL_SYSTICK_Callback () at C:/dvl/stm32l5trustzone/GPIO_IOToggle_TrustZone/Secure/Src/main.c:425 - #1 0x0c000b6a in SysTick_Handler () - at C:/dvl/stm32l5trustzone/GPIO_IOToggle_TrustZone/Secure/Src/stm32l5xx_it.c:234 - warning: Non-secure to secure stack unwinding disabled. - #2 - - The exception from secure to secure erroneously stops unwinding. It should - continue as far as the security unlimited backtrace: - - (gdb) set arm unwind-secure-frames 1 - (gdb) si <-- used to rebuild frame cache after change of unwind-secure-frames - 0x0c0008e6 425 if (SecureTimingDelay != 0U) - (gdb) bt - #0 0x0c0008e6 in HAL_SYSTICK_Callback () at C:/dvl/stm32l5trustzone/GPIO_IOToggle_TrustZone/Secure/Src/main.c:425 - #1 0x0c000b6a in SysTick_Handler () - at C:/dvl/stm32l5trustzone/GPIO_IOToggle_TrustZone/Secure/Src/stm32l5xx_it.c:234 - #2 - #3 0x0c000328 in SECURE_Mode () at C:/dvl/stm32l5trustzone/GPIO_IOToggle_TrustZone/Secure/Src/main.c:88 - #4 0x080403f2 in main () at C:/dvl/stm32l5trustzone/GPIO_IOToggle_TrustZone/NonSecure/Src/nsmain.c:278 - - Backtrace stopped: previous frame inner to this frame (corrupt stack?) - - Set exception_domain_is_secure to the value expected by its name. - Fix exception_domain_is_secure usage in the additional state context - stacking condition. - -2022-10-26 Luis Machado - - gdb/arm: fix IPSR field test in arm_m_exception_cache () - Arm v8-M Architecture Reference Manual, - D1.2.141 IPSR, Interrupt Program Status Register reads - "Exception, bits [8:0]" - - 9 bits, not 8! It is uncommon but true! - -2022-10-26 Luis Machado - - gdb/arm: Terminate frame unwinding in M-profile lockup - In the lockup state the PC value of the the outer frame is irreversibly - lost. The other registers are intact so LR likely contains - PC of some frame next to the outer one, but we cannot analyze - the nearest outer frame without knowing its PC - therefore we do not know SP fixup for this frame. - - The frame unwinder possibly gets mad due to the wrong SP value. - To prevent problems terminate unwinding if PC contains the magic - value of the lockup state. - - Example session wihtout this change, - Cortex-M33 CPU in lockup, gdb 13.0.50.20221016-git: - ---------------- - (gdb) c - Continuing. - - Program received signal SIGINT, Interrupt. - 0xeffffffe in ?? () - (gdb) bt - #0 0xeffffffe in ?? () - #1 0x0c000a9c in HardFault_Handler () - at C:/dvl/stm32l5trustzone/GPIO_IOToggle_TrustZone/Secure/Src/stm32l5xx_it.c:99 - #2 0x2002ffd8 in ?? () - Backtrace stopped: previous frame identical to this frame (corrupt stack?) - (gdb) - ---------------- - The frame #1 is at correct PC taken from LR, #2 is a total nonsense. - - With the change: - ---------------- - (gdb) c - Continuing. - - Program received signal SIGINT, Interrupt. - warning: ARM M in lockup state, stack unwinding terminated. - - (gdb) bt - #0 - (gdb) - ---------------- - - There is a visible drawback of emitting a warning in a cache buildnig routine - as introduced in Torbjörn SVENSSON's - [PATCH v4] gdb/arm: Stop unwinding on error, but do not assert - The warning is printed just once and not repeated on each backtrace command. - -2022-10-26 Mike Frysinger - - gdb: copyright: make file header scan a bit more pythonic - Should be functionally the same, but uses more pythonic idioms to get - fewer lines of code, and to make sure to not leak open file handles. - - Approved-By: Simon Marchi - -2022-10-26 Mike Frysinger - - gdb: make copyright.py interface a bit nicer - This way people can run `./copyright.py --help` and get some info as - to what this does without it going and modifying the tree. - - sim: testsuite: improve parallel test processing - The current logic limits itself to a maxdepth of 4 when looking for - results. This wouldn't be a problem if cris didn't have a testsuite - at a depth of 5 which we end up ignoring when summarizing. Rather - than bump the number from 4 to 5, rework the code so that we gather - the exact set of tests that we tried to run. - -2022-10-26 Alan Modra - - buffer overflow in _bfd_XX_print_ce_compressed_pdata - More fuzzed fun. - - * peXXigen.c (_bfd_XX_print_ce_compressed_pdata): Use smaller of - virt_size and bfd section size as limit of function table. - -2022-10-26 Alan Modra - - Correct ELF reloc size sanity check - The external reloc size check was wrong. Here asect is the code/data - section, not the reloc section. So using this_hdr gave the size of - the code/data section. - - * elf.c (_bfd_elf_get_reloc_upper_bound): Properly get - external size from reloc headers. - -2022-10-26 Alan Modra - - segfault in objdump.c reloc_at - bfd_canonicalize_reloc returns -1L on errors. - - * objdump.c (load_specific_debug_section): Properly handle - error return from bfd_canonicalize_reloc. - -2022-10-26 Alan Modra - - som.c reloc sanity checking - This patch checks that relocations emitted in som_write_fixups have - offsets that are monotonic and within a section. To do that properly - using bfd_reloc_offset_in_range it is necessary to set the reloc howto - size field, which isn't used otherwise by the som backend. Note that - the sizes used are not exactly those in the old sizing switch - statement deleted from som_write_fixups, but all relocs handled by the - main switch statement there get the same size. Most unhandled relocs - get a zero size (exceptions being R_RELOCATION, R_SPACE_REF, - R_MILLI_REL, R_BREAKPOINT which all involve writing one word according - to my SOM reference). I figure it doesn't matter since any unhandled - reloc is converted to 0xff R_RESERVED, and a default of zero is better - for a "don't know" reloc. - - Besides tidying the code, stringizing name from type in SOM_HOWTO - fixes R_REPEATED_INIT name. - - * som.c (SOM_HOWTO): Add SIZE arg, delete NAME. Stringize type - to name. - (som_hppa_howto_table): Update with sizes. - (som_write_fixups): Delete sizing switch statement. Sanity check - bfd_reloc address against subsection size. - -2022-10-26 Alan Modra - - som.c buffer overflow - Fuzzed object files can put random values in bfd_reloc->address, - leading to large som_reloc_skip output. - - * som.c (som_write_fixups): Allow for maximal som_reloc_skip. - -2022-10-26 Alan Modra - - PR29720, objdump -S crashes if build-id is missing - PR 29720 - * objdump.c (slurp_file): Don't call debuginfod_find_source - when build_id is NULL. - -2022-10-26 GDB Administrator - - Automatic date update in version.in - -2022-10-25 Simon Marchi - - gdb: remove spurious spaces after frame_info_ptr - Fix some whitespace issues introduced with the frame_info_ptr patch. - - Change-Id: I158d30d8108c97564276c647fc98283ff7b12163 - -2022-10-25 Michael Matz - - x86-64: Use only one default max-page-size - On x86-64 the default ELF_MAXPAGESIZE depends on a configure - option (--disable-separate-code). Since 9833b775 - ("PR28824, relro security issues") we use max-page-size for relro - alignment (with a short interval, from 31b4d3a ("PR28824, relro - security issues, x86 keep COMMONPAGESIZE relro") to its revert - a1faa5ea, where x86-64 only used COMMONPAGESIZE as relro alignment - target). - - But that means that a linker configured with --disable-separate-code - behaves different from one configured with --enable-separate-code - (the default), _even if using "-z {no,}separate-code" option to use - the non-configured behaviour_ . In particular it means that when - configuring with --disable-separate-code the linker will produce - binaries aligned to 2MB pages on disk, and hence generate 2MB - executables for a hello world (and even 6MB when linked with - "-z separate-code"). - - Generally we can't have constants that ultimately land in static - variables be depending on configure options if those only influence - behaviour that is overridable by command line options. - - So, do away with that, make the default MAXPAGESIZE be 4k (as is default - for most x86-64 configs anyway, as most people won't configure with - --disable-separate-code). If people need more they can use the - "-z max-page-size" (with would have been required right now for a - default configure binutils). - - bfd/ - * elf64-x86-64.c (ELF_MAXPAGESIZE): Don't depend on - DEFAULT_LD_Z_SEPARATE_CODE. - -2022-10-25 Simon Marchi - - gdb/testsuite: make sure to consume the prompt in gdb.base/unwind-on-each-insn.exp - This test fails quite reliably for me when ran as: - - $ taskset -c 1 make check TESTS="gdb.base/unwind-on-each-insn.exp" RUNTESTFLAGS="--target_board=native-gdbserver" - - or more simply: - - $ make check-read1 TESTS="gdb.base/unwind-on-each-insn.exp" - - The problem is that the gdb_test_multiple call that grabs the frame id - from "maint print frame-id" does not consume the prompt. Well, it does - sometimes due to the trailing .*, but not always. If the prompt is not - consumed, the tests that follow get confused: - - FAIL: gdb.base/unwind-on-each-insn.exp: gdb_breakpoint: set breakpoint at *foo - FAIL: gdb.base/unwind-on-each-insn.exp: disassemble foo - FAIL: gdb.base/unwind-on-each-insn.exp: get $sp and frame base in foo: get hexadecimal valueof "$sp" - ... many more ... - - Use -wrap to make gdb_test_multiple consume the prompt. - - While at it, remove the bit that consumes the command name and do - exp_continue, it's not really necessary. And for consistency, do the - same changes to the gdb_test_multiple that consumes the stack address, - although that one was fine, it did consume the prompt explicitly. - - Change-Id: I2b7328c8844c7e98921ea494c4c05107162619fc - Reviewed-By: Bruno Larsen - -2022-10-25 Tom de Vries - - [gdb/testsuite] Handle missing .note.GNU-stack - On openSUSE Tumbleweed I run into this for the dwarf assembly test-cases, and - some hardcoded assembly test-cases: - ... - Running gdb.dwarf2/fission-absolute-dwo.exp ... - gdb compile failed, ld: warning: fission-absolute-dwo.o: \ - missing .note.GNU-stack section implies executable stack - ld: NOTE: This behaviour is deprecated and will be removed in a future \ - version of the linker - - === gdb Summary === - - # of untested testcases 1 - ... - - Fix the dwarf assembly test-cases by adding the missing .note.GNU-stack in - proc Dwarf::assemble. - - Fix the hard-coded test-cases using this command: - ... - $ for f in $(find gdb/testsuite/gdb.* -name *.S); do - if ! grep -q note.GNU-stack $f; then - echo -e "\t.section\t.note.GNU-stack,\"\",@progbits" >> $f; - fi; - done - ... - - Likewise for .s files, and gdb/testsuite/lib/my-syscalls.S. - - The idiom for arm seems to be to use %progbits instead, see commit 9a5911c08be - ("gdb/testsuite/gdb.dwarf2: Replace @ with % for ARM compatability"), so - hand-edit gdb/testsuite/gdb.arch/arm-disp-step.S to use %progbits instead. - - Note that dwarf assembly testcases use %progbits as decided by proc _section. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29674 - -2022-10-25 Tom de Vries - - [gdb/testsuite] Add missing skip_gdbserver_tests in gdb.multi/attach-no-multi-process.exp - I build gdb without gdbserver, and ran into: - ... - (gdb) PASS: gdb.multi/attach-no-multi-process.exp: target_non_stop=off: \ - switch to inferior 2 - spawn of --once --multi localhost:2346 failed - ERROR: tcl error sourcing attach-no-multi-process.exp. - ERROR: tcl error code NONE - ERROR: Timeout waiting for gdbserver response. - ... - - Add the missing skip_gdbserver_tests. - - Tested on x86_64-linux. - -2022-10-25 Tom de Vries - - [gdb] Rewrite RETHROW_ON_TARGET_CLOSE_ERROR into function - Recent commit b2829fcf9b5 ("[gdb] Fix rethrow exception slicing in - insert_bp_location") introduced macro RETHROW_ON_TARGET_CLOSE_ERROR. - - I wrote this as a macro in order to have the rethrowing throw be part of the - same function as the catch, but as it turns out that's not necessary. - - Rewrite into a function. - - Tested on x86_64-linux. - -2022-10-25 Simon Marchi - - gdb: internal_error -> internal_error_loc in gdb-gdb.gdb.in - Commit f34652de0b ("internal_error: remove need to pass - __FILE__/__LINE__") renamed the internal_error function to - internal_error_loc. Change gdb-gdb.gdb.in accordingly. - - Change-Id: I876e1623607b6becf74ade53d102ead53a74ed86 - -2022-10-25 Nelson Chu - - RISC-V: Should reset `again' flag for _bfd_riscv_relax_pc. - The R_RISCV_DELETE relocations are no longer deleted at another relax pass, - so we should reset 'again' flag to true for _bfd_riscv_relax_pc, while the - deleted bytes are marked as R_RISCV_DELETE. - - bfd/ - * elfnn-riscv.c (_bfd_riscv_relax_pc): Set `again' to true while the - deleted bytes are marked as R_RISCV_DELETE. - -2022-10-25 Patrick O'Neill - - RISC-V: Improve link time complexity. - The riscv port does deletion and symbol table update for each relocation - while relaxing, so we are moving section bytes and scanning symbol table once - for each relocation. Compared to microblaze port, they record the relaxation - changes into a table, then do the deletion and symbol table update once per - section, rather than per relocation. Therefore, they should have better link - time complexity than us. - - To improve the link time complexity, this patch try to make the deletion in - linear time. Compared to record the relaxation changes into a table, we - replace the unused relocation with R_RISCV_DELETE for the deleted bytes, and - then resolve them at the end of the section. Assuming the number of - R_RISCV_DELETE is m, and the number of symbols is n, the total link complexity - should be O(m) for moving section bytes, and O(m*n^2) for symbol table update. - If we record the relaxation changes into the table, and then sort the symbol - table by values, then probably can reduce the time complexity to O(m*n*log(n)) - for updating symbol table, but it doesn't seem worth it for now. - - bfd/ - * elfnn-riscv.c (_riscv_relax_delete_bytes): Renamed from - riscv_relax_delete_bytes, updated to reduce the tiem complexity to O(m) - for memmove. - (typedef relax_delete_t): Function pointer declaration of delete functions. - (riscv_relax_delete_bytes): Can choose to use _riscv_relax_delete_piecewise - or _riscv_relax_delete_immediate for deletion. - (_riscv_relax_delete_piecewise): Just mark the deleted bytes as R_RISCV_DELETE. - (_riscv_relax_delete_immediate): Delete some bytes from a section while - relaxing. - (riscv_relax_resolve_delete_relocs): Delete the bytes for R_RISCV_DELETE - relocations from a section, at the end of _bfd_riscv_relax_section. - (_bfd_riscv_relax_call): Mark deleted bytes as R_RISCV_DELETE by reusing - R_RISCV_RELAX. - (_bfd_riscv_relax_lui): Likewise, but reuse R_RISCV_HI20 for lui, and reuse - R_RISCV_RELAX for c.lui. - (_bfd_riscv_relax_tls_le): Likewise, but resue R_RISCV_TPREL_HI20 and - R_RISCV_TPREL_ADD. - (_bfd_riscv_relax_pc): Likewise, but resue R_RISCV_PCREL_HI20 for auipc. - (_bfd_riscv_relax_align): Updated, don't need to resue relocation since - calling _riscv_relax_delete_immediate. - (_bfd_riscv_relax_delete): Removed. - (_bfd_riscv_relax_section): Set riscv_relax_delete_bytes for each relax_func, - to delete bytes immediately or later. Call riscv_relax_resolve_delete_relocs - to delete bytes for DELETE relocations from a section. - -2022-10-25 GDB Administrator - - Automatic date update in version.in - -2022-10-24 Andrew Burgess - - gdb/doc: reword description of DisassembleInfo.read_memory - While reading the documentation of DisassembleInfo.read_memory I - spotted the word 'available' in one sentence where it didn't make - sense. - -2022-10-24 Andrew Burgess - - sim/lm32: fix some missing function declaration warnings - In the lm32 simulator, I was seeing some warnings about missing - function declarations. - - The lm32 simulator has a weird header structure, in order to pull in - the full cpu.h header we need to define WANT_CPU_LM32BF. This is done - in some files, but not in others. Critically, it's not done in some - files that then use functions declared in cpu.h - - In this commit I added the missing #define so that the full cpu.h can - be included. - - After doing this there are still a few functions that are used - undeclared, these functions appear to be missing any declarations at - all, so I've added some to cpu.h. - - With this done all the warnings when compiling lm32 are resolved for - both gcc and clang, so I've removed the SIM_WERROR_CFLAGS line from - Makefile.in, this allows lm32 to build with -Werror. - -2022-10-24 Andrew Burgess - - sim/h8300: avoid self assignment - There are two places in the h8300 simulator where we assign a variable - to itself. Clang gives a warning for this, which is converted into an - error by -Werror. - - Silence the warning by removing the self assignments. As these - assignments were in a complex if/then/else tree, rather than try to - adjust all the conditions, I've just replaced the self assignments - with a comment and an empty statement. - -2022-10-24 Andrew Burgess - - sim/aarch64: remove two unused functions - These functions are not used. Clang warns about the unused functions, - which is then converted into an error by -Werror. - - Delete the unused functions. - -2022-10-24 Andrew Burgess - - sim/ppc: fix for operator precedence warning from clang - In the ppc simulator, clang was warning about some code like this: - - busy_ptr->nr_writebacks = 1 + (PPC_ONE_BIT_SET_P(out_vmask)) ? 1 : 2; - - The warning was: - - operator '?:' has lower precedence than '+'; '+' will be evaluated first - - I suspect that this is not the original authors intention. - PPC_ONE_BIT_SET_P is going to be 0 or 1, so if we evaluate the '+' - first, the condition will always be non-zero, so true. The whole - expression could then be simplified to just '1', which doesn't make - much sense. - - I suspect the answer the author was expecting was either 2 or 3. Why - they didn't just write: - - busy_ptr->nr_writebacks = (PPC_ONE_BIT_SET_P(out_vmask)) ? 2 : 3; - - I have no clue, however, to keep the structure of the code unchanged, - I've updated things to: - - busy_ptr->nr_writebacks = 1 + (PPC_ONE_BIT_SET_P (out_vmask) ? 1 : 2); - - which silences the warning from clang, and is, I am guessing, what the - original author intended. - -2022-10-24 Andrew Burgess - - sim/ppc: initialize a memory buffer in all cases - In the ppc simulator's do_fstat function, which provides the fstat - call for the simulator, if the fstat is going to fail then we - currently write an uninitialized buffer into the simulated target. - - In theory, I think this is fine, we also write the error status into - the simulated target, so, given that the fstat has failed, the target - shouldn't be relying on the buffer contents. - - However, writing an uninitialized buffer means we might leak simulator - private data into the simulated target, which is probably a bad thing. - Plus it probably makes life easier if something consistent, like all - zeros, is written rather than random junk, which might look like a - successful call (except for the error code). - - So, in this commit, I initialize the stat buffer to zero before - it is potentially used. If the stat call is not made then the buffer - will be left initialized as all zeros. - -2022-10-24 Andrew Burgess - - sim/ppc: don't try to print an uninitialized variable - The ppc simulator, in sim_create_inferior, tries to print the function - local entry_point variable before the variable is initialized. - - In this commit, I defer the debug print line until the variable has - been initialized. - -2022-10-24 Andrew Burgess - - sim/sh: use fabs instead of abs - The sh simulator incorrectly uses integer abs instead of the floating - point fabs on some floating point values, fixed in this commit. - -2022-10-24 Tom de Vries - - [gdb] Fix rethrow exception slicing in insert_bp_location - The preferred way of rethrowing an exception is by using throw without - expression, because it avoids object slicing of the exception [1]. - - Fix this in insert_bp_location. - - Tested on x86_64-linux. - - [1] https://en.cppreference.com/w/cpp/language/throw - - Approved-By: Andrew Burgess - -2022-10-24 Tom de Vries - - [gdb] Fix rethrow exception slicing in pretty_print_insn - The preferred way of rethrowing an exception is by using throw without - expression, because it avoids object slicing of the exception [1]. - - Fix this in gdb_pretty_print_disassembler::pretty_print_insn. - - Tested on x86_64-linux. - - [1] https://en.cppreference.com/w/cpp/language/throw - - Approved-By: Andrew Burgess - -2022-10-24 Clément Chigot - - ld/testsuite: adjust ld-arm to run shared tests only when supported - If a custom arm-elf target is disabling the shared support, a lot of - failures are reported by the testsuite. - Moreover, some tests try to access libraries which have been explicitly - skipped earlier (eg mixed-lib.so). - - ld/ChangeLog: - - * testsuite/ld-arm/arm-elf.exp: Separate tests needing shared - lib support. - -2022-10-24 Clément Chigot - - ld/testsuite: skip ld-elf/exclude when -shared is not supported - ld/ChangeLog: - - * testsuite/ld-elf/exclude.exp: Call check_shared_lib_support. - to skip for all targets without shared lib support. - -2022-10-24 Jan Beulich - - x86: consolidate VPCLMUL tests - There's little point in having Intel syntax disassembler tests when the - purpose of a test is assembler functionality: Drop all - *avx512*_vpclmulqdq-wig1-intel. - - For *avx512*_vpclmulqdq-wig1 share source with *avx512*_vpclmulqdq. - - Finally put in place similar tests for -mvexwig=1. - -2022-10-24 Jan Beulich - - x86: consolidate VAES tests - There's little point in having Intel syntax disassembler tests when the - purpose of a test is assembler functionality: Drop all - *avx512*_vaes-wig1-intel. - - For *avx512*_vaes-wig1 share source with *avx512*_vaes. This in - particular makes sure that the 32-bit VL test actually tests any EVEX - encodings in the first place. - - Finally put in place similar tests for -mvexwig=1. - -2022-10-24 Jan Beulich - - x86: emit {evex} prefix when disassembling ambiguous AVX512VL insns - When no AVX512-specific functionality is in use, the disassembly of - AVX512VL insns is indistinguishable from their AVX counterparts (if such - exist). Emit the {evex} pseudo-prefix in such cases. - - Where applicable drop stray uses of PREFIX_OPCODE from table entries. - -2022-10-24 Tom de Vries - - [gdb/testsuite] Add skip_python_tests in gdb.python/tui-window-names.exp - I did a gdb build without python support, and during testing ran into FAILs in - test-case gdb.python/tui-window-names.exp. - - Fix this by adding the missing skip_python_test. - - Tested on x86_64-linux. - -2022-10-24 GDB Administrator - - Automatic date update in version.in - -2022-10-23 Mike Frysinger - - sim: testsuite: update ignored .exp files [PR sim/29596] - Now that we run `check/foo.exp` instead of `check/./foo.exp`, - update the config/ & lib/ exceptions to cover both paths. - - Bug: https://sourceware.org/PR29596 - -2022-10-23 Mike Frysinger - - sim: testsuite: tweak parallel find invocation [PR sim/29596] - Make sure we invoke runtest with the same exp filenames when running in - parallel as it will find when run single threaded. When `runtest` finds - files itself, it will use paths like "aarch64/allinsn.exp". When we run - `find .` with the %p option, it produces "./aarch64/allinsn.exp". Switch - to %P to get "aarch64/allinsn.exp". - - Bug: https://sourceware.org/PR29596 - -2022-10-23 Mike Frysinger - - sim: mips/ppc/riscv: re-add AC_CANONICAL_SYSTEM [PR sim/29439] - These configure scripts check $target and change behavior. They - shouldn't be doing that, but until we can rework the sim to change - behavior based on the input ELF, restore AC_CANONICAL_SYSTEM to - these so that $target is correctly populated. - - This was lost in the d3562f83a7b8a1ae6e333cd5561419d3da18fcb4 - ("sim: unify toolchain probing logic") refactor as the logic was - hoisted up to the common code. But the fact the vars weren't - passed down to the sub-configure scripts was missed. - - Bug: https://sourceware.org/PR29439 - -2022-10-23 GDB Administrator - - Automatic date update in version.in - -2022-10-22 Simon Marchi - - gdb/testsuite: add max number of instructions check in gdb.base/unwind-on-each-insn.exp - This test sends my CI in an infinite loop of failures. We expect to - have a handful of iterations (5 on my development machine, where the - test passes fine)but the log shows that it went up to 104340 iterations: - - FAIL: gdb.base/unwind-on-each-insn.exp - instruction 104340: maint print frame-id - DUPLICATE: gdb.base/unwind-on-each-insn.exp - instruction 104340: maint print frame-id - FAIL: gdb.base/unwind-on-each-insn.exp - instruction 104340: [string equal $fid $main_fid] - FAIL: gdb.base/unwind-on-each-insn.exp - instruction 104340: get hexadecimal valueof "$pc" - - Add a max instruction check, exit the loop if we reach 100 iterations. - This should allow the test to fail fast if there's a problem, but 100 - iterations should be more than enough for when things are working. - - Change-Id: I77978d593aca046068f9209272d82e1675ba17c2 - -2022-10-22 GDB Administrator - - Automatic date update in version.in - -2022-10-21 Pedro Alves - - Improve Python Unwinders documentation - - avoid "GDB proper" to refer to global locus, as object files and - program spaces are also GDB proper. - - - gdb.register_unwinder does not accept locus=gdb. - - - "a unwinder" -> "an unwinder" - - Approved-by: Eli Zaretskii - Change-Id: I98c1b1000e1063815238e945ca71ec6f37b5702e - -2022-10-21 Simon Marchi - - gdb: make inherit_abstract_dies use vector iterators - Small cleanup to use std::vector iterators rather than raw pointers. - - Approved-By: Tom Tromey - Change-Id: I8d50dbb3f2d8dad7ff94066a578d523f1f31b590 - -2022-10-21 Simon Marchi - - gdb: check for empty offsets vector in inherit_abstract_dies - When building GDB with clang and --enable-ubsan, I get: - - UNRESOLVED: gdb.dwarf2/frame-inlined-in-outer-frame.exp: starti prompt - - The cause being: - - $ ./gdb --data-directory=data-directory -nx -q -readnow testsuite/outputs/gdb.dwarf2/frame-inlined-in-outer-frame/frame-inlined-in-outer-frame - Reading symbols from testsuite/outputs/gdb.dwarf2/frame-inlined-in-outer-frame/frame-inlined-in-outer-frame... - Expanding full symbols from testsuite/outputs/gdb.dwarf2/frame-inlined-in-outer-frame/frame-inlined-in-outer-frame... - /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:11954:47: runtime error: applying non-zero offset 8 to null pointer - - I found this to happen with ld-linux on at least Arch Linux and Ubuntu - 22.04: - - $ ./gdb --data-directory=data-directory -nx -q -readnow -iex "set debuginfod enabled on" /lib64/ld-linux-x86-64.so.2 - Reading symbols from /lib64/ld-linux-x86-64.so.2... - Reading symbols from /home/simark/.cache/debuginfod_client/22bd7a2c03d8cfc05ef7092bfae5932223189bc1/debuginfo... - Expanding full symbols from /home/simark/.cache/debuginfod_client/22bd7a2c03d8cfc05ef7092bfae5932223189bc1/debuginfo... - /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:11954:47: runtime error: applying non-zero offset 8 to null pointer - - The problem happens when doing this: - - sect_offset *offsetp = offsets.data () + 1 - - When `offsets` is an empty vector, `offsets.data ()` returns nullptr. - Fix it by wrapping that in a `!offsets.empty ()` check. - - Change-Id: I6d29ba2fe80ba4308f68effd9c57d4ee8d67c29f - Approved-By: Tom Tromey - -2022-10-21 Fangrui Song - - readelf: support zstd compressed debug sections [PR 29640] - -2022-10-21 Tom Tromey - - Fix incorrect .gdb_index with new DWARF scanner - PR symtab/29694 points out a regression caused by the new DWARF - scanner when the cc-with-gdb-index target board is used. - - What happens here is that an older version of gdb will make an index - describing the "A" type as: - - [737] A: 1 [global, type] - - whereas the new gdb says: - - [1008] A: 0 [global, type] - - Here the old one is correct because the A in CU 0 is just a - declaration without a size: - - <1><45>: Abbrev Number: 10 (DW_TAG_structure_type) - <46> DW_AT_name : A - <48> DW_AT_declaration : 1 - <48> DW_AT_sibling : <0x6d> - - This patch fixes the problem by introducing the idea of a "type - declaration". I think gdb still needs to recurse into these types, - searching for methods, but by marking the type itself as a - declaration, gdb can skip this type during lookups and when writing - the index. - - Regression tested on x86-64 using the cc-with-gdb-index board. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29694 - -2022-10-21 Tom Tromey - - Fix crash in value_print_array_elements - A user noticed that gdb would crash when printing a packed array after - doing "set lang c". Packed arrays don't exist in C, but it's - occasionally useful to print things in C mode when working in a non-C - language -- this lets you see under the hood a little bit. - - The bug here is that generic value printing does not handle packed - arrays at all. This patch fixes the bug by introducing a new function - to extract a value from a bit offset and width. - - The new function includes a hack to avoid problems with some existing - test cases when using -fgnat-encodings=all. Cleaning up this code - looked difficult, and since "all" is effectively deprecated, I thought - it made sense to simply work around the problems. - -2022-10-21 Tom Tromey - - Fix bug in Ada packed array handling - A user found a bug where an array of packed arrays was printed - incorrectly. The bug here is that the packed array has a bit stride, - but the outer array does not -- and should not. However, - update_static_array_size does not distinguish between an array of - packed arrays and a multi-dimensional packed array, and for the - latter, only the innermost array will end up with a stride. - - This patch fixes the problem by adding a flag to indicate whether a - given array type is a constituent of a multi-dimensional array. - -2022-10-21 Simon Marchi - - gdb: declare variables on first use in inherit_abstract_dies - Move variable declarations to where they are first use, plus some random - style fixes. - - Change-Id: Idf40d60f9034996fa6a234165cd989a721eb4148 - -2022-10-21 Nick Clifton - - Add a -w option to the linker to suppress warning and error messages. - PR 29654 - * ld.h (struct ld_config_type): Add no_warnings field. - * ldlex.h (enum option_values): Add OPTION_NO_WARNINGS. - * lexsup.c (ld_options): Add --no-warnings. - (parse_args): Add support for -w and --no-warnings. - * ldmisc.c (vfinfo): Return early if the message is a warning and - -w has been enabled. - * ld.texi (options): Document new command line option. - * NEWS: Mention the new feature. - - Add a note to the binutils/NEWS file about DCO signed contributions. - -2022-10-21 Bruno Larsen - - gdb/reverse: Fix stepping over recursive functions - Currently, when using GDB to do reverse debugging, if we try to use the - command "reverse next" to skip a recursive function, instead of skipping - all of the recursive calls and stopping in the previous line, we stop at - the second to last recursive call, and need to manually step backwards - until we leave the first call. This is well documented in PR gdb/16678. - - This bug happens because when GDB notices that a reverse step has - entered into a function, GDB will add a step_resume_breakpoint at the - start of the function, then single step out of the prologue once that - breakpoint is hit. The problem was happening because GDB wouldn't give - that step_resume_breakpoint a frame-id, so the first time the breakpoint - was hit, the inferior would be stopped. This is fixed by giving the - current frame-id to the breakpoint. - - This commit also changes gdb.reverse/step-reverse.c to contain a - recursive function and attempt to both, skip it altogether, and to skip - the second call from inside the first call, as this setup broke a - previous version of the patch. - -2022-10-21 Bruno Larsen - - Change calculation of frame_id by amd64 epilogue unwinder - When GDB is stopped at a ret instruction and no debug information is - available for unwinding, GDB defaults to the amd64 epilogue unwinder, to - be able to generate a decent backtrace. However, when calculating the - frame id, the epilogue unwinder generates information as if the return - instruction was the whole frame. - - This was an issue especially when attempting to reverse debug, as GDB - would place a step_resume_breakpoint from the epilogue of a function if - we were to attempt to skip that function, and this breakpoint should - ideally have the current function's frame_id to avoid other problems - such as PR record/16678. - - This commit changes the frame_id calculation for the amd64 epilogue, - so that it is always the same as the dwarf2 unwinder's frame_id. - - It also adds a test to confirm that the frame_id will be the same, - regardless of using the epilogue unwinder or not, thanks to Andrew - Burgess. - - Co-Authored-By: Andrew Burgess - -2022-10-21 Nick Clifton - - Updated Hungarian translation for the gprof sub-directory. - * po/hu.po: Updated Hungarian translation. - -2022-10-21 Maciej W. Rozycki - - GDB/Python: Make `None' stand for `unlimited' in setting integer parameters - Similarly to booleans and following the fix for PR python/29217 make - `gdb.parameter' accept `None' for `unlimited' with parameters of the - PARAM_UINTEGER, PARAM_INTEGER, and PARAM_ZUINTEGER_UNLIMITED types, as - `None' is already returned by parameters of the two former types, so - one might expect to be able to feed it back. It also makes it possible - to avoid the need to know what the internal integer representation is - for the special setting of `unlimited'. - - Expand the testsuite accordingly. - - Approved-By: Simon Marchi - -2022-10-21 Maciej W. Rozycki - - GDB/testsuite: Expand Python integer parameter coverage across all types - Also verify PARAM_UINTEGER, PARAM_INTEGER, and PARAM_ZINTEGER parameter - types, in addition to PARAM_ZUINTEGER and PARAM_ZUINTEGER_UNLIMITED - already covered, and verify a choice of existing GDB parameters. Add - verification for reading parameters via `.value' in addition - to `gdb.parameter('')' as this covers different code paths. - - Approved-By: Simon Marchi - -2022-10-21 Maciej W. Rozycki - - GDB/Guile: Don't assert that an integer value is boolean - Do not assert that a value intended for an integer parameter, of either - the PARAM_UINTEGER or the PARAM_ZUINTEGER_UNLIMITED type, is boolean, - causing error messages such as: - - ERROR: In procedure make-parameter: - ERROR: In procedure gdbscm_make_parameter: Wrong type argument in position 15 (expecting integer or #:unlimited): 3 - Error while executing Scheme code. - - when initialization with a number is attempted. Instead assert that it - is integer. Keep matching `#:unlimited' keyword as an alternative. Add - suitable test cases. - - Approved-By: Simon Marchi - -2022-10-21 Tom de Vries - - [gdb/testsuite] Silence compilation fail in gdb.base/rtld-step.exp - With gcc 7.5.0 and test-case gdb.base/rtld-step.exp, I run into: - ... - gdb compile failed, gcc: error: unrecognized command line option \ - '-static-pie'; did you mean '-static'? - ... - - Silence this by checking in the test-case that -static-pie is supported, and - emitting instead: - ... - UNTESTED: gdb.base/rtld-step.exp: \ - failed to compile (-static-pie not supported or static libc missing) - ... - - Tested on x86_64-linux, with: - - gcc 7.5.0: UNTESTED - - gcc 12.2.1 with static glibc not installed: UNTESTED - - gcc 12.2.1 with static glibc installed: PASS - -2022-10-21 Cui,Lili - - Support Intel AMX-FP16 - gas/ - - * NEWS: Add support for Intel AMX-FP16 instruction. - * config/tc-i386.c: Add amx_fp16. - * doc/c-i386.texi: Document .amx_fp16. - * testsuite/gas/i386/i386.exp: Add AMX-FP16 tests. - * testsuite/gas/i386/x86-64-amx-fp16-intel.d: New test. - * testsuite/gas/i386/x86-64-amx-fp16.d: Likewise. - * testsuite/gas/i386/x86-64-amx-fp16.s: Likewise. - * testsuite/gas/i386/x86-64-amx-fp16-bad.d: Likewise. - * testsuite/gas/i386/x86-64-amx-fp16-bad.s: Likewise. - - opcodes/ - - * i386-dis.c (MOD_VEX_0F385C_X86_64_P_3_W_0): New. - (VEX_LEN_0F385C_X86_64_P_3_W_0_M_0): Likewise. - (VEX_W_0F385C_X86_64_P_3): Likewise. - (prefix_table): Add VEX_W_0F385C_X86_64_P_3. - (vex_len_table): Add VEX_LEN_0F385C_X86_64_P_3_W_0_M_0. - (vex_w_table): Add VEX_W_0F385C_X86_64_P_3. - (mod_table): Add MOD_VEX_0F385C_X86_64_P_3_W_0. - * i386-gen.c (cpu_flag_init): Add AMX-FP16_FLAGS. - (CPU_ANY_AMX_TILE_FLAGS): Add CpuAMX_FP16. - (cpu_flags): Add CpuAMX-FP16. - * i386-opc.h (enum): Add CpuAMX-FP16. - (i386_cpu_flags): Add cpuamx_fp16. - * i386-opc.tbl: Add Intel AMX-FP16 instruction. - * i386-init.h: Regenerate. - * i386-tbl.h: Likewise. - -2022-10-21 Tsukasa OI - - sim: Remove unused CXXFLAGS substitution - Not only that sim/configure.ac does not AC_SUBST CXXFLAGS, - unless we need C++ compiler like CXX, substitution @CXXFLAGS@ is useless. - Because of this, this commit removes this substitution. - -2022-10-21 GDB Administrator - - Automatic date update in version.in - -2022-10-20 H.J. Lu - - x86: Check VEX/EVEX encoding before checking vector operands - Since - - commit 837e225ba1992f9745e5bbbd5e8443243a7f475f - Author: Jan Beulich - Date: Thu Oct 20 10:01:12 2022 +0200 - - x86: re-work AVX-VNNI support - - moved AVX-VNNI after AVX512-VNNI, vector Disp8 is applied even when VEX - encoding is selected. Check VEX/EVEX encoding before checking vector - operands to avoid vector Disp8 with VEX encoding. - - PR gas/29708 - * config/tc-i386.c (match_template): Check VEX/EVEX encoding - before checking vector operands. - * testsuite/gas/i386/avx-vnni.d: Updated. - * testsuite/gas/i386/x86-64-avx-vnni.d: Likewise. - * testsuite/gas/i386/avx-vnni.s: Add a Disp32 test. - * testsuite/gas/i386/x86-64-avx-vnni.s: Likewise. - -2022-10-20 Andrew Burgess - - gdb/python: break more dependencies between gdbpy_initialize_* functions - In a later commit in this series I will propose removing all of the - explicit gdbpy_initialize_* calls from python.c and replace these - calls with a more generic mechanism. - - One of the side effects of this generic mechanism is that the order in - which the various Python sub-systems within GDB are initialized is no - longer guaranteed. - - On the whole I don't think this matters, most of the sub-systems are - independent of each other, though testing did reveal a few places - where we did have dependencies, though I don't think those - dependencies were explicitly documented in comment anywhere. - - This commit is similar to the previous one, and fixes the second - dependency issue that I found. - - In this case the finish_breakpoint_object_type uses the - breakpoint_object_type as its tp_base, this means that - breakpoint_object_type must have been initialized with a call to - PyType_Ready before finish_breakpoint_object_type can be initialized. - - Previously we depended on the ordering of calls to - gdbpy_initialize_breakpoints and gdbpy_initialize_finishbreakpoints in - python.c. - - After this commit a new function gdbpy_breakpoint_init_breakpoint_type - exists, this function ensures that breakpoint_object_type has been - initialized, and can be called from any gdbpy_initialize_* function. - - I feel that this change makes the dependency explicit, which I think - is a good thing. - - There should be no user visible changes after this commit. - -2022-10-20 Andrew Burgess - - gdb/python: break dependencies between gdbpy_initialize_* functions - In a later commit in this series I will propose removing all of the - explicit gdbpy_initialize_* calls from python.c and replace these - calls with a more generic mechanism. - - One of the side effects of this generic mechanism is that the order in - which the various Python sub-systems within GDB are initialized is no - longer guaranteed. - - On the whole I don't think this matters, most of the sub-systems are - independent of each other, though testing did reveal a few places - where we did have dependencies, though I don't think those - dependencies were explicitly documented in a comment anywhere. - - This commit removes the first dependency issue, with this and the next - commit, all of the implicit inter-sub-system dependencies will be - replaced by explicit dependencies, which will allow me to, I think, - clean up how the sub-systems are initialized. - - The dependency is around the py_insn_type. This type is setup in - gdbpy_initialize_instruction and used in gdbpy_initialize_record. - Rather than depend on the calls to these two functions being in a - particular order, in this commit I propose adding a new function - py_insn_get_insn_type. This function will take care of setting up the - py_insn_type type and calling PyType_Ready. This helper function can - be called from gdbpy_initialize_record and - gdbpy_initialize_instruction, and the py_insn_type will be initialized - just once. - - To me this is better, the dependency is now really obvious, but also, - we no longer care in which order gdbpy_initialize_record and - gdbpy_initialize_instruction are called. - - There should be no user visible changes after this commit. - -2022-10-20 Andrew Burgess - - gdb: some int to bool conversion in breakpoint.c - Some int to bool conversion in breakpoint.c. I've only updated the - function signatures of static functions, but I've updated some - function local variables throughout the file. - - There should be no user visible changes after this commit. - - Approved-By: Simon Marchi - -2022-10-20 Andrew Burgess - - gdb: make use of scoped_restore in unduplicated_should_be_inserted - I noticed that we could make use of a scoped_restore in the function - unduplicated_should_be_inserted. I've also converted the function - return type from int to bool. - - This change shouldn't make any difference, as I don't think anything - within should_be_inserted could throw an exception, but the change - doesn't hurt, and will help keep us safe if anything ever changes in - the future. - - Approved-By: Simon Marchi - -2022-10-20 Andrew Burgess - - gdb: used scoped_restore_frame in update_watchpoint - I was doing some int to bool cleanup in update_watchpoint, and I - noticed a manual version of scoped_restore_selected_frame. As always - when these things are done manually, there is the chance that, in an - error case, we might leave the wrong frame selected. - - This commit updates things to use scoped_restore_selected_frame, and - also converts a local variable from int to bool. - - The only user visible change after this commit is in the case where - update_watchpoint throws an error - we should now correctly restore - the previously selected frame. Otherwise, this commit should be - invisible to the user. - - Approved-By: Simon Marchi - -2022-10-20 Andrew Burgess - - gdb: make some bp_location arguments const in breakpoint.c - I spotted a few places where I could make some 'bp_location *' - arguments constant in breakpoint.c. - - There should be no user visible changes after this commit. - - Approved-By: Simon Marchi - -2022-10-20 Дилян Палаузов - - Reapply "Don't build readline/libreadline.a, when --with-system-readline is supplied" - Commit 228cf97dd3c8 ("Merge configure.ac from gcc project") undid the - change originally done in commit 69961a84c9b ("Don't build - readline/libreadline.a, when --with-system-readline is supplied"). - Re-apply it. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=18632 - -2022-10-20 Jan Beulich - - x86: re-work AVX-VNNI support - By putting the templates after their AVX512 counterparts, the AVX512 - flavors will be picked by default. That way the need to always use {vex} - ceases to exist once respective CPU features (AVX512-VNNI or AVX512VL as - a whole) have been disabled. This way the need for the PseudoVexPrefix - attribute also disappears. - -2022-10-20 Tom de Vries - - [gdb/testsuite] Fix gdb.debuginfod/fetch_src_and_symbols.exp with check-read1 - With test-case gdb.debuginfod/fetch_src_and_symbols.exp and check-read1, I run - into: - ... - (gdb) FAIL: gdb.debuginfod/fetch_src_and_symbols.exp: local_url: \ - file fetch_src_and_symbols (got interactive prompt) - ... - - The problem is that this output: - ... - Enable debuginfod for this session? (y or [n]) y^M - ... - is matched using regexp "Enable debuginfod?.*" with matches only the first two - words of the output, after which an implicit clause in gdb_test_multiple triggers - on the second part containing the interactive prompt. - - Fix this by included the interactive prompt in the regexp. - - Tested on x86_64-linux. - -2022-10-20 Tom de Vries - - [gdb/testsuite] Fix gdb.mi/mi-disassemble.exp with check-read1 - With test-case gdb.mi/mi-disassemble.exp and check-read1 I run into: - ... - FAIL: gdb.mi/mi-disassemble.exp: disassemble /b main - FAIL: gdb.mi/mi-disassemble.exp: get valueof "*((unsigned char *) 0x400549)" - ... - - The problem for both FAILs is that the output is parsed using - gdb_test_multiple, which has implicit clauses using $gdb_prompt, which can - match before the explicit clauses using $mi_gdb_prompt. - - Fix this by passing -prompt "$mi_gdb_prompt$" to gdb_test_multiple. - - Tested on x86-64-linux. - -2022-10-20 Alan Modra - - Re: aarch64-pe support for LD, GAS and BFD - Fix dependencies for eaarch64pe.c. Generated files aren't handled - fully automatically. - -2022-10-20 Mark Harmstone - - ld: Add minimal pdb generation - - ld: Add --pdb option - Second patch incorporates fixes for endian and UB issues in calc_hash, as per - https://sourceware.org/pipermail/binutils/2022-October/123514.html. - -2022-10-20 Kevin Buettner - - Test stepping within a runtime loader / dynamic linker - See the remarks in rtld-step.exp for a description of what this - test is about. - - This test case has been tested using gcc on the following x86-64 Linux - distributions/releases: - - Fedora 28 - Fedora 32 - Fedora 33 - Fedora 34 - Fedora 35 - Fedora 36 - Fedora 37 - rawhide (f38) - RHEL 9.1 - Ubuntu 22.04.1 LTS - - It's also been tested (and found to be working) with - RUNTESTFLAGS="CC_FOR_TARGET=clang" on all of the above expect for - Fedora 28. The (old) version of clang available on F28 did not - accept the -static-pie option. - - I also tried to make this test work on FreeBSD 13.1. While I think I - made significant progress, I was ultimately stymied by this message - which occurs when attempting to run the main program which has been - set to use the fake/pretend RTLD as the ELF interpreter: - - ELF interpreter /path/to/rtld-step-rtld not found, error 22 - - I have left one of the flags (-static) in place which I believe - to be needed for FreeBSD (though since I never got it to work, I - don't know for sure.) I've also left some declarations needed - for FreeBSD in rtld-step-rtld.c. They're currently disabled via - a #if 0; you'll need to enable them if you want to try to make - it work on FreeBSD. - -2022-10-20 Kevin Buettner - - Allow debugging of runtime loader / dynamic linker - At present, GDB does not allow for the debugging of the runtime loader - and/or dynamic linker. Much of the time, this makes sense. An - application programmer doesn't normally want to see symbol resolution - code when stepping into a function that hasn't been resolved yet. - - But someone who wishes to debug the runtime loader / dynamic linker - might place a breakpoint in that code and then wish to debug it - as normal. At the moment, this is not possible. Attempting to step - will cause GDB to internally step (and not stop) until code - unrelated to the dynamic linker is reached. - - This commit makes a minor change to infrun.c which allows the dynamic - loader / linker to be debugged in the case where a step, next, etc. - is initiated from within that code. - - While developing this fix, I tried some approaches which weren't quite - right. The GDB testusite definitely contains tests which FAIL when - it's done incorrectly. (At one point, I saw 17 regressions!) This - commit has been tested on x86-64 linux with no regressions. - -2022-10-20 Tsukasa OI - - binutils: Remove unused substitution PROGRAM - Unlike other substitution, this substitution of @PROGRAM@ was done in - binutils/Makefile and it was intended for binutils/cxxfilt.man. @PROGRAM@ - in binutils/cxxfilt.man is removed in the commit 0285c67df190 ("Automate - generate on man pages") in 2001 and @PROGRAM@ is ineffective since then. - - Because PROGRAM substitution does nothing, removing this manual - substitution should be completely safe. - - binutils/ChangeLog: - - * doc/local.mk: Remove unused substitution PROGRAM. - * Makefile.in: Regenerate. - -2022-10-20 GDB Administrator - - Automatic date update in version.in - -2022-10-20 Alan Modra - - Obsolete beos - * config.bfd: Obsolete *-*-beos*. Simplify x86 beos match. - - Regen ld/po/BLD-POTFILES.in - -2022-10-19 Tom de Vries - - [gdb] Fix assert in handle_jit_event - With the cc-with-tweaks.sh patch submitted here ( - https://sourceware.org/pipermail/gdb-patches/2022-October/192586.html ) we run - with: - ... - $ export STRIP_ARGS_STRIP_DEBUG=--strip-all - $ make check RUNTESTFLAGS="gdb.base/jit-reader.exp \ - --target_board cc-with-gnu-debuglink" - ... - into the following assert: - ... - (gdb) run ^M - Starting program: jit-reader ^M - gdb/jit.c:1247: internal-error: jit_event_handler: \ - Assertion `jiter->jiter_data != nullptr' failed.^M - ... - - Fix this by handling the - jit_bp_sym.objfile->separate_debug_objfile_backlink != nullptr case in - handle_jit_event. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29277 - -2022-10-19 Pedro Alves - - internal_error: remove need to pass __FILE__/__LINE__ - Currently, every internal_error call must be passed __FILE__/__LINE__ - explicitly, like: - - internal_error (__FILE__, __LINE__, "foo %d", var); - - The need to pass in explicit __FILE__/__LINE__ is there probably - because the function predates widespread and portable variadic macros - availability. We can use variadic macros nowadays, and in fact, we - already use them in several places, including the related - gdb_assert_not_reached. - - So this patch renames the internal_error function to something else, - and then reimplements internal_error as a variadic macro that expands - __FILE__/__LINE__ itself. - - The result is that we now should call internal_error like so: - - internal_error ("foo %d", var); - - Likewise for internal_warning. - - The patch adjusts all calls sites. 99% of the adjustments were done - with a perl/sed script. - - The non-mechanical changes are in gdbsupport/errors.h, - gdbsupport/gdb_assert.h, and gdb/gdbarch.py. - - Approved-By: Simon Marchi - Change-Id: Ia6f372c11550ca876829e8fd85048f4502bdcf06 - -2022-10-19 Nick Clifton - - Fix an illegal memory access when parsing an ELF file containing corrupt symbol version information. - PR 29699 - * elf.c (_bfd_elf_slurp_version_tables): Fail if the sh_info field - of the section header is zero. - -2022-10-19 Andrew Burgess - - sim/iq2000: silence pointer-sign warnings - When building the iq2000 simulator I see a few warnings like this: - - /tmp/build/sim/../../src/sim/iq2000/iq2000.c: In function ‘fetch_str’: - /tmp/build/sim/../../src/sim/iq2000/iq2000.c:50:54: error: pointer targets in passing argument 3 of ‘sim_read’ differ in signedness [-Werror=pointer-sign] - 50 | sim_read (CPU_STATE (current_cpu), CPU2DATA(addr), buf, nr); - | ^~~ - | | - | char * - - I've silenced these warnings by casting buf to 'unsigned char *'. - With this change I now see no warnings when compiling iq2000.c, so - I've removed the line from Makefile.in that disables -Werror. - - Makefile.in was also disabling -Werror when compiling mloop.c, - however, I'm not seeing any warnings when compiling that file, so I've - removed the -Werror disable in that case too. - -2022-10-19 Andrew Burgess - - sim/erc32: avoid dereferencing type-punned pointer warnings - When building the erc32 simulator I get a few warnings like this: - - /tmp/build/sim/../../src/sim/erc32/exec.c:1377:21: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] - 1377 | sregs->fs[rd] = *((float32 *) & ddata[0]); - | ~^~~~~~~~~~~~~~~~~~~~~~~ - - The type of '& ddata[0]' will be 'uint32_t *', which is what triggers - the warning. - - This commit makes use of memcpy when performing the type-punning, - which resolves the above warnings. - - With this change, I now see no warnings when compiling exec.c, which - means that the line in Makefile.in that disables -Werror can be - removed. - - There should be no change in behaviour after this commit. - -2022-10-19 Andrew Burgess - - sim/ppc: mark device_error function as ATTRIBUTE_NORETURN - The device_error function always ends up calling the error function, - which is itself marked as ATTRIBUTE_NORETURN, so it makes sense that - device_error should also be marked ATTRIBUTE_NORETURN. - - Doing this resolves a few warnings from hw_ide.c about possibly - uninitialized variables - the variables are only uninitialized after - passing through a call to device_error, which obviously means the - variables are never really used uninitialized, the simulation will - terminate with the device_error call. - -2022-10-19 Andrew Burgess - - sim/ppc: fix warnings related to printf format strings - This commit is a follow on to: - - commit 182421c9d2eea8c4877d983a2124e591f0aca710 - Date: Tue Oct 11 15:02:08 2022 +0100 - - sim/ppc: fixes for arguments to printf style functions - - where commit 182421c9d2ee addressed issues with printf format - arguments that were causing the compiler to give an error, this commit - addresses issues that caused the compiler to emit a warning. - - This commit is mostly either changing the format string to match the - argument, or in some cases, excess, unused arguments are removed. - -2022-10-19 Andrew Burgess - - sim/cgen: mask uninitialized variable warning in cgen-run.c - I see an uninitialized variable warning (with gcc 9.3.1) from - cgen-run.c, like this: - - /tmp/build/sim/../../src/sim/cris/../common/cgen-run.c: In function ‘sim_resume’: - /tmp/build/sim/../../src/sim/cris/../common/cgen-run.c:259:5: warning: ‘engine_fns$’ may be used uninitialized in this function [-Wmaybe-uninitialized] - 259 | (* engine_fns[next_cpu_nr]) (cpu); - | ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - /tmp/build/sim/../../src/sim/cris/../common/cgen-run.c:232:14: note: ‘engine_fns$’ was declared here - 232 | ENGINE_FN *engine_fns[MAX_NR_PROCESSORS]; - | ^~~~~~~~~~ - - This is a false positive - we over allocate engine_fn, and then only - initialize the nr_cpus entries which we will later go on to use. - - However, we can easily silence this warning by initializing the unused - entries in engine_fns to NULL, this might also help if anyone ever - looks at engine_fns in a debugger, it should now be obvious which - entries are in use, and which are not. - - With this change the warning is gone. - - There should be no change in behaviour with this commit. - -2022-10-19 Alan Modra - - Fix addr2line test for ppc64 elfv1 and mingw - * testsuite/binutils-all/addr2line.exp: Tidy. For powerpc64 - arrange to pass --synthetic to nm, and extract .main and .fn - symbol address for addr2line test. Handle default executable - extension on cygwin/mingw compilers. - -2022-10-19 Nick Clifton - - Update MAINTAINERS file with details about accepting DCO signed contributions. - * MAINTAINERS: Add section on patches, copyright and DCO. - -2022-10-19 Andrew Burgess - - gdb/testsuite: avoid temporary file in gdb/testsuite (unittest.exp) - I spotted that the gdb.gdb/unittest.exp script causes a temporary file - inserters_extractors-2.txt to be created in build/gdb/testsuite/ - instead of in build/gdb/testsuite/output/gdb.gdb/unittest/. - - This is because some of the 'maint selftest' tests create temporary - files in GDB's current directory, specifically, the two source files: - - gdb/unittests/basic_string_view/inserters/wchar_t/2.cc - gdb/unittests/basic_string_view/inserters/char/2.cc - - both create a temporary file called inserters_extractors-2.txt, though - we only run the second of these as part of GDB's selftests. - - I initially proposed just using GDB's 'cd' command in unittest.exp to - switch to the test output directory before running the selftests, - however, Pedro pointed out that there was a risk here that, if GDB - crashed during shutdown, the generated core file would be left in the - test output directory rather than in the testsuite directory. As a - result, our clever core file spotting logic would fail to spot the - core file and alert the user. - - Instead, I propose this slightly more involved solution. I've added a - new with_gdb_cwd directory proc, used like this: - - with_gdb_cwd $directory { - # Tests here... - } - - The new proc temporarily switches to $directory and then runs the - tests within the block. After running the tests the previous current - working directory is restored. - - Additionally, after switching back to the previous cwd, we check that - GDB is still responsive. This means that if GDB crashed immediately - prior to restoring the previous directory, and left the core file in - the wrong place, then the responsiveness check will fail, and a FAIL - will be emitted, this should be enough to alert the user that - something has gone wrong. - - With this commit in place the unittest.exp script now leaves its - temporary file in the test output directory. - -2022-10-19 Andrew Burgess - - gdb/testsuite: avoid creating files in gdb/testsuite directory - I spotted that the test gdb.dwarf2/dw2-using-debug-str.exp was - creating an output file called debug_str_section in the root - build/gdb/testsuite directory instead of using the - build/gdb/testsuite/output/gdb.dwarf2/dw2-using-debug-str/ directory. - - This appears to be caused by a missing '$' character. We setup a - variable debug_str_section which contains a path within the output - directory, but then when we build the objcopy command we use - 'debug_str_section' without a '$' prefix, as a result, we create the - debug_str_section file. - - This commit adds the missing '$', the file is now created in the - output directory. - -2022-10-19 Andrew Burgess - - bfd: fix undefined references to aarch64_pe_le_vec - After commit: - - commit c60b3806799abf1d7f6cf5108a1b0e733a950b13 - Date: Wed Oct 19 10:57:12 2022 +0200 - - aarch64-pe support for LD, GAS and BFD - - It appears that bfd/Makefile.in and bfd/configure were not regenerated - correctly. The differences in the configure file are only whitespace, - but in Makefile.in a critical reference to pe-aarch64.lo was missing. - -2022-10-19 Jedidiah Thompson - Jedidiah Thompson - Zac Walker - - aarch64-pe support for LD, GAS and BFD - Allows aarch64-pe to be targeted natively, not having to use objcopy to convert it from ELF to PE. - Based on initial work by Jedidiah Thompson - -2022-10-19 rupesh potharla - - Binutils: Adding new testcase for addr2line. - * binutils/testsuite/config/default.exp: Set ADDR2LINE and ADDR2LINEFLAGS. - * binutils/testsuite/binutils-all/addr2line.exp: New file. - -2022-10-19 Tom de Vries - - [gdb/testsuite] Fix ERROR in gdb.python/py-breakpoint.exp - With test-case gdb.python/py-breakpoint.exp I run into: - ... - (gdb) ERROR: tcl error sourcing gdb.python/py-breakpoint.exp. - ERROR: can't read "skip_hw_watchpoint_tests_p": no such variable - while executing - "if {$skip_hw_watchpoint_tests_p} { - gdb_test_no_output "set can-use-hw-watchpoints 0" "" - }" - ... - - Fix this by adding the missing "global skip_hw_watchpoint_tests_p" in two - procs. - - Tested on x86_64-linux. - -2022-10-19 Andreas Krebbel - - IBM zSystems: Issue error for *DBL relocs on misaligned symbols - Relocs like PC32DBL require a right shift of the symbol value. There - is no situation where dropping symbol value bits with the right shift - is a good thing. Hence we now issue an error to detect such problems. - -2022-10-19 Simon Marchi - - gdb: check for groups with duplicate names in reggroups:add - In the downstream ROCm GDB port, we would create multiple register - groups with duplicate names. While it did not really hurt, it certainly - wasn't the intent. And I don't think it ever makes sense to do so. - - To catch these, change the assert in reggroups::add to check for - duplicate names. It's no longer necessary to check for duplicate - reggroup pointers, because adding the same group twice would be caught - by the duplicate name check. - - Change-Id: Id216a58acf91f1b314d3cba2d02de73656f8851d - Approved-By: Tom Tromey - -2022-10-19 GDB Administrator - - Automatic date update in version.in - -2022-10-18 H.J. Lu - - x86: Disable AVX-VNNI when disabling AVX2 - Since AVX-VNNI requires AVX2, disable AVX-VNNI when disabling AVX2. - - * i386-gen.c (cpu_flag_init): Add CpuAVX_VNNI to - CPU_ANY_AVX2_FLAGS. - * i386-init.h: Regenerate. - -2022-10-18 Tom Tromey - - Remove dead code from py-finishbreakpoint.c - PR python/16324 points out that comparing a frame id to null_frame_id - can never succeed, and proposes simply removing the dead code. That - is what this patch does. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=16324 - -2022-10-18 Carl Love - - Update tests to use skip_hw_watchpoint_tests to test for HW watchpoint support. - The hardware watchpoint check has been updated in a couple of recent - patches. This patch updates the hardware watchpoint test in the remaining - gdb tests. - - The issue is the PowerPC processors support hardware watchpoints with the - exception of Power 9. The hardware watchpoint support is disabled on - Power 9. The test skip_hw_watchpoint_tests must be used to correctly - determine if the PowerPC processor supports hardware watchpoints. - - This patch fixes 6 test failures in test gdb.threads/watchpoint-fork.exp. - - Test gdb.base/watch-vfork.exp runs with can-use-hw-watchpoints set to - true and false. When the test is run with can-use-hw-watchpoints set to - true, gdb just falls back to using software watchpoints. The - patch reduces the number of expected passes by 2 since because it now - only runs once with can-use-hw-watchpoints set to false. - - Test gdb.mi/mi-watch.exp runs the test with argument hw and sw. If the - argument is hw and hardware watchpoints are not supported the test exits. - The number of expected passes is cut in half with the patch as it now only - runs the test using software breakpoints. Previously the pass to use - hardware watchpoints was not skipped and the test actually ran using - software watchpoints. - - The following tests run the same with and without the patch. The tests - are supposed to execute the gdb command "set can-use-hw-watchpoints 0" if - the processor does not support hardware bwatchpoints. However the command - was not being executed and gdb was falling back to using software - watchpoints since the Power 9 watchpoint resource check fails. With the - patch, the tests now execute the command and the test runs using software - watchpoints as it did previously. The tests are: - - gdb.base/commands.exp - gdb.base/cond-eval-mode.exp - gdb.base/display.exp - gdb.base/gdb11531.exp - gdb.base/recurse.exp - gdb.base/value-double-free.exp - gdb.base/watch-bitfields.exp - gdb.base/watch-cond-infcall.exp - gdb.base/watch-cond.exp - gdb.base/watchpoint-solib.exp - gdb.base/watchpoints.exp - - The following two tests are not supported on the Power 9 system used to - test the changes. The patch does not change the tests results for these - tests: - - gdb.python/py-breakpoint.exp - gdb.mi/mi-watch-nonstop.exp - -2022-10-18 Tom de Vries - - [gdb/testsuite] Handle header files with local-remote-host.exp - With test-case gdb.base/included.exp and host board local-remote-host.exp with - tentative fix for PR29697 I run into: - ... - included.c:18:10: fatal error: included.h: No such file or directory - #include "included.h" - ^~~~~~~~~~~~ - compilation terminated. - ... - - Fix this by adding the missing gdb_remote_download calls. - - Likewise in a few other test-cases. - - Tested on x86_64-linux. - -2022-10-18 Tom de Vries - - [gdb/testsuite] Fix gdb.server/no-thread-db.exp with local-remote-host.exp - With test-case gdb.server/no-thread-db.exp and host board local-remote-host.exp - with a tentative fix for PR29697 I run into: - ... - (gdb) print foo^M - Cannot find thread-local storage for Thread 29613.29613, executable file \ - $HOME/no-thread-db:^M - Remote target failed to process qGetTLSAddr request^M - (gdb) FAIL: gdb.server/no-thread-db.exp: print foo - ... - - The regexp in the test-case expects the full $binfile pathname, but we have - instead $HOME/no-thread-db. - - Fix this by making the regexp less strict. - - Tested on x86_64-linux. - -2022-10-18 Tom de Vries - - [gdb/testsuite] Fix gdb.base/return-nodebug.exp with local-remote-host.exp - With host board local-remote-host.exp and test-case - gdb.base/return-nodebug.exp, I run into: - ... - Executing on host: gcc -fno-stack-protector -fdiagnostics-color=never \ - -DTYPE=signed\ char -c -g -o return-nodebug-signed-char0.o \ - /home/vries/gdb_versions/devel/src/gdb/testsuite/gdb.base/return-nodebug.c \ - (timeout = 300) - builtin_spawn [open ...]^M - gcc: error: char: No such file or directory - ... - - Avoid the quoting problem by not using spaces in the define. - - Tested on x86_64-linux. - -2022-10-18 Tom de Vries - - [gdb/testsuite] Fix gdb.server/file-transfer.exp with local-remote-host.exp - When running test-case gdb.server/file-transfer.exp with host - board local-remote-host.exp, I get: - ... - Executing on host: cmp -s $outputs/gdb.server/file-transfer/file-transfer \ - down-server (timeout = 300) - builtin_spawn [open ...]^M - XYZ2ZYX - FAIL: gdb.server/file-transfer.exp: compare intermediate binary file - ... - - The remote host and remote target cases are handled here together here in proc - test_file_transfer: - ... - if {![is_remote host] && ![is_remote target]} { - set up_server [standard_output_file $up_server] - set down_server [standard_output_file $down_server] - } - ... - - Fix this by handling them separately. - - Tested on x86_64-linux. - -2022-10-18 Tom de Vries - - [gdb/testsuite] Update boards/README - Update gdb/testsuite/boards/README to reflect recent commit c4c8c27263d - ("[gdb/testsuite] Fix host board local-remote-host-notty.exp timeouts"), which - means the board now uses a pseudo-tty, but with editing disabled. - -2022-10-18 Markus Metzger - - gdb, solib-svr4: support namespaces in DSO iteration - When looking up names, GDB needs to stay within one linker namespace to - find the correct instance in case the same name is provided in more than - one namespace. - - Modify svr4_iterate_over_objfiles_in_search_order() to stay within the - namespace of the current_objfile argument. If no current_objfile is - provided (i.e. it is nullptr), iterate over objfiles in the initial - namespace. - - For objfiles that do not have a corresponding so_list to provide the - namespace, assume that the objfile was loaded into the initial namespace. - This would cover the main executable objfile (which is indeed loaded into - the initial namespace) as well as manually added symbol files. - - Expected fails: - - - gdb.base/non-lazy-array-index.exp: the expression parser may lookup - global symbols, which may result in xfers to read auxv for determining - the debug base as part of svr4_iterate_over_objfiles_in_search_order(). - - - gdb.server/non-lazy-array-index.exp: symbol lookup may access the - target to read AUXV in order to determine the debug base for SVR4 - linker namespaces. - - Known issues: - - - get_symbol_address() and get_msymbol_address() search objfiles for a - 'better' match. This was introduced by - - 4b610737f02 Handle copy relocations - - to handle copy relocations but it now causes a wrong address to be - read after symbol lookup actually cound the correct symbol. This can - be seen, for example, with gdb.base/dlmopen.exp when compiled with - clang. - - - gnu ifuncs are only looked up in the initial namespace. - - - lookup_minimal_symbol() and lookup_minimal_symbol_text() directly - iterate over objfiles and are not aware of linker namespaces. - -2022-10-18 Markus Metzger - - gdb: update gnu ifunc resolve - Update elf_gnu_ifunc_resolve_by_cache() and elf_gnu_ifunc_resolve_by_got() - to use gdbarch_iterate_over_objfiles_in_search_order() in order to - restrict the objfile traversal to the initial namespace. - - In order to extend this to other namespaces, we'd need to provide context, - e.g. via an objfile inside that namespace. - -2022-10-18 Markus Metzger - - gdb, symtab: inline find_quick_global_symbol_language - There is only one use of find_quick_global_symbol_language that calls it - for the special symbol "main". - - Inline the function as it is probably not correct in the general case - where we may have multiple instances of global symbols with the same name - but different languages in different libraries in different linker - namespaces. - - Further, change the objfiles iteration into a call to - gdbarch_iterate_over_objfiles_in_search_order, which would only search the - initial linker namespace, where we expect "main" to be located. - -2022-10-18 Markus Metzger - - gdb, hppa: remove unused hppa_lookup_stub_minimal_symbol - I stumbled over this while reviewing all objfiles traversals with regards - to impact of linker namespaces. - - Recursive grep only finds two occurrences of hppa_lookup_stub_minimal_symbol: - - the declaration in hppa-tdep.h. - - the definition in hppa-tdep.c. - - There appear to be no calls to this function. Remove it. - -2022-10-18 Markus Metzger - - gdb, cp: update add_symbol_overload_list_qualified - Iterate over objfiles in search order using the objfile of the selected - block as current_objfile so the iteration can stay inside the block's - linker namespace. - - fixup! gdb, ada: update ada_lookup_simple_minsym - remove get_selected_block() - - gdb, ada: update ada_lookup_simple_minsym - Iterate over objfile in search order using the objfile of the context - block as current_objfile so the iteration can stay inside the block's - linker namespace. - - gdb, ada: collect standard exceptions in all objfiles - When searching for standard exceptions for Ada, we lookup the minimal - symbol of each exception. With linker namespaces there can be multiple - instances in different namespaces. Collect them all. - -2022-10-18 Markus Metzger - - gdb, python: use gdbarch_iterate_over_objfiles_in_search_order - The implementation of gdb.lookup_objfile() iterates over all objfiles and - compares their name or build id to the user-provided search string. - - This will cause problems when supporting linker namespaces as the first - objfile in any namespace will be found. Instead, use - gdbarch_iterate_over_objfiles_in_search_order to only consider the - namespace of gdb.current_objfile() for the search, which defaults to the - initial namespace when gdb.current_objfile() is None. - -2022-10-18 Markus Metzger - - gdb, compile: unlink objfile stored in module - When cleaning up after a compile command, we iterate over all objfiles and - unlink the first objfile with the same name as the one we compiled. - - Since we already store a pointer to that objfile in the module and use it - to get the name we're comparing against, there's no reason to iterate, at - all. We can simply use that objfile. - - This further avoids potential issues when an objfile with the same name is - loaded into a different linker namespace. - -2022-10-18 Markus Metzger - - gdb, gdbserver: extend RSP to support namespaces - Introduce a new qXfer:libraries-svr4:read annex key/value pair - - lmid= - - to be used together with start and prev to provide the namespace of start - and prev to gdbserver. - - Unknown key/value pairs are ignored by gdbserver so no new supports check - is needed. - - Introduce a new library-list-svr4 library attribute - - lmid - - to provide the namespace of a library entry to GDB. - - This implementation uses the address of a namespace's r_debug object as - namespace identifier. - - This should have incremented the minor version but since unknown XML - attributes are ignored, anyway, and since changing the version results in - a warning from GDB, the version is left at 1.0. - -2022-10-18 Markus Metzger - - gdbserver: move main_lm handling into caller - When listing SVR4 shared libraries, special care has to be taken about the - first library in the default namespace as that refers to the main - executable. The load map address of this main executable is provided in - an attribute of the library-list-svr4 element. - - Move that code from where we enumerate libraries inside a single namespace - to where we generate the rest of the library-list-svr4 element. This - allows us to complete the library-list-svr4 element inside one function. - - There should be no functional change. - -2022-10-18 Markus Metzger - Lu, Hongjiu - - gdb, gdbserver: support dlmopen() - In glibc, the r_debug structure contains (amongst others) the following - fields: - - int r_version: - Version number for this protocol. It should be greater than 0. - - If r_version is 2, struct r_debug is extended to struct r_debug_extended - with one additional field: - - struct r_debug_extended *r_next; - Link to the next r_debug_extended structure. Each r_debug_extended - structure represents a different namespace. The first r_debug_extended - structure is for the default namespace. - - 1. Change solib_svr4_r_map argument to take the debug base. - 2. Add solib_svr4_r_next to find the link map in the next namespace from - the r_next field. - 3. Update svr4_current_sos_direct to get the link map in the next namespace - from the r_next field. - 4. Don't check shared libraries in other namespaces when updating shared - libraries in a new namespace. - 5. Update svr4_same to check the load offset in addition to the name - 6. Update svr4_default_sos to also set l_addr_inferior - 7. Change the flat solib_list into a per-namespace list using the - namespace's r_debug address to identify the namespace. - - Add gdb.base/dlmopen.exp to test this. - - To remain backwards compatible with older gdbserver, we reserve the - namespace zero for a flat list of solibs from all namespaces. Subsequent - patches will extend RSP to allow listing libraries grouped by namespace. - - This fixes PR 11839. - -2022-10-18 Markus Metzger - - gdb, solib-svr4: remove locate_base() - Whenever we call locate_base(), we clear info->debug_base directly before - the call. Thus, we never cache the base location as locate_base() had - intended. - - Move the svr4_have_link_map_offsets() check into elf_locate_base(), inline - locate_base() at all call sites, and remove it. - -2022-10-18 Markus Metzger - - gdb, testsuite: extend gdb_test_multiple checks - Check for - - warning: Corrupted shared library list - - and for - - Invalid cast. - warning: Probes-based dynamic linker interface failed. - Reverting to original interface. - - in gdb_test_multiple. - -2022-10-18 Jan Beulich - - x86: generalize gas documentation for disabling of ISA extensions - As of commit ae89daecb132 ("x86: generalize disabling of sub- - architectures") there's no arbitrary subset of ISAs which can also be - disabled. This should have been reflected in documentation right away. - Since I failed to do so, correct this now. - - x86: correct CPU_AMX_{BF16,INT8}_FLAGS - AMX-TILE is a prereq to these, as already correctly expressed by - CPU_ANY_AMX_TILE_FLAGS. Express the dependency also in the reverse - ("positive") direction. - -2022-10-18 GDB Administrator - - Automatic date update in version.in - -2022-10-17 Tom Tromey - - kfail an Ada test for GCC < 12 - I noticed one particular Ada test was failing on Fedora 34, but works - when I switch to GCC 12. This patch arranges to kfail the test when - an older compiler is used. - - I tested this with GCC 11, 12, and 13. I'm going to check it in. - -2022-10-17 Tom Tromey - - Remove a nullptr check in DWARF scanner - In scan_attributes, The DWARF scanner checks whether maybe_defer is - nullptr, but this can never happen. This patch removes the check. - -2022-10-17 Pedro Alves - - gdbarch-components.py: Remove spurious space from "frame_info_ptr " params - If you run gdbarch.py today, you'll get local modifications compared - to what's in the tree, like: - - --- c/gdb/gdbarch-gen.h - +++ w/gdb/gdbarch-gen.h - @@ -315,8 +315,8 @@ extern void set_gdbarch_register_type (struct gdbarch *gdbarch, gdbarch_register - should match the address at which the breakpoint was set in the dummy - frame. */ - - -typedef struct frame_id (gdbarch_dummy_id_ftype) (struct gdbarch *gdbarch, frame_info_ptr this_frame); - -extern struct frame_id gdbarch_dummy_id (struct gdbarch *gdbarch, frame_info_ptr this_frame); - +typedef struct frame_id (gdbarch_dummy_id_ftype) (struct gdbarch *gdbarch, frame_info_ptr this_frame); - +extern struct frame_id gdbarch_dummy_id (struct gdbarch *gdbarch, frame_info_ptr this_frame); - extern void set_gdbarch_dummy_id (struct gdbarch *gdbarch, gdbarch_dummy_id_ftype *dummy_id); - - etc. - - The extra space comes from the "frame_info_ptr " param that appears in - a number of gdbarch methods in gdbarch-components.py. With the extra - space removed, running ./gdbarch.py generates the exact code that's in - the tree already. - - Change-Id: If7d20b8c6b2fd9ff466142a01bd2611c9ef9f53e - -2022-10-17 Tom Tromey - - Change .gdb_index de-duplication implementation - While investigating PR symtab/29179, I found that one Ada test failed - because, although a certain symbol was present in the index, with the - new DWARF reader it pointed to a different CU than was chosen by - earlier versions of gdb. - - This patch changes how symbol de-duplication is done, deferring the - process until the entire symbol table has been constructed. This way, - it's possible to always choose the lower-numbered CU among duplicates, - which is how gdb (implicitly) previously worked. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29179 - -2022-10-17 Tom Tromey - - Improve Ada support in .gdb_index - The cooked index work changed how .gdb_index is constructed, and in - the process broke .gdb_index support. This is PR symtab/29179. - - This patch partially fixes the problem. It arranges for Ada names to - be encoded in the form expected by the index code. In particular, - linkage names for Ada are emitted, including the "main" name; names - are Ada-encoded; and names are no longer case-folded, something that - prevented operator names from round-tripping correctly. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29179 - -2022-10-17 Tom Tromey - - Don't add type linkage names to cooked index - The compiler will sometimes emit a linkage name for a type, like: - - <1d3> DW_AT_linkage_name: (indirect string, offset: 0x106f): 11__mbstate_t - - These names aren't very useful, and this patch changes the DWARF - reader so that they are ignored by the cooked index. - -2022-10-17 Tom Tromey - - Fix regression in c-linkage-name.exp with gdb index - c-linkage-name.exp started failing with the gdb-index target board due - to an earlier patch. The problem here is that some linkage names must - be in the index -- but, based on inspection, not C++ linkage names. - This patch updates the code to exclude only these. - -2022-10-17 TaiseiIto - - Fix null pointer representations - Since "NULL" and "0" are used to represent invalid address in function - "gdbarch_find_by_info" in "binutils-gdb/gdb/arch-utils.c", I modified - them to "nullptr". - -2022-10-17 Simon Marchi - - gdb: silence unused-but-set-variable warning about yynerrs in cp-name-parser.y - When building with clang 15 on Ubuntu 20.04, I get: - - CXX cp-name-parser.o - cp-name-parser.c.tmp:1777:9: error: variable 'cpnameyynerrs' set but not used [-Werror,-Wunused-but-set-variable] - int yynerrs; - ^ - /home/smarchi/src/binutils-gdb/gdb/yy-remap.h:58:18: note: expanded from macro 'yynerrs' - #define yynerrs GDB_YY_REMAP (yynerrs) - ^ - /home/smarchi/src/binutils-gdb/gdb/yy-remap.h:40:29: note: expanded from macro 'GDB_YY_REMAP' - #define GDB_YY_REMAP(YYSYM) GDB_YY_REMAP_1 (GDB_YY_REMAP_PREFIX, YYSYM) - ^ - /home/smarchi/src/binutils-gdb/gdb/yy-remap.h:39:39: note: expanded from macro 'GDB_YY_REMAP_1' - #define GDB_YY_REMAP_1(PREFIX, YYSYM) GDB_YY_REMAP_2 (PREFIX, YYSYM) - ^ - /home/smarchi/src/binutils-gdb/gdb/yy-remap.h:38:39: note: expanded from macro 'GDB_YY_REMAP_2' - #define GDB_YY_REMAP_2(PREFIX, YYSYM) PREFIX ## YYSYM - ^ - :45:1: note: expanded from here - cpnameyynerrs - ^ - - This is because clang 15 warns for something like this: - - int n; - n = 0; - ++n; - - whereas previous versions do not. - - yynerrs is defined in yyparse and is there for actions to use. Since - the actions in cp-name-parser.y don't use it, we get a warning. We see - this problem on this particular .y file because it uses `%pure-parser` - [1], which makes yynerrs a local rather than a global. - - I initially fixed this by using - DIAGNOSTIC_IGNORE_UNUSED_BUT_SET_VARIABLE (like in commit f7aa1a5acc5 - ("gold: Suppress "unused" variable warning on Clang")), but then I - realized we could suppress the warning in a more fine-grained way using - this in a rule: - - (void) yynerrs; - - [1] https://www.gnu.org/software/bison/manual/html_node/Error-Reporting-Function.html - - Change-Id: I6cae7a4207c19fe1b719e2ac19be69122ebe3af1 - -2022-10-17 Clément Chigot - - ld/testsuite: consistently add board_ldflags when linking with GCC - Currently, the functions checking if the compiler is available or if a - feature is available add both board_cflags and board_ldflags. - However, functions running the tests only retrieve board_cflags. This - can lead to unexpected errors when mandaratory flags are defined in - board_ldflags and not board_cflags. - - ld/ChangeLog: - - * testsuite/ld-unique/unique.exp: Add board_ldflags when - linking with GCC. - * testsuite/lib/ld-lib.exp: Likewise. - -2022-10-17 CaiJingtao - - Allow explicit size specifier for predicate operand of {sq, uq, }{incp, decp} - Omitting predicate size specifier in vector form of {sq, uq, }{decp, incp} is deprecated and will be prohibited in a future release of the aarch64, - see https://developer.arm.com/documentation/ddi0602/2021-09/SVE-Instructions/DECP--vector---Decrement-vector-by-count-of-true-predicate-elements-. - - This allows explicit size specifier, e.g. `decp z0.h, p0.h`, for predicate operand of these SVE instructions. - The existing behaviour of not requiring the specifier is preserved. - And the disasembly is with the specifier with this patch. - - The GAS tests passed under our local tests. - - opcodes/ - * aarch64-asm.c: Modify `sve_size_hsd` encoding. - * aarch64-tbl.h (aarch64_opcode_table): Add QUALS's type OP_SVE_Vv_HSD - for decp, incp, sqdecp, sqincp, uqdecp and uqincp. - - gas/ - * testsuite/gas/aarch64/sve-movprfx_23.s: Update movprfx_23 testcase's - test_sametwo macro, where take the predicate size specifier. - * testsuite/gas/aarch64/sve-movprfx_23.d: Update movprfx_23 testcase's - expected disassembly. - * testsuite/gas/aarch64/sve-movprfx_23.l: Update movprfx_23 testcase's - expected assembler messages. - * testsuite/gas/aarch64/sve.s: Add sve testcase's instructions for - decp, incp, sqdecp, sqincp, uqdecp and uqincp, which take the - predicate size specifier. - * testsuite/gas/aarch64/sve.d: Update sve testcase's expected - disassembly. - -2022-10-17 Richard Sandiford - - aarch64: Tweak handling of F_STRICT - Current F_STRICT qualifier checking is enforced after the fact - rather than as part of the match. This makes it impossible to - have, e.g.: - - QLF2(S_D, S_D) - QLF2(S_D, NIL) - - in the same list. - - opcodes/ - * aarch64-opc.c (aarch64_find_best_match): Handle F_STRICT here - rather than... - (match_operands_qualifier): ...here. - -2022-10-17 Jan Beulich - - x86: properly decode EVEX.W for AVX512_4{FMAPS,VNNIW} insns - These require EVEX.W=0. Use %XS to facilitate the checking, even if for - the AVX512_4VNNIW ones this is kind of an abuse (as 's' there stands for - "signed", not "single"). - - While there also correct the 3rd operand for the AVX512_4VNNIW entries: - Only the memory form is allowed (just like for AVX512_4FMAPS, where the - correct type is already in use). - -2022-10-17 Jan Beulich - - x86: fold AVX512-VNNI disassembler entries with AVX-VNNI ones - Make %XV also print the separating blank in the VEX case, while making - it do nothing for EVEX-encoded insns. This way the AVX-VNNI entries - can be re-used for AVX512-VNNI, at the same time fixing the lack of - EVEX.W decoding. - - For the AVX-VNNI ones further make sure only VEX.66 forms are actually - decoded. - -2022-10-17 GDB Administrator - - Automatic date update in version.in - -2022-10-16 Tom Tromey - - More uses of checked_static_cast - This patch changes a few more uses of static_cast to use - checked_static_cast. In this patch, cast-to-references are converted - by moving the dereference outside of the cast, as checked_static_cast - only handles pointers. - -2022-10-16 Tom Tromey - - Use checked_static_cast in more places - I looked through all the uses of static_cast<... *> in gdb and - converted many of them to checked_static_cast. - - I couldn't test a few of these changes. - -2022-10-16 Alan Modra - - PowerPC se_rfmci and VLE, SPE2 and LSP insns with -many - I noticed recently that se_rfmci, a VLE mode instruction, was being - accepted by non-VLE cpus, and also that se_rfmci by itself in a - section did not cause SHF_PPC_VLE to be set. ie. both testcases added - by this patch fail without the changes to tc-ppc.c here. - - Also, VLE, SPE2 and LSP insns were not accepted by the assembler with - -many nor were SPE2 and LSP being disassembled with -Many. - - gas/ - * config/tc-ppc.c (ppc_setup_opcodes): Wrap long lines. Add - vle_opcodes when PPC_OPCODE_VLE or PPC_OPCODE_ANY. Simplify - disassembler index segment checks. Add LSP and SPE2 opcodes - when PPC_OPCODE_ANY too. - (md_assemble): Correct logic adding PPC_APUINFO_VLE and - SHF_PPC_VLE. - * testsuite/gas/ppc/se_rfmci.s - * testsuite/gas/ppc/se_rfmci.d, - * testsuite/gas/ppc/se_rfmci_bad.d: New tests. - * testsuite/gas/ppc/ppc.exp: Run them. - opcodes/ - * ppc-dis.c (print_insn_powerpc): Disassemble SPE2 and LSP insn - when -Many. - * ppc-opc.c (vle_opcodes ): Comment. - -2022-10-16 Alan Modra - - zlib-gabi to zstd woes - So we had a zlib-gabi .debug_info section that increased in size with - zstd, so much so that it was better to leave the section - uncompressed. Things went horribly wrong when the section was read - again later. The section was read again off disk using the - uncompressed size. So you get the zlib section again with some - garbage at the end. Fix that particular problem by setting the - section flag SEC_IN_MEMORY. Any future read will get sec->contents. - - Also, if the section is to be left uncompressed, the input - SHF_COMPRESSED flag needs to be reset otherwise objcopy will copy it - to output. - - Finally, bfd_convert_section_contents needed a small update to handle - zstd compressed sections, and I've deleted bfd_cache_section_contents. - - * bfd.c (bfd_convert_section_contents): Handle zstd. - * compress.c (bfd_compress_section_contents): When section - contents are uncompressed set SEC_IN_MEMORY flag, - compress_status to COMRESS_SECTION_NONE, and clear - SHF_COMPRESSED. Set SEC_IN_MEMORY for compressed contents. - (bfd_get_full_section_contents): Don't check section size - against file size when SEC_IN_MEMORY. - (bfd_cache_section_contents): Delete function. - * elf32-arm.c (elf32_arm_get_synthetic_symtab): Expand - bfd_cache_section_contents here. - * bfd-in2.h: Regenerate. - -2022-10-16 GDB Administrator - - Automatic date update in version.in - -2022-10-15 Torbjörn SVENSSON - - gdb/arm: Don't rely on loop detection to stop unwinding - Setting SP of the next frame to the same address as the current frame - is an ugly way to stop the unwinding. A cleaner way is to rely on - the frame_unwind_stop_reason function to return UNWIND_OUTERMOST. - -2022-10-15 GDB Administrator - - Automatic date update in version.in - -2022-10-14 Tom de Vries - - [gdb/testsuite] Add boards/README - Add a file gdb/testsuite/boards/README, to make it easier to get a high-level - overview of the various boards. - -2022-10-14 Tom de Vries - - [gdb/contrib] Handle STRIP_ARGS_{STRIP,KEEP}_DEBUG in cc-with-tweaks.sh - Handle new environment variable STRIP_ARGS_STRIP_DEBUG, defaulting to - --strip-debug in gdb/contrib/cc-with-tweaks.sh, such that we can easily - reproduce the PR29277 assert using: - ... - $ export STRIP_ARGS_STRIP_DEBUG=--strip-all - $ make check RUNTESTFLAGS="gdb.base/jit-reader.exp \ - --target_board cc-with-gnu-debuglink" - ... - - For completeness sake and to avoid confusion about which of the two used strip - invocations the passed args apply to, likewise add STRIP_ARGS_KEEP_DEBUG, - defaulting to --only-keep-debug. - - Script checked with shellcheck, no new warnings added. - - Tested on x86_64-linux. - -2022-10-14 Tom de Vries - - [gdb] Fix heap-buffer-overflow in find_program_interpreter - With the test-case included in this patch, we run into: - ... - (gdb) target remote localhost:2347^M - `target:twice-connect' has disappeared; keeping its symbols.^M - Remote debugging using localhost:2347^M - warning: Unable to find dynamic linker breakpoint function.^M - GDB will be unable to debug shared library initializers^M - and track explicitly loaded dynamic code.^M - Reading /usr/lib/debug/.build-id/$hex/$hex.debug from remote target...^M - 0x00007ffff7dd4550 in ?? ()^M - (gdb) PASS: gdb.server/twice-connect.exp: session=second: gdbserver started - FAIL: gdb.server/twice-connect.exp: found interpreter - ... - - The problem originates in find_program_interpreter, where - bfd_get_section_contents is called to read .interp, but fails. The function - returns false but the result is ignored, so find_program_interpreter returns - some random string. - - Fix this by checking the result of the call to bfd_get_section_contents. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29652 - -2022-10-14 Tom de Vries - - [gdb/testsuite] Fix gdb.server/unittest.exp with host board local-remote-host.exp - With test-case gdb.server/unittest.exp and host board local-remote-host.exp I - run into: - ... - builtin_spawn build/gdbserver/gdbserver --selftest^M - ERROR: : spawn id exp7 not open - while executing - "expect { - -i exp7 -timeout 10 - -i $server_spawn_id - -re "Ran ($decimal) unit tests, 0 failed" { - set num_ran $expect_out(1,string) - gdb_assert "..." - ("uplevel" body line 1) - invoked from within - "uplevel $body" NONE : spawn id exp7 not open - UNRESOLVED: gdb.server/unittest.exp: unit tests - ... - - The problem is (as fixed for avr in commit df5b8876083 ("gdb/testsuite: better - handle failures in simavr board, reap simavr process")), that gdb_expect through - remote_expect adds a "-i -timeout 10", which is the one causing - the error. - - As in aforementioned commit, fix this by using expect instead. - - Tested on x86_64-linux. - -2022-10-14 Tom de Vries - - [gdb/testsuite] Fix host board local-remote-host-notty.exp timeouts - With test-case gdb.server/stop-reply-no-thread-multi.exp and host board - local-remote-host-notty.exp we occasionally run into a silent out, due to - getting: - ... - (gdb) kill^M - (gdb) The program is not being run.^M - ... - instead of the expected: - ... - (gdb) kill^M - The program is not being run.^M - (gdb) - ... - - Likewise, we occasionally run into a nonsilent timeout: - ... - (gdb) disconnect^M - (gdb) You can't do that when your target is `exec'^M - FAIL: gdb.server/stop-reply-no-thread.exp: to_disable=Tthread: t_nonstop=on: \ - disconnect (timeout) - ... - - Typically, this results in the test-case taking more than two minutes to run. - - The problem can be reproduced using just: - ... - $ ssh -l $USER 127.0.0.1 gdb -q -ex kill - ... - - Note that ssh by default uses -T which disables pseudo-tty allocation (as - opposed to -t which forces pseudo-tty allocation): - ... - $ ssh -l $USER 127.0.0.1 -T tty - not a tty - $ ssh -l $USER 127.0.0.1 -t tty - /dev/pts/5 - Connection to 127.0.0.1 closed. - ... - and according to https://stackoverflow.com/a/63241102 the behaviour we're - seeing is specific to using '-T'. - - The related host board local-remote-host.exp does use '-t', and the only - difference between the two boards mentioned is whether editing is on or off. - - Fix this by: - - moving the content of local-remote-host-notty.exp into - local-remote-host.exp - - consequently, extending the copyright years in local-remote-host.exp - - including local-remote-host.exp in local-remote-host-notty.exp - (making local-remote-host-notty.exp use '-t') - - adding -iex "set editing off" to GDBFLAGS in local-remote-host-notty.exp - - This results in the test-case taking just 6 seconds to run. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29669 - -2022-10-14 Tom de Vries - - [gdb/testsuite] Disable styling in host board local-remote-host.exp - With test-case gdb.server/stop-reply-no-thread.exp and host board - local-remote-host.exp, I run into: - ... - Breakpoint 1, ^[[33mmain^[[m () at ^[[32mstop-reply-no-thread.c^[[m:21^M - 21 ^[[01;34mreturn^[[m ^[[35m0^[[m^[[31m;^[[m^M - (gdb) FAIL: gdb.server/stop-reply-no-thread.exp: to_disable=: t_nonstop=off: \ - continue to main - ... - - The problem is that styling is enabled, and that is causing a regexp mismatch. - - With native, styling is disabled in default_gdb_init by doing - 'setenv TERM "dumb"', but that only has effect because the build (where we - execute runtest, and consequently the setenv) and the host (where we execute - gdb) are the same. For this host board however, gdb executes on a remote - host, and the setenv has no effect. - - We could try to make some generic way to set TERM on the host, but for the - purposes of this test-case it seems sufficient to just add: - ... - set GDBFLAGS "${GDBFLAGS} -iex \"set style enabled off\"" - ... - so let's go with that for now. - - Tested on x86_64-linux. - -2022-10-14 Tom Tromey - - Use scoped_value_mark in more places - I looked at all the spots using value_mark, and converted all the - straightforward ones to use scoped_value_mark instead. - - Regression tested on x86-64 Fedora 34. - -2022-10-14 Torbjörn SVENSSON - - gdb/arm: Stop unwinding on error, but do not assert - When it's impossible to read the FPCCR and XPSR, the unwinding is - unpredictable as the it's not possible to determine the correct - frame size or padding. - The only sane thing to do in this condition is to stop the unwinding. - - Example session without this patch: - - (gdb) bt - #0 SVC_Handler () at .../GPIO/GPIO_EXTI/Src/stm32f4xx_it.c:112 - .../gdb/arm-tdep.c:3594: internal-error: arm_m_exception_cache: Assertion `safe_read_memory_unsigned_integer (FPCCR, ARM_INT_REGISTER_SIZE, byte_order, &fpccr)' failed. - A problem internal to GDB has been detected, - further debugging may prove unreliable. - ----- Backtrace ----- - 0x5583bfb2a157 gdb_internal_backtrace_1 - ... - --------------------- - - This is a bug, please report it. For instructions, see: - . - - Aborted (core dumped) - - Example session with this patch: - - (gdb) bt - #0 SVC_Handler () at .../GPIO/GPIO_EXTI/Src/stm32f4xx_it.c:112 - warning: Could not fetch required FPCCR content. Further unwind is impossible. - #1 - (gdb) - - Reviewed-by: Pedro Alves - -2022-10-14 Alan Modra - - PowerPC SPE disassembly and tests - Where sub and subf forms of an instruction exist we generally - disassemble to the extended insn sub form rather than the underlying - machine subf instruction. Do so for SPE evsubw and evsubiw too. - - spe_ambiguous.d always was a bit too optimistic. There is no sensible - way to disassemble identical bytes back to different and original - source. Instead change the test to check -Mraw results. - - gas/ - * testsuite/gas/ppc/ppc.exp: Run spe_ambiguous test. - * testsuite/gas/ppc/spe.d: Expect evsubw and evsubiw rather than - evsubfw and evsubifw. - * testsuite/gas/ppc/spe_ambiguous.s: Test evnor form equivalent - to evnot. - * testsuite/gas/ppc/spe_ambiguous.d: Test Mraw. - opcodes/ - * ppc-opc.c (powerpc_opcodes): Move evsubw before evsubfw and - evsubiw before evsubifw and mark EXT. - -2022-10-14 Alan Modra - - e200 LSP support - It has bothered me for a long time that we have disabled LSP (and SPE) - tests. Also the LSP test comment indicating there is something wrong - with get_powerpc_dialect. I don't think there is. Decoding of a VLE - instruction depends on whether the processor is in VLE mode (some - processors support both VLE and standard PPC) which we flag per - section with SHF_PPC_VLE for decoding when disassembling. - - Background: Some versions of powerpc e200 have "Lightweight Signal - Processing" support, examples being e200z215 and e200z425. As far as - I can tell, LSP and SPE are mutually exclusive. This seems to be - borne out by insn encoding, for example LSP "zvaddih" and SPE "evaddw" - have the same encoding. So none of the processor descriptions in - ppc_opts ought to have both PPC_OPCODE_LSP and PPC_OPCODE_SPE/2, if we - want disassembly to work. I also could not find anything to suggest - that the LSP insns are enabled only in VLE mode, which means the LSP - insns should not be in vle_opcodes. - - Fix all this by moving the LSP insns to their own table, and add a new - e200z2 cpu entry with LSP support, removing LSP from -me200z4 and from - -mvle. (Yes, I know, as I said above some of the e200z4 processors - have LSP. Others have SPE. It's hard to choose good options. Think - of z2 as meaning earlier, z4 as later.) Also add -mlsp to allow - adding the LSP insn set. - - include/ - * opcode/ppc.h (lsp_opcodes, lsp_num_opcodes): Declare. - (LSP_OP_TO_SEG): Define. - binutils/ - * doc/binutils.texi: Update ppc docs. - gas/ - * config/tc-ppc.c (ppc_setup_opcodes): Add lsp opcodes to ppc_hash. - * doc/c-ppc.texi: Document e200 and lsp. - * testsuite/gas/ppc/lsp-checks.d: Assemble with -me200z2. - * testsuite/gas/ppc/lsp.d: Likewise, disassembly too. - * testsuite/gas/ppc/ppc.exp: Don't xfail lsp test. - opcodes/ - * ppc-dis.c (ppc_opts): Add e200z2 and lsp. Don't set - PPC_OPCODE_LSP for e200z4 or vle. - (ppc_parse_cpu): Mutually exclude LSP and SPE. - (LSP_OPCD_SEGS): Define. - (lsp_opcd_indices): New array. - (disassemble_init_powerpc): Init lsp_opcd_indices. - (lookup_lsp): New function. - (print_insn_powerpc): Call it. - * ppc-opc.c: Include libiberty.h for ARRAY_SIZE and use throughout. - (vle_opcodes): Move LSP opcodes to.. - (lsp_opcodes): ..here, and sort. - (lsp_num_opcodes): New. - -2022-10-14 Alan Modra - - PR29677, Field `the_bfd` of `asymbol` is uninitialised - Besides not initialising the_bfd of synthetic symbols, counting - symbols when sizing didn't match symbols created if there were any - dynsyms named "". We don't want synthetic symbols without names - anyway, so get rid of them. Also, simplify and correct sanity checks. - - PR 29677 - * mach-o.c (bfd_mach_o_get_synthetic_symtab): Rewrite. - -2022-10-14 Tom de Vries - - [gdb/testsuite] Drop unnecessary -Wl,-soname in gdb.base/skip-solib.exp - I noticed in gdb.base/skip-solib.exp: - ... - if {[gdb_compile_shlib ${srcdir}/${subdir}/${srcfile_lib} ${binfile_lib} \ - [list debug -Wl,-soname,${libname}.so]] != ""} { - return -1 - } - ... - that the -Wl,-soname argument is missing an ldflags= prefix, but adding it - gives us a duplicate: - ... - Executing on host: gcc -fno-stack-protector \ - outputs/gdb.base/skip-solib/skip-solib-lib.c.o -fdiagnostics-color=never \ - -shared -g -Wl,-soname,libskip-solib.so -Wl,-soname,libskip-solib.so -lm \ - -o outputs/gdb.base/skip-solib/libskip-solib.so (timeout = 300) - ... - so apparently it's taken care of by gdb_compile_shlib. - - Drop the inactive and also unnecessary -Wl,-soname,${libname}.so from the - flags list for the gdb_compile_shlib call. - - Tested on x86_64-linux. - -2022-10-14 Tom de Vries - - [gdb/testsuite] Fix gdb.base/infoline-reloc-main-from-zero.exp with PIE - With test-case gdb.base/infoline-reloc-main-from-zero.exp and target board - unix/-fPIE/-pie I run into: - ... - gdb compile failed, ld: infoline-reloc-main-from-zero: error: \ - PHDR segment not covered by LOAD segment - collect2: error: ld returned 1 exit status - ... - - When running with native, I find that the executable is static: - ... - $ file infoline-reloc-main-from-zero - infoline-reloc-main-from-zero: ELF 64-bit LSB executable, x86-64, \ - version 1 (SYSV), statically linked, BuildID[sha1]=$hex, with debug_info, \ - not stripped - ... - despite not having been compiled with -static. - - Fix the compilation by adding -static to the compilation flags. - - Tested on x86_64-linux. - -2022-10-14 Tom de Vries - - [gdb/testsuite] Fix gdb.base/infoline-reloc-main-from-zero.exp with clang - With test-case gdb.base/infoline-reloc-main-from-zero.exp and clang I run into: - ... - gdb compile failed, clang-13.0: warning: -e main: 'linker' input unused \ - [-Wunused-command-line-argument] - clang-13.0: warning: -Wl,-Ttext=0x00: 'linker' input unused \ - [-Wunused-command-line-argument] - clang-13.0: warning: -Wl,-N: 'linker' input unused \ - [-Wunused-command-line-argument] - UNTESTED: gdb.base/infoline-reloc-main-from-zero.exp: \ - infoline-reloc-main-from-zero.exp - UNTESTED: gdb.base/infoline-reloc-main-from-zero.exp: failed to compile - ... - - Fix this by using ldflags instead of additional_flags. - - Likewise, fix all occurrences of: - ... - $ find gdb/testsuite -name *.exp | xargs grep additional_flags.*Wl - ... - - Tested on x86_64-linux. - -2022-10-14 Tom de Vries - - [gdb/testsuite] Fix nopie test-cases with target board unix/-fPIE/-pie - Compilers default to either PIE or no-PIE executables. - - In order to test PIE executables with a compiler that produces non-PIE by - default, we can use target board unix/-fPIE/-pie, which set the multilib_flags - of the target board to "-fPIE -pie". - - Likewise, we can use target board unix/-fno-PIE/-no-pie with a compiler that - produces PIE by default. - - The target board unix/-fno-PIE/-no-pie has a potential problem when compiling - shared libs, because the multilib_flags will override the attempts of - gdb_compile_shlib to compile with -fPIC. This is taken care of by running the - body of gdb_compile_shlib wrapped in with_PIE_multilib_flags_filtered. - - The target board unix/-fPIE/-pie has a problem with nopie compilations. The - current approach is to do the compilation hoping for the best, and if we find - out that the resulting executable is PIE despite specifying nopie, we error - out with the standard error message "nopie failed to prevent PIE executable". - - That however does not work for hard-coded assembly nopie test-cases, which will - just noisily refuse to compile: - ... - ld: amd64-disp-step0.o: relocation R_X86_64_32S against `.text' can not be \ - used when making a PIE object; recompile with -fPIE^M - ... - - Fix this in gdb_compile by filtering out the PIE settings in the target board - multilib_flags when pie or nopie is specified. - - Tested on x86_64-linux. - -2022-10-14 Tom de Vries - - [gdb/testsuite] Factor out with_PIE_multilib_flags_filtered - Factor out new procs with_PIE_multilib_flags_filtered and - with_multilib_flags_filtered from proc gdb_compile_shlib. - - Tested on x86_64-linux. - -2022-10-14 Tom de Vries - - [gdb/testsuite] Add cond_wrap proc - Add a new proc cond_wrap, that can be used to replace the repetitive: - ... - if { $cond } { - wrap { - - } - } else { - - } - ... - with the shorter: - ... - cond_wrap $cond wrap { - - } - ... - - Tested on x86_64-linux. - -2022-10-14 Torbjörn SVENSSON - - gdb: add Torbjörn Svensson to gdb/MAINTAINERS - -2022-10-14 Jan Beulich - - RISC-V: Zicbo{m,p,z} adjustments to riscv_multi_subset_supports_ext() - The lack thereof did caused gas to issue "internal: unreachable - INSN_CLASS_*" errors when trying to assemble respective insns without - the feature(s) enabled via e.g. ".option arch, ...". Of course a proper - hint towards the missing extension then wasn't given either. - -2022-10-14 Tsukasa OI - - RISC-V: Imply 'Zicsr' from privileged extensions with CSRs - 'H', 'Smstateen', 'Sscofpmf' and 'Sstc' are four privileged extensions with - their CSR definitions and 'Smepmp' is a privileged extension with additional - CSR bits. - - Volume II: Privileged Architecture of the RISC-V ISA Manual states that the - privileged architecture requires the 'Zicsr' extension. However, current - GNU Binutils has no direct way whether the program has dependency to the - privileged architecture itself. - - As a workaround, we should add implications from privileged extensions that - either add new CSRs, extend existing CSRs or depends on using CSRs. - - This commit adds such implications for existing privileged extensions that - satisfy this condition. - - gas/ChangeLog: - - * testsuite/gas/riscv/march-imply-h.d: New test, at least for 'H'. - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_implicit_subsets): Add 'Zicsr' - implicications for privileged extensions 'H', 'Smstateen', - 'Sscofpmf', 'Sstc' and 'Smepmp'. - -2022-10-14 Tsukasa OI - - opcodes/riscv-dis.c: Remove last_map_state - Before changing the core disassembler, we take care of minor code clarity - issues and improve readability. - - This commit removes unused variable last_map_state (set by the - print_insn_riscv function but not read anywhere else). - - opcodes/ChangeLog: - - * riscv-dis.c (last_map_state): Remove. - (print_insn_riscv): Remove setting last_map_state. - -2022-10-14 Tsukasa OI - - opcodes/riscv-dis.c: Make XLEN variable static - Before changing the core disassembler, we take care of minor code clarity - issues and improve readability. - - Since xlen variable is not (and should not) used outside riscv-dis.c, - this commit makes this variable static. - - opcodes/ChangeLog: - - * riscv-dis.c (xlen): Make this variable static. - -2022-10-14 Tsukasa OI - - opcodes/riscv-dis.c: Use bool type whenever possible - Before changing the core disassembler, we take care of minor code clarity - issues and improve readability. - - This commit replaces uses of int with bool whenever possible. - - opcodes/ChangeLog: - - * riscv-dis.c (no_aliases) Change type to bool. - (set_default_riscv_dis_options): Use boolean. - (parse_riscv_dis_option_without_args): Likewise. - (riscv_disassemble_insn): Use boolean keywords. - -2022-10-14 Tsukasa OI - - opcodes/riscv-dis.c: Tidying with spacing - Before changing the core disassembler, we take care of minor code clarity - issues and improve readability. - - This commit takes care of improper spacing for code clarity. - - opcodes/ChangeLog: - - * riscv-dis.c (riscv_disassemble_insn): Tidying with spacing. - -2022-10-14 Tsukasa OI - - opcodes/riscv-dis.c: Tidying with comments/clarity - Before changing the core disassembler, we take care of minor code clarity - issues and improve readability. - - First, we need to clarify the roles of variables and code portions. - - opcodes/ChangeLog: - - * riscv-dis.c (xlen): Move before default_isa_spec. Add comment. - (default_isa_spec, default_priv_spec): Add comment. - (riscv_gpr_names, riscv_fpr_names): Likewise. - (parse_riscv_dis_option_without_args): Likewise. - (parse_riscv_dis_option, parse_riscv_dis_options): Likewise. - (maybe_print_address): Likewise. - (riscv_disassemble_insn): Fix comment about the Zfinx "extension". - Add comment about the riscv_multi_subset_supports call. - -2022-10-14 Tsukasa OI - - RISC-V: Test DWARF register number for "fp" - This commit adds "fp" (x8 or s0) to dw-regnums.{s,d}. - - gas/ChangeLog: - - * testsuite/gas/riscv/dw-regnums.s: Add "fp". - * testsuite/gas/riscv/dw-regnums.d: Likewise. - -2022-10-14 Tsukasa OI - - RISC-V: Move standard hints before all instructions - Because all standard hints must be placed before corresponding instruction - for the disassembler, they may taint basic RVI instruction section. - - This commit moves all standard hints before all basic RVI instructions - to improve maintainability. - - opcodes/ChangeLog: - - * riscv-opc.c (riscv_opcodes): Move all standard hints before all - standard instructions. - -2022-10-14 Tsukasa OI - - RISC-V: Move certain arrays to riscv-opc.c - This is a part of small tidying (declare tables in riscv-opc.c). - - include/ChangeLog: - - * opcode/riscv.h (riscv_rm, riscv_pred_succ): Move declarations to - opcodes/riscv-opc.c. New non-static definitions. - - opcodes/ChangeLog: - - * riscv-opc.c (riscv_rm, riscv_pred_succ): Move from - include/opcode/riscv.h. Add description. - -2022-10-14 Fangrui Song - - ld: Add --undefined-version - This cancels a previous --no-undefined-version. - gold has had --undefined-version for a long time. - -2022-10-14 GDB Administrator - - Automatic date update in version.in - -2022-10-13 Carl Love - - PowerPC, fix gdb.base/watchpoint.exp on Power 9 - Test gdb.base/watchpoint.exp generates 4 test errors on Power 9. The - test uses the test [target_info exists gdb,no_hardware_watchpoints] to - determine if the processor supports hardware watchpoints. The check - only examines the processor type to determine if it supports hardware - watchpoints. - - The PowerPC processors support hardware watchpoints with the - exception of Power 9. The hardware watchpoint support is disabled on - Power 9. The test skip_hw_watchpoint_tests must be used to correctly - determine if the PowerPC processor supports hardware watchpoints. - - This patch replaces the [target_info exists gdb,no_hardware_watchpoints] - with the skip_hw_watchpoint_tests_p check. With the patch, the test runs - on Power 9 with hardware watchpoint force-disabled. The test runs on - all other PowerPC processors with and without hardware watchpoints - enabled. - - The patch has been tested on Power 9 to verify the test only runs with - hardware breakpoints disabled. The patch has been tested on X86-64 with - no regression failures. The test fails on Power 10 due to an internal GDB - error due to resource management. The resource management issue will be - addressed in another patch. - -2022-10-13 Tom de Vries - - [gdb/testsuite] Fix gdb.dwarf2/macro-source-path.exp with -m32 - With test-case gdb.dwarf2/macro-source-path.exp and target board unix/-m32, I - run into: - ... - as: macro-source-path-gcc11-ld238-dw5-filename-641.o: \ - unsupported relocation type: 0x1^M - ... - - The problem is that we have 64-bit dwarf so the debug_line offset in the - .debug_macro section is an 8-byte entity, emitted using ".8byte": - ... - .section .debug_macro - .Lcu_macros4: - .2byte 5 /* version */ - .byte 3 /* flags */ - .8byte .LLlines3 /* debug_line offset */ - ... - but the linker doesn't support 8-byte relocation types on a 32-bit architecture. - - This is similar to what was fixed in commit a5ac8e7fa3b - ("[gdb/testsuite] Fix 64-bit dwarf test-cases with -m32") for for instance - .debug_abbrev. - - Fix this in the same way, by using _op_offset to emit the debug_line offset. - - Tested on x86_64-linux with native and target board unix/-m32. - -2022-10-13 Tom de Vries - - [gdb/testsuite] Fix gdb.dwarf2/entry-value-typedef.exp with -m32 - With test-case gdb.dwarf2/entry-value-typedef.exp and target board unix/-m32, - I run into: - ... - builtin_spawn -ignore SIGHUP g++ -fno-stack-protector \ - gdb/testsuite/gdb.dwarf2/entry-value-typedef-amd64.S \ - -fdiagnostics-color=never -Lbuild/libiberty -lm -m32 \ - -o outputs/gdb.dwarf2/entry-value-typedef/entry-value-typedef^M - entry-value-typedef.cpp: Assembler messages:^M - entry-value-typedef.cpp:38: Error: bad register name `%rbp'^M - ... - - The problem is that the test-cases selects an amd64 .S file based on the check: - ... - if { [istarget "x86_64-*-linux*"] } { - ... - which is also true for target board unix/-m32 on x86_64-linux. - - Fix this by adding the missing is_lp64_target check. - - Tested on x86_64-linux, using native and target board unix/-m32. - -2022-10-13 Tom de Vries - - [gdb/testsuite] Fix gdb.mi/mi-disassemble.exp with -m32 - With target board unix/-m32 and test-case gdb.mi/mi-disassemble.exp we have: - ... - (gdb) ^M - print/x *((unsigned char *) 0x8048485)^M - &"print/x *((unsigned char *) 0x8048485)\n"^M - ~"$9 = 0x83\n"^M - ^done^M - (gdb) ^M - PASS: gdb.mi/mi-disassemble.exp: get valueof "*((unsigned char *) 0x8048485)" - FAIL: gdb.mi/mi-disassemble.exp: byte at 0x8048485 matches - ... - The test-case passes with native. - - With native we see in gdb.log that variable longest_insn_bytes is: - ... - Longest instruction at 0x0000000000400549 with bytes '48 8b 05 20 01 00 00' - ... - and variable split_bytes (added debug puts) ends up as: - ... - SPLIT_BYTES: 48 8b 05 20 01 00 00 - ... - - But with unix/-m32 we have longest_insn_byte: - ... - Longest instruction at 0x08048481 with bytes '8d 4c 24 04 ' - ... - and split_bytes ends up as: - ... - SPLIT_BYTES: 8d 4c 24 04 {} {} {} {} {} {} {} {} - ... - so the trailing whitespace is translated by split to empty bytes, and the - mismatch FAILs are generated for those. - - Fix this by stripping the whitespace, which makes us end up with a different - and indeed longer insn: - ... - Longest instruction at 0x08048492 with bytes 'dd 05 98 85 04 08' - ... - - Tested on x86_64-linux, with native and target board unix/-m32. - -2022-10-13 GDB Administrator - - Automatic date update in version.in - -2022-10-12 Carl Love - - PowerPC, fix test gdb.base/watchpoint-stops-at-right-insn.exp - Test gdb.base/watchpoint-stops-at-right-insn.exp generates 4 test errors - on Power 9. The test uses the test [target_info exists gdb, - no_hardware_watchpoints] to determine if the processor supports hardware - watchpoints. The check only examines the processor type to determine if - it supports hardware watchpoints. Note, the test works fine on Power 10. - - The PowerPC processors support hardware watchpoints with the - exception of Power 9. The hardware watchpoint support is disabled on - Power 9. The test skip_hw_watchpoint_tests must be used to correctly - determine if the PowerPC processor supports hardware watchpoints. - - This patch replaces the [target_info exists gdb,no_hardware_watchpoints] - with the skip_hw_watchpoint_tests_p check. With the patch, the test is - disabled on Power 9 but runs on all other PowerPC processors. - - The patch has been tested on Power 9, Power 10 and X86-64 with no - regression failures. - -2022-10-12 Jan Beulich - - x86: drop "regmask" static variable - Replace its two uses by more direct checks, paralleling what's already - there for SIMD registers. - -2022-10-12 Tom de Vries - - [gdb/symtab] Factor out elf_symfile_read_dwarf2 - Factor out elf_symfile_read_dwarf2 from elf_symfile_read. NFC. - - Tested on x86_64-linux. - -2022-10-12 Tom de Vries - - [gdb/testsuite] Fix ctf test-cases on openSUSE Tumbleweed - When running test-case gdb.base/ctf-constvars.exp on openSUSE Tumbleweed (with - system gcc version 12, providing gcc -gctf support, enabling the ctf test-cases - in the gdb testsuite), I run into: - ... - (gdb) print vox^M - 'vox' has unknown type; cast it to its declared type^M - (gdb) FAIL: gdb.base/ctf-constvars.exp: print vox - ... - - There are two causes for this: - - the linker flags are missing --ctf-variables, so the information for variable - vox is missing (reported in PR29468), and - - the executable contains some dwarf2 due to some linked-in glibc objects, - so the ctf info is ignored (reported in PR29160). - - By using: - - -Wl,--ctf-variable, - - -Wl,--strip-debug, and - we can make the test-case and some similar test-cases pass. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29160 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29468 - -2022-10-12 Tom de Vries - - [gdb/testsuite] Silence warnings about obsolete -gstabs - When running test-case gdb.base/gdbindex-stabs.exp on openSUSE Tumbleweed (with - gcc 12) I get: - ... - gdb compile failed, gdb/testsuite/gdb.base/gdbindex-stabs.c: warning: \ - STABS debugging information is obsolete and not supported anymore - ... - - Silence the warning by passing quiet to gdb_compile. Likewise in two other - test-cases. - -2022-10-12 Tom de Vries - - [gdb/testsuite] Replace remaining -gt with -gctf - With test-cases gdb.base/cvexpr.exp and gdb.base/whatis.exp I run into: - ... - gdb compile failed, gcc: error: unrecognized debug output level 't' - ... - - This is due to using additional_flags=-gt. - - Commit ffb3f587933 ("CTF: multi-CU and archive support") replaced - additional_flags=-gt with additional_flags=-gctf in gdb.ctf/*.exp and - gdb.base/ctf-*.exp. - - Do the same in these two test-cases. - - Tested on x86_64-linux. - -2022-10-12 Tom de Vries - - [gdb/testsuite] Fix gdb.base/infoline-reloc-main-from-zero.exp with recent ld - On openSUSE Tumbleweed (with ld 2.39) and test-case - gdb.base/infoline-reloc-main-from-zero.exp, I get: - ... - gdb compile failed, ld: warning: infoline-reloc-main-from-zero has a LOAD \ - segment with RWX permissions - UNTESTED: gdb.base/infoline-reloc-main-from-zero.exp: \ - infoline-reloc-main-from-zero.exp - ... - - Fix this by compiling with -Wl,--no-warn-rwx-segments. - - Tested on x86_64-linux. - -2022-10-12 Tom de Vries - - [gdb/testsuite] Fix gdb.base/nested-subp{2,3}.exp with recent ld - On openSUSE Tumbleweed (with ld 2.39) I get for test-case - gdb.base/nested-subp2.exp: - ... - gdb compile failed, ld: warning: tmp.o: requires executable stack \ - (because the .note.GNU-stack section is executable) - ... - - Fix this by compiling with -Wl,--no-warn-execstack. - - Likewise in gdb.base/nested-subp3.exp - - Tested on x86_64-linux. - -2022-10-12 Tom de Vries - - [gdb/testsuite] Remove unnecessary perror in some test-cases - On openSUSE Tumbleweed I noticed: - ... - UNTESTED: gdb.dwarf2/fission-absolute-dwo.exp: fission-absolute-dwo.exp - ERROR: failed to compile fission-absolute-dwo - ... - - The ERROR is unnecessary, given that an UNTESTED is already emitted. - - Furthermore, it could be argued that it is incorrect because it's not a - testsuite error to not be able to compile something, and UNTESTED or - UNSUPPORTED is more appropriate. - - Remove the perror call, likewise in fission-relative-dwo.exp. - - Tested on x86_64-linux. - -2022-10-12 Nick Clifton - - Fix objcopy's error message when it cannot add a .gnu_debuglink section because the section already exists. - PR 29665 - * objcopy.c (copy_object): Use the input filename when - reporting that a .gnu_debuglink section already exists. - -2022-10-12 Tsukasa OI - - sim/ppc: Fix core_find_mapping diagnostics - Because "%p" is the pointer conversion specifier to print a pointer in an - implementation-defined manner, the result with format string containing - "0x%p" can be strange. For instance, core_map_find_mapping prints error - containing "0x0x...." (processor is not NULL) or "0x(null)" (processor is - NULL) on glibc. - - This commit replaces "0x%p" with "%p" to prevent unpredictable behavior. - -2022-10-12 Andrew Burgess - - sim/ppc: fixes for arguments to printf style functions - After the recent series of fixes to mark more functions in the - simulator with ATTRIBUTE_PRINTF, there were some build failures in the - ppc sim due, in some cases, to bugs with the arguments being passed, - and in other cases, the issues were (maybe) less serious, with - arguments being the wrong size, or type, for the printf format being - used. - - This commit fixes all of the issues that I ran into. - - In each case I selected the easiest solution to the problem, which is - usually just casting the argument to the correct type. If anyone - later on thinks the print format should change, please feel free to do - that. What we have here should keep the simulator basically working - as it does currently, which is my goal with this commit. - -2022-10-12 Tom de Vries - - [gdb/contrib] Use OBJCOPY everywhere in cc-with-tweaks.sh - I noticed that the $want_gnu_debuglink code in gdb/contrib/cc-with-tweaks.sh - uses objcopy instead of $OBJCOPY. Fix this. - - Script checked with shellcheck, no new warnings added. - - Tested on x86_64-linux. - -2022-10-12 Simon Marchi - - Re-apply "Pass PKG_CONFIG_PATH down from top-level Makefile" - Commit 228cf97dd3c8 ("Merge configure.ac from gcc project") undid the - change originally done in de83289ef32e ("Pass PKG_CONFIG_PATH down from - top-level Makefile"). Re-apply it. - - Change-Id: I91138dfca41c43b05e53e445f62e4b27882536bf - -2022-10-12 Simon Marchi - - gdb: rename target_read_auxv(target_ops *) to target_read_auxv_raw - Having two overloads of target_read_auxv that don't have the same goals - is confusing. Rename the one that reads from an explicit target_ops to - target_read_auxv_raw. Also, it occured to me that the non-raw version - could use the raw version, that reduces duplication a bit. - - Change-Id: I28e5f7cecbfcacd0174d4686efb3e4a23b4ad491 - -2022-10-12 GDB Administrator - - Automatic date update in version.in - -2022-10-12 Alan Modra - - Re: Merge configure.ac from gcc project - Also copy over config.acx.m4, and regenerate. - -2022-10-11 Simon Marchi - - gdb: fix auxv caching - There's a flaw in the interaction of the auxv caching and the fact that - target_auxv_search allows reading auxv from an arbitrary target_ops - (passed in as a parameter). This has consequences as explained in this - thread: - - https://inbox.sourceware.org/gdb-patches/20220719144542.1478037-1-luis.machado@arm.com/ - - In summary, when loading an AArch64 core file with MTE support by - passing the executable and core file names directly to GDB, we see the - MTE info: - - $ ./gdb -nx --data-directory=data-directory -q aarch64-mte-gcore aarch64-mte-gcore.core - ... - Program terminated with signal SIGSEGV, Segmentation fault - Memory tag violation while accessing address 0x0000ffff8ef5e000 - Allocation tag 0x1 - Logical tag 0x0. - #0 0x0000aaaade3d0b4c in ?? () - (gdb) - - But if we do it as two separate commands (file and core) we don't: - - $ ./gdb -nx --data-directory=data-directory -q -ex "file aarch64-mte-gcore" -ex "core aarch64-mte-gcore.core" - ... - Program terminated with signal SIGSEGV, Segmentation fault. - #0 0x0000aaaade3d0b4c in ?? () - (gdb) - - The problem with the latter is that auxv data gets improperly cached - between the two commands. When executing the file command, auxv gets - first queried here, when loading the executable: - - #0 target_auxv_search (ops=0x55555b842400 , match=0x9, valp=0x7fffffffc5d0) at /home/simark/src/binutils-gdb/gdb/auxv.c:383 - #1 0x0000555557e576f2 in svr4_exec_displacement (displacementp=0x7fffffffc8c0) at /home/simark/src/binutils-gdb/gdb/solib-svr4.c:2482 - #2 0x0000555557e594d1 in svr4_relocate_main_executable () at /home/simark/src/binutils-gdb/gdb/solib-svr4.c:2878 - #3 0x0000555557e5989e in svr4_solib_create_inferior_hook (from_tty=1) at /home/simark/src/binutils-gdb/gdb/solib-svr4.c:2933 - #4 0x0000555557e6e49f in solib_create_inferior_hook (from_tty=1) at /home/simark/src/binutils-gdb/gdb/solib.c:1253 - #5 0x0000555557f33e29 in symbol_file_command (args=0x7fffffffe01c "aarch64-mte-gcore", from_tty=1) at /home/simark/src/binutils-gdb/gdb/symfile.c:1655 - #6 0x00005555573319c3 in file_command (arg=0x7fffffffe01c "aarch64-mte-gcore", from_tty=1) at /home/simark/src/binutils-gdb/gdb/exec.c:555 - #7 0x0000555556e47185 in do_simple_func (args=0x7fffffffe01c "aarch64-mte-gcore", from_tty=1, c=0x612000047740) at /home/simark/src/binutils-gdb/gdb/cli/cli-decode.c:95 - #8 0x0000555556e551c9 in cmd_func (cmd=0x612000047740, args=0x7fffffffe01c "aarch64-mte-gcore", from_tty=1) at /home/simark/src/binutils-gdb/gdb/cli/cli-decode.c:2543 - #9 0x00005555580e63fd in execute_command (p=0x7fffffffe02c "e", from_tty=1) at /home/simark/src/binutils-gdb/gdb/top.c:692 - #10 0x0000555557771913 in catch_command_errors (command=0x5555580e55ad , arg=0x7fffffffe017 "file aarch64-mte-gcore", from_tty=1, do_bp_actions=true) at /home/simark/src/binutils-gdb/gdb/main.c:513 - #11 0x0000555557771fba in execute_cmdargs (cmdarg_vec=0x7fffffffd570, file_type=CMDARG_FILE, cmd_type=CMDARG_COMMAND, ret=0x7fffffffd230) at /home/simark/src/binutils-gdb/gdb/main.c:608 - #12 0x00005555577755ac in captured_main_1 (context=0x7fffffffda10) at /home/simark/src/binutils-gdb/gdb/main.c:1299 - #13 0x0000555557775c2d in captured_main (data=0x7fffffffda10) at /home/simark/src/binutils-gdb/gdb/main.c:1320 - #14 0x0000555557775cc2 in gdb_main (args=0x7fffffffda10) at /home/simark/src/binutils-gdb/gdb/main.c:1345 - #15 0x00005555568bdcbe in main (argc=10, argv=0x7fffffffdba8) at /home/simark/src/binutils-gdb/gdb/gdb.c:32 - - Here, target_auxv_search is called on the inferior's target stack. The - target stack only contains the exec target, so the query returns empty - auxv data. This gets cached for that inferior in `auxv_inferior_data`. - - In its constructor (before it is pushed to the inferior's target stack), - the core_target needs to identify the right target description from the - core, and for that asks the gdbarch to read a target description from - the core file. Because some implementations of - gdbarch_core_read_description (such as AArch64's) need to read auxv data - from the core in order to determine the right target description, the - core_target passes a pointer to itself, allowing implementations to call - target_auxv_search it. However, because we have previously cached - (empty) auxv data for that inferior, target_auxv_search searched that - cached (empty) auxv data, not auxv data read from the core. Remember - that this data was obtained by reading auxv on the inferior's target - stack, which only contained an exec target. - - The problem I see is that while target_auxv_search offers the - flexibility of reading from an arbitrary (passed as an argument) target, - the caching doesn't do the distinction of which target is being queried, - and where the cached data came from. So, you could read auxv from a - target A, it gets cached, then you try to read auxv from a target B, and - it returns the cached data from target A. That sounds wrong. In our - case, we expect to read different auxv data from the core target than - what we have read from the target stack earlier, so it doesn't make - sense to hit the cache in this case. - - To fix this, I propose splitting the code paths that read auxv data from - an inferior's target stack and those that read from a passed-in target. - The code path that reads from the target stack will keep caching, - whereas the one that reads from a passed-in target won't. And since, - searching in auxv data is independent from where this data came from, - split the "read" part from the "search" part. - - From what I understand, auxv caching was introduced mostly to reduce - latency on remote connections, when doing many queries. With the change - I propose, only the queries done while constructing the core_target - end up not using cached auxv data. This is fine, because there are just - a handful of queries max, done at this point, and reading core files is - local. - - The changes to auxv functions are: - - - Introduce 2 target_read_auxv functions. One reads from an explicit - target_ops and doesn't do caching (to be used in - gdbarch_core_read_description context). The other takes no argument, - reads from the current inferior's target stack (it looks just like a - standard target function wrapper) and does caching. - - The first target_read_auxv actually replaces get_auxv_inferior_data, - since it became a trivial wrapper around it. - - - Change the existing target_auxv_search to not read auxv data from the - target, but to accept it as a parameter (a gdb::byte_vector). This - function doesn't care where the data came from, it just searches in - it. It still needs to take a target_ops and gdbarch to know how to - parse auxv entries. - - - Add a convenience target_auxv_search overload that reads auxv - data from the inferior's target stack and searches in it. This - overload is useful to replace the exist target_auxv_search calls that - passed the `current_inferior ()->top_target ()` target and keep the - call sites short. - - - Modify parse_auxv to accept a target_ops and gdbarch to use for - parsing entries. Not strictly related to the rest of this change, - but it seems like a good change in the context. - - Changes in architecture-specific files (tdep and nat): - - - In linux-tdep, linux_get_hwcap and linux_get_hwcap2 get split in two, - similar to target_auxv_search. One version receives auxv data, - target and arch as parameters. The other gets everything from the - current inferior. The latter is for convenience, to avoid making - call sites too ugly. - - - Call sites of linux_get_hwcap and linux_get_hwcap2 are adjusted to - use either of the new versions. The call sites in - gdbarch_core_read_description context explicitly read auxv data from - the passed-in target and call the linux_get_hwcap{,2} function with - parameters. Other call sites use the versions without parameters. - - - Same idea for arm_fbsd_read_description_auxv. - - - Call sites of target_auxv_search that passed - `current_inferior ()->top_target ()` are changed to use the - target_auxv_search overload that works in the current inferior. - - Reviewed-By: John Baldwin - Reviewed-By: Luis Machado - Change-Id: Ib775a220cf1e76443fb7da2fdff8fc631128fe66 - -2022-10-11 Tom de Vries - - [gdb/testsuite] Fix gdb.debuginfod/fetch_src_and_symbols.exp with native-gdbserver - When running test-case gdb.debuginfod/fetch_src_and_symbols.exp with target - board native-gdbserver, I get: - ... - Running gdb.debuginfod/fetch_src_and_symbols.exp ... - ERROR: tcl error sourcing gdb.debuginfod/fetch_src_and_symbols.exp. - ERROR: gdbserver does not support start without extended-remote - while executing - "error "gdbserver does not support $command without extended-remote"" - (procedure "gdb_test_multiple" line 51) - invoked from within - "gdb_test_multiple $command $message {*}$opts $user_code" - (procedure "gdb_test" line 56) - invoked from within - "gdb_test "start" "Temporary breakpoint.*"" - ... - - Fix this by replacing gdb_test "start" with runto_main. - - Tested on x86_64-linux. - -2022-10-11 Nick Clifton - - Re: Error: attempt to get value of unresolved symbol `L0' - * symbols.c (S_GET_VALUE): If the unresolved symbol is the fake - label provide a more helpful error message to the user. - (S_GET_VALUE_WHERE): Like S_GET_VALUE, but includes a file/line - number for error reporting purposes. - * symbols.h (S_GET_VALUE_WHERE): Prototype. - * write.c (fixup_segment): Use S_GET_VALUE_WHERE. - -2022-10-11 Tsukasa OI - - sim: Initialize pbb_br_* by default - On the files generated by sim/common/genmloop.sh, variables pbb_br_type and - pbb_br_npc are declared uninitialized and passed to other functions in some - cases. Despite that those are harmless, they will generate GCC warnings - ("-Wmaybe-uninitialized"). - - This commit ensures that pbb_br_type and pbb_br_npc variables are - initialized to a harmless value. - -2022-10-11 Tsukasa OI - - sim: Check known getopt definition existence - Clang generates a warning if there is a function declaration/definition - with zero arguments. Such declarations/definitions without a prototype (an - argument list) are deprecated forms of indefinite arguments - ("-Wdeprecated-non-prototype"). On the default configuration, it causes a - build failure (unless "--disable-werror" is specified). - - include/getopt.h defines some getopt function definitions but one of them - has a form "extern int getopt ();". If this form is selected in - include/getopt.h, Clang generates a warning and the build fails by default. - - In really old environments, this getopt definition with no arguments is - necessary (because the definition may change between environments). - However, this definition is now a cause of problems on modern environments. - - A good news is, this definition is not always selected (e.g. if used by - binutils/*.c). This is because configuration scripts of binutils, gas, - gprof and ld tries to find known definition of getopt function is used and - defines HAVE_DECL_GETOPT macro. If this macro is defined when getopt.h is - included, a good form of getopt is used and Clang won't generate warnings. - - This commit adds a modified portion of ld/configure.ac to find the known - getopt definition. If we could find one (and we *will* in most modern - environments), we don't need to rely on the deprecated definition. - -2022-10-11 Tsukasa OI - Andrew Burgess - - sim: Suppress non-literal printf warning - Clang generates a warning if the format string of a printf-like function is - not a literal ("-Wformat-nonliteral"). On the default configuration, it - causes a build failure (unless "--disable-werror" is specified). - - To avoid this warning, this commit now uses vsnprintf to format error - message and pass the message to sim_engine_abort function with another - printf-style formatting. - - This patch is mostly authored by Andrew Burgess and slightly modified by - Tsukasa OI. - -2022-10-11 Tsukasa OI - - sim: Make WITH_{TRACE,PROFILE}-based macros bool - Clang generates a warning if there is an ambiguous expression (possibly a - bitwise operation (& or |), but a logical operator (&& or ||) is used; - "-Wconstant-logical-operand"). On the default configuration, it causes a - build failure (unless "--disable-werror" is specified). - - This is caused by predicate macros that use the form (base_variable & flag). - Clang considers them as regular integer values (not boolean) and - generates that warning. - - This commit makes Clang think those predicate macros to be boolean. - -2022-10-11 Tsukasa OI - - sim: Remove self-assignments - Clang generates a warning if there is a redundant self-assignment - ("-Wself-assign"). On the default configuration, it causes a build failure - (unless "--disable-werror" is specified). - - This commit removes redundant self-assignments from two files. - -2022-10-11 Tsukasa OI - - sim/rl78: Add ATTRIBUTE_PRINTF - Clang generates a warning if the format string of a printf-like function is - not a literal ("-Wformat-nonliteral"). On the default configuration, it - causes a build failure (unless "--disable-werror" is specified). - - To avoid warnings on the printf-like wrapper, it requires proper - __attribute__((format)) and we have ATTRIBUTE_PRINTF macro for this reason. - - This commit adds ATTRIBUTE_PRINTF to the printf-like functions. - -2022-10-11 Tsukasa OI - - sim/ppc: Add ATTRIBUTE_PRINTF - Clang generates a warning if the format string of a printf-like function is - not a literal ("-Wformat-nonliteral"). On the default configuration, it - causes a build failure (unless "--disable-werror" is specified). - - To avoid warnings on the printf-like wrapper, it requires proper - __attribute__((format)) and we have ATTRIBUTE_PRINTF macro for this reason. - - This commit adds ATTRIBUTE_PRINTF to the printf-like functions. - - For the error function defined in sim_calls.c, the ATTRIBUTE_NORETURN - has been moved to the function declaration. - -2022-10-11 Tsukasa OI - - sim/m68hc11: Add ATTRIBUTE_PRINTF - Clang generates a warning if the format string of a printf-like function is - not a literal ("-Wformat-nonliteral"). On the default configuration, it - causes a build failure (unless "--disable-werror" is specified). - - To avoid warnings on the printf-like wrapper, it requires proper - __attribute__((format)) and we have ATTRIBUTE_PRINTF macro for this reason. - - This commit adds ATTRIBUTE_PRINTF to a printf-like function. - -2022-10-11 Tsukasa OI - - sim/m32c: Add ATTRIBUTE_PRINTF - Clang generates a warning if the format string of a printf-like function is - not a literal ("-Wformat-nonliteral"). On the default configuration, it - causes a build failure (unless "--disable-werror" is specified). - - To avoid warnings on the printf-like wrapper, it requires proper - __attribute__((format)) and we have ATTRIBUTE_PRINTF macro for this reason. - - This commit adds ATTRIBUTE_PRINTF to the printf-like functions. - -2022-10-11 Tsukasa OI - - sim/erc32: Add ATTRIBUTE_PRINTF - Clang generates a warning if the format string of a printf-like function is - not a literal ("-Wformat-nonliteral"). On the default configuration, it - causes a build failure (unless "--disable-werror" is specified). - - To avoid warnings on the printf-like wrapper, it requires proper - __attribute__((format)) and we have ATTRIBUTE_PRINTF macro for this reason. - - This commit adds ATTRIBUTE_PRINTF to the printf-like functions. - -2022-10-11 Tsukasa OI - - sim/cris: Add ATTRIBUTE_PRINTF - Clang generates a warning if the format string of a printf-like function is - not a literal ("-Wformat-nonliteral"). On the default configuration, it - causes a build failure (unless "--disable-werror" is specified). - - To avoid warnings on the printf-like wrapper, it requires proper - __attribute__((format)) and we have ATTRIBUTE_PRINTF macro for this reason. - - This commit adds ATTRIBUTE_PRINTF to a printf-like function. - -2022-10-11 Tsukasa OI - - sim/common: Add ATTRIBUTE_PRINTF - Clang generates a warning if the format string of a printf-like function is - not a literal ("-Wformat-nonliteral"). On the default configuration, it - causes a build failure (unless "--disable-werror" is specified). - - To avoid warnings on the printf-like wrapper, it requires proper - __attribute__((format)) and we have ATTRIBUTE_PRINTF macro for this reason. - - This commit adds ATTRIBUTE_PRINTF to a printf-like function. - -2022-10-11 Martin Liska - - fix compressed_debug_section_names definition for "zlib" - bfd/ChangeLog: - - * libbfd.c: Set COMPRESS_DEBUG_GABI_ZLIB for "zlib" value. - -2022-10-11 Martin Liska - - add --enable-default-compressed-debug-sections-algorithm configure option - ChangeLog: - - * configure.ac: Add --enable-default-compressed-debug-sections-algorithm. - * configure: Regenerate. - - gas/ChangeLog: - - * NEWS: Document the new option. - * as.c (flag_compress_debug): Set default algorithm based - on the configure option. - * configure.ac: Add --enable-default-compressed-debug-sections-algorithm. - * configure: Regenerate. - * config.in: Likewise. - - ld/ChangeLog: - - * NEWS: Document the new option. - * configure.ac: Add --enable-default-compressed-debug-sections-algorithm. - * configure: Regenerate. - * config.in: Likewise. - * ldmain.c: Set default algorithm based - on the configure option. - -2022-10-11 Martin Liska - - refactor usage of compressed_debug_section_type - bfd/ChangeLog: - - * bfd-in.h (bfd_hash_set_default_size): Add COMPRESS_UNKNOWN - enum value. - (struct compressed_type_tuple): New. - * bfd-in2.h (bfd_hash_set_default_size): Regenerate. - (struct compressed_type_tuple): Likewise. - * libbfd.c (ARRAY_SIZE): New macro. - (bfd_get_compression_algorithm): New function. - (bfd_get_compression_algorithm_name): Likewise. - - gas/ChangeLog: - - * as.c: Do not special-case, use the new functions. - - ld/ChangeLog: - - * emultempl/elf.em: Do not special-case, use the new functions. - * lexsup.c (elf_static_list_options): Likewise. - -2022-10-11 Tsukasa OI - - sim/riscv: fix multiply instructions on simulator - After this commit: - - commit 0938b032daa52129b4215d8e0eedb6c9804f5280 - Date: Wed Feb 2 10:06:15 2022 +0900 - - RISC-V: Add 'Zmmul' extension in assembler. - - some instructions in the RISC-V simulator stopped working as a new - instruction class 'INSN_CLASS_ZMMUL' was added, and some existing - instructions were moved into this class. - - The simulator doesn't currently handle this instruction class, and so - the instructions will now cause an illegal instruction trap. - - This commit adds support for INSN_CLASS_ZMMUL, and adds a test that - ensures the affected instructions can be executed by the simulator. - - Reviewed-by: Palmer Dabbelt - Reviewed-by: Andrew Burgess - -2022-10-11 Nick Clifton - - Error: attempt to get value of unresolved symbol `L0' - * symbols.c (S_GET_VALUE): If the unresolved symbol is the fake - label provide a more helpful error message to the user. - -2022-10-11 Tsukasa OI - - sim/moxie: add custom directory stamp rule - Because sim/moxie/moxie-gdb.dtb is neither a program nor a library, automake - does not generate dirstamp file ($builddir/sim/moxie/.dirstamp) for it. - - When maintainer mode is enabled, it tries to rebuild sim/moxie/moxie-gdb.dtb - but fails because there's no rules for automake-generated dirstamp file - which moxie-gdb.dtb depends. - - This commit adds its own rule for the directory stamp (modified copy of the - automake output) and adds the directory stamp file to DISTCLEANFILES to - mimic automake-generated behavior (although "make distclean" does not work - when maintainer mode is enabled). - -2022-10-11 Bruno Larsen - - gdb/testsuite: Fix formatting of python script - The python black formatter was complaining about formatting on the - script gdb.python/pretty-print-call-by-hand.py. This commit changed - the offending lines to make the formatter happy. - -2022-10-11 Tom de Vries - - [gdb/testsuite] Fix prompt parsing in capture_command_output - I noticed in capture_command_output that the output of a single command is - matched using two gdb_test_multiples: - - the first one matching the echoed command and skipping an optional prefix, - - the second one matching the output and the prompt. - - This is error-prone, because the first gdb_test_multiple has implicit - clauses which may consume the prompt. - - The problem is easy to spot with an example. First consider: - ... - set output [capture_command_output "print 1" "\\\$1 = "] - gdb_assert { [string equal $output "1"] } - ... - for which we get: - ... - PASS: [string equal $output "1"] - ... - - If we change the prefix string to a no-match, say "1 = ", and update the - output string match accordingly, we get instead: - ... - FAIL: capture_command_output for print 1 - FAIL: [string equal $output "\$1 = 1"] - ... - - The first FAIL is produced by the first gdb_test_multiple, consuming the prompt. - - The second gdb_test_multiple then silently times out waiting for another prompt, - after which the second FAIL is produced. Note that the timeout is silent - because the gdb_test_multiple is called with an empty message argument. - - The second FAIL is because capture_command_output returns "", given that all - the command output was consumed by the first gdb_test_multiple. - - Fix this by rewriting capture_command_output to use only a single - gdb_test_multiple. - - Tested on x86_64-linux. - -2022-10-11 Vladimir Mezentsev - - gprofng: no need to build version.texi - gprofng/ChangeLog - 2022-10-10 Vladimir Mezentsev - - PR gprofng/29465 - PR gprofng/29667 - * doc/Makefile.am: No need to build version.texi. - * doc/Makefile.in: Rebuild. - -2022-10-11 Vladimir Mezentsev - - gprofng: use the --libdir path to find libraries - gprofng/ChangeLog - 2022-10-10 Vladimir Mezentsev - - PR gprofng/29663 - * src/Makefile.am: Add -DLIBDIR to CPPFLAGS. - * src/Makefile.in: Rebuild. - * src/envsets.cc (putenv_libcollector_ld_misc): Use LIBDIR to find - the gprofng libraries. - -2022-10-11 Vladimir Mezentsev - - gprofng: run tests without installation - gprofng/ChangeLog - 2022-10-10 Vladimir Mezentsev - - PR gprofng/29107 - * testsuite/config/default.exp: Set up environment to run gprofng tests - without installation. - * testsuite/lib/Makefile.skel: Likewise. - * testsuite/lib/display-lib.exp: Likewise. - -2022-10-11 Simon Marchi - - gdb/testsuite: fix race in gdb.base/async-shell.exp - I see some random failures in this test: - - FAIL: gdb.base/async-shell.exp: run & (timeout) - - It can be reliably reproduced on a recent enough GNU/Linux with this - change: - - diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp - index 44cc28b30051..2a3c8253ba5a 100644 - --- a/gdb/testsuite/lib/gdb.exp - +++ b/gdb/testsuite/lib/gdb.exp - @@ -1301,6 +1301,7 @@ proc gdb_test_multiple { command message args } { - } - set gdb_test_name "$message" - - + sleep 2 - set result 0 - set code [catch {gdb_expect $code} string] - - "recent enough" means a system where libpthread.so was merged with - libc.so, so at least glibc 2.34. - - The problem is that the `run &` command prints some things after the - prompt: - - (gdb) [Thread debugging using libthread_db enabled] - Using host libthread_db library "/usr/lib/../lib/libthread_db.so.1". - - If expect is quick enough, it will consume only up to the prompt. But - if it is slow enough, it will consume those messages at the same time as - the prompt, in which case the gdb_test used for "run &" won't match. By - default, the prompt used by gdb_test uses a `$` to anchor the match at - the end of the buffer. If there's anything following the prompt, it - won't match. - - The diff above adds a delay between sending the command and consuming - the output, giving GDB more time to output the messages, giving a good - chance that expect consumes them at the same time as the prompt. - - This is normally handled by using gdb_test_multiple and specifying a - pattern that ends with "$gdb_prompt", but not a trailing $. I think - this is common enough that it deserves its own gdb_test option. - Therefore, add the -no-anchor-prompt option to gdb_test, and - gdb_test_no_output for completeness. Use it in - gdb.base/async-shell.exp. - - Change-Id: I9051d8800d1c10a2e95db1a575991f7723492f1b - Approved-By: Tom de Vries - -2022-10-11 GDB Administrator - - Automatic date update in version.in - -2022-10-10 Tom Tromey - - Fix a latent bug in print_wchar - print_wchar keeps track of when escape sequences are emitted, to force - an escape sequence if needed by a subsequent character. For example - for the string concatenation "\0" "1", gdb will print "\000\061" -- - because printing "\0001" might be confusing. - - However, this code has two errors. First, this logic is not needed - for octal escapes, because there is a length limit of 3 for octal - escapes, and gdb always prints these with "%.3o". Second, though, - this *is* needed for hex escapes, because those do not have a length - limit. - - This patch fixes these problems and adds the appropriate tests. - -2022-10-10 Tom Tromey - - Don't use wchar_printable in print_wchar - print_wchar uses wchar_printable, but this isn't needed -- all the - relevant cases are already handled by the 'switch'. This changes the - code to use gdb_iswprint, and removes a somewhat confusing comment - related to this code. - - Remove c_printstr - This renames c_printstr, removing a layer of indirection. - - Remove c_emit_char - This renames c_emit_char, removing a layer of indirection. - - Boolify need_escape in generic_emit_char - This changes 'need_escape' in generic_emit_char to be of type bool, - rather than int. - -2022-10-10 Tom Tromey - Andrew Burgess - - Fix latent quote char bug in generic_printstr - generic_printstr prints an empty string like: - - fputs_filtered ("\"\"", stream); - - However, this seems wrong to me if the quote character is something - other than double quote. This patch fixes this latent bug. Thanks to - Andrew for the test case. - -2022-10-10 Tom Tromey - - Fix the guile build - The frame_info_ptr patches broke the build with Guile. This patch - fixes the problem. In mos cases I chose to preserve the use of - frame_info_ptr, at least where I could be sure that the object - lifetime did not interact with Guile's longjmp-based exception scheme. - - Tested on x86-64 Fedora 34. - -2022-10-10 Tom de Vries - - [gdb/testsuite] Detect trailing ^C/^D in command - Detect a trailing ^C/^D in the command argument of gdb_test_multiple, and - error out. - - Tested on x86_64-linux. - -2022-10-10 Tom de Vries - - [gdb/testsuite] Fix error message for cmd with trailing newline - I noticed that the error message in gdb_test_multiple about trailing newline - in a command does not mention the offending command, nor the word command: - ... - if [string match "*\[\r\n\]" $command] { - error "Invalid trailing newline in \"$message\" test" - } - ... - - Fix this by using instead: - ... - error "Invalid trailing newline in \"$command\" command" - ... - - Also add a test-case to trigger this: gdb.testsuite/gdb-test.exp. - - Tested on x86_64-linux. - -2022-10-10 Andrew Burgess - - gdb: include the base address in in-memory bfd filenames - The struct target_buffer (in gdb_bfd.c) is used to hold information - about an in-memory BFD object created by GDB. For now this mechanism - is used by GDB when loading information about JIT symfiles. - - This commit updates target_buffer (in gdb_bfd.c) to be more C++ like, - and, at the same time, adds the base address of the symfile into the - BFD filename. - - Right now, every in-memory BFD is given the filename "". - This filename is visible in things like 'maint info symtabs' and - 'maint info line-table'. If there are multiple in-memory BFD objects - then it can be hard to match keep track if which BFD is which. This - commit changes the name to be "" where ADDRESS is - replaced with the base address for where the in-memory symbol file was - read from. - - As an example of how this is useful, here's the output of 'maint info - jit' showing a single loaded JIT symfile: - - (gdb) maintenance info jit - jit_code_entry address symfile address symfile size - 0x00000000004056b0 0x0000000007000000 17320 - - And here's part of the output from 'maint info symtabs': - - (gdb) maintenance info symtabs - ...snip... - { objfile ((struct objfile *) 0x5258250) - { ((struct compunit_symtab *) 0x4f0afb0) - debugformat DWARF 4 - producer GNU C17 9.3.1 20200408 (Red Hat 9.3.1-2) -mtune=generic -march=x86-64 -g -fno-stack-protector -fpic - name jit-elf-solib.c - dirname /tmp/binutils-gdb/build/gdb/testsuite - blockvector ((struct blockvector *) 0x5477850) - user ((struct compunit_symtab *) (null)) - { symtab /tmp/binutils-gdb/build/gdb/testsuite/../../../src/gdb/testsuite/gdb.base/jit-elf-solib.c ((struct symtab *) 0x4f0b030) - fullname (null) - linetable ((struct linetable *) 0x5477880) - } - } - } - - I've added a new test that checks the new in-memory file names are - generated correctly, and also checks that the in-memory JIT files can - be dumped back out using 'dump binary memory'. - -2022-10-10 Andrew Burgess - - gdb: remove filename arg from gdb_bfd_open_from_target_memory - The filename argument to gdb_bfd_open_from_target_memory was never - used; this argument had a default value of nullptr, and the only call - to this function, in jit.c, relied on the default value. - - In the next commit I'm going to make some changes to the - gdb_bfd_open_from_target_memory function, and, though I could take - account of a filename parameter, it seems pointless to maintain an - unused argument. - - This commit removes the filename argument. - - There should be no user visible changes after this commit. - -2022-10-10 Andrew Burgess - - gdb: add infcall specific debugging - Add two new commands: - - set debug infcall on|off - show debug infcall - - These enable some new debugging related to when GDB makes inferior - function calls. I've added some basic debugging for what I think are - the major steps in the inferior function call process, but I'm sure we - might want to add more later. - -2022-10-10 Andrew Burgess - - gdb: extra debug output in thread.c - Add some extra 'threads' debug in a couple of places in thread.c. - I've also added an additional gdb_assert in one case. - - gdb: improve infrun_debug_show_threads output - This commit switches to use INFRUN_SCOPED_DEBUG_START_END in the - infrun_debug_show_threads function, which means the output will get an - extra level of indentation, this looks a little nicer I think. - -2022-10-10 Nick Clifton - - Add ability to create reproducible source tarballs. - * src-release.sh: Add "-r " option to create reproducible - tarballs based upon a fixed timestamp of . - * binutils/README-how-to-make-a-release: Add a line showing how to - use -r when creating a binutils release. - -2022-10-10 Bruno Larsen - - gdb/frame: Add reinflation method for frame_info_ptr - Currently, despite having a smart pointer for frame_infos, GDB may - attempt to use an invalidated frame_info_ptr, which would cause internal - errors to happen. One such example has been documented as PR - python/28856, that happened when printing frame arguments calls an - inferior function. - - To avoid failures, the smart wrapper was changed to also cache the frame - id, so the pointer can be reinflated later. For this to work, the - frame-id stuff had to be moved to their own .h file, which is included - by frame-info.h. - - Frame_id caching is done explicitly using the prepare_reinflate method. - Caching is done manually so that only the pointers that need to be saved - will be, and reinflating has to be done manually using the reinflate - method because the get method and the -> operator must not change - the internals of the class. Finally, attempting to reinflate when the - pointer is being invalidated causes the following assertion errors: - - check_ptrace_stopped_lwp_gone: assertion `lp->stopped` failed. - get_frame_pc: Assertion `frame->next != NULL` failed. - - As for performance concerns, my personal testing with `time make - chec-perf GDB_PERFTEST_MODE=run` showed an actual reduction of around - 10% of time running. - - This commit also adds a testcase that exercises the python/28856 bug with - 7 different triggers, run, continue, step, backtrace, finish, up and down. - Some of them can seem to be testing the same thing twice, but since this - test relies on stale pointers, there is always a chance that GDB got lucky - when testing, so better to test extra. - - Regression tested on x86_64, using both gcc and clang. - - Approved-by: Tom Tomey - -2022-10-10 Tom Tromey - - Change GDB to use frame_info_ptr - This changes GDB to use frame_info_ptr instead of frame_info * - The substitution was done with multiple sequential `sed` commands: - - sed 's/^struct frame_info;/class frame_info_ptr;/' - sed 's/struct frame_info \*/frame_info_ptr /g' - which left some - issues in a few files, that were manually fixed. - sed 's/\ - Approved-by: Tom Tomey - -2022-10-10 Tom Tromey - - Introduce frame_info_ptr smart pointer class - This adds frame_info_ptr, a smart pointer class. Every instance of - the class is kept on an intrusive list. When reinit_frame_cache is - called, the list is traversed and all the pointers are invalidated. - This should help catch the typical GDB bug of keeping a frame_info - pointer alive where a frame ID was needed instead. - - Co-Authored-By: Bruno Larsen - Approved-by: Tom Tomey - -2022-10-10 Tom Tromey - - Remove frame_id_eq - This replaces frame_id_eq with operator== and operator!=. I wrote - this for a version of this series that I later abandoned; but since it - simplifies the code, I left this patch in. - - Approved-by: Tom Tomey - -2022-10-10 Andrew Burgess - - gdb/testsuite: use 'end' at the end of python blocks - Within the testsuite, use the keyword 'end' to terminate blocks of - Python code being sent to GDB, rather than sending \004. I could only - find three instances of this, all in tests that I originally wrote. I - have no memory of there being any special reason why I used \004 - instead of 'end' - I assume I copied this from somewhere else that has - since changed. - - Non of the tests being changed here are specifically about whether - \004 can be used to terminate a Python block, so I think switching to - the more standard 'end' keyword is the right choice. - -2022-10-10 Simon Marchi - - gdbsupport: re-generate configure - I get this diff when re-generating configure, probably leftover from - 67d1991b785 ("egrep in binutils"). - - Change-Id: I759c88c2bad648736d33ff98089db45c9b686356 - -2022-10-10 Alan Modra - - Merge configure.ac from gcc project - To merge with gcc's copy of configure.ac we need to revert changes to - configure.ac in the following gcc commits: - dc832fb39fc0 2022-08-25 - fc259b522c0f 2022-06-25 - Then reapply configure.ac changes in binutils from these binutils - commits: - 50ad1254d503 2021-01-09 - bb368aad297f 2022-03-11 - e5f2f7d901ee 2022-07-26 - 2cac01e3ffff 2022-09-26 - Plus copy over gcc's config/ax_cxx_compile_stdcxx.m4, then regenerate - configure. - -2022-10-10 GDB Administrator - - Automatic date update in version.in - -2022-10-09 GDB Administrator - - Automatic date update in version.in - -2022-10-08 Tom Tromey - - Merge both implementations of debug_names::insert - The class debug_names has two 'insert' overloads, but only one of them - is ever called externally, and it simply forwards to the other - implementation. It seems cleaner to me to have a single method, so - this patch merges the two. - -2022-10-08 Tom de Vries - - [gdb/testsuite] Fix silent fail in gdb.server/connect-with-no-symbol-file.exp - With native and target boards native-gdbserver, remote-gdbserver-on-localhost and - remote-stdio-gdbserver I have for gdb.server/connect-with-no-symbol-file.exp: - ... - # of expected passes 8 - ... - but with native-extended-gdbserver I have instead: - ... - # of expected passes 8 - # of unexpected failures 4 - ... - - The extra FAILs are of the form: - ... - (gdb) detach^M - Detaching from pid process 28985^M - [Inferior 1 (process 28985) detached]^M - (gdb) FAIL: gdb.server/connect-with-no-symbol-file.exp: sysroot=: \ - action=permission: connection to GDBserver succeeded - ... - and are due to the fact that the actual gdb output doesn't match the regexp: - ... - gdb_test "detach" \ - ".*Detaching from program: , process.*Ending remote debugging.*" \ - "connection to GDBserver succeeded" - ... - - With native, the actual gdb output is: - ... - (gdb) detach^M - Detaching from pid process 29657^M - Ending remote debugging.^M - [Inferior 1 (process 29657) detached]^M - (gdb) Remote debugging from host ::1, port 51028^M - ... - and because the regexp doesn't match, it triggers an implicit clause for - "Ending remote debugging" in gdb_test_multiple, which has the consequence - that the FAIL is silent. - - Fix: - - the regexp by making it less strict - - the silent fail by rewriting into a gdb_test_multiple, and adding an - explicit fail clause. - - Tested on x86_64-linux, using native and aforementioned target boards. - -2022-10-08 GDB Administrator - - Automatic date update in version.in - -2022-10-07 Lancelot SIX - - gdb/testsuite: fix gdb.threads/linux-dp.exp regex - On ubuntu 22.04 with the libc6-dbg package installed, I have the - following failure: - - where - #0 print_philosopher (n=3, left=33 '!', right=33 '!') at .../gdb/testsuite/gdb.threads/linux-dp.c:105 - #1 0x000055555555576a in philosopher (data=0x55555555937c) at .../gdb/testsuite/gdb.threads/linux-dp.c:148 - #2 0x00007ffff7e11b43 in start_thread (arg=) at ./nptl/pthread_create.c:442 - #3 0x00007ffff7ea3a00 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81 - (gdb) FAIL: gdb.threads/linux-dp.exp: first thread-specific breakpoint hit - - The regex for this test accounts for different situations (with / - without debug symbol) but assumes that if debug info is present the - backtrace shows execution under pthread_create. However, for the - implementation under test, we are under start_thread. - - Update the regex to accept start_thread. - - Tested on Ubuntu-22.04 x86_64 with and without libc6-dbg debug symbols - available. - - Change-Id: I1e1536279890bca2cd07f038e026b41e46af44e0 - -2022-10-07 Tom de Vries - - [gdb/testsuite] Handle host cleanfiles - When running test-case gdb.server/abspath.exp with host board - local-remote-host-notty, I get: - ... - $ git sti - ... - deleted: gdb/testsuite/gdb.xml/trivial.xml - ... - - This happens as follows. The test-case calls skip_gdbserver_test, which calls - gdb_skip_xml_test, which does: - ... - set xml_file [gdb_remote_download host "${srcdir}/gdb.xml/trivial.xml"] - ... - - Then proc gdb_remote_download appends $xml_file (which for this particular - host board happens to be ${srcdir}/gdb.xml/trivial.xml) to cleanfiles, which - ends up being handled in gdb_finish by: - ... - eval remote_file target delete $cleanfiles - ... - - The problem is that a host file is deleted using target delete. - - Fix this by splitting cleanfiles up in cleanfiles_target and cleanfiles_host. - - Tested on x86_64-linux. - -2022-10-07 Tom de Vries - - [gdb/testsuite] Remove unnecessary warning in gdb.base/default.exp - When running test-case gdb.base/default.exp with target board - native-gdbserver, we get: - ... - WARNING: Skipping backtrace and break tests because of GDB stub. - ... - - There's no need for such a warning, so remove it. - - Tested on x86_64-linux with native and target board native-gdbserver. - -2022-10-07 Tom de Vries - - [gdb/testsuite] Fix have_mpx with remote-gdbserver-on-localhost - With target board remote-gdbserver-on-localhost and gdb.arch/i386-mpx-call.exp - I run into: - ... - FAIL: gdb.arch/i386-mpx-call.exp: upper_bnd0: continue to a bnd violation - ... - - This is due to the have_mpx test which should return 0, but instead returns 1 - because the captured output: - ... - No MPX support - No MPX support - ... - does not match the used regexp: - ... - set status [expr ($status == 0) \ - && ![regexp "^No MPX support\r\n" $output]] - ... - which does match the captured output with native: - ... - No MPX support^M - No MPX support^M - ... - - Fix this by making the \r in the regexp optional. - - Tested on x86_64-linux, with native and target board - remote-gdbserver-on-localhost. - -2022-10-07 Tom de Vries - - [gdb/testsuite] Fix DUPLICATEs with remote-gdbserver-on-localhost - Fix some DUPLICATEs that we run into with target board - remote-gdbserver-on-localhost, by using test_with_prefix. - - Tested on x86_64-linux, with native and target board - remote-gdbserver-on-localhost. - -2022-10-07 Tom de Vries - - [gdb/testsuite] Fix path in test name in gdb_load_shlib - When running test-case gdb.server/solib-list.exp with target board - remote-gdbserver-on-localhost, I run into: - ... - (gdb) set solib-search-path $outputs/gdb.server/solib-list^M - (gdb) PASS: gdb.server/solib-list.exp: non-stop 0: \ - set solib-search-path $outputs/gdb.server/solib-list - PATH: gdb.server/solib-list.exp: non-stop 0: \ - set solib-search-path $outputs/gdb.server/solib-list - ... - - This is due to this code in gdb_load_shlib: - ... - gdb_test "set solib-search-path [file dirname $file]" "" "" - ... - - Fix this by setting an explicit test name. - - Tested on x86_64-linux, with native and target boards - remote-gdbserver-on-localhost, native-gdbserver and native-extended-gdbserver. - -2022-10-07 Alan Modra - - PR29653, objcopy/strip: fuzzed small input file induces large output file - _bfd_check_format functions should not print errors or warnings if - they return NULL. A NULL return means the particular target under - test does not match, so there isn't any reason to make a complaint - about the target. In fact there isn't a good reason to warn even if - the target matches, except via the _bfd_per_xvec_warn mechanism; Some - other target might be a better match. - - This patch tidies pe_bfd_object_p with the above in mind, and - restricts the PE optional header SectionAlignment and FileAlignment - fields somewhat. I chose to warn on nonsense values rather than - refusing to match. Refusing to match would be OK too. - - PR 29653 - * peXXigen.c (_bfd_XXi_swap_aouthdr_in): Don't emit error about - invalid NumberOfRvaAndSizes here. Limit loop copying data - directory to IMAGE_NUMBEROF_DIRECTORY_ENTRIES. - * peicode.h (pe_bfd_object_p): Don't clear and test bfd_error - around bfd_coff_swap_aouthdr_in. Warn on invalid SectionAlignment, - FileAlignment and NumberOfRvaAndSizes. Don't return NULL on - invalid NumberOfRvaAndSizes. - -2022-10-07 GDB Administrator - - Automatic date update in version.in - -2022-10-06 Tom Tromey - - Fix indentation in riscv-tdep.c - This just fixes some indentation in riscv-tdep.c. - -2022-10-06 Torbjörn SVENSSON - - gdb/arm: Handle lazy FPU state preservation - Read LSPEN, ASPEN and LSPACT bits from FPCCR and use them together - with FPCAR to identify if lazy FPU state preservation is active for - the current frame. See "Lazy context save of FP state", in B1.5.7, - also ARM AN298, supported by Cortex-M4F architecture for details on - lazy FPU register stacking. The same conditions are valid for other - Cortex-M cores with FPU. - - This patch has been verified on a STM32F4-Discovery board by: - a) writing a non-zero value (lets use 0x1122334455667788 as an - example) to all the D-registers in the main function - b) configured the SysTick to fire - c) in the SysTick_Handler, write some other value (lets use - 0x0022446688aaccee as an example) to one of the D-registers (D0 as - an example) and then do "SVC #0" - d) in the SVC_Handler, write some other value (lets use - 0x0099aabbccddeeff) to one of the D-registers (D0 as an example) - - In GDB, suspend the execution in the SVC_Handler function and compare - the value of the D-registers for the SVC_handler frame and the - SysTick_Handler frame. With the patch, the value of the modified - D-register (D0) should be the new value (0x009..eff) on the - SVC_Handler frame, and the intermediate value (0x002..cee) for the - SysTick_Handler frame. Now compare the D-register value for the - SysTick_Handler frame and the main frame. The main frame should - have the initial value (0x112..788). - -2022-10-06 Tom de Vries - - [gdb/symtab] Factor out have_complaint - After committing 8ba677d3560 ("[gdb/symtab] Don't complain about function - decls") I noticed that quite a bit of code in read_func_scope is used to decide - whether to issue the "cannot get low and high bounds for subprogram DIE at - $hex" complaint, which executes unnecessarily if we have the default - "set complaints 0". - - Fix this by (NFC): - - factoring out new static function have_complaint from macro complaint, and - - using it to wrap the relevant code in read_func_scope. - - Tested on x86_64-linux. - -2022-10-06 Andrew Burgess - - gdb: add missing nullptr checks in bpstat_check_breakpoint_conditions - Add a couple of missing nullptr checks in the function - bpstat_check_breakpoint_conditions. - - No user visible change after this commit. - -2022-10-06 Andrew Burgess - - gdb: more infrun debug from breakpoint.c - This commit adds additional infrun debug from the breakpoint.c file. - The new debug output all relates to breakpoint condition evaluation. - - There is already some infrun debug emitted from the breakpoint.c file, - so hopefully, adding more will not be contentious. I think the - functions being instrumented make sense as part of the infrun process, - the inferior stops, evaluates the condition, and then either stops or - continues. This new debug gives more insight into that process. - - I had to make the bp_location* argument to find_loc_num_by_location - const, and add a declaration for find_loc_num_by_location. - - There should be no user visible changes unless they turn on debug - output. - -2022-10-06 Andrew Burgess - - gdb: add some additional debug in mark_async_event_handler - Extend the existing debug printf call to include the previous state of - the async_event_handler object. - -2022-10-06 Tsukasa OI - - RISC-V: Print XTheadMemPair literal as "immediate" - The operand type "Xl(...)" denotes that (...) is a literal. Specifically, - they are intended to be a constant immediate value. - - This commit prints "Xl(...)" operand with dis_style_immediate style, - not dis_style_text. - - opcodes/ChangeLog: - - * riscv-dis.c (print_insn_args): Use dis_style_immediate on - the constant literal of the "Xl..." operand. - -2022-10-06 Tsukasa OI - - RISC-V: Fix T-Head immediate types on printing - This commit fixes two minor typing-related issues for - T-Head immediate operands. - - 1. A signed type must be specified when printing with %i. - 2. unsigned/signed int is not portable enough for max 32-bit immediates. - Instead, we should use unsigned/signed long. - The format string is changed accordingly. - - opcodes/ChangeLog: - - * riscv-dis.c (print_insn_args): Fix T-Head immediate types on - printing. - -2022-10-06 Tsukasa OI - - RISC-V: Print comma and tabs as the "text" style - On the RISC-V disassembler, some separators have non-text style when - printed with another word with another style. - - This commit splits those, making sure that those comma and tabs are printed - with the "text" style. - - opcodes/ChangeLog: - - * riscv-dis.c (print_insn_args): Split and print the comma as - text. (riscv_disassemble_insn): Split and print tabs as text. - (riscv_disassemble_data): Likewise. - -2022-10-06 Tsukasa OI - - RISC-V: Optimize riscv_disassemble_data printf - This commit makes types of printf arguments on riscv_disassemble_data - as small as possible (as long as we can preserve the portability) to reduce - the cost of printf (especially on 32-bit host). - - opcodes/ChangeLog: - - * riscv-dis.c (riscv_disassemble_data): Use smallest possible type - to printing data. - -2022-10-06 Tsukasa OI - - RISC-V: Fix printf argument types corresponding %x - "%x" format specifier requires unsigned type, not int. This commit - fixes this issue on the RISC-V disassembler. - - opcodes/ChangeLog: - - * riscv-dis.c (print_insn_args): Fix printf argument types where - the format specifier is "%x". - -2022-10-06 Tsukasa OI - - RISC-V: Fix immediates to have "immediate" style - This commit fixes certain print calls on immediate operands to have - dis_style_immediate. - - opcodes/ChangeLog: - - * riscv-dis.c (print_insn_args): Fix immediates to have - "immediate" style. (riscv_disassemble_data): Likewise. - -2022-10-06 GDB Administrator - - Automatic date update in version.in - -2022-10-06 Alan Modra - - Re: bfd BLD-POTFILES.in dependencies - Removing $BLD_POTFILES from BFD-POTFILES.in was correct, but left a - hole in dependencies. - make[4]: Entering directory '/home/alan/build/gas/all/bfd/po' - make[4]: *** No rule to make target '../elf32-aarch64.c', needed by '/home/alan/src/binutils-gdb/bfd/po/bfd.pot'. Stop. - - * Makefile.am (BUILT_SOURCES): Add BUILD_CFILES. - * Makefile.in: Regenerate. - -2022-10-05 Jan Beulich - - x86/gas: support quoted address scale factor in AT&T syntax - An earlier attempt (e68c3d59acd0 ["x86: better respect quotes in - parse_operands()"]) needed undoing (cc0f96357e0b ["x86: permit - parenthesized expressions again as addressing scale factor"]) as far its - effect here went. As indicated back then, the issue is the backwards - scanning of the operand string to find the matching opening parenthesis. - Switch to forward scanning, finding the last outermost unquoted opening - parenthesis (which is the one matching the trailing closing one). - - Arm64: support CLEARBHB alias - While the Arm v8 ARM (rev I-a) still doesn't mention this alias, it is - (typically via a macro) already in use in kernels and alike. - -2022-10-05 Alan Modra - - PR29647, objdump -S looping - Fuzzed input with this in .debug_line - [0x0000003b] Special opcode 115: advance Address by 8 to 0x401180 and Line by -2 to -1 - - PR 29647 - * objdump.c (print_line): Don't decrement line number here.. - (dump_lines): ..do so here instead, ensuring loop terminates. - -2022-10-05 Alan Modra - - Re: stab nearest_line bfd_malloc_and_get_section - It didn't take long for the fuzzers to avoid size checks in - bfd_malloc_and_get_section. Plug this hole. - - * syms.c (_bfd_stab_section_find_nearest_line): Ignore fuzzed - sections with no contents. - -2022-10-05 Vladimir Mezentsev - - gprofng: fix build with --enable-pgo-build=lto - gprofng/ChangeLog - 2022-10-04 Vladimir Mezentsev - - PR gprofng/29579 - * libcollector/dispatcher.c: Fix the symbol version in SYMVER_ATTRIBUTE. - * libcollector/iotrace.c: Likewise. - * libcollector/linetrace.c: Likewise. - * libcollector/mmaptrace.c: Likewise. - * libcollector/synctrace.c: Likewise. - -2022-10-05 GDB Administrator - - Automatic date update in version.in - -2022-10-04 Tom Tromey - - Remove decode_location_spec_default - This removes decode_location_spec_default, inlining it into its sole - caller. - - Regression tested on x86-64 Fedora 34. - -2022-10-04 Palmer Dabbelt - - gas: NEWS: Mention the T-Head extensions that were recently added - -2022-10-04 Tom de Vries - - [gdb/symtab] Don't complain about function decls - [ Requires "[gdb/symtab] Don't complain about inlined functions" as - submitted here ( - https://sourceware.org/pipermail/gdb-patches/2022-September/191762.html ). ] - - With the test-case included in this patch, we get: - ... - (gdb) ptype main^M - During symbol reading: cannot get low and high bounds for subprogram DIE \ - at 0xc1^M - type = int (void)^M - (gdb) FAIL: gdb.dwarf2/anon-ns-fn.exp: ptype main without complaints - ... - - The DIE causing the complaint is a function declaration: - ... - <2>: Abbrev Number: 3 (DW_TAG_subprogram) - DW_AT_name : foo - DW_AT_declaration : 1 - ... - which is referred to from the DIE representing the function definition: - ... - <1>: Abbrev Number: 7 (DW_TAG_subprogram) - DW_AT_specification: <0xc1> - DW_AT_low_pc : 0x4004c7 - <101> DW_AT_high_pc : 0x7 - ... - which does contain the low and high bounds. - - Fix this by not complaining about function declarations. - - Tested on x86_64-linux. - -2022-10-04 Tom de Vries - - [gdb/symtab] Don't complain about inlined functions - With the test-case included in this patch, we get: - ... - (gdb) ptype main^M - During symbol reading: cannot get low and high bounds for subprogram DIE \ - at 0x113^M - During symbol reading: cannot get low and high bounds for subprogram DIE \ - at 0x11f^M - type = int (void)^M - (gdb) FAIL: gdb.dwarf2/inline.exp: ptype main - ... - - The complaints are about foo, with DW_AT_inline == DW_INL_inlined: - ... - <1><11f>: Abbrev Number: 6 (DW_TAG_subprogram) - <120> DW_AT_name : foo - <126> DW_AT_prototyped : 1 - <126> DW_AT_type : <0x10c> - <12a> DW_AT_inline : 1 (inlined) - ... - and foo2, with DW_AT_inline == DW_INL_declared_inlined: - ... - <1><113>: Abbrev Number: 5 (DW_TAG_subprogram) - <114> DW_AT_name : foo2 - <11a> DW_AT_prototyped : 1 - <11a> DW_AT_type : <0x10c> - <11e> DW_AT_inline : 3 (declared as inline and inlined) - ... - - Fix this by not complaining about inlined functions. - - Tested on x86_64-linux. - -2022-10-04 Tsukasa OI - - gdb/riscv: Partial support for instructions up to 176-bit - Because riscv_insn_length started to support instructions up to 176-bit, - we need to increase buf size to 176-bit in size. - - Also, that would break an assumption in riscv_insn::decode so this commit - fixes it, noting that instructions longer than 64-bit are not fully - supported yet. - -2022-10-04 Tsukasa OI - - RISC-V: Fix buffer overflow on print_insn_riscv - Because riscv_insn_length started to support instructions up to 176-bit, - we need to increase packet buffer size to 176-bit in size. - - include/ChangeLog: - - * opcode/riscv.h (RISCV_MAX_INSN_LEN): Max instruction length for - use in buffer size. - - opcodes/ChangeLog: - - * riscv-dis.c (print_insn_riscv): Increase buffer size for max - 176-bit length instructions. - -2022-10-04 Nelson Chu - - RISC-V: Renamed INSN_CLASS for floating point in integer extensions. - Just added suffix _INX for those INSN_CLASS should be enough to represent - their fpr can be replaced by gpr. - -2022-10-04 Nick Clifton - - Note that at least dejagnu version 1.5.3 is required in order to be ale to run the testsuites. - * README-maintainer-mode: Add a minimum version of dejagnu - requirement. - -2022-10-04 Andrew Burgess - - opcodes/riscv: style csr names as registers - While reviewing another patch I noticed that RISC-V CSR names are - given the text style, not the register style. This patch fixes this - mistake. - -2022-10-04 Luis Machado - - [AArch64] Update FPSR/FPCR fields for FPU and SVE - I noticed some missing flags/fields from FPSR and FPCR registers in - both the FPU and SVE target descriptions. - - This patch adds those and makes the SVE versions of FPSR and FPCR - use the proper flags/bitfields types. - -2022-10-04 Alan Modra - - Support objcopy changing compression to or from zstd - Commit 2cac01e3ffff lacked support for objcopy changing compression - style. Add that support, which meant a rewrite of - bfd_compress_section_contents. In the process I've fixed some memory - leaks. - - * compress.c (bfd_is_section_compressed_info): Rename from - bfd_is_section_compressed_with_header and add ch_type param - to return compression header ch_type field. - Update all callers. - (decompress_section_contents): Remove buffer and size params. - Rewrite. Update callers. - (bfd_init_section_compress_status): Free contents on failure. - (bfd_compress_section): Likewise. - * elf.c (_bfd_elf_make_section_from_shdr): Support objcopy - changing between any of the three compression schemes. Report - "unable to compress/decompress" rather than "unable to - initialize compress/decompress status" on compress/decompress - failures. - * bfd-in2.h: Regenerate. - -2022-10-04 Alan Modra - - Re: compress .gnu.debuglto_.debug_* sections if requested - Enable zlib-gnu compression for .gnu.debuglto_.debug_*. This differs - from zlib-gnu for .debug_* where the name is changed to .zdebug_*. - The name change isn't really needed. - - bfd/ - * elf.c (elf_fake_sections): Replace "." with ".z" in debug - section names only when name was ".d*", ie. ".debug_*". - (_bfd_elf_assign_file_positions_for_non_load): Likewise. - gas/ - * write.c (compress_debug): Compress .gnu.debuglto_.debug_* - for zlib-gnu too. Compress .gnu.linkonce.wi.*. - -2022-10-04 Martin Liska - - compress .gnu.debuglto_.debug_* sections if requested - Right now, when using LTO, the intermediate object files do contain - debug info in sections starting with .gnu.debuglto_ prefix and are - not compressed when --compress-debug-sections is used. - - It's a mistake and we can save quite some disk space. The following - example comes from tramp3d when the corresponding LTO sections - are compressed with zlib: - - $ bloaty tramp3d-v4-v2.o -- tramp3d-v4.o - FILE SIZE VM SIZE - -------------- -------------- - +83% +10 [ = ] 0 [Unmapped] - -68.0% -441 [ = ] 0 .gnu.debuglto_.debug_line - -52.3% -759 [ = ] 0 .gnu.debuglto_.debug_line_str - -62.4% -3.24Ki [ = ] 0 .gnu.debuglto_.debug_abbrev - -64.8% -1.12Mi [ = ] 0 .gnu.debuglto_.debug_info - -88.8% -4.58Mi [ = ] 0 .gnu.debuglto_.debug_str - -27.7% -5.70Mi [ = ] 0 TOTAL - - bfd/ChangeLog: - - * elf.c (_bfd_elf_make_section_from_shdr): Compress all debug - info sections. - - gas/ChangeLog: - - * write.c (compress_debug): Compress also ".gnu.debuglto_.debug_" - if the compression algorithm is different from zlib-gnu. - -2022-10-04 Jan Beulich - - RISC-V/gas: allow generating up to 176-bit instructions with .insn - For the time being simply utilize O_big to avoid widening other fields, - bypassing append_insn() etc. - - RISC-V/gas: don't open-code insn_length() - Use the helper when it can be used. - - RISC-V/gas: drop stray call to install_insn() - add_fixed_insn(), by calling move_insn(), already invokes install_insn(). - - RISC-V/gas: drop riscv_subsets static variable - It's fully redundant with the subset_list member of riscv_rps_as. - - RISC-V: don't cast expressions' X_add_number to long in diagnostics - There's no need for such workarounds anymore now that we use C99 - uniformly. This addresses several testsuite failures encountered when - (cross-)building on a 32-bit host. - -2022-10-04 Potharla, Rupesh - - ignore DWARF debug information for -gsplit-dwarf with dwarf-5 - Skip dwo_id for split dwarf. - - * dwarf2.c (parse_comp_unit): Skip DWO_id for DW_UT_skeleton. - -2022-10-04 GDB Administrator - - Automatic date update in version.in - -2022-10-03 Jan-Benedict Glaw - - Fix self-move warning check for GCC 13+ - GCC 13 got the self-move warning (0abb78dda084a14b3d955757c6431fff71c263f3), - but that warning is only checked for clang, resulting in: - - /usr/lib/gcc-snapshot/bin/g++ -x c++ -I. -I. -I./config -DLOCALEDIR="\"/tmp/gdb-m68k-linux/share/locale\"" -DHAVE_CONFIG_H -I./../include/opcode -I./../readline/readline/.. -I./../zlib -I../bfd -I./../bfd -I./../include -I../libdecnumber -I./../libdecnumber -I./../gnulib/import -I../gnulib/import -I./.. -I.. -I./../libbacktrace/ -I../libbacktrace/ -DTUI=1 -I./.. -pthread -Wall -Wpointer-arith -Wno-unused -Wunused-value -Wunused-variable -Wunused-function -Wno-switch -Wno-char-subscripts -Wempty-body -Wunused-but-set-parameter -Wunused-but-set-variable -Wno-sign-compare -Wno-error=maybe-uninitialized -Wno-mismatched-tags -Wsuggest-override -Wimplicit-fallthrough=3 -Wduplicated-cond -Wshadow=local -Wdeprecated-copy -Wdeprecated-copy-dtor -Wredundant-move -Wmissing-declarations -Wstrict-null-sentinel -Wformat -Wformat-nonliteral -Werror -g -O2 -c -o unittests/environ-selftests.o -MT unittests/environ-selftests.o -MMD -MP -MF unittests/.deps/environ-selftests.Tpo unittests/environ-selftests.c - unittests/environ-selftests.c: In function 'void selftests::gdb_environ_tests::test_self_move()': - unittests/environ-selftests.c:228:7: error: moving 'env' of type 'gdb_environ' to itself [-Werror=self-move] - 228 | env = std::move (env); - | ~~~~^~~~~~~~~~~~~~~~~ - unittests/environ-selftests.c:228:7: note: remove 'std::move' call - cc1plus: all warnings being treated as errors - make[1]: *** [Makefile:1896: unittests/environ-selftests.o] Error 1 - make[1]: Leaving directory '/var/lib/laminar/run/gdb-m68k-linux/3/binutils-gdb/gdb' - make: *** [Makefile:13193: all-gdb] Error 2 - -2022-10-03 Simon Marchi - - gdb: constify inferior::target_is_pushed - Change-Id: Ia4143b9c63cb76e2c824ba773c66f5c5cd94b2aa - -2022-10-03 Luis Machado - - [AArch64] Handle W registers as pseudo-registers instead of aliases of X registers - The aarch64 port handles W registers as aliases of X registers. This is - incorrect because X registers are 64-bit and W registers are 32-bit. - - This patch teaches GDB how to handle W registers as pseudo-registers of - 32-bit, the bottom half of the X registers. - - Testcase included. - -2022-10-03 Luis Machado - - [AArch64] Fix pseudo-register numbering in the presence of unexpected additional registers - When using AArch64 GDB with the QEMU debugging stub (in user mode), we get - additional system registers that GDB doesn't particularly care about, so - it doesn't number those explicitly. - - But given the pseudo-register numbers are above the number of real registers, - we need to setup/account for the real registers first before going ahead and - numbering the pseudo-registers. This has to happen at the end of - aarch64_gdbarch_init, after the call to tdesc_use_registers, as that - updates the total number of real registers. - - This is in preparation to supporting pointer authentication for bare metal - aarch64 (QEMU). - -2022-10-03 Nick Clifton - - readelf: DO not load section headers from file offset zero - * readelf.c (get_32bit_section_headers): Return false if the - e_shoff field is zero. - (get_64bit_section_headers): Likewise. - -2022-10-03 Tsukasa OI - - RISC-V: Move supervisor instructions after all unprivileged ones - This location of supervisor instructions is out of place (because many other - privileged instructions are located at the tail but after the supervisor - instructions, we have many unprivileged instructions including bit - manipulation / crypto / vector instructions). - - Not only that, this is harmful to implement pseudoinstructions in the latest - 'P'-extension proposal (CLROV and RDOV). This commit moves supervisor - instructions after all unprivileged instructions. - - opcodes/ChangeLog: - - * riscv-opc.c (riscv_opcodes): Adjust indents. Move supervisor - instructions after all unprivileged instructions. - -2022-10-03 Bruno Larsen - - Improve GDB's baseclass detection with typedefs - When a class inherits from a typedef'd baseclass, GDB may be unable to - find the baseclass if the user is not using the typedef'd name, as is - tested on gdb.cp/virtbase2.exp; the reason that test case is working - under gcc is that the dwarf generated by gcc links the class to the - original definition of the baseclass, not to the typedef. If the - inheritance is linked to the typedef, such as how clang does it, - gdb.cp/virtbase2.exp starts failing. - - This can also be seen in gdb.cp/impl-this.exp, when attempting to print - D::Bint::i, and GDB not being able to find the baseclass Bint. - - This happens because searching for baseclasses only uses the macro - TYPE_BASECLASS_NAME, which returns the typedef'd name. However, we can't - switch that macro to checking for typedefs, otherwise we wouldn't be - able to find the typedef'd name anymore. This is fixed by searching for - members or baseclasses by name, we check both the saved name and the - name after checking for typedefs. - - This also fixes said long-standing bug in gdb.cp/impl-this.exp when the - compiler adds information about typedefs in the debuginfo. - -2022-10-03 Tsukasa OI - - RISC-V: Assign DWARF numbers to vector registers - This commit assigns DWARF register numbers to vector registers (v0-v31: - 96..127) to implement RISC-V DWARF Specification version 1.0-rc4 - (now in the frozen state): - - https://github.com/riscv-non-isa/riscv-elf-psabi-doc/releases/tag/v1.0-rc4 - - binutils/ChangeLog: - - * dwarf.c (dwarf_regnames_riscv): Assign DWARF register numbers - 96..127 to vector registers v0-v31. - - gas/ChangeLog: - - * config/tc-riscv.c (tc_riscv_regname_to_dw2regnum): Support - vector registers. - * testsuite/gas/riscv/dw-regnums.s: Add vector registers to the - DWARF register number test. - * testsuite/gas/riscv/dw-regnums.d: Likewise. - -2022-10-03 Tsukasa OI - - RISC-V: Add testcase for DWARF register numbers - Although it had csr-dw-regnums.d (for CSRs), it didn't have DWARF register - number test for GPRs/FPRs. - - This commit adds dw-regnums.{s,d} to test such registers. - - gas/ChangeLog: - - * testsuite/gas/riscv/dw-regnums.s: New DWARF register number test - for GPRs/FPRs. - * testsuite/gas/riscv/dw-regnums.d: Likewise. - -2022-10-03 GDB Administrator - - Automatic date update in version.in - -2022-10-02 Tom de Vries - - [gdb/testsuite] Fix waitpid testing in next-fork-other-thread.c - In next-fork-other-thread.c, there's this loop: - ... - do - { - ret = waitpid (pid, &stat, 0); - } while (ret == EINTR); - ... - - The loop condition tests for "ret == EINTR" but waitpid signals EINTR by - returning -1 and setting errno to EINTR. - - Fix this by changing the loop condition to "ret == -1 && errno == EINTR". - - Tested on x86_64-linux. - -2022-10-02 Andrew Burgess - - gdb/testsuite: handle invalid .exp names passed in TESTS - I ran some tests like: - - $ make check-gdb TESTS="gdb.base/break.exp" - - then, then I went to rerun the tests later, I managed to corrupt the - command line, like this: - - $ make check-gdb TESTS="gdb.base/breakff.exp" - - the make command did exit with an error, but DejaGnu appeared to - report that every test passed! The tail end of the output looks like - this: - - Illegal Argument "no-matching-tests-found" - try "runtest --help" for option list - === gdb Summary === - - # of expected passes 115 - /tmp/build/gdb/gdb version 13.0.50.20220831-git -nw -nx -iex "set height 0" -iex "set width 0" -data-directory /tmp/build/gdb/testsuite/../data-directory - - make[3]: *** [Makefile:212: check-single] Error 1 - make[3]: Leaving directory '/tmp/build/gdb/testsuite' - make[2]: *** [Makefile:161: check] Error 2 - make[2]: Leaving directory '/tmp/build/gdb/testsuite' - make[1]: *** [Makefile:1916: check] Error 2 - make[1]: Leaving directory '/tmp/build/gdb' - make: *** [Makefile:13565: check-gdb] Error 2 - - For a while, I didn't spot that DejaGnu had failed at all, I saw the - 115 passes, and thought everything had run correctly - though I was - puzzled that make was reporting an error. - - What happens is that in gdb/testsuite/Makefile, in the check-single - rule, we first run DejaGnu, then run the dg-add-core-file-count.sh - script, and finally, we use sed to extract the results from the - gdb.sum file. - - In my case, with the invalid test name, DejaGnu fails, but the - following steps are still run, the final result, the 115 passes, is - then extracted from the pre-existing gdb.sum file. - - If I use 'make -jN' then the 'check-parallel' rule, rather than the - 'check-single' rule is used. In this case the behaviour is slightly - different, the tail end of the output now looks like this: - - No matching tests found. - - make[4]: Leaving directory '/tmp/build/gdb/testsuite' - find: ‘outputs’: No such file or directory - Usage: ../../../src/gdb/testsuite/../../contrib/dg-extract-results.py [-t tool] [-l variant-list] [-L] log-or-sum-file ... - - tool The tool (e.g. g++, libffi) for which to create a - new test summary file. If not specified then output - is created for all tools. - variant-list One or more test variant names. If the list is - not specified then one is constructed from all - variants in the files for . - sum-file A test summary file with the format of those - created by runtest from DejaGnu. - If -L is used, merge *.log files instead of *.sum. In this - mode the exact order of lines may not be preserved, just different - Running *.exp chunks should be in correct order. - find: ‘outputs’: No such file or directory - Usage: ../../../src/gdb/testsuite/../../contrib/dg-extract-results.py [-t tool] [-l variant-list] [-L] log-or-sum-file ... - - tool The tool (e.g. g++, libffi) for which to create a - new test summary file. If not specified then output - is created for all tools. - variant-list One or more test variant names. If the list is - not specified then one is constructed from all - variants in the files for . - sum-file A test summary file with the format of those - created by runtest from DejaGnu. - If -L is used, merge *.log files instead of *.sum. In this - mode the exact order of lines may not be preserved, just different - Running *.exp chunks should be in correct order. - make[3]: Leaving directory '/tmp/build/gdb/testsuite' - make[2]: Leaving directory '/tmp/build/gdb/testsuite' - make[1]: Leaving directory '/tmp/build/gdb' - - Rather than DejaGnu failing, we now get a nice 'No matching tests - found' message, followed by some other noise. This other noise is - first `find` failing, followed by the dg-extract-results.py script - failing. - - What happens here is that, in the check-parallel rule, the outputs - directory is deleted before DejaGnu is invoked. Then we try to run - all the tests, and finally we use find and dg-extract-results.py to - combine all the separate .sun and .log files together. However, if - there are no tests run then the outputs/ directory is never created, - so the find command and consequently the dg-extract-results.py script, - fail. - - This commit aims to fix the following issues: - - (1) For check-single and check-parallel rules, don't run any of the - post-processing steps if DejaGnu failed to run. This will avoid all - the noise after the initial failure of DejaGnu, - - (2) For check-single ensure that we don't accidentally report - previous results, this is related to the above, but is worth calling - out as a separate point, and - - (3) For check-single, print the 'No matching tests found' message - just like we do for a parallel test run. This makes the parallel and - non-parallel testing behaviour more similar, and I think is clearer - than the current 'Illegal Argument' error message. - - Points (1) and (2) will be handled by moving the post processing steps - inside an if block within the recipe. For check-single I propose - deleting the gdb.sum and gdb.log files before running DejaGnu, this is - similar (I think) to how we delete the outputs/ directory in the - check-parallel rule. - - For point (3) I plan to split the check-single rule in two, the - existing check-single will be renamed do-check-single, then a new - check-single rule will be added. The new check-single rule can either - depend on the new do-check-single, or will ensure the 'No matching - tests found' message is printed when appropriate. - -2022-10-02 Andrew Burgess - - gdb/disasm: better intel flavour disassembly styling with Pygments - This commit was inspired by this stackoverflow post: - - https://stackoverflow.com/questions/73491793/why-is-there-a-%C2%B1-in-lea-rax-rip-%C2%B1-0xeb3 - - One of the comments helpfully links to this Python test case: - - from pygments import formatters, lexers, highlight - - def colorize_disasm(content, gdbarch): - try: - lexer = lexers.get_lexer_by_name("asm") - formatter = formatters.TerminalFormatter() - return highlight(content, lexer, formatter).rstrip().encode() - except: - return None - - print(colorize_disasm("lea [rip+0x211] # COMMENT", None).decode()) - - Run the test case and you should see that the '+' character is - underlined, and could be confused with a combined +/- symbol. - - What's happening is that Pygments is failing to parse the input text, - and the '+' is actually being marked in the error style. The error - style is red and underlined. - - It is worth noting that the assembly instruction being disassembled - here is an x86-64 instruction in the 'intel' disassembly style, rather - than the default att style. Clearly the Pygments module expects the - att syntax by default. - - If we change the test case to this: - - from pygments import formatters, lexers, highlight - - def colorize_disasm(content, gdbarch): - try: - lexer = lexers.get_lexer_by_name("asm") - lexer.add_filter('raiseonerror') - formatter = formatters.TerminalFormatter() - return highlight(content, lexer, formatter).rstrip().encode() - except: - return None - - res = colorize_disasm("lea rax,[rip+0xeb3] # COMMENT", None) - if res: - print(res.decode()) - else: - print("No result!") - - Here I've added the call: lexer.add_filter('raiseonerror'), and I am - now checking to see if the result is None or not. Running this and - the test now print 'No result!' - instead of styling the '+' in the - error style, we instead give up on the styling attempt. - - There are two things we need to fix relating to this disassembly - text. First, Pygments is expecting att style disassembly, not the - intel style that this example uses. Fortunately, Pygments also - supports the intel style, all we need to do is use the 'nasm' lexer - instead of the 'asm' lexer. - - However, this leads to the second problem; in our disassembler line we - have '# COMMENT'. The "official" Intel disassembler style uses ';' - for its comment character, however, gas and libopcodes use '#' as the - comment character, as gas uses ';' for an instruction separator. - - Unfortunately, Pygments expects ';' as the comment character, and - treats '#' as an error, which means, with the addition of the - 'raiseonerror' filter, that any line containing a '#' comment, will - not get styled correctly. - - However, as the i386 disassembler never produces a '#' character other - than for comments, we can easily "fix" Pygments parsing of the - disassembly line. This is done by creating a filter. This filter - looks for an Error token with the value '#', we then change this into - a comment token. Every token after this (until the end of the line) - is also converted into a comment. - - In this commit I do the following: - - 1. Check the 'disassembly-flavor' setting and select between the - 'asm' and 'nasm' lexers based on the setting. If the setting is not - available then the 'asm' lexer is used by default, - - 2. Use "add_filter('raiseonerror')" to ensure that the formatted - output will not include any error text, which would be underlined, - and might be confusing, - - 3. If the 'nasm' lexer is selected, then add an additional filter - that will format '#' and all other text on the line, as a comment, - and - - 4. If Pygments throws an exception, instead of returning None, - return the original, unmodified content. This will mean that this - one instruction is printed without styling, but GDB will continue to - call into the Python code to style later instructions. - - I haven't included a test specifically for the above error case, - though I have manually check that the above case now styles - correctly (with no underline). The existing style tests check that - the disassembler styling still works though, so I know I've not - generally broken things. - - One final thought I have after looking at this issue is that I wonder - now if using Pygments for styling disassembly from every architecture - is actually a good idea? - - Clearly, the 'asm' lexer is OK with att style x86-64, but not OK with - intel style x86-64, so who knows how well it will handle other random - architectures? - - When I first added this feature I tested it against some random - RISC-V, ARM, and X86-64 (att style) code, and it seemed fine, but I - never tried to make an exhaustive check of all instructions, so its - quite possible that there are corner cases where things are styled - incorrectly. - - With the above changes I think that things should be a bit better - now. If a particular instruction doesn't parse correctly then our - Pygments based styling code will just not style that one instruction. - This is combined with the fact that many architectures are now moving - to libopcodes based styling, which is much more reliable. - - So, I think it is fine to keep using Pygments as a fallback mechanism - for styling all architectures, even if we know it might not be perfect - in all cases. - -2022-10-02 Andrew Burgess - - gdb: improve disassembler styling when Pygments raises an exception - While working on another issue relating to GDB's use of the Python - Pygments package for disassembly styling I noticed an issue in the - case where the Pygments package raises an exception. - - The intention of the current code is that, should the Pygments package - raise an exception, GDB will disable future attempts to call into the - Pygments code. This was intended to prevent repeated errors during - disassembly if, for some reason, the Pygments code isn't working. - - Since the Pygments based styling was added, GDB now supports - disassembly styling using libopcodes, but this is only available for - some architectures. For architectures not covered by libopcodes - Pygments is still the only option. - - What I observed is that, if I disable the libopcodes styling, then - setup GDB so that the Pygments based styling code will indicate an - error (by returning None), GDB does, as expected, stop using the - Pygments based styling. However, the libopcodes based styling will - instead be used, despite this feature having been disabled. - - The problem is that the disassembler output is produced into a - string_file buffer. When we are using Pygments, this buffer is - created without styling support. However, when Pygments fails, we - recreate the buffer with styling support. - - The problem is that we should only recreate the buffer with styling - support only if libopcodes styling is enabled. This was an oversight - in commit: - - commit 4cbe4ca5da5cd7e1e6331ce11f024bf3c07b9744 - Date: Mon Feb 14 14:40:52 2022 +0000 - - gdb: add support for disassembler styling using libopcodes - - This commit: - - 1. Factors out some of the condition checking logic into two new - helper functions use_ext_lang_for_styling and - use_libopcodes_for_styling, - - 2. Reorders gdb_disassembler::m_buffer and gdb_disassembler::m_dest, - this allows these fields to be initialised m_dest first, which means - that the new condition checking functions can rely on m_dest being - set, even when called from the gdb_disassembler constructor, - - 3. Make use of the new condition checking functions each time - m_buffer is initialised, - - 4. Add a new test that forces the Python disassembler styling - function to return None, this will cause GDB to disable use of - Pygments for styling, and - - 5. When we reinitialise m_buffer, and re-disassemble the - instruction, call reset the in-comment flag. If the instruction - being disassembler ends in a comment then the first disassembly pass - will have set the in-comment flag to true. This shouldn't be a - problem as we will only be using Pygments, and thus performing a - re-disassembly pass, if libopcodes is disabled, so the in-comment - flag will never be checked, even if it is set incorrectly. However, - I think that having the flag set correctly is a good thing, even if - we don't check it (you never know what future uses might come up). - -2022-10-02 Andrew Burgess - - gdb/testsuite: extend styling test for libopcodes styling - This commit extends the gdb.base/style.exp test to cover disassembler - styling using libopcodes (where available). - - The test will try to enable libopcode based styling, if this - works (because such styling is available) then some tests are run to - check that the output is styled, and that the styling can be disabled - using 'set style disassembler enabled off'. If libopcodes styling is - not available on the current architecture then these new tests will be - skipped. - - I've moved the Python Pygments module check inside the - test_disable_disassembler_styling function now, so that the test will - be run even when Python Pygments is not available, this allows the new - tests discussed above. - - If the Pygments module is not available then the Pygments based tests - will be skipped just as they were before. - -2022-10-02 Andrew Burgess - - gdb: update now gdbarch_register_name doesn't return nullptr - After the previous few commit, gdbarch_register_name no longer returns - nullptr. This commit audits all the calls to gdbarch_register_name - and removes any code that checks the result against nullptr. - - There should be no visible change after this commit. - -2022-10-02 Andrew Burgess - - gdb: final cleanup of various gdbarch_register_name methods - Building on the previous commits, this commit goes through the various - gdbarch_register_name methods and removes all the remaining 'return - NULL' cases, I claim that these either couldn't be hit, or should be - returning the empty string. - - In all cases the return of NULL was used if the register number being - passed to gdbarch_register_name was "invalid", i.e. negative, or - greater than the total number of declared registers. I don't believe - either of these cases can occur, and the previous commit asserts that - this is the case. As a result we can simplify the code by removing - these checks. In many cases, where the register names are held in an - array, I was able to add a static assert that the array contains the - correct number of strings, after that, a direct access into the array - is fine. - - I don't have any means of testing these changes. - -2022-10-02 Andrew Burgess - - gdb/csky: remove nullptr return from csky_pseudo_register_name - Building on the previous commits, in this commit I remove two - instances of 'return NULL' from csky_pseudo_register_name, and replace - them with a return of the empty string. - - These two are particularly interesting, and worth pulling into their - own commit, because these returns of NULL appear to be depended on - within other parts of the csky code. - - In csky-linux-tdep.c in the register collect/supply code, GDB checks - for the register name being nullptr in order to decide if a target - supports a particular feature or not. I've updated the code to check - for the empty string. - - I have no way of testing this change. - -2022-10-02 Andrew Burgess - - gdb: add asserts to gdbarch_register_name - This commit adds asserts to gdbarch_register_name that validate the - parameters, and the return value. - - The interesting thing here is that gdbarch_register_name is generated - by gdbarch.py, and so, to add these asserts, I need to update the - generation script. - - I've added two new arguments for Functions and Methods (as declared in - gdbarch-components.py), these arguments are 'param_checks' and - 'result_checks'. Each of these new arguments can be used to list some - expressions that are then used within gdb_assert calls in the - generated code. - - The asserts that validate the API as described in the comment I added - to gdbarch_register_name a few commits back; the register number - passed in needs to be a valid cooked register number, and the result - being returned should not be nullptr. - -2022-10-02 Andrew Burgess - - gdb: check for duplicate register names in selftest - Building on the previous commit, this commit extends the register_name - selftest to check for duplicate register names. - - If two registers in the cooked register set (real + pseudo registers) - have the same name, then this will show up as duplicate registers in - the 'info all-registers' output, but the user will only be able to - interact with one copy of the register. - - In this commit I extend the selftest that I added in the previous - commit to check for duplicate register names, I didn't include this - functionality in the previous commit because one architecture needed - fixing, and I wanted to keep those fixes separate from the fixes in - the previous commit. - - The problematic architecture(s) are powerpc:750 and powerpc:604. In - both of these cases the 'dabr' register appears twice, there's a - definition of dabr in power-oea.xml which is included into both - powerpc-604.xml and powerpc-750.xml. Both of these later two xml - files also define the dabr register. - - I'm hopeful that this change shouldn't break anything, but I don't - have the ability to actually test this change, however: - - On the gdbserver side, neither powerpc-604.xml nor powerpc-750.xml are - mentioned in gdbserver/configure.srv, which I think means that - gdbserver will never use these descriptions, and, - - Within GDB the problematic descriptions are held in the variables - tdesc_powerpc_604 and tdesc_powerpc_750, which are only mentioned in - the variants array in rs6000-tdep.c, this is used when looking up a - description based on the architecture. - - For a native Linux target however, this will not be used as - ppc_linux_nat_target::read_description exists, which calls - ppc_linux_match_description, which I don't believe can return either - of the problematic descriptions. - - This leaves the other native targets, FreeBSD, AIX, etc. These don't - appear to override the ::read_description method, so will potentially - return the problematic descriptions, but, in each case I think the - ::fetch_registers and ::store_registers methods will ignore the dabr - register, which will leave the register as . - - So, my proposed solution is to just remove the duplicate register from - each of powerpc-604.xml and powerpc-750.xml, then regenerate the - corresponding C++ source file. With this change made, the selftest - now passes for all architectures. - -2022-10-02 Andrew Burgess - - gdb: add a gdbarch_register_name self test, and fix some architectures - This commit adds a self-test that checks that gdbarch_register_name - never returns nullptr for any valid register number. - - Most architectures already met this requirement, there were just 6 - that failed the new selftest, and are updated in this commit. - - Beyond the self-tests I don't have any facilities to test that the - architectures I've adjusted still work correctly. - - If you review all the various gdbarch_register_name implementations - then you will see that there are far more architectures that seem like - they might return nullptr in some situations, e.g. alpha, avr, bpf, - etc. This commit doesn't attempt to address these cases as non of - them are hit during the selftest. Many of these cases can never be - hit, for example, in alpha_register_name GDB checks for a register - number less than zero, this case can't happen and could be changed - into an assert. - - A later commit in this series will have a general cleanup of all the - various register_name methods, and remove all references to NULL from - their code, however, as that commit will be mostly adjusting code that - is never hit, I want to keep those changes separate. - - The selftest has been tested on x86-64, but I don't have access to - suitable systems to fully test any of the *-tdep.c code I've changed - in this commit. - -2022-10-02 Andrew Burgess - - gdb/gdbarch: add a comment to gdbarch_register_name - After the previous commit, this commit sets out to formalise the API - for gdbarch_register_name. Not every architecture is actually in - compliance with the API I set out here, but I believe that most are. - - I think architectures that don't comply with the API laid out here - will fail the gdb.base/completion.exp test. - - The claims in the comment are I feel, best demonstrated with the - asserts in this code: - - const char * - gdbarch_register_name (struct gdbarch *gdbarch, int regnr) - { - gdb_assert (regnr >= 0); - gdb_assert (regnr < gdbarch_num_cooked_regs (gdbarch)); - - const char *name = gdbarch->register_name (gdbarch, regnr); - - gdb_assert (name != nullptr); - - return name; - } - - Like I said, I don't believe every architecture follows these rules - right now, which is why I'm not actually adding any asserts. Instead, - this commit adds a comment to gdbarch_register_name, this comment is - where I'd like to get to, rather than where we are right now. - - Subsequent commits will fix all targets to be in compliance with this - comment, and will even add the asserts shown above to - gdbarch_register_name. - -2022-10-02 Andrew Burgess - - gdb/riscv: fix failure in gdb.base/completion.exp - I noticed a test failure in gdb.base/completion.exp for RISC-V on - a native Linux target, this is the failure: - - (gdb) FAIL: gdb.base/completion.exp: complete 'info registers ' - - The problem is caused by a mismatch in the output of 'maint print - registers' and the completion list for 'info registers'. The 'info - registers' completion list contains less registers than - expected. Additionally, the list of registers extracted from the - 'maint print registers' list was wrong too, in some cases the test was - grabbing the register number, rather than a register name, - - Both of these problems have the same root cause, riscv_register_name - returns nullptr for some registers when it should return an empty - string. - - The gdbarch_register_name API is not clearly documented anywhere, and - at first glance it would appear that the function can return either - nullptr, or an empty string to indicate that a register is not - available on the current target. Indeed, there are plenty of places - in GDB where we compare the output of gdbarch_register_name to both - nullptr and '\0' in order to see if a register is supported or not, - and there are plenty of targets that return empty string in some - cases, and nullptr in others. - - However, the 'info registers' completion code (reg_or_group_completer) - clearly depends on user_reg_map_regnum_to_name only returning nullptr - when the passed in regnum is greater than the maximum possible - register number (i.e. after all physical registers, pseudo-registers, - and user-registers), this means that gdbarch_register_name should not - be returning nullptr. - - I did consider "fixing" user_reg_map_regnum_to_name, if - gdbarch_register_name returns nullptr, I could convert to an empty - string at this point, but that felt like a real hack, so I discarded - that plan. - - The next possibility I considered was "fixing" reg_or_group_completer - to not rely on nullptr to indicate the end marker. Or rather, I could - have reg_or_group_completer use gdbarch_num_cooked_regs, we know that - we should check at least that many register numbers. Then, once we're - passed that limit, we keep checking until we hit a nullptr. This - would absolutely work, and didn't actually feel that bad, but, it - still felt a little weird that gdbarch_register_name could return - nullptr OR the empty string to mean the same thing, so I wondered if - the "right" solution was to have gdbarch_register_name not return - nullptr. With this in mind I tried an experiment: - - I added a self-test that, for each architecture, calls - gdbarch_register_name for every register number up to the - gdbarch_num_cooked_regs limit, and checks that the name is not - nullptr. - - Only a handful of architectures failed this test, RISC-V being one of - them. - - This seems to suggest that most architectures agree that the correct - API for gdbarch_register_name is to return an empty string for - registers that are not supported on the current target, and that - returning nullptr is really a mistake. - - In this commit I will update the RISC-V target so that GDB no longer - returns nullptr from riscv_register_name, instead we return the empty - string. - - In subsequent commits I will add the selftest that I mention above, - and will fix the targets that fail the selftest. - - With this change the gdb.base/completion.exp test now passes. - -2022-10-02 Andrew Burgess - - gdb/testsuite: rewrite capture_command_output proc - I noticed a test failure in gdb.base/completion.exp for RISC-V on a - native Linux target. Upon investigation I discovered a couple of - reasons for the failure, this commit addresses one of them. A later - commit will address the other issue. - - The completion.exp test makes use of the capture_command_output proc - to collect the output of the 'maint print registers' command. For - RISC-V this command produces a lot of output. - - Currently the capture_command_output proc tries to collect the - complete command output in a single expect buffer, and what I see is - an error caused by the expect buffer becoming full. - - This commit rewrites capture_command_output to make use of - gdb_test_multiple to collect the command output line at a time, in - this way we avoid overflowing the expect buffer. - - The capture_command_output proc has some logic for skipping a prefix - pattern, which is passed in to the proc as an argument. In order to - handle this correctly (only matching the prefix at the start of the - command output), I use two gdb_test_multiple calls, the first spots - and discards the echoed command and the (optional) prefix pattern, the - second gdb_test_multiple call then collects the rest of the command - output line at a time until a prompt is seen. - - There is one slight oddity with the current implementation, which I - have changed in my rewrite, this does, slightly, change the behaviour - of the proc. - - The current implementation uses this pattern: - - -re "[string_to_regexp ${command}]\[\r\n\]+${prefix}(.*)\[\r\n\]+$gdb_prompt $" - - Now a typical command output will look like this: - - output here\r\n - (gdb) - - As the TCL regexp matching is greedy, TCL will try to match as much as - possible in one part of the pattern before moving on to the next. - Thus, when this matches against (.*)[\r\n]+, the (.*) will end up - matching against 'output here\r' and the [\r\n]+ will match '\n' only. - - In short the previous implementation would leave the '\r' on the end - of the returned text, but not the final trailing '\n'. - - Now clearly I could make a new version of capture_command_output that - maintained this behaviour, but I couldn't see any reason to do this. - So, my new implementation drops the final '\r\n' completely, in our - example above we now return 'output here' with no '\r'. - - This change doesn't seem to affect any of the existing tests, but I - thought it was worth mentioning. - -2022-10-02 Andrew Burgess - - gdb/mi: new options for -data-disassemble command - Now that the disassembler has two different strategies for laying out - the opcode bytes of an instruction (see /r vs /b for the disassemble - command), I wanted to add support for this to the MI disassemble - command. - - Currently the -data-disassemble command takes a single 'mode' value, - which currently has 6 different values (0 -> 5), 3 of these modes - relate to opcode display. - - So, clearly I should just add an additional 3 modes to handle the new - opcode format, right? - - No, I didn't think that was a great idea either. - - So, I wonder, could I adjust the -data-disassemble command in a - backward compatible way, that would allow GDB to move away from using - the mode value altogether? - - I think we can. - - In this commit, I propose adding two new options to -data-disassemble, - these are: - - --opcodes none|bytes|display - --source - - Additionally, I will make the mode optional, and default to mode 0 if - no mode value is given. Mode 0 is the simplest, no source code, no - opcodes disassembly mode. - - The two new options are only valid for mode 0, if they are used with - any other mode then an error is thrown. - - The --opcodes option can add opcodes to the result, with 'bytes' being - equivalent to 'disassemble /b' and 'display' being 'disassemble /r'. - - The --source option will enable the /s style source code display, this - is equivalent to modes 4 and 5. There is no way, using the new - command options to get the now deprecated /m style source code - display, that is mode 1 and 3. - - My hope is that new users of the MI will not use the mode at all, and - instead will just use the new options to achieve the output they need. - Existing MI users can continue to use the mode, and will not need to - be updated to use the new options. - -2022-10-02 Andrew Burgess - - gdb/mi: some int to bool conversion - Just some simple int to bool conversion in mi_cmd_disassemble. There - should be no user visible changes after this commit. - -2022-10-02 Andrew Burgess - - gdb/doc: update syntax of -data-disassemble command arguments - The argument documentation for -data-disassemble looks like this: - - -data-disassemble - [ -s @var{start-addr} -e @var{end-addr} ] - | [ -a @var{addr} ] - | [ -f @var{filename} -l @var{linenum} [ -n @var{lines} ] ] - -- @var{mode} - - However, I believe, according to the 'Notation and Terminology' - section, this means that the there are 3 optional location - specification argument groups for the command, followed by a - non-optional '-- mode'. - - However, this is not true, one of the location specifications must be - given, i.e. we can't choose to give NO location specification, which - is what the above implies. - - I propose that we change this to instead be: - - -data-disassemble - ( -s @var{start-addr} -e @var{end-addr} - | -a @var{addr} - | -f @var{filename} -l @var{linenum} [ -n @var{lines} ] ) - -- @var{mode} - - By placing all the location specifications within '( ... )' we - indication that these are a group, from which one of the options, - separated by '|', must be selected. - - However, the 'Notation and Terminology' section only describes two - uses for parenthesis: '( GROUP )*' and '( GROUP )+', in the first case - GROUP is repeated zero or more times, and in the second GROUP is - repeated 1 or more times. - - Neither of those exactly describe what I want, which is GROUP must - appear exactly once. I propose to extend 'Notation and Terminology' - to include '( GROUP )' which means that GROUP should appear exactly - once. - - This change is important because, in a later commit, I want to add - additional optional arguments to the -data-disassemble command, and - things start to get confusing with the original syntax. - -2022-10-02 Andrew Burgess - - gdb: make gdb_disassembly_flag unsigned - In a later commit I want to use operator~ on a gdb_disassembly_flag - flag value. This is currently not possible as gdb_disassembly_flag - is, by default, signed. - - This commit just makes this enum unsigned. - - There should be no user visible changes after this commit. - -2022-10-02 Andrew Burgess - - gdb: disassembler opcode display formatting - This commit changes the format of 'disassemble /r' to match GNU - objdump. Specifically, GDB will now display the instruction bytes in - as 'objdump --wide --disassemble' does. - - Here is an example for RISC-V before this patch: - - (gdb) disassemble /r 0x0001018e,0x0001019e - Dump of assembler code from 0x1018e to 0x1019e: - 0x0001018e : 03 26 84 fe lw a2,-24(s0) - 0x00010192 : 83 25 c4 fe lw a1,-20(s0) - 0x00010196 : 61 65 lui a0,0x18 - 0x00010198 : 13 05 85 6a addi a0,a0,1704 - 0x0001019c : f1 22 jal 0x10368 - End of assembler dump. - - And here's an example after this patch: - - (gdb) disassemble /r 0x0001018e,0x0001019e - Dump of assembler code from 0x1018e to 0x1019e: - 0x0001018e : fe842603 lw a2,-24(s0) - 0x00010192 : fec42583 lw a1,-20(s0) - 0x00010196 : 6561 lui a0,0x18 - 0x00010198 : 6a850513 addi a0,a0,1704 - 0x0001019c : 22f1 jal 0x10368 - End of assembler dump. - - There are two differences here. First, the instruction bytes after - the patch are grouped based on the size of the instruction, and are - byte-swapped to little-endian order. - - Second, after the patch, GDB now uses the bytes-per-line hint from - libopcodes to add whitespace padding after the opcode bytes, this - means that in most cases the instructions are nicely aligned. - - It is still possible for a very long instruction to intrude into the - disassembled text space. The next example is x86-64, before the - patch: - - (gdb) disassemble /r main - Dump of assembler code for function main: - 0x0000000000401106 <+0>: 55 push %rbp - 0x0000000000401107 <+1>: 48 89 e5 mov %rsp,%rbp - 0x000000000040110a <+4>: c7 87 d8 00 00 00 01 00 00 00 movl $0x1,0xd8(%rdi) - 0x0000000000401114 <+14>: b8 00 00 00 00 mov $0x0,%eax - 0x0000000000401119 <+19>: 5d pop %rbp - 0x000000000040111a <+20>: c3 ret - End of assembler dump. - - And after the patch: - - (gdb) disassemble /r main - Dump of assembler code for function main: - 0x0000000000401106 <+0>: 55 push %rbp - 0x0000000000401107 <+1>: 48 89 e5 mov %rsp,%rbp - 0x000000000040110a <+4>: c7 87 d8 00 00 00 01 00 00 00 movl $0x1,0xd8(%rdi) - 0x0000000000401114 <+14>: b8 00 00 00 00 mov $0x0,%eax - 0x0000000000401119 <+19>: 5d pop %rbp - 0x000000000040111a <+20>: c3 ret - End of assembler dump. - - Most instructions are aligned, except for the very long instruction. - Notice too that for x86-64 libopcodes doesn't request that GDB group - the instruction bytes. This matches the behaviour of objdump. - - In case the user really wants the old behaviour, I have added a new - modifier 'disassemble /b', this displays the instruction byte at a - time. For x86-64, which never groups instruction bytes, /b and /r are - equivalent, but for RISC-V, using /b gets the old layout back (except - that the whitespace for alignment is still present). Consider our - original RISC-V example, this time using /b: - - (gdb) disassemble /b 0x0001018e,0x0001019e - Dump of assembler code from 0x1018e to 0x1019e: - 0x0001018e : 03 26 84 fe lw a2,-24(s0) - 0x00010192 : 83 25 c4 fe lw a1,-20(s0) - 0x00010196 : 61 65 lui a0,0x18 - 0x00010198 : 13 05 85 6a addi a0,a0,1704 - 0x0001019c : f1 22 jal 0x10368 - End of assembler dump. - - Obviously, this patch is a potentially significant change to the - behaviour or /r. I could have added /b with the new behaviour and - left /r alone. However, personally, I feel the new behaviour is - significantly better than the old, hence, I made /r be what I consider - the "better" behaviour. - - The reason I prefer the new behaviour is that, when I use /r, I almost - always want to manually decode the instruction for some reason, and - having the bytes displayed in "instruction order" rather than memory - order, just makes this easier. - - The 'record instruction-history' command also takes a /r modifier, and - has been modified in the same way as disassemble; /r gets the new - behaviour, and /b has been added to retain the old behaviour. - - Finally, the MI command -data-disassemble, is unchanged in behaviour, - this command now requests the raw bytes of the instruction, which is - equivalent to the /b modifier. This means that the MI output will - remain backward compatible. - -2022-10-02 Andrew Burgess - - gdb/disasm: read opcodes bytes with a single read_code call - This commit reduces the number of times we call read_code when - printing the instruction opcode bytes during disassembly. - - I've added a new gdb::byte_vector within the - gdb_pretty_print_disassembler class, in line with all the other - buffers that gdb_pretty_print_disassembler needs. This byte_vector is - then resized as needed, and filled with a single read_code call for - each instruction. - - There should be no user visible changes after this commit. - -2022-10-02 Andrew Burgess - - gdb/testsuite: new test for -data-disassemble opcodes format - Add another test for the output of MI command -data-disassemble. The - new check validates the format of the 'opcodes' field, specifically, - this test checks that the field contains a series of bytes, separated - by a single space. - - We also check that the bytes are in the correct order, that is, the - first byte is from the lowest address, and subsequent bytes are from - increasing addresses. - - The motivation for this test (besides more tests being generally good) - is that I plan to make changes to how opcode bytes are displayed in - the disassembler output, and I want to ensure that I don't break any - existing MI behaviour. - - There should be no user visible changes to GDB after this commit. - -2022-10-02 GDB Administrator - - Automatic date update in version.in - -2022-10-01 GDB Administrator - - Automatic date update in version.in - -2022-09-30 Tsukasa OI - - RISC-V: Relax "fmv.[sdq]" requirements - This commit relaxes requirements to "fmv.s" instructions from 'F' to ('F' - or 'Zfinx'). The same applies to "fmv.d" and "fmv.q". Note that 'Zhinx' - extension already contains "fmv.h" instruction (as well as 'Zfh'). - - gas/ChangeLog: - - * testsuite/gas/riscv/zfinx.s: Add "fmv.s" instruction. - * testsuite/gas/riscv/zfinx.d: Likewise. - * testsuite/gas/riscv/zdinx.s: Add "fmv.d" instruction. - * testsuite/gas/riscv/zdinx.d: Likewise. - * testsuite/gas/riscv/zqinx.d: Add "fmv.q" instruction. - * testsuite/gas/riscv/zqinx.s: Likewise. - - opcodes/ChangeLog: - - * riscv-opc.c (riscv_opcodes): Relax requirements to "fmv.[sdq]" - instructions to support those in 'Zfinx'/'Zdinx'/'Zqinx'. - -2022-09-30 Tsukasa OI - - RISC-V: Reorganize and enhance 'Zfinx' tests - This commit adds certain test cases for 'Zfinx'/'Zdinx'/'Zqinx' extensions - and reorganizes them, fixing coding style while improving coverage. - This is partially based on jiawei's 'Zhinx' testcases. - - gas/ChangeLog: - - * testsuite/gas/riscv/zfinx.s: Use different registers for - better encode space testing. Make indentation consistent. - Add tests for instruction with rounding mode. Change march - to minimum required extensions. Remove source line. - * testsuite/gas/riscv/zfinx.d: Likewise. - * testsuite/gas/riscv/zdinx.s: Likewise. - * testsuite/gas/riscv/zdinx.d: Likewise. - * testsuite/gas/riscv/zqinx.s: Likewise. - Also use even-numbered registers to use valid register pairs. - * testsuite/gas/riscv/zqinx.d: Likewise. - -2022-09-30 Christoph Müllner - - RISC-V: Eliminate long-casts of X_add_number in diagnostics - There is no need for casts to (signed/unsigned) long, as we can use - C99's PRId64/PRIu64 format specifiers. - -2022-09-30 Jan Beulich - - RISC-V: fallout from "re-arrange opcode table for consistent alias handling" - Several new testcasee have appeared since the submission of said change, - some of which now also need adjustment. - - RISC-V: fix build after "Add support for arbitrary immediate encoding formats" - Pre- and post-increment/decrement are side effects, the behavior of - which is undefined when combined with passing an address of the accessed - variable in the same function invocation. There's no need for the - increments here - simply adding 1 achieves the intended effect without - triggering compiler diagnostics (which are fatal with -Werror). - - objcopy: avoid "shadowing" of remove() function name - remove() is a standard library function (declared in stdio.h), which - triggers a "shadows a global declaration" warning with some gcc versions. - - RISC-V: drop stray INSN_ALIAS flags - FENCE.TSO isn't an alias. ZIP and UNZIP in the long run likely are, but - presently they aren't. This fixes disassembly of these insns with - -Mno-aliases. - -2022-09-30 Jan Beulich - - RISC-V: re-arrange opcode table for consistent alias handling - For disassembly to pick up aliases in favor of underlying insns (helping - readability in the common case), the aliases need to come ahead of the - "base" insns. Slightly more code movement is needed because of insns - with the same name needing to stay next to each other. - - Note that the "rorw" alias entry also has the missing INSN_ALIAS added - here. - - Clone a few testcases to exercise -Mno-aliases some more, better - covering the differences between the default and that disassembly mode. - -2022-09-30 Jan Beulich - - x86: correct build dependencies in opcodes/ - With the command in the rule merely being "echo", i386-tbl.h won't be - rebuilt if missing, when at the same time i386-init.h is present and - up-to-date. Use a pattern rule instead to express the multiple targets - correctly (the &: rule separator is supported only by GNU make 4.3 and - newer). Note that now, for the opposite case to work (i386-tbl.h is - up-to-date but i386-init.h is missing), i386-init.h also needs - mentioning as a dependency somewhere: Add a fake dependency for - i386-opc.lo ("fake" because i386-opc.c doesn't include that header). - - At the same time use $(AM_V_GEN) in the actual rule, replacing the - earlier (open-coded) "echo". And while there also drop a duplicate - dependency of i386-gen.o on i386-opc.h. - -2022-09-30 Jan Beulich - - x86: improve match_template()'s diagnostics - At the example of - - extractps $0, %xmm0, %xmm0 - insertps $0, %xmm0, %eax - - (both having respectively the same mistake of using the wrong kind of - destination register) it is easy to see that current behavior is far - from ideal: The former results in "unsupported instruction" for 32-bit - code simply because the 2nd template we have is a Cpu64 one. Instead we - should aim at emitting the "best" possible error, which will typically - be the one where we passed the largest number of checks. Generalize the - original "specific_error" approach by making it apply to the entire - matching loop, utilizing that line numbers increase as we pass further - checks. - -2022-09-30 Jan Beulich - - x86/Intel: restrict suffix derivation - While in some cases deriving an AT&T-style suffix from an Intel syntax - memory operand size specifier is necessary, in many cases this is not - only pointless, but has led to the introduction of various workarounds: - Excessive use of IgnoreSize and NoRex64 as well as the ToDword and - ToQword attributes. Suppress suffix derivation when we can clearly tell - that the memory operand's size isn't going to be needed to infer the - possible need for the low byte/word opcode bit or an operand size prefix - (0x66 or REX.W). - - As a result ToDword and ToQword can be dropped entirely, plus a fair - number of IgnoreSize and NoRex64 can also be got rid of. Note that - IgnoreSize needs to remain on legacy encoded SIMD insns with GPR - operand, to avoid emitting an operand size prefix in 16-bit mode. (Since - 16-bit code using SIMD insns isn't well tested, clone an existing - testcase just enough to cover a few insns which are potentially - problematic but are being touched here.) - - Note that while folding the VCVT{,T}S{S,D}2SI templates, VCVT{,T}SH2SI - isn't included there. This is to fulfill the request of not allowing L - and Q suffixes there, despite the inconsistency with VCVT{,T}S{S,D}2SI. - -2022-09-30 liuzhensong - - LoongArch: Update ELF e_flags handling according to specification. - Update handling of e_flags according to the documentation - update [1] (discussions [2][3]). - - Object file bitness is now represented in the EI_CLASS byte. - The e_flags field is now interpreted as follows: - - e_flags[2:0]: Base ABI modifier - - - 0x1: soft-float - - 0x2: single-precision hard-float - - 0x3: double-precision hard-float - - e_flags[7:6]: ELF object ABI version - - - 0x0: v0 - - 0x1: v1 - - [1]: https://github.com/loongson/LoongArch-Documentation/blob/main/docs/LoongArch-ELF-ABI-EN.adoc#e_flags-identifies-abi-type-and-version - [2]: https://github.com/loongson/LoongArch-Documentation/pull/61 - [3]: https://github.com/loongson/LoongArch-Documentation/pull/47 - -2022-09-30 Vladimir Mezentsev - - gprofng: fix cppcheck warnings - gprofng/ChangeLog - 2022-09-29 Vladimir Mezentsev - - * common/hwcdrv.c: Fix cppcheck warning. - * src/ABS.h: Likewise. - * src/CompCom.cc: Likewise. - -2022-09-30 Tom de Vries - - [gdb/testsuite] Fix gdb.mi/mi-sym-info.exp on openSUSE Tumbleweed - On openSUSE Tumbleweed, I run into: - ... - FAIL: gdb.mi/mi-sym-info.exp: List all functions from debug information only - ... - - The problem is in matching this string: - ... - {name="_start",type="void (void)",description="void _start(void);"} - ... - using regexp fun_re, which requires a line field: - ... - set fun_re \ - "\{line=\"$decimal\",name=${qstr},type=${qstr},description=${qstr}\}" - ... - - Fix this by making the line field optional in fun_re. - - Tested on x86_64-linux. - -2022-09-30 Tsukasa OI - - RISC-V: Add privileged extensions without instructions/CSRs - Currently, GNU Binutils does not support following privileged extensions: - - - 'Smepmp' - - 'Svnapot' - - 'Svpbmt' - - as they do not provide new CSRs or new instructions ('Smepmp' extends the - privileged architecture CSRs but does not define the CSR itself). However, - adding them might be useful as we no longer have to "filter" ISA strings - just for toolchains (if full ISA string is given by a vendor, we can - straightly use it). - - And there's a fact that supports this theory: there's already an - (unprivileged) extension which does not provide CSRs or instructions (but - only an architectural guarantee): 'Zkt' (constant timing guarantee for - certain subset of RISC-V instructions). - - This simple commit simply adds three privileged extensions listed above. - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_supported_std_s_ext): Add 'Smepmp', - 'Svnapot' and 'Svpbmt' extensions. - -2022-09-30 Tsukasa OI - - gdb: Remove unused extra_lines variable - Clang generates a warning if there is a variable that is set but not used - otherwise ("-Wunused-but-set-variable"). On the default configuration, it - causes a build failure (unless "--disable-werror" is specified). - - The only extra_lines use in arrange_linetable function is removed on the - commit 558802e4d1c5dcbd0df7d2c6ef62a6deac247a2f - ("gdb: change subfile::line_vector to an std::vector"). So, this variable - should be removed to prevent a build failure. - -2022-09-30 Tom de Vries - - [gdb/testsuite] Add aranges to gdb.dwarf2/dw2-dir-file-name.exp - Since commit 52b920c5d20 ("[gdb/testsuite] Fix gdb.dwarf2/dw2-dir-file-name.exp - for ppc64le"), the test-case fails with target board cc-with-debug-names, due - to missing .debug_aranges info. - - Add the missing .debug_aranges info. - - Also add a file_id option to Dwarf::assemble, to make it possible to contribute - to an already open file. - - Tested on x86_64-linux. - -2022-09-30 Tom de Vries - - [gdb/c++] Print destructor the same for gcc and clang - Consider the test-case contained in this patch. - - With g++ (7.5.0) we have for "ptype A": - ... - type = class A { - public: - int a; - - A(void); - ~A(); - } - ... - and with clang++ (13.0.1): - ... - type = class A { - public: - int a; - - A(void); - ~A(void); - } - ... - and we observe that the destructor is printed differently. - - There's a difference in debug info between the two cases: in the clang case, - there's one artificial parameter, but in the g++ case, there are two, and - these similar cases are handled differently in cp_type_print_method_args. - - This is due to this slightly convoluted bit of code: - ... - i = staticp ? 0 : 1; - if (nargs > i) - { - while (i < nargs) - ... - } - else if (varargs) - gdb_printf (stream, "..."); - else if (language == language_cplus) - gdb_printf (stream, "void"); - ... - - The purpose of "i = staticp ? 0 : 1" is to skip the printing of the implicit - this parameter. - - In commit 5f4d1085085 ("c++/8218: Destructors w/arguments"), skipping of other - artificial parameters was added, but using a different method: rather than - adjusting the potential loop start, it skips the parameter in the loop. - - The observed difference in printing is explained by whether we enter the loop: - - in the clang case, the loop is not entered and we print "void". - - in the gcc case, the loop is entered, and nothing is printed. - - Fix this by rewriting the code to: - - always enter the loop - - handle whether arguments need printing in the loop - - keep track of how many arguments are printed, and - use that after the loop to print void etc. - such that we have the same for both gcc and clang: - ... - A(void); - ~A(void); - ... - - Note that I consider the discussion of whether we want to print: - - A(void) / ~A(void), or - - A() / ~A() - out-of-scope for this patch. - - Tested on x86_64-linux. - -2022-09-30 Alan Modra - - PR29626, Segfault when disassembling ARM code - PR 29626 - * arm-dis.c (mapping_symbol_for_insn): Return false on zero - symtab_size. Delete later symtab_size test. - -2022-09-30 GDB Administrator - - Automatic date update in version.in - -2022-09-29 Simon Marchi - - gdb: make target_auxv_parse static and rename - It is only used in auxv.c. Also, given it is not strictly a wrapper - around target_ops::auxv (since 27a48a9223d0 "Add auxv parsing to the - architecture vector."), I think that the name prefixed with target is a - bit misleading. Rename to just parse_auxv. - - Change-Id: I41cca055b92c8ede37c258ba6583746a07d8f77e - -2022-09-29 Simon Marchi - - gdb: make fprint_target_auxv static - It's only used in auxv.c. - - Change-Id: I4992d9aae37b6631a074ab99bbab2f619725b642 - -2022-09-29 Simon Marchi - - gdb: constify auxv parse functions - Constify the input parameters of the various auxv parse functions, they - don't need to modify the raw auxv data. - - Change-Id: I13eacd5ab8e925ec2b5c1f7722cbab39c41516ec - -2022-09-29 Simon Marchi - - gdb: constify target_stack::is_pushed - The target_ops parameters here can be made const. - - Change-Id: Ibc18b17d6b21d06145251a03e68aca90538117d6 - -2022-09-29 Keith Seitz - - Constify target_desc declarations - This patch changes various global target_desc declarations to const, thereby - correcting a prominent source of ODR violations in PowerPC-related target code. - The majority of files/changes are mechanical const-ifications accomplished by - regenerating the C files in features/. - - This also required manually updating mips-linux-tdep.h, s390-linux-tdep.h, - nios2-tdep.h, s390-tdep.h, arch/ppc-linux-tdesc.h, arch/ppc-linux-common.c, - and rs6000-tdep.c. - - Patch tested against the sourceware trybot, and fully regression tested against - our (Red Hat's) internal test infrastructure on Rawhide aarch64, s390x, x86_64, - and powerpcle. - - With this patch, I can finally enable LTO in our GDB package builds. [Tested - with a rawhide scratch build containing this patch.] - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=24835 - -2022-09-29 Keith Seitz - - cleanup: Add missing feature/ XML files to Makefile - This patch adds some missing .xml files to features/Makefile so that when the - directory's C files are regenerated, all files are appropriately remade. - - This has demonstrated that there have been several "misses" in regenerating - files in this directory. Namely, arm-secext.c and sparc{32,64}-solaris.c. For - the former case, there was what essentially amounts to a typo regarding the - create feature function's name. In the later case, this file has missed at least - one important update in July, 2020, when allocate_target_description was - changed to return a unique pointer. - - Those corrections are included. - -2022-09-29 Nick Clifton - - Add -B to the help output from gprof, and add suitable documentation. - PR 29627 - * gprof.c (usage): Add -B. - * gprof.texi (synopsis): Add -B. - (Output Options): Add entry for -B. - -2022-09-29 GDB Administrator - - Automatic date update in version.in - -2022-09-28 Pedro Alves - - Fix GDB build: ELF support check & -lzstd - GDB fails to build for me, on Ubuntu 20.04. I get: - - ... - CXXLD gdb - /usr/bin/ld: linux-tdep.o: in function `linux_corefile_thread(thread_info*, linux_corefile_thread_data*)': - /home/pedro/gdb/binutils-gdb/src/gdb/linux-tdep.c:1831: undefined reference to `gcore_elf_build_thread_register_notes(gdbarch*, thread_info*, gdb_signal, bfd*, std::unique_ptr >*, int*)' - /usr/bin/ld: linux-tdep.o: in function `linux_make_corefile_notes(gdbarch*, bfd*, int*)': - /home/pedro/gdb/binutils-gdb/src/gdb/linux-tdep.c:2117: undefined reference to `gcore_elf_make_tdesc_note(bfd*, std::unique_ptr >*, int*)' - collect2: error: ld returned 1 exit status - make[2]: *** [Makefile:2149: gdb] Error 1 - make[2]: Leaving directory '/home/pedro/gdb/binutils-gdb/build/gdb' - make[1]: *** [Makefile:11847: all-gdb] Error 2 - make[1]: Leaving directory '/home/pedro/gdb/binutils-gdb/build' - make: *** [Makefile:1004: all] Error 2 - - Those undefined functions exist in gdb/gcore-elf.c, which is only - included in the build if GDB's configure thinks that the target you're - configuring for is an ELF target. GDB's configure thinks my system - isn't ELF, which is incorrect. - - For the ELF support check, gdb/config.log shows: - - configure:17387: checking for ELF support in BFD - configure:17407: gcc -o conftest -I/home/pedro/gdb/binutils-gdb/src/gdb/../include -I../bfd -I/home/pedro/gdb/binutils-gdb/src/gdb/../bfd -g3 -O0 -L../bfd -L../libiberty -lzstd conftest.c -lbfd -liberty -lz -lncursesw -lm -ldl >&5 - /usr/bin/ld: ../bfd/libbfd.a(compress.o): in function `decompress_contents': - /home/pedro/gdb/binutils-gdb/src/bfd/compress.c:42: undefined reference to `ZSTD_decompress' - /usr/bin/ld: /home/pedro/gdb/binutils-gdb/src/bfd/compress.c:44: undefined reference to `ZSTD_isError' - /usr/bin/ld: ../bfd/libbfd.a(compress.o): in function `bfd_compress_section_contents': - /home/pedro/gdb/binutils-gdb/src/bfd/compress.c:195: undefined reference to `ZSTD_compress' - /usr/bin/ld: /home/pedro/gdb/binutils-gdb/src/bfd/compress.c:198: undefined reference to `ZSTD_isError' - collect2: error: ld returned 1 exit status - configure:17407: $? = 1 - ... - configure:17417: result: no - - Note how above, in the gcc command line, "-lzstd" appears before - "-lbfd". That explain the link failure. It should appear after, like - -lz does. - - This commit fixes it, by moving ZSTD_LIBS from LDFLAGS to LIBS, next - to -lz, in GDB_AC_CHECK_BFD, and regenerating gdb/configure. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29630 - Change-Id: I1f4128dde634e8ea04c9002904f1005a8b3a6863 - -2022-09-28 Simon Marchi - - gdb: remove trailing spaces in README - Change-Id: Ic7f8e415acd1bff6194cf08ed646bff45571f165 - -2022-09-28 Tom Tromey - - Treat Character as a discrete type in Ada - A user noticed that gdb would assert when printing a certain array - with array-indexes enabled. This turned out to be caused by the array - having an index type of Character, which is completely valid in Ada. - This patch changes the Ada support to recognize Character as a - discrete type, and adds some tests. - - Because this is Ada-specific and was also reviewed internally, I am - checking it in. - -2022-09-28 Nick Clifton - - The help document of size misses an option. - PR 29628 - * size.c (usage): Add -f. - * doc/binutils.texi (size): Add -f. - -2022-09-28 Clément Chigot - - ld/testsuite: force warnings when dealing with execstack tests - Binutils can be configured to avoid printing the execstack or RWD - segment warnings. In this case, the first test of PR ld/29072 will fail. - Fix that by always manually forcing the warnings for it. - - ld/ChangeLog: - - * testsuite/ld-elf/elf.exp (PR ld/29072): Force execstack and - RWD segment warnings. - -2022-09-28 Alan Modra - - Re: egrep in binutils - Multi-line patterns for grep are not supported on some old versions - of grep. - - binutils/ - * embedspu.sh: Replace multi-line grep with sed. - ld/ - * testsuite/ld-elfvers/vers.exp: Replace multi-line grep with sed. - -2022-09-28 Pedro Alves - - Renenerate {gdb,gdbserver}/configure - Pick up config/lib-ld.m4 changes from: - - commit 67d1991b785bdfef1d70cddfa0202b99b43ccce9 - Author: Alan Modra - AuthorDate: Wed Sep 28 13:37:31 2022 +0930 - Commit: Alan Modra - CommitDate: Wed Sep 28 13:37:31 2022 +0930 - - egrep in binutils - - Change-Id: Ifc84d30f1fca015e80bafa80f9a35616b0077220 - -2022-09-28 Nick Clifton - - The help document of as misses some many options - PR 29623 - * as.c (show_usage): Document the --dump-config, - --gdwarf-cie-version, --hash-size, --multibyte-handling, - and --reduce-memory-overheads options. - * config/tc-i386.c (md_show_usage): Document the -O option. - * doc/as.texi: Document the --dump-config, --emulation, - --hash-size, and --reduce-memory-overheads options. - -2022-09-28 Alan Modra - - egrep in binutils - Apparently some distros have a nagging egrep that helpfully tells you - egrep is deprecated and to use "grep -E". The nag message causes a ld - testsuite failure. What's more the advice isn't that good. The "-E" - flag may not be available with older versions of grep. - - This patch fixes bare invocation of egrep within binutils, replacing - it with the autoconf $EGREP or with grep. - - config/ - * lib-ld.m4 (AC_LIB_PROG_LD_GNU): Require AC_PROG_EGREP and - invoke $EGREP. - (AC_LIB_PROG_LD): Likewise. - binutils/ - * configure: Regenerate. - * embedspu.sh: Replace egrep with grep. - gold/ - * testsuite/Makefile.am (flagstest_compress_debug_sections.check): - Replace egrep with grep. - * testsuite/Makefile.in: Regenerate. - * testsuite/bnd_ifunc_1.sh: Replace egrep with $EGREP. - * testsuite/bnd_ifunc_2.sh: Likewise. - * testsuite/bnd_plt_1.sh: Likewise. - * testsuite/discard_locals_test.sh: Likewise. - * testsuite/gnu_property_test.sh: Likewise. - * testsuite/no_version_test.sh: Likewise. - * testsuite/pr18689.sh: Likewise. - * testsuite/pr26936.sh: Likewise. - * testsuite/retain.sh: Likewise. - * testsuite/split_i386.sh: Likewise. - * testsuite/split_s390.sh: Likewise. - * testsuite/split_x32.sh: Likewise. - * testsuite/split_x86_64.sh: Likewise. - * testsuite/ver_test_pr16504.sh: Likewise. - intl/ - * configure: Regenerate. - ld/ - * testsuite/ld-elfvers/vers.exp (test_ar): Replace egrep with grep. - -2022-09-28 Alan Modra - - regen bfd/configure - -2022-09-28 Alan Modra - - asan: _bfd_stab_section_find_nearest_line segv - The segv was on "info->strs[strsize - 1] = 0;" with strsize zero. OK, - if strsize is zero we don't have any filenames in stabs so no useful - info. - - * syms.c (_bfd_stab_section_find_nearest_line): Exit if either - stabsize or strsize is zero. - -2022-09-28 Alan Modra - - asan: segv in _bfd_archive_close_and_cleanup - Uninitialised arelt_data->parent_cache led to this segv. - - * pdb.c (pdb_get_elt_at_index): Clear arelt_data. - -2022-09-28 GDB Administrator - - Automatic date update in version.in - -2022-09-27 Fangrui Song - - sim: Link ZSTD_LIBS - This fixes linker errors in a `../../configure --enable-targets - --enable-sim; make all-gdb` build. - -2022-09-27 Tsukasa OI - - gold: Suppress "unused" variable warning on Clang - Clang generates a warning if there is a variable that is set but not used - otherwise ("-Wunused-but-set-variable"). On the default configuration, it - causes a build failure (unless "--disable-werror" is specified). - - Because the cause of this error is in the Bison-generated code - ($(srcdir)/gold/yyscript.y -> $(builddir)/gold/yyscript.c), - this commit suppresses this warning ("-Wunused-but-set-variable") by placing - DIAGNOSTIC_IGNORE_UNUSED_BUT_SET_VARIABLE macro at the end of user - prologue on yyscript.y. - - * yyscript.y: Suppress -Wunused-but-set-variable warning on - the Bison-generated code. - -2022-09-27 Fangrui Song - - libctf: Add ZSTD_LIBS to LIBS so that ac_cv_libctf_bfd_elf can be true - -2022-09-27 Fangrui Song - - binutils, gdb: support zstd compressed debug sections - PR29397 PR29563: Add new configure option --with-zstd which defaults to - auto. If pkgconfig/libzstd.pc is found, define HAVE_ZSTD and support - zstd compressed debug sections for most tools. - - * bfd: for addr2line, objdump --dwarf, gdb, etc - * gas: support --compress-debug-sections=zstd - * ld: support ELFCOMPRESS_ZSTD input and --compress-debug-sections=zstd - * objcopy: support ELFCOMPRESS_ZSTD input for - --decompress-debug-sections and --compress-debug-sections=zstd - * gdb: support ELFCOMPRESS_ZSTD input. The bfd change references zstd - symbols, so gdb has to link against -lzstd in this patch. - - If zstd is not supported, ELFCOMPRESS_ZSTD input triggers an error. We - can avoid HAVE_ZSTD if binutils-gdb imports zstd/ like zlib/, but this - is too heavyweight, so don't do it for now. - - ``` - % ld/ld-new a.o - ld/ld-new: a.o: section .debug_abbrev is compressed with zstd, but BFD is not built with zstd support - ... - - % ld/ld-new a.o --compress-debug-sections=zstd - ld/ld-new: --compress-debug-sections=zstd: ld is not built with zstd support - - % binutils/objcopy --compress-debug-sections=zstd a.o b.o - binutils/objcopy: --compress-debug-sections=zstd: binutils is not built with zstd support - - % binutils/objcopy b.o --decompress-debug-sections - binutils/objcopy: zstd.o: section .debug_abbrev is compressed with zstd, but BFD is not built with zstd support - ... - ``` - -2022-09-27 Alan Modra - - PR29617, ld segfaults when bfd_close fails - PR 29617 - * ldmain.c (main): Don't access output_bfd after bfd_close. - -2022-09-27 GDB Administrator - - Automatic date update in version.in - -2022-09-26 Simon Marchi - - gdb/testsuite: update field names in gdb-gdb.py.in - Patches that renamed the type::length and type::target_type fields - didn't update gdb-gdb.py.in accordingly, do that. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29599 - Change-Id: I0f3f37a94d43497789156b0ded4d2f2dd5b89496 - -2022-09-26 Simon Marchi - - gdb/testsuite: use gdb_test in gdb.gdb/python-helper.exp - If some command in there gives the wrong answer, we currently have to - wait for a timeout for the test to continue. For instance, I currently - see: - - print *val->type - $1 = Python Exception : Cannot take address of method length. - - (outer-gdb) FAIL: gdb.gdb/python-helper.exp: pretty print type (timeout) - - We can avoid this and modernize the test at the same time by using the - -prompt option of gdb_test. - - gdb_test_no_output currently accepts a -prompt_re option (the variable - name passed to parse_args defines the option name), but I think - it's a typo. It's supposed to be -prompt, like gdb_test. I can't find - anything using -prompt_re using grep. Change it to just "prompt". - - Change-Id: Icc0a9a0ef482e62460c708bccdd544c11d711eca - -2022-09-26 Simon Marchi - - gdb/testsuite: bump duration for the whole test in do_self_tests - When running gdb.gdb/python-helper.exp, I get some timeouts: - - continue - Continuing. - print 1 - - FAIL: gdb.gdb/python-helper.exp: hit breakpoint in outer gdb (timeout) - - At this time, GDB is actually processing the stop and reading in some - CUs. selftest_setup does bump the timeout, but it's not for the whole - test. - - Since debugging GDB with GDB is (unfortunately) a bit slow, bump the - timeout for the whole duration of the setup and body. On my optimized - build, the command takes just a bit more than the current timeout of 10 - seconds. But it's much slower if running the test on an unoptimized - build, so I think it's necessary to bump the timeout for that in any - case. - - Change-Id: I4d38285870e76c94f9d0bfdb60648a2e7f2cfa5d - -2022-09-26 Clément Chigot - - binutils/testsuite: handle the different install names of c++filt - c++filt is always named cxxfilt in a build directory, but in a install - directory it would be named either cxxfilt or c++filt (depending on - the host). Handle this last case in testsuite. - - binutils/ChangeLog: - * testsuite/config/default.exp (CXXFILE): if cxxfilt not found, - try c++filt. - -2022-09-26 Clément Chigot - - binutils/testsuite: skip gentestdlls related tests if missing - When launching the testsuite through runtest outside the build tree, - gentestdlls might not be available, this binary being created by make - check. - Simply untested the related tests instead of crashing. - - binutils/ChangeLog: - - * testsuite/binutils-all/objdump.exp: Skip dotnet tests if - gentestdlls is not available. - -2022-09-26 Tom de Vries - - [gdb/testsuite] Fix gdb.dwarf2/dw2-unspecified-type-foo.c with -m32 - When running test-case gdb.dwarf2/dw2-unspecified-type-foo.c with target board - unix/-m32, I run into: - ... - (gdb) PASS: gdb.dwarf2/dw2-unspecified-type.exp: ptype foo - p ((int (*) ()) foo) ()^M - $1 = -135698472^M - ... - - Add the missing "return 0" in foo, which fixes this. - - Tested on x86_64-linux. - -2022-09-26 Alan Modra - - PR29613, use of uninitialized value in objcopy - PR 29613 - * elf.c (_bfd_elf_write_secondary_reloc_section): Trim sh_size - back to relocs written. Use better types for vars. - -2022-09-26 Alan Modra - - PR29542, PowerPC gold internal error in get_output_view, - We were attempting to set a BSS style section contents. - - PR 29542 - * powerpc.cc (Output_data_plt_powerpc::do_write): Don't set .plt, - .iplt or .lplt section contents when position independent. - -2022-09-26 Alan Modra - - stab nearest_line bfd_malloc_and_get_section - bfd_malloc_and_get_section performs some sanity checks on the section - size before allocating memory. This patch avails the stab - nearest_line code of that sanity checking, and tidies up memory - afterward. - - * coffgen.c (_bfd_coff_close_and_cleanup): Call _bfd_stab_cleanup. - * elf.c (_bfd_elf_close_and_cleanup): Likewise. - * syms.c (_bfd_stab_section_find_nearest_line): Set *pinfo earlier. - Use bfd_malloc_and_get_section. Free malloc'd buffers on failure. - Malloc indextable. - (_bfd_stab_cleanup): New function. - * libbfd-in.h (_bfd_stab_cleanup): Declare. - * libbfd.h: Regnerate. - -2022-09-26 Alan Modra - - PKG_CHECK_MODULES for msgpack and jansson - Using AS_IF rather than shell "if" is recommended for conditionals - that contain non-trivial autoconf macros, because autoconf will emit - any AC_REQUIREd autoconf macro expansions outside of the conditional. - This makes them available elsewhere in the configure script. - - binutils/ - * configure.ac (msgpack): Use "AS_IF" rather than "if". - * configure: Regenerate. - ld/ - * configure.ac (jansson): Use "AS_IF" rather than "if". - * configure: Regenerate. - -2022-09-26 GDB Administrator - - Automatic date update in version.in - -2022-09-25 GDB Administrator - - Automatic date update in version.in - -2022-09-24 Magne Hov - - gdb/source.c: Fix undefined behaviour dereferencing empty string - When a source file's dirname is solely made up of directory separators - we end up trying to dereference the last character of an empty string - with std::string::back, which results in undefined behaviour. A typical - use case where this can happen is when the root directory "/" is used as - a compilation directory. - - With libstdc++.so.6.0.28 we get no out-of-bounds checks and the byte - preceding the storage of the empty string is returned. The character - value of this byte depends on heap implementation and usage, but when - this byte happens to hold the value of the directory separator character - we go on to call std::string::pop_back on the empty string which results - in an out_of_range exception which terminates GDB. - - Fix this by using path_join. prepare_path_for_appending ensures that the - filename component is relative. - - The testsuite has been run before and after the change and no - regressions were found. - -2022-09-24 Enze Li - - gdbserver: remove unused for loop - In this commit, - - commit cf6c1e710ee162a5adb0ae47acb731f2bfecc956 - Date: Mon Jul 11 20:53:48 2022 +0800 - - gdbserver: remove unused variable - - I removed an unused variable in handle_v_run. Pedro then pointed out - that the for loop after it was also unused. After a period of smoke - testing, no exceptions were found. - - Tested on x86_64-linux. - -2022-09-24 Alan Modra - - The problem with warning in elf_object_p - elfcode.h can emit three warnings in elf_object_p for various things, - "section extending past end of file", "corrupt string table index", - and "program header with invalid alignment". The problem with doing - this is that the warning can be emitted for multiple possible targets - as each one is tried. I was looking at a fuzzer testcase that had an - object file with 6144 program headers, 5316 of which had invalid - alignment. It would be bad enough to get 5316 messages all the same, - but this object was contained in an archive and resulted in 4975776 - repeats. - - Some trimming can be done by not warning if the bfd is already marked - read_only, as is done for the "section extending past end of file" - warning, but that still results in an unacceptable number of - warnings for object files in archives. Besides that, it is just wrong - to warn about a problem detected by a target elf_object_p other than - the one that actually matches. At some point we might have more - target specific warnings. - - So what to do? One obvious solution is to remove the warnings. - Another is to poke any warning strings into the target xvec, emitting - them if that xvec is the final one chosen. This also has the benefit - of solving the archive problem. A warning when recursing into - _bfd_check_format for the first element of the archive (to find the - correct target for the archive) will still be on the xvec at the point - that target is chosen for the archive. However, target xvecs are - read-only. Thus the need for per_xvec_warn to logically extend - bfd_target with a writable field. I've made per_xvec_warn one larger - than bfd_target_vector to provide one place for user code that makes - private copies of target xvecs. - - * elfcode.h (elf_swap_shdr_in, elf_object_p): Stash potential - warnings in _bfd_per_xvec_warn location. - * format.c (clear_warnmsg): New function. - (bfd_check_format_matches): Call clear_warnmsg before trying - a new xvec. Print warnings for the successful non-archive - match. - * targets.c: Include libiberty.h. - (_bfd_target_vector_entries): Use ARRAY_SIZE. - (per_xvec_warn): New. - (_bfd_per_xvec_warn): New function. - * Makefile.am (LIBBFD_H_FILES): Add targets.c. - * Makefile.in: Regenerate. - * libbfd.h: Regenerate. - -2022-09-24 Alan Modra - - Re: bfd_cleanup for object_p - Bits still missing from commit cb001c0d283d. - - * aoutx.h (aout_@var{size}_some_aout_object_p): Correct synopsis. - * i386lynx.c (lynx_core_file_p): Correct return type. - * ptrace-core.c (ptrace_unix_core_file_p): Likewise. - -2022-09-24 GDB Administrator - - Automatic date update in version.in - -2022-09-23 John Baldwin - - Support AT_USRSTACKBASE and AT_USRSTACKLIM. - FreeBSD's kernel has recently added two new ELF auxiliary vector - entries to describe the location of the user stack for the initial - thread in a process. - - This change displays the proper name and description of these entries - in 'info auxv'. - -2022-09-23 Christoph Müllner - - RISC-V: Add Zawrs ISA extension support - This patch adds support for the Zawrs ISA extension - ("wrs.nto" and "wrs.sto" instructions). - - The specification can be found here: - https://github.com/riscv/riscv-zawrs/blob/main/zawrs.adoc - -2022-09-23 Simon Marchi - - gdb/testsuite/tui: start GDB with "set filename-display basename" - The test gdb.tui/tui-missing-src.exp fails on my CI machine, and I - concluded that it is caused by the long source directory name: - - /home/jenkins/workspace/binutils-gdb_master_linuxbuild/platform/jammy-amd64/target_board/unix/src/binutils-gdb - - The long name causes some particular redrawing that doesn't happen for - shorter directories, and causes a Term::command call to return too - early. - - This can be reproduced by cloning the binutils-gdb repo in a directory - with a name similar to the one shown above. - - $ pwd - /home/simark/workspace/binutils-gdb_master_linuxbuild/platform/jammy-amd64/target_board/unix/src/binutils-gdb/build/gdb - $ make check-read1 TESTS="gdb.tui/tui-missing-src.exp" - FAIL: gdb.tui/tui-missing-src.exp: checking if inside f2 () - FAIL: gdb.tui/tui-missing-src.exp: f2.c must be displayed in source window - FAIL: gdb.tui/tui-missing-src.exp: check source box is empty after return - FAIL: gdb.tui/tui-missing-src.exp: Back in main - - Note that using "make check" instead of "make check-read1" only shows - the last 2 failures for me. - - When running gdb.tui/tui-missing-src.exp in a directory with a shorter - name, the terminal looks like this by the time the "checking if inside - f2" test runs: - - Screen Dump (size 80 columns x 24 rows, cursor at column 6, row 23): - 0 +-...ld/binutils-gdb-noasan/gdb/testsuite/outputs/gdb.tui/tui-missing-src/f2.c-+ - 1 | 1 | - 2 | 2 int | - 3 | 3 f2 (int x) | - 4 | 4 { | - 5 | > 5 x <<= 1; | - 6 | 6 return x+5; | - 7 | 7 } | - 8 | 8 | - 9 | 9 | - 10 | 10 | - 11 | 11 | - 12 | 12 | - 13 | 13 | - 14 +------------------------------------------------------------------------------+ - 15 multi-thre Thread 0x7ffff7cc07 In: f2 L5 PC: 0x555555555143 - 16 at /home/simark/build/binutils-gdb-noasan/gdb/testsuite/outputs/gdb.tui/tui- - 17 missing-src/main.c:6 - 18 (gdb) next - 19 (gdb) step - 20 f2 (x=4) - 21 at /home/simark/build/binutils-gdb-noasan/gdb/testsuite/outputs/gdb.tui/tui- - 22 missing-src/f2.c:5 - 23 (gdb) - PASS: gdb.tui/tui-missing-src.exp: checking if inside f2 () - - When running the `Term::command "step"` just before, GDB writes the - "step", which makes the `wait_for` proc go in the "looking for the - prompt" mode, to know when the command's execution is complete. As some - new output appears, lines that must disappear are deleted using the - "Delete Line" operation [1] and some new ones are drawn. The source - window gets redrawn with the contents of the f2.c file. Then, GDB - writes the prompt (at line 23 above), which satisfies `wait_for`, which - then returns. The state of the terminal is therefore correct for the - "check if inside f2" and "f2.c must be displayed in the source window" - tests. - - In the non-working case, the terminal looks like this by the time the - "check if inside f2" test runs: - - Screen Dump (size 80 columns x 24 rows, cursor at column 6, row 17): - 0 +------------------------------------------------------------------------------+ - 1 | | - 2 | | - 3 | | - 4 | | - 5 | | - 6 | | - 7 | [ No Source Available ] | - 8 | | - 9 | | - 10 | | - 11 | | - 12 | | - 13 | | - 14 +------------------------------------------------------------------------------+ - 15 multi-thre Thread 0x7ffff7cc1b In: main L7 PC: 0x555555555128 - 16 sing-src/main.c:6 - 17 (gdb) ary breakpoint 1, main () - 18 at /home/simark/workspace/binutils-gdb_master_linuxbuild/platform/jammy-amd6 - 19 4/target_board/unix/src/binutils-gdb/build/gdb/testsuite/outputs/gdb.tui/tui-mis - 20 sing-src/main.c:6 - 21 (gdb) next - 22 (gdb) step - 23 - FAIL: gdb.tui/tui-missing-src.exp: checking if inside f2 () - - What happened is: GDB wrote the "step" command, which make the - `wait_for` proc go in its "looking for the prompt" mode. However, - curses decided to redraw whatever scrolled up to line 17 using some - standard character insertion operations: - - +++ Cursor Down (1), cursor: (16, 0) -> (17, 0) - +++ Inserting string '(' - +++ Inserted char '(', cursor: (17, 0) -> (17, 1) - +++ Inserted string '(', cursor: (17, 0) -> (17, 1) - +++ Inserting string 'g' - +++ Inserted char 'g', cursor: (17, 1) -> (17, 2) - +++ Inserted string 'g', cursor: (17, 1) -> (17, 2) - +++ Inserting string 'd' - +++ Inserted char 'd', cursor: (17, 2) -> (17, 3) - +++ Inserted string 'd', cursor: (17, 2) -> (17, 3) - +++ Inserting string 'b' - +++ Inserted char 'b', cursor: (17, 3) -> (17, 4) - +++ Inserted string 'b', cursor: (17, 3) -> (17, 4) - +++ Inserting string ')' - +++ Inserted char ')', cursor: (17, 4) -> (17, 5) - +++ Inserted string ')', cursor: (17, 4) -> (17, 5) - +++ Inserting string ' ' - +++ Inserted char ' ', cursor: (17, 5) -> (17, 6) - +++ Inserted string ' ', cursor: (17, 5) -> (17, 6) - - And that causes `wait_for` to think the "step" command is complete. - This is wrong, as the prompt at line 17 isn't the prompt drawn after the - completion of the "step" command. The subsequent tests now run with a - partially updated screen (what is shown above) and obviously fail. - - The ideal way to fix this would be for `wait_for` to be smarter, to - avoid it confusing the different prompts drawn. - - However, I would also like to reduce the variations in TUI test results - due to the directories (source and build) in which tests are ran. TUI - tests are more prone to differences in test results due to variations in - directory names than other tests, as it makes curses take different - redrawing decisions. So in this patch, I propose to make TUI tests use - "set filename-display basename", which makes GDB omit directory names - when it prints file names. This way, regardless of where you run the - tests, you should get the same results (all other things being equal). - - Doing this happens to fix my failures and makes my CI happy (which in - turns makes me happy). To be clear, I understand that this does not fix - the root issue of `proc wait_for` being confused. However, it makes TUI - test runs be more similar for everyone, such that there's less chance of - TUI tests randomly failing for somebody. If some other change triggers - the `wait_for` problem again in the future, hopefully everybody will see - the problem and we can work on getting it fixed more easily than if just - one unlucky person sees the problem. - - Note that there are other reasons why TUI tests could vary, like - different curses library versions taking different re-drawing decisions. - However, I think my change is a good step towards more stable test - results. - - [1] https://vt100.net/docs/vt510-rm/DL.html - - Change-Id: Ib18da83317e7b78a46f77892af0d2e39bd261bf5 - -2022-09-23 Jiangshuai Li - - gdb/csky add cskyv2-linux.xml for cskyv2-linux.c - Add cskyv2-linux.xml for re-generating cskyv2-linux.c if needed. - Also update cskyv2-linux.c. - -2022-09-23 Alan Modra - - pdb: _bfd_generic_close_and_cleanup - Every format that might appear inside a generic archive needs to call - _bfd_generic_close_and_cleanup, so that the archive element lookup - htab can be tidied on closing an element. Otherwise you get stale - entries in the htab pointing at freed and perhaps reused memory, - resulting in segfaults when the archive is closed. - - Calling _bfd_generic_close_and_cleanup on close means tdata needs to - be set up too, since pdb claims to be of format bfd_archive. - - * pdb.c (pdb_close_and_cleanup): Define as - _bfd_generic_close_and_cleanup. - (pdb_archive_p): Set up tdata for bfd_archive format. - -2022-09-23 Alan Modra - - Don't attempt to compress bss sections - It doesn't make sense to try to compress a section without contents - since those sections take no space on disk. Compression can only - increase the disk image size. - - * coffgen.c (make_a_section_from_file): Exclude !SEC_HAS_CONTENTS - sections from compression and decompression. - * elf.c (_bfd_elf_make_section_from_shdr): Likewise. - -2022-09-23 GDB Administrator - - Automatic date update in version.in - -2022-09-22 Lancelot SIX - - gdb/testsuite/lib/future.exp: follow dejagnu default_target_compile - GDB's testsuite can override dejagnu's default_target_compile if the - system provided dejagnu installation does not provide support to compile - languages GDB needs. - - Recent version of dejagnu (1.6.3, installed on RHEL-9) includes ba60272 - "Establish a default C compiler by evaluating [find_gcc] if no other - compiler is given."[1]. This commit removed calls such as - `set_board_info compiler "[find_gcc]"` from the various baseboards - and has default_target_compile call `find_gcc` itself to find a compiler - if none was specified by the board description. - - On systems with dejagnu-1.6.3, if GDB's overrides is needed to support - languages still unknown to dejagnu, we end up in the following - situation: - - The system board files do not set the C compiler anymore, - - GDB's replacement for default_target_compile assumes that the - compiler should have been set up by the board file. - - In this situation, no one sets the C compiler for the board and as a - result many test are not compiled and not executed: - - [...] - Running .../gdb/testsuite/gdb.base/bt-on-error-and-warning.exp ... - gdb compile failed, default_target_compile: No compiler to compile with - Running .../gdb/testsuite/gdb.base/dprintf-non-stop.exp ... - gdb compile failed, default_target_compile: No compiler to compile with - Running .../gdb/testsuite/gdb.base/structs3.exp ... - gdb compile failed, default_target_compile: No compiler to compile with - [...] - - We are observing this error with ROCgdb[2], a downstream port of GDB - supporting AMD GPUs. This port needs to use GDB's override of - default_target_compile to compile HIP programs since dejagnu does not - provide support for this language yet. - - This patch changes gdb_default_target_compile_1 in a similar way - default_target_compile has been updated so both implementations remain - compatible. Even if this is not strictly required by GDB just yet, - I believe keeping both implementations in sync desirable. - - Using board files provided with dejagnu <=1.6.2 is still supported: if - the compiler is set by the board file, gdb_default_target_compile_1 uses - it and does not need `find_gcc`. - - Patch tested on x86_64 RHEL-9 and ubuntu-20.04 on top of GDB and ROCgdb. - - [1] http://git.savannah.gnu.org/gitweb/?p=dejagnu.git;a=commit;h=ba60272a5ac6f6a7012acca03f596a6ed003f044 - [2] https://github.com/ROCm-Developer-Tools/ROCgdb - - Change-Id: Ibff52684d9cab8243a7c6748ecbd29f50c37e669 - -2022-09-22 Christoph Müllner - - RISC-V: Add T-Head MemPair vendor extension - T-Head has a range of vendor-specific instructions. - Therefore it makes sense to group them into smaller chunks - in form of vendor extensions. - - This patch adds the XTheadMemPair extension, a collection of T-Head specific - two-GP-register memory operations. - The 'th' prefix and the "XTheadMemPair" extension are documented in a PR - for the RISC-V toolchain conventions ([1]). - - [1] https://github.com/riscv-non-isa/riscv-toolchain-conventions/pull/19 - - Co-developed-by: Lifang Xia - -2022-09-22 Christoph Müllner - - RISC-V: Add support for literal instruction arguments - This patch introduces support for arbitrary literal instruction - arguments, that are not encoded in the opcode. - - A typical use case for this feature would be an instruction that - applies an implicit shift by a constant value on an immediate - (that is a real operand). With this patch it is possible to make - this shift visible in the dissasembly and support such artificial - parameter as part of the asssembly code. - - Co-developed-by: Lifang Xia - -2022-09-22 Christoph Müllner - - RISC-V: Add T-Head MemIdx vendor extension - T-Head has a range of vendor-specific instructions. - Therefore it makes sense to group them into smaller chunks - in form of vendor extensions. - - This patch adds the XTheadMemIdx extension, a collection of T-Head specific - GPR memory access instructions. - The 'th' prefix and the "XTheadMemIdx" extension are documented in a PR - for the RISC-V toolchain conventions ([1]). - - In total XTheadCmo introduces the following 44 instructions - (BU,HU,WU only for loads (zero-extend instead of sign-extend)): - - * {L,S}{D,W,WU,H,HU,B,BU}{IA,IB} rd, rs1, imm5, imm2 - * {L,S}R{D,W,WU,H,HU,B,BU} rd, rs1, rs2, imm2 - * {L,S}UR{D,W,WU,H,HU,B,BU} rd, rs1, rs2, imm2 - - [1] https://github.com/riscv-non-isa/riscv-toolchain-conventions/pull/19 - - Co-developed-by: Lifang Xia - -2022-09-22 Christoph Müllner - - RISC-V: Add T-Head FMemIdx vendor extension - T-Head has a range of vendor-specific instructions. - Therefore it makes sense to group them into smaller chunks - in form of vendor extensions. - - This patch adds the XTheadFMemIdx extension, a collection of - T-Head-specific floating-point memory access instructions. - The 'th' prefix and the "XTheadFMemIdx" extension are documented - in a PR for the RISC-V toolchain conventions ([1]). - - [1] https://github.com/riscv-non-isa/riscv-toolchain-conventions/pull/19 - - Co-developed-by: Lifang Xia - -2022-09-22 Christoph Müllner - - RISC-V: Add T-Head MAC vendor extension - T-Head has a range of vendor-specific instructions. - Therefore it makes sense to group them into smaller chunks - in form of vendor extensions. - - This patch adds the XTheadMac extension, a collection of - T-Head-specific multiply-accumulate instructions. - The 'th' prefix and the "XTheadMac" extension are documented - in a PR for the RISC-V toolchain conventions ([1]). - - [1] https://github.com/riscv-non-isa/riscv-toolchain-conventions/pull/19 - - Co-developed-by: Lifang Xia - -2022-09-22 Christoph Müllner - - RISC-V: Add T-Head CondMov vendor extension - T-Head has a range of vendor-specific instructions. - Therefore it makes sense to group them into smaller chunks - in form of vendor extensions. - - This patch adds the XTheadCondMov extension, a collection of - T-Head-specific conditional move instructions. - The 'th' prefix and the "XTheadCondMov" extension are documented - in a PR for the RISC-V toolchain conventions ([1]). - - [1] https://github.com/riscv-non-isa/riscv-toolchain-conventions/pull/19 - - Co-developed-by: Lifang Xia - -2022-09-22 Christoph Müllner - - RISC-V: Add T-Head Bitmanip vendor extension - T-Head has a range of vendor-specific instructions. - Therefore it makes sense to group them into smaller chunks - in form of vendor extensions. - - This patch adds the XThead{Ba,Bb,Bs} extensions, a collection of - T-Head-specific bitmanipulation instructions. - The 'th' prefix and the "XThead{Ba,Bb,Bs}" extension are documented - in a PR for the RISC-V toolchain conventions ([1]). - - [1] https://github.com/riscv-non-isa/riscv-toolchain-conventions/pull/19 - - Co-developed-by: Lifang Xia - -2022-09-22 Christoph Müllner - - RISC-V: Add support for arbitrary immediate encoding formats - This patch introduces support for arbitrary signed or unsigned immediate - encoding formats. The formats have the form "XsN@S" and "XuN@S" with N - being the number of bits and S the LSB position. - - For example an immediate field of 5 bytes that encodes a signed value - and is stored in the bits 24-20 of the instruction word can use the - format specifier "Xs5@20". - - Co-developed-by: Lifang Xia - -2022-09-22 Christoph Müllner - - RISC-V: Add T-Head SYNC vendor extension - T-Head has a range of vendor-specific instructions. - Therefore it makes sense to group them into smaller chunks - in form of vendor extensions. - - This patch adds the XTheadSync extension, a collection of - T-Head-specific multi-processor synchronization instructions. - The 'th' prefix and the "XTheadSync" extension are documented in a PR - for the RISC-V toolchain conventions ([1]). - - [1] https://github.com/riscv-non-isa/riscv-toolchain-conventions/pull/19 - - Co-developed-by: Lifang Xia - -2022-09-22 Christoph Müllner - - RISC-V: Add T-Head CMO vendor extension - T-Head has a range of vendor-specific instructions. - Therefore it makes sense to group them into smaller chunks - in form of vendor extensions. - - This patch adds the XTheadCmo extension, a collection of T-Head specific - cache management operations. - The 'th' prefix and the "XTheadCmo" extension are documented in a PR - for the RISC-V toolchain conventions ([1]). - - In total XTheadCmo introduces the following 21 instructions: - - * DCACHE.{C,CI,I}ALL - * DCACHE.{C,CI,I}{PA,VA,SW} rs1 - * DCACHE.C{PAL1,VAL1} rs1 - * ICACHE.I{ALL,ALLS} - * ICACHE.I{PA,VA} rs1 - * L2CACHE.{C,CI,I}ALL - - Contrary to Zicbom, the XTheadCmo instructions don't have a constant - displacement, therefore we have a different syntax for the arguments. - To clarify this is intended behaviour, there is a set of negative test - for Zicbom-style arguments in x-thead-cmo-fail.s. - - [1] https://github.com/riscv-non-isa/riscv-toolchain-conventions/pull/19 - - v2: - - Add missing DECLARE_INSN() list - - Fix ordering - - Co-developed-by: Lifang Xia - -2022-09-22 Christoph Müllner - - RISC-V: Add generic support for vendor extensions - This patch introduces changes that allow the integration of vendor ISA - extensions: - * Define a list of vendor extensions (riscv_supported_vendor_x_ext) - where vendor extensions can be added - * Introduce a section with a table in the documentation where vendor - extensions can be added - - To add a vendor extension that consists of instructions only, - the following things need to be done: - * Add the extension to the riscv_supported_vendor_x_ext list - * Add lookup entry in riscv_multi_subset_supports - * Documenting the extension in c-riscv.texti - * Add test cases for all instructions - * Add MATCH*/MASK* constants and DECLARE_INSN() for all instructions - * Add new instruction class to enum riscv_insn_class - * Define the instructions in riscv_opcodes - * Additional changes if necessary (depending on the instructions) - - Co-developed-by: Lifang Xia - -2022-09-22 Tom de Vries - - [gdb/symtab] Add all_comp_units/all_type_units views on all_units - Add all_comp_units/all_type_units views on all_units. - - Having the views allows us to: - - easily get the number of CUs or TUs in all_units, and - - easily access the nth CU or TU. - - This minimizes the use of tu_stats.nr_tus. - - Tested on x86_64-linux. - -2022-09-22 Tom de Vries - - [gdb/symtab] Rename all_comp_units to all_units - Mechanically rename all_comp_units to all_units: - ... - $ sed -i 's/all_comp_units/all_units/' gdb/dwarf2/* - ... - - Tested on x86_64-linux. - -2022-09-22 Yoshinori Sato - - opcodes: SH fix bank register disassemble. - * sh-dis.c (print_insn_sh): Enforce bit7 of LDC Rm,Rn_BANK and STC - Rm_BANK,Rn is always 1. - -2022-09-22 Tsukasa OI - - include: Add macro to ignore -Wunused-but-set-variable - "-Wunused-but-set-variable" warning option can be helpful to track variables - that are written but not read thereafter. But it can be harmful if some of - the code is auto-generated and we have no ways to deal with it. - - The particular example is Bison-generated code. - - The new DIAGNOSTIC_IGNORE_UNUSED_BUT_SET_VARIABLE macro can be helpful on - such cases. A typical use of this macro is to place this macro before the - end of user prologues on Bison (.y) files. - - include/ChangeLog: - - * diagnostics.h (DIAGNOSTIC_IGNORE_UNUSED_BUT_SET_VARIABLE): New. - -2022-09-22 Tsukasa OI - - include: Add macro to ignore -Wuser-defined-warnings - User-defined warnings (on Clang, "-Wuser-defined-warnings") can be harmful - if we have specified "-Werror" and we have no control to disable the warning - ourself. The particular example is Gnulib. - - Gnulib generates a warning if the system version of certain functions - are used (to redirect the developer to use Gnulib version). However, - it can be harmful if we cannot easily replace them (e.g. the target is in - the standard C++ library). - - The new DIAGNOSTIC_IGNORE_USER_DEFINED_WARNINGS macro can be helpful on such - cases. A typical use of this macro is to place this macro before including - certain system headers. - - include/ChangeLog: - - * diagnostics.h (DIAGNOSTIC_IGNORE_USER_DEFINED_WARNINGS): New. - -2022-09-22 Andrew Burgess - - gdb/python: restrict the names accepted by gdb.register_window_type - I noticed that, from Python, I could register a new TUI window that - had whitespace in its name, like this: - - gdb.register_window_type('my window', MyWindowType) - - however, it is not possible to then use this window in a new TUI - layout, e.g.: - - (gdb) tui new-layout foo my window 1 cmd 1 - Unknown window "my" - (gdb) tui new-layout foo "my window" 1 cmd 1 - Unknown window ""my" - (gdb) tui new-layout foo my\ window 1 cmd 1 - Unknown window "my\" - - GDB clearly uses the whitespace to split the incoming command line. - - I could fix this by trying to add a mechanism by which we can use - whitespace within a window name, but it seems like an easier solution - if we just forbid whitespace within a window name. Not only is this - easier, but I think this is probably the better solution, identifier - names with spaces in would mean we'd need to audit all the places a - window name could be printed and ensure that the use of a space didn't - make the output ambiguous. - - So, having decided to disallow whitespace, I then thought about other - special characters. We currently accept anything as a window name, - and I wondered if this was a good idea. - - My concerns were about how special characters used in a window name - might cause confusion, for example, we allow '$' in window names, - which is maybe fine now, but what if one day we wanted to allow - variable expansion when creating new layouts? Or what about starting - a window name with '-'? We already support a '-horizontal' option, - what if we want to add more in the future? Or use of the special - character '{' which has special meaning within a new layout? - - In the end I figured it might make sense to place some restrictive - rules in place, and then relax the rules later if/when users complain, - we can consider each relaxation as its requested. - - So, I propose that window names should match this regular expression: - - [a-zA-Z][-_.a-zA-Z0-9]* - - There is a chance that there is user code in the wild which will break - with the addition of this change, but hopefully adapting to the new - restrictions shouldn't be too difficult. - -2022-09-22 Bruno Larsen - - gdb/testsuite: Add test to step through function epilogue - The testsuite implicitly tests GDB's ability to step through epilogues - in multiple tests, without doing it explicitly anywhere. This is - unfortunate, as clang does not emit epilogue information, so using clang - on our testsuite makes many tests fail. This patch adds a central, - explicit test for walking through the epilogue so we can safely remove - this from other tests and have them working with clang. - - The test created attempts to step through a simple epilogue, an - epilogue that ends on another epilogue, and epilogues leading to other - function calls. - -2022-09-22 Bruno Larsen - - gdb.base/skip.exp: Use finish to exit functions - gdb.base/skip.exp was making use of a fixed number of step commands to - exit some functions. This caused some problems when using clang to test - GDB, as GDB would need fewer steps to reach the desired spots. For - instance, when testing in the section "step after disabling 3", the log - looks like this: - - Breakpoint 4, main () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:32 - 32 x = baz ((bar (), foo ())); - (gdb) step - bar () at binutils-gdb/gdb/testsuite/gdb.base/skip1.c:21 - 21 return 1; - (gdb) PASS: gdb.base/skip.exp: step after disabling 3: step 1 - step - foo () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:42 - 42 return 0; - (gdb) PASS: gdb.base/skip.exp: step after disabling 3: step 2 - step - main () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:34 - 34 test_skip_file_and_function (); - (gdb) step - test_skip_file_and_function () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:59 - 59 test_skip (); - (gdb) FAIL: gdb.base/skip.exp: step after disabling 3: step 3 - step - test_skip () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:48 - 48 } - (gdb) PASS: gdb.base/skip.exp: step after disabling 3: step 4 - step - test_skip_file_and_function () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:60 - 60 skip1_test_skip_file_and_function (); - (gdb) FAIL: gdb.base/skip.exp: step after disabling 3: step 5 - - This shows that the feature is working but because the inferior lands in - a different location, it registers as a failure. Seeing as along with - this difference, there are also some differences that depend on gcc - versions (where gdb might stop back at line 32 before entering foo), it - would not be easy to test for this behavior using steps and analzing - where the inferior stops at each point. On the other hand, using - gdb_step_until is not feasible because we'd possibly gloss over stepping - into baz and rendering the whole test useless. Instead, skip.exp now - uses finish to leave functions, synchronizing through compilers and - compiler versions. Some test names were also changed to be a bit more - descriptive. The new log looks like this, independently of compiler used: - - Breakpoint 4, main () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:32 - 32 x = baz ((bar (), foo ())); - (gdb) step - bar () at binutils-gdb/gdb/testsuite/gdb.base/skip1.c:21 - 21 return 1; - (gdb) PASS: gdb.base/skip.exp: step after disabling 3: step into bar - finish - Run till exit from #0 bar () at binutils-gdb/gdb/testsuite/gdb.base/skip1.c:21 - main () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:32 - 32 x = baz ((bar (), foo ())); - Value returned is $2 = 1 - (gdb) PASS: gdb.base/skip.exp: step after disabling 3: return from bar - step - foo () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:42 - 42 return 0; - (gdb) PASS: gdb.base/skip.exp: step after disabling 3: step into foo - finish - Run till exit from #0 foo () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:42 - main () at binutils-gdb/gdb/testsuite/gdb.base/skip.c:32 - 32 x = baz ((bar (), foo ())); - Value returned is $3 = 0 - (gdb) PASS: gdb.base/skip.exp: step after disabling 3: Return from foo - step - 34 test_skip_file_and_function (); - (gdb) PASS: gdb.base/skip.exp: step after disabling 3: step and skip baz - -2022-09-22 Bruno Larsen - - fix gdb.base/jit-elf.exp when testing with clang - When using clang as the compiler for the target, gdb.base/jit-elf.exp - was failing because the filename displayed when GDB attached to the - inferior was only showing up as with a relative path, like so: - - (gdb) attach 3674146 - Attaching to program: /home/blarsen/Documents/gdb-build/gdb/testsuite/outputs/gdb.base/jit-elf/jit-elf-main, process 3674146 - Reading symbols from /lib64/libm.so.6... - Reading symbols from .gnu_debugdata for /lib64/libm.so.6... - (No debugging symbols found in .gnu_debugdata for /lib64/libm.so.6) - Reading symbols from /lib64/libc.so.6... - (No debugging symbols found in /lib64/libc.so.6) - Reading symbols from /lib64/ld-linux-x86-64.so.2... - [Thread debugging using libthread_db enabled] - Using host libthread_db library "/lib64/libthread_db.so.1". - 0x00000000004013ff in main (argc=3, argv=0x7fffffffd820) at ../../../common/git-repos/binutils-gdb/gdb/testsuite/gdb.base/jit-elf-main.c:118 - 118| WAIT_FOR_GDB; i = 0; /* gdb break here 1 */ - (gdb) FAIL: gdb.base/jit-elf.exp: attach: one_jit_test-2: break here 1: attach - - While gcc's output is as follows: - - (gdb) attach 3592961 - Attaching to program: /home/blarsen/Documents/gdb-build/gdb/testsuite/outputs/gdb.base/jit-elf/jit-elf-main, process 3592961 - Reading symbols from /lib64/libm.so.6... - Reading symbols from .gnu_debugdata for /lib64/libm.so.6... - (No debugging symbols found in .gnu_debugdata for /lib64/libm.so.6) - Reading symbols from /lib64/libc.so.6... - (No debugging symbols found in /lib64/libc.so.6) - Reading symbols from /lib64/ld-linux-x86-64.so.2... - [Thread debugging using libthread_db enabled] - Using host libthread_db library "/lib64/libthread_db.so.1". - main (argc=3, argv=0x7fffffffd860) at /home/blarsen/Documents/gdb-build/gdb/testsuite/../../../common/git-repos/binutils-gdb/gdb/testsuite/gdb.base/jit-elf-main.c:118 - 118| WAIT_FOR_GDB; i = 0; /* gdb break here 1 */ - (gdb) PASS: gdb.base/jit-elf.exp: attach: one_jit_test-2: break here 1: attach - - This difference only happens when GDB's configure is ran using a - relative path, but seeing as testing the full path is not important for - this specific test, it feels worth fixing anyway. To fix the false - positive, the regexp for checking where gdb has stopped was relaxed a - little to allow the relative path. - -2022-09-22 Bruno Larsen - - gdb/testsuite: fix gdb.base/msym-bp-shl when running with Clang - When trying to test gdb.base/msym-bp-shl.exp using clang, it would have - many failures because one of the version of the foo function was being - optimized away. Adding __attribute__ ((used)) to it fixed this. - -2022-09-22 Bruno Larsen - - gdb/testsuite: fix testing gdb.base/skip-inline.exp with clang - When testing gdb.base/skip-inline.exp using clang, we get failures - when trying to step out of functions, since clang requires one fewer - step when compared to gcc. The inferior gets increasingly out of sync - as the test continues because of this difference, which generates those - failures. - - This commit fixes this by switching those hardcoded steps to - gdb_step_until, to guarantee that the inferior is always synced to what - the test expects. This approach does not work for the parts that use - step 2 or step 3, so when we identify that clang is being used, those - tests are skipped. - -2022-09-22 Bruno Larsen - - Change gdb.base/skip-solib.exp deal with lack of epilogue information - When running gdb.base/skip-solib.exp, the backtrace tests could fail with - compilers that associated epilogue instructions with the last statement - line of the function, instead of associating it with the closing brace, - despite the feature being fully functional. As an example, when testing - skipping the function square, the testsuite would show - - Breakpoint 1, main () at (...)/binutils-gdb/gdb/testsuite/gdb.base/skip-solib-main.c:5 - 5 return square(0); - (gdb) step - 0x00007ffff7cef560 in __libc_start_call_main () from /lib64/libc.so.6 - (gdb) PASS: gdb.base/skip-solib.exp: ignoring solib file: step - bt - #0 0x00007ffff7cef560 in __libc_start_call_main () from /lib64/libc.so.6 - #1 0x00007ffff7cef60c in __libc_start_main_impl () from /lib64/libc.so.6 - #2 0x0000000000401065 in _start () - (gdb) FAIL: gdb.base/skip-solib.exp: ignoring solib file: bt - - Which means that the feature is working, the testsuite is just - mis-identifying it. To avoid this problem, the skipped function calls - have been sent to a line before `return`, so epilogues won't factor in. - -2022-09-22 Bruno Larsen - - gdb/testsuite: Add a proc to test where compiler links the epilogue - Different compilers link the epilogue of functions to different lines. - As an example, gcc links it to the closing brace of the function, - whereas clang links it to the last statement of the function. This - difference is important for the testsuite, since the where GDB will land - after a step can be wildly different. Where possible, this dependency - should be side-stepped in the testsuite, but it isn't always possible, - so this commit adds a gdb_caching_proc that is able to detect where the - epilogue is linked, so tests can react accordingly. - -2022-09-22 Clément Chigot - - ld/testsuite: allow to force another directory for gcc linker - Add a new variable "ld_testsuite_tmpdir" to enable manual configuration - of the -B flag added to gcc calls. This flag ensure that gcc is invoking - the linker and the assembler we want to test. - - When launching the testsuite outside of the build tree, the links made - by the testsuite in tmpdir/ld will point to nothing. Thus, even with the - PATH correctly setup towards the linker directory, gcc might end up - falling back to its default linker. Hence this variable to ensure that - gcc, whatever happens, is using the linker we want. - - ld/ChangeLog: - - * testsuite/config/default.exp: Allow to change -B flag with - ld_testsuite_bindir variable. - -2022-09-22 Clément Chigot - - ld/testsuite: skip bootstrap.exp when OFILES are missing - OFILES are normally provided through an environment variable set by - Makefiles. However, when launching the testsuite directly through - runtest outside the build tree, it can be hard to retrieve them. - Thus, they can be missing. - Instead of letting tcl raise an error when trying to access this - OFILES variable, skip bootstrap.exp if it doesn't exist. - - ld/ChangeLog: - - * testsuite/ld-bootstrap/bootstrap.exp: Skip if OFILES is - missing - -2022-09-22 Tsukasa OI - - RISC-V: Remove "b" operand type from disassembler - There are a few operand types not used by any RISC-V instructions. - - - Cx - - Vf - - Ve - - [ - - ] - - b - - But most of them has a reasoning to keep them: - - - Cx : Same as "Ct" except it has a constraint to have rd == rs2 - (similar to "Cw"). Although it hasn't used, its role is clear - enough to implement a new instruction with this operand type. - - Vf, Ve : Used by vector AMO instructions (not ratified and real - instructions are not upstreamed yet). - - [, ] : Unused tokenization symbols. Reserving them is not harmful - and a vendor may use this symbol for special purposes. - - ... except "b". I could not have found any reference to this operand type - except it works like the "s" operand type. Historically, it seems... it's - just unused from the beginning. Its role is not clear either. - - On such cases, we should vacate this room for the new operand type with - much clearer roles. - - opcodes/ChangeLog: - - * riscv-dis.c (print_insn_args): Remove 'b' operand type. - -2022-09-22 Tsukasa OI - - RISC-V: Add macro-only operands to validate_riscv_insn - Although they are not (and should not be) reachable, following macro-only - operands are parsed in the `validate_riscv_insn' function and ignored. - That function also notes that they are macro-only. - - - "A" - - "B" - - "I" - - Following this convention, this commit adds three remaining macro-only - operands to this function. By doing this, we could instead choose to reject - those operands from appearing in regular instructions later. - - - "c" (used by call, tail and jump macros) - - "VM" (used by vmsge.vx and vmsgeu.vx macros) - - "VT" (likewise) - - gas/ChangeLog: - - * config/tc-riscv.c (validate_riscv_insn): Add "c", "VM" and "VT" - macro-only operand types. - -2022-09-22 Vladimir Mezentsev - - gprofng: fix -Wduplicated-cond warning - gprofng/ChangeLog - 2022-09-21 Vladimir Mezentsev - - * src/collctrl.cc: Fix -Wduplicated-cond warning. - -2022-09-22 GDB Administrator - - Automatic date update in version.in - -2022-09-21 Alan Modra - - bfd BLD-POTFILES.in dependencies - A file that consists of a list of files doesn't depend on those files - being built. This patch came from trying to avoid a maintainer-mode - make -j bug, where the recipe for targmatch.h was being run twice in - parallel. Typical output shown below. - - make[2]: Entering directory '/build/gas/all/bfd' - GEN bfdver.h - GEN elf32-target.h - GEN elf64-target.h - GEN targmatch.h - Making info in po - make[3]: Entering directory '/build/gas/all/bfd/po' - cd .. && make po/SRC-POTFILES.in - cd .. && make po/BLD-POTFILES.in - make[4]: Entering directory '/build/gas/all/bfd' - GEN elf32-aarch64.c - GEN elf64-aarch64.c - GEN elf32-ia64.c - GEN elf64-ia64.c - GEN elf32-loongarch.c - GEN elf64-loongarch.c - GEN elf32-riscv.c - GEN elf64-riscv.c - GEN peigen.c - GEN pepigen.c - GEN pex64igen.c - GEN pe-aarch64igen.c - GEN targmatch.h - make[4]: Entering directory '/build/gas/all/bfd' - CCLD doc/chew.stamp - mv: cannot stat 'targmatch.new': No such file or directory - make[4]: *** [Makefile:2325: targmatch.h] Error 1 - - * Makefile.am (po/BLD-POTFILES.in): Don't depend on $(BLD_POTFILES). - (po/SRC-POTFILES.in): Don't depend on $(SRC_POTFILES). - -2022-09-21 Simon Marchi - - gdbsupport: move fileio_errno_to_host to fileio.{h,cc} and rename - gdb_bfd.c and remote.c contain identical implementations of a - fileio_error -> errno function. Factor that out to - gdbsupport/fileio.{h,cc}. - - Rename it fileio_error_to_host, for symmetry with host_to_fileio_error. - - Change-Id: Ib9b8807683de2f809c94a5303e708acc2251a0df - -2022-09-21 Simon Marchi - - gdbsupport: convert FILEIO_* macros to an enum - Converting from free-form macros to an enum gives a bit of type-safety. - This caught places where we would assign host error numbers to what - should contain a target fileio error number, for instance in - target_fileio_pread. - - I added the FILEIO_SUCCESS enumerator, because - remote.c:remote_hostio_parse_result initializes the remote_errno output - variable to 0. It seems better to have an explicit enumerator than to - assign a value for which there is no enumerator. I considered - initializing this variable to FILEIO_EUNKNOWN instead, such that if the - remote side replies with an error and omits the errno value, we'll get - an errno that represents an error instead of 0 (which reprensents no - error). But it's not clear what the consequences of that change would - be, so I prefer to err on the side of caution and just keep the existing - behavior (there is no intended change in behavior with this patch). - - Note that remote_hostio_parse_resul still reads blindly what the remote - side sends as a target errno into this variable, so we can still end up - with a nonsensical value here. It's not good, but out of the scope of - this patch. - - Convert host_to_fileio_error and fileio_errno_to_host to return / accept - a fileio_error instead of an int, and cascade the change in the whole - chain that uses that. - - Change-Id: I454b0e3fcf0732447bc872252fa8e57d138b0e03 - -2022-09-21 Simon Marchi - - gdbsupport: move include/gdb/fileio.h contents to fileio.h - I don't see why include/gdb/fileio.h is placed there. It's not - installed by "make install", and it's not included by anything outside - of gdb/gdbserver/gdbsupport. - - Move its content back to gdbsupport/fileio.h. I have omitted the bits - inside an `#if 0`, since it's obviously not used, as well as the - "limits" constants, which are also unused. - - Change-Id: I6fbc2ea10fbe4cfcf15f9f76006b31b99c20e5a9 - -2022-09-21 Simon Marchi - - gdbsupport: change path_join parameter to array_view - When a GDB built with -D_GLIBCXX_DEBUG=1 reads a binary with a single - character name, we hit this assertion failure: - - $ ./gdb -q --data-directory=data-directory -nx ./x - /usr/include/c++/12.1.0/string_view:239: constexpr const std::basic_string_view<_CharT, _Traits>::value_type& std::basic_string_view<_CharT, _Traits>::operator[](size_type) const [with _CharT = char; _Traits = std::char_traits; const_reference = const char&; size_type = long unsigned int]: Assertion '__pos < this->_M_len' failed. - - The backtrace: - - #3 0x00007ffff6c0f002 in std::__glibcxx_assert_fail (file=, line=, function=, condition=) at /usr/src/debug/gcc/libstdc++-v3/src/c++11/debug.cc:60 - #4 0x000055555da8a864 in std::basic_string_view >::operator[] (this=0x7fffffffcc30, __pos=1) at /usr/include/c++/12.1.0/string_view:239 - #5 0x00005555609dcb88 in path_join[abi:cxx11](gdb::array_view > const>) (paths=...) at /home/simark/src/binutils-gdb/gdbsupport/pathstuff.cc:203 - #6 0x000055555e0443f4 in path_join () at /home/simark/src/binutils-gdb/gdb/../gdbsupport/pathstuff.h:84 - #7 0x00005555609dc336 in gdb_realpath_keepfile[abi:cxx11](char const*) (filename=0x6060000a8d40 "/home/simark/build/binutils-gdb-one-target/gdb/./x") at /home/simark/src/binutils-gdb/gdbsupport/pathstuff.cc:122 - #8 0x000055555ebd2794 in exec_file_attach (filename=0x7fffffffe0f9 "./x", from_tty=1) at /home/simark/src/binutils-gdb/gdb/exec.c:471 - #9 0x000055555f2b3fb0 in catch_command_errors (command=0x55555ebd1ab6 , arg=0x7fffffffe0f9 "./x", from_tty=1, do_bp_actions=false) at /home/simark/src/binutils-gdb/gdb/main.c:513 - #10 0x000055555f2b7e11 in captured_main_1 (context=0x7fffffffdb60) at /home/simark/src/binutils-gdb/gdb/main.c:1209 - #11 0x000055555f2b9144 in captured_main (data=0x7fffffffdb60) at /home/simark/src/binutils-gdb/gdb/main.c:1319 - #12 0x000055555f2b9226 in gdb_main (args=0x7fffffffdb60) at /home/simark/src/binutils-gdb/gdb/main.c:1344 - #13 0x000055555d938c5e in main (argc=5, argv=0x7fffffffdcf8) at /home/simark/src/binutils-gdb/gdb/gdb.c:32 - - The problem is this line in path_join: - - gdb_assert (strlen (path) == 0 || !IS_ABSOLUTE_PATH (path)); - - ... where `path` is "x". IS_ABSOLUTE_PATH eventually calls - HAS_DRIVE_SPEC_1: - - #define HAS_DRIVE_SPEC_1(dos_based, f) \ - ((f)[0] && ((f)[1] == ':') && (dos_based)) - - This macro accesses indices 0 and 1 of the input string. However, `f` - is a string_view of length 1, so it's incorrect to try to access index - 1. We know that the string_view's underlying object is a null-terminated - string, so in practice there's no harm. But as far as the string_view - is concerned, index 1 is considered out of bounds. - - This patch makes the easy fix, that is to change the path_join parameter - from a vector of to a vector of `const char *`. Another solution would - be to introduce a non-standard gdb::cstring_view class, which would be a - view over a null-terminated string. With that class, it would be - correct to access index 1, it would yield the NUL character. If there - is interest in having this class (it has been mentioned a few times in - the past) I can do it and use it here. - - This was found by running tests such as gdb.ada/arrayidx.exp, which - produce 1-char long filenames, so adding a new test is not necessary. - - Change-Id: Ia41a16c7243614636b18754fd98a41860756f7af - -2022-09-21 Simon Marchi - - gdb: remove TYPE_LENGTH - Remove the macro, replace all uses with calls to type::length. - - Change-Id: Ib9bdc954576860b21190886534c99103d6a47afb - -2022-09-21 Simon Marchi - - gdb: add type::length / type::set_length - Add the `length` and `set_length` methods on `struct type`, in order to remove - the `TYPE_LENGTH` macro. In this patch, the macro is changed to use the - getter, so all the call sites of the macro that are used as a setter are - changed to use the setter method directly. The next patch will remove the - macro completely. - - Change-Id: Id1090244f15c9856969b9be5006aefe8d8897ca4 - -2022-09-21 Simon Marchi - - gdb: remove TYPE_TARGET_TYPE - Remove the macro, replace all uses by calls to type::target_type. - - Change-Id: Ie51d3e1e22f94130176d6abd723255282bb6d1ed - -2022-09-21 Simon Marchi - - gdb: add type::target_type / type::set_target_type - Add the `target_type` and `set_target_type` methods on `struct type`, in order - to remove the `TYPE_TARGET_TYPE` macro. In this patch, the macro is changed to - use the getter, so all the call sites of the macro that are used as a setter - are changed to use the setter method directly. The next patch will remove the - macro completely. - - Change-Id: I85ce24d847763badd34fdee3e14b8c8c14cb3161 - -2022-09-21 Tsukasa OI - - RISC-V: Fix riscv_set_tso declaration - To avoid -Werror=strict-prototypes, this commit changes () to (void). - This is because "()" possibly means a function prototype with indeterminate - arguments on old C standards. - - gas/ChangeLog: - - * config/tc-riscv.c (riscv_set_tso): Fix declaration. - -2022-09-21 Alan Modra - - PR29566, objdump -p considers an empty .gnu.version_r invalid - Allow and ignore an empty section. - - PR 29566 - * elf.c (bfd_section_from_shdr): Don't set elf_dynverdef or - elf_dynverref for empty sections. - (_bfd_elf_slurp_version_tables): Remove now redundant tests. - -2022-09-21 Tsukasa OI - - RISC-V: Set EF_RISCV_TSO also on .option arch - This is a minor fix to commit 96462b012988d35ebb1137a2ad9fd0a96547d79a - ("RISC-V: Implement Ztso extension"). Currently, it sets EF_RISCV_TSO ELF - flag when initial ISA string contains the 'Ztso' extension. However, GAS - has a way to update the ISA string: ".option arch". - - When the architecture is updated by ".option arch", EF_RISCV_RVC ELF flag - is set when the 'C' extension is detected. Analogously, this commit sets - the EF_RISCV_TSO when the 'Ztso' extension is detected. - - gas/ChangeLog: - - * config/tc-riscv.c (s_riscv_option): Set TSO ELF flag if the - 'Ztso' extension is specified via ".option arch" directive. - -2022-09-21 Alan Modra - - PR29573, addr2line doesn't display file/line for local symbols - The DWARF standard is clear that DW_AT_linkage_name is optional. - Compilers may not provide the attribute on functions and variables, - even though the language mangles names. g++ does not for local - variables and functions. Without DW_AT_linkage_name, mangled object - file symbols can't be directly matched against the source-level - DW_AT_name in DWARF info. One possibility is demangling the object - file symbols, but that comes with its own set of problems: - 1) A demangler might not be available for the compiler/language. - 2) Demangling doesn't give the source function name as stored in - DW_AT_name. Class and template parameters must be stripped at - least. - - So this patch takes a simpler approach. A symbol matches DWARF info - if the DWARF address matches the symbol address, and if the symbol - name contains the DWARF name as a sub-string. Very likely the name - matching is entirely superfluous. - - PR 29573 - * dwarf.c (lookup_symbol_in_function_table): Match a symbol - containing the DWARF source name as a substring. - (lookup_symbol_in_variable_table): Likewise. - (_bfd_dwarf2_find_nearest_line_with_alt): If stash_find_line_fast - returns false, fall back to comp_unit_find_line. - -2022-09-21 Alan Modra - - dwarf2.c: simplify best_fit_len tests - * dwarf2.c (lookup_address_in_function_table): Simplify - best_fit_len test. - (info_hash_lookup_funcinfo): Likewise. - (lookup_symbol_in_function_table): Likewise, also reorder tests - and check "file" is set. - (lookup_symbol_in_variable_table): Reorder tests. - -2022-09-21 Alan Modra - - dwarf2.c: mangle_style - non_mangled incorrectly returned "true" for Ada. Correct that, and - add a few more non-mangled entries. Return a value suitable for - passing to cplus_demangle to control demangling. - - * dwarf2.c: Include demangle.h. - (mangle_style): Rename from non_mangled. Return DMGL_* value - to suit lang. Adjust all callers. - -2022-09-21 Alan Modra - - dwarf2.c remove varinfo and funcinfo sec field - The "sec" field in these structures is only set and used in lookup - functions. It always starts off as NULL. So the only possible effect - of the field is to modify the return of the lookup, which was its - purpose back in 2005 when HJ fixed PR990. Since then we solved the - problem of relocatable object files with the fix for PR2338, so this - field is now redundant. - - * dwarf.c (struct funcinfo, struct varinfo): Remove "sec" field. - (lookup_symbol_in_function_table): Don't set or test "sec". - (lookup_symbol_in_variable_table): Likewise. - (info_hash_lookup_funcinfo, info_hash_lookup_varinfo): Likewise. - -2022-09-21 Tsukasa OI - - configure: Pass CPPFLAGS_FOR_BUILD to subdirs - Because CPPFLAGS_FOR_BUILD is used in some subdirectories (through - bfd/warning.m4), not AC_SUBSTing the variable causes minor issues. - - Fortunately, it didn't cause severe errors but error messages related to - @CPPFLAGS_FOR_BUILD@ (not AC_SUBSTed CPPFLAGS_FOR_BUILD variable passed - to subdirectories through Makefile) remain in config.log. - - To avoid invalid invocation of preprocessor for build environment, we - need to set proper CPPFLAGS_FOR_BUILD (may be empty) and pass it to - subdirectories that need it. This is what this commit does. - - ChangeLog: - - * configure.ac: Pass CPPFLAGS_FOR_BUILD to subdirectories. - * configure: Regenerate. - -2022-09-21 Shihua - - RISC-V: Implement Ztso extension - This patch support ZTSO extension. It will turn on the tso flag for elf_flags - once we have enabled Ztso extension. This is intended to implement v0.1 of - the proposed specification which can be found in Chapter 25 of, - https://github.com/riscv/riscv-isa-manual/releases/download/draft-20220723-10eea63/riscv-spec.pdf. - - bfd\ChangeLog: - - * elfnn-riscv.c (_bfd_riscv_elf_merge_private_bfd_data): Set TSO flag. - * elfxx-riscv.c: Add Ztso's arch. - - binutils\ChangeLog: - - * readelf.c (get_machine_flags): Set TSO flag. - - gas\ChangeLog: - - * config/tc-riscv.c (riscv_set_tso): Ditto. - (riscv_set_arch): Ditto. - * testsuite/gas/riscv/ztso.d: New test. - - include\ChangeLog: - - * elf/riscv.h (EF_RISCV_TSO): Ditto. - -2022-09-21 Nelson Chu - - RISC-V: Always generate R_RISCV_CALL_PLT reloc for call in assembler. - Since we have the same behaviors of CALL and CALL_PLT relocs in linker for now, - https://github.com/bminor/binutils-gdb/commit/3b1450b38c644f99aa2e211747b428b9f8d15cca - - And the psabi already deprecate the CALL reloc, - https://github.com/riscv-non-isa/riscv-elf-psabi-doc/commit/a0dced85018d7a0ec17023c9389cbd70b1dbc1b0 - - Therefore, we should always generate R_RISCV_CALL_PLT reloc for call, even if - it has @plt postfix. I believe LLVM (https://reviews.llvm.org/D132530) already - support this, so GNU as should do the same thing. - - gas/ - * config/tc-riscv.c (riscv_ip): Always generate CALL_PLT reloc for - call, even if it has @plt postfix. - * testsuite/gas/riscv/no-relax-reloc.d: Updated CALL to CALL_PLT. - * testsuite/gas/riscv/relax-reloc.d: Likewise. - ld/ - * testsuite/ld-riscv-elf/variant_cc-r.d: Updated CALL to CALL_PLT. - -2022-09-21 GDB Administrator - - Automatic date update in version.in - -2022-09-21 Alan Modra - - Re: PowerPC64 pcrel got relocs against local symbols - The last patch wasn't all that shiny. There are rather a lot more - relocations that can hit the assertion in md_apply_fix if the symbol - is local or absolute. Fix them all. - - * config/tc-ppc.c (ppc_force_relocation): Add all relocs that - expect a symbol in md_apply_fix. Remove tls pcrel relocs - already covered in general tls match range. - -2022-09-21 Alan Modra - - looping in alpha_vms_slurp_relocs - The direct cause for the looping was failing to test for error return - from _bfd_vms_get_object_record inside a while(1) loop. Fix that. - Also record status of first alpha_vms_slurp_relocs call and return - that for all subsequent calls. (The object format has one set of - relocation records for all sections.) If the first call fails, all - others should too. - - * vms-alpha.c (struct vms_private_data_struct): Make reloc_done - a tri-state int. - (alpha_vms_slurp_relocs): Set reloc_done to 1 on success, -1 on - failure. Return that status on subsequent calls. Check - _bfd_vms_get_object_record return status. - (alpha_vms_get_reloc_upper_bound): Return status from - alpha_vms_slurp_relocs. - (alpha_vms_write_exec): Exclude sections with contents NULL due - to previous errors from layout, and don't try to write them. - -2022-09-20 Dmitry Selyutin - - ppc/svp64: test setvl ms operand - -2022-09-20 Tom Tromey - - Make stdin_event_handler static - I noticed that stdin_event_handler is only used in event-top.c, so - this patch changes it to be 'static'. - -2022-09-20 Tom Tromey - - Constify some target_so_ops instances - This changes some target_so_ops instances to be const. This makes - their use a little more obvious (they can't be mutated) and also - allows for the removal of some initialization code. - - Move solib_ops into gdbarch - This changs solib_ops to be an ordinary gdbarch value and updates all - the uses. This removes a longstanding FIXME and makes the code - somewhat cleaner as well. - - Remove current_target_so_ops - current_target_so_ops is only set in a single place. It seems better - to simply remove it. - -2022-09-20 Andrew Burgess - - gdb/testsuite: add a debuginfod-support.exp helper library - We currently have a single test for GDB's debuginfod support, this is - gdb.debuginfod/fetch_src_and_symbols.exp, this script does all the - setup, starts debuginfod, and then does the testing. - - This commit tries to split the existing script in two, there is a new - library lib/debuginfod-support.exp, which contains a helper functions - related to running debuginfod tests. All the code in the new library - is basically copied from the existing test case (which is why I - retained the copyright date range on the new library), with some minor - adjustments to try and make the code a little more generic. - - One change I made, for example, is the library offers functions to - shut down debuginfod, previously we just relied on expect shutting - down debuginfod when dejagnu completed. - - The existing test script is updated to make use of the new library - code, and this test is still passing for me. The only change in the - test results is a single test where I changed the name to remove the - port number from the test name - the port number can change from run - to run, so could make it hard to compare test results. - - I have also done a little light house keeping on the original test - script, updating and adding new comments, and making use of - proc_with_prefix in a couple of places. - -2022-09-20 liuzhensong - - LoongArch: Set macro SUB_SEGMENT_ALIGN to 0. - -2022-09-20 Nick Clifton - - Stop strip from complaining about empty note sections when stripping a binary for a second time. - * objcopy.c (copy_object): Do not issue a warning message when - encountering empty .gnu.build.attribute sections. - - New Serbian translations for various binutils sub-directories. - -2022-09-20 Zeke Lu - - Bug 29580 - typo in warning message: .note.gnu.build-id data size is too bug - -2022-09-20 Xi Ruoyao - - LoongArch: Fix R_LARCH_IRELATIVE insertion after elf_link_sort_relocs - loongarch_elf_finish_dynamic_symbol is called after elf_link_sort_relocs - if -z combreloc. elf_link_sort_relocs redistributes the contents of - .rela.* sections those would be merged into .rela.dyn, so the slot for - R_LARCH_IRELATIVE may be out of relplt->contents now. - - To make things worse, the boundary check - - dyn < dyn + relplt->size / sizeof (*dyn) - - is obviously wrong ("x + 10 < x"? :), causing the issue undetected - during the linking process and the resulted executable suddenly crashes - at runtime. - - The issue was found during an attempt to add static-pie support to the - toolchain. - - Fix it by iterating through the inputs of .rela.dyn to find the slot. - -2022-09-20 Xi Ruoyao - - LoongArch: Don't write into GOT for local ifunc - Local ifuncs are always resolved at runtime via R_LARCH_IRELATIVE, so - there is no need to write anything into GOT. And when we write the GOT - we actually trigger a heap-buffer-overflow: If a and b are different - sections, we cannot access something in b with "a->contents + (offset - from a)" because "a->contents" and "b->contents" are heap buffers - allocated separately, not slices of a large buffer. - - So stop writing into GOT for local ifunc now. - -2022-09-20 GDB Administrator - - Automatic date update in version.in - -2022-09-19 Vladimir Mezentsev - - gprofng: build documentation only if BUILD_MAN is true - gprofng/ChangeLog - 2022-09-16 Vladimir Mezentsev - - PR gprofng/29476 - * gprofng/Makefile.am: Build documentation only if BUILD_MAN is true - * gprofng/Makefile.in: Rebuild. - * gprofng/configure: Rebuild. - -2022-09-19 Enze Li - - gdb: add ATTRIBUTE_PRINTF to gdb_bfd_error_handler - I see this error when building with clang, - - CXX gdb_bfd.o - gdb_bfd.c:1180:43: error: format string is not a string literal [-Werror,-Wformat-nonliteral] - const std::string str = string_vprintf (fmt, ap_copy); - ^~~ - 1 error generated. - - This patch adds missing ATTRIBUTE_PRINTF to fix the error. - - Tested on x86_64-linux with gcc 12 and clang 14. - -2022-09-19 GDB Administrator - - Automatic date update in version.in - -2022-09-18 GDB Administrator - - Automatic date update in version.in - -2022-09-17 Tom de Vries - - [gdb/symtab] Fix "file index out of range" complaint - With the test-case included in this commit, we run into this FAIL: - ... - (gdb) p var^M - During symbol reading: file index out of range^M - $1 = 0^M - (gdb) FAIL: gdb.dwarf2/dw2-no-code-cu.exp: p var with no complaints - ... - - This is a regression since commit 6d263fe46e0 ("Avoid bad breakpoints with - --gc-sections"), which contains this change in read_file_scope: - ... - - handle_DW_AT_stmt_list (die, cu, fnd, lowpc); - + if (lowpc != highpc) - + handle_DW_AT_stmt_list (die, cu, fnd, lowpc); - ... - - The change intends to avoid a problem with a check in - lnp_state_machine::check_line_address, but also prevents the file and dir - tables from being read, which causes the complaint. - - Fix the FAIL by reducing the scope of the "lowpc != highpc" condition to the - call to dwarf_decode_lines in handle_DW_AT_stmt_list. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29561 - -2022-09-17 GDB Administrator - - Automatic date update in version.in - -2022-09-17 Kevin Buettner - - BFD error message suppression test case - This commit adds a GDB test case which tests GDB's BFD error handler - hook for suppressing output of all but the first identical messages. - - See the comment at the beginning of bfd-errors.exp for details about - this new test. - - I've tested this test for both 32- and 64-bit ELF files and also - on both little endian and big endian machines. It also works for - both native and remote targets. The only major restriction is that - it only works for ELF targets. - -2022-09-17 Kevin Buettner - - Suppress printing of superfluous BFD error messages - This commit adds a hook to the BFD error handler for suppressing - identical messages which have been output once already. - - It's motivated by this Fedora bug... - - https://bugzilla.redhat.com/show_bug.cgi?id=2083315 - - ...in which over 900,000 BFD error messages are output when attaching - to firefox. From the bug report, the messages all say: - - BFD: /usr/lib/debug/usr/lib64/firefox/libxul.so-100.0-2.fc35.x86_64.debug: attempt to load strings from a non-string section (number 38) - - Since there's no (additional) context which might assist the user in - determining what's wrong, there's really no point in outputting more - than one message. Of course, if BFD should output some - other/different message, it should be output too, but all future - messages identical to those already output should be suppressed. - - For the firefox problem, it turned out that there were only 37 - sections, but something was referring to section #38. I haven't - investigated further to find out how this came to be. - - Despite this problem, useful debugging might still be done, especially - if the user doesn't care about debugging the problematic library. - - If it turns out that knowing the quantity of messages might be useful, - I've implemented the suppression mechanism by keeping a count of each - identical message. A new GDB command, perhaps a 'maintenance' - command, could be added to print out each message along with the - count. I haven't implemented this though because I'm not convinced of - its utility. Also, the BFD message printer has support for BFD- - specific format specifiers. The BFD message strings that GDB stores - in its map are sufficient for distinguishing messages from each - other, but are not identical to those output by BFD's default error - handler. So, that problem would need to be solved too. - -2022-09-16 Tom de Vries - - [gdb/symtab] Handle named DW_TAG_unspecified_type DIE - With the test-case included in the patch, we run into: - ... - (gdb) info types -q std::nullptr_t^M - During symbol reading: unsupported tag: 'DW_TAG_unspecified_type'^M - ^M - File /usr/include/c++/7/x86_64-suse-linux/bits/c++config.h:^M - 2198: typedef decltype(nullptr) std::nullptr_t;^M - (gdb) FAIL: gdb.dwarf2/nullptr_t.exp: info types -q std::nullptr_t \ - without complaint - ... - - Fix the complaint by handling DW_TAG_unspecified_type in new_symbol, and verify - in the test-case using "maint print symbols" that the symbol exists. - - Tested on x86_64-linux, with gcc 7.5.0 and clang 13.0. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17271 - -2022-09-16 Tom de Vries - - [gdb/tdep] Fix PowerPC IEEE 128-bit format arg passing - On a powerpc system with gcc 12 built to default to 128-bit IEEE long double, - I run into: - ... - (gdb) print find_max_long_double_real(4, ldc1, ldc2, ldc3, ldc4)^M - $8 = 0 + 0i^M - (gdb) FAIL: gdb.base/varargs.exp: print \ - find_max_long_double_real(4, ldc1, ldc2, ldc3, ldc4) - ... - - This is due to incorrect handling of the argument in ppc64_sysv_abi_push_param. - - Fix this and similar cases, and expand the test-case to test handling of - homogeneous aggregates. - - Tested on ppc64le-linux, power 10. - - Co-Authored-By: Ulrich Weigand - Tested-by: Carl Love - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29543 - -2022-09-16 Tom de Vries - - [gdb/testsuite] Fix gdb.dwarf2/dw2-dir-file-name.exp for aarch64 - [ Another attempt at fixing the problem described in commit cd919f5533c - ("[gdb/testsuite] Fix gdb.dwarf2/dw2-dir-file-name.exp"). ] - - When running the test-case gdb.dwarf2/dw2-dir-file-name.exp with - aarch64-linux, we run into: - ... - (gdb) continue^M - Continuing.^M - ^M - Breakpoint 2, compdir_missing__ldir_missing__file_basename () at \ - tmp-dw2-dir-file-name.c:999^M - (gdb) FAIL: gdb.dwarf2/dw2-dir-file-name.exp: \ - compdir_missing__ldir_missing__file_basename: continue to breakpoint: \ - compdir_missing__ldir_missing__file_basename - ... - - The breakpoint set at compdir_missing__ldir_missing__file_basename_label, - address 0x400608 starts at a line entry: - ... - CU: tmp-dw2-dir-file-name.c: - File name Line number Starting address View Stmt - tmp-dw2-dir-file-name.c 999 0x400608 x - tmp-dw2-dir-file-name.c 1000 0x40062c x - tmp-dw2-dir-file-name.c - 0x40062c - ... - and therefore the breakpoint is printed without instruction address. - - In contrast, for x86_64-linux, we have the breakpoint printed with instruction - address: - ... - (gdb) continue^M - Continuing.^M - ^M - Breakpoint 2, 0x004004c1 in compdir_missing__ldir_missing__file_basename () \ - at tmp-dw2-dir-file-name.c:999^M - (gdb) PASS: gdb.dwarf2/dw2-dir-file-name.exp: \ - compdir_missing__ldir_missing__file_basename: continue to breakpoint: \ - compdir_missing__ldir_missing__file_basename - ... - - The breakpoint set at compdir_missing__ldir_missing__file_basename_label, - address 0x004004c1 doesn't start at a line entry: - ... - CU: tmp-dw2-dir-file-name.c: - File name Line number Starting address View Stmt - tmp-dw2-dir-file-name.c 999 0x4004bd x - tmp-dw2-dir-file-name.c 1000 0x4004d3 x - tmp-dw2-dir-file-name.c - 0x4004d3 - ... - - Fix this by: - - unifying behaviour between the archs by adding an explicit line number entry - for the address compdir_missing__ldir_missing__file_basename_label, making - the FAIL reproducible on x86_64-linux. - - expecting the breakpoint to be printed without instruction address. - - Tested on x86_64-linux and aarch64-linux. - -2022-09-16 Tom de Vries - - [gdb] Handle pending ^C after rl_callback_read_char - In completion tests in various test-cases, we've been running into these - "clearing input line" timeouts: - ... - (gdb) $cmd^GPASS: gdb.gdb/unittest.exp: tab complete "$cmd" - FAIL: gdb.gdb/unittest.exp: tab complete "$cmd" (clearing input line) (timeout) - ... - where $cmd == "maintenance selftest name_that_does_not_exist". - - AFAIU, the following scenario happens: - - expect sends "$cmd\t" - - gdb detects the stdin event, and calls rl_callback_read_char until it - comes to handle \t - - readline interprets the \t as completion, tries to complete, fails to do so, - outputs a bell (^G) - - expect sees the bell, and proceeds to send ^C - - readline is still in the call to rl_callback_read_char, and stores the - signal in _rl_caught_signal - - readline returns from the call to rl_callback_read_char, without having - handled _rl_caught_signal - - gdb goes to wait for the next event - - expect times out waiting for "Quit", the expected reaction for ^C - - Fix this by handling pending signals after each call to rl_callback_read_char. - - The fix is only available for readline 8.x, if --with-system-readline provides - an older version, then the fix is disabled due to missing function - rl_check_signals. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=27813 - -2022-09-16 Alan Modra - - PowerPC64 pcrel got relocs against local symbols - Not that anyone would want to indirect via the GOT when an address can - be loaded directly with pla, the following: - - pld 3,x@got@pcrel - x: - - leads to "Internal error in md_apply_fix", because the generic parts - of assembler fixup handling convert the fx_pcrel fixup to one without - a symbol. Stop that happening. - - * config/tc-ppc.c (ppc_force_relocation): Add PLT_PCREL34 and - assorted GOT_PCREL34 relocs. - -2022-09-16 Alan Modra - - pdb sanity check block_size - * pdb.c (pdb_get_elt_at_index): Only allow block_size to be - 512, 1024, 2048, or 4096. - -2022-09-16 Nelson Chu - - RISC-V: Make g imply zmmul extension. - bfd/ - * elfxx-riscv.c (riscv_implicit_subset): Moved entry of m after g, - so that g can imply zmmul. - gas/ - * testsuite/gas/riscv/attribute-01.d: Updated. - * testsuite/gas/riscv/attribute-02.d: Likewise. - * testsuite/gas/riscv/attribute-03.d: Likewise. - * testsuite/gas/riscv/attribute-04.d: Likewise. - * testsuite/gas/riscv/attribute-05.d: Likewise. - * testsuite/gas/riscv/attribute-10.d: Likewise. - * testsuite/gas/riscv/march-imply-g.d: Likewise. - * testsuite/gas/riscv/march-imply-unsupported.d: Likewise. - -2022-09-16 GDB Administrator - - Automatic date update in version.in - -2022-09-15 Tsukasa OI - - bfd, binutils, gas: Remove/mark unused variables - Clang generates a warning on unused (technically, written but not read - thereafter) variables. By the default configuration (with "-Werror"), it - causes a build failure (unless "--disable-werror" is specified). - - This commit adds ATTRIBUTE_UNUSED attribute to some of them, which means - they are *possibly* unused (can be used but no warnings occur when - unused) and removes others. - - bfd/ChangeLog: - - * elf32-lm32.c (lm32_elf_size_dynamic_sections): Mark unused - rgot_count variable. - * elf32-nds32.c (elf32_nds32_unify_relax_group): Remove unused - count variable. - * mmo.c (mmo_scan): Mark unused lineno variable. - - binutils/ChangeLog: - - * windmc.c (write_rc): Remove unused i variable. - - gas/ChangeLog: - - * config/tc-riscv.c (riscv_ip): Remove unused argnum variable. - - ld/ChangeLog: - - * pe-dll.c (generate_reloc): Remove unused bi and page_count - variables. - -2022-09-15 Vladimir Mezentsev - - gprofng: fix build issues on musl - gprofng/ChangeLog - 2022-09-14 Vladimir Mezentsev - - PR gprofng/29477 - * configure.ac: Set __MUSL_LIBC. - * configure: Rebuild. - * common/config.h.in: Rebuild. - * src/collector_module.h: Fix compiler errors because mmap64, open64, - pwrite64 are macros and getcontext() is absent on musl. - * libcollector/collector.c: Likewise. - * libcollector/hwprofile.c: Likewise. - * libcollector/iolib.c: Likewise. - * libcollector/libcol_util.c: Likewise. - * libcollector/linetrace.c: Likewise. - * libcollector/memmgr.c: Likewise. - * libcollector/profile.c: Likewise. - * libcollector/unwind.c: Likewise. - * libcollector/dispatcher.c: Likewise. - * src/Experiment.cc: Likewise. - * libcollector/collector.h: Use dlsym() because dlvsym() is not defined - on musl. - * libcollector/iotrace.c: Remove interposition of versioned functions. - * libcollector/mmaptrace.c: Likewise. - * libcollector/libcol_util.h: Fix -Wint-to-pointer-cast warnings. - * libcollector/jprofile.c: Likewise. - * libcollector/synctrace.c: Include "collector.h". - * src/Print.cc: Use get_basename() because basename() is not defined - on musl. - * common/hwcdrv.c: Fix -Wformat= warnings. - -2022-09-15 GDB Administrator - - Automatic date update in version.in - -2022-09-14 Rupesh Potharla - - Binutils: Readelf testcase failing with clang - * testsuite/binutils-all/readelf.exp (readelf_wi_test): Extend - regexps to allow for output genreated by the Clang compiler. - -2022-09-14 Alan Modra - - looping in bfd_mach_o_fat_openr_next_archived_file - mach-o.c doesn't sanity check mach-o-fat archives, making it easy for - fuzzers to create an archive with mach_o_fat_archentry headers that - point to the same offset. bfd_mach_o_fat_openr_next_archived_file - uses the previous element offset to find its header, and thus the next - element. If two offsets are the same, any tool reading the archive - will get stuck. This patch rejects such archives, and any with - overlapping elements. - - * mach-o.c (overlap_previous): New function. - (bfd_mach_o_fat_archive_p): Sanity check that elements do not - overlap each other or the file and archive headers. - -2022-09-14 Alan Modra - - regen pofiles - -2022-09-14 Tsukasa OI - - bfd: Stop using -Wstack-usage=262144 when built with Clang - Some components of GNU Binutils will pass "-Wstack-usage=262144" when - "GCC >= 5.0" is detected. However, Clang does not support "-Wstack-usage", - despite that related configuration part in bfd/warning.m4 handles the latest - Clang (15.0.0 as of this writing) as "GCC >= 5.0". - - The option "-Wstack-usage" was ignored when the first version of Clang is - released but even this "ignoring" behavior is removed before Clang 4.0.0. - So, if we give Clang "-Wstack-usage=262144", it generates a warning, making - the build failure. - - This commit checks "__clang__" macro to prevent adding the option if the - compiler is identified as Clang. - - bfd/ChangeLog: - - * warning.m4: Stop appending "-Wstack-usage=262144" option when - compiled with Clang. - * configure: Regenerate. - - binutils/ChangeLog: - - * configure: Regenerate. - - gas/ChangeLog: - - * configure: Regenerate. - - gold/ChangeLog: - - * configure: Regenerate. - - gprof/ChangeLog: - - * configure: Regenerate. - - ld/ChangeLog: - - * configure: Regenerate. - - opcodes/ChangeLog: - - * configure: Regenerate. - -2022-09-14 Alan Modra - - Modify ld-ctf test files to suit ARM - The "@" char starts a comment on ARM. - - * testsuite/ld-ctf/diag-ctf-version-0.s: Replace @progbits with - %progbits. - * testsuite/ld-ctf/diag-ctf-version-2-unsupported-feature.s: Likewise. - * testsuite/ld-ctf/diag-ctf-version-f.s: Likewise. - * testsuite/ld-ctf/diag-cttname-invalid.s: Likewise. - * testsuite/ld-ctf/diag-cttname-null.s: Likewise. - * testsuite/ld-ctf/diag-cuname.s: Likewise. - * testsuite/ld-ctf/diag-decompression-failure.s: Likewise. - * testsuite/ld-ctf/diag-parlabel.s: Likewise. - * testsuite/ld-ctf/diag-parname.s: Likewise. - * testsuite/ld-ctf/diag-strlen-invalid.s: Likewise. - * testsuite/ld-ctf/diag-unsupported-flag.s: Likewise. - * testsuite/ld-ctf/diag-wrong-magic-number.s: Likewise. - -2022-09-14 Alan Modra - - asan: som_set_reloc_info heap buffer overflow - Also a bugfix. The first time the section was read, the contents - didn't supply an addend. - - * som.c (som_set_reloc_info): Sanity check offset. Do process - contents after reading. Tidy section->contents after freeing. - -2022-09-14 Alan Modra - - ubsan: som_is_space null dereference - On objcopy of fuzzed file. - - * som.c (som_write_fixups): Exit loop if space sections all - processed. - -2022-09-14 Alan Modra - - msan: vms-alpha use-of-uninitialized-value in dst_retrieve_location - * vms-alpha.c (dst_define_location): Init any unused entries. - -2022-09-14 Alan Modra - - ubsan: arm-dis.c index out of bounds - We are way off in the weeds with this one, and will be printing - for S > 10. - - * arm-dis.c (print_insn_cde): Wrap 'T' value. - -2022-09-14 Alan Modra - - PR29540, R_PPC64_NONE in .rela.dyn when linking Linux vdso - PR 29540 - * elf64-ppc.c (allocate_dynrelocs): Don't alloc space for relocs - against discarded sections. - (ppc64_elf_size_dynamic_sections): Use standard test for discarded - sections. - * elf32-ppc.c (allocate_dynrelocs): Don't alloc space for relocs - against discarded sections. - (ppc_elf_size_dynamic_sections): Use standard test for discarded - sections. - -2022-09-14 GDB Administrator - - Automatic date update in version.in - -2022-09-13 Aaron Merey - - objdump: '-S' should trigger search for separate debuginfo. - Add with_source_code to the command line options that trigger - might_need_separate_debug_info and dump_any_debugging. This helps - 'objdump -S' download missing files via debuginfod without the need for - specifying extra command line options like '-L'. - -2022-09-13 Bruno Larsen - - gdb/testsuite: Update gdb.base/so-impl-ld.exp - gdb.base/so-impl-ld.exp was setup assuming that the compiler would add - epilogue information and that GDB would stop in the } line. This would - make clang tests fail like so: - - step^M - solib_main (arg=10000) at ../../../common/git-repos/binutils-gdb/gdb/testsuite/gdb.base/solib1.c:7^M - 7|__ return arg*arg;|__|___/* HERE */^M - (gdb) PASS: gdb.base/so-impl-ld.exp: step into solib call - next^M - main () at ../../../common/git-repos/binutils-gdb/gdb/testsuite/gdb.base/so-impl-ld.c:22^M - 22|_ return 0;^M - (gdb) FAIL: gdb.base/so-impl-ld.exp: step in solib call - next^M - 0x00007ffff7cef560 in __libc_start_call_main () from /lib64/libc.so.6^M - (gdb) FAIL: gdb.base/so-impl-ld.exp: step out of solib call - - This patch changes it so solib_main has 2 lines where GDB can stop - regardless of compiler choices, and updates the exp file to - generically deal with unknown number of steps until leaving that - function. - -2022-09-13 Bruno Larsen - - gdb/testsuite: introduce gdb_step_until - Currently, GDB's testsuite uses a set amount of step commands to exit - functions. This is a problem if a compiler emits different epilogue - information from gcc, or emits no epilogue information at all. It was - most noticeable if Clang was used to test GDB. - - To fix this unreliability, this commit introduces a new proc that will - step the inferior until it is stopped at a line that matches the given - regexp, or until it steps too many times - defined as an optional - argument. If the line is found, it shows up as a single PASS in the - test, and if the line is not found, a single FAIL is emitted. - - This patch only introduces this proc, but does not add it to any - existing tests, these will be introduced in the following commit. - -2022-09-13 Bruno Larsen - - explicitly test for stderr in gdb.base/dprintf.exp - Not all compilers add stderr debug information when compiling a - program. Clang, for instance, prefers to add nothing from standard - libraries and let an external debug package have this information. - Because of this, gdb.base/dprintf.exp was failing when GDB attempted to - use dprintf as a call to fprintf(stderrr, ...), like this: - - (gdb) PASS: gdb.base/dprintf.exp: call: fprintf: set dprintf style to call - continue - Continuing. - kickoff 1234 - also to stderr 1234 - 'stderr' has unknown type; cast it to its declared type - (gdb) FAIL: gdb.base/dprintf.exp: call: fprintf: 1st dprintf (timeout) - - To avoid this false positive, we explicitly test to see if - the compiler has added information about stderr at all, and abort - testing dprintf as an fprintf call if it is unavailable. - -2022-09-13 Mark Harmstone - - Add pdb archive format - Resubmitted with changes in - https://sourceware.org/pipermail/binutils/2022-September/122791.html - made. - -2022-09-13 Jiangshuai Li - - gdb/csky rm csky_print_registers_info - The reason for implementing this interface is that we want to print - GPR, PC, EPC, PSR and EPSR when the "info register" command - is executed. - - A prev patch has added PC, EPC, PSR and EPSR to reggroup - general_group, the purpose has been achieved, so this function is - no longer required. - -2022-09-13 Jiangshuai Li - - gdb/csky rm csky_memory_insert/remove_breakpoint - Software breakpoints are inserted or removed by the gdb stub via - remote protocol, these two functions are no longer needed. - -2022-09-13 Jiangshuai Li - - gdb/csky add unwinder for long branch cases - There are two sequences of instructions for long branch: - 1. jmpi [pc+4] //insn code: 0xeac00001 - .long addr - - 2. lrw t1, [pc+8] //insn code: 0xea8d0002 - jmp t1 //insn code: 0x7834 - nop //insn code: 0x6c03 - .long addr - -2022-09-13 Jiangshuai Li - - gdbserver/csky add csky gdbserver support - Add new files: - gdb/arch/csky.c - gdb/arch/csky.h - gdb/features/cskyv2-linux.c - gdbserver/linux-csky-low.cc - - 1. In gdb/arch/csky.c file, add function "csky_create_target_description()" - for csky_target::low_arch_setup(). later, it can be used for csky native gdb. - - 2. In gdb/features/cskyv2-linux.c file, create target_tdesc for csky, include - gprs, pc, hi, lo, float, vector and float control registers. - - 3. In gdbserver/linux-csky-low.cc file, using PTRACE_GET/SET_RGESET to - get/set registers. The main data structures in asm/ptrace.h are: - struct pt_regs { - unsigned long tls; - unsigned long lr; - unsigned long pc; - unsigned long sr; - unsigned long usp; - - /* - * a0, a1, a2, a3: - * r0, r1, r2, r3 - */ - unsigned long orig_a0; - unsigned long a0; - unsigned long a1; - unsigned long a2; - unsigned long a3; - - /* - * r4 ~ r13 - */ - unsigned long regs[10]; - - /* r16 ~ r30 */ - unsigned long exregs[15]; - - unsigned long rhi; - unsigned long rlo; - unsigned long dcsr; - }; - - struct user_fp { - unsigned long vr[96]; - unsigned long fcr; - unsigned long fesr; - unsigned long fid; - unsigned long reserved; - }; - -2022-09-13 GDB Administrator - - Automatic date update in version.in - -2022-09-12 Tom Tromey - - Use checked_static_cast in more places - I went through all the uses of dynamic_cast<> in gdb, looking for ones - that could be replaced with checked_static_cast. This patch is the - result. Regression tested on x86-64 Fedora 34. - -2022-09-12 Peter Bergner - - ppc: Document the -mfuture and -Mfuture options and make them usable - The -mfuture and -Mfuture options which are used for adding potential - new ISA instructions were not documented. They also lacked a bitmask - so new instructions could not be enabled by those options. Fixed. - - binutils/ - * doc/binutils.texi: Document -Mfuture. - - gas/ - * config/tc-ppc.c: Document -mfuture - * doc/c-ppc.texi: Likewise. - - include/ - * opcode/ppc.h (PPC_OPCODE_FUTURE): Define. - - opcodes/ - * ppc-dis.c (ppc_opts) : Use it. - * ppc-opc.c (FUTURE): Define. - -2022-09-12 Bruno Larsen - - add xfails to gdb.base/complex-parts.exp when testing with clang - clang doesn't add encoding to the name of complex variables, only says - that the type name is complex, making the relevant tests fail. - This patch adds the xfails to the tests that expect the variable name to - include it. - -2022-09-12 Bruno Larsen - - Fix gdb.base/call-ar-st to work with Clang - When running gdb.base/call-ar-st.exp against Clang, we see one FAIL, - like so: - - print_all_arrays (array_i=, array_c= "ZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZa - ZaZaZaZaZaZaZaZaZaZaZaZa", array_f=, array_d=) at ../../../src/gdb/testsuite/gdb.base/call-ar-st.c:274 - 274 print_int_array(array_i); /* -step1- */ - (gdb) FAIL: gdb.base/call-ar-st.exp: step inside print_all_arrays - - With GCC we instead see: - - print_all_arrays (array_i=, array_c= "ZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZa", array_f=, array_d=) at /home/pedro/gdb/build/gdb/testsuite/../../../src/gdb/testsuite/gdb.base/call-ar-st.c:274 - 274 print_int_array(array_i); /* -step1- */ - (gdb) PASS: gdb.base/call-ar-st.exp: step inside print_all_arrays - - The difference is that with Clang we get: - - array_i=, ... - - instead of - - array_i = , ... - - These symbols are local static variables, and "main" is the name of - the function they are defined in. GCC instead appends a sequence - number to the linkage name: - - $ nm -A call-ar-st.gcc | grep integer_ - call-ar-st/call-ar-st:00000000000061a0 b integer_array.3968 - - $ nm -A call-ar-st.clang | grep integer_ - call-ar-st:00000000004061a0 b main.integer_array - - This commit changes the testcase to accept both outputs, as they are - functionally identical. - - Co-Authored-By: Pedro Alves - Change-Id: Iaf2ccdb9d5996e0268ed12f595a6e04b368bfcb4 - -2022-09-12 Bruno Larsen - - fix gdb.base/access-mem-running.exp for clang testing - Clang was optimizing global_var away because it was not being used - anywhere. this commit fixes that by adding the attribute used it. - - update gdb.base/info-program.exp to not fail with clang - The test specifically mentions that it doesn't care where the program - stops, however it was still testing for a specific location. The clang - compiler emits different line information for epilogue, so GDB reports a - different stopping location, depending on the used compiler. With this - patch the test works even with clang. - -2022-09-12 Bruno Larsen - - gdb/testsuite: change gdb.base/nodebug.exp to not fail with clang - Clang organizes the variables differently to gcc in the original version - of this code, leading to the following differences when testing - p (int*) &dataglobal + 1 - - gcc: - $16 = (int *) 0x404034 - - clang: - $16 = (int *) 0x404034 - - However, since the important part of this test doesn't seem to be which - symbol is linked, but rather if GDB is correctly increasing the - address. This test was changed to actually measure address changes, - instead of assuming the ordering and naming of symbols. - - Co-Authored-By: Andrew Burgess - -2022-09-12 Martin Storsjö - - ld: pe: Apply review suggestions on the existing exports/imports arrays - Use a separate explicit max_exports/imports field, instead of - deducing it from the number of allocated elements. Use a named - constant for the incremental growth of the array. - - Use bool instead of int for boolean values. - - Remove an unnecessary if statement/scope in the def_file_free - function. - - Add more verbose comments about parameters, and about insertion - into an array of structs. - - Generally use unsigned integers for all array indices and sizes. - The num_exports/imports fields are kept as is as signed integers, - since changing them to unsigned would require a disproportionate - amount of changes ti pe-dll.c to avoid comparisons between signed - and unsigned. - - Simply use xrealloc instead of a check and xmalloc/xrealloc; - xrealloc can take NULL as the first parameter (and does a similar - check internally). (This wasn't requested in review though, - but noticed while working on the code.) - -2022-09-12 Martin Storsjö - - ld: pe: Improve performance of object file exclude symbol directives - Store the list of excluded symbols in a sorted list, speeding up - checking for duplicates when inserting new entries. - - This is done in the same way as is done for exports and imports - (while the previous implementation was done with a linked list, - based on the implementation for aligncomm). - - When linking object files with excluded symbols, there can potentially - be very large numbers of excluded symbols (just like builds with - exports can have a large number of exported symbols). - - This improves the link performance somewhat, when linking with large - numbers of excluded symbols. - - The later actual use of the excluded symbols within pe-dll.c - handles them via an unordered linked list still, though. - -2022-09-12 Tom de Vries - - [gdb] Fix abort in selftest run_on_main_thread with ^C - When running selftest run_on_main_thread and pressing ^C, we can run into: - ... - Running selftest run_on_main_thread. - terminate called without an active exception - - Fatal signal: Aborted - ... - - The selftest function looks like this: - ... - static void - run_tests () - { - std::thread thread; - - done = false; - - { - gdb::block_signals blocker; - - thread = std::thread (set_done); - } - - while (!done && gdb_do_one_event () >= 0) - ; - - /* Actually the test will just hang, but we want to test - something. */ - SELF_CHECK (done); - - thread.join (); - } - ... - - The error message we see is due to the destructor of thread being called while - thread is joinable. - - This is supposed to be taken care of by thread.join (), but the ^C prevents - that one from being called, while the destructor is still called. - - Fix this by ensuring thread.join () is called (if indeed required) before the - destructor using SCOPE_EXIT. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29549 - -2022-09-12 Tom de Vries - - [gdb/symtab] Support .gdb_index section with TUs in .debug_info - The .gdb_index variant of commit d878bb39e41 ("[gdb/symtab] Support - .debug_names section with TUs in .debug_info"). - - Tested on x86_64-linux. - -2022-09-12 Tom de Vries - - [gdb/testsuite] Fix gdb.dwarf2/dw2-dir-file-name.exp for ppc64le - In commit cd919f5533c ("[gdb/testsuite] Fix - gdb.dwarf2/dw2-dir-file-name.exp"), I made gdb.dwarf2/dw2-dir-file-name.exp - independent of prologue analyzers, using this change: - ... - - gdb_breakpoint $func - + gdb_breakpoint *$func - ... - - That however caused a regression on ppc64le. For PowerPC, as described in the - ELFv2 ABI, a function can have a global and local entry point. - - Setting a breakpoint on *$func effectively creates a breakpoint for the global - entry point, so if the function is entered through the local entry point, the - breakpoint doesn't trigger. - - Fix this by reverting commit cd919f5533c, and setting the breakpoint on - ${func}_label instead. - - Tested on x86_64-linux and ppc64le-linux. - -2022-09-12 Tom de Vries - - [gdb/testsuite] Fix gdb.dwarf2/dw2-dir-file-name.exp with clang - When running test-case gdb.dwarf2/dw2-dir-file-name.exp with clang, we run - into: - ... - (gdb) break *compdir_missing__ldir_missing__file_basename^M - Breakpoint 2 at 0x400580^M - (gdb) continue^M - Continuing.^M - ^M - Breakpoint 2, 0x0000000000400580 in \ - compdir_missing.ldir_missing.file_basename ()^M - (gdb) FAIL: gdb.dwarf2/dw2-dir-file-name.exp: \ - compdir_missing__ldir_missing__file_basename: continue to breakpoint: \ - compdir_missing__ldir_missing__file_basename - ... - - The problem is that the test-case uses labels outside functions, which is know - to cause problem with clang, as documented in the comment for proc - function_range. - - Fix this by using get_func_info instead. - - Tested on x86_64-linux, with both gcc 7.5.0 and clang 13.0.0. - -2022-09-12 Jan Beulich - - x86: avoid i386_dis_printf()'s staging area for a fair part of output - While PR binutils/29483 has now been addressed differently, this - originally proposed change still has its merits: Avoiding vsnprintf() - for typically far more than half of the overall output results in a 2-3% - performance gain in my testing (with debug builds of objdump, libbfd, - and libopcodes). - - With that part of output no longer using staging_area[], the array also - doesn't need to be quite as large anymore (the largest presently used - size is 27, from "64-bit address is disabled"). - - While limiting the scope of "res" it became apparent that - - no caller cares about the function's return value, - - the comment about the return value was wrong, - - a particular positive return value would have been meaningless to the - caller. - Therefore convert the function to return "void" at the same time. - -2022-09-12 Nelson Chu - - RISC-V: PR28509, the default visibility symbol cannot be referenced by R_RISCV_JAL. - When generating the shared object, the default visibility symbols may bind - externally, which means they will be exported to the dynamic symbol table, - and are preemptible by default. These symbols cannot be referenced by the - non-pic R_RISCV_JAL and R_RISCV_RVC_JUMP. However, consider that linker - may relax the R_RISCV_CALL relocations to R_RISCV_JAL or R_RISCV_RVC_JUMP, - if these relocations are relocated to the plt entries, then we won't report - error for them. Perhaps we also need the similar checks for the - R_RISCV_BRANCH and R_RISCV_RVC_BRANCH relocations. - - After applying this patch, and revert the following glibc patch, - riscv: Fix incorrect jal with HIDDEN_JUMPTARGET - https://sourceware.org/git/?p=glibc.git;a=commit;h=68389203832ab39dd0dbaabbc4059e7fff51c29b - - I get the expected errors as follows, - ld: relocation R_RISCV_RVC_JUMP against `__sigsetjmp' which may bind externally can not be used when making a shared object; recompile with -fPIC - ld: relocation R_RISCV_JAL against `exit' which may bind externally can not be used when making a shared object; recompile with -fPIC - - Besides, we also have similar changes for libgcc, - RISC-V: jal cannot refer to a default visibility symbol for shared object - https://github.com/gcc-mirror/gcc/commit/45116f342057b7facecd3d05c2091ce3a77eda59 - - bfd/ - pr 28509 - * elfnn-riscv.c (riscv_elf_relocate_section): Report errors when - makeing a shard object, and the referenced symbols of R_RISCV_JAL - relocations are default visibility. Besides, we should handle most - of the cases here, so don't need the unresolvable check later for - R_RISCV_JAL and R_RISCV_RVC_JUMP. - ld/ - pr 28509 - * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated. - * testsuite/ld-riscv-elf/lib-nopic-01a.s: Removed. - * testsuite/ld-riscv-elf/lib-nopic-01b.d: Likewise. - * testsuite/ld-riscv-elf/lib-nopic-01b.s: Likewise. - * testsuite/ld-riscv-elf/shared-lib-nopic-01.d: New testcase. - * testsuite/ld-riscv-elf/shared-lib-nopic-01.s: Likewise. - * testsuite/ld-riscv-elf/shared-lib-nopic-02.d: Likewise. - * testsuite/ld-riscv-elf/shared-lib-nopic-02.s: Likewise. - * testsuite/ld-riscv-elf/shared-lib-nopic-03.d: Likewise. - * testsuite/ld-riscv-elf/shared-lib-nopic-03.s: Likewise. - * testsuite/ld-riscv-elf/shared-lib-nopic-04.d: Likewise. - * testsuite/ld-riscv-elf/shared-lib-nopic-04.s: Likewise. - -2022-09-12 GDB Administrator - - Automatic date update in version.in - -2022-09-11 Tom de Vries - - [gdb/symtab] Fix handling of DW_TAG_unspecified_type - Currently, the test-case contained in this patch fails: - ... - (gdb) p (int) foo ()^M - Invalid cast.^M - (gdb) FAIL: gdb.dwarf2/dw2-unspecified-type.exp: p (int) foo () - ... - because DW_TAG_unspecified_type is translated as void. - - There's some code in read_unspecified_type that marks the type as stub, but - that's only active for ada: - ... - if (cu->lang () == language_ada) - type->set_is_stub (true); - ... - - Fix this by: - - marking the type as a stub for all languages, and - - handling the stub return type case in call_function_by_hand_dummy. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29558 - -2022-09-11 GDB Administrator - - Automatic date update in version.in - -2022-09-10 Alan Modra - - Re: PR29466, APP/NO_APP with linefile - It looks like I copied the SIZE init across from - binutils/testsuite/config/default.exp without some necessary editing. - - * testsuite/config/default.exp (SIZE): Adjust relative path. - -2022-09-10 GDB Administrator - - Automatic date update in version.in - -2022-09-09 Nick Clifton - - Support debuginfo files with empty group sections. - PR 29532 - bfd * elf.c (setup_group): Do not return false if there is no group - information available. - - bionutils* objcopy.c (setup_section): Leave group sections intact when - creating separate debuginfo files. - -2022-09-09 Tsukasa OI - - RISC-V: Fix vector CSR requirements - Vector CSRs are also required on smaller vector subsets. - - Not only that the most of vector CSRs are general purpose (and must be - accessible for every vector subsets), current minimum vector subset 'Zve32x' - requires fixed point arithmetic, making remaining non-general purpose - (fixed point arithmetic only) CSRs mandatory for such subsets. - - So, those CSRs must be accessible from 'Zve32x', not just from 'V'. - This commit fixes this issue which caused CSR accessibility warnings. - - gas/ChangeLog: - - * config/tc-riscv.c (riscv_csr_address): Change vector CSR - requirement from 'V' to 'Zve32x'. - * testsuite/gas/riscv/csr-version-1p9p1.l: Change vector CSR - requirement from 'V' to 'Zve32x'. - * testsuite/gas/riscv/csr-version-1p10.l: Likewise. - * testsuite/gas/riscv/csr-version-1p11.l: Likewise. - * testsuite/gas/riscv/csr-version-1p12.l: Likewise. - -2022-09-09 GDB Administrator - - Automatic date update in version.in - -2022-09-08 Carl Love - - Fix hardware watchpoint check in test gdb.base/watchpoint-reuse-slot.exp - This test generates 48 failures on Power 9 when testing with HW watchpoints - enabled. Note HW watchpoint support is disabled on Power 9 due to a HW bug. - The skip_hw_watchpoint_tests proc must be used to correctly determine - if the processor supports HW watchpoints. - - This patch replaces the [target_info exists gdb,no_hardware_watchpoints] - with the skip_hw_watchpoint_tests check. - - This patch was tested on Power 9, Power 10 and X86-64 with no regressions. - -2022-09-08 Nick Clifton - - Gas generated incorrect debug info (top-level DW_TAG_unspecified_type DIE) - PR 29559 - * dwarf2dbg.c (out_debug_info): Place DW_TAG_unspecified_type at - the end of the list of children, not at the start of the CU - information. - * testsuite/gas/elf/dwarf-3-func.d: Update expected output. - * testsuite/gas/elf/dwarf-5-func-global.d: Likewise. - * testsuite/gas/elf/dwarf-5-func-local.d: Likewise. - * testsuite/gas/elf/dwarf-5-func.d: Likewise. - -2022-09-08 Tsukasa OI - - gdbsupport: Fix config.status dependency - Commit 171fba11ab27 ("Make GDBserver abort on internal error in development mode") - created a new substitution CONFIG_STATUS_DEPENDENCIES but this is used by - Makefile.in (which is not regenerated by that commit). After regenerating - it, it is found that CONFIG_STATUS_DEPENDENCIES value is not valid, making - gdbsupport fail to build. - - Since the CONFIG_STATUS_DEPENDENCIES value is used in the Makefile, macro - substitution must have a Makefile format but commit 171fba11ab27 used shell - format "$srcdir/../bfd/development.sh". - - This commit fixes this issue by substituting "$srcdir" (shell format) to - "$(srcdir)" (Makefile format). It preserves the dependency as Pedro - intended and fixes the build problem. - - It also regenerates corresponding files with the maintainer mode. - - gdbsupport/ChangeLog: - - * configure.ac: Fix config.status dependency. - * Makefile.in: Regenerate. - * configure: Regenerate. - -2022-09-08 Nick Clifton - - Maintainer mode: wrong gettext version? - * README-maintainer-mode: Update minimum version of gettext - required. - - i686-w64-mingw32-objdump -WL returns incorrect file paths - PR 29523 - * dwarf.c (display_debug_lines_decoded): Correctly handle DWARF-5 - directory and filename tables. - -2022-09-08 GDB Administrator - - Automatic date update in version.in - -2022-09-07 Tom de Vries - - [gdb/testsuite] xfail gdb.ada/O2_float_param.exp for aarch64 and gcc 7.5.0 - On aarch64-linux, with gcc 7.5.0, we run into: - ... - (gdb) frame^M - #0 callee.increment (val=99.0, val@entry=9.18340949e-41, msg=...) at \ - callee.adb:21^M - 21 if Val > 200.0 then^M - (gdb) FAIL: gdb.ada/O2_float_param.exp: scenario=all: frame - ... - - The problem is a GCC bug, filed as "PR98148 - [AArch64] Wrong location - expression for function entry values" ( - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98148 ). - - Xfail the test for aarch64 and gcc 7. - - Tested on x86_64-linux and aarch64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29418 - -2022-09-07 Tom de Vries - - [gdb/testsuite] Fix gdb.ada/access_tagged_param.exp for aarch64 - On aarch64-linux, I run into: - ... - Breakpoint 2, pck.inspect (obj=0x430eb0 \ - , =0) at pck.adb:17^M - 17 procedure Inspect (Obj: access Top_T'Class) is^M - (gdb) FAIL: gdb.ada/access_tagged_param.exp: continue - ... - while on x86_64-linux, I see: - ... - Breakpoint 2, pck.inspect (obj=0x62b2a0, =2) at pck.adb:19^M - 19 null;^M - (gdb) PASS: gdb.ada/access_tagged_param.exp: continue - ... - Note the different line numbers, 17 vs 19. - - The difference comes from the gdbarch_skip_prologue implementation. - - The amd64_skip_prologue implementation doesn't use gcc line numbers, and falls - back to the architecture-specific prologue analyzer, which correctly skips - past the prologue, to address 0x4022f7: - ... - 00000000004022ec : - 4022ec: 55 push %rbp - 4022ed: 48 89 e5 mov %rsp,%rbp - 4022f0: 48 89 7d f8 mov %rdi,-0x8(%rbp) - 4022f4: 89 75 f4 mov %esi,-0xc(%rbp) - 4022f7: 90 nop - 4022f8: 90 nop - 4022f9: 5d pop %rbp - 4022fa: c3 ret - ... - - The aarch64_skip_prologue implementation does use gcc line numbers, which are: - ... - File name Line number Starting address View Stmt - pck.adb 17 0x402580 x - pck.adb 17 0x402580 1 x - pck.adb 19 0x40258c x - pck.adb 20 0x402590 x - ... - and which are represented like this internally in gdb: - ... - INDEX LINE ADDRESS IS-STMT PROLOGUE-END - 0 17 0x0000000000402580 Y - 1 17 0x0000000000402580 Y - 2 19 0x000000000040258c Y - 3 20 0x0000000000402590 Y - 4 END 0x00000000004025a0 Y - ... - - The second entry is interpreted as end-of-prologue, so 0x402580 is used, while - the actual end of the prologue is at 0x40258c: - ... - 0000000000402580 : - 402580: d10043ff sub sp, sp, #0x10 - 402584: f90007e0 str x0, [sp, #8] - 402588: b90007e1 str w1, [sp, #4] - 40258c: d503201f nop - 402590: d503201f nop - 402594: 910043ff add sp, sp, #0x10 - 402598: d65f03c0 ret - 40259c: d503201f nop - ... - - Note that the architecture-specific prologue analyzer would have gotten this - right: - ... - (gdb) p /x aarch64_analyze_prologue (gdbarch, pc, pc + 128, 0) - $2 = 0x40258c - ... - - Fix the FAIL by making the test-case more robust against problems in prologue - skipping, by setting the breakpoint on line 19 instead. - - Likewise in a few similar test-cases. - - Tested on x86_64-linux and aarch64-linux. - -2022-09-07 Luis Machado - Tom de Vries - - Fix endianness handling for arm record self tests - v2: - - - Add 32-bit Arm instruction selftest - - Refactored abstract memory reader into abstract instruction reader - - Adjusted code to use templated type and to use host endianness as - opposed to target endianness. - - The arm record tests handle 16-bit and 32-bit thumb instructions, but the - code is laid out in a way that handles the 32-bit thumb instructions as - two 16-bit parts. - - This is fine, but it is prone to host-endianness issues given how the two - 16-bit parts are stored and how they are accessed later on. Arm is - little-endian by default, so running this test with a GDB built with - --enable-targets=all and on a big endian host will run into the following: - - Running selftest arm-record. - Process record and replay target doesn't support syscall number -2036195 - Process record does not support instruction 0x7f70ee1d at address 0x0. - Self test failed: self-test failed at ../../binutils-gdb/gdb/arm-tdep.c:14482 - - It turns out the abstract memory reader class is more generic than it needs to - be, and we can simplify the code a bit by assuming we have a simple instruction - reader that only reads up to 4 bytes, which is the length of a 32-bit - instruction. - - Instead of returning a bool, we return instead the instruction that has been - read. This way we avoid having to deal with the endianness conversion, and use - the host endianness instead. The Arm selftests can be executed on non-Arm - hosts. - - While at it, Tom suggested adding a 32-bit Arm instruction selftest to increase - the coverage of the selftests. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29432 - -2022-09-07 Tom de Vries - - [gdb/testsuite] Use prototype to call libc functions - On openSUSE Tumbleweed (using glibc 2.36), I run into: - ... - (gdb) print /d (int) munmap (4198400, 4096)^M - Invalid cast.^M - (gdb) FAIL: gdb.base/break-main-file-remove-fail.exp: cmdline: \ - get integer valueof "(int) munmap (4198400, 4096)" - ... - - The problem is that after starting the executable, the symbol has type - "void (*) (void)": - ... - (gdb) p munmap - $1 = {} 0x401030 - (gdb) start - ... - (gdb) p munmap - $2 = {void (void)} 0x7ffff7feb9a0 <__GI_munmap> - ... - which causes the "Invalid cast" error. - - Looking at the debug info for glibc for symbol __GI_munmap: - ... - <0><189683>: Abbrev Number: 1 (DW_TAG_compile_unit) - <189691> DW_AT_name : ../sysdeps/unix/syscall-template.S - <189699> DW_AT_producer : GNU AS 2.39.0 - <1><1896ae>: Abbrev Number: 2 (DW_TAG_subprogram) - <1896af> DW_AT_name : __GI___munmap - <1896b3> DW_AT_external : 1 - <1896b4> DW_AT_low_pc : 0x10cad0 - <1896bc> DW_AT_high_pc : 37 - ... - that's probably caused by this bit (or similar bits for other munmap aliases). - - This is fixed in gas on trunk by commit 5578fbf672e ("GAS: Add a return type - tag to DWARF DIEs generated for function symbols"). - - Work around this (for say gas 2.39) by explicitly specifying the prototype for - munmap. - - Likewise for getpid in a couple of other test-cases. - - Tested on x86_64-linux. - -2022-09-07 mengqinggang - - LoongArch: fix gas BFD_RELOC_8/16/24 bug - If fixP->fx_subsy is NULL, BFD_RELOC_8/16/24 can't convert to - BFD_RELOC_LARCH_xxx. - - gas/config/tc-loongarch.c - -2022-09-07 GDB Administrator - - Automatic date update in version.in - -2022-09-06 Aaron Merey - Nick Clifton - - Add debuginfod support for objdump -S - Currently objdump -S is not able to make use files downloaded from debuginfod. - This is due to bfd_find_nearest_line_discriminator being unable to locate any - separate debuginfo files in the debuginfod cache. Additionally objdump lacked - a call to debuginfod_find_source in order to download missing source files. - - Fix this by using bfd_find_nearest_line_with_alt instead of - bfd_find_nearest_line_discriminator. Also add a call to - debuginfod_find_source in order to download missing source files. - -2022-09-06 Aaron Merey - - bfd: Add bfd_find_nearest_line_with_alt - bfd_find_nearest_line_with_alt functions like bfd_find_nearest_line with - the addition of a parameter for specifying the filename of a supplementary - debug file such as one referenced by .gnu_debugaltlink or .debug_sup. - - This patch focuses on implementing bfd_find_nearest_line_with_alt - support for ELF/DWARF2 .gnu_debugaltlink. For other targets this - function simply sets the invalid_operation bfd_error. - -2022-09-06 Tsukasa OI - - gdb: add Tsukasa Oi to gdb/MAINTAINERS - -2022-09-06 Andrew Burgess - - gdb: move a write after approval entry into the correct place - Noticed in passing that an entry in the MAINTAINERS write after - approval list was in the wrong place. - -2022-09-06 Tsukasa OI - - gdb: Add non-enum disassembler options - This is paired with "opcodes: Add non-enum disassembler options". - - There is a portable mechanism for disassembler options and used on some - architectures: - - - ARC - - Arm - - MIPS - - PowerPC - - RISC-V - - S/390 - - However, it only supports following forms: - - - [NAME] - - [NAME]=[ENUM_VALUE] - - Valid values for [ENUM_VALUE] must be predefined in - disasm_option_arg_t.values. For instance, for -M cpu=[CPU] in ARC - architecture, opcodes/arc-dis.c builds valid CPU model list from - include/elf/arc-cpu.def. - - In this commit, it adds following format: - - - [NAME]=[ARBITRARY_VALUE] (cannot contain "," though) - - This is identified by NULL value of disasm_option_arg_t.values - (normally, this is a non-NULL pointer to a NULL-terminated list). - - gdb/ChangeLog: - - * gdb/disasm.c (set_disassembler_options): Add support for - non-enum disassembler options. - (show_disassembler_options_sfunc): Likewise. - -2022-09-06 Tom de Vries - - [gdb/symtab] Support .debug_names section with TUs in .debug_info - When running test-case gdb.cp/cpexprs-debug-types.exp on target board - cc-with-debug-names/gdb:debug_flags=-gdwarf-5, we get an executable with - a .debug_names section, but no .debug_types section. For dwarf-5, the TUs - are no longer put in a separate unit, but instead they're put in the - .debug_info section. - - When loading the executable, the .debug_names section is silently ignored - because of this check in dwarf2_read_debug_names: - ... - if (map->tu_count != 0) - { - /* We can only handle a single .debug_types when we have an - index. */ - if (per_bfd->types.size () != 1) - return false; - ... - which triggers because per_bfd->types.size () == 0. - - The intention of the check is to make sure we don't have more that one - .debug_types section, as can happen in a object file (see PR12984): - ... - $ grep "\.debug_types" 11.s - .section .debug_types,"G",@progbits,wt.75c042c23a9a07ee,comdat - .section .debug_types,"G",@progbits,wt.c59c413bf50a4607,comdat - ... - - Fix this by: - - changing the check condition to "per_bfd->types.size () > 1", and - - handling per_bfd->types.size () == 0. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29385 - -2022-09-06 Tom de Vries - - [gdb/testsuite] Add gdb.dwarf2/debug-names-bad-cu-index.exp - Add test-case gdb.dwarf2/debug-names-bad-cu-index.exp, a regression test for - commit 2fe9a3c41fa ("[gdb/symtab] Fix bad compile unit index complaint"). - - Tested on x86_64-linux. - -2022-09-06 Tom de Vries - - [gdb/testsuite] Add gdb.dwarf2/debug-names-tu.exp - Add a test-case gdb.dwarf2/debug-names-tu.exp, that uses the dwarf assembler - to specify a .debug_names index with the TU list referring to a TU from the - .debug_types section. - - This is intended to produce something similar to: - ... - $ gcc -g -fdebug-types-section ~/hello.c -gdwarf-4 - $ gdb-add-index -dwarf-5 a.out - ... - - Tested on x86_64-linux. - -2022-09-06 Tsukasa OI - - opcodes: Add non-enum disassembler options - This is paired with "gdb: Add non-enum disassembler options". - - There is a portable mechanism for disassembler options and used on some - architectures: - - - ARC - - Arm - - MIPS - - PowerPC - - RISC-V - - S/390 - - However, it only supports following forms: - - - [NAME] - - [NAME]=[ENUM_VALUE] - - Valid values for [ENUM_VALUE] must be predefined in - disasm_option_arg_t.values. For instance, for -M cpu=[CPU] in ARC - architecture, opcodes/arc-dis.c builds valid CPU model list from - include/elf/arc-cpu.def. - - In this commit, it adds following format: - - - [NAME]=[ARBITRARY_VALUE] (cannot contain "," though) - - This is identified by NULL value of disasm_option_arg_t.values - (normally, this is a non-NULL pointer to a NULL-terminated list). - - include/ChangeLog: - - * dis-asm.h (disasm_option_arg_t): Update comment of values - to allow non-enum disassembler options. - - opcodes/ChangeLog: - - * riscv-dis.c (print_riscv_disassembler_options): Support - non-enum disassembler options on printing disassembler help. - * arc-dis.c (print_arc_disassembler_options): Likewise. - * mips-dis.c (print_mips_disassembler_options): Likewise. - -2022-09-06 GDB Administrator - - Automatic date update in version.in - -2022-09-05 Tsukasa OI - - sim/riscv: Complete tidying up with SBREAK - This commit removes SBREAK-related references on the simulator as it's - renamed to EBREAK in 2016 (the RISC-V ISA, version 2.1). - - sim/ChangeLog: - - * riscv/sim-main.c (execute_i): Use "ebreak" instead of "sbreak". - -2022-09-05 GDB Administrator - - Automatic date update in version.in - -2022-09-04 Andrew Burgess - - sim/erc32: fix gdb with simulator build - In commit: - - commit 7b01c1cc1d111ba0afa51e60fa9842d3b971e2d1 - Date: Mon Apr 4 22:38:04 2022 +0100 - - sim: fixes for libopcodes styled disassembler - - changes were made to the simulator source to handle the new libopcodes - disassembler styling API. - - Unfortunately, these changes broke building GDB with the erc32 (sparc) - simulator, like this: - - ../src/configure --target=sparc-linux - make all-gdb - .... - /usr/bin/ld: ../sim/erc32/libsim.a(interf.o): in function `sim_open': - /tmp/build/sim/../../src/sim/erc32/interf.c:247: undefined reference to `fprintf_styled' - collect2: error: ld returned 1 exit status - - The problem is that in commit 7b01c1cc1d11 the fprintf_styled function - was added into sis.c. This file is only used when building the 'run' - binary, that is, the standalone simulator, and is not included in the - libsim.a library. - - Now, the obvious fix would be to move fprintf_styled into libsim.a, - however, that turns out to be tricky. - - The erc32 simulator currently has two copies of the function run_sim, - one in sis.c, and one in interf.c, both of these copies are global. - - Currently, the 'run' binary links fine, though I suspect this might be - pure luck. When I tried moving fprintf_styled into interf.c, I ran - into multiple-definition (of run_sim) errors. I suspect that by - requiring the linker to pull in fprintf_styled from libsim.a I was - changing the order in which symbols were loaded, and the linker was - now seeing both copies of run_sim, while currently we only see one - copy. - - The ideal solution of course, would be to merge the two similar, but - slightly different copies of run_sim, and just use the one copy. Then - we could safely move fprintf_styled into interf.c too, and all would - be good. - - But I don't have time right now to start debugging the erc32 - simulator, so I wanted a solution that fixes the build without - introducing multiple definition errors. - - The easiest solution I think is to just have two copies of - fprintf_styled, one in sis.c, and one in interf.c. Unlike run_sim, - these two copies are both static, so we will not run into multiple - definition issues with this function. The functions themselves are - not very big, so it's not a huge amount of duplicate code. - - I am very aware that this is not an ideal solution, and I would - welcome anyone who wants to take on fixing the run_sim problem - properly, and then cleanup the fprintf_styled duplication. - -2022-09-04 GDB Administrator - - Automatic date update in version.in - -2022-09-03 GDB Administrator - - Automatic date update in version.in - -2022-09-02 Max Filippov - - xtensa: bfd: fix TLS relocations generated for PIE - When generating TLS dynamic relocations the existing xtensa BFD code - treats linking to a PIE exactly as linking to a shared object, resulting - in generation of wrong relocations for TLS entries. Fix that and add - tests. - - bfd/ - * elf32-xtensa.c (elf_xtensa_check_relocs): Use bfd_link_dll - instead of bfd_link_pic. Add elf_xtensa_dynamic_symbol_p test - when generating GOT entries. - (elf_xtensa_relocate_section): Use bfd_link_dll instead of - bfd_link_pic. - ld/ - * testsuite/ld-xtensa/tlspie.dd: New file. - * testsuite/ld-xtensa/tlspie.rd: New file. - * testsuite/ld-xtensa/tlspie.sd: New file. - * testsuite/ld-xtensa/tlspie.td: New file. - * testsuite/ld-xtensa/xtensa-linux.exp (TLS PIE transitions): - New test. - -2022-09-02 Max Filippov - - xtensa: adjust expected output in ld TLS tests - objdump output for l32r opcode was changed in commit b3ea76397a07 - ("opcodes: xtensa: display loaded literal value"), but xtensa linker TLS - relaxation tests weren't adjusted accordingly. - readelf output was changed in commit 23356397449a ("Adjust readelf's - output so that section symbols without a name as shown with their - section name."), but xtensa linker TLS relaxation tests weren't adjusted - accordingly. - Fix expected output changes in xtensa ld TLS relaxation tests. - - ld/ - * testsuite/ld-xtensa/tlsbin.dd: Adjust expected output for l32r - opcodes. - * testsuite/ld-xtensa/tlsbin.rd: Adjust expected output to allow - for named section symbols. - * testsuite/ld-xtensa/tlspic.dd: Adjust expected output for l32r - opcodes. - * testsuite/ld-xtensa/tlspic.rd: Adjust expected output to allow - for named section symbols. - -2022-09-02 Frederic Cambus - - Add OpenBSD ARM Little Endian BFD support. - * config.bfd (arm-*-openbsd*): Restore target. - -2022-09-02 Tsukasa OI - - RISC-V: Print highest address (-1) on the disassembler - This patch makes possible to print the highest address (-1) and the addresses - related to gp which value is -1. This is particularly useful if the highest - address space is used for I/O registers and corresponding symbols are defined. - Besides, despite that it is very rare to have GP the highest address, it would - be nice because we enabled highest address printing on regular cases. - - gas/ChangeLog: - - * testsuite/gas/riscv/dis-addr-topaddr.s: New test for the top - address (-1) printing. - * testsuite/gas/riscv/dis-addr-topaddr-32.d: Likewise. - * testsuite/gas/riscv/dis-addr-topaddr-64.d: Likewise. - * testsuite/gas/riscv/dis-addr-topaddr-gp.s: New test for - GP-relative addressing when GP is the highest address (-1). - * testsuite/gas/riscv/dis-addr-topaddr-gp-32.d: Likewise. - * testsuite/gas/riscv/dis-addr-topaddr-gp-64.d: Likewise. - - opcodes/ChangeLog: - - * riscv-dis.c (struct riscv_private_data): Add `to_print_addr' to - enable printing the highest address. - (maybe_print_address): Utilize `to_print_addr'. - (riscv_disassemble_insn): Likewise. - -2022-09-02 Tsukasa OI - - RISC-V: PR29342, Fix RV32 disassembler address computation - If either the base register is `zero', `tp' or `gp' and XLEN is 32, an - incorrectly sign-extended address is produced when printing. This commit - fixes this by fitting an address into a 32-bit value on RV32. - - Besides, H. Peter Anvin discovered that we have wrong address computation - for JALR instruction (the initial bug is back in 2018). This commit also - fixes that based on the idea of Palmer Dabbelt. - - gas/ - pr29342 - * testsuite/gas/riscv/lla32.d: Reflect RV32 address computation fix. - * testsuite/gas/riscv/dis-addr-overflow.s: New testcase. - * testsuite/gas/riscv/dis-addr-overflow-32.d: Likewise. - * testsuite/gas/riscv/dis-addr-overflow-64.d: Likewise. - opcodes/ - pr29342 - * riscv-dis.c (maybe_print_address): Fit address into 32-bit on RV32. - (print_insn_args): Fix JALR address by adding EXTRACT_ITYPE_IMM. - -2022-09-02 Tsukasa OI - - RISC-V: Add address printer tests with ADDIW - Address sequences involving ADDIW/C.ADDIW instructions require special - handling to sign-extend lower 32-bits of the original result. - - This commit tests whether this sign-extension works. - - gas/ChangeLog: - - * testsuite/gas/riscv/dis-addr-addiw.s: New to test the address - computation with sign extension as used in ADDIW/C.ADDIW. - * testsuite/gas/riscv/dis-addr-addiw-a.d: Test PC sign bit 0. - * testsuite/gas/riscv/dis-addr-addiw-b.d: Test PC sign bit 1. - - gas/ChangeLog: - - * testsuite/gas/riscv/dis-addr-addiw-a.d: New test. - * testsuite/gas/riscv/dis-addr-addiw-b.d: New test. - * testsuite/gas/riscv/dis-addr-addiw.s: New test. - -2022-09-02 GDB Administrator - - Automatic date update in version.in - -2022-09-01 Tsukasa OI - - sim: Update mailing list address - The commit bf1102165389 "* MAINTAINERS: Perform some obvious fixups." - back in 2009 changed the mailing list address gdb-patches@sources.redhat.com - to gdb-patches@sourceware.org. - - This commit does the same to sim/MAINTAINERS. - - sim/ChangeLog: - - * MAINTAINERS: Update mailing list address. - - Change-Id: I56c6bf21a4bddfb35ffc3336ffcba7ff9b39926e - -2022-09-01 Nick Clifton - - dllwrap, windres and dlltools use mktemp, which should be avoided - PR 29534 - * dllwrap.c: Replace uses of choose_temp_base() with - make_temp_file(). - * dlltool.c: Likewise. - * resrc.c: Likewise. - -2022-09-01 Maciej W. Rozycki - - GDB/doc: Document the Guile `#:unlimited' keyword - Document the Guile `#:unlimited' keyword and deprecate the internal - integer representation it corresponds to for integer parameters. - -2022-09-01 Lancelot SIX - - gdb/python-config: replace deprecated distutils.sysconfig - When running the gdb/configure script on ubuntu 22.04 with - python-3.10.4, I see: - - checking for python... no - checking for python3... /usr/bin/python3 - [...]/gdb/python/python-config.py:7: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives - from distutils import sysconfig - [...]/gdb/python/python-config.py:7: DeprecationWarning: The distutils.sysconfig module is deprecated, use sysconfig instead - from distutils import sysconfig - [...]/gdb/python/python-config.py:7: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives - from distutils import sysconfig - [...]/gdb/python/python-config.py:7: DeprecationWarning: The distutils.sysconfig module is deprecated, use sysconfig instead - from distutils import sysconfig - [...]/gdb/python/python-config.py:7: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives - from distutils import sysconfig - [...]/gdb/python/python-config.py:7: DeprecationWarning: The distutils.sysconfig module is deprecated, use sysconfig instead - from distutils import sysconfig - checking for python... yes - - The distutils module is deprecated as per the PEP 632[1] and will be - removed in python-3.12. - - This patch migrates gdb/python/python-config.py from distutils.sysconfig - to the sysconfig module[2]. - - The sysconfig module has has been introduced in the standard library in - python 3.2. Given that support for python < 3.2 has been removed by - edae3fd6600f: "gdb/python: remove Python 2 support", this patch does not - need to support both implementations for backward compatibility. - - Tested on ubuntu-22.04 and ubuntu 20.04. - - [1] https://peps.python.org/pep-0632/ - [2] https://docs.python.org/3/library/sysconfig.html - - Change-Id: Id0df2baf3ee6ce68bd01c236b829ab4c0a4526f6 - -2022-09-01 GDB Administrator - - Automatic date update in version.in - -2022-08-31 Tom Tromey - - Fix interpreter-exec crash - PR mi/10347 points out that using interpreter-exec inside of a - "define" command will crash gdb. The bug here is that - gdb_setup_readline doesn't check for the case where instream==nullptr. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=10347 - -2022-08-31 Tom Tromey - - Fix "source" with interpreter-exec - PR mi/15811 points out that "source"ing a file that uses - interpreter-exec will put gdb in a weird state, where the CLI stops - working. The bug is that tui_interp::suspend does not unregister the - event file descriptor. - - The test case is from Andrew Burgess. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=15811 - -2022-08-31 Tom Tromey - - Remove a call to clear_interpreter_hooks - mi_interp::resume does not need to call clear_interpreter_hooks, - because this is already done by interp_set. - - TUI stdout buffering cleanup - The TUI checks against gdb_stdout to decide when to buffer. It seems - much cleaner to me to simply record this as an attribute of the stream - itself. - - Remove a ui-related memory leak - gdb_setup_readline makes new streams and assigns to the various stream - members of struct ui. However, these assignments cause the previous - values to leak. As far as I can, this code is simply unnecessary and - can be removed -- with the exception of the assignment to gdb_stdtarg, - which is not initialized anywhere else. - - Remove tui_out_new - tui_out_new is just a simple wrapper for 'new' and can be removed, - simplifying gdb a tiny bit. - - Use scoped_restore in safe_parse_type - This changes safe_parse_type to use scoped_restore rather than - explicit assignments. - - Use member initialization in 'struct ui' - This changes 'struct ui' to use member initialization. This is - simpler to understand. - - Remove two unused members from mi_interp - These members of mi_interp aren't used and can be removed. - - Remove obsolete filtering comment - top.h has an obsolete comment about the use of _unfiltered. - - Remove the "for moment" comments - A few spots setting some gdb output stream variables have a "for - moment" comment. These comments aren't useful and I think the moment - has passed -- these are permanent now. - - Use ui_out_redirect_pop in more places - This changes ui_out_redirect_pop to also perform the redirection, and - then updates several sites to use this, rather than explicit - redirects. - - Free ui::line_buffer - A ui initializes its line_buffer, but never calls buffer_free on it. - This patch fixes the oversight. I found this by inspection. - - Remove some dead code - This patch removes some dead code and an old FIXME. These no longer - seem useful, even for documentation purposes. - - Let ui::input_fd be -1 - This changes gdb so that, if ui::input_fd is set to -1, then it will - not be registered with the event loop. This is useful for the DAP - support code I wrote, but as it turns out to also be useful to - Insight, it seems best to check it in separately. - -2022-08-31 Andrew Burgess - - gdb/riscv: better support for fflags and frm registers - First, some background on the RISC-V registers fflags, frm, and fcsr. - - These three registers all relate to the floating-point status and - control mechanism on RISC-V. The fcsr is the floatint-point control - status register, and consists of two parts, the flags (bits 0 to 4) - and the rounding-mode (bits 5 to 7). - - The fcsr register is just one of many control/status registers (or - CSRs) available on RISC-V. The fflags and frm registers are also - CSRs. These CSRs are aliases for the relevant parts of the fcsr - register. So fflags is an alias for bits 0 to 4 of fcsr, and frm is - an alias for bits 5 to 7 of fcsr. - - This means that a user can change the floating-point rounding mode - either, by writing a complete new value into fcsr, or by writing just - the rounding mode into frm. - - How this impacts on GDB is like this: a target description could, - legitimately include all three registers, fcsr, fflags, and frm. The - QEMU target currently does this, and this makes sense. The target is - emulating the complete system, and has all three CSRs available, so - why not tell GDB about this. - - In contrast, the RISC-V native Linux target only has access to the - fcsr. This is because the ptrace data structure that the kernel uses - for reading and writing floating point state only contains a copy of - the fcsr, after all, this one field really contains both the fflags - and frm fields, so why carry around duplicate data. - - So, we might expect that the target description for the RISC-V native - Linux GDB would only contain the fcsr register. Unfortunately, this - is not the case. The RISC-V native Linux target uses GDB's builtin - target descriptions by calling riscv_lookup_target_description, this - will then add an fpu feature from gdb/features/riscv, either - 32bit-fpu.xml or 64bit-fpu.xml. The problem, is that these features - include an entry for fcsr, fflags, and frm. This means that GDB - expects the target to handle reading and writing these registers. And - the RISC-V native Linux target currently doesn't. - - In riscv_linux_nat_target::store_registers and - riscv_linux_nat_target::fetch_registers only the fcsr register is - handled, this means that, for RISC-V native Linux, the fflags and frm - registers always show up as - they are present in the - target description, but the target doesn't know how to access the - registers. - - A final complication relating to these floating pointer CSRs is which - target description feature the registers appear in. - - These registers are CSRs, so it would seem sensible that these - registers should appear in the CSR target description feature. - - However, when I first added RISC-V target description support, I was - using a RISC-V simulator that didn't support any CSRs other than the - floating point related ones. This simulator bundled all the float - related CSRs into the fpu target feature. This didn't feel completely - unreasonable to me, and so I had GDB check for these registers in - either target feature. - - In this commit I make some changes relating to how GDB handles the - three floating point CSR: - - 1. Remove fflags and frm from 32bit-fpu.xml and 64bit-fpu.xml. This - means that the default RISC-V target description (which RISC-V native - FreeBSD), and the target descriptions created for RISC-V native Linux, - will not include these registers. There's nothing stopping some other - target (e.g. QEMU) from continuing to include all three of these CSRs, - the code in riscv-tdep.c continues to check for all three of these - registers, and will handle them correctly if they are present. - - 2. If a target supplied fcsr, but does not supply fflags and/or frm, - then RISC-V GDB will now create two pseudo registers in order to - emulate the two missing CSRs. These new pseudo-registers do the - obvious thing of just reading and writing the fcsr register. - - 3. With the new pseudo-registers we can no longer make use of the GDB - register numbers RISCV_CSR_FFLAGS_REGNUM and RISCV_CSR_FRM_REGNUM. - These will be the numbers used if the target supplies the registers in - its target description, but, if GDB falls back to using - pseudo-registers, then new, unique numbers will be used. To handle - this I've added riscv_gdbarch_tdep::fflags_regnum and - riscv_gdbarch_tdep::frm_regnum, I've then updated the RISC-V code to - compare against these fields. - - When adding the pseudo-register support, it is important that the - pseudo-register numbers are calculated after the call to - tdesc_use_registers. This is because we don't know the total number - of physical registers until after this call, and the psuedo-register - numbers must follow on from the real (target supplied) registers. - - I've updated some tests to include more testing of the fflags and frm - registers, as well as adding a new test. - -2022-08-31 Andrew Burgess - - gdb: Add tdesc_found_register function to tdesc API - This commit adds a new function to the target description API within - GDB. This new function is not used in this commit, but will be used - in the next commit, I'm splitting it out into a separate patch for - easier review. - - What I want to do in the next commit is check to see if a target - description supplied a particular register, however, the register in - question could appear in one of two possible features. - - The new function allows me to ask the tdesc_arch_data whether a - register was found and assigned a particular GDB register number once - all of the features have been checked. I think this is a much simpler - solution than adding code such that, while checking each feature, I - spot if the register I'm processing is the one I care about. - - No tests here as the new code is not used, but this code will be - exercised in the next commit. - -2022-08-31 Andrew Burgess - - gdb/riscv: improve (and fix) display of frm field in 'info registers' - On RISC-V the FCSR (float control/status register) is split into two - parts, FFLAGS (the flags) and FRM (the rounding mode). Both of these - two fields are part of the FCSR register, but can also be accessed as - separate registers in their own right. And so, we have three separate - registers, $fflags, $frm, and $fcsr, with the last of these being the - combination of the first two. - - Here's how the bits of FCSR are split between FRM and FFLAGS: - - ,--------- FFLAGS - |---| - 76543210 <----- FCSR - |-| - '--------------FRM - - Here's how GDB currently displays these registers: - - (gdb) info registers $fflags $frm $fcsr - fflags 0x0 RD:0 NV:0 DZ:0 OF:0 UF:0 NX:0 - frm 0x0 FRM:0 [RNE (round to nearest; ties to even)] - fcsr 0x0 RD:0 NV:0 DZ:0 OF:0 UF:0 NX:0 FRM:0 [RNE (round to nearest; ties to even)] - - Notice the 'RD' field which is present in both $fflags and $fcsr. - This field contains the value of the FRM field, which makes sense when - displaying the $fcsr, but makes no sense when displaying $fflags, as - the $fflags doesn't include the FRM field. - - Additionally, the $fcsr already includes an FRM field, so the - information in 'RD' is duplicated. Consider this: - - (gdb) set $frm = 0x3 - (gdb) info registers $fflags $frm $fcsr │ - fflags 0x0 RD:0 NV:0 DZ:0 OF:0 UF:0 NX:0 - frm 0x3 FRM:3 [RUP (Round up towards +INF)] - fcsr 0x60 RD:3 NV:0 DZ:0 OF:0 UF:0 NX:0 FRM:3 [RUP (Round up towards +INF)] - - See how the 'RD' field in $fflags still displays 0, while the 'RD' and - 'FRM' fields in $fcsr show the same information. - - The first change I propose in this commit is to remove the 'RD' - field. After this change the output now looks like this: - - (gdb) info registers $fflags $frm $fcsr - fflags 0x0 NV:0 DZ:0 OF:0 UF:0 NX:0 - frm 0x0 FRM:0 [RNE (round to nearest; ties to even)] - fcsr 0x0 NV:0 DZ:0 OF:0 UF:0 NX:0 FRM:0 [RNE (round to nearest; ties to even)] - - Next, I spotted that the text that goes along with the 'FRM' field was - not wrapped in the i18n markers for internationalisation, so I added - those. - - Next, I spotted that: - - (gdb) set $frm=0x7 - (gdb) info registers $fflags $frm $fcsr - fflags 0x0 RD:0 NV:0 DZ:0 OF:0 UF:0 NX:0 - frm 0x7 FRM:3 [RUP (Round up towards +INF)] - fcsr 0xe0 RD:7 NV:0 DZ:0 OF:0 UF:0 NX:0 FRM:3 [RUP (Round up towards +INF)] - - Notice that despite being a 3-bit field, FRM masks to 2-bits. - Checking the manual I can see that the FRM field is 3-bits, and is - defined for all 8 values. That GDB masks to 2-bits is just a bug I - think, so I've fixed this. - - Finally, the 'FRM' text for value 0x7 is wrong. Currently we use the - text 'dynamic rounding mode' for value 0x7. However, this is not - really correct. - - A RISC-V instruction can either encode the rounding mode within the - instruction, or a RISC-V instruction can choose to use a global, - dynamic rounding mode. - - So, for the rounding-mode field of an _instruction_ the value 0x7 - indicates "dynamic round mode", the instruction should defer to the - rounding mode held in the FRM field of the $fcsr. - - But it makes no sense for the FRM of $fcsr to itself be set to - 0x7 (dynamic rounding mode), and indeed, section 11.2, "Floating-Point - Control and Status Register" of the RISC-V manual, says that a value - of 0x7 in the $fcsr FRM field is invalid, and if an instruction has - _its_ round-mode set to dynamic, and the FRM field is also set to 0x7, - then an illegal instruction exception is raised. - - And so, I propose changing the text for value 0x7 of the FRM field to - be "INVALID[7] (Dynamic rounding mode)". We already use the text - "INVALID[5]" and "INVALID[6]" for the two other invalid fields, - however, I think adding the extra "Dynamic round mode" hint might be - helpful. - - I've added a new test that uses 'info registers' to check what GDB - prints for the three registers related to this patch. There is one - slight oddity with this test - for the fflags and frm registers, the - test accepts both the "normal" output (as described above), but also - allows these registers to be reported as ''. - - The reason why I accept is that currently, the RISC-V, - native Linux target advertises these registers in its target - description, but then doesn't support reading or writing of these - registers, this results in the registers being reported as - unavailable. - - A later patch in this series will address this issue, and will remove - this check for . - -2022-08-31 Frederic Cambus - - Add OpenBSD AArch64 GAS support. - * configure.tgt (aarch64*-*-openbsd*): Add target. - -2022-08-31 Nils-Christian Kempke - - gdb, dwarf: create symbols for template tags without names - The following GDB behavior was also reported as a GDB bug in - - https://sourceware.org/bugzilla/show_bug.cgi?id=28396 - - I will reiterate the problem a bit and give some more information here. - This patch closes the above mentioned bug. - - The DWARF 5 standard 2.23 'Template Parameters' reads: - - A template type parameter is represented by a debugging information - entry with the tag DW_TAG_template_type_parameter. A template value - parameter is represented by a debugging information entry with the tag - DW_TAG_template_value_parameter. The actual template parameter entries - appear in the same order as the corresponding template formal - parameter declarations in the source progam. - - A type or value parameter entry may have a DW_AT_name attribute, whose - value is a null-terminated string containing the name of the - corresponding formal parameter. - - So the DW_AT_name attribute for DW_TAG_template_type_parameter and - DW_TAG_template_value_parameter is optional. - - Within GDB, creating a new symbol from some read DIE usually requires the - presence of a DW_AT_name for the DIE (an exception here is the case of - unnamed namespaces or the existence of a linkage name). - - This patch makes the presence of the DW_AT_name for template value/type - tags optional, similar to the unnamed namespaces. - - For unnamed namespaces dwarf2_name simply returns the constant string - CP_ANONYMOUS_NAMESPACE_STR '(anonymous namespace)'. For template tags a - case was added to the switch statement calling the - unnamed_template_tag_name helper. Within the scope of parent which - the template parameter is a child of, the helper counts the position - of the template tag within the unnamed template tags and returns - '' where NUMBER is its position. This way we end up with - unique names within the respective scope of the function/class/struct - (these are the only currenltly supported template kinds within GDB and - usually the compilers) where we discovered the template tags in. - - While I do not know of a way to bring GCC to emit template tags without - names there is one for clang/icpx. Consider the following example - - template - class Foo {}; - - template - class Foo; - - int main () { - Foo f; - return 0; - } - - The forward declaration for 'Foo' with the missing template type names - 'A' and 'C' makes clang emit a bunch of template tags without names: - - ... - <2><43>: Abbrev Number: 3 (DW_TAG_variable) - <44> DW_AT_location : 2 byte block: 91 78 (DW_OP_fbreg: -8) - <47> DW_AT_name : (indirect string, offset: 0x63): f - <4b> DW_AT_decl_file : 1 - <4c> DW_AT_decl_line : 8 - <4d> DW_AT_type : <0x59> - ... - <1><59>: Abbrev Number: 5 (DW_TAG_class_type) - <5a> DW_AT_calling_convention: 5 (pass by value) - <5b> DW_AT_name : (indirect string, offset: 0x74): Foo - <5f> DW_AT_byte_size : 1 - <60> DW_AT_decl_file : 1 - <61> DW_AT_decl_line : 2 - <2><62>: Abbrev Number: 6 (DW_TAG_template_type_param) - <63> DW_AT_type : <0x76> - <2><67>: Abbrev Number: 7 (DW_TAG_template_type_param) - <68> DW_AT_type : <0x52> - <6c> DW_AT_name : (indirect string, offset: 0x6c): B - <2><70>: Abbrev Number: 6 (DW_TAG_template_type_param) - <71> DW_AT_type : <0x7d> - ... - - Befor this patch, GDB would not create any symbols for the read template - tag DIEs and thus lose knowledge about them. Breaking at the return - statement and printing f's type would read - - (gdb) ptype f - type = class Foo [with B = int] { - - } - - After this patch GDB does generate symbols from the DWARF (with their - artificial names: - - (gdb) ptype f - type = class Foo [with = double, B = int, - = float] { - - } - - The same principle theoretically applies to template functions. Also - here, GDB would not record unnamed template TAGs but I know of no visual - way to trigger and test this changed behavior. Template functions do - not emit a '[with...]' list and their name generation also does not - suffer from template tags without names. GDB does not check whether or - not a template tag has a name in 'dwarf2_compute_name' and thus, the - names of the template functions are created independently of whether or - not the template TAGs have a DW_TAT_name attribute. A testcase has - been added in the gdb.dwarf2 for template classes and structs. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28396 - -2022-08-31 Nils-Christian Kempke - - gdb, testsuite: adapt function_range expected name - When writing a dwarf testcase for some C++ code I wanted to use the - MACRO_AT_range which in turn uses the function_range proc in dwarf.exp - to extract the bounds of 'main'. - - However, the macro failed as GDB prints the C++ 'main' with its - arguments as 'main(int, char**)' or 'main()'. - - The reason for this is that in read.c::dwarf2_compute_name we call - c_type_print_args on C++ functions and append their arguments to the - function name. This happens to all C++ functions, but is only visible - when the function doesn't have a linkage name. - - An example might make this more clear. Given the following code - - >> cat c.cpp - int foo (int a, float b) - { - return 0; - } - - int main (int argc, char **argv) - { - return 0; - } - - which is legal in both languages, C and C++, and compiling it with - e.g. clang or gcc will make the disassemble command look like: - - >> clang --version - clang version 10.0.0-4ubuntu1 - ... - >> clang -O0 -g ./c.cpp - >> gdb -q ./a.out -ex "start" - ... - (gdb) disassemble main - Dump of assembler code for function main(int, char**): - 0x0000000000401120 <+0>: push %rbp - 0x0000000000401121 <+1>: mov %rsp,%rbp - ... - 0x0000000000401135 <+21>: ret - End of assembler dump. - (gdb) disassemble foo - Dump of assembler code for function _Z3fooif: - 0x0000000000401110 <+0>: push %rbp - 0x0000000000401111 <+1>: mov %rsp,%rbp - ... - 0x000000000040111f <+15>: ret - End of assembler dump. - - Note, that main is emitted with its arguments while for foo the linkage - name is being printed, as also visible in its DWARF: - - >> objdump ./a.out --dwarf=info | grep "foo" -A3 -B3 - <2b> DW_AT_low_pc : 0x401110 - <33> DW_AT_high_pc : 0x10 - <37> DW_AT_frame_base : 1 byte block: 56 (DW_OP_reg6 (rbp)) - <39> DW_AT_linkage_name: (indirect string, offset: 0x39): _Z3fooif - <3d> DW_AT_name : (indirect string, offset: 0x42): foo - <41> DW_AT_decl_file : 1 - <42> DW_AT_decl_line : 1 - <43> DW_AT_type : <0x9a> - - Now, let's rename the C++ file and compile it as C: - - >> mv c.cpp c.c - >> clang -O0 -g ./c.c - >> gdb -q ./a.out -ex "start' - ... - (gdb) disassemble main - Dump of assembler code for function main: - 0x0000000000401120 <+0>: push %rbp - 0x0000000000401121 <+1>: mov %rsp,%rbp - ... - 0x0000000000401135 <+21>: ret - End of assembler dump. - (gdb) disassemble foo - Dump of assembler code for function foo: - 0x0000000000401110 <+0>: push %rbp - 0x0000000000401111 <+1>: mov %rsp,%rbp - ... - 0x000000000040111f <+15>: ret - End of assembler dump. - - Note, for foo we did not get a linkage name emitted in DWARF, so - it is printed by its name: - - >> objdump --dwarf=info ./a.out | grep foo -A3 -B3 - <2b> DW_AT_low_pc : 0x401110 - <33> DW_AT_high_pc : 0x10 - <37> DW_AT_frame_base : 1 byte block: 56 (DW_OP_reg6 (rbp)) - <39> DW_AT_name : (indirect string, offset: 0x37): foo - <3d> DW_AT_decl_file : 1 - <3e> DW_AT_decl_line : 1 - <3f> DW_AT_prototyped : 1 - - To make the macro and proc work with C++ as well, an optional argument - list was added to the regex matching the function name in the - disassemble command in function_range. This does not change any used - behavior as currently, there exists no C++ test using the proc - function_range. - -2022-08-31 Aaron Merey - - gdb/elfread.c: Use bfd filename instead of objfile->original_name - The call to debuginfod_debuginfo_query in elf_symfile_read is given - objfile->original_name as the filename to print when downloading the - objfile's debuginfo. - - In some cases original_name is prefixed with gdb's working directory - even though the objfile is not located in the working directory. This - causes debuginfod to display the wrong path of the objfile during a download. - - Fix this by using the objfile's bfd filename instead. - -2022-08-31 GDB Administrator - - Automatic date update in version.in - -2022-08-30 Martin Storsjö - - ld: pe: Fix linking against Microsoft import libraries with multiple DLLs - Initially, since c6c37250e98f113755e0d787f7070e2ac80ce77e (in 1999), - in order to fix linking against Microsoft import libraries, ld did - internally rename members of such libraries. At that point, the - criteria for being considered a Microsoft import library was that - every archive member had the same name (no regard for exactly what - that name was). - - This was later amended in 44dbf3639f127af46d569ad96b6242dfbc4c0a89 - (in 2003) to allow for Microsoft import libraries with intermixed - static object files. At this point, the criteria were extended, so - that all members following the first member named *.dll either had - the exact same member name, or be named *.obj. (Curiously, this would - allow members with any name if it precedes the first one named *.dll.) - - In practice, Microsoft style import libraries can contain - members for linking against more than one DLL (built by merging - multiple regular import libraries into one). - - Instead of trying to do validation of the whole archive before - considering it a Microsoft style import library, relax the criteria - for doing the member renaming: If an archive member is named *.dll - and it contains .idata sections, assume that that member is a - Microsoft import file, and apply the renaming scheme. - - This works for imports for any number of DLLs in the same library, - intermixed with other static object files (regardless of their - names), and vastly simplifies the code. - - LLVM generates Microsoft style import libraries, and Rust builds - seem to bundle up multiple import libraries together with some - Rust specific static objects. This fixes linking directly against - them with ld.bfd. - -2022-08-30 Simon Marchi - - gdbsupport: add wrapper around result_of and invoke_result - When building with Clang 14 (using gcc 12 libstdc++ headers), I get: - - CXX dwarf2/read.o - In file included from /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:94: - /home/simark/src/binutils-gdb/gdb/../gdbsupport/parallel-for.h:142:21: error: 'result_of<(lambda at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:7124:5) (__gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator *, std::__cxx1998::vector>>, std::vector>, std::random_access_iterator_tag>, __gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator *, std::__cxx1998::vector>>, std::vector>, std::random_access_iterator_tag>)>' is deprecated: use 'std::invoke_result' instead [-Werror,-Wdeprecated-declarations] - = typename std::result_of::type; - ^ - /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:7122:14: note: in instantiation of function template specialization 'gdb::parallel_for_each<__gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator *, std::__cxx1998::vector>>, std::vector>, std::random_access_iterator_tag>, (lambda at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:7124:5)>' requested here - = gdb::parallel_for_each (1, per_bfd->all_comp_units.begin (), - ^ - /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.1.1/../../../../include/c++/12.1.1/type_traits:2597:9: note: 'result_of<(lambda at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:7124:5) (__gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator *, std::__cxx1998::vector>>, std::vector>, std::random_access_iterator_tag>, __gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator *, std::__cxx1998::vector>>, std::vector>, std::random_access_iterator_tag>)>' has been explicitly marked deprecated here - { } _GLIBCXX17_DEPRECATED_SUGGEST("std::invoke_result"); - ^ - /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.1.1/../../../../include/c++/12.1.1/x86_64-pc-linux-gnu/bits/c++config.h:120:45: note: expanded from macro '_GLIBCXX17_DEPRECATED_SUGGEST' - # define _GLIBCXX17_DEPRECATED_SUGGEST(ALT) _GLIBCXX_DEPRECATED_SUGGEST(ALT) - ^ - /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.1.1/../../../../include/c++/12.1.1/x86_64-pc-linux-gnu/bits/c++config.h:96:19: note: expanded from macro '_GLIBCXX_DEPRECATED_SUGGEST' - __attribute__ ((__deprecated__ ("use '" ALT "' instead"))) - ^ - - It complains about the use of std::result_of, which is deprecated in - C++17 and removed in C++20: - - https://en.cppreference.com/w/cpp/types/result_of - - Given we'll have to transition to std::invoke_result eventually, make a - GDB wrapper to mimimc std::invoke_result, which uses std::invoke_result - for C++ >= 17 and std::result_of otherwise. This way, it will be easy - to remove the wrapper in the future, just replace gdb:: with std::. - - Tested by building with gcc 12 in -std=c++11 and -std=c++17 mode, and - clang in -std=c++17 mode (I did not test fully with clang in -std=c++11 - mode because there are other unrelated issues). - - Change-Id: I50debde0a3307a7bc67fcf8fceefda51860efc1d - -2022-08-30 Tom Tromey - - Fix flush for sys.stderr - GDB overwrites Python's sys.stdout and sys.stderr, but does not - properly implement the 'flush' method -- it only ever will flush - stdout. This patch fixes the bug. I couldn't find a straightforward - way to write a test for this. - - Fix gdb.flush documentation - The gdb.flush documentation does not mention the 'stream' argument in - the function signature, only in the description. This patch fixes the - oversight. - -2022-08-30 Nick Clifton - - BFD library: Use entry 0 in directory and filename tables of DWARF-5 debug info. - PR 29529 - * dwarf2.c (struct line_info_table): Add new field: - use_dir_and_file_0. - (concat_filename): Use new field to help select the correct table - slot. - (read_formatted_entries): Do not skip entry 0. - (decode_line_info): Set new field depending upon the version of - DWARF being parsed. Initialise filename based upon the setting of - the new field. - -2022-08-30 Enze Li - - gdb: update ranged_breakpoint::print_one_detail in comments - The print_one_detail_ranged_breakpoint has been renamed to - ranged_breakpoint::print_one_detail in this commit: - - commit ec45bb676c9c69c30783bcf35ffdac8280f3b8bc - Date: Sat Jan 15 16:34:51 2022 -0700 - - Convert ranged breakpoints to vtable ops - - So their comments should be updated as well. - -2022-08-30 Nick Clifton - - Add a testcase for PR 29494. - PR 29494 - * testsuite/gas/arm/pr29494.s: New test source file. - * testsuite/gas/arm/pr29494.d: New test driver. - -2022-08-30 liuzhensong - - LoongArch: Fix redefinition of "PACKAGE". - Running configure and make in binutils-gdb. - - $ ./configure - $ make - In file included from ./as.h:37, - from ./config/loongarch-lex.l:21, - from config/loongarch-lex-wrapper.c:20: - ./config.h:206: error: “PACKAGE” redefined [-Werror] - #define PACKAGE "gas" - ... - - gas/config - * loongarch-lex-wrapper.c - -2022-08-30 Tsukasa OI - - RISC-V: Add 'Zmmul' extension in assembler. - Three-part patch set from Tsukasa OI to support zmmul in assembler. - - The 'Zmmul' is a RISC-V extension consisting of only multiply instructions - (a subset of 'M' which has multiply and divide instructions). - - bfd/ - * elfxx-riscv.c (riscv_implicit_subsets): Add 'Zmmul' implied by 'M'. - (riscv_supported_std_z_ext): Add 'Zmmul' extension. - (riscv_multi_subset_supports): Add handling for new instruction class. - gas/ - * testsuite/gas/riscv/attribute-09.d: Updated implicit 'Zmmul' by 'M'. - * testsuite/gas/riscv/option-arch-02.d: Likewise. - * testsuite/gas/riscv/m-ext.s: New test. - * testsuite/gas/riscv/m-ext-32.d: New test (RV32). - * testsuite/gas/riscv/m-ext-64.d: New test (RV64). - * testsuite/gas/riscv/zmmul-32.d: New expected output. - * testsuite/gas/riscv/zmmul-64.d: Likewise. - * testsuite/gas/riscv/m-ext-fail-xlen-32.d: New test (failure - by using RV64-only instructions in RV32). - * testsuite/gas/riscv/m-ext-fail-xlen-32.l: Likewise. - * testsuite/gas/riscv/m-ext-fail-zmmul-32.d: New failure test - (RV32 + Zmmul but with no M). - * testsuite/gas/riscv/m-ext-fail-zmmul-32.l: Likewise. - * testsuite/gas/riscv/m-ext-fail-zmmul-64.d: New failure test - (RV64 + Zmmul but with no M). - * testsuite/gas/riscv/m-ext-fail-zmmul-64.l: Likewise. - * testsuite/gas/riscv/m-ext-fail-noarch-64.d: New failure test - (no Zmmul or M). - * testsuite/gas/riscv/m-ext-fail-noarch-64.l: Likewise. - include/ - * opcode/riscv.h (enum riscv_insn_class): Added INSN_CLASS_ZMMUL. - ld/ - * testsuite/ld-riscv-elf/attr-merge-arch-01.d: We don't care zmmul in - these testcases, so just replaced m by a. - * testsuite/ld-riscv-elf/attr-merge-arch-01a.s: Likewise. - * testsuite/ld-riscv-elf/attr-merge-arch-01b.s: Likewise. - * testsuite/ld-riscv-elf/attr-merge-arch-02.d: Likewise. - * testsuite/ld-riscv-elf/attr-merge-arch-02a.s: Likewise. - * testsuite/ld-riscv-elf/attr-merge-arch-03.d: Likewise. - * testsuite/ld-riscv-elf/attr-merge-arch-03a.s: Likewise. - * testsuite/ld-riscv-elf/attr-merge-user-ext-01.d: Likewise. - * testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_a2p0.s: Renamed. - * testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_a2p1.s: Renamed. - opcodes/ - * riscv-opc.c (riscv_opcodes): Updated multiply instructions to zmmul. - -2022-08-30 Tom de Vries - - [gdb/symtab] Fix assert in set_length - When running the included test-case, we run into: - ... - (gdb) break _start^M - read.h:309: internal-error: set_length: \ - Assertion `m_length == length' failed.^M - ... - - The problem is that while there are two CUs: - ... - $ readelf -wi debug-names-missing-cu | grep @ - Compilation Unit @ offset 0x0: - Compilation Unit @ offset 0x2d: - ... - the CU table in the .debug_names section only contains the first one: - ... - CU table: - [ 0] 0x0 - ... - - The incomplete CU table makes create_cus_from_debug_names_list set the size of - the CU at 0x0 to the actual size of both CUs combined. - - This eventually leads to the assert, when we read the actual size from the CU - header. - - While having an incomplete CU table in a .debug_names section is incorrect, - we need a better failure mode than asserting. - - The easiest way to fix this is to set the length to 0 (meaning: unkown) in - create_cus_from_debug_names_list. - - This makes the failure mode to accept the incomplete CU table, but to ignore - the missing CU. - - It would be nice to instead reject the .debug_names index, and build a - complete CU list, but the point where we find this out is well after - dwarf2_initialize_objfile, so it looks rather intrusive to restart at that - point. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29453 - -2022-08-30 Tom de Vries - - [gdb/tdep] Declare score-*-* target obsolete - I tried out the script gdb/gdb_mbuild.sh, and ran into: - ... - score-elf ... - ... configure --target=score-elf - ... make score-elf - ... run score-elf - score-elf: gdb dumped core - Terminated - ... - - Gdb runs into this internal error in initialize_current_architecture: - ... - if (! gdbarch_update_p (info)) - internal_error (__FILE__, __LINE__, - _("initialize_current_architecture: Selection of " - "initial architecture failed")); - ... - - The call to gdbarch_update_p fails because commit 575b4c298a6 ("gdb: Remove - support for S+core") removed support for the architecture. - - Fix this by adding score-*-* to the list of obsolete targets in - gdb/configure.tgt, such that we're no longer able to build the configuration: - ... - *** Configuration score-unknown-elf is obsolete. - *** Support has been REMOVED. - make: *** [Makefile:12806: configure-gdb] Error 1 - ... - - Also remove the related line from the "Target Instruction Set Architectures" - list in gdb/MAINTAINERS, such that gdb/gdb_mbuild.sh no longer tries to build - it. - -2022-08-30 GDB Administrator - - Automatic date update in version.in - -2022-08-29 GDB Administrator - - Automatic date update in version.in - -2022-08-28 Alan Modra - - PR29494 Trailing jump table on ARM - out_inc_line_addr and relax_inc_line_addr are passed INT_MAX as - line_delta to flag end of section. This filters its way down to - size_inc_line_addr and emit_inc_line_addr. Pass line_delta on to - scale_addr_delta where it can be used to omit an unaligned opcode - error. - - PR 29494 - * dwarf2dbg.c (scale_addr_delta): Delete unnecessary forward decl. - Add line_delta param. Don't print error at end of section, just - round the address down. - (size_inc_line_addr, emit_inc_line_addr): Adjust calls. - -2022-08-28 GDB Administrator - - Automatic date update in version.in - -2022-08-27 rupothar - - bfd: Fix minor bug in read_indexed_address function. - read_indexed_address function is using offset_size instead of - addr_size while reading addrx forms. - -2022-08-27 GDB Administrator - - Automatic date update in version.in - -2022-08-26 Simon Marchi - - gdbsupport: fix gdb::optional compilation with C++11 && _GLIBCXX_DEBUG - Similar to 911438f9f4 ("gdbsupport: fix array-view compilation with - c++11 && _GLIBCXX_DEBUG"), but for gdb::optional. - - I get this error when building with Clang 14 and -std=c++11: - - CXX agent.o - In file included from /home/simark/src/binutils-gdb/gdbsupport/agent.cc:20: - In file included from /home/simark/src/binutils-gdb/gdbsupport/common-defs.h:210: - In file included from /home/simark/src/binutils-gdb/gdbsupport/common-debug.h:23: - /home/simark/src/binutils-gdb/gdbsupport/../gdbsupport/gdb_optional.h:213:5: error: use of this statement in a constexpr function is a C++14 extension [-Werror,-Wc++14-extensions] - gdb_assert (this->has_value ()); - ^ - /home/simark/src/binutils-gdb/gdbsupport/gdb_assert.h:35:3: note: expanded from macro 'gdb_assert' - ((void) ((expr) ? 0 : \ - ^ - - Change-Id: If0cf55607fc9dbd1925ccb97cd9abbf8993ff264 - -2022-08-26 Simon Marchi - - gdb: change bpstat_print's kind parameter to target_waitkind - Change from int to target_waitkind, which is really what is is. While - at it, remove some outdated doc. The return value is described by a - relatively self-describing enum, not a numerical value like the doc - says. - - Change-Id: Id899c853a857c7891c45e5b1639024067d5b59cd - -2022-08-26 Simon Marchi - - gdb, gdbsupport: configure: factor out yes/no/auto value checking - Factor out the code that checks that a value is yes/no or yes/no/auto. - Add two macros to gdbsupport/common.m4 and use them in gdb/configure.ac - - I inspected the changes to configure. Other than whitespace changes, we - have some benign changes to the error messages (one of them had an error - actually). There are changes to the --enable-source-highlight and - --enable-libbacktrace handling, but setting enable_source_highlight / - enable_libbacktrace was not really useful anyway, they already had the - right value. - - Change-Id: I92587aec36874309e1605e2d60244649f09a757a - -2022-08-26 Alan Modra - - PR12265, Compiling ld/ fails on Solaris 8 - The fail was due to -Werror and headers included by dlfcn.h and - elf-bfd.h disagreeing about AT_DCACHEBSIZE and other AT_*. Not a - serious problem obviously, since release versions of binutils don't - enable -Werror and the defines are not used. Anyway, reduce the - number of files that might hit this problem by only including dlfcn.h - where it is needed. - - PR 12265 - * sysdep.h: Don't include dlfcn.h here. - * plugin.c: Include it here. - -2022-08-26 GDB Administrator - - Automatic date update in version.in - -2022-08-25 Philippe Waroquiers - - Allow to document user-defined aliases. - Compared to the previous version, this version fixes the comments reported by - Tom Tromey and ensures that the 'help some-user-documented-alias' - shows the alias definition to ensure the user understands this is an - alias even if specifically documented. - - When using 'help ALIASNAME', GDB shows the help of the aliased command. - This is a good default behaviour. - - However, GDB alias command allows to define aliases with arguments - possibly changing or tuning significantly the behaviour of - the aliased command. In such a case, showing the help of the aliased - command might not be ideal. - - This is particularly true when defining an alias as a set of - nested 'with' followed by a last command to launch, such as: - (gdb) alias pp10 = with print pretty -- with print elements 10 -- print - Asking 'help pp10' shows the help of the 'with' command, which is - not particularly useful: - (gdb) help pp10 - with, pp10, w - alias pp10 = with print pretty -- with print elements 10 -- print - Temporarily set SETTING to VALUE, run COMMAND, and restore SETTING. - Usage: with SETTING [VALUE] [-- COMMAND] - .... - - Such an alias can now be documented by the user: - (gdb) document pp10 - >Pretty printing an expressiong, printing 10 elements. - >Usage: pp10 [PRINT-COMMAND-OPTIONS] EXP - >See 'help print' for more information. - >end - (gdb) help pp10 - alias pp10 = with print pretty -- with print elements 10 -- print - Pretty printing an expressiong, printing 10 elements. - Usage: pp10 [PRINT-COMMAND-OPTIONS] EXP - See 'help print' for more information. - (gdb) - - When a user-defined alias is documented specifically, help and apropos - use the provided alias documentation instead of the documentation of - the aliased command. - - Such a documented alias is also not shown anymore in the help of the - aliased command, and the alias is not listed anymore in the help - of the aliased command. In particular for cases such as pp10 example above, - indicating that pp10 is an alias of the 'with' command is confusing. - -2022-08-25 Jan-Benedict Glaw - - sim/aarch64: Fix aarch64_get_CPSR_bits() declaration - Noticed while doing mass builds with a very recent GCC: - - /usr/lib/gcc-snapshot/bin/gcc -DHAVE_CONFIG_H -DWITH_HW=1 -DHAVE_DV_SOCKSER -DDEFAULT_INLINE=0 -Wall -Wdeclaration-after-statement -Wpointer-arith -Wno-unused -Wunused-value -Wunused-function -Wno-switch -Wno-char-subscripts -Wempty-body -Wunused-but-set-parameter -Wno-error=maybe-uninitialized -Wmissing-declarations -Wmissing-prototypes -Wdeclaration-after-statement -Wmissing-parameter-type -Wpointer-sign -Wold-style-declaration -Werror -I. -I/var/lib/laminar/run/gdb-aarch64-elf/1/binutils-gdb/sim/aarch64 -I../common -I/var/lib/laminar/run/gdb-aarch64-elf/1/binutils-gdb/sim/aarch64/../common -I../../include -I/var/lib/laminar/run/gdb-aarch64-elf/1/binutils-gdb/sim/aarch64/../../include -I../../bfd -I/var/lib/laminar/run/gdb-aarch64-elf/1/binutils-gdb/sim/aarch64/../../bfd -I../../opcodes -I/var/lib/laminar/run/gdb-aarch64-elf/1/binutils-gdb/sim/aarch64/../../opcodes -I../.. -I/var/lib/laminar/run/gdb-aarch64-elf/1/binutils-gdb/sim/aarch64/../../gnulib/import -I../../gnulib/import -g -O2 -c -o cpustate.o -MT cpustate.o -MMD -MP -MF .deps/cpustate.Tpo cpustate.c - cpustate.c:270:1: error: conflicting types for 'aarch64_get_CPSR_bits' due to enum/integer mismatch; have 'uint32_t(sim_cpu *, FlagMask)' {aka 'unsigned int(struct _sim_cpu *, FlagMask)'} [-Werror=enum-int-mismatch] - 270 | aarch64_get_CPSR_bits (sim_cpu *cpu, FlagMask mask) - | ^~~~~~~~~~~~~~~~~~~~~ - In file included from sim-main.h:30, - from cpustate.c:28: - cpustate.h:310:20: note: previous declaration of 'aarch64_get_CPSR_bits' with type 'uint32_t(sim_cpu *, uint32_t)' {aka 'unsigned int(struct _sim_cpu *, unsigned int)'} - 310 | extern uint32_t aarch64_get_CPSR_bits (sim_cpu *, uint32_t); - | ^~~~~~~~~~~~~~~~~~~~~ - cc1: all warnings being treated as errors - -2022-08-25 H.J. Lu - - x86: Ignore protected visibility in shared libraries on Solaris - On x86, the PLT entry in executable may be used as function address for - functions in shared libraries. If functions are protected, the function - address used in executable can be different from the function address - used in shared library. This will lead to incorrect run-time behavior - if function pointer equality is needed. By default, x86 linker issues - an error in this case. - - On Solaris, linker issued an error for - - struct tm *tb = (kind == CPP_time_kind::FIXED ? gmtime : localtime) (&tt); - - where gmtime is a protected function in libc.so. Use gmtime's PLT entry - in executable as function address is safe since function pointer equality - isn't needed. Ignore protected visibility in shared libraries on Solaris - to disable linker error. If function pointer equality is needed, linker - will silently generate executable with incorrect run-time behavior on - Solaris. - - PR ld/29512 - * elf32-i386.c (elf_i386_scan_relocs): Ignore protected - visibility in shared libraries on Solaris. - * elf64-x86-64.c (elf_x86_64_scan_relocs): Likewise. - -2022-08-25 Nick Clifton - - GAS: Add a return type tag to DWARF DIEs generated for function symbols. - PR 29517 - * dwarf2dbg.c (GAS_ABBREV_COMP_UNIT): New defined constant. - (GAS_ABBREV_SUBPROG): New defined constant. - (GAS_ABBREV_NO_TYPE): New defined constant. - (out_debug_abbrev): Use the new defined constants when emitting - abbreviation numbers. Generate an abbreviation for an unspecified - type. - (out_debug_info): Use the new defined constants when referring to - abbreviations. Generate a use of the no_type abbreviation. - Reference the use when generating DIEs for functions. - * testsuite/gas/elf/dwarf-3-func.d: Update to allow for newly - extended output from the assembler. - * testsuite/gas/elf/dwarf-5-func-global.d: Likewise. - * testsuite/gas/elf/dwarf-5-func-local.d: Likewise. - * testsuite/gas/elf/dwarf-5-func.d: Likewise. - - GAS: Allow AArch64 pseudo-ops to accept the command line separator character. - PR 29519 - * config/tc-aarch64.c (s_unreq): Use find_end_of_line(). - (s_aarch64_cpu): Likewise. - (s_aarch64_arch): Likewise. - (s_aarch64_arch_extension): Likewise. - * testsuite/gas/aarch64/pr29519.d: New test driver file. - * testsuite/gas/aarch64/pr29519.s: New test source file. - -2022-08-25 Palmer Dabbelt - - gas: NEWS: Add the RISC-V features for 2.39 - - gas: NEWS: Add the RISC-V features for 2.38 - - gas: NEWS: Add the RISC-V features for 2.37 - - gas: NEWS: Add the RISC-V features for 2.36 - - gas: NEWS: Add the RISC-V features for 2.35 - - gas: NEWS: Add the RISC-V features for 2.31 - -2022-08-25 Alan Modra - - PR11290, avr-ld "out of range error" is confusing - Don't overload bfd_reloc_outofrange with what is really a domain error - (target at odd address), or an overflow. - - PR 11290 - * reloc.c (bfd_reloc_other): Correct comment. - * elf32-avr.c (avr_final_link_relocate): Return bfd_reloc_other - for unaligned reloc target values. Return bfd_reloc_overflow - when stubs are too far away and when R_AVR_LDS_STS_16, - R_AVR_PORT6, or R_AVR_PORT5 overflow. - (elf32_avr_relocate_section): Report more descriptive relocation - errors. - * bfd-in2.h: Regenerate. - -2022-08-25 Martin Storsjö - - ld: pe: Move the return type to a separate line from the function name - This fixes the coding style of an old, preexisting function. - -2022-08-25 Alan Modra - - PR10372, SH: ld test with sim/sh/run fails always - PR 10372 - * testsuite/ld-sh/start.s: Add _start sym. Use trapa 34. Create - an alloc .stack section. - -2022-08-25 Alan Modra - - Re: LoongArch: ld: Fix bug not generate plt when link a dso - Fixes loongarch32-elf +FAIL: medium jirl plt - - * testsuite/ld-loongarch-elf/cmodel.exp: Don't run test when - no shared library support. - -2022-08-25 GDB Administrator - - Automatic date update in version.in - -2022-08-24 Martin Storsjö - - ld: pe: Make archive member file extension comparisons case insensitive when cross compiling too - On Windows, filename_cmp is case insensitive, but when cross compiling - with libraries that may contain members with uppercase file names, we - should keep those comparisons case insensitive when running the build - tools on other OSes too. - - Also make the check for .def consistent with the other ones, fixing - out of bounds reads if file names are shorter than 4 characters. - -2022-08-24 Richard Earnshaw - - gas: arm: handle multiple .directives on a single line (PR29519) - There's been a long-standing bug in the arm backend where - target-specific directives did not correctly handle lines with - multiple statements. This patch fixes the issue for all the cases - I've been able to find. - - It does result in a slight change in behaviour when errors are - encountered: where, previously, - - .cpu arm6 bar - - would result in the error "junk at end of line, first unrecognized - character is `b'", we now get "unknown cpu `arm6 bar'", which I think - is slightly more helpful anyway. Similar errors are generated for - other directives. - -2022-08-24 Andrew Burgess - - gdb: new 'maint print frame-id' command - When debugging a certain class of GDB bug, I often end up wanting to - know what GDB thinks the frame-id is in a particular frame. It's - not too hard to pull this from some debug output, but I thought it - might be nice if there was a maintenance command that could tell us. - - This commit adds 'maint print frame-id' which prints the frame-id of - the currently selected frame. You can also pass a frame level number - to find the frame-id for a specific frame. - - There's a new test too. - -2022-08-24 liuzhensong - - LoongArch: ld: Fix bug not generate plt when link a dso - Fix the bug that can not generate func@plt - when linking a undefined function with cmodel=medium. - Add testcase. - - bfd/ - * elfnn-loongarch.c - ld/testsuite/ld-loongarch-elf/ - * cmodel-libjirl.dd - * cmodel.exp - * libjirl.s - -2022-08-24 GDB Administrator - - Automatic date update in version.in - -2022-08-23 Alan Modra - - SHT_RELR sh_link and sh_info - I don't think it makes any sense for a SHT_RELR section to specify a - symbol table with sh_link. SHT_RELR relocations don't use symbols. - There is no real need to specify sh_info either, SHT_RELR is not for - relocatable object files. Anyway, fuzzers of course don't restrict - themselves to even half-sensible objects. So they found a hole in - objcopy using a non-alloc SHT_RELR in an ET_EXEC. In that case BFD - set up the SHT_RELR section as if it were a SHT_REL against the - sh_info target section. When it came to reading in the target section - relocs, the count was horribly wrong which caused a buffer overflow. - - * elf.c (bfd_section_from_shdr ): Always just make a - normal section, don't treat it as a reloc section. - -2022-08-23 Alan Modra - - Re: bfd_elf_set_group_contents assertion - Further to commit 7744e3278b9f. - - * elf.c (bfd_elf_set_group_contents): Restrict loc in loop writing - contents, and add another assertion. - -2022-08-23 Nick Clifton - - Add an option to dlltool to allow the creation of deterministic libraries. - PR 29489 - * dlltool.c (deterministic): New variable. - (gen_lib_file): If deterministic is true set the - BFD_DETERMINISTIC_OUTPUT flag. - (usage): Mention --deterministic-libraries and - --non-deterministic-libraries. - (long_options): Add new options. - (main): Parse new options. - * doc/binutils.texi: Document the new options. - * NEWS: Mention the new feature. - -2022-08-23 Nelson Chu - - binutils: Updated my email address. - binutils/ - * MAINTAINERS (RISC-V): Updated my email address. - -2022-08-23 GDB Administrator - - Automatic date update in version.in - -2022-08-22 Tom Tromey - - Implement target async for Windows - This implements target async for Windows. The basic idea is to have - the worker thread block in WaitForDebugEvent, then notify the event - loop when an event is seen. In a few situations, this blocking - behavior is undesirable, so the functions passed to do_synchronously - are changed to return a boolean indicating which behavior is needed. - -2022-08-22 Tom Tromey - - Move some Windows operations to worker thread - On Windows, certain debugging APIs can only be called from the thread - that started (or attached) to the inferior. Also, there is no way on - Windows to wait for a debug event in addition to other events. - Therefore, in order to implement target async for Windows, gdb will - have to call some functions in a worker thread. - - This patch implements the worker thread and moves the necessary - operations there. Target async isn't yet implemented, so this patch - does not cause any visible changes. - -2022-08-22 Tom Tromey - - Avoid crash with Ravenscar tasks - When using Ravenscar, gdb can crash if the user sets a breakpoint very - early in task startup. This happens because gdb thinks the runtime is - initialized, but in practice the particular task isn't sufficiently - initialized. This patch avoids the issue by turning an assertion into - an early return. - - I tested this using the AdaCore internal test suite. I don't know how - to test Ravenscar using the FSF test suite. - -2022-08-22 Nick Clifton - - Fix compile time warning from Clang about error messages not being printed safely. - - Have readelf warn users if it is asked to decode a LLVM bitcode file or a golang object file. - * readelf.c (check_magic_number): New function. Checks the magic - bytes at the start of a file. If they are not the ELF format - magic values, then attempts to generate a helpful error message. - (process_file_header): Call check_magic_number. - -2022-08-22 Frederic Cambus - - Add OpenBSD AArch64 Little Endian BFD support. - * config.bfd (aarch64-*-openbsd*): Add target. - -2022-08-22 tangxiaolin - - LoongArch: gas: add support using constant variable in instructions. - Instructions that can load immediate support using constant - variable like ".equ var, 123 li.w/d resgister, var". - - gas/ - * config/loongarch-parse.y - * config/tc-loongarch.c - - Add four testcases.One is a program using constant variable, - one test using label is unsupported, and another two test - almost instructions that can load immediate. - - gas/ - * testsuite/gas/loongarch/li.d - * testsuite/gas/loongarch/li.s - * testsuite/gas/loongarch/imm_ins_label-fail.d - * testsuite/gas/loongarch/imm_ins_label-fail.l - * testsuite/gas/loongarch/imm_ins_label-fail.s - * testsuite/gas/loongarch/imm_ins.d - * testsuite/gas/loongarch/imm_ins.s - * testsuite/gas/loongarch/imm_ins_32.d - * testsuite/gas/loongarch/imm_ins_32.s - -2022-08-22 GDB Administrator - - Automatic date update in version.in - -2022-08-21 Tom Tromey - - Fix crash in gdbpy_parse_register_id - I noticed that gdbpy_parse_register_id would assert if passed a Python - object of a type it was not expecting. The included test case shows - this crash. This patch fixes the problem and also changes - gdbpy_parse_register_id to be more "Python-like" -- it always ensures - the Python error is set when it fails, and the callers now simply - propagate the existing exception. - -2022-08-21 GDB Administrator - - Automatic date update in version.in - -2022-08-20 Alan Modra - - symbols for bfd_simple_get_relocated_section_contents - If symbols are provided by the caller of this function they are - passed on to bfd_get_relocated_section_contents. No surprises there. - It gets a little weird if they are not provided. In that case they - are read from the bfd by _bfd_generic_link_add_symbols, and global - symbols are added to the generic linker hash table. Global symbols - are not added to the linker hash table if symbols *are* provided. Now - the linker hash table symbols are not used by the generic - bfd_get_relocated_section_conents, and also not by most target - versions when called from bfd_simple_get_relocated_section_contents - except for symbols like "_gp". So it mostly doesn't matter whether - symbols are in the linker hash table, but it's odd that there is a - difference. We could always add them, but I'm inclined to think that - is unnecessary work so this patch always leaves them out. - - Also, symbols are canonicalized and written into a malloc'd buffer. - The buffer isn't freed, see commit 8e16317ca5eb. I don't know whether - that matters any more, but in any case I can't see why we need another - copy of the symbols when _bfd_generic_link_read_symbols has already - cached symbols. - - * simple.c (bfd_simple_get_relocated_section_contents): If not - provided, read symbols via bfd_generic_link_read_symbols. Do - not create another copy of symbols. Tidy failure exits. - Minor tidy of bfd_get_relocated_section_contents and - bfd_get_full_section_contents arguments. - -2022-08-20 Alan Modra - - Re: Missing linking test case for pe dll using a def file - Fixes this when cross-compiling from x86_64-linux - x86_64-w64-mingw32 +FAIL: compiling shared lib fastcall/stdcall - - * testsuite/ld-pe/pe-run2-def.exp (test_direct2_link_dll_def): - Use CC_FOR_TARGET and CFLAGS_FOR_TARGET rather than CC and CFLAGS. - -2022-08-20 GDB Administrator - - Automatic date update in version.in - -2022-08-19 Patrick Monnerat - - gdb_do_one_event: use integer test syntax - Timeout is an int, not a bool. - -2022-08-19 Tom Tromey - - Remove two initialization functions - I noticed a couple of initialization functions that aren't really - needed, and that currently require explicit calls in gdb_init. This - patch removes these functions, simplifying gdb a little. - - Regression tested on x86-64 Fedora 34. - -2022-08-19 Simon Marchi - - gdb/testsuite: re-compile entry-value-typedef .S files with -fPIE - As Luis pointed out here [1], the AArch64 variant of the test doesn't - work on systems that use PIE by default. For example, on this Debian - 11: - - $ make check TESTS="gdb.dwarf2/entry-value-typedef.exp" - gdb compile failed, /usr/bin/ld: /tmp/ccJE8ZSr.o: relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `_ZNSsD1Ev@@GLIBCXX_3.4' which may bind externally can not be used when making a shared object; recompile with -fPIC - /usr/bin/ld: /tmp/ccJE8ZSr.o(.text+0x38): unresolvable R_AARCH64_ADR_PREL_PG_HI21 relocation against symbol `_ZNSsD1Ev@@GLIBCXX_3.4' - - This is because entry-value-typedef-aarch64.S was generated on an old - system that does not generate position-independent code by default, but - the system the test runs on tries to link the test executable as - position-independent. Fix this by regenerating the same binary on the - same system as the original one, but with -fPIE this time. Do the same - for the amd64 binary, although this one was already position-independent - so the generated code doesn't change. - - With this patch applied, the test passes on the Debian 11 AArch64 - system. - - [1] https://sourceware.org/pipermail/gdb-patches/2022-August/191462.html - - Change-Id: I68d55adaa56a7a3eddb0c13980b1a98b791f8144 - -2022-08-19 Felix Willgerodt - - gdb, testsuite: Adapt gdb.base/callfuncs.exp for new clang warning. - Clang 15.0.0 enabled the warning for deprecated non-prototype functions - by default: https://reviews.llvm.org/D122895 - Callfuncs.exp is impacted and won't run due to new warnings: - - callfuncs.c:339:5: warning: a function declaration without a prototype is - deprecated in all versions of C and is not supported in C2x - [-Wdeprecated-non-prototype] - int t_float_values (float_arg1, float_arg2) - - This patch disables those warnings with -Wno-deprecated-non-prototype. - Removing the test for deprecated syntax would also be an option. But I will - leave that up for others to decide/implement. - -2022-08-19 Felix Willgerodt - - gdb, testsuite: Enable testcases that suppress specific warnings, for icc/icx. - To cite gdb.exp: - Some C/C++ testcases unconditionally pass -Wno-foo as additional - options to disable some warning. That is OK with GCC, because - by design, GCC accepts any -Wno-foo option, even if it doesn't - support -Wfoo. Clang however warns about unknown -Wno-foo by - default, unless you pass -Wno-unknown-warning-option as well. - We do that here, so that individual testcases don't have to - worry about it. - - This patch adds the same option that already exists for clang for icx and - adds the equivalent icc option. - -2022-08-19 Tiezhu Yang - - gdb: LoongArch: Handle variadic arguments - According to LoongArch ELF ABI specification [1], variadic arguments - are passed in GARs in the same manner as named arguments. And after - a variadic argument has been passed on the stack, all future arguments - will also be passed on the stack, i.e., the last argument register may - be left unused due to the aligned register pair rule. long double data - tpye is passed in an aligned GAR pair, the first register in the pair - is even-numbered. - - [1] https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html - -2022-08-19 Alan Modra - - loongarch64_pei_vec garbage in objcopy'd relocs - Like commit a9c09a3667cc, but for loongarch64. - - * coff-loongarch64.c (SWAP_IN_RELOC_OFFSET): Define. - (SWAP_OUT_RELOC_OFFSET): Define. - -2022-08-19 GDB Administrator - - Automatic date update in version.in - -2022-08-18 Vladimir Mezentsev - - gprofng: fix bug 29479 Collection fails when built without java support - gprofng/ChangeLog - 2022-08-17 Vladimir Mezentsev - - PR gprofng/29479 - * libcollector/collector.c: Add #if defined(GPROFNG_JAVA_PROFILING) for - java specific code. - * libcollector/unwind.c: Likewise. - -2022-08-18 Simon Marchi - - gdb: call check_typedef at beginning of dwarf_expr_context::fetch_result - Bug 29374 shows this crash: - - $ ./gdb -nx --data-directory=data-directory -q -batch -ex "catch throw" -ex r -ex bt a.out - ... - /home/simark/src/binutils-gdb/gdb/../gdbsupport/array-view.h:217: internal-error: copy: Assertion `dest.size () == src.size ()' failed. - - The backtrace is: - - #0 internal_error (file=0x5555606504c0 "/home/simark/src/binutils-gdb/gdb/../gdbsupport/array-view.h", line=217, fmt=0x55556064b700 "%s: Assertion `%s' failed.") at /home/simark/src/binutils-gdb/gdbsupport/errors.cc:51 - #1 0x000055555d41c0bb in gdb::copy (src=..., dest=...) at /home/simark/src/binutils-gdb/gdb/../gdbsupport/array-view.h:217 - #2 0x000055555deef28c in dwarf_expr_context::fetch_result (this=0x7fffffffb830, type=0x621007a86830, subobj_type=0x621007a86830, subobj_offset=0, as_lval=false) at /home/simark/src/binutils-gdb/gdb/dwarf2/expr.c:1040 - #3 0x000055555def0015 in dwarf_expr_context::evaluate (this=0x7fffffffb830, addr=0x62f00004313e "0", len=1, as_lval=false, per_cu=0x60b000069550, frame=0x621007c9e910, addr_info=0x0, type=0x621007a86830, subobj_type=0x621007a86830, subobj_offset=0) at /home/simark/src/binutils-gdb/gdb/dwarf2/expr.c:1091 - #4 0x000055555e084327 in dwarf2_evaluate_loc_desc_full (type=0x621007a86830, frame=0x621007c9e910, data=0x62f00004313e "0", size=1, per_cu=0x60b000069550, per_objfile=0x613000006080, subobj_type=0x621007a86830, subobj_byte_offset=0, as_lval=false) at /home/simark/src/binutils-gdb/gdb/dwarf2/loc.c:1485 - #5 0x000055555e0849e2 in dwarf2_evaluate_loc_desc (type=0x621007a86830, frame=0x621007c9e910, data=0x62f00004313e "0", size=1, per_cu=0x60b000069550, per_objfile=0x613000006080, as_lval=false) at /home/simark/src/binutils-gdb/gdb/dwarf2/loc.c:1529 - #6 0x000055555e0828c6 in dwarf_entry_parameter_to_value (parameter=0x621007a96e58, deref_size=0x0, type=0x621007a86830, caller_frame=0x621007c9e910, per_cu=0x60b000069550, per_objfile=0x613000006080) at /home/simark/src/binutils-gdb/gdb/dwarf2/loc.c:1235 - #7 0x000055555e082f55 in value_of_dwarf_reg_entry (type=0x621007a86890, frame=0x621007acc510, kind=CALL_SITE_PARAMETER_DWARF_REG, kind_u=...) at /home/simark/src/binutils-gdb/gdb/dwarf2/loc.c:1332 - #8 0x000055555e083449 in value_of_dwarf_block_entry (type=0x621007a86890, frame=0x621007acc510, block=0x61e000033568 "T\004\205\001\240\004\004\243\001T\237\004\240\004\261\004\001T\004\261\004\304\005\004\243\001T\237\004\304\005\310\005\001T\004\310\005\311\005\004\243\001T\237", block_len=1) at /home/simark/src/binutils-gdb/gdb/dwarf2/loc.c:1365 - #9 0x000055555e094d40 in loclist_read_variable_at_entry (symbol=0x621007a99bd0, frame=0x621007acc510) at /home/simark/src/binutils-gdb/gdb/dwarf2/loc.c:3889 - #10 0x000055555f5192e0 in read_frame_arg (fp_opts=..., sym=0x621007a99bd0, frame=0x621007acc510, argp=0x7fffffffbf20, entryargp=0x7fffffffbf60) at /home/simark/src/binutils-gdb/gdb/stack.c:559 - #11 0x000055555f51c352 in print_frame_args (fp_opts=..., func=0x621007a99ad0, frame=0x621007acc510, num=-1, stream=0x6030000bad90) at /home/simark/src/binutils-gdb/gdb/stack.c:887 - #12 0x000055555f521919 in print_frame (fp_opts=..., frame=0x621007acc510, print_level=1, print_what=LOCATION, print_args=1, sal=...) at /home/simark/src/binutils-gdb/gdb/stack.c:1390 - #13 0x000055555f51f22e in print_frame_info (fp_opts=..., frame=0x621007acc510, print_level=1, print_what=LOCATION, print_args=1, set_current_sal=0) at /home/simark/src/binutils-gdb/gdb/stack.c:1116 - #14 0x000055555f526c6d in backtrace_command_1 (fp_opts=..., bt_opts=..., count_exp=0x0, from_tty=0) at /home/simark/src/binutils-gdb/gdb/stack.c:2079 - #15 0x000055555f527ae5 in backtrace_command (arg=0x0, from_tty=0) at /home/simark/src/binutils-gdb/gdb/stack.c:2198 - - The problem is that the type that gets passed down to - dwarf_expr_context::fetch_result (the type of a variable of which we're - trying to read the entry value) is a typedef whose size has never been - computed yet (check_typedef has never been called on it). As we get in - the DWARF_VALUE_STACK case (line 1028 of dwarf2/expr.c), the `len` - variable is therefore set to 0, instead of the actual type length. We - then call allocate_value on subobj_type, which does call check_typedef, - so the length of the typedef gets filled in at that point. We end up - passing to the copy function a source array view of length 0 and a - target array view of length 4, and the assertion fails. - - Fix this by calling check_typedef on both type and subobj_type at the - beginning of fetch_result. - - I tried writing a test for this using the DWARF assembler, but I haven't - succeeded. It's possible that we need to get into this specific code - path (value_of_dwarf_reg_entry and all) to manage to get to - dwarf_expr_context::fetch_result with a typedef type that has never been - resolved. In all my attempts, the typedef would always be resolved - already, so the bug wouldn't show up. - - As a fallback, I made a gdb.dwarf2 test with compiler-generated .S - files. I don't particularly like those, but I think it's better than no - test. The .cpp source code is the smallest reproducer I am able to make - from the reproducer given in the bug (thanks to Pedro for suggestions on - how to minimize it further than I had). Since I tested on both amd64 - and aarch64, I added versions of the test for these two architectures. - - Change-Id: I182733ad08e34df40d8bcc47af72c482fabf4900 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29374 - -2022-08-18 Luis Machado - - [aarch64] Remove handling of ADR/ADRP from prologue analyzer - As reported by Tom in https://sourceware.org/pipermail/gdb-patches/2022-August/191357.html, - the aarch64 prologue analyzer considers the adrp instruction in the - gdb.dwarf2/dw2-dir-file-name.exp testcase to be part of a prologue. - - The function has no prologue though, and it only loads the volatile variable - from memory. GDB should not skip any instructions in this case. - - Doing some archaeology, it seems handling for adr/adrp in prologues was - included with the original aarch64 port. It might've been an oversight. - - In the particular case of gdb.dwarf2/dw2-dir-file-name.exp, the analyzer skips - a couple instructions and leaves us in a nice spot where the address to the - variable "v" is already in w0. But no prologues exists. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29481 - -2022-08-18 Tom Tromey - - Change bookmark allocation - This changes how bookmarks are allocated and stored, replacing a - linked list with a vector and removing some ALL_* iterator macros. - Regression tested on x86-64 Fedora 34. - -2022-08-18 Thiago Jung Bauermann - - Add test for AArch64 Scalable Vector Extension - It exercises a bug that GDB previously had where it would lose track of - some registers when the inferior changed its vector length. - - It also checks that the vg register and the size of the z0-z31 registers - correctly reflect the new vector length. - -2022-08-18 Thiago Jung Bauermann - - Fix thread's gdbarch when SVE vector length changes - When the inferior program changes the SVE length, GDB can stop tracking - some registers as it obtains the new gdbarch that corresponds to the - updated length: - - Breakpoint 1, do_sve_ioctl_test () at sve-ioctls.c:44 - 44 res = prctl(PR_SVE_SET_VL, i, 0, 0, 0, 0); - (gdb) print i - $2 = 32 - (gdb) info registers - ⋮ - [ snip registers x0 to x30 ] - ⋮ - sp 0xffffffffeff0 0xffffffffeff0 - pc 0xaaaaaaaaa8ac 0xaaaaaaaaa8ac - cpsr 0x60000000 [ EL=0 BTYPE=0 C Z ] - fpsr 0x0 0 - fpcr 0x0 0 - vg 0x8 8 - tpidr 0xfffff7fcb320 0xfffff7fcb320 - (gdb) next - 45 if (res < 0) { - (gdb) info registers - ⋮ - [ snip registers x0 to x30 ] - ⋮ - sp 0xffffffffeff0 0xffffffffeff0 - pc 0xaaaaaaaaa8cc 0xaaaaaaaaa8cc - cpsr 0x200000 [ EL=0 BTYPE=0 SS ] - fpsr 0x0 0 - fpcr 0x0 0 - vg 0x4 4 - (gdb) - - Notice that register tpidr disappeared when vg (which holds the vector - length) changed from 8 to 4. The tpidr register is provided by the - org.gnu.gdb.aarch64.tls feature. - - This happens because the code that searches for a new gdbarch to match the - new vector length in aarch64_linux_nat_target::thread_architecture doesn't - take into account the features present in the target description associated - with the previous gdbarch. This patch makes it do that. - - Since the id member of struct gdbarch_info is now unused, it's removed. - -2022-08-18 Ralf Habacker - - Missing linking test case for pe dll using a def file. - PR 28362 - * testsuite/ld-pe/pe-run2-def.exp: New file. - -2022-08-18 Patrick Monnerat - - gdbsupport/event-loop: add a timeout parameter to gdb_do_one_event - Since commit b2d8657, having a per-interpreter event/command loop is not - possible anymore. - - As Insight uses a GUI that has its own event loop, gdb and GUI event - loops have then to be "merged" (i.e.: work together). But this is - problematic as gdb_do_one_event is not aware of this alternate event - loop and thus may wait forever. - - A solution is to delegate GUI events handling to the gdb events handler. - Insight uses Tck/Tk as GUI and the latter offers a "notifier" feature to - implement such a delegation. The Tcl notifier spec requires the event wait - function to support a timeout parameter. Unfortunately gdb_do_one_event - does not feature such a parameter. - This timeout cannot be implemented externally with a gdb timer, because - it would become an event by itself and thus can cause a legitimate event to - be missed if the timeout is 0. - Tcl implements "idle events" that are (internally) triggered only when no - other event is pending. For this reason, it can call the event wait function - with a 0 timeout quite often. - - This patch implements a wait timeout to gdb_do_one_event. The initial - pending events monitoring is performed as before without the possibility - to enter a wait state. If no pending event has been found during this - phase, a timer is then created for the given timeout in order to re-use - the implemented timeout logic and the event wait is then performed. - This "internal" timer only limits the wait time and should never be triggered. - It is deleted upon gdb_do_one_event exit. - - The new parameter defaults to "no timeout" (-1): as it is used by Insight - only, there is no need to update calls from the gdb source tree. - -2022-08-18 Patrick Monnerat - - gdb: add Patrick Monnerat to gdb/MAINTAINERS - -2022-08-18 Jan Beulich - - x86: move / quiesce pre-386 non-16-bit warning - Emitting this warning for every insn, including ones having actual - errors, is annoying. Introduce a boolean variable to emit the warning - just once on the first insn after .arch may have changed the things, and - move the warning to output_insn(). (I didn't want to go as far as - checking whether the .arch actually turned off the i386 bit, but doing - so would be an option.) - - x86: insert "no error" enumerator in i386_error enumeration - The value of zero would better not indicate any error, but rather hit - the abort() at the top of the consuming switch(). - -2022-08-18 GDB Administrator - - Automatic date update in version.in - -2022-08-17 Maciej W. Rozycki - - GDB/testsuite: Fix PARAM_ZUINTEGER reported for PARAM_ZUINTEGER_UNLIMITED - Correctly report PARAM_ZUINTEGER_UNLIMITED rather than PARAM_ZUINTEGER - in testing a Python parameter of the PARAM_ZUINTEGER_UNLIMITED type. - -2022-08-17 Alan Modra - - bfd_elf_set_group_contents assertion - objcopy of broken SHT_GROUP sections shouldn't write garbage. - - * elf.c (bfd_elf_set_group_contents): If number of entries is - unexpected, fill out section with zeros. - -2022-08-17 Alan Modra - - timeout in mmo_get_symbols - Fix mmo_get_byte to return a fail-safe value, not just on the first - call with a read error but on subsequent calls too. - - * mmo.c (mmo_get_byte): Return the fail-safe value on every - call after a read error. - -2022-08-17 Alan Modra - - mmo.c leak in mmo_make_section - * mmo.c (mmo_make_section): Alloc name using bfd_alloc. Use - bfd_error_no_memory. - (mmo_decide_section): Check for NULL return from mmo_make_section. - -2022-08-17 Alan Modra - - asan: heap buffer overflow in mmo_scan - mmo_get_loc needs to handle arbitrary vma and size chunks. Fuzzers - found that it wasn't working so well when the end of chunks were - getting close to address wrap-around. - - * mmo.c (mmo_get_loc): Make "size" unsigned. Avoid arithmetic - overflow when calculating whether range hits an existing chunk. - -2022-08-17 Alan Modra - - elf.c tidy - Swap params of is_note, so they are section, segment like others used - in rewrite_elf_program_header. Whitespace fixes, plus wrapping of - overlong lines. - -2022-08-17 GDB Administrator - - Automatic date update in version.in - -2022-08-16 Torbjörn SVENSSON - - bfd: Define ___lc_codepage_func prototype for older MinGW-w64 - In commit 68e80d96a84282d547f3b3c1234c99009521630c, the usage of - ___lc_codepage_func was introduced to determine the current encoding. - - Prior to version 9.0 of MinGW-w64, the function prototype for - ___lc_codepage_func was missing and trying to build BFD caused the - following error: - - error: implicit declaration of function ‘___lc_codepage_func’ - - This changeset adds a conditonal definition of - ___lc_codepage_func to allow a sucessful build with MinGW-w64. - -2022-08-16 H.J. Lu - - i386: Add MAX_OPERAND_BUFFER_SIZE - When displaying operands, invalid opcodes may overflow operand buffer - due to additional styling characters. Each style is encoded with 3 - bytes. Define MAX_OPERAND_BUFFER_SIZE for operand buffer size and - increase it from 100 bytes to 128 bytes to accommodate 9 sets of styles - in an operand. - - gas/ - - PR binutils/29483 - * testsuite/gas/i386/i386.exp: Run pr29483. - * testsuite/gas/i386/pr29483.d: New file. - * testsuite/gas/i386/pr29483.s: Likewise. - - opcodes/ - - PR binutils/29483 - * i386-dis.c (MAX_OPERAND_BUFFER_SIZE): New. - (obuf): Replace 100 with MAX_OPERAND_BUFFER_SIZE. - (staging_area): Likewise. - (op_out): Likewise. - -2022-08-16 Andrew Burgess - - gdb/riscv: fix gdb.arch/riscv-unwind-long-insn.exp on RV64 - I noticed that the gdb.arch/riscv-unwind-long-insn.exp test was - failing when run on a 64-bit RISC-V target. - - The problem was that GDB was failing to stop after a finish command, - and was then running to an unexpected location. - - The reason GDB failed to stop at the finish breakpoint was that the - frame-id of the inferior, when we reached the finish breakpoint, - didn't match the expected frame-id that was stored on the breakpoint. - - The reason for this mismatch was that the assembler code that is - included in this test, was written only taking 32-bit RISC-V into - account, as a result, the $fp register was being corrupted, and this - was causing the frame-id mismatch. - - Specifically, the $fp register would end up being sign-extended from - 32 to 64 bits. If the expected $fp value has some significant bits - above bit 31 then the computed and expected frame-ids would not match. - - To fix this I propose merging the two .s files into a single .S file, - and making use of preprocessor macros to specialise the file for the - correct size of $fp. There are plenty of existing tests that already - make use of preprocessor macros in assembler files, so I assume this - approach is fine. - - Once I'd decided to make use of preprocessor macros to solve the 32/64 - bit issue, then I figured I might as well merge the two test assembler - files, they only differed by a single instruction. - - With this change in place I now see this test fully passing on 32 and - 64 bit RISC-V targets. - -2022-08-16 Simon Marchi - - gdb/testsuite: fix breakpoint script output in gdb.mi/mi-break.exp - Commit 9db0d8536dbc ("gdb/mi: fix breakpoint script field output") fixed - the output of the script key in the MI breakpoint output, from - - script={"print 10","continue"} - - to - - script=["print 10","continue"] - - However, it missed updating this test case, which still tests for the - old (broken) form, causing: - - FAIL: gdb.mi/mi-break.exp: mi-mode=main: test_breakpoint_commands: breakpoint commands: check that commands are set (unexpected output) - FAIL: gdb.mi/mi-break.exp: mi-mode=separate: test_breakpoint_commands: breakpoint commands: check that commands are set (unexpected output) - - Update the test to expect the new form. - - Change-Id: I174919d4eea53e96d914ca9bd1cf6f01c8de30b8 - -2022-08-16 Tom Tromey - - Use strwinerror in gdb/windows-nat.c - When working on windows-nat.c, it's useful to see an error message in - addition to the error number given by GetLastError. This patch moves - strwinerror from gdbserver to gdbsupport, and then updates - windows-nat.c to use it. A couple of minor changes to strwinerror - (constify the return type and use the ARRAY_SIZE macro) are also - included. - -2022-08-16 Tom Tromey - - Remove register_gdbarch_init - This removes the deprecated register_gdbarch_init in favor a default - argument to gdbarch_register. Regression tested on x86-64 Fedora 34. - -2022-08-16 Alan Modra - - PR29495, rewrite_elf_program_header looping - This patch, in order of significance: - 1) Replaces some macros with inline functions. - 2) Those inline functions catch and avoid arithmetic overflows when - comparing addresses. - 3) When assigning sections to segments (IS_SECTION_IN_INPUT_SEGMENT) - use bed->want_p_paddr_set_to_zero to decide whether lma vs p_paddr - or vma vs p_vaddr should be tested. When remapping, use the same - test, and use is_note rather than the more restrictive - IS_COREFILE_NOTE. - - It's important that the later tests not be more restrictive. If they - are it can lead to the situation triggered by the testcases, where a - section seemingly didn't fit and thus needed a new mapping. It didn't - fit the new mapping either, and this repeated until memory exhausted. - - PR 29495 - * elf.c (SEGMENT_END, SECTION_SIZE, IS_CONTAINED_BY_VMA): Delete. - (IS_CONTAINED_BY_LMA, IS_NOTE, IS_COREFILE_NOTE): Delete. - (segment_size, segment_end, section_size): New inline function. - (is_contained_by, is_note): Likewise. - (rewrite_elf_program_header): Use new functions. - -2022-08-16 Jan Beulich - - x86: shorten certain template names - Now that we can purge templates, let's use this to improve readability a - little by shortening a few of their names, making functionally similar - ones also have identical names in their multiple incarnations. - -2022-08-16 Jan Beulich - - x86: template-ize certain vector conversion insns - Many of the vector conversion insns come with X/Y/Z suffixed forms, for - disambiguation purposes in AT&T syntax. All of these gorups follow - certain patterns. Introduce "xy" and "xyz" templates to reduce - redundancy. - - To facilitate using a uniform name for both AVX and AVX512, further - introduce a means to purge a previously defined template: A standalone - will be recognized to have this effect. - - Note that in the course of the conversion VFPCLASSPH is properly split - to separate AT&T and Intel syntax forms, matching VFPCLASSP{S,D} and - yielding the intended "ambiguous operand size" diagnostic in Intel mode. - -2022-08-16 Jan Beulich - - x86: template-ize vector packed byte/word integer insns - Many of the vector integer insns come in byte/word element pairs. Most - of these pairs follow certain encoding patterns. Introduce a "bw" - template to reduce redundancy. - - Note that in the course of the conversion - - the AVX VPEXTRW template which is not being touched needs to remain - ahead of the new "combined" ones, as (a) this should be tried first - when matching insns against templates and (b) its Load attributes - requires it to be first, - - this add a benign/meaningless IgnoreSize attribute to the memory form - of PEXTRB; it didn't seem worth avoiding this. - -2022-08-16 Jan Beulich - - x86: re-order AVX512 S/G templates - The AVX2 gather ones are nicely grouped - do the same for the various - AVX512 scatter/gather ones. On the moved lines also convert EVex= to - EVex. - -2022-08-16 Jan Beulich - - x86: template-ize vector packed dword/qword integer insns - Many of the vector integer insns come in dword/qword element pairs. Most - of these pairs follow certain encoding patterns. Introduce a "dq" - template to reduce redundancy. - - Note that in the course of the conversion - - a few otherwise untouched templates are moved, so they end up next to - their siblings), - - drop an unhelpful Cpu64 from the GPR form of VPBROADCASTQ, matching - what we already have for KMOVQ - the diagnostic is better this way for - insns with multiple forms (i.e. the same Cpu64 attributes on {,V}MOVQ, - {,V}PEXTRQ, and {,V}PINSRQ are useful to keep), - - this adds benign/meaningless IgnoreSize attributes to the GPR forms of - KMOVD and VPBROADCASTD; it didn't seem worth avoiding this. - -2022-08-16 Jan Beulich - - x86: template-ize packed/scalar vector floating point insns - The vast majority of vector FP insns comes in single/double pairs. Many - pairs follow certain encoding patterns. Introduce an "sd" template to - reduce redundancy. Similarly, to further cover similarities between - AVX512F and AVX512-FP16, introduce an "sdh" template. - - For element-size Disp8 shift generalize i386-gen's broadcast size - determination, allowing Disp8MemShift to be specified without an operand - in the affected templated templates. While doing the adjustment also - eliminate an unhelpful (lost information) diagnostic combined with a use - after free in what is now get_element_size(). - - Note that in the course of the conversion - - the AVX512F form of VMOVUPD has a stray (leftover) Load attribute - dropped, - - VMOVSH has a benign IgnoreSize added (the attribute is still strictly - necessary for VMOVSD, and necessary for VMOVSS as long as we permit - strange combinations like "-march=i286+avx"), - - VFPCLASSPH is properly split to separate AT&T and Intel syntax forms, - matching VFPCLASSP{S,D}. - -2022-08-16 Jan Beulich - - revert "x86: Also pass -P to $(CPP) when processing i386-opc.tbl" - This reverts commit 384f368958f2a5bb083660e58e5f8a010e6ad429, which - broke i386-gen's emitting of diagnostics. As a replacement to address - the original issue of newer gcc no longer splicing lines when dropping - the line continuation backslashes, switch to using + as the line - continuation character, doing the line splicing in i386-gen. - -2022-08-16 GDB Administrator - - Automatic date update in version.in - -2022-08-15 Alan Modra - - PR29362, some binutils memory leaks - 2022-08-16 Alan Modra - Cunlong Li - - PR 29362 - * dwarf.c (free_debug_information): New function, extracted.. - (free_debug_memory): ..from here. - (process_debug_info): Use it when before clearing out unit - debug_information. Clear all fields. - * objcopy.c (delete_symbol_htabs): New function. - (main): Call it via xatexit. - (copy_archive): Free "dir". - * objdump.c (free_debug_section): Free reloc_info. - -2022-08-15 Jiangshuai Li - - gdb/csky add unwinder for sigtramp frame when kernel 4.x and later - When kernel veriosn >= V4.x, the characteristic values used to - determine whether it is a signal function call are: - movi r7, 139 - trap 0 - - Registers are saved at (sp + CSKY_SIGINFO_OFFSET + CSKY_SIGINFO_SIZE - + CSKY_UCONTEXT_SIGCONTEXT + CSKY_SIGCONTEXT_PT_REGS_TLS). The order - is described in csky_linux_rt_sigreturn_init_pt_regs. - -2022-08-15 Alan Modra - - aarch64_pei_vec - I know this target is just a skeleton, but let's not write out relocs - with uninitialised garbage. - - * coff-aarch64.c (SWAP_IN_RELOC_OFFSET): Define. - (SWAP_OUT_RELOC_OFFSET): Define. - -2022-08-15 GDB Administrator - - Automatic date update in version.in - -2022-08-14 Andrew Burgess - - gdb/riscv: improve a comment about fcsr, fflags, and frm registers - There's a comment in riscv-tdep.c that explains some of the background - about how we check for the fcsr, fflags, and frm registers within a - riscv target description. - - This comment (and the functionality it describes) relates to how QEMU - advertises these registers within its target description. - - Unfortunately, QEMU includes these three registers in both the fpu and - crs target description features. To work around this GDB uses one of - the register declarations, and ignores the other, this means the GDB - user sees a single copy of each register, and things just work. - - When I originally wrote the comment I thought it didn't matter which - copy of the register GDB selected, the fpu copy or the csr copy, so - long as we just used one of them. The comment reflected this belief. - - Upon further investigation, it turns out I was wrong. GDB has to use - the csr copy of the register. If GDB tries to use the register from - the fpu feature then QEMU will return an error when GDB tries to read - or write the register. - - Luckily, the code within GDB (currently) will always select the csr - copy of the register, so nothing is broken, but the comment is wrong. - This commit updates the comment to better describe what is actually - going on. - - Of course, I should probably also send a patch to QEMU to fix up the - target description that is sent to GDB. - -2022-08-14 Andrew Burgess - - gdb/nds32: update features/nds32.c - After this commit: - - commit 7b7c365c5c663ffdfb2b3f696db35c23cdccd921 - Date: Wed Sep 15 10:10:46 2021 +0200 - - [bfd] Ensure unique printable names for bfd archs - - The printable name field of the default nds32 bfd_arch_info changed - from 'n1h' to 'n1'. As a consequence the generated feature file - within GDB should have been recreated. Recreate it now. - -2022-08-14 Tom Tromey - - Move decode_location_spec to code_breakpoint - breakpoint::decode_location_spec just asserts if called. It turned - out to be relatively easy to remove this method from breakpoint and - instead move the base implementation to code_breakpoint. - - Change location_spec_to_sals to a method - location_spec_to_sals is only ever called for code breakpoints, so - make it a protected method there. - - Change breakpoint_re_set_default to a method - breakpoint_re_set_default is only ever called from breakpoint re_set - methods, so make it a protected method on code_breakpoint. - -2022-08-14 GDB Administrator - - Automatic date update in version.in - -2022-08-13 Alan Modra - - PR29482 - strip: heap-buffer-overflow - PR 29482 - * coffcode.h (coff_set_section_contents): Sanity check _LIB. - - asan: NULL dereference in spu_elf_object_p - * elf32-spu.c (spu_elf_object_p): Don't dereference NULL - shdr->bfd_section. - - ubsan: undefined shift in sign_extend - * libhppa.h (sign_extend): Avoid undefined behaviour. - - asan: NULL dereference in som_set_reloc_info - * som.c (som_set_reloc_info): Ignore non-existent previous - fixup references. - - readelf: print 0x0 as 0, and remove trailing spaces - This changes readelf output a little, removing the 0x prefix on hex - output when the value is 0, except in cases where a fixed field - width is shown. %#010x is not a good replacement for 0x%08x. - - Make dwarf_vma uint64_t - This replaces dwarf_vma, dwarf_size_type and dwarf_signed_vma with - uint64_t and int64_t everywhere. The patch also gets rid of - DWARF_VMA_FMT since we can't use that with uint64_t, and all of the - configure support for deciding the flavour of HOST_WIDEST_INT. - dwarf_vmatoa also disappears, replacing most uses with one of - PRIx64, PRId64 or PRIu64. Printing of size_t and ptrdiff_t values - now use %z and %t rather than by casting to unsigned long. Also, - most warning messages that used 0x%lx or similar now use %#lx and a - few that didn't print the 0x hex prefix now also use %#. The patch - doesn't change normal readelf output, except in odd cases where values - previously might have been truncated. - - Don't use bfd_vma in readelf.c - This replaces bfd_vma with uint64_t in readelf, defines BFD64 - unconditionally, removes tests of BFD64 and sizeof (bfd_vma), and - removes quite a few now unnecessary casts. - - Don't use bfd_size_type in readelf.c and dwarf.c - Replacing bfd_size_type with dwarf_size_type or uint64_t is mostly - cosmetic. The point of the change is to avoid use of a BFD type - in readelf, where we'd like to keep as independent of BFD as - possible. Also, the patch is a step towards using standard types. - - Replace elf_vma with uint64_t - This patch replaces all uses of elf_vma with uint64_t, removes - tests of sizeof (elf_vma), and does a little tidying of - byte_get_little_endian and byte_get_big_endian. - -2022-08-13 GDB Administrator - - Automatic date update in version.in - -2022-08-12 Tom de Vries - - [gdb/testsuite] Fix gdb.dwarf2/dw2-dir-file-name.exp - When running test-case gdb.dwarf2/dw2-dir-file-name.exp on x86_64-linux, we - have: - ... - (gdb) break compdir_missing__ldir_missing__file_basename^M - Breakpoint 2 at 0x4004c4: file tmp-dw2-dir-file-name.c, line 999.^M - (gdb) continue^M - Continuing.^M - ^M - Breakpoint 2, 0x00000000004004c4 in \ - compdir_missing__ldir_missing__file_basename () \ - at tmp-dw2-dir-file-name.c:999^M - (gdb) PASS: gdb.dwarf2/dw2-dir-file-name.exp: \ - compdir_missing__ldir_missing__file_basename: continue to breakpoint: \ - compdir_missing__ldir_missing__file_basename - ... - - When trying to set a breakpoint on - compdir_missing__ldir_missing__file_basename, the architecture-specific - prologue skipper starts at 0x4004c0 and skips past two insns, to 0x4004c4: - ... - 00000000004004c0 : - 4004c0: 55 push %rbp - 4004c1: 48 89 e5 mov %rsp,%rbp - 4004c4: 8b 05 72 1b 20 00 mov 0x201b72(%rip),%eax # 60203c - 4004ca: 83 c0 01 add $0x1,%eax - 4004cd: 89 05 69 1b 20 00 mov %eax,0x201b69(%rip) # 60203c - 4004d3: 90 nop - 4004d4: 5d pop %rbp - 4004d5: c3 ret - ... - - And because the line table info is rudamentary: - ... - CU: tmp-dw2-dir-file-name.c: - File name Line number Starting address View Stmt - tmp-dw2-dir-file-name.c 999 0x4004c0 x - tmp-dw2-dir-file-name.c 1000 0x4004d6 x - tmp-dw2-dir-file-name.c - 0x4004d6 - ... - the address does not fall at an actual line, so the breakpoint is shown with - address, both when setting it and hitting it. - - when running the test-case with aarch64-linux, we have similarly: - ... - (gdb) break compdir_missing__ldir_missing__file_basename^M - Breakpoint 2 at 0x400618: file tmp-dw2-dir-file-name.c, line 999.^M - ... - due to the architecture-specific prologue skipper starting at 0x400610 and - skipping past two insns, to 0x400618: - ... - 0000000000400610 : - 400610: 90000100 adrp x0, 420000 <__libc_start_main@GLIBC_2.17> - 400614: 9100b000 add x0, x0, #0x2c - 400618: b9400000 ldr w0, [x0] - 40061c: 11000401 add w1, w0, #0x1 - 400620: 90000100 adrp x0, 420000 <__libc_start_main@GLIBC_2.17> - 400624: 9100b000 add x0, x0, #0x2c - 400628: b9000001 str w1, [x0] - 40062c: d503201f nop - 400630: d65f03c0 ret - ... - - But interestingly, the aarch64 architecture-specific prologue skipper is - wrong. There is no prologue, and the breakpoint should be set at 0x400610. - - By using "break *compdir_missing__ldir_missing__file_basename" - we can get the breakpoint set at 0x400610: - ... - (gdb) break *compdir_missing__ldir_missing__file_basename^M - Breakpoint 2 at 0x400610: file tmp-dw2-dir-file-name.c, line 999.^M - ... - and make the test-case independent of prologue analysis. - - This requires us to update the expected patterns. - - The fix ensures that once the aarch64 architecture-specific prologue skipper - will be fixed, this test-case won't start failing. - - Tested on x86_64-linux. - -2022-08-12 GDB Administrator - - Automatic date update in version.in - -2022-08-11 Lancelot SIX - - gdb/varobj: Only re-evaluate invalid globals during re_set - When doing varobj_re_set, we currently try to recreate floating varobj. - This was introduced by 4e969b4f0128 "Re-evaluate floating varobj as part - of varobj_invalidate" to deal with use a after free issue. However - since bc20e562ec0 "Fix use after free in varobj" we now ensure that we - never have dangling pointers so this all recreation is not strictly - needed anymore for floating varobjs. - - This commit proposes to remove this recreation process for floating - varobjs. - - Tested on x86_64-linux. - -2022-08-11 Tom de Vries - Lancelot SIX - - gdb/varobj: Reset varobj after relocations have been computed - [This patch is a followup to the discussion in - https://sourceware.org/pipermail/gdb-patches/2022-August/191188.html] - - PR/29426 shows failures when running the gdb.mi/mi-var-invalidate-shlib - test when using a compiler which does not produce a PIE executable by - default. - - In the testcase, a varobj is created to track a global variable, and - then the main binary is reloaded in GDB (using the file command). - - During the load of the new binary, GDB tries to recreate the varobj to - track the global in the new binary (varobj_invalidate_iter). At this - point, the old process is still in flight. So when we try to access to - the value of the global, in a PIE executable we only have access to the - unrelocated address (the objfile's text_section_offset () is 0). As a - consequence down the line read_value_memory fails to read the unrelated - address, so cannot evaluate the value of the global. Note that the - expression used to access to the global’s value is valid, so the varobj - can be created. When using a non PIE executable, the address of the - global GDB knows about at this point does not need relocation, so - read_value_memory can access the (old binary’s) value. - - So at this point, in the case of a non-PIE executable the value field is - set, while it is cleared in the case of PIE executable. Later when the - test issues a "-var-update global_var", the command sees no change in - the case of the non-PIE executable, while in the case of the PIE - executable install_new_value sees that value changes, leading to a - different output. - - This patch makes sure that, as we do for breakpoints, we wait until - relocation has happened before we try to recreate varobjs. This way we - have a consistent behavior between PIE and non-PIE binaries. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29426 - -2022-08-11 Lancelot SIX - - gdb/varobj: Do not invalidate locals in varobj_invalidate_iter - The varobj_invalidate_iter function has logic to invalidate any local - varobj it can find. However since bc20e562ec0 "gdb/varobj: Fix use - after free in varobj" all varobj containing references to an objfile are - cleared when the objfile goes out of scope. This means that at this - point any local varobj seen by varobj_invalidate_iter either has - already been invalidated by varobj_invalidate_if_uses_objfile or only - contains valid references and there is no reason to invalidate it. - - This patch proposes to remove this unnecessary invalidation and adds a - testcase which exercises a scenario where a local varobj can legitimately - survive a call to varobj_invalidate_iter. - - At this point the varobj_invalidate and varobj_invalidate_iter seem - misnamed since they deal with re-creating invalid objects and do not do - invalidation, but this will be fixed in a following patch. - - Tested on x86_64-linux. - -2022-08-11 Dmitry Selyutin - - ppc/svp64: support svindex instruction - https://libre-soc.org/openpower/sv/ - https://libre-soc.org/openpower/sv/remap/#svindex - https://libre-soc.org/openpower/isa/simplev/ - - ppc/svp64: support svremap instruction - https://libre-soc.org/openpower/sv/ - https://libre-soc.org/openpower/sv/remap/#svremap - https://libre-soc.org/openpower/isa/simplev/ - - ppc/svp64: support svshape instruction - https://libre-soc.org/openpower/sv/ - https://libre-soc.org/openpower/sv/remap/#svshape - https://libre-soc.org/openpower/isa/simplev/ - - ppc/svp64: support svstep instructions - https://libre-soc.org/openpower/sv/ - https://libre-soc.org/openpower/sv/svstep/ - https://libre-soc.org/openpower/isa/simplev/ - - ppc/svp64: support setvl instructions - https://libre-soc.org/openpower/sv/ - https://libre-soc.org/openpower/sv/setvl/ - https://libre-soc.org/openpower/isa/simplev/ - - ppc/svp64: introduce non-zero operand flag - svstep and svshape instructions subtract 1 before encoding some of the - operands. Obviously zero is not supported for these operands. Whilst - PPC_OPERAND_PLUS1 fits perfectly to mark that maximal value should be - incremented, there is no flag which marks the fact that zero values are - not allowed. This patch adds a new flag, PPC_OPERAND_NONZERO, for this - purpose. - -2022-08-11 Dmitry Selyutin - - ppc/svp64: support LibreSOC architecture - This patch adds support for LibreSOC machine and SVP64 extension flag - for PowerPC architecture. SV (Simple-V) is a strict RISC-paradigm - Scalable Vector Extension for the Power ISA. SVP64 is the 64-bit - Prefixed instruction format implementing SV. Funded by NLnet through EU - Grants No: 825310 and 825322, SV is in DRAFT form and is to be publicly - submitted via the OpenPOWER Foundation ISA Working Group via the - newly-created External RFC Process. - - For more details, visit https://libre-soc.org. - -2022-08-11 Torbjörn SVENSSON - - [Arm] Cleanup arm_m_exception_cache - With this change, only valid contents of LR are accepted when unwinding - exception frames for m-profile targets. - - If the contents of LR are anything but EXC_RETURN or FNC_RETURN, it - will cause GDB to print an error and/or abort unwinding of the frame as - it's an invalid state for the unwinder. - - The FNC_RETURN pattern requires Security Extensions to be enabled. - -2022-08-11 Fangrui Song - - RISC-V: Remove R_RISCV_GNU_VTINHERIT/R_RISCV_GNU_VTENTRY - They were legacy relocation types copied from other ports. The related - -fvtable-gc was removed from GCC in 2003. - - The associated assembler directives (.vtable_inherit and .vtable_entry) - have never been supported by the RISC-V port. Remove related ld code. - - Link: https://github.com/riscv-non-isa/riscv-elf-psabi-doc/pull/323 - -2022-08-11 Alan Modra - - PR29466, APP/NO_APP with .linefile - Commit 53f2b36a54b9 exposed a bug in sb_scrub_and_add_sb that could - result in losing input. If scrubbing results in expansion past the - holding capacity of do_scrub_chars output buffer, then do_scrub_chars - stashes the extra input for the next call. That call never came - because sb_scrub_and_add_sb wrongly decided it was done. Fix that by - allowing sb_scrub_and_add_sb to see whether there is pending input. - Also allow a little extra space so that in most cases we won't need - to resize the output buffer. - - sb_scrub_and_add_sb also limited output to the size of the input, - rather than the actual output buffer size. Fixing that resulted in a - fail of gas/testsuite/macros/dot with an extra warning: "end of file - not at end of a line; newline inserted". OK, so the macro in dot.s - really does finish without end-of-line. Apparently the macro - expansion code relied on do_scrub_chars returning early. So fix that - too by adding a newline if needed in macro_expand_body. - - PR 29466 - * app.c (do_scrub_pending): New function. - * as.h: Declare it. - * input-scrub.c (input_scrub_include_sb): Add extra space for - two .linefile directives. - * sb.c (sb_scrub_and_add_sb): Take into account pending input. - Allow output to max. - * macro.c (macro_expand_body): Add terminating newline. - * testsuite/config/default.exp (SIZE, SIZEFLAGS): Define. - * testsuite/gas/macros/app5.d, - * testsuite/gas/macros/app5.s: New test. - * testsuite/gas/macros/macros.exp: Run it. - -2022-08-11 Alan Modra - - regen potfiles - -2022-08-11 GDB Administrator - - Automatic date update in version.in - -2022-08-10 Simon Marchi - - gdb/mi: fix breakpoint script field output - The "script" field, output whenever information about a breakpoint with - commands is output, uses wrong MI syntax. - - $ ./gdb -nx -q --data-directory=data-directory -x script -i mi - =thread-group-added,id="i1" - =breakpoint-created,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x000000000000111d",func="main",file="test.c",fullname="/home/simark/build/binutils-gdb-one-target/gdb/test.c",line="3",thread-groups=["i1"],times="0",original-location="main"} - =breakpoint-modified,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x000000000000111d",func="main",file="test.c",fullname="/home/simark/build/binutils-gdb-one-target/gdb/test.c",line="3",thread-groups=["i1"],times="0",script={"aaa","bbb","ccc"},original-location="main"} - (gdb) - -break-info - ^done,BreakpointTable={nr_rows="1",nr_cols="6",hdr=[{width="7",alignment="-1",col_name="number",colhdr="Num"},{width="14",alignment="-1",col_name="type",colhdr="Type"},{width="4",alignment="-1",col_name="disp",colhdr="Disp"},{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},{width="18",alignment="-1",col_name="addr",colhdr="Address"},{width="40",alignment="2",col_name="what",colhdr="What"}],body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x000000000000111d",func="main",file="test.c",fullname="/home/simark/build/binutils-gdb-one-target/gdb/test.c",line="3",thread-groups=["i1"],times="0",script={"aaa","bbb","ccc"},original-location="main"}]} - (gdb) - - In both the =breakpoint-modified and -break-info output, we have: - - script={"aaa","bbb","ccc"} - - According to the output syntax [1], curly braces means tuple, and a - tuple contains key=value pairs. This looks like it should be a list, - but uses curly braces by mistake. This would make more sense: - - script=["aaa","bbb","ccc"] - - Fix it, keeping the backwards compatibility by introducing a new MI - version (MI4), in exactly the same way as was done when fixing - multi-locations breakpoint output in [2]. - - - Add a fix_breakpoint_script_output uiout flag. MI uiouts will use - this flag if the version is >= 4. - - Add a fix_breakpoint_script_output_globally variable and the - -fix-breakpoint-script-output MI command to set it, if frontends want - to use the fixed output for this without using the newer MI version. - - When emitting the script field, use list instead of tuple, if we want - the fixed output (depending on the two criteria above) - - - - [1] https://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Output-Syntax.html#GDB_002fMI-Output-Syntax - [2] https://gitlab.com/gnutools/binutils-gdb/-/commit/b4be1b0648608a2578bbed39841c8ee411773edd - - Change-Id: I7113c6892832c8d6805badb06ce42496677e2242 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=24285 - -2022-08-10 Andrew Burgess - - objdump: fix extended (256) disassembler colors - After commit: - - commit a88c79b77036e4778e70d62081c3cfd1044bb8e3 - Date: Tue Aug 9 14:57:48 2022 +0100 - - Default to enabling colored disassembly if output is to a terminal. - - The 256 extended-color support for --disassembler-color was broken. - This is fixed in this commit. - - PR 29457 - * objdump (objdump_styled_sprintf): Check disassembler_color - against an enum value, don't treat it as a bool. - -2022-08-10 mga-sc - - gdb/riscv: implement cannot_store_register gdbarch method - The x0 (zero) register is read-only on RISC-V. Implement the - cannot_store_register gdbarch method to tell GDB this. - - Without this method GDB will try to write to x0, and relies on the - target to ignore such writes. If you are using a target that - complains (or throws an error) when writing to x0, this change will - prevent this from happening. - - The gdb.arch/riscv-reg-aliases.exp test exercises writing to x0, and - will show the errors when using a suitable target. - -2022-08-10 Luis Machado - - Disable year 2038 support on 32-bit hosts by default - With a recent import of gnulib, code has been pulled that tests and enables - 64-bit time_t by default on 32-bit hosts that support it. - - Although gdb can use the gnulib support, bfd doesn't use gnulib and currently - doesn't do these checks. - - As a consequence, if we have a 32-bit host that supports 64-bit time_t, we'll - have a mismatch between gdb's notion of time_t and bfd's notion of time_t. - - This will lead to mismatches in the struct stat size, leading to memory - corruption and crashes. - - This patch disables the year 2038 check for now, which makes things work - reliably again. - - I'd consider this a temporary fix until we have proper bfd checks for the year - 2038, if it makes sense. 64-bit hosts seems to be more common these days, so - I'm not sure how important it is to have this support enabled and how soon - we want to enable it. - - Thoughts? - -2022-08-10 Jan Beulich - - gas/Dwarf: properly skip zero-size functions - PR gas/29451 - - While out_debug_abbrev() properly skips such functions, out_debug_info() - mistakenly didn't. It needs to calculate the high_pc expression ahead of - time, in order to skip emitting any data for the function if the value - is zero. - - The one case which would still leave a zero-size entry is when - symbol_get_obj(symp)->size ends up evaluating to zero. I hope we can - expect that to not be the case, otherwise we'd need to have a way to - post-process .debug_info contents between resolving expressions and - actually writing the data out to the file. Even then it wouldn't be - entirely obvious in which way to alter the data. - -2022-08-10 Alan Modra - - PR29462, internal error in relocate, at powerpc.cc:10796 - Prior to the inline plt call support (commit 08be322439), the only - local syms with plt entries were local ifunc symbols. There shouldn't - be stubs for other local symbols so don't look for them. The patch - also fixes minor bugs in get_reference_flags; Many relocs are valid - only for ppc64 and a couple only for ppc32. - - PR 29462 - * powerpc.cc (Target_powerpc::Relocate::relocate): Rename - use_plt_offset to pltcal_to_direct, invert logic. For relocs - not used with inline plt sequences against local symbols, only - look for stubs when the symbol is an ifunc. - (Target_powerpc::Scan::get_reference_flags): Correct reloc - handling for relocs not valid for both 32-bit and 64-bit. - -2022-08-10 Youling Tang - - bfd: Add support for LoongArch64 EFI (efi-*-loongarch64). - This adds support for efi-loongarch64 by virtue of adding a new PEI target - pei-loongarch64. This is not a full target and only exists to support EFI at - this time. - - This means that this target does not support relocation processing and is mostly - a container format. This format has been added to elf based loongarch64 targets - such that efi images can be made natively on Linux. - - However this target is not valid for use with gas but only with objcopy. - - We should't limit addresses to 32-bits for 64-bit vma, otherwise there will be - "RVA truncated" error when using objcopy on loongarch64. - - With these changes the resulting file is recognized as an efi image. - - Any magic number is based on the Microsoft PE specification [1]. - - The test results are as follows: - $ make check-binutils RUNTESTFLAGS='loongarch64.exp' - PASS: Check if efi app format is recognized - - $ objdump -h -f tmpdir/loongarch64copy.o - tmpdir/loongarch64copy.o: file format pei-loongarch64 - architecture: Loongarch64, flags 0x00000132: - EXEC_P, HAS_SYMS, HAS_LOCALS, D_PAGED - start address 0x0000000000000000 - - Sections: - Idx Name Size VMA LMA File off Algn - 0 .text 0000003c 00000000200000b0 00000000200000b0 00000200 2**2 - CONTENTS, ALLOC, LOAD, READONLY, CODE - - [1] https://docs.microsoft.com/en-us/windows/win32/debug/pe-format - - bfd: - * .gitignore (pe-loongarch64igen.c): New. - * Makefile.am (pei-loongarch64.lo, pe-loongarch64igen.lo, pei-loongarch64.c, - pe-loongarch64igen.c): Add support. - * Makefile.in: Likewise. - * bfd.c (bfd_get_sign_extend_vma): Add pei-loongarch64. - * coff-loongarch64.c: New file. - * coffcode.h (coff_set_arch_mach_hook, coff_set_flags, - coff_write_object_contents) Add loongarch64 (loongarch64_pei_vec) support. - * config.bfd: Likewise. - * configure: Likewise. - * configure.ac: Likewise. - * libpei.h (GET_OPTHDR_IMAGE_BASE, PUT_OPTHDR_IMAGE_BASE, - GET_OPTHDR_SIZE_OF_STACK_RESERVE, PUT_OPTHDR_SIZE_OF_STACK_RESERVE, - GET_OPTHDR_SIZE_OF_STACK_COMMIT, PUT_OPTHDR_SIZE_OF_STACK_COMMIT, - GET_OPTHDR_SIZE_OF_HEAP_RESERVE, PUT_OPTHDR_SIZE_OF_HEAP_RESERVE, - GET_OPTHDR_SIZE_OF_HEAP_COMMIT, PUT_OPTHDR_SIZE_OF_HEAP_COMMIT, - GET_PDATA_ENTRY, _bfd_peLoongArch64_bfd_copy_private_bfd_data_common, - _bfd_peLoongArch64_bfd_copy_private_section_data, - _bfd_peLoongArch64_get_symbol_info, _bfd_peLoongArch64_only_swap_filehdr_out, - _bfd_peLoongArch64_print_private_bfd_data_common, - _bfd_peLoongArch64i_final_link_postscript, - _bfd_peLoongArch64i_only_swap_filehdr_out, _bfd_peLoongArch64i_swap_aouthdr_in, - _bfd_peLoongArch64i_swap_aouthdr_out, _bfd_peLoongArch64i_swap_aux_in, - _bfd_peLoongArch64i_swap_aux_out, _bfd_peLoongArch64i_swap_lineno_in, - _bfd_peLoongArch64i_swap_lineno_out, _bfd_peLoongArch64i_swap_scnhdr_out, - _bfd_peLoongArch64i_swap_sym_in, _bfd_peLoongArch64i_swap_sym_out, - _bfd_peLoongArch64i_swap_debugdir_in, _bfd_peLoongArch64i_swap_debugdir_out, - _bfd_peLoongArch64i_write_codeview_record, - _bfd_peLoongArch64i_slurp_codeview_record, - _bfd_peLoongArch64_print_ce_compressed_pdata): New. - * peXXigen.c (_bfd_XXi_swap_aouthdr_in, _bfd_XXi_swap_aouthdr_out, - _bfd_XXi_swap_scnhdr_out, pe_print_pdata, _bfd_XX_print_private_bfd_data_common, - _bfd_XX_bfd_copy_private_section_data, _bfd_XXi_final_link_postscript): - Support COFF_WITH_peLoongArch64, - * pei-loongarch64.c: New file. - * peicode.h (coff_swap_scnhdr_in, pe_ILF_build_a_bfd, pe_ILF_object_p): - Support COFF_WITH_peLoongArch64. - (jtab): Add dummy entry that traps. - * targets.c (loongarch64_pei_vec): New. - - binutils - * testsuite/binutils-all/loongarch64/loongarch64.exp: New file. - * testsuite/binutils-all/loongarch64/pei-loongarch64.d: New test. - * testsuite/binutils-all/loongarch64/pei-loongarch64.s: New test. - - include - * coff/loongarch64.h: New file. - * coff/pe.h (IMAGE_FILE_MACHINE_LOONGARCH64): New. - -2022-08-10 GDB Administrator - - Automatic date update in version.in - -2022-08-09 Andrew Burgess - - gdb/riscv/testsuite: fix failures in gdb.arch/riscv-reg-aliases.exp - When running on a native RISC-V Linux target I currently see failures - in the gdb.arch/riscv-reg-aliases.exp test like this: - - set $ft0.float = 501 - (gdb) PASS: gdb.arch/riscv-reg-aliases.exp: write non-zero value to ft0 - p/d $ft0.float - $263 = 1140490240 - (gdb) FAIL: gdb.arch/riscv-reg-aliases.exp: read ft0 after non-zero write to ft0 - - This test started failing after this commit: - - commit 56262a931b7ca8ee3ec9104bc7e9e0b40cf3d64e - Date: Thu Feb 17 13:43:59 2022 -0700 - - Change how "print/x" displays floating-point value - - The problem is that when 501 is written to $ft0.float the value is - converted to floating point format and stored in the register. Prior - to the above commit printing with /x and /d would first extract the - value as a float, and then convert the value to an integer for - display. After the above commit GDB now uses the raw register value - when displaying /x and /d, and so we see this behaviour: - - (gdb) info registers $ft0 - ft0 {float = 501, double = 5.6347704700123827e-315} (raw 0x0000000043fa8000) - (gdb) p/f $ft0.float - $1 = 501 - (gdb) p/d $ft0.float - $2 = 1140490240 - (gdb) p/x $ft0.float - $3 = 0x43fa8000 - - To fix this test I now print the float registers using the /f format - rather than /d. With this change the test now passes. - -2022-08-09 Stepan Nemec - - Another gas manual typo correction. - - Fix typos in assembler documentation. - -2022-08-09 Feiyang Chen - - gdb/gdbserver: LoongArch: Improve implementation of fcc registers - The current implementation of the fcc register is referenced to the - user_fp_state structure of the kernel uapi [1]. - - struct user_fp_state { - uint64_t fpr[32]; - uint64_t fcc; - uint32_t fcsr; - }; - - But it is mistakenly defined as a 64-bit fputype register, resulting - in a confusing output of "info register". - - (gdb) info register - ... - fcc {f = 0x0, d = 0x0} {f = 0, d = 0} - ... - - According to "Condition Flag Register" in "LoongArch Reference Manual" - [2], there are 8 condition flag registers of size 1. Use 8 registers of - uint8 to make it easier for users to view the fcc register groups. - - (gdb) info register - ... - fcc0 0x1 1 - fcc1 0x0 0 - fcc2 0x0 0 - fcc3 0x0 0 - fcc4 0x0 0 - fcc5 0x0 0 - fcc6 0x0 0 - fcc7 0x0 0 - ... - - [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/loongarch/include/uapi/asm/ptrace.h - [2] https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html#_condition_flag_register - -2022-08-09 Nick Clifton - - Default to enabling colored disassembly if output is to a terminal. - PR 29457 - * objdump.c (disassembler_color): Change type to an enum. - (disassembler_extended_color): Remove. - (usage): Update. - (objdump_color_for_assembler_style): Update. - (main): Update initialisation of disassembler_color. If not - initialised via a command line option, set based upon terminal - output. - * doc/binutils.texi: Update description of disassmbler-color - option. - * testsuite/binutils-all/arc/objdump.exp: Add - --disassembler-color=off option when disassembling. - * testsuite/binutils-all/arm/objdump.exp: Likewise. - -2022-08-09 Aditya Vidyadhar Kamath - - Fix-for-multiple-thread-detection-in-AIX. - In AIX multiple threads were not added. This patch is a fix for the same - - When we create a pthread debug session we have callbacks to read - symbols and memory. One of those call backs is pdc_read_data. - - Before we come into aix-thread wait() we switch to no thread and - therefore the current thread is null. - - When we get into pdc_read_data we have a dependency that we need to - be in the correct current thread that has caused an event of new - thread, inorder to read memory. - - Hence we switch to the correct thread. - - This is done by passing the pid in the pthdb_user_t user_current_pid - parameter in every call back. - -2022-08-09 Tom de Vries - - [gdb/testsuite] Fix gdb.dwarf2/debug-names.exp - When running test-case gdb.dwarf2/debug-names.exp on openSUSE Tumbleweed, I - run into: - ... - (gdb) maint info symtabs^M - ... - ERROR: internal buffer is full. - UNRESOLVED: gdb.dwarf2/debug-names.exp: break _start expanded symtab - ... - - Fix this by simplifying the test-case to print _start rather running to it. - - Tested on x86_64-linux. - -2022-08-09 Andrew Burgess - - gdb/riscv: use register name enum values in riscv-linux-nat.c - There were a few places where we were using integer values rather than - the RISCV_*_REGNUM constants defined in riscv-tdep.h. This commit - replaces 0 with RISCV_ZERO_REGNUM and 32 with RISCV_PC_REGNUM in a few - places. - - There should be no user visible changes after this commit. - -2022-08-09 Jan Beulich - - x86-64: adjust MOVQ to/from SReg attributes - It is unclear to me why the corresponding MOV (no Q suffix) can be - issued without REX.W, but MOVQ has to have that prefix (bit). Add - NoRex64 and in exchange drop Size64. - - x86: adjust MOVSD attributes - The non-SSE2AVX form of the SIMD variant of the instruction needlessly - has the (still multi-purpose) IgnoreSize attribute. All other similar - SSE2 insns use NoRex64 instead. Make this consistent, noting that the - SSE2AVX form can't have the same change made - there the memory operand - doesn't at the same time permit RegXMM (which logic uses when deciding - whether a Q suffix is okay outside of 64-bit mode). - - x86: fold AVX VGATHERDPD / VPGATHERDQ - While the other three variants each differ in attributes and hence can't - be folded, these two pairs actually can be (and were previously - overlooked). This effectively matches their AVX512VL counterparts, which - are also expressed as a single template. - - x86: allow use of broadcast with X/Y/Z-suffixed AVX512-FP16 insns - While the x/y/z suffix isn't necessary to use in this case, it is still - odd that these forms don't support broadcast (unlike their AVX512F / - AVX512DQ counterparts). The lack thereof can e.g. make macro-ized - programming more difficult. - - x86/Intel: split certain AVX512-FP16 VCVT*2PH templates - One more place where pre-existing templates should have been taken as a - basis: In Intel syntax we want to consistently issue an "ambiguous - operand size" error when a size-less memory operand is specified for an - insn where register use alone isn't sufficient for disambiguation. - -2022-08-09 Jiangshuai Li - - gdb/csky fix build error in ubuntu20_04 - build error in: https://builder.sourceware.org/buildbot/#/builders/170/builds/246 - ... - ../../binutils-gdb/gdb/csky-linux-tdep.c: In function ‘void - csky_supply_fregset(const regset*, regcache*, int, const void*, size_t)’: - ../../binutils-gdb/gdb/csky-linux-tdep.c:194:18: error: format ‘%ld’ - expects argument of type ‘long int’, but argument 2 has type ‘size_t’ - {aka ‘unsigned int’} [-Werror=format=] - 194 | warning (_("Unknow size %ld of section .reg2, can not get - value" - | - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 195 | " of float registers."), len); - ... - - Fix it via using %s vs pulongest suggested by Tom. - -2022-08-09 GDB Administrator - - Automatic date update in version.in - -2022-08-08 Tom Tromey - - Fix regression from gdbarch registry change - The gdbarch registry patch introduced a regression that could cause a - crash when opening files in gdb. The bug is that, previously, the - solib ops would default to current_target_so_ops; but the patch - changed this code to default to nullptr. This patch fixes the bug by - reintroducing the earlier behavior. This is PR gdb/29449. - - I managed to reproduce the bug with a riscv-elf build and then - verified that this fixes the problem. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29449 - -2022-08-08 Martin Liska - - add splay tree for info_ptr -> CU mapping - While using perf top for MozillaThunderbird I noticed quite some slow - dissably call with source code involved. E.g. - - time ./objdump --start-address=0x0000000004e0dcd0 --stop-address=0x0000000004e0df8b -l -d --no-show-raw-insn -S -C /usr/lib64/thunderbird/libxul.so - - took 2.071s and I noticed quite some time is spent in - find_abstract_instance: - - 33.46% objdump objdump [.] find_abstract_instance - 18.22% objdump objdump [.] arange_add - 13.77% objdump objdump [.] read_attribute_value - 4.82% objdump objdump [.] comp_unit_maybe_decode_line_info - 3.10% objdump libc.so.6 [.] __memset_avx2_unaligned_erms - - where linked list of CU is iterated when searing for where info_ptr - belongs to: - - : 3452 for (u = unit->prev_unit; u != NULL; u = u->prev_unit) - 0.00 : 4c61f7: mov 0x10(%rbx),%rax - 0.00 : 4c61fb: test %rax,%rax - 0.00 : 4c61fe: je 4c6215 - : 3453 if (info_ptr >= u->info_ptr_unit && info_ptr < u->end_ptr) - 0.00 : 4c6200: cmp 0x60(%rax),%rdx - 83.20 : 4c6204: jb 4c620c - 0.00 : 4c6206: cmp 0x78(%rax),%rdx - 6.89 : 4c620a: jb 4c6270 - : 3452 for (u = unit->prev_unit; u != NULL; u = u->prev_unit) - 0.00 : 4c620c: mov 0x10(%rax),%rax - 7.90 : 4c6210: test %rax,%rax - 0.00 : 4c6213: jne 4c6200 - - The following scan can be replaced with search in a splay tree and with - that I can get to 1.5s and there are other symbols where the difference - is even bigger. - - bfd/ChangeLog: - - PR 29081 - * dwarf2.c (struct addr_range): New. - (addr_range_intersects): Likewise. - (splay_tree_compare_addr_range): Likewise. - (splay_tree_free_addr_range): Likewise. - (struct dwarf2_debug_file): Add comp_unit_tree. - (find_abstract_instance): Use the splay tree when searching - for a info_ptr. - (stash_comp_unit): Insert to the splay tree. - (_bfd_dwarf2_cleanup_debug_info): Clean up the splay tree. - -2022-08-08 Martin Liska - - dwarf: use find_abstract_instance for vars and DW_AT_specification - The following simple test case fails when dwz is used: - - $ cat demo.C - namespace std { - enum { _S_fixed, _S_floatfield = _S_fixed }; - struct { - struct {}; - } - __ioinit; - } - - int main() { - return 0; - } - - $ g++ demo.C -g && cp a.out b.out && dwz -m xxx.so a.out b.out && objdump -S a.out >/dev/null - objdump: DWARF error: could not find variable specification at offset 0x3d3 - - As seen the reference is defined in xxx.so shared part: - - $ eu-readelf -w -N a.out | grep -A3 -B3 3d3 - decl_column (data1) 11 - sibling (ref_udata) [ 387] - [ 387] variable abbrev: 30 - specification (GNU_ref_alt) [ 3d3] - location (exprloc) - [ 0] addr 0x404019 - [ 396] subprogram abbrev: 32 - - $ eu-readelf -w -N a.out | less - - ... - - Compilation unit at offset 920: - Version: 5, Abbreviation section offset: 0, Address size: 8, Offset size: 4 - Unit type: partial (3) - ... - [ 3d3] variable abbrev: 31 - name (strp) "__ioinit" - decl_file (data1) demo.C (10) - decl_line (data1) 6 - decl_column (data1) 3 - type (ref_udata) [ 3c4] - declaration (flag_present) yes - - With the patch the same output is emitted as before usage of dwz. - - bfd/ChangeLog: - - PR 29442 - * dwarf2.c (struct varinfo): Use const char * type. - (scan_unit_for_symbols): Call find_abstract_instance for - DW_AT_specification for variables that can be in a different CU - (e.g. done by dwz) - -2022-08-08 Tsukasa OI - - Mach-O: i18n enablement on some error messages. - * config/obj-macho.c (obj_mach_o_get_section_names): Wrap two - string literals within with gettext macro. - -2022-08-08 Martin Liska - - ld: fix NEWS typos - ld/ChangeLog: - - * NEWS: Fix 2 typos. - -2022-08-08 Nick Clifton - - Add a link to the NEWS files in the release announcement email. - -2022-08-08 Jiangshuai Li - - gdb/csky support .reg2 for kernel 4.x and later - When kernel's version >= 4.x, the size of .reg2 section will be 400. - Contents of .reg2 are { - unsigned long vr[96]; - unsigned long fcr; - unsigned long fesr; - unsigned long fid; - unsigned long reserved; - }; - - VR[96] means: (vr0~vr15) + (fr16~fr31), each Vector register is - 128-bits, each Float register is 64 bits, the total size is - (4*96). - - In addition, for fr0~fr15, each FRx is the lower 64 bits of the - corresponding VRx. So fr0~fr15 and vr0~vr15 regisetrs use the same - offset. - -2022-08-08 GDB Administrator - - Automatic date update in version.in - -2022-08-07 Tom de Vries - - [gdb/build] Fix build with gcc 4.8.5 - When building with gcc 4.8.5, I run into: - ... - user-regs.c:85:1: error: could not convert \ - ‘{0l, (& builtin_user_regs.gdb_user_regs::first)}’ from \ - ‘’ to ‘gdb_user_regs’ - }; - ^ - ... - - Fix this by removing the initialization and handling regs.last == nullptr in - append_user_reg. - - Tested on x86_64-linux. - -2022-08-07 Tom de Vries - - [gdb/symtab] Fix assert in read_addrmap_from_aranges - When loading the debug-names-duplicate-cu executable included in this - test-case, we run into: - ... - (gdb) file debug-names-duplicate-cu^M - Reading symbols from debug-names-duplicate-cu...^M - src/gdb/dwarf2/read.c:2353: internal-error: read_addrmap_from_aranges: \ - Assertion `insertpair.second' failed.^M - ... - - This assert was added in recent commit 75337cbc147 ("[gdb/symtab] Fix - .debug_aranges duplicate offset warning"). - - The assert triggers because the CU table in the .debug_names section contains - a duplicate: - ... - Version 5 - Augmentation string: 47 44 42 00 ("GDB") - CU table: - [ 0] 0x0 - [ 1] 0x0 - ... - - Fix this by rejecting the .debug_names index: - ... - (gdb) file debug-names-duplicate-cu^M - Reading symbols from debug-names-duplicate-cu...^M - warning: Section .debug_names has duplicate entry in CU table, \ - ignoring .debug_names.^M - ... - - Likewise for the case where the CU table is not sorted by increasing offset. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29436 - -2022-08-07 Tom de Vries - - [gdb/testsuite] Add support for .debug_names in dwarf assembler - Add: - - support for a per-module .debug_names section in the dwarf assembler, and - - a test-case excercising this new functionality. - - A per-module .debug_names section needs to have an entry in the CU list for - each CU in the module, which is made more difficult by two things: - - linking in other objects, which may contain additional CUs - (typically the case on openSUSE), and - - adding dummy CUs in the dwarf assembler. - We handle this by: - - compiling with -nostartfiles (so the test-case contains _start rather than - main), and - - disabling the dummy CU generation for the test-case. - - I've kept things simple by having the test-case specify the hash value, rather - than adding that functionality in the dwarf assembler. - - Also I've kept the bucket count to 1, which makes it trivial to satisfy the - requirement that "the symbol is entered into a bucket whose index is the hash - value modulo bucket_count". - - The readelf dump of the .debug_names section from the test-case looks like: - ... - Version 5 - Augmentation string: 47 44 42 00 ("GDB") - CU table: - [ 0] 0x0 - - TU table: - - Foreign TU table: - - Used 1 of 1 bucket. - Out of 2 items there are 1 bucket clashes (longest of 1 entries). - - Symbol table: - [ 0] #eddb6232 _start: <1> DW_TAG_subprogram DW_IDX_compile_unit=0 - [ 1] #0b888030 int: <2> DW_TAG_base_type DW_IDX_compile_unit=0 - ... - - Tested on x86_64-linux. - -2022-08-07 GDB Administrator - - Automatic date update in version.in - -2022-08-06 Alan Modra - - asan: heap buffer overflow in _bfd_error_handler - On coff_slurp_symbol_table printing "unrecognized storage class" - for a symbol error. If the symbol name is the last string in its - section and not terminated, we run off the end of the buffer. - - * coffgen.c (build_debug_section): Terminate the section with - an extra 0. - -2022-08-06 Alan Modra - - asan: segfault in coff_write_auxent_fname - More fuzzed input file nonsense. - - * coffgen.c (coff_write_symbol): Don't call coff_write_auxent_fname - when extrap is NULL. - -2022-08-06 Alan Modra - - msan: bfd_mach_o_layout_commands use of uninitialised value - Catches fuzzed input with unterminated strings that later run off the - end of their buffers when calling strlen. - - * mach-o.c: Use size_t vars where approprite. - (bfd_mach_o_alloc_and_read): Add "extra" param. Allocate that - much extra and clear. Update all callers, those that set up - strings with one extra byte. - -2022-08-06 Alan Modra - - objcopy section alignment - bfd_set_section_alignment currently always returns true. This patch - changes it to return false on silly alignment values, avoiding yet - another way to trigger ubsan errors like coffcode.h:3192:12: runtime - error: shift exponent 299 is too large for 32-bit type 'int'. We'll - catch that one in objcopy.c:setup_sections. However, setup_sections - gives up on other setup operations that are necessary even after an - error of some sort. Change that to keep going, which might change the - error message but that shouldn't matter in the least. - - bfd/ - * section.c (bfd_set_section_alignment): Return false and - don't set alignment_power for stupidly large alignments. - * bfd-in2.h: Regenerate. - * coffcode.h (coff_compute_section_file_positions): Don't use - an int constant when calculating alignment. - binutils/ - * objcopy.c (setup_section): Keep on going after hitting - non-fatal errors. - -2022-08-06 Alan Modra - - ubsan: som.c undefined shift in som_set_reloc_info - Do the shift using unsigned variables to avoid UB on << 8. - - * som.c (som_set_reloc_info): Make v unsigned. Localise some - variables to their blocks. - -2022-08-06 GDB Administrator - - Automatic date update in version.in - -2022-08-05 Alan Modra - - Get rid of BFD_VMA_FMT - Remove the BFD_VMA_FMT defines in bfd.h and configure support. - - * bfd-in.h (BFD_VMA_FMT): Don't define. - * configure.ac (BFD_INT64_FMT): Remove configure test. - * configure.com: Likewise. - * Makefile.in: Regenerate. - * bfd-in2.h: Regenerate. - * configure: Regenerate. - -2022-08-05 Alan Modra - - Don't use BFD_VMA_FMT in gdb and sim - Like commit b82817674f, this replaces BFD_VMA_FMT "x" in sim/ with - PRIx64 and casts to promote bfd_vma to uint64_t. The one file using - BFD_VMA_FMT in gdb/ instead now uses hex_string, and a typo in the - warning message is fixed. - -2022-08-05 Tom de Vries - - [gdb/build] Fix build breaker in language.c with gcc 7.5.0 - When building gdb on openSUSE Leap 15.3, using gcc 7.5.0, I run into: - ... - gdb/language.c: In constructor ‘constexpr language_gdbarch::language_gdbarch()’: - gdb/language.c:921:8: error: use of deleted function \ - ‘language_arch_info::language_arch_info(const language_arch_info&)’ - struct language_gdbarch - ^~~~~~~~~~~~~~~~ - In file included from gdbsupport/common-defs.h:104:0, - from gdb/defs.h:28, - from gdb/language.c:31: - gdb/language.h:95:28: note: declared here - DISABLE_COPY_AND_ASSIGN (language_arch_info); - ^ - include/ansidecl.h:342:3: note: in definition of macro \ - ‘DISABLE_COPY_AND_ASSIGN’ - TYPE (const TYPE&) = delete; \ - ^~~~ - gdb/language.c: In function ‘language_gdbarch* get_language_gdbarch(gdbarch*)’: - gdb/language.c:936:22: note: synthesized method ‘constexpr \ - language_gdbarch::language_gdbarch()’ first required here - l = new struct language_gdbarch; - ^~~~~~~~~~~~~~~~ - ... - - This seems to be fixed by this change in the struct language_gdbarch - definition: - ... - - struct language_arch_info arch_info[nr_languages] {}; - + struct language_arch_info arch_info[nr_languages]; - ... - - Tested on x86_64-linux. - -2022-08-05 Tom de Vries - - [gdb] Add unit test for gdb::sequential_for_each - With commit 18a5766d09c ("[gdbsupport] Add sequential_for_each") I added a - drop-in replacement for gdb::parallel_for_each, but there's nothing making - sure that the two remain in sync. - - Extend the unit test for gdb::parallel_for_each to test both. - - Do this using a slightly unusual file-self-inclusion. Doing so keep things - readable and maintainable, and avoids macrofying functions. - - Tested on x86_64-linux. - -2022-08-05 Tom de Vries - - [gdb/symtab] Use task size in parallel_for_each in dwarf2_build_psymtabs_hard - In dwarf2_build_psymtabs_hard, we use a parallel_for_each to distribute CUs - over threads. - - Ensuring a fair distribution over the worker threads and main thread in terms - of number of CUs might not be the most efficient way, given that CUs can vary - in size. - - Fix this by using per_cu->get_length () as the task size. - - I've used this experiment to verify the performance impact: - ... - $ for n in $(seq 1 10); do \ - time gdb -q -batch ~/firefox/libxul.so-93.0-1.1.x86_64.debug \ - 2>&1 \ - | grep "real:"; \ - done - ... - and without the patch got: - ... - real: 4.71 - real: 4.88 - real: 4.29 - real: 4.30 - real: 4.65 - real: 4.27 - real: 4.27 - real: 4.27 - real: 4.75 - real: 4.41 - ... - and with the patch: - ... - real: 3.68 - real: 3.81 - real: 3.80 - real: 3.68 - real: 3.75 - real: 3.69 - real: 3.69 - real: 3.74 - real: 3.67 - real: 3.74 - ... - so that seems a reasonable improvement. - - With parallel_for_each_debug set to true, we get some more detail about - the difference in behaviour. Without the patch we have: - ... - Parallel for: n_elements: 2818 - Parallel for: minimum elements per thread: 1 - Parallel for: elts_per_thread: 704 - Parallel for: elements on worker thread 0 : 705 - Parallel for: elements on worker thread 1 : 705 - Parallel for: elements on worker thread 2 : 704 - Parallel for: elements on worker thread 3 : 0 - Parallel for: elements on main thread : 704 - ... - and with the patch: - ... - Parallel for: n_elements: 2818 - Parallel for: total_size: 1483674865 - Parallel for: size_per_thread: 370918716 - Parallel for: elements on worker thread 0 : 752 (size: 371811790) - Parallel for: elements on worker thread 1 : 360 (size: 371509370) - Parallel for: elements on worker thread 2 : 1130 (size: 372681710) - Parallel for: elements on worker thread 3 : 0 (size: 0) - Parallel for: elements on main thread : 576 (size: 367671995) - ... - - Tested on x86_64-linux. - -2022-08-05 Tom de Vries - - [gdbsupport] Add task size parameter in parallel_for_each - Add a task_size parameter to parallel_for_each, defaulting to nullptr, and use - the task size to distribute similarly-sized chunks to the threads. - - Tested on x86_64-linux. - -2022-08-05 Pedro Alves - - Introduce gdb::make_function_view - This adds gdb::make_function_view, which lets you create a function - view from a callable without specifying the function_view's template - parameter. For example, this: - - auto lambda = [&] (int) { ... }; - auto fv = gdb::make_function_view (lambda); - - instead of: - - auto lambda = [&] (int) { ... }; - gdb::function_view fv = lambda; - - It is particularly useful if you have a template function with an - optional function_view parameter, whose type depends on the function's - template parameters. Like: - - template - void my_function (T v, gdb::function_view callback = nullptr); - - For such a function, the type of the callback argument you pass must - already be a function_view. I.e., this wouldn't compile: - - auto lambda = [&] (int) { ... }; - my_function (1, lambda); - - With gdb::make_function_view, you can write the call like so: - - auto lambda = [&] (int) { ... }; - my_function (1, gdb::make_function_view (lambda)); - - Unit tests included. - - Tested by building with GCC 9.4, Clang 10, and GCC 4.8.5, on x86_64 - GNU/Linux, and running the unit tests. - - Change-Id: I5c4b3b4455ed6f0d8878cf1be189bea3ee63f626 - -2022-08-05 Nick Clifton - - Update following 2.39 release - -2022-08-05 Alan Modra - - asan: ppc64_elf_get_synthetic_symtab heap buffer overflow - Fuzzed input files with sizes of .dynamic not a multiple of dynamic - tag size can result in reading past the end of the buffer with the - current simple checks. Fix that, and use the same check in other - files that process input object .dynamic section. (There is no need - for buffer overflow checks in the linker's generated .dynamic - section.) - - * elf32-ppc.c (ppc_elf_get_synthetic_symtab): Sanity check - .dynamic content buffer reads. - * elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Likewise. - * elf64-ia64-vms.c (elf64_vms_link_add_object_symbols): Likewise. - * elf.c (_bfd_elf_print_private_bfd_data): Simplify .dynamic - buffer sanity checks. - * elflink.c (elf_link_add_object_symbols): Avoid possible UB - subtracting sizeof_dyn from pointer. - -2022-08-05 Alan Modra - - Sanity check loc_offsets index - Fixes a segfault found by the fuzzers. - - * dwarf.c (fetch_indexed_value): Return -1 on error. - (read_and_display_attr_value): Don't display string when - fetch_indexed_value returns an error. Sanity check loc_offsets - index. - -2022-08-05 Jan Beulich - - binutils/Dwarf: avoid "shadowing" of glibc function name - As before: Old enough glibc has an (unguarded) declaration of index() - in string.h, which triggers a "shadows a global declaration" warning. - -2022-08-05 Tsukasa OI - - gas: fix a testcase broken by new ZSTD support - The commit 1369522f36eece1b37139a81f7f2139ba3915172 ("Recognize the new ELF - compression type for ZSTD.") added the new ELF compression type but it - accidentally broke a GAS testcase. Since testing for the section type - "2048" (SHF_COMPRESSED) is not going to be portable in the long term, it - now tests SHF_LINK_ORDER ("128") instead. - - Using SHF_LINK_ORDER (with possibly sh_link == 0) is an idea by Jan Beulich. - - gas/ChangeLog: - - * testsuite/gas/elf/section10.s: Use SHF_LINK_ORDER to test - mixed numeric and alpha values. - * testsuite/gas/elf/section10.d: Reflect the change above. - -2022-08-05 Nick Clifton - - When gas/read.c calls mbstowcs with a NULL destination, it should set size to 0 - PR 29447 - * read.c (read_symbol_name): Pass 0 as the length parameter when - invoking mbstowc in order to check the validity of a wide string. - -2022-08-05 Tom de Vries - - [gdb] Add debug_{exp,val} - When debugging cc1 I heavily rely on simple one-parameter debug functions - that allow me to inspect a variable of a common type, like: - - debug_generic_expr - - debug_gimple_stmt - - debug_rtx - and I miss similar functions in gdb. - - Add functions to dump variables of types 'value' and 'expression': - - debug_exp, and - - debug_val. - - Tested on x86_64-linux, by breaking on varobj_create, and doing: - ... - (gdb) call debug_exp (var->root->exp.get ()) - &"Operation: OP_VAR_VALUE\n" - &" Block symbol:\n" - &" Symbol: aaa\n" - &" Block: 0x2d064f0\n" - (gdb) - ... - and: - ... - (gdb) call debug_val (value) - &"5" - (gdb) - ... - -2022-08-05 Luca Boccassi - - Add gold support for --package-metadata option. - Following the same format as the implementation in ld: - 9e2bb0cb5e74aed4158f08495534922d7108f928 - - Generate a .note.package FDO package metadata ELF note, following - the spec: https://systemd.io/ELF_PACKAGE_METADATA/ - - If the jansson library is available at build time (and it is explicitly - enabled), link ld to it, and use it to validate that the input is - correct JSON, to avoid writing garbage to the file. The - configure option --enable-jansson has to be used to explicitly enable - it (error out when not found). This allows bootstrappers (or others who - are not interested) to seamlessly skip it without issues. - - elfcpp/ - * elfcpp.h: Add FDO_PACKAGING_METADATA note type. - - gold/ - * Makefile.am: Add jansson flags and libraries. - * configure.ac: Check for jansson library. - * layout.cc (Layout::create_notes): Call create_package_metadata(). - (Layout::create_package_metadata): New function. - * layout.h (Layout::create_package_metadata): New function. - (Layout::package_metadata_note_): New data member. - * options.h (class General_options): Add --package-metadata option. - * testsuite/Makefile.am (object_unittest): Add jansson libraries. - (binary_unittest): Likewise. - (leb128_unittest): Likewise. - (overflow_unittest): Likewise. - (package_metadata_test): New test. - * testsuite/package_metadata_main.c: New test source. - -2022-08-05 Cary Coutant - - Recognize the new ELF compression type for ZSTD. - There is more work to be done to actually support compression and - decompression using the zstd library, but I will leave that to the - champions of the new compression option. - - binutils/ - * binutils/readelf.c (process_section_headers): Add support for - ELFCOMPRESS_ZSTD. - -2022-08-05 GDB Administrator - - Automatic date update in version.in - -2022-08-04 Tom Tromey - - Use registry in gdbarch - gdbarch implements its own registry-like approach. This patch changes - it to instead use registry.h. It's a rather large patch but largely - uninteresting -- it's mostly a straightforward conversion from the old - approach to the new one. - - The main benefit of this change is that it introduces type safety to - the gdbarch registry. It also removes a bunch of code. - - One possible drawback is that, previously, the gdbarch registry - differentiated between pre- and post-initialization setup. This - doesn't seem very important to me, though. - -2022-08-04 Tom Tromey - - Allow registry to refer to const types - So far, the registry hasn't been used to refer to a 'const' type, but - this changes with the gdbarch change. This patch arranges to let the - registry store a pointer-to-const, by removing const in the 'set' - method. - - Use new and delete for gdbarch - This changes gdbarch to use new and delete. - - Use bool in gdbarch - This changes gdbarch to use bool for initialized_p. - -2022-08-04 Tom de Vries - - [gdb/testsuite] Fix .debug_aranges in gdb.dwarf2/fission-loclists.S - When running test-case gdb.dwarf2/fission-loclists.exp, I noticed: - ... - warning: Section .debug_aranges in fission-loclists has duplicate \ - debug_info_offset 0x8f, ignoring .debug_aranges.^M - ... - - Fix this by removing the duplicate .debug_aranges entry. - - Tested on x86_64-linux. - -2022-08-04 Tom de Vries - - [gdb/testsuite] Fix ERROR in gdb.base/watchpoint-unaligned.exp - In PR23888 an error is reported: - ... - ERROR: tcl error sourcing watchpoint-unaligned.exp. - ERROR: expected boolean value but got "" - while executing - "if {$wpnum} { - ... - - This presumably happens when: - - skip_hw_watchpoint_tests returns 0 meaning hw watchpoints are supported - - gdb fails to set a hw watchpoint and instead sets a sw watchpoint - - That particular situation is handled for arm: - ... - -re "Watchpoint (\[0-9\]+): .*\r\n$gdb_prompt $" { - if {[istarget "arm*-*-*"]} { - untested $test - set wpnum 0 - } - } - ... - but not for any other targets so wpnum remains "", triggering the ERROR. - - Possibly this has been fixed for powerpc by commit 8d4e4d13afb ("gdb Power 9 - add test for HW watchpoint support."), but it's still possible for other - targets. - - Fix this by: - - initializing wpnum to 0 instead of "" - - signalling the failure to set a hw watchpoint by a fail - - Tested on x86_64-linux, also by adding: - ... - gdb_test_no_output "set can-use-hw-watchpoints 0" - ... - and verifying that it triggers the fail. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=23888 - -2022-08-04 Tom de Vries - - [gdb/tdep] Fix gdb.base/large-frame.exp for aarch64 - On aarch64, I run into: - ... - FAIL: gdb.base/large-frame.exp: optimize=-O0: backtrace - ... - - The problem is that the architecture-specific prologue analyzer fails to - handle the first two insns in the prologue properly: - ... - 0000000000400610 : - 400610: d2880210 mov x16, #0x4010 - 400614: cb3063ff sub sp, sp, x16 - 400618: a9007bfd stp x29, x30, [sp] - 40061c: 910003fd mov x29, sp - 400620: 910043a0 add x0, x29, #0x10 - 400624: 97fffff0 bl 4005e4 - ... - so we get: - ... - $ gdb -q -batch ./outputs/gdb.base/large-frame/large-frame-O0 -ex "b func" - Breakpoint 1 at 0x400614 - ... - - Fix this by: - - fixing the support for the first insn to extract the immediate operand, and - - adding support for the second insn, - such that we have: - ... - Breakpoint 1 at 0x400624 - ... - Note that we're overshooting by one insn (0x400620 is the first insn after the - prologue), but that's a pre-existing problem. - - Tested on aarch64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29408 - -2022-08-04 Alan Modra - - Don't use BFD_VMA_FMT in binutils - BFD_VMA_FMT can't be used in format strings that need to be - translated, because the translation won't work when the type of - bfd_vma differs from the machine used to compile .pot files. We've - known about this for a long time, but patches slip through review. - - So just get rid of BFD_VMA_FMT, instead using the appropriate PRId64, - PRIu64, PRIx64 or PRIo64 and SCN variants for scanf. The patch is - mostly mechanical, the only thing requiring any thought is casts - needed to preserve PRId64 output from bfd_vma values, or to preserve - one of the unsigned output formats from bfd_signed_vma values. - -2022-08-04 Alan Modra - - Re: Get rid of fprintf_vma and sprintf_vma - Commit f493c2174e messed the formatting in linker map files, - particularly for 32-bit builds where a number of tests using map files - regressed. I should have noticed the BFD64 conditional printing of - spaces to line up output due to the original %V printing hex vmas with - 16 digits when BFD64 and 8 digits when not. Besides that, it is nicer - to print 32-bit vmas for 32-bit targets. So change %V back to be - target dependent, now using bfd_sprintf_vma. Since minfo doesn't - return the number of chars printed, that means some places that - currently use %V must instead sprintf to a buffer in order to find the - length printed. - - * ldmisc.h (print_spaces): Declare. - (print_space): Change to a macro. - * ldmisc.c (vfinfo): Use bfd_sprintf_vma for %V. Tidy %W case. - (print_space): Delete. - (print_spaces): New function. - * emultempl/aix.em (print_symbol): Use print_spaces. - * ldctor.c (ldctor_build_sets): Likewise. - * ldmain.c (add_archive_element): Likewise. - * ldlang.c (print_one_symbol, lang_print_asneeded): Likewise. - (print_output_section_statement, print_data_statement): Likewise. - (print_reloc_statement, print_padding_statement): Likewise. - (print_assignment): Likewise. Also replace %V printing of vmas - with printing to a buffer in order to properly format output. - (print_input_section, lang_one_common): Likewise. - -2022-08-04 Alan Modra - - MIPS: Use R_MIPS_REL16 for BFD_RELOC_16 - R_MIPS_REL16 isn't a pc-relative reloc as the name might indicate. - - * elf64-mips.c (mips_reloc_map): Map BFD_RELOC_16 to R_MIPS_REL16. - * elfn32-mips.c (mips_reloc_map): Likewise. - -2022-08-04 GDB Administrator - - Automatic date update in version.in - -2022-08-03 H.J. Lu - - elf: Reset alignment for each PT_LOAD segment - Reset alignment for each PT_LOAD segment to avoid using alignment from - the previous PT_LOAD segment. - - bfd/ - - PR ld/29435 - * elf.c (assign_file_positions_for_load_sections): Reset - alignment for each PT_LOAD segment. - - ld/ - - PR ld/29435 - * testsuite/ld-elf/pr29435.d: New file. - * testsuite/ld-elf/pr29435.s: Likewise. - -2022-08-03 Tom Tromey - - Use unique_ptr to destroy per-bfd object - In some cases, the objfile owns the per-bfd object. This is yet - another object that can sometimes be destroyed before the registry is - destroyed, possibly reslting in a use-after-free. Also, I noticed - that the condition for deleting the object is not the same as the - condition used to create it -- so it could possibly result in a memory - leak in some situations. This patch fixes the problem by introducing - a new unique_ptr that holds this object when necessary. - - Use auto_obstack in objfile - This changes objfile to use an auto_obstack. This helps prevent - use-after-free bugs, because it ensures that anything allocated on the - objfile obstack will live past the point at which the registry object - is destroyed. - - Use gdb_bfd_ref_ptr in objfile - This changes struct objfile to use a gdb_bfd_ref_ptr. In addition to - removing some manual memory management, this fixes a use-after-free - that was introduced by the registry rewrite series. The issue there - was that, in some cases, registry shutdown could refer to memory that - had already been freed. This help fix the bug by delaying the - destruction of the BFD reference (and thus the per-bfd object) until - after the registry has been shut down. - -2022-08-03 Ruud van der Pas - - gprofng: fix bug 29410 - Argument " 0." isn't numeric in numeric gt (>) - gprofng/Changelog: - 2022-08-02 Ruud van der Pas - - PR gprofng/29410 - * gp-display-html/gp-display-html.in: Remove non-breaking spaces. - -2022-08-03 Alan Modra - - Fix a conflict between the linker's need to rename some PE format input libraries and the BFD library's file caching mechanism. - PR 29389 - bfd * bfd.c (BFD_CLOSED_BY_CACHE): New bfd flag. - * cache.c (bfd_cache_delete): Set BFD_CLOSED_BY_DELETE on the - closed bfd. - (bfd_cache_lookup_worker): Clear BFD_CLOSED_BY_DELETE on the newly - reopened bfd. - * opncls.c (bfd_set_filename): Refuse to change the name of a bfd - that has been closed by bfd_cache_delete. Mark changed bfds as - uncacheable. - * bfd-in2.h: Regenerate. - - ld * ldlang.h (lang_input_statement_struct): Add sort_key field. - * emultempl/pe.em (after_open): If multiple import libraries refer - to the same bfd, store their names in the sort_key field. - * emultempl/pep.em (after_open): Likewise. - * ldlang.c (sort_filename): New function. Returns the filename to - be used when sorting input files. - (wild_sort): Use the sort_filename function. - -2022-08-03 Enze Li - - gdb/amd64: clean up unused variable - When building with clang 15, I got this, - - CXX amd64-tdep.o - amd64-tdep.c:1410:13: error: variable 'insn' set but not used[-Werror,-Wunused-but-set-variable] - gdb_byte *insn = insn_details->raw_insn + modrm_offset; - ^ - 1 error generated. - - The function that uses this variable has been removed in this commit, - - commit 870f88f7551b0f2d6aaaa36fb684b5ff8f468107 - Date: Mon Apr 18 13:16:27 2016 -0400 - - remove trivialy unused variables - - Fix this by removing unused variable. - - Tested by rebuilding on x86_64-linux with clang 15 and gcc 12. - -2022-08-03 Lancelot SIX - - gdb: Fix regression in varobj recreation - Commit bc20e562ec0 "Fix use after free in varobj" introduced a - regression. This commit makes sure that the varobj object does not - keeps stale references to object being freed when we unload an objfile. - This includes the "valid_block" field which is reset to nullptr if the - pointed to block is tied to an objfile being freed. - - However, at some point varobj_invalidate_iter might try to recreate - varobjs tracking either floating or globals. Varobj tracking globals - are identified as having the "valid_block" field set nullptr, but as - bc20e562ec0 might clear this field, we have lost the ability to - distinguish between varobj referring to globals and non globals. - - Fix this by introducing a "global" flag which tracks if a given varobj - was initially created as tracking a global. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29426 - -2022-08-03 Alan Modra - - Re: PE objdump -x - All of these buffer overrun tests are better written as a comparison - against size remaining, due to ISO C 9899 standard 6.5.2 para 8 - regarding adding a constant to a pointer: - - "If both the pointer operand and the result point to elements of the - same array object, or one past the last element of the array object, - the evaluation shall not produce an overflow; otherwise, the behavior - is undefined." - - So "ex_dta + 4" might be undefined behaviour, if you interpret "the - array object" in this case to be the malloc'd section contents! - - * pei-x86_64.c (pex64_get_unwind_info): Tidy sanity checks. - (pex64_xdata_print_uwd_codes): Likewise. - -2022-08-03 Jan Beulich - - x86: improve/shorten vector zeroing-idiom optimization conditional - - Drop the rounding type check: We're past template matching, and none - of the involved insns support embedded rounding. - - Drop the extension opcode check: None of the involved opcodes have - variants with it being other than None. - - Instead check opcode space, even if just to be on the safe side going - forward. - - Reduce the number of comparisons by folding two groups. - - x86: properly mark i386-only insns - Just like all Size64 insns are marked Cpu64, all Size32 insns ought to - be marked Cpu386. - - x86: also use D for MOVBE - First of all rename the meanwhile misleading Opcode_SIMD_FloatD, as it - has also been used for KMOV* and BNDMOV. Then simplify the condition - selecting which form if "reversing" to use - except for the MOV to/from - control/debug/test registers all extended opcode space insns use bit 0 - (rather than bit 1) to indicate the direction (from/to memory) of an - operation. With that, D can simply be set on the first of the two - templates, while the other can be dropped. - -2022-08-03 GDB Administrator - - Automatic date update in version.in - -2022-08-03 Cary Coutant - - Add ELFCOMPRESS_ZSTD. - include/elf/ - * common.h: Add ELFCOMPRESS_ZSTD. - -2022-08-02 John Baldwin - - fbsd-nat: Correct the return type of the have_regset method. - During the development of 40c23d880386d6e8202567eaa2a6b041feb1a652, - the return value of fbsd_nat_target::have_regset was changed from a - simple boolean to returning the size of the register set. The - comments and callers were all updated for this change, but the actual - return type was accidentally left as a bool. This change fixes the - return type to be a size_t. - - Current callers of this only checked the value against 0 and thus - still worked correctly. - -2022-08-02 Jan Beulich - - ELF: emit symbol table when there are relocations - Even when there are no symbols (e.g. all relocations being against - absolute values), a symbol table (with just the first placeholder entry) - needs to be emitted. Otherwise tools like objdump won't properly process - the relocations. The respective checks in assign_section_numbers() and - _bfd_elf_compute_section_file_positions() support also this view. Oddly - enough so far HAS_RELOC was only set when reading in an object file, but - not when generating one anew; the flag would only have been cleared when - no relocations were found (anymore). - - While there also amend the affected function's leading comment to also - mention gas. - -2022-08-02 Matthew Malcomson - - ld: aarch64: Adjust TLS relaxation condition - In aarch64_tls_transition_without_check and elfNN_aarch64_tls_relax we - choose whether to perform a relaxation to an IE access model or an LE - access model based on whether the symbol itself is marked as local (i.e. - `h == NULL`). - - This is problematic in two ways. The first is that sometimes a global - dynamic access can be relaxed to an initial exec access when creating a - shared library, and if that happens on a local symbol then we currently - relax it to a local exec access instead. This usually does not happen - since we only relax an access if aarch64_can_relax_tls returns true and - aarch64_can_relax_tls does not have the same problem. However, it can - happen when we have seen both an IE and GD access on the same symbol. - This case is exercised in the newly added testcase tls-relax-gd-ie-2. - - The second problem is that deciding based on whether the symbol is local - misses the case when the symbol is global but is still non-interposable - and known to be located in the executable. This happens on all global - symbols in executables. - This case is exercised in the newly added testcase tls-relax-ie-le-4. - - Here we adjust the condition we base our relaxation on so that we relax - to local-exec if we are creating an executable and the relevant symbol - we're accessing is stored inside that executable. - - -- Updating tests for new relaxation criteria - - Many of the tests added to check our relaxation to IE were implemented - by taking advantage of the fact that we did not relax a global symbol - defined in an executable. - - Since a global symbol defined in an executable is still not - interposable, we know that a TLS version of such a symbol will be in the - main TLS block. This means that we can perform a stronger relaxation on - such symbols and relax their accesses to a local-exec access. - - Hence we have to update all tests that relied on the older suboptimal - decision making. - - The two cases when we still would want to relax a general dynamic access - to an initial exec one are: - 1) When in a shared library and accessing a symbol which we have already - seen accessed with an initial exec access sequence. - 2) When in an executable and accessing a symbol defined in a shared - library. - - Both of these require shared library support, which means that these - tests are now only available on targets with that. - - I have chosen to switch the existing testcases from a plain executable - to one dynamically linked to a shared object as that doesn't require - changing the testcases quite so much (just requires accessing a - different variable rather than requiring adding another code sequence). - - The tls-relax-all testcase was an outlier to the above approach, since - it included a general dynamic access to both a local and global symbol - and inspected for the difference accordingly. - -2022-08-02 Matthew Malcomson - - ld: aarch64: Update test linker scripts relocs.ld and relocs-ilp32.ld - The updates are to ensure that the .data section exists. This means - that we always have a data section. That means that we don't create a - RWX segment and avoid the corresponding warning. - - We get this warning when testing aarch64-none-elf with -mcmodel=tiny. - N.b. this changes quite a few testcases from fail to pass. - -2022-08-02 Victor Do Nascimento - - arm: Add cfi expression support for ra_auth_code - This patch extends assembler support for the use of register names to - allow for pseudo-registers, e.g. ra_auth_code register. - This is done particularly with CFI directives in mind, allowing for - expressions of the type: - - .cfi_register ra_auth_code, 12 - - gas/Changelog: - - * config/tc-arm.c (tc_arm_regname_to_dw2regnum): Add - REG_TYPE_PSEUDO handling. - * testsuite/gas/arm/cfi-pacbti-m-readelf.d: New. - * testsuite/gas/arm/cfi-pacbti-m.s: New. - -2022-08-02 Victor Do Nascimento - - arm: Use DWARF numbering convention for pseudo-register representation - This patch modifies the internal `struct reg_entry' numbering of DWARF - pseudo-registers to match values assigned in DWARF standards (see "4.1 - DWARF register names" in [1])so ra_auth_code goes from 12 to 143 and - amends the unwinder .save directive-processing code to correctly handle - mixed register-type save directives. - - The mechanism for splitting the register list is also re-written to - comply with register ordering on push statements, being that registers - are stored on the stack in numerical order, with the lowest numbered - register at the lowest address [2]. - - Consequently, the parsing of the hypothetical directive - - .save{r4-r7, r10, ra_auth_core, lr} - - has been changed such as rather than producing - - .save{r4-r7, r10} - .save{ra_auth_code} - .save{lr} - - as was the case with previous implementation, now produces: - - .save{lr} - .save{ra_auth_code} - .save{r4-r7, r10} - - [1] - [2] - - gas/Changelog: - - * config/tc-arm.c (REG_RA_AUTH_CODE): New. - (parse_dot_save): Likewise. - (parse_reg_list): Remove obsolete code. - (reg_names): Set ra_auth_code to 143. - (s_arm_unwind_save): Handle core and pseudo-register lists via - parse_dot_save. - (s_arm_unwind_save_mixed): Deleted. - (s_arm_unwind_save_pseudo): Handle one register at a time. - * testsuite/gas/arm/unwind-pacbti-m-readelf.d: Fix test. - * testsuite/gas/arm/unwind-pacbti-m.d: Likewise. - -2022-08-02 Alan Modra - - PE objdump -x - objdump -x on PE executables produces lots of "xdata section corrupt" - and "corrupt unwind data" warnings, and refuses to dump that info. It - turns out that the sanity checks were bad, not the data. Fix them. - - * pei-x86_64.c (pex64_get_unwind_info): Correct buffer overrun - sanity checks. - (pex64_xdata_print_uwd_codes): Similarly. - -2022-08-02 Jan Beulich - - x86: XOP shift insns don't really allow B suffix - By mistake it was permitted to be used from the very introduction of XOP - support. - -2022-08-02 GDB Administrator - - Automatic date update in version.in - -2022-08-01 Martin Storsjö - - ld: Support the -exclude-symbols option via COFF def files, with the EXCLUDE_SYMBOLS keyword - This was requested in review. - - ld: Add support for a new option, -exclude-symbols, in COFF object file directives - This maps to the same as ld's --exclude-symbols command line option, - but allowing specifying the option via directives embedded in the - object files instead of passed manually on the command line. - -2022-08-01 Tom de Vries - - [gdb/symtab] Fix .debug_aranges duplicate offset warning - The function read_addrmap_from_aranges contains code to issue a warning: - ... - if (!insertpair.second) - { - 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 false; - } - ... - but the warning is in fact activated when all_comp_units has duplicate - entries, which is very misleading. - - Fix this by: - - adding a test-case that should trigger the warning, - - replacing the current implementation of the warning with an - assert that all_comp_units should not contain duplicates, and - - properly re-implementing the warning, such that it is triggered - by the test-case. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29381 - -2022-08-01 Jan Beulich - - x86: SKINIT with operand needs IgnoreSize - Without it in 16-bit mode a pointless operand size prefix would be - emitted. - -2022-08-01 WANG Xuerui - - opcodes: LoongArch: add "ret" instruction to reduce typing - This syntactic sugar is present in both classical and emerging - architectures, like Alpha, SPARC and RISC-V, and assembler macros - doing the same thing can already be found in the wild e.g. [1], proving - the feature's popularity. It's better to provide support directly in the - assembler so downstream users wouldn't have to re-invent this over and - over again. - - [1]: https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/loongarch/sysdep.h;h=c586df819cd90;hb=HEAD#l28 - -2022-08-01 WANG Xuerui - - opcodes: LoongArch: make all non-native jumps desugar to canonical b{lt/ge}[u] forms - Also re-order the jump/branch opcodes while at it, so that insns are - sorted in ascending order according to opcodes, and the label form - preceding the real definition. - -2022-08-01 Alan Modra - - Get rid of fprintf_vma and sprintf_vma - These two macros print either a 16 digit hex number or an 8 digit - hex number. Unfortunately they depend on both target and host, which - means that the output for 32-bit targets may be either 8 or 16 hex - digits. - - Replace them in most cases with code that prints a bfd_vma using - PRIx64. In some cases, deliberately lose the leading zeros. - This change some output, notably in base/offset fields of m68k - disassembly which I think looks better that way, and in error - messages. I've kept leading zeros in symbol dumps (objdump -t) - and in PE header dumps. - - bfd/ - * bfd-in.h (fprintf_vma, sprintf_vma, printf_vma): Delete. - * bfd-in2.h: Regenerate. - * bfd.c (bfd_sprintf_vma): Don't use sprintf_vma. - (bfd_fprintf_vma): Don't use fprintf_vma. - * coff-rs6000.c (xcoff_reloc_type_tls): Don't use sprintf_vma. - Instead use PRIx64 to print bfd_vma values. - (xcoff_ppc_relocate_section): Likewise. - * cofflink.c (_bfd_coff_write_global_sym): Likewise. - * mmo.c (mmo_write_symbols_and_terminator): Likewise. - * srec.c (srec_write_symbols): Likewise. - * elf32-xtensa.c (print_r_reloc): Similarly for fprintf_vma. - * pei-x86_64.c (pex64_dump_xdata): Likewise. - (pex64_bfd_print_pdata_section): Likewise. - * som.c (som_print_symbol): Likewise. - * ecoff.c (_bfd_ecoff_print_symbol): Use bfd_fprintf_vma. - opcodes/ - * dis-buf.c (perror_memory, generic_print_address): Don't use - sprintf_vma. Instead use PRIx64 to print bfd_vma values. - * i386-dis.c (print_operand_value, print_displacement): Likewise. - * m68k-dis.c (print_base, print_indexed): Likewise. - * ns32k-dis.c (print_insn_arg): Likewise. - * ia64-gen.c (_opcode_int64_low, _opcode_int64_high): Delete. - (opcode_fprintf_vma): Delete. - (print_main_table): Use PRIx64 to print opcode. - binutils/ - * od-macho.c: Replace all uses of printf_vma with bfd_printf_vma. - * objcopy.c (copy_object): Don't use sprintf_vma. Instead use - PRIx64 to print bfd_vma values. - (copy_main): Likewise. - * readelf.c (CHECK_ENTSIZE_VALUES): Likewise. - (dynamic_section_mips_val): Likewise. - (print_vma): Don't use printf_vma. Instead use PRIx64 to print - bfd_vma values. - (dump_ia64_vms_dynamic_fixups): Likewise. - (process_version_sections): Likewise. - * rddbg.c (stab_context): Likewise. - gas/ - * config/tc-i386.c (offset_in_range): Don't use sprintf_vma. - Instead use PRIx64 to print bfd_vma values. - (md_assemble): Likewise. - * config/tc-mips.c (load_register, macro): Likewise. - * messages.c (as_internal_value_out_of_range): Likewise. - * read.c (emit_expr_with_reloc): Likewise. - * config/tc-ia64.c (note_register_values): Don't use fprintf_vma. - Instead use PRIx64 to print bfd_vma values. - (print_dependency): Likewise. - * listing.c (list_symbol_table): Use bfd_sprintf_vma. - * symbols.c (print_symbol_value_1): Use %p to print pointers. - (print_binary): Likewise. - (print_expr_1): Use PRIx64 to print bfd_vma values. - * write.c (print_fixup): Use %p to print pointers. Don't use - fprintf_vma. - * testsuite/gas/all/overflow.l: Update expected output. - * testsuite/gas/m68k/mcf-mov3q.d: Likewise. - * testsuite/gas/m68k/operands.d: Likewise. - * testsuite/gas/s12z/truncated.d: Likewise. - ld/ - * deffilep.y (def_file_print): Don't use fprintf_vma. Instead - use PRIx64 to print bfd_vma values. - * emultempl/armelf.em (gld${EMULATION_NAME}_finish): Don't use - sprintf_vma. Instead use PRIx64 to print bfd_vma values. - * emultempl/pe.em (gld${EMULATION_NAME}_finish): Likewise. - * ldlang.c (lang_map): Use %V to print region origin. - (lang_one_common): Don't use sprintf_vma. - * ldmisc.c (vfinfo): Don't use fprintf_vma or sprintf_vma. - * pe-dll.c (pe_dll_generate_def_file): Likewise. - gdb/ - * remote.c (remote_target::trace_set_readonly_regions): Replace - uses of sprintf_vma with bfd_sprintf_vma. - -2022-08-01 liuzhensong - - LoongArch: Set defaults to exec stack 0. - -2022-08-01 Alan Modra - - libctf: Avoid use of uninitialised variables - * ctf-link.c (ctf_link_add_ctf_internal): Don't free uninitialised - pointers. - -2022-08-01 Alan Modra - - PR29348, BFD_VMA_FMT wrong - There is a problem with my commit 0e3c1eebb2, which replaced - bfd_uint64_t with uint64_t: Some hosts typedef int64_t to long long - even when long is the same size as long long. That confuses the code - choosing one of "l", "ll", or "I64" for BFD_VMA_FMT, and results in - warnings. - - Write a direct configure test for the printf int64_t style instead. - This removes the last use of BFD_HOST_64BIT_LONG, so delete that. - Note that the changes to configure.com are pure guesswork. - - PR 29348 - * bfd-in.h (BFD_HOST_64BIT_LONG): Don't define. - (BFD_VMA_FMT): Define using BFD_INT64_FMT when 64-bit. - (bfd_vma, bfd_signed_vma): Move comments to 64-bit typedefs. - * configure.ac (BFD_HOST_64BIT_LONG): Delete. - (BFD_INT64_FMT): New config test. - * configure.com: Update similarly. - * Makefile.in: Regenerate. - * bfd-in2.h: Regenerate. - * configure: Regenerate. - -2022-08-01 GDB Administrator - - Automatic date update in version.in - -2022-07-31 GDB Administrator - - Automatic date update in version.in - -2022-07-30 Tom de Vries - - [gdb/testsuite] Fix gdb.ada/literals.exp with aarch64 - On aarch64-linux, I run into: - ... - (gdb) print 16#ffffffffffffffff#^M - $7 = 18446744073709551615^M - (gdb) FAIL: gdb.ada/literals.exp: print 16#ffffffffffffffff# - ... - while on x86_64-linux instead, I get: - ... - (gdb) print 16#ffffffffffffffff#^M - $7 = -1^M - (gdb) PASS: gdb.ada/literals.exp: print 16#ffffffffffffffff# - ... - - We can easily reproduce this on x86_64-linux using: - ... - $ gdb -q -batch -ex "set lang ada" -ex "set arch i386" \ - -ex "print 16#ffffffffffffffff#" - $1 = -1 - $ gdb -q -batch -ex "set lang ada" -ex "set arch aarch64" \ - -ex "print 16#ffffffffffffffff#" - $1 = 18446744073709551615 - ... - - With i386, we have: - ... - (gdb) p int_bits - $3 = 32 - (gdb) p long_bits - $4 = 32 - (gdb) p long_long_bits - $5 = 64 - ... - and so in processInt we hit the fits-in-unsigned-long-long case where we use - as type long long: - ... - /* Note: Interprets ULLONG_MAX as -1. */ - yylval.typed_val.type = type_long_long (par_state); - ... - - With aarch64, we have instead: - ... - (gdb) p int_bits - $1 = 32 - (gdb) p long_bits - $2 = 64 - (gdb) p long_long_bits - $3 = 64 - ... - and so in processInt we hit the fits-in-unsigned-long case where we use - as type unsigned long: - ... - yylval.typed_val.type - = builtin_type (par_state->gdbarch ())->builtin_unsigned_long; - ... - - It's not clear why for ada we're using long long for the - fits-in-unsigned-long-long case. - - Fix this by using unsigned long long for the fits-in-unsigned-long-long case, - meaning the new reference output is 18446744073709551615 instead of -1. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29416 - -2022-07-30 Simon Marchi - - gdb/testsuite: add macros test for source files compiled in various ways - Using different ways of passing source file paths to compilers results n - different file and directory paths in the line header. For example: - - - gcc foo.c - - gcc ./foo.c - - gcc ../cwd/foo.c - - gcc $PWD/foo.c - - Because of this, GDB sometimes failed to look up macros. The previous - patch fixed that as much as possible. This patch adds the corresponding - tests. - - Add both a DWARF assembler-based test and a regular test. The DWARF - assembled-based one tests some hard-coded debug info based on what I - have observed some specific versions of gcc and clang generate. We want - to make sure that GDB keeps handling all these cases correctly, even if - it's not always clear whether they are really valid DWARF. Also, they - will be tested no matter what the current target compiler is for a given - test run. - - The regular test is compiled using the target compiler, so it may help - find bugs when testing against some other toolchains than what was used - to generate the DWARF assembler-based test. - - For the DWARF assembler-based test, add to testsuite/lib/dwarf.exp the - necessary code to generate a DWARF5 .debug_macro section. The design of - the new procs is based on what was done for rnglists and loclists. - - To test against a specific compiler one can use this command, for - example: - - $ make check TESTS="gdb.base/macro-source-path.exp" RUNTESTFLAGS="CC_FOR_TARGET=clang --target_board unix/gdb:debug_flags=-gdwarf-5" - - Change-Id: Iab8da498e57d10cc2a3d09ea136685d9278cfcf6 - -2022-07-30 Simon Marchi - - gdb: remove code to prepend comp dir in buildsym_compunit::start_subfile - The bit of code removed by this patch was introduced to fix the same - kind of problem that the previous patch fixes. That is, to try to match - existing subfiles when different name forms are used to refer to a same - file. - - The thread for the patch that introduced this code is: - - https://pi.simark.ca/gdb-patches/45F8CBDF.9090501@hq.tensilica.com/ - - The important bits are that the compiler produced a compilation unit - with: - - DW_AT_name : test.c - DW_AT_comp_dir : /home/maxim/W/BadgerPass/PR_14999 - - and DWARF v2 line table with: - - The Directory Table: - /home/maxim/W/BadgerPass/PR_14999 - - The File Name Table: - Entry Dir Time Size Name - 1 1 1173897037 152 test.c - - Because the main symtab was created with only DW_AT_name, it was named - "test.c". And because the path built from the line header contained the - "directory" part, it was "/home/maxim/W/BadgerPass/PR_14999/test.c". - Because of this mismatch, thing didn't work, so they added this code to - prepend the compilation directory to the existing subfile names, so that - this specific case would work. - - With the changes done earlier in this series, where subfiles are - identified using the "most complete path possible", this case would be - handled. The main subfile's would be - "/home/maxim/W/BadgerPass/PR_14999/test.c" from the start - (DW_AT_comp_dir + DW_AT_name). It's not so different from some DWARF 5 - cases actually, which make the compilation directory explicit in the - line table header. - - I therefore think that this code is no longer needed. It does feel like - a quick hack to make one specific case work, and we have a more general - solution now. Also, this code was introduced to work around a problem - in the DWARF debug info or the DWARF debug info reader. In general, I - think it's preferable for these hacks to be located in the specific - debug info reader code, rather than in the common code. - - Even though this code was added to work around a DWARF reader problem, - it's possible that some other debug info reader has started taking - advantage of this code in the mean time. It's very difficult to - know or verify, but I think the likelyhood is quite small, so I'm - proposing to get rid of it to simplify things a little bit. - - Change-Id: I710b8ec0d449d1b110d67ddf9fcbdb2b37108306 - -2022-07-30 Simon Marchi - - gdb: add "id" fields to identify symtabs and subfiles - Printing macros defined in the main source file doesn't work reliably - using various toolchains, especially when DWARF 5 is used. For example, - using the binaries produced by either of these commands: - - $ gcc --version - gcc (GCC) 11.2.0 - $ ld --version - GNU ld (GNU Binutils) 2.38 - $ gcc test.c -g3 -gdwarf-5 - - $ clang --version - clang version 13.0.1 - $ clang test.c -gdwarf-5 -fdebug-macro - - I get: - - $ ./gdb -nx -q --data-directory=data-directory a.out - (gdb) start - Temporary breakpoint 1 at 0x111d: file test.c, line 6. - Starting program: /home/simark/build/binutils-gdb-one-target/gdb/a.out - - Temporary breakpoint 1, main () at test.c:6 - 6 return ZERO; - (gdb) p ZERO - No symbol "ZERO" in current context. - - When starting to investigate this (taking the gcc-compiled binary as an - example), we see that GDB fails to look up the appropriate macro scope - when evaluating the expression. While stopped in - macro_lookup_inclusion: - - (top-gdb) p name - $1 = 0x62100011a980 "test.c" - (top-gdb) p source.filename - $2 = 0x62100011a9a0 "/home/simark/build/binutils-gdb-one-target/gdb/test.c" - - `source` is the macro_source_file that we would expect GDB to find. - `name` comes from the symtab::filename field of the symtab we are - stopped in. GDB doesn't find the appropriate macro_source_file because - the name of the macro_source_file doesn't match exactly the name of the - symtab. - - The name of the main symtab comes from the compilation unit's - DW_AT_name, passed to the buildsym_compunit's constructor: - - https://gitlab.com/gnutools/binutils-gdb/-/blob/4815d6125ec580cc02a1094d61b8c9d1cc83c0a1/gdb/dwarf2/read.c#L10627-10630 - - The contents of DW_AT_name, in this case, is "test.c". It is typically - (what I witnessed all compilers do) the same string that was passed to - the compiler on the command-line. - - The name of the macro_source_file comes from the line number program - header's file table, from the call to the line_header::file_file_name - method: - - https://gitlab.com/gnutools/binutils-gdb/-/blob/4815d6125ec580cc02a1094d61b8c9d1cc83c0a1/gdb/dwarf2/macro.c#L54-65 - - line_header::file_file_name prepends the directory path that the file - entry refers to, in the file table (if the file name is not already - absolute). In this case, the file name is "test.c", appended to the - directory "/home/simark/build/binutils-gdb-one-target/gdb". - - Because the symtab's name is not created the same way as the - macro_source_file's name is created, we get this mismatch. GDB fails to - find the appropriate macro scope for the symtab, and we can't print - macros when stopped in that symtab. - - To make this work, we must ensure that paths produced in these two ways - end up identical. This can be tricky because of the different ways a - path can be passed to the compiler by the user. - - Another thing to consider is that while the main symtab's name (or - subfile, before it becomes a symtab) is created using DW_AT_name, the - main symtab is also referred to using its entry in the line table - header's file table, when processing the line table. We must therefore - ensure that the same name is produced in both cases, so that a call to - "start_subfile" for the main subfile will correctly find the - already-created subfile, created by buildsym_compunit's constructor. If - we fail to do that, things still often work, because of a fallback: the - watch_main_source_file_lossage method. This method determines that if - the main subfile has no symbols but there exists another subfile with - the same basename (e.g. "test.c") that does have symbols, it's probably - because there was some filename mismatch. So it replaces the main - subfile with that other subfile. I think that heuristic is useful as a - last effort to work around any bug or bad debug info, but I don't think - we should design things such as to rely on it. It's a heuristic, it can - get things wrong. So in my search for a fix, it is important that given - some good debug info, we don't end up relying on that for things to - work. - - A first attempt at fixing this was to try to prepend the compilation - directory here or not prepend it there. In practice, because of all the - possible combinations of debug info the compilers produce, it was not - possible to get something that would produce reliable, consistent paths. - - Another attempt at fixing this was to make both macro_source_file - objects and symtab objects use the most complete form of path possible. - That means to prepend directories at least until we get an absolute - path. In theory, we should end up with the same path in all cases. - This generally worked, but because it changed the symtab names, it - resulted in user-visible changes (for example, paths to source files in - Breakpoint hit messages becoming always absolute). I didn't find this - very good, first because there is a "set filename-display" setting that - lets the user control how they want the paths to be displayed, and that - would suddenly make this setting completely ineffective (although even - today, it is a bit dependent on the debug info). Second, it would - require a good amount of testsuite tweaks to make tests accept these - suddenly absolute paths. - - This new patch is a slight variation of that: it adds a new field called - "filename_for_id" in struct symtab and struct subfile, next to the - existing filename field. The goal is to separate the internal ids used - for finding objects from the names used for presentation. This field is - used for identifying subfiles, symtabs and macro_source_files - internally. For DWARF symtabs, this new field is meant to contain the - "most complete possible" path, as discussed above. So for a given file, - it must always be in the same form, everywhere. The existing - symtab::filename field remains the one used for printing to the user, so - there shouldn't be any change in how paths are printed. - - Changes in the core symtab files are: - - - Add "name_for_id" and "filename_for_id" fields to "struct subfile" - and "struct symtab", next to existing "name" and "filename" fields. - - Make buildsym_compunit::buildsym_compunit and - buildsym_compunit::start_subfile accept a "name_for_id" parameter - next to the existing "name" ones. - - Make buildsym_compunit::start_subfile use "name_for_id" for looking - up existing subfiles. This is the key thing for making calls - to start_subfile for the main source file look up the existing - subfile successfully, and avoid relying on - watch_main_source_file_lossage. - - Make sal_macro_scope pass "filename_for_id", rather than "filename", - to macro_lookup_inclusion. This is the key thing to making the - lookup work and macro printing work. - - Changes in the DWARF files are: - - - Make line_header::file_file_name return the "most complete possible" - name. The only pre-existing user of this method is the macro code, - to give the macro_source_file objects their name. And we now want - them to have this "most complete possible" name, which will match the - corresponding symtab's "filename_for_id". - - Make dwarf2_cu::start_compunit_symtab pass the "most complete - possible" name for the main symtab's "filename_for_id". In this - context, where the info comes from the compilation unit's DW_AT_name - / DW_AT_comp_dir, it means prepending DW_AT_comp_dir to DW_AT_name if - DW_AT_name is not already absolute. - - Change dwarf2_start_subfile to build a name_for_id for the subfile - being started. The simplest way is to re-use - line_header::file_file_name, since the callers always have a - file_entry handy. This ensures that it will get the exact same path - representation as the macro code does, for the same file (since it - also uses line_header::file_file_name). - - Update calls to allocate_symtab to pass the "name_for_id" from the - subfile. - - Tests exercising all this are added by the following patch. - - Of all the cases I tried, the only one I found that ends up relying on - watch_main_source_file_lossage is the following one: - - $ clang --version - clang version 13.0.1 - Target: x86_64-pc-linux-gnu - Thread model: posix - InstalledDir: /usr/bin - $ clang ./test.c -g3 -O0 -gdwarf-4 - $ ./gdb -nx --data-directory=data-directory -q -readnow -iex "set debug symtab-create 1" a.out - ... - [symtab-create] start_subfile: name = test.c, name_for_id = /home/simark/build/binutils-gdb-one-target/gdb/test.c - [symtab-create] start_subfile: name = ./test.c, name_for_id = /home/simark/build/binutils-gdb-one-target/gdb/./test.c - [symtab-create] start_subfile: name = ./test.c, name_for_id = /home/simark/build/binutils-gdb-one-target/gdb/./test.c - [symtab-create] start_subfile: found existing symtab with name_for_id /home/simark/build/binutils-gdb-one-target/gdb/./test.c (/home/simark/build/binutils-gdb-one-target/gdb/./test.c) - [symtab-create] watch_main_source_file_lossage: using subfile ./test.c as the main subfile - - As we can see, there are two forms used for "test.c", one with a "." and - one without. This comes from the fact that the compilation unit DIE - contains: - - DW_AT_name ("test.c") - DW_AT_comp_dir ("/home/simark/build/binutils-gdb-one-target/gdb") - - without a ".", and the line table for that file contains: - - include_directories[ 1] = "." - file_names[ 1]: - name: "test.c" - dir_index: 1 - - When assembling the filename from that entry, we get a ".". - - It is a bit unexpected that the main filename resulting from the line - table header does not match exactly the name in the compilation unit. - For instance, gcc uses "./test.c" for the DW_AT_name, which gives - identical paths in the compilation unit and in the line table header. - - Similarly, with DWARF 5: - - $ clang ./test.c -g3 -O0 -gdwarf-5 - - clang create two entries that refer to the same file but are of in a different - form. - - include_directories[ 0] = "/home/simark/build/binutils-gdb-one-target/gdb" - include_directories[ 1] = "." - file_names[ 0]: - name: "test.c" - dir_index: 0 - file_names[ 1]: - name: "test.c" - dir_index: 1 - - The first file name produces a path without a "." while the second does. - This is not caught by watch_main_source_file_lossage, because of - dwarf_decode_lines that creates a symtab for each file entry in the line - table. It therefore appears as "non-empty" to - watch_main_source_file_lossage. This results in two symtabs: - - (gdb) maintenance info symtabs - { objfile /home/simark/build/binutils-gdb-one-target/gdb/a.out ((struct objfile *) 0x613000005d00) - { ((struct compunit_symtab *) 0x62100011aca0) - debugformat DWARF 5 - producer clang version 13.0.1 - name test.c - dirname /home/simark/build/binutils-gdb-one-target/gdb - blockvector ((struct blockvector *) 0x621000129ec0) - user ((struct compunit_symtab *) (null)) - { symtab test.c ((struct symtab *) 0x62100011ad20) - fullname (null) - linetable ((struct linetable *) 0x0) - } - { symtab ./test.c ((struct symtab *) 0x62100011ad60) - fullname (null) - linetable ((struct linetable *) 0x621000129ef0) - } - } - } - - I am not sure what is the consequence of this, but this is also what - happens before my patch, so I think its acceptable to leave it as-is. - - To handle these two cases nicely, I think we will need a function that - removes the unnecessary "." from path names, something that can be done - later. - - Finally, I made a change in find_file_and_directory is necessary to - avoid breaking test - - gdb.dwarf2/dw2-compdir-oldgcc.exp: info source gcc42 - - Without that change, we would get: - - (gdb) info source - Current source file is /dir/d/dw2-compdir-oldgcc42.S - Compilation directory is /dir/d - - whereas the expected result is: - - (gdb) info source - Current source file is dw2-compdir-oldgcc42.S - Compilation directory is /dir/d - - This test was added here: - - https://sourceware.org/pipermail/gdb-patches/2012-November/098144.html - - Long story short, GCC <= 4.2 apparently had a bug where it would - generate a DW_AT_name with a full path ("/dir/d/dw2-compdir-oldgcc42.S") - and no DW_AT_comp_dir. The line table has one entry with filename - "dw2-compdir-oldgcc42.S", which refers to directory 0. Directory 0 - normally refers to the compilation unit's comp dir, but it is - non-existent in this case. - - This caused some symtab lookup problems, and to work around them, some - workaround was added, which today reads as: - - if (res.get_comp_dir () == nullptr - && producer_is_gcc_lt_4_3 (cu) - && res.get_name () != nullptr - && IS_ABSOLUTE_PATH (res.get_name ())) - res.set_comp_dir (ldirname (res.get_name ())); - - Source: https://gitlab.com/gnutools/binutils-gdb/-/blob/6577f365ebdee7dda71cb996efa29d3714cbccd0/gdb/dwarf2/read.c#L9428-9432 - - It extracts an artificial DW_AT_comp_dir from DW_AT_name, if there is no - DW_AT_comp_dir and DW_AT_name is absolute. - - Prior to my patch, a subfile would get created with filename - "/dir/d/dw2-compdir-oldgcc42.S", from DW_AT_name, and another would get - created with filename "dw2-compdir-oldgcc42.S" from the line table's - file table. Then watch_main_source_file_lossage would kick in and merge - them, keeping only the "dw2-compdir-oldgcc42.S" one: - - [symtab-create] start_subfile: name = /dir/d/dw2-compdir-oldgcc42.S - [symtab-create] start_subfile: name = dw2-compdir-oldgcc42.S - [symtab-create] start_subfile: name = dw2-compdir-oldgcc42.S - [symtab-create] start_subfile: found existing symtab with name dw2-compdir-oldgcc42.S (dw2-compdir-oldgcc42.S) - [symtab-create] watch_main_source_file_lossage: using subfile dw2-compdir-oldgcc42.S as the main subfile - - And so "info source" would show "dw2-compdir-oldgcc42.S" as the - filename. - - With my patch applied, but without the change in - find_file_and_directory, both DW_AT_name and the line table would try to - start a subfile with the same filename_for_id, and there was no need for - watch_main_source_file_lossage - which is what we want: - - [symtab-create] start_subfile: name = /dir/d/dw2-compdir-oldgcc42.S, name_for_id = /dir/d/dw2-compdir-oldgcc42.S - [symtab-create] start_subfile: name = dw2-compdir-oldgcc42.S, name_for_id = /dir/d/dw2-compdir-oldgcc42.S - [symtab-create] start_subfile: found existing symtab with name_for_id /dir/d/dw2-compdir-oldgcc42.S (/dir/d/dw2-compdir-oldgcc42.S) - [symtab-create] start_subfile: name = dw2-compdir-oldgcc42.S, name_for_id = /dir/d/dw2-compdir-oldgcc42.S - [symtab-create] start_subfile: found existing symtab with name_for_id /dir/d/dw2-compdir-oldgcc42.S (/dir/d/dw2-compdir-oldgcc42.S) - - But since the one with name == "/dir/d/dw2-compdir-oldgcc42.S", coming - from DW_AT_name, gets created first, it wins, and the symtab ends up - with "/dir/d/dw2-compdir-oldgcc42.S" as the name, "info source" shows - "/dir/d/dw2-compdir-oldgcc42.S" and the test breaks. - - This is not wrong per-se, after all DW_AT_name is - "/dir/d/dw2-compdir-oldgcc42.S", so it wouldn't be wrong to report the - current source file as "/dir/d/dw2-compdir-oldgcc42.S". If you compile - a file passing "/an/absolute/path.c", DW_AT_name typically contains (at - least with GCC) "/an/absolute/path.c" and GDB tells you that the source - file is "/an/absolute/path.c". But we can also keep the existing - behavior fairly easily with a little change in find_file_and_directory. - When extracting an artificial DW_AT_comp_dir from DW_AT_name, we now - modify the name to just keep the file part. The result is coherent with - what compilers do when you compile a file by just passing its filename - ("gcc path.c -g"): - - DW_AT_name ("path.c") - DW_AT_comp_dir ("/home/simark/build/binutils-gdb-one-target/gdb") - - With this change, filename_for_id is still the full name, - "/dir/d/dw2-compdir-oldgcc42.S", but the filename of the subfile / - symtab (what ends up shown by "info source") is just - "dw2-compdir-oldgcc42.S", and that makes the test happy. - - Change-Id: I8b5cc4bb3052afdb172ee815c051187290566307 - -2022-07-30 Simon Marchi - - gdb/dwarf: pass a file_entry to line_header::file_file_name - In the following patch, there will be some callers of file_file_name - that will already have access to the file_entry object for which they - want the file name. It would be inefficient to have them pass an index, - only for line_header::file_file_name to re-lookup the same file_entry - object. Change line_header::file_file_name to accept a file_entry - object reference, instead of an index to look up. - - I think this change makes sense in any case. Callers that have an index - can first obtain a file_entry using line_header::file_name_at or - line_header::file_names. - - When passing a file_entry object, we can assume that the file_entry's - index is valid, unlike when passing an index. So, push the special case - about an invalid index to the sole current caller of file_file_name, - macro_start_file. I think that error belongs there anyway, since it - specifically talks about "bad file number in macro information". - - This requires recording the file index in the file_entry structure, so - add that. - - Change-Id: Ic6e44c407539d92b7863d7ba82405ade17f384ad - -2022-07-30 Simon Marchi - - gdb/dwarf: pass compilation directory to line header - The following patch changes line_header::file_file_name to prepend the - compilation directory to the file name, if needed. For that, the line - header needs to know about the compilation directory. Prepare for that - by adding a constructor that takes it as a parameter, and passing the - value down everywhere needed. Add a second constructor for the special - case of building a line_header for doing a hash table lookup, since that - case doesn't require a compilation directory value. - - Change-Id: Iba3ba0293e4e2d13a64b257cf9a3094684d54330 - -2022-07-30 Simon Marchi - - gdb: add debug prints in buildsym.c - Add a few debug prints in buildsym.c that were helpful to me in writing - this series. - - Change-Id: If10a818feaee3ce1b78a2a254013b62dd578002b - -2022-07-30 Simon Marchi - - gdb: introduce symtab_create_debug_printf - Introduce symtab_create_debug_printf and symtab_create_debug_printf_v, - to print the debug messages enabled by "set debug symtab-create". - - Change-Id: I442500903f72d4635c2dd9eaef770111f317dc04 - -2022-07-30 GDB Administrator - - Automatic date update in version.in - -2022-07-29 Tom de Vries - - [gdb/testsuite] Fix gdb.ada/convvar_comp.exp with broken debug info - On aarch64-linux I run into this failure with gcc 7.5.0: - ... - (gdb) print $item.started^M - $1 = (-5312, 65535, 4202476)^M - (gdb) FAIL: gdb.ada/convvar_comp.exp: print $item.started - ... - - The test-case expects (0, 0, 0), but we're getting another value due to - incorrect location information. - - Work around this by: - - first printing the value, and then - - verifying that the convenience variable matches the printed value. - - I've verified that the test-case still checks what it should by disabling - the fix from commit cc0e770c0d0 ("memory error printing component of record - from convenience variable") and observing the test-case fail. - - Tested on x86_64-linux and aarch64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29420 - -2022-07-29 Alan Modra - - Re: PR16005, avr linker crash on a particular instruction sequence with --relax - The last patch wasn't so clever. The contents in fact have already - been read, just not cached where relax_delete_bytes expects them. - relax_delete_bytes also modifies relocs and syms, so they should be - cached too. - - PR 16005 - * elf32-avr.c (elf32_avr_relax_delete_bytes): Revert last change. - (elf32_avr_relax_section): Cache contents, relocs and syms - before calling relax_delete_bytes. - -2022-07-29 Andrew Burgess - - libopcodes/aarch64: add support for disassembler styling - This commit enables disassembler styling for AArch64. After this - commit it is possible to have objdump style AArch64 disassembler - output (using --disassembler-color option). Once the required GDB - patches are merged, GDB will also style the disassembler output. - - The changes to support styling are mostly split between two files - opcodes/aarch64-dis.c and opcodes/aarch64-opc.c. - - The entry point for the AArch64 disassembler can be found in - aarch64-dis.c, this file handles printing the instruction mnemonics, - and assembler directives (e.g. '.byte', '.word', etc). Some operands, - mostly relating to assembler directives are also printed from this - file. This commit changes all of this to pass through suitable - styling information. - - However, for most "normal" instructions, the instruction operands are - printed using a two step process. From aarch64-dis.c, in the - print_operands function, the function aarch64_print_operand is called, - this function is in aarch64-opc.c, and converts an instruction operand - into a string. Then, back in print_operands (aarch64-dis.c), the - operand string is printed. - - Unfortunately, the string returned by aarch64_print_operand can be - quite complex, it will include syntax elements, like '[' and ']', in - addition to register names and immediate values. In some cases, a - single operand will expand into what will appear (to the user) as - multiple operands separated with a ','. - - This makes the task of styling more complex, all these different - components need to by styled differently, so we need to get the - styling information out of aarch64_print_operand in some way. - - The solution that I propose here is similar to the solution that I - used for the i386 disassembler. - - Currently, aarch64_print_operand uses snprintf to write the operand - text into a buffer provided by the caller. - - What I propose is that we pass an extra argument to the - aarch64_print_operand function, this argument will be a structure, the - structure contains a callback function and some state. - - When aarch64_print_operand needs to format part of its output this can - be done by using the callback function within the new structure, this - callback returns a string with special embedded markers that indicate - which mode should be used for each piece of text. Back in - aarch64-dis.c we can spot these special style markers and use this to - split the disassembler output up and apply the correct style to each - piece. - - To make aarch64-opc.c clearer a series of new static functions have - been added, e.g. 'style_reg', 'style_imm', etc. Each of these - functions formats a piece of text in a different style, 'register' and - 'immediate' in this case. - - Here's an example taken from aarch64-opc.c of the new functions in - use: - - snprintf (buf, size, "[%s, %s]!", - style_reg (styler, base), - style_imm (styler, "#%d", opnd->addr.offset.imm)); - - The aarch64_print_operand function is also called from the assembler - to aid in printing diagnostic messages. Right now I have no plans to - add styling to the assembler output, and so, the callback function - used in the assembler ignores the styling information and just returns - an plain string. - - I've used the source files in gas/testsuite/gas/aarch64/ for testing, - and have manually gone through and checked that the styling looks - reasonable, however, I'm not an AArch64 expert, so it is possible that - the odd piece is styled incorrectly. Please point out any mistakes - I've made. - - With objdump disassembler color turned off, there should be no change - in the output after this commit. - -2022-07-29 Nick Clifton - - Stop the linker from complaining about unrecognised DW_FORM-rnglistx and DW_FORM_loclistx format attributes. - PR 29424 - * dwarf2.c (read_attribute_value): Handle DW_FORM_rnglistx and - DW_FORM_loclistx. - -2022-07-29 Alan Modra - - PR16005, avr linker crash on a particular instruction sequence with --relax - It's possible for relax_delete_bytes to be called with section - contents NULL, as demonstrated by the testcase in this PR. - - PR 16005 - * elf32-avr.c (elf32_avr_relax_delete_bytes): Get section contents - if not already available. - -2022-07-29 Jan Beulich - - x86: drop stray NoRex64 from KeyLocker insns - It's entirely unclear why some of the KeyLocker insns had NoRex64 on - them - there's nothing here which could cause emission of REX.W (except - of course a user-specified "rex.w", which we ought to honor anyway). - -2022-07-29 Jan Beulich - - Arm64: re-work PR gas/27217 fix - The original approach has resulted in anomalies when . is involved in an - operand of one of the affected insns. We cannot leave . unresolved, or - else it'll be resolved at the end of assembly, then pointing to the - address of a section rather than at the insn of interest. Undo part of - the original change and instead check whether a relocation cannot be - omitted in md_apply_fix(). - - By resolving the expressions again, equates (see the adjustment of the - respective testcase) will now be evaluated, and hence relocations - against absolute addresses be emitted. This ought to be okay as long as - the equates aren't global (and hence can't be overridden). If a need - for such arises, quite likely the only way to address this would be to - invent yet another expression evaluation mode, leaving everything - _except_ . un-evaluated. - - There's a further anomaly in how transitive equates are handled. In - - .set x, 0x12345678 - .eqv bar, x - foo: - adrp x0, x - add x0, x0, :lo12:x - - adrp x0, bar - add x0, x0, :lo12:bar - - the first two relocations are now against *ABS*:0x12345678 (as said - above), whereas the latter two relocations would be against x. (Before - the change here, the first two relocations are against x and the latter - two against bar.) But this is an issue seen elsewhere as well, and would - likely require adjustments in the target-independent parts of the - assembler instead of trying to hack around this for every target. - -2022-07-29 Rainer Orth - - ld: Extend ac_default_ld_warn_rwx_segments to all SPARC targets [PR29411] - As discussed in PR ld/29411, the ld warning - - [...] has a LOAD segment with RWX permissions - - needs to be disabled on all SPARC targets, not just Solaris/SPARC: the - .plt section is required to be RWX by the 32-bit SPARC ELF psABI and the - 64-bit SPARC Compliance Definition 2.4.1. Given that ld only supports - SPARC ELF targets, this patch implements this. - - Tested on sparc64-unknown-linux-gnu and sparc-sun-solaris2.11. - - 2022-07-28 Rainer Orth - - ld: - PR ld/29411 - * configure.tgt (ac_default_ld_warn_rwx_segments): Extend to all - sparc targets. Expand comment. - -2022-07-29 Tom de Vries - - [gdb/testsuite] Fix gdb.threads/killed-outside.exp on aarch64 - On aarch64 (and likewise on arm), I run into: - ... - (gdb) PASS: gdb.threads/killed-outside.exp: get pid of inferior - Executing on target: kill -9 11516 (timeout = 300) - builtin_spawn -ignore SIGHUP kill -9 11516^M - continue^M - Continuing.^M - Unable to fetch general registers: No such process.^M - (gdb) [Thread 0xfffff7d511e0 (LWP 11518) exited]^M - ^M - Program terminated with signal SIGKILL, Killed.^M - The program no longer exists.^M - FAIL: gdb.threads/killed-outside.exp: prompt after first continue (timeout) - ... - due to a mismatch between the actual "No such process" line and the expected - one: - ... - set no_such_process_msg "Couldn't get registers: No such process\." - ... - - Fix this by updating the regexp. - - Tested on aarch64-linux, and x86_64-linux. - -2022-07-29 Tsukasa OI - - RISC-V: Add `OP_V' to .insn named opcodes - This commit adds `OP_V' (OP-V: vector instruction opcode for now - ratified `V' extension) to .insn opcode name list. Although vector - instruction encoding is not implemented in `.insn' directive, it will - help future implementation of custom vector `.insn'. - - gas/ChangeLog: - - * config/tc-riscv.c (opcode_name_list): Add `OP_V'. - * testsuite/gas/riscv/insn.s: Add testcase. - * testsuite/gas/riscv/insn.d: Likewise. - * testsuite/gas/riscv/insn-dwarf.d: Reflect insn.s update. - -2022-07-29 GDB Administrator - - Automatic date update in version.in - -2022-07-28 Tom Tromey - - Remove some unneeded checks in Guile code - The Guile code generally checks to see if an htab is non-null before - destroying it. However, the registry code already ensures this, so we - can change these checks to asserts and simplify the code a little. - - Change registry to use less memory - The registry code creates "registry_data" objects that hold the free - function and the index; then the registry keys refer to this object. - However, only the index is really useful, and now that registries have - a private implementation, just the index can be stored and we can - reduce the memory use of registries a little bit. This also - simplifies the code somewhat. - -2022-07-28 Tom Tromey - - Rewrite registry.h - This rewrites registry.h, removing all the macros and replacing it - with relatively ordinary template classes. The result is less code - than the previous setup. It replaces large macros with a relatively - straightforward C++ class, and now manages its own cleanup. - - The existing type-safe "key" class is replaced with the equivalent - template class. This approach ended up requiring relatively few - changes to the users of the registry code in gdb -- code using the key - system just required a small change to the key's declaration. - - All existing users of the old C-like API are now converted to use the - type-safe API. This mostly involved changing explicit deletion - functions to be an operator() in a deleter class. - - The old "save/free" two-phase process is removed, and replaced with a - single "free" phase. No existing code used both phases. - - The old "free" callbacks took a parameter for the enclosing container - object. However, this wasn't truly needed and is removed here as - well. - -2022-07-28 Tom Tromey - - Remove some unused functions from guile code - The guile code has a couple of unused functions that touch on the - registry API. This patch removes them. - -2022-07-28 Tom Tromey - - Change allocation of type-copying hash table - When an objfile is destroyed, types that are still in use and - allocated on that objfile are copied. A temporary hash map is created - during this process, and it is allocated on the destroyed objfile's - obstack -- which normally is fine, as that is going to be destroyed - shortly anyway. - - However, this approach requires that the objfile be passed to registry - destruction, and this won't be possible in the rewritten registry. - This patch changes the copied type hash table to simply use the heap - instead. It also removes the 'objfile' parameter from - copy_type_recursive, to make this all more clear. - - This patch also fixes an apparent bug in copy_type_recursive. - Previously it was copying the dynamic property list to the dying - objfile's obstack: - - - = copy_dynamic_prop_list (&objfile->objfile_obstack, - - However I think this is incorrect -- that obstack is about to be - destroyed. - -2022-07-28 Tom Tromey - - Change address_space to use new and delete - This changes address_space to use new and delete, and makes some other - small C++-ification changes as well, like changing address_space_num - to be a method. - - This patch was needed for the subsequent patch to rewrite the registry - system. - -2022-07-28 Simon Farre - - gdb/python: Add BreakpointLocation type - PR python/18385 - - v7: - This version addresses the issues pointed out by Tom. - - Added nullchecks for Python object creations. - - Changed from using PyLong_FromLong to the gdb_py-versions. - - Re-factored some code to make it look more cohesive. - - Also added the more safe Python reference count decrement PY_XDECREF, - even though the BreakpointLocation type is never instantiated by the - user (explicitly documented in the docs) decrementing < 0 is made - impossible with the safe call. - - Tom pointed out that using the policy class explicitly to decrement a - reference counted object was not the way to go, so this has instead been - wrapped in a ref_ptr that handles that for us in blocpy_dealloc. - - Moved macro from py-internal to py-breakpoint.c. - - Renamed section at the bottom of commit message "Patch Description". - - v6: - This version addresses the points Pedro gave in review to this patch. - - Added the attributes `function`, `fullname` and `thread_groups` - as per request by Pedro with the argument that it more resembles the - output of the MI-command "-break-list". Added documentation for these attributes. - - Cleaned up left overs from copy+paste in test suite, removed hard coding - of line numbers where possible. - - Refactored some code to use more c++-y style range for loops - wrt to breakpoint locations. - - Changed terminology, naming was very inconsistent. Used a variety of "parent", - "owner". Now "owner" is the only term used, and the field in the - gdb_breakpoint_location_object now also called "owner". - - v5: - - Changes in response to review by Tom Tromey: - - Replaced manual INCREF/DECREF calls with - gdbpy_ref ptrs in places where possible. - - Fixed non-gdb style conforming formatting - - Get parent of bploc increases ref count of parent. - - moved bploc Python definition to py-breakpoint.c - - The INCREF of self in bppy_get_locations is due - to the individual locations holding a reference to - it's owner. This is decremented at de-alloc time. - - The reason why this needs to be here is, if the user writes - for instance; - - py loc = gdb.breakpoints()[X].locations[Y] - - The breakpoint owner object is immediately going - out of scope (GC'd/dealloced), and the location - object requires it to be alive for as long as it is alive. - - Thanks for your review, Tom! - - v4: - Fixed remaining doc issues as per request - by Eli. - - v3: - Rewritten commit message, shortened + reworded, - added tests. - - Patch Description - - Currently, the Python API lacks the ability to - query breakpoints for their installed locations, - and subsequently, can't query any information about them, or - enable/disable individual locations. - - This patch solves this by adding Python type gdb.BreakpointLocation. - The type is never instantiated by the user of the Python API directly, - but is produced by the gdb.Breakpoint.locations attribute returning - a list of gdb.BreakpointLocation. - - gdb.Breakpoint.locations: - The attribute for retrieving the currently installed breakpoint - locations for gdb.Breakpoint. Matches behavior of - the "info breakpoints" command in that it only - returns the last known or currently inserted breakpoint locations. - - BreakpointLocation contains 7 attributes - - 6 read-only attributes: - owner: location owner's Python companion object - source: file path and line number tuple: (string, long) / None - address: installed address of the location - function: function name where location was set - fullname: fullname where location was set - thread_groups: thread groups (inferiors) where location was set. - - 1 writeable attribute: - enabled: get/set enable/disable this location (bool) - - Access/calls to these, can all throw Python exceptions (documented in - the online documentation), and that's due to the nature - of how breakpoint locations can be invalidated - "behind the scenes", either by them being removed - from the original breakpoint or changed, - like for instance when a new symbol file is loaded, at - which point all breakpoint locations are re-created by GDB. - Therefore this patch has chosen to be non-intrusive: - it's up to the Python user to re-request the locations if - they become invalid. - - Also there's event handlers that handle new object files etc, if a Python - user is storing breakpoint locations in some larger state they've - built up, refreshing the locations is easy and it only comes - with runtime overhead when the Python user wants to use them. - - gdb.BreakpointLocation Python type - struct "gdbpy_breakpoint_location_object" is found in python-internal.h - - Its definition, layout, methods and functions - are found in the same file as gdb.Breakpoint (py-breakpoint.c) - - 1 change was also made to breakpoint.h/c to make it possible - to enable and disable a bp_location* specifically, - without having its LOC_NUM, as this number - also can change arbitrarily behind the scenes. - - Updated docs & news file as per request. - - Testsuite: tests the .source attribute and the disabling of - individual locations. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=18385 - - - Change-Id: I302c1c50a557ad59d5d18c88ca19014731d736b0 - -2022-07-28 yaowenbin - - gdb/gdb_mbuild.sh: use return instead of continue to avoid shellcheck error - Fix: - - In gdb_mbuild.sh line 174: - continue - ^------^ SC2104 (error): In functions, use return instead of continue. - - Change-Id: I5ce95b01359c5cfbb1612f2f48b80bfeea66c96c - -2022-07-28 GDB Administrator - - Automatic date update in version.in - -2022-07-27 GDB Administrator - - Automatic date update in version.in - -2022-07-27 Vladimir Mezentsev - - gprofng: check for the makeinfo version - gprofng/ChangeLog - 2022-07-25 Vladimir Mezentsev - - PR gprofng/29368 - * configure.ac: Check for the makeinfo version. - * configure: Rebuild. - -2022-07-26 Keith Seitz - - gdb/linux_nat: Write memory using ptrace if /proc/pid/mem is not writable - Commit 05c06f318fd9a112529dfc313e6512b399a645e4 enabled GDB to access - memory while threads are running. It did this by accessing - /proc/PID/task/LWP/mem. - - Unfortunately, this interface is not implemented for writing in older - kernels (such as RHEL6). This means that GDB is unable to insert - breakpoints on these hosts: - - $ ./gdb -q gdb -ex start - Reading symbols from gdb... - Temporary breakpoint 1 at 0x40fdd5: file ../../src/gdb/gdb.c, line 28. - Starting program: /home/rhel6/fsf/linux/gdb/gdb - Warning: - Cannot insert breakpoint 1. - Cannot access memory at address 0x40fdd5 - - (gdb) - - Before this patch, linux_proc_xfer_memory_partial (previously called - linux_proc_xfer_partial) would return TARGET_XFER_EOF if the write to - /proc/PID/mem failed. [More specifically, linux_proc_xfer_partial - would not "bother for one word," but the effect is the essentially - same.] - - This status was checked by linux_nat_target::xfer_partial, which would - then fallback to using ptrace to perform the operation. - - This is the specific hunk that removed the fallback: - - - xfer = linux_proc_xfer_partial (object, annex, readbuf, writebuf, - - offset, len, xfered_len); - - if (xfer != TARGET_XFER_EOF) - - return xfer; - + return linux_proc_xfer_memory_partial (readbuf, writebuf, - + offset, len, xfered_len); - + } - - return inf_ptrace_target::xfer_partial (object, annex, readbuf, writebuf, - offset, len, xfered_len); - - This patch makes linux_nat_target::xfer_partial go straight to writing - memory via ptrace if writing via /proc/pid/mem is not possible in the - running kernel, enabling GDB to insert breakpoints on these older - kernels. Note that a recent patch changed the return status from - TARGET_XFER_EOF to TARGET_XFER_E_IO. - - Tested on {unix,native-gdbserver,native-extended-gdbserver}/-m{32,64} - on x86_64, s390x, aarch64, and ppc64le. - - Change-Id: If1d884278e8c4ea71d8836bedd56e6a6c242a415 - -2022-07-26 Pedro Alves - - gdb/linux-nat: Check whether /proc/pid/mem is writable - Probe whether /proc/pid/mem is writable, by using it to write to a GDB - variable. This will be used in the following patch to avoid falling - back to writing to inferior memory with ptrace if /proc/pid/mem _is_ - writable. - - Change-Id: If87eff0b46cbe5e32a583e2977a9e17d29d0ed3e - -2022-07-26 Tiezhu Yang - - gdb: LoongArch: Handle the function return value - According to LoongArch ELF ABI specification [1], handle the function - return value of various types. - - [1] https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html#_return_values - -2022-07-26 Tiezhu Yang - - gdb: LoongArch: Fix code style issues - Fix some code style issues suggested by Tom Tromey and Andrew Burgess, - thank you. - - (1) Put an introductory comment to explain the purpose for some functions. - - (2) Modify the the attribute code to make it portable. - - (3) Remove globals and pass pointers to locals. - - (4) Remove "*" in the subsequent comment lines. - - (5) Put two spaces before "{" and "}". - -2022-07-26 Nick Clifton - - Stop the linker from complaining about RWX segments in sparc-solaris targets. - PR 29411 - * configure.tgt (ac_default_ld_warn_rwx_segments): Disable for - sparc-solaris configurations. - -2022-07-26 Tom de Vries - - [gdb/testsuite] Fix gdb.opt/inline-small-func.exp with clang - When running test-case gdb.opt/inline-small-func.exp with clang 12.0.1, I run - into: - ... - gdb compile failed, /usr/bin/ld: inline-small-func0.o: in function `main': - inline-small-func.c:21: undefined reference to `callee' - clang-12.0: error: linker command failed with exit code 1 \ - (use -v to see invocation) - UNTESTED: gdb.opt/inline-small-func.exp: failed to prepare - ... - - Fix this by using __attribute__((always_inline)). - - Tested on x86_64-linux. - -2022-07-26 Alan Modra - - PowerPC32 ld test fails with --enable-targets=all - Three pppc32 ld tests fail when spe support is included in the linker - due to this snippet in ld/emulparams/elf32ppc.sh. - - if grep -q 'ld_elf32_spu_emulation' ldemul-list.h; then - DATA_START_SYMBOLS="${RELOCATING+*crt1.o(.data .data.* .gnu.linkonce.d.*) - PROVIDE (__spe_handle = .); - *(.data.spehandle) - . += 4 * (DEFINED (__spe_handle) || . != 0);}" - fi - - * testsuite/ld-powerpc/tlsexe32.r: Pass with .data section present. - * testsuite/ld-powerpc/tlsexe32no.r: Likewise. - * testsuite/ld-powerpc/tlsso32.r: Likewise. - -2022-07-26 Enze Li - - gdb/hurd: pass memory_tagged as false to find_memory_region_ftype - I tried building GDB on GNU/Hurd, and ran into this error: - - CXX gnu-nat.o - gnu-nat.c: In member function ‘virtual int gnu_nat_target::find_memory_regions(find_memory_region_ftype, void*)’: - gnu-nat.c:2620:21: error: too few arguments to function - 2620 | (*func) (last_region_address, - | ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ - 2621 | last_region_end - last_region_address, - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 2622 | last_protection & VM_PROT_READ, - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 2623 | last_protection & VM_PROT_WRITE, - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 2624 | last_protection & VM_PROT_EXECUTE, - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 2625 | 1, /* MODIFIED is unknown, pass it as true. */ - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 2626 | data); - | ~~~~~ - gnu-nat.c:2635:13: error: too few arguments to function - 2635 | (*func) (last_region_address, last_region_end - last_region_address, - | ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 2636 | last_protection & VM_PROT_READ, - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 2637 | last_protection & VM_PROT_WRITE, - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 2638 | last_protection & VM_PROT_EXECUTE, - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 2639 | 1, /* MODIFIED is unknown, pass it as true. */ - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 2640 | data); - | ~~~~~ - make[2]: *** [Makefile:1926: gnu-nat.o] Error 1 - - This is because in this commit: - - commit 68cffbbd4406b4efe1aa6e18460b1d7ca02549f1 - Date: Thu Mar 31 11:42:35 2022 +0100 - - [AArch64] MTE corefile support - - Added a new argument to find_memory_region_ftype, but did not pass it to - the function in gnu-nat.c. Fix this by passing memory_tagged as false. - - As Luis pointed out, similar bugs may also appear on FreeBSD and NetBSD, - and I have reproduced them on both systems. This patch fixes them - incidentally. - - Tested by rebuilding on GNU/Hurd, FreeBSD/amd64 and NetBSD/amd64. - -2022-07-26 Enze Li - - gdb/netbsd: add missing header file - I ran into this error when building GDB on NetBSD: - - CXX netbsd-nat.o - netbsd-nat.c: In member function 'virtual bool nbsd_nat_target::info_proc(const char*, info_proc_what)': - netbsd-nat.c:314:3: error: 'gdb_argv' was not declared in this scope - gdb_argv built_argv (args); - ^~~~~~~~ - netbsd-nat.c:314:3: note: suggested alternative: 'gdbarch' - gdb_argv built_argv (args); - ^~~~~~~~ - gdbarch - netbsd-nat.c:315:7: error: 'built_argv' was not declared in this scope - if (built_argv.count () == 0) - ^~~~~~~~~~ - netbsd-nat.c:315:7: note: suggested alternative: 'buildargv' - if (built_argv.count () == 0) - ^~~~~~~~~~ - buildargv - gmake[2]: *** [Makefile:1893: netbsd-nat.o] Error 1 - - Fix this by adding the missing header file, as it is obvious. - - Tested by rebuilding on NetBSD/amd64. - -2022-07-26 Nick Clifton - - Updated translations for various sub-directories - -2022-07-26 Andrew Burgess - - gdb: rename gdbarch_tdep struct to fix g++ 4.8 build - After the commit: - - commit 08106042d9f5fdff60c129bf33190639f1a98b2a - Date: Thu May 19 13:20:17 2022 +0100 - - gdb: move the type cast into gdbarch_tdep - - GDB would no longer build using g++ 4.8. The issue appears to be some - confusion caused by GDB having 'struct gdbarch_tdep', but also a - templated function called 'gdbarch_tdep'. Prior to the above commit - the gdbarch_tdep function was not templated, and this compiled just - fine. Note that the above commit compiles just fine with later - versions of g++, so this issue was clearly fixed at some point, though - I've not tried to track down exactly when. - - In this commit I propose to fix the g++ 4.8 build problem by renaming - 'struct gdbarch_tdep' to 'struct gdbarch_tdep_base'. This rename - better represents that the struct is only ever used as a base class, - and removes the overloading of the name, which allows GDB to build - with g++ 4.8. - - I've also updated the comment on 'struct gdbarch_tdep_base' to fix a - typo, and the comment on the 'gdbarch_tdep' function, to mention that - in maintainer mode a run-time type check is performed. - -2022-07-26 Nick Clifton - - Fix indentation in loongarch code, preventing a compile time warning. - -2022-07-26 Lancelot SIX - - gdb/varobj: Fix varobj_invalidate_iter - The varobj_invalidate function is meant to be called when restarting a - process, and check at this point if some of the previously existing - varobj can be recreated in the context of the new process. - - Two kind of varobj are subject to re-creation: global varobj (i.e. - varobj which reference a global variable), and floating varobj (i.e. - varobj which are always re-evaluated in the context of whatever is - the currently selected frame at the time of evaluation). - - However, in the re-creation process, the varobj_invalidate_iter - recreates floating varobj as non-floating, due to an invalid parameter. - This patches fixes this and adds an assertion to check that if a varobj - is indeed recreated, it matches the original varobj "floating" property. - - Another issue is that if at this recreation time the expression watched - by the floating varobj is not in scope, then the varobj is marked as - invalid. If later the user selects a frame where the expression becomes - valid, the varobj remains invalid and this is wrong. This patch also - make sure that floating varobj are not invalidated if they cannot be - evaluated. - - The last important thing to note is that due to the previous patch, when - varobj_invalidate is executed (in the context of a new process), any - global var have already been invalidated (this has been done when the - objfile it referred to got invalidated). As a consequence, - varobj_invalidate tries to recreate vars which are already marked as - invalid. This does not entirely feels right, but I keep this behavior - for backward compatibility. - - Tested on x86_64-linux - -2022-07-26 Lancelot SIX - - gdb/varobj: Fix use after free in varobj - Varobj object contains references to types, variables (i.e. struct - variable) and expression. All of those can reference data on an - objfile's obstack. It is possible for this objfile to be deleted (and - the obstack to be feed), while the varobj remains valid. Later, if the - user uses the varobj, this will result in a use-after-free error. With - address sanitizer build, this leads to a plain error. For non address - sanitizer build we might see undefined behaviour, which manifest - themself as assertion failures when accessing data backed by feed - memory. - - This can be observed if we create a varobj that refers to ta symbol in a - shared library, after either the objfile gets reloaded (using the `file` - command) or after the shared library is unloaded (with a call to dlclose - for example). - - This patch fixes those issues by: - - - Adding cleanup procedure to the free_objfile observable. When - activated this observer clears expressions referencing the objfile - being freed, and removes references to blocks belonging to this - objfile. - - Adding varobj support in the `preserve_values` (gdb.value.c). This - ensures that before the objfile is unloaded, any type owned by the - objfile referenced by the varobj is replaced by an equivalent type - not owned by the objfile. This process is done here instead of in the - free_objfile observer in order to reuse the type hash table already - used for similar purpose when replacing types of values kept in the - value history. - - This patch also makes sure to keep a reference to the expression's - gdbarch and language_defn members when the varobj->root->exp is - initialized. Those structures outlive the objfile, so this is safe. - This is done because those references might be used initialize a python - context even after exp is invalidated. Another approach could have been - to initialize the python context with default gdbarch and language_defn - (i.e. nullptr) if expr is NULL, but since we might still try to display - the value which was obtained by evaluating exp when it was still valid, - keeping track of the context which was used at this time seems - reasonable. - - Tested on x86_64-Linux. - - Co-Authored-By: Pedro Alves - -2022-07-26 Pedro Alves - - MI: mi_runto -pending - With the CLI testsuite's runto proc, we can pass "allow-pending" as an - option, like: - - runto func allow-pending - - That is currently not possible with MI's mi_runto, however. This - patch makes it possible, by adding a new "-pending" option to - mi_runto. - - A pending breakpoint shows different MI attributes compared to a - breakpoint with a location, so the regexp returned by - mi_make_breakpoint isn't suitable. Thus, add a new - mi_make_breakpoint_pending proc for pending breakpoints. - - Tweak mi_runto to let it take and pass down arguments. - - Change-Id: I185fef00ab545a1df2ce12b4dbc3da908783a37c - -2022-07-26 GDB Administrator - - Automatic date update in version.in - -2022-07-25 Ruud van der Pas - - gprofng: fix bug 29356 - Execution fails if gprofng is not included in PATH - gprofng/Changelog: - 2022-07-22 Ruud van der Pas - - PR gprofng/29356 - * gp-display-html/gp-display-html.in: fixed a problem to execute - gp-display-text in case gprofng is not included in the search - path. - -2022-07-25 Ruud van der Pas - - gprofng: fix bug 29392 - Unexpected line format in summary file - gprofng/Changelog: - 2022-07-22 Ruud van der Pas - - PR gprofng/29392 - * gp-display-html/gp-display-html.in: modified a regex, plus the - code to handle the results; renamed a variable to improve the - consistency in naming. - -2022-07-25 Ruud van der Pas - - gprofng: fix bug 29353 - Fix a lay-out issue in the html disassembly files - gprofng/Changelog: - 2022-07-22 Ruud van der Pas - - PR gprofng/29353 - * gp-display-html/gp-display-html.in: fixed a problem in the - generation of html for the disassembly where instructions - without arguments were not handled correctly. - -2022-07-25 Ruud van der Pas - - gprofng: fix bug 29352 - Fix the message Hexadecimal number > 0xffffffff non-portable - gprofng/Changelog: - 2022-07-22 Ruud van der Pas - - PR gprofng/29352 - * gp-display-html/gp-display-html.in: the hex subroutine from - the bigint module is now used. - -2022-07-25 Ruud van der Pas - - gprofng: fix bug 29351 - Move dynamic loading of modules to a later stage - gprofng/Changelog: - 2022-07-22 Ruud van der Pas - - PR gprofng/29351 - * gp-display-html/gp-display-html.in: the dynamic loading of - modules occurred too early, resulting in the generation of the - man page to fail in case a module is missing; the loading part is - now done somewhat later in the execution to avoid this problem. - -2022-07-25 Kevin Buettner - - set/show python dont-write-bytecode fixes - GDB uses the environment variable PYTHONDONTWRITEBYTECODE to - determine whether or not to write the result of byte-compiling - python modules when the "python dont-write-bytecode" setting - is "auto". Simon noticed that GDB's implementation doesn't - follow the Python documentation. - - At present, GDB only checks for the existence of this environment - variable. That is not sufficient though. Regarding - PYTHONDONTWRITEBYTECODE, this document... - - https://docs.python.org/3/using/cmdline.html - - ...says: - - If this is set to a non-empty string, Python won't try to write - .pyc files on the import of source modules. - - This commit fixes GDB's handling of PYTHONDONTWRITEBYTECODE by adding - an empty string check. - - This commit also corrects the set/show command documentation for - "python dont-write-bytecode". The current doc was just a copy - of that for set/show python ignore-environment. - - During his review of an earlier version of this patch, Eli Zaretskii - asked that the help text that I proposed for "set/show python - dont-write-bytecode" be expanded. I've done that in addition to - clarifying the documentation of this option in the GDB manual. - -2022-07-25 Andrew Burgess - - gdb/python: fix invalid use disassemble_info::stream - After this commit: - - commit 81384924cdcc9eb2676dd9084b76845d7d0e0759 - Date: Tue Apr 5 11:06:16 2022 +0100 - - gdb: have gdb_disassemble_info carry 'this' in its stream pointer - - The disassemble_info::stream field will no longer be a ui_file*. That - commit failed to update one location in py-disasm.c though. - - While running some tests using the Python disassembler API, I - triggered a call to gdbpy_disassembler::print_address_func, and, as I - had compiled GDB with the undefined behaviour sanitizer, GDB crashed - as the code currently (incorrectly) casts the stream field to be a - ui_file*. - - In this commit I fix this error. - - In order to test this case I had to tweak the existing test case a - little. I also spotted some debug printf statements in py-disasm.py, - which I have removed. - -2022-07-25 Andrew Burgess - - gdb: fix use of uninitialised gdb_printing_disassembler::m_in_comment - Simon pointed out that gdb_printing_disassembler::m_in_comment can be - used uninitialised by the Python disassembler API code. This issue - was spotted when GDB was built with the undefined behaviour sanitizer, - and causes the gdb.python/py-disasm.exp test to fail like this: - - (gdb) PASS: gdb.python/py-disasm.exp: global_disassembler=GlobalPreInfoDisassembler: python add_global_disassembler(GlobalPreInfoDisassembler) - disassemble main - Dump of assembler code for function main: - 0x0000555555555119 <+0>: push %rbp - 0x000055555555511a <+1>: mov %rsp,%rbp - 0x000055555555511d <+4>: nop - /home/user/src/binutils-gdb/gdb/disasm.h:144:12: runtime error: load of value 118, which is not a valid value for type 'bool' - - The problem is that in disasmpy_builtin_disassemble we create a new - instance of gdbpy_disassembler, which is a sub-class of - gdb_printing_disassembler, however, the m_in_comment field is never - initialised. - - This commit fixes the issue by providing a default initialisation - value for m_in_comment in disasm.h. As we only ever disassemble a - single instruction in disasmpy_builtin_disassemble then we don't need - to worry about reseting m_in_comment back to false after the single - instruction has been disassembled. - - With this commit the above issue is resolved and - gdb.python/py-disasm.exp now passes. - -2022-07-25 H.J. Lu - - ld: Compile 2 CTF tests with -O2 - When GCC 12 is used to build binutils with -O0, the following 2 tests - failed: - - FAIL: Conflicted data syms, partially indexed, stripped, with variables - FAIL: Conflicted data syms, partially indexed, stripped - - Compile 2 tests with -O2 to avoid test failures. - - PR ld/29378 - * testsuite/ld-ctf/data-func-conflicted-vars.d: Compile with -O2. - * testsuite/ld-ctf/data-func-conflicted.d: Likewise. - -2022-07-25 Pedro Alves - - struct packed: Add fallback byte array implementation - Attribute gcc_struct is not implemented in Clang targeting Windows, so - add a fallback standard-conforming implementation based on arrays. - - I ran the testsuite on x86_64 GNU/Linux with this implementation - forced, and saw no regressions. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29373 - - Change-Id: I023315ee03622c59c397bf4affc0b68179c32374 - -2022-07-25 Pedro Alves - - struct packed: Unit tests and more operators - For PR gdb/29373, I wrote an alternative implementation of struct - packed that uses a gdb_byte array for internal representation, needed - for mingw+clang. While adding that, I wrote some unit tests to make - sure both implementations behave the same. While at it, I implemented - all relational operators. This commit adds said unit tests and - relational operators. The alternative gdb_byte array implementation - will come next. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29373 - - Change-Id: I023315ee03622c59c397bf4affc0b68179c32374 - -2022-07-25 Pedro Alves - - struct packed: Use gcc_struct on Windows - Building GDB on mingw/gcc hosts is currently broken, due to a static - assertion failure in gdbsupport/packed.h: - - In file included from ../../../../../binutils-gdb/gdb/../gdbsupport/common-defs.h:201, - from ../../../../../binutils-gdb/gdb/defs.h:28, - from ../../../../../binutils-gdb/gdb/dwarf2/read.c:31: - ../../../../../binutils-gdb/gdb/../gdbsupport/packed.h: In instantiation of 'packed::packed(T) [with T = dwarf_unit_type; long long unsigned int Bytes = 1]': - ../../../../../binutils-gdb/gdb/dwarf2/read.h:181:74: required from here - ../../../../../binutils-gdb/gdb/../gdbsupport/packed.h:41:40: error: static assertion failed - 41 | gdb_static_assert (sizeof (packed) == Bytes); - | ~~~~~~~~~~~~~~~~^~~~~~~~ - ../../../../../binutils-gdb/gdb/../gdbsupport/gdb_assert.h:27:48: note: in definition of macro 'gdb_static_assert' - 27 | #define gdb_static_assert(expr) static_assert (expr, "") - | ^~~~ - ../../../../../binutils-gdb/gdb/../gdbsupport/packed.h:41:40: note: the comparison reduces to '(4 == 1)' - 41 | gdb_static_assert (sizeof (packed) == Bytes); - | ~~~~~~~~~~~~~~~~^~~~~~~~ - - - The issue is that mingw gcc defaults to "-mms-bitfields", which - affects how bitfields are laid out. We can however tell GCC that we - want the regular GCC layout instead using attribute gcc_struct. - - Attribute gcc_struct is not implemented in "clang -target - x86_64-pc-windows-gnu", so that will need a different fix. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29373 - - Change-Id: I023315ee03622c59c397bf4affc0b68179c32374 - -2022-07-25 Andrew Burgess - - binutils-gdb/git: highlight whitespace errors in source files - For a long time I've had this in my ~/.gitconfig: - - [core] - whitespace = space-before-tab,indent-with-non-tab,trailing-space - - which causes git to show me if I muck up and use spaces instead of - tabs, or leave in trailing whitespace. I find this really useful. - - I recently proposed adding something like this to the .gitattributes - files for the GDB sub-directories (gdb, gdbsupport, and gdbserver)[1], - however, the question was asked - couldn't this be done at the top - level? - - So, in this commit, I propose to update the top-level .gitattributes - file, after this commit, any git diff on a C, C++, Expect, or TCL - source file, will highlight the following whitespace errors: - - (a) Use a space before a tab at the start of a line, - - (b) Use of spaces where a tab could be used at the start of a line, - and - - (c) Any trailing whitespace. - - Errors are only highlighted in the diff on new or modified lines, so - you don't get spammed for errors on context lines that you haven't - modified. - - The only downside I see to adding this at the top level is if there - are any sub-directories that don't follow the tabs/spaces indentation - rules very well already, in those directories you'll end up hitting - issues any time you edit a line. For GDB we're usually pretty good, - so having this highlighting isn't an issue. - - [1] https://sourceware.org/pipermail/gdb-patches/2022-July/190843.html - -2022-07-25 Yvan Roux - - gdb/arm: Sync sp with other *sp registers - For Arm Cortex-M33 with security extensions, there are 4 different - stack pointers (msp_s, msp_ns, psp_s, psp_ns), without security - extensions and for other Cortex-M targets, there are 2 different - stack pointers (msp and psp). - - With this patch, sp will always be in sync with one of the real stack - pointers on Arm targets that contain more than one stack pointer. - -2022-07-25 Torbjörn SVENSSON - - gdb/arm: Use if-else if instead of switch - As the register numbers for the alternative Arm SP registers are not - constant, it's not possible to use switch statement to define the - rules. In order to not have a mix, replace the few existing - switch statements with regular if-else if statements - -2022-07-25 Tom Tromey - - Remove dead code from windows_nat_target::detach - windows_nat_target::detach has a variable 'detached' that is only set - after a call to 'error'. However, this can't happen because 'error' - throws an exception. - - This patch removes the dead code. - -2022-07-25 Andrew Burgess - - gdb: handle dis_style_sub_mnemonic disassembler style - In commit: - - commit 4f46c0bc36471b725de0253bfec1a42a36e2c5c5 - Date: Mon Jul 4 17:45:25 2022 +0100 - - opcodes: add new sub-mnemonic disassembler style - - I added a new disassembler style dis_style_sub_mnemonic, but forgot to - add GDB support for this style. Fix this oversight in this commit. - -2022-07-25 Andrew Burgess - - libopcodes/ppc: add support for disassembler styling - This commit adds disassembler styling to the libopcodes ppc - disassembler. This conversion was pretty straight forward, I just - converted the fprintf_func calls to fprintf_styled_func calls and - added an appropriate style. - - For testing the new styling I just assembled then disassembled the - source files in gas/testsuite/gas/ppc and manually checked that the - styling looked reasonable. - - I think the only slightly weird case was how things like '4*cr1+eq' - are styled. As best I can tell, this construct, used for example in - this instruction: - - crand 4*cr1+lt,4*cr1+gt,4*cr1+eq - - is used to access a field of a control register. I initially tried - styling this whole construct as a register[1], but during review it - was suggested that instead different parts of the text should have - different styles. In this commit I propose styling '4*cr1+lt' like - this: - - 4 - immediate, - * - text, - cr1 - register - + - text - lt - sub-mnemonic - - If the user does not request styled output from objdump, then there - should be no change in the disassembler output after this commit. - - [1] https://sourceware.org/pipermail/binutils/2022-July/121771.html - -2022-07-25 Andrew Burgess - - opcodes: add new sub-mnemonic disassembler style - When adding libopcodes disassembler styling support for AArch64, it - feels like the results would be improved by having a new sub-mnemonic - style. This will be used in cases like: - - add w16, w7, w1, uxtb #2 - ^^^^----- Here - - And: - - cinc w0, w1, ne - ^^----- Here - - This commit just adds the new style, and prepares objdump to handle - the style. A later commit will add AArch64 styling, and will actually - make use of the style. - - As this style is currently unused, there should be no user visible - changes after this commit. - -2022-07-25 liuzhensong - - LoongArch: Add testcases for new relocate types. - gas/testsuite/gas/all/ - gas.exp - gas/testsuite/gas/loongarch/ - jmp_op.d - jmp_op.s - macro_op.d - macro_op.s - macro_op_32.d - macro_op_32.s - macro_op_large_abs.d - macro_op_large_abs.s - macro_op_large_pc.d - macro_op_large_pc.s - reloc.d - reloc.s - - ld/testsuite/ld-elf/ - pr26936.d - shared.exp - ld/testsuite/ld-loongarch-elf/ - attr-ifunc-4.c - attr-ifunc-4.out - disas-jirl.d - ifunc.exp - jmp_op.d - jmp_op.s - libnopic-global.s - macro_op.d - macro_op.s - macro_op_32.d - macro_op_32.s - nopic-global-so.rd - nopic-global-so.sd - nopic-global.out - nopic-global.s - nopic-global.sd - nopic-global.xd - nopic-local.out - nopic-local.rd - nopic-local.s - nopic-local.sd - nopic-local.xd - nopic-weak-global-so.rd - nopic-weak-global-so.sd - nopic-weak-global.out - nopic-weak-global.s - nopic-weak-global.sd - nopic-weak-global.xd - nopic-weak-local.out - nopic-weak-local.rd - nopic-weak-local.s - nopic-weak-local.sd - nopic-weak-local.xd - pic.exp - pic.ld - -2022-07-25 liuzhensong - - bfd: Delete R_LARCH_NONE from dyn info of LoongArch. - Some R_LARCH_64 in section .eh_frame will to generate - R_LARCH_NONE, we change relocation to R_LARCH_32_PCREL - from R_LARCH_64 in setction .eh_frame and not generate - dynamic relocation for R_LARCH_32_PCREL. - - Add New relocate type R_LARCH_32_PCREL for .eh_frame. - - include/elf/ - loongarch.h - - bfd/ - bfd/bfd-in2.h - libbfd.h - reloc.c - elfxx-loongarch.c - elfnn-loongarch.c - - gas/config/ - tc-loongarch.c - - binutils/ - readelf.c - - ld/testsuite/ld-elf/ - eh5.d - -2022-07-25 liuzhensong - - LoongArch: Move ifunc info to rela.dyn from rela.plt. - Delete R_LARCH_IRELATIVE from dynamic loader (glibc ld.so) when - loading lazy function (rela.plt section). - - In dynamic programes, move ifunc dynamic relocate info to section - srelgot from srelplt. - - bfd/ - elfnn-loongarch.c - -2022-07-25 liuzhensong - - LoongArch: gas: Add new reloc types. - Generate new relocate types while use new macro insns. - - gas/config/ - loongarch-lex.h - loongarch-parse.y - tc-loongarch.c - tc-loongarch.h - -2022-07-25 liuzhensong - - LoongArch:opcodes: Add new reloc types. - opcodes: Replace old insns with news and generate new relocate types - while macro insns expanding. - - opcodes/ - loongarch-opc.c - -2022-07-25 liuzhensong - - bfd: Add supported for LoongArch new relocations. - Define new reloc types according to linker needs. - - include/elf/ - loongarch.h - - bfd/ - bfd-in2.h - libbfd.h - reloc.c - elfnn-loongarch.c - elfxx-loongarch.c - elfxx-loongarch.h - -2022-07-25 Alan Modra - - Re: PowerPC64 .branch_lt address - On seeing PR29369 my suspicion was naturally on a recent powerpc64 - change, commit 0ab80031430e. Without a reproducer, I spent time - wondering what could have gone wrong, and while I doubt this patch - would have fixed the PR, there are some improvements that can be made - to cater for user silliness. - - I also noticed that when -z relro -z now sections are created out of - order, with .got before .plt in the section headers but .got is laid - out at a higher address. That's due to the address expression for - .branch_lt referencing SIZEOF(.got) and so calling init_os (which - creates a bfd section) for .got before the .plt section is created. - Fix that by ignoring SIZEOF in exp_init_os. Unlike ADDR and LOADADDR - which need to reference section vma and lma respectively, SIZEOF can - and does cope with a missing bfd section by returning zero for its - size, which of course is correct. - - PR 29369 - * ldlang.c (exp_init_os): Don't create a bfd section for SIZEOF. - * emulparams/elf64ppc.sh (OTHER_RELRO_SECTIONS_2): Revise - .branch_lt address to take into account possible user sections - with alignment larger than 8 bytes. - -2022-07-25 GDB Administrator - - Automatic date update in version.in - -2022-07-24 Enze Li - - gdb/testsuite: add a clear test to py-breakpoint.exp - This patch adds a test case to try to clear an internal python - breakpoint using the clear command. - - This was suggested by Pedro during a code review of the following - commit. - - commit a5c69b1e49bae4d0dcb20f324cebb310c63495c6 - Date: Sun Apr 17 15:09:46 2022 +0800 - - gdb: fix using clear command to delete non-user breakpoints(PR cli/7161) - - Tested on x86_64 openSUSE Tumbleweed. - -2022-07-24 Enze Li - - gdb/testsuite: rename get_maint_bp_addr and move it to gdb-utils.exp - The get_maint_bp_addr procedure will be shared by other test suite, so - move it to gdb-utils.exp. - - Following Andrew's suggestion, I renamed get_maint_bp_addr to - gdb_get_bp_addr, since it would have handled normal breakpoints in - addition to the internal ones. Note that there is still room for - improvement in this procedure, which I indicated in comments nearby. - -2022-07-24 GDB Administrator - - Automatic date update in version.in - -2022-07-23 GDB Administrator - - Automatic date update in version.in - -2022-07-22 Tom de Vries - - [gdb/symtab] Fix duplicate CUs in all_comp_units - When running test-case gdb.cp/cpexprs-debug-types.exp with target board - cc-with-debug-names on a system with gcc 12.1.1 (defaulting to dwarf 5), I - run into: - ... - (gdb) file cpexprs-debug-types^M - Reading symbols from cpexprs-debug-types...^M - warning: Section .debug_aranges in cpexprs-debug-types has duplicate \ - debug_info_offset 0x0, ignoring .debug_aranges.^M - gdb/dwarf2/read.h:309: internal-error: set_length: \ - Assertion `m_length == length' failed.^M - ... - - The exec contains a .debug_names section, which gdb rejects due to - .debug_names containing a list of TUs, while the exec doesn't contain a - .debug_types section (which is what you'd expect for dwarf 4). - - Gdb then falls back onto the cooked index, which calls create_all_comp_units - to create all_comp_units. However, the failed index reading left some - elements in all_comp_units, so we end up with duplicates in all_comp_units, - which causes the misleading complaint and the assert. - - Fix this by: - - asserting at the start of create_all_comp_units that all_comp_units is empty, - as we do in create_cus_from_index and create_cus_from_debug_names, and - - cleaning up all_comp_units when failing in dwarf2_read_debug_names. - - Add a similar cleanup in dwarf2_read_gdb_index. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29381 - -2022-07-22 Simon Marchi - - gdb/testsuite: give binaries distinct names in Ada tests - Some Ada tests repeat their test sequence with different gnat-encodings, - typically "all" and "minimal". However, they give the same name to both - binaries, meaning the second run overwrites the binary of the first run. - This makes it difficult and confusing when trying to reproduce problems - manually with the test artifacts. Change those tests to use unique - names for each pass. - - Change-Id: Iaa3c9f041241249a7d67392e785c31aa189dcc88 - -2022-07-22 Tom Tromey - - Change target_ops::async to accept bool - This changes the parameter of target_ops::async from int to bool. - Regression tested on x86-64 Fedora 34. - - Fix typo in windows-nat.c - I noticed a typo in a printf in windows-nat.c. This fixes it. - -2022-07-22 Tom de Vries - - [gdb] Add empty range unit test for gdb::parallel_for_each - Add a unit test that verifies that we can call gdb::parallel_for_each with an - empty range. - - Tested on x86_64-linux. - -2022-07-22 Alan Modra - - PR17122, OSX 10.9 build failure - sbrk hasn't been used in binutils/ or ld/ for quite some time (so the - PR was fixed a while ago). Tidy up configury. - - PR 17122 - binutils/ - * configure.ac: Don't check for sbrk. - * sysdep.h (sbrk): Don't supply fallback declaration. - * config.in: Regenerate. - * configure: Regenerate. - ld/ - * configure.ac: Don't check for sbrk. - * config.in: Regenerate. - * configure: Regenerate. - -2022-07-22 Jiangshuai Li - - gdb/csky modify registers list for general_reggroup - There are two modification points here: - 1. For the debugging of csky architecture, after executing "info register", - we hope to print out GPRs, PC and the registers related to exceptions. - 2. With tdesc-xml, users can view the register groups described in XML. - -2022-07-22 Alan Modra - - PR15951, binutils testsuite builds status wrapper unconditionally - PR 15951 - * testsuite/binutils-all/objcopy.exp: Build testglue.o when - needs_status_wrapper. - -2022-07-22 GDB Administrator - - Automatic date update in version.in - -2022-07-21 Peter Bergner - - Add ChangeLog entry from previous commit - -2022-07-21 Peter Bergner - - PowerPC: Create new MMA instruction masks and use them - The MMA instructions use XX3_MASK|3<<21 as an instruction mask, but that - misses the RC bit/bit 31, so if we disassemble a .long that represents an - MMA instruction except that it also has bit 31 set, we will erroneously - disassemble it to that MMA instruction. We create new masks defines that - contain bit 31 so that doesn't happen anymore. - - opcodes/ - * ppc-opc.c (XACC_MASK, XX3ACC_MASK): New defines. - (P_GER_MASK, xxmfacc, xxmtacc, xxsetaccz, xvi8ger4pp, xvi8ger4, - xvf16ger2pp, xvf16ger2, xvf32gerpp, xvf32ger, xvi4ger8pp, xvi4ger8, - xvi16ger2spp, xvi16ger2s, xvbf16ger2pp, xvbf16ger2, xvf64gerpp, - xvf64ger, xvi16ger2, xvf16ger2np, xvf32gernp, xvi8ger4spp, xvi16ger2pp, - xvbf16ger2np, xvf64gernp, xvf16ger2pn, xvf32gerpn, xvbf16ger2pn, - xvf64gerpn, xvf16ger2nn, xvf32gernn, xvbf16ger2nn, xvf64gernn: Use them. - -2022-07-21 H.J. Lu - - i386: Don't allow GOTOFF relocation against IFUNC symbol for PIC - We can't use the PLT entry as the function address for PIC since the PIC - register may not be set up properly for indirect call. - - bfd/ - - PR ld/27998 - * elf32-i386.c (elf_i386_relocate_section): Don't allow GOTOFF - relocation against IFUNC symbol for PIC. - - ld/ - - PR ld/27998 - * testsuite/ld-i386/pr27998a.d: Replace -shared with -e bar. - * testsuite/ld-i386/pr27998b.d: Expect a linker error. - * testsuite/ld-ifunc/ifunc-2-i386-now.d: Updated. - * testsuite/ld-ifunc/ifunc-2-local-i386-now.d: Likewise. - * testsuite/ld-ifunc/ifunc-2-i386.s: Replace @GOTOFF with @GOT. - * testsuite/ld-ifunc/ifunc-2-local-i386.s: Likewise. - -2022-07-21 Andrew Burgess - - gdb: ensure the cast in gdbarch_tdep is valid - This commit makes use of gdb::checked_static_cast when casting the - generic gdbarch_tdep pointer to a specific sub-class type. This means - that, when compiled in developer mode, GDB will validate that the cast - is correct. - - In order to use gdb::checked_static_cast the types involved must have - RTTI, which is why the gdbarch_tdep base class now has a virtual - destructor. - - Assuming there are no bugs in GDB where we cast a gdbarch_tdep pointer - to the wrong type, then there should be no changes after this commit. - - If any bugs do exist, then GDB will now assert (in a developer build). - -2022-07-21 Andrew Burgess - - gdbsupport: add checked_static_cast - This commit was inspired by these mailing list posts: - - https://sourceware.org/pipermail/gdb-patches/2022-June/190323.html - https://sourceware.org/pipermail/gdb-patches/2022-April/188098.html - - The idea is to add a new function gdb::checked_static_cast, which can, - in some cases, be used as a drop-in replacement for static_cast. And - so, if I previously wrote this: - - BaseClass *base = get_base_class_pointer (); - DerivedClass *derived = static_cast (base); - - I can now write: - - BaseClass *base = get_base_class_pointer (); - DerivedClass *derived = gdb::checked_static_cast (base); - - The requirement is that BaseClass and DerivedClass must be - polymorphic. - - The benefit of making this change is that, when GDB is built in - developer mode, a run-time check will be made to ensure that `base` - really is of type DerivedClass before the cast is performed. If - `base` is not of type DerivedClass then GDB will assert. - - In a non-developer build gdb::checked_static_cast is equivalent to a - static_cast, and there should be no performance difference. - - This commit adds the support function, but does not make use of this - function, a use will be added in the next commit. - - Co-Authored-By: Pedro Alves - Co-Authored-By: Tom Tromey - -2022-07-21 Andrew Burgess - - gdb: move the type cast into gdbarch_tdep - I built GDB for all targets on a x86-64/GNU-Linux system, and - then (accidentally) passed GDB a RISC-V binary, and asked GDB to "run" - the binary on the native target. I got this error: - - (gdb) show architecture - The target architecture is set to "auto" (currently "i386"). - (gdb) file /tmp/hello.rv32.exe - Reading symbols from /tmp/hello.rv32.exe... - (gdb) show architecture - The target architecture is set to "auto" (currently "riscv:rv32"). - (gdb) run - Starting program: /tmp/hello.rv32.exe - ../../src/gdb/i387-tdep.c:596: internal-error: i387_supply_fxsave: Assertion `tdep->st0_regnum >= I386_ST0_REGNUM' failed. - - What's going on here is this; initially the architecture is i386, this - is based on the default architecture, which is set based on the native - target. After loading the RISC-V executable the architecture of the - current inferior is updated based on the architecture of the - executable. - - When we "run", GDB does a fork & exec, with the inferior being - controlled through ptrace. GDB sees an initial stop from the inferior - as soon as the inferior comes to life. In response to this stop GDB - ends up calling save_stop_reason (linux-nat.c), which ends up trying - to read register from the inferior, to do this we end up calling - target_ops::fetch_registers, which, for the x86-64 native target, - calls amd64_linux_nat_target::fetch_registers. - - After this I eventually end up in i387_supply_fxsave, different x86 - based targets will end in different functions to fetch registers, but - it doesn't really matter which function we end up in, the problem is - this line, which is repeated in many places: - - i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (arch); - - The problem here is that the ARCH in this line comes from the current - inferior, which, as we discussed above, will be a RISC-V gdbarch, the - tdep field will actually be of type riscv_gdbarch_tdep, not - i386_gdbarch_tdep. After this cast we are relying on undefined - behaviour, in my case I happen to trigger an assert, but this might - not always be the case. - - The thing I tried that exposed this problem was of course, trying to - start an executable of the wrong architecture on a native target. I - don't think that the correct solution for this problem is to detect, - at the point of cast, that the gdbarch_tdep object is of the wrong - type, but, I did wonder, is there a way that we could protect - ourselves from incorrectly casting the gdbarch_tdep object? - - I think that there is something we can do here, and this commit is the - first step in that direction, though no actual check is added by this - commit. - - This commit can be split into two parts: - - (1) In gdbarch.h and arch-utils.c. In these files I have modified - gdbarch_tdep (the function) so that it now takes a template argument, - like this: - - template - static inline TDepType * - gdbarch_tdep (struct gdbarch *gdbarch) - { - struct gdbarch_tdep *tdep = gdbarch_tdep_1 (gdbarch); - return static_cast (tdep); - } - - After this change we are no better protected, but the cast is now - done within the gdbarch_tdep function rather than at the call sites, - this leads to the second, much larger change in this commit, - - (2) Everywhere gdbarch_tdep is called, we make changes like this: - - - i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (arch); - + i386_gdbarch_tdep *tdep = gdbarch_tdep (arch); - - There should be no functional change after this commit. - - In the next commit I will build on this change to add an assertion in - gdbarch_tdep that checks we are casting to the correct type. - -2022-07-21 Andrew Burgess - - gdb: select suitable thread for gdbarch_adjust_breakpoint_address - The three targets that implement gdbarch_adjust_breakpoint_address are - arm, frv, and mips. In each of these targets the adjust breakpoint - address function does some combination of reading the symbol table, or - reading memory at the location the breakpoint could be placed. - - The problem is that performing these actions requires that the current - inferior and program space be the one in which the breakpoint will be - placed, and this is not currently always the case. - - Consider a GDB session with multiple inferiors. One inferior might be - a native target while another could be a remote target of a completely - different architecture. Alternatively, if we consider ARM and - AArch64, one native inferior might be AArch64, while a second native - inferior could be ARM. - - In these cases it is possible, and valid, for a user to have one - inferior selected, and place a breakpoint in the other inferior by - placing a breakpoint on a particular symbol. - - If this happens, then currently, when - gdbarch_adjust_breakpoint_address is called, the wrong inferior (and - program space) will be selected, and memory reads, and symbol look - ups, will not return the expected results, this could lead to - breakpoints being placed in the wrong location. - - There are currently two places where gdbarch_adjust_breakpoint_address - is called: - - 1. In infrun.c, in the function handle_step_into_function. In this - case, I believe that the correct inferior and program space will - already be selected as this is called as part of the stop event - handling, so I don't think we need to worry about this case, and - - 2. In breakpoint.c, in the function adjust_breakpoint_address, which - is itself called from code_breakpoint::add_location and - watch_command_1. - - The watch_command_1 case I don't think we need to worry about, this - is for when a local watch expression is created, which can only be - in the currently selected inferior, so this case should be fine. - - The code_breakpoint::add_location case is the one that needs fixing, - this is what allows a breakpoint to be created between inferiors. - - To fix the code_breakpoint::add_location case, I propose that we pass - the "correct" program_space (i.e. the program space in which the - breakpoint will be created) to the adjust_breakpoint_address function. - Then in adjust_breakpoint_address we can make use of - switch_to_program_space_and_thread to switch program_space and - inferior before calling gdbarch_adjust_breakpoint_address. - - I discovered this issue while working on a later patch in this - series. This later patch will detect when we cast the result of - gdbarch_tdep to the wrong type. - - With this later patch in place I ran gdb.multi/multi-arch.exp on an - AArch64 target. In this situation, two inferiors are created, an - AArch64 inferior, and an ARM inferior. The test selected the AArch64 - inferior and tries to create a breakpoint in the ARM inferior. - - As a result of this we end up in arm_adjust_breakpoint_address, which - calls arm_pc_is_thumb. Before this commit the AArch64 inferior would - be current. As a result, all of the checks in arm_pc_is_thumb would - fail (they rely on reading symbols from the current program space), - and so, at the end of arm_pc_is_thumb we would call - arm_frame_is_thumb. However, remember, at this point the current - inferior is the AArch64 inferior, so the current frame is an AArch64 - frame. - - In arm_frame_is_thumb we call arm_psr_thumb_bit, which calls - gdbarch_tdep and casts the result to arm_gdbarch_tdep. This is wrong, - the tdep field is of type aarch64_gdbarch_tdep. After this we have - undefined behaviour. - - With this patch in place, we will have switched to a thread in the ARM - program space before calling arm_adjust_breakpoint_address. As a - result, we now succeed in looking up the required symbols in - arm_pc_is_thumb, and so we never call arm_frame_is_thumb. - - However, in the worst case scenario, if we did end up calling - arm_frame_is_thumb, as the current inferior should now be the ARM - inferior, the current frame should be an ARM frame, so we still should - not hit undefined behaviour. - - I have added an assert to arm_frame_is_thumb. - -2022-07-21 Andrew Burgess - - gdb/mips: rewrite show_mask_address - This commit is similar to the previous commit, but in this case GDB is - actually relying on undefined behaviour. - - Consider building GDB for all targets on x86-64/GNU-Linux, then doing - this: - - (gdb) show mips mask-address - Zeroing of upper 32 bits of 64-bit addresses is auto. - The 32 bit address mask is set automatically. Currently disabled - (gdb) - - The 'show mips mask-address' command ends up in show_mask_address in - mips-tdep.c, and this function does this: - - mips_gdbarch_tdep *tdep - = (mips_gdbarch_tdep *) gdbarch_tdep (target_gdbarch ()); - - Later we might pass TDEP to mips_mask_address_p. However, in my - example above, on an x86-64 native target, the current target - architecture will be an x86-64 gdbarch, and the tdep field within the - gdbarch will be of type i386_gdbarch_tdep, not of type - mips_gdbarch_tdep, as a result the cast above was incorrect, and TDEP - is not pointing at what it thinks it is. - - I also think the current output is a little confusing, we appear to - have two lines that show the same information, but using different - words. - - The first line comes from calling deprecated_show_value_hack, while - the second line is printed directly from show_mask_address. However, - both of these lines are printing the same mask_address_var value. I - don't think the two lines actually adds any value here. - - Finally, none of the text in this function is passed through the - internationalisation mechanism. - - It would be nice to remove another use of deprecated_show_value_hack - if possible, so this commit does a complete rewrite of - show_mask_address. - - After this commit the output of the above example command, still on my - x86-64 native target is: - - (gdb) show mips mask-address - Zeroing of upper 32 bits of 64-bit addresses is "auto" (current architecture is not MIPS). - - The 'current architecture is not MIPS' text is only displayed when the - current architecture is not MIPS. If the architecture is mips then we - get the more commonly seen 'currently "on"' or 'currently "off"', like - this: - - (gdb) set architecture mips - The target architecture is set to "mips". - (gdb) show mips mask-address - Zeroing of upper 32 bits of 64-bit addresses is "auto" (currently "off"). - (gdb) - - All the text is passed through the internationalisation mechanism, and - we only call gdbarch_tdep when we know the gdbarch architecture is - bfd_arch_mips. - -2022-07-21 Andrew Burgess - - gdb/arm: move fetch of arm_gdbarch_tdep to a more inner scope - This is a small refactor to resolve an issue before it becomes a - problem in a later commit. - - Move the fetching of an arm_gdbarch_tdep into a more inner scope - within two functions in arm-tdep.c. - - The problem with the current code is that the functions in question - are used as the callbacks for two set/show parameters. These set/show - parameters are available no matter the current architecture, but are - really about controlling an ARM architecture specific setting. And - so, if I build GDB for all targets on an x86-64/GNU-Linux system, I - can still do this: - - (gdb) show arm fpu - (gdb) show arm abi - - After these calls we end up in show_fp_model and arm_show_abi - respectively, where we unconditionally do this: - - arm_gdbarch_tdep *tdep - = (arm_gdbarch_tdep *) gdbarch_tdep (target_gdbarch ()); - - However, the gdbarch_tdep() result will only be a arm_gdbarch_tdep if - the current architecture is ARM, otherwise the result will actually be - of some other type. - - This isn't actually a problem, as in both cases the use of tdep is - guarded by a later check that the gdbarch architecture is - bfd_arch_arm. - - This commit just moves the call to gdbarch_tdep() after the - architecture check. - - In a later commit gdbarch_tdep() will be able to spot when we are - casting the result to the wrong type, and this function will trigger - assertion failures if things are not fixed. - - There should be not user visible changes after this commit. - -2022-07-21 Torbjörn SVENSSON - - [arm] Rename arm_cache_is_sp_register to arm_is_alternative_sp_register - All usages of this helper are really made to check if the register is - one of the alternative SP registers (MSP/MSP_S/MSP_NS/PSP/PSP_S/PSP_NS) - with the ARM_SP_REGNUM case being handled separately. - -2022-07-21 Tom de Vries - - [gdb/python] Fix typo in test_python - Fix typo in ref_output_0 variable in test_python. - - Tested by running the selftest on x86_64-linux with python 3.11. - -2022-07-21 Tom de Vries - - [gdb/python] Fix python selftest with python 3.11 - With python 3.11 I noticed: - ... - $ gdb -q -batch -ex "maint selftest python" - Running selftest python. - Self test failed: self-test failed at gdb/python/python.c:2246 - Ran 1 unit tests, 1 failed - ... - - In more detail: - ... - (gdb) p output - $5 = "Traceback (most recent call last):\n File \"\", line 0, \ - in \nKeyboardInterrupt\n" - (gdb) p ref_output - $6 = "Traceback (most recent call last):\n File \"\", line 1, \ - in \nKeyboardInterrupt\n" - ... - - Fix this by also allowing line number 0. - - Tested on x86_64-linux. - - This should hopefully fix buildbot builder gdb-rawhide-x86_64. - -2022-07-21 Tom de Vries - - [gdbsupport] Fix type of parallel_for_each_debug - When I changed the initialization of parallel_for_each_debug from 0 to false, - I forgot to change the type from int to bool. Fix this. - - Tested by rebuilding on x86_64-linux. - -2022-07-21 Tom de Vries - - [gdb/symtab] Fix bad compile unit index complaint - I noticed this code in dw2_debug_names_iterator::next: - ... - case DW_IDX_compile_unit: - /* Don't crash on bad data. */ - if (ull >= per_bfd->all_comp_units.size ()) - { - complaint (_(".debug_names entry has bad CU index %s" - " [in module %s]"), - pulongest (ull), - objfile_name (objfile)); - continue; - } - per_cu = per_bfd->get_cu (ull); - break; - ... - - This code used to DTRT, before we started keeping both CUs and TUs in - all_comp_units. - - Fix by using "per_bfd->all_comp_units.size () - per_bfd->tu_stats.nr_tus" - instead. - - It's hard to produce a test-case for this, but let's try at least to trigger - the complaint somehow. We start out by creating an exec with .debug_types and - .debug_names: - ... - $ gcc -g ~/hello.c -fdebug-types-section - $ gdb-add-index -dwarf-5 a.out - ... - and verify that we don't see any complaints: - ... - $ gdb -q -batch -iex "set complaints 100" ./a.out - ... - - We look at the CU and TU table using readelf -w and conclude that we have - nr_cus == 6 and nr_tus == 1. - - Now override ull in dw2_debug_names_iterator::next for the DW_IDX_compile_unit - case to 6, and we have: - ... - $ gdb -q -batch -iex "set complaints 100" ./a.out - During symbol reading: .debug_names entry has bad CU index 6 [in module a.out] - ... - - After this, it still crashes because this code in - dw2_debug_names_iterator::next: - ... - /* Skip if already read in. */ - if (m_per_objfile->symtab_set_p (per_cu)) - goto again; - ... - is called with per_cu == nullptr. - - Fix this by skipping the entry if per_cu == nullptr. - - Now revert the fix and observe that the complaint disappears, so we've - confirmed that the fix is required. - - A somewhat similar issue for .gdb_index in dw2_symtab_iter_next has been filed - as PR29367. - - Tested on x86_64-linux, with native and target board cc-with-debug-names. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29336 - -2022-07-21 Jan Beulich - - x86: replace wrong attributes on VCVTDQ2PH{X,Y} - A standalone (without SAE) StaticRounding attribute is meaningless, and - indeed all other similar insns have ATTSyntax there instead. I can only - assume this was some strange copy-and-paste mistake. - - x86/Intel: correct AVX512F scatter insn element sizes - I clearly screwed up in 6ff00b5e12e7 ("x86/Intel: correct permitted - operand sizes for AVX512 scatter/gather") giving all AVX512F scatter - insns Dword element size. Update testcases (also their gather parts), - utilizing that there previously were two identical lines each (for no - apparent reason). - -2022-07-21 Alan Modra - - PR29390, DW_CFA_AARCH64_negate_ra_state vs. DW_CFA_GNU_window_save - PR 29390 - binutils/ - * dwarf.c (is_aarch64, DW_CFA_GNU_window_save_name): New. - (display_debug_frames): Use them. - (init_dwarf_regnames_aarch64): Set is_aarch64. - (init_dwarf_regnames_by_elf_machine_code): Clear is_aarch64. - (init_dwarf_regnames_by_bfd_arch_and_mach): Likewise. - gas/ - * testsuite/gas/aarch64/pac_ab_key.d: Adjust expected output. - * testsuite/gas/aarch64/pac_negate_ra_state.d: Likewise. - -2022-07-21 Alan Modra - - PR29337, readelf CU/TU mixup in .gdb_index - Commit 244e19c79111 changed a number of variables in display_gdb_index - to count entries rather than words. - - PR 29337 - * dwarf.c (display_gdb_index): Correct use of cu_list_elements. - -2022-07-21 Alan Modra - - PR29370, infinite loop in display_debug_abbrev - The PR29370 testcase is a fuzzed object file with multiple - .trace_abbrev sections. Multiple .trace_abbrev or .debug_abbrev - sections are not a violation of the DWARF standard. The DWARF5 - standard even gives an example of multiple .debug_abbrev sections - contained in groups. Caching and lookup of processed abbrevs thus - needs to be done by section and offset rather than base and offset. - (Why base anyway?) Or, since section contents are kept, by a pointer - into the contents. - - PR 29370 - * dwarf.c (struct abbrev_list): Replace abbrev_base and - abbrev_offset with raw field. - (find_abbrev_list_by_abbrev_offset): Delete. - (find_abbrev_list_by_raw_abbrev): New function. - (process_abbrev_set): Set list->raw and list->next. - (find_and_process_abbrev_set): Replace abbrev list lookup with - new function. Don't set list abbrev_base, abbrev_offset or next. - -2022-07-21 Alan Modra - - binutils/dwarf.c: abbrev caching - I'm inclined to think that abbrev caching is counter-productive. The - time taken to search the list of abbrevs converted to internal form is - non-zero, and it's easy to decode the raw abbrevs. It's especially - silly to cache empty lists of decoded abbrevs (happens with zero - padding in .debug_abbrev), or abbrevs as they are displayed when there - is no further use of those abbrevs. This patch stops caching in those - cases. - - * dwarf.c (record_abbrev_list_for_cu): Add free_list param. - Put abbrevs on abbrev_lists here. - (new_abbrev_list): Delete function. - (process_abbrev_set): Return newly allocated list. Move - abbrev base, offset and size checking to.. - (find_and_process_abbrev_set): ..here, new function. Handle - lookup of cached abbrevs here, and calculate start and end - for process_abbrev_set. Return free_list if newly alloc'd. - (process_debug_info): Consolidate cached list lookup, new list - alloc and processing into find_and_process_abbrev_set call. - Free list when not cached. - (display_debug_abbrev): Similarly. - -2022-07-21 Alan Modra - - miscellaneous dwarf.c tidies - * dwarf.c: Leading and trailing whitespace fixes. - (free_abbrev_list): New function. - (free_all_abbrevs): Use the above. Free cu_abbrev_map here too. - (process_abbrev_set): Print actual section name on error. - (get_type_abbrev_from_form): Add overflow check. - (free_debug_memory): Don't free cu_abbrev_map here.. - (process_debug_info): ..or here. Warn on another case of not - finding a neeeded abbrev. - -2022-07-21 Alan Modra - - PowerPC64: fix build error on 32-bit hosts - elf64-ppc.c:11673:33: error: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘bfd_vma’ {aka ‘long long unsigned int’} [-Werror=format=] - 11673 | fprintf (stderr, "offset = %#lx:", stub_entry->stub_offset); - | ~~~^ ~~~~~~~~~~~~~~~~~~~~~~~ - | | | - | | bfd_vma {aka long long unsigned int} - | long unsigned int - | %#llx - - * elf64-ppc.c (dump_stub): Use BFD_VMA_FMT. - -2022-07-21 Kevin Buettner - - Wrap python_write_bytecode with HAVE_PYTHON ifdef - This commit fixes a build error on machines lacking python headers - and/or libraries. - -2022-07-21 GDB Administrator - - Automatic date update in version.in - -2022-07-20 Kevin Buettner - - Handle Python 3.11 deprecation of PySys_SetPath and Py_SetProgramName - Python 3.11 deprecates PySys_SetPath and Py_SetProgramName. The - PyConfig API replaces these and other functions. This commit uses the - PyConfig API to provide equivalent functionality while also preserving - support for older versions of Python, i.e. those before Python 3.8. - - A beta version of Python 3.11 is available in Fedora Rawhide. Both - Fedora 35 and Fedora 36 use Python 3.10, while Fedora 34 still used - Python 3.9. I've tested these changes on Fedora 34, Fedora 36, and - rawhide, though complete testing was not possible on rawhide due to - a kernel bug. That being the case, I decided to enable the newer - PyConfig API by testing PY_VERSION_HEX against 0x030a0000. This - corresponds to Python 3.10. - - We could try to use the PyConfig API for Python versions as early as 3.8, - but I'm reluctant to do this as there may have been PyConfig related - bugs in earlier versions which have since been fixed. Recent linux - distributions should have support for Python 3.10. This should be - more than adequate for testing the new Python initialization code in - GDB. - - Information about the PyConfig API as well as the motivation behind - deprecating the old interface can be found at these links: - - https://github.com/python/cpython/issues/88279 - https://peps.python.org/pep-0587/ - https://docs.python.org/3.11/c-api/init_config.html - - The v2 commit also addresses several problems that Simon found in - the v1 version. - - In v1, I had used Py_DontWriteBytecodeFlag in the new initialization - code, but Simon pointed out that this global configuration variable - will be deprecated in Python 3.12. This version of the patch no longer - uses Py_DontWriteBytecodeFlag in the new initialization code. - Additionally, both Py_DontWriteBytecodeFlag and Py_IgnoreEnvironmentFlag - will no longer be used when building GDB against Python 3.10 or higher. - While it's true that both of these global configuration variables are - deprecated in Python 3.12, it makes sense to disable their use for - gdb builds against 3.10 and higher since those are the versions for - which the PyConfig API is now being used by GDB. (The PyConfig API - includes different mechanisms for making the same settings afforded - by use of the soon-to-be deprecated global configuration variables.) - - Simon also noted that PyConfig_Clear() would not have be called for - one of the failure paths. I've fixed that problem and also made the - rest of the "bail out" code more direct. In particular, - PyConfig_Clear() will always be called, both for success and failure. - - The v3 patch addresses some rebase conflicts related to module - initialization . Commit 3acd9a692dd ("Make 'import gdb.events' work") - uses PyImport_ExtendInittab instead of PyImport_AppendInittab. That - commit also initializes a struct for each module to import. Both the - initialization and the call to were moved ahead of the ifdefs to avoid - having to replicate (at least some of) the code three times in various - portions of the ifdefs. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28668 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29287 - -2022-07-20 Christopher Di Bella - - gdb/value.c: add several headers to the include list - Building GDB currently fails to build with libc++, because libc++ is - stricter about which headers "leak" entities they're not guaranteed - to support. The following headers have been added: - - * ``, to support `std::back_inserter` - * ``, to support `std::move` and `std::swap` - * ``, to support `std::vector` - - Change-Id: Iaeb15057c5fbb43217df77ce34d4e54446dbcf3d - -2022-07-20 Pedro Alves - - Don't stop all threads prematurely after first step of "step N" - In all-stop mode, when the target is itself in non-stop mode (like - GNU/Linux), if you use the "step N" (or "stepi/next/nexti N") to step - a thread a number of times: - - (gdb) help step - step, s - Step program until it reaches a different source line. - Usage: step [N] - Argument N means step N times (or till program stops for another reason). - - ... GDB prematurely stops all threads after the first step, and - doesn't re-resume them for the subsequent N-1 steps. It's as if for - the 2nd and subsequent steps, the command was running with - scheduler-locking enabled. - - This can be observed with the testcase added by this commit, which - looks like this: - - static pthread_barrier_t barrier; - - static void * - thread_func (void *arg) - { - pthread_barrier_wait (&barrier); - return NULL; - } - - int - main () - { - pthread_t thread; - int ret; - - pthread_barrier_init (&barrier, NULL, 2); - - /* We run to this line below, and then issue "next 3". That should - step over the 3 lines below and land on the return statement. If - GDB prematurely stops the thread_func thread after the first of - the 3 nexts (and never resumes it again), then the join won't - ever return. */ - pthread_create (&thread, NULL, thread_func, NULL); /* set break here */ - pthread_barrier_wait (&barrier); - pthread_join (thread, NULL); - - return 0; - } - - The test hangs and times out without the GDB fix: - - (gdb) next 3 - [New Thread 0x7ffff7d89700 (LWP 525772)] - FAIL: gdb.threads/step-N-all-progress.exp: non-stop=off: target-non-stop=on: next 3 (timeout) - - The problem is a core gdb bug. - - When you do "step/stepi/next/nexti N", GDB internally creates a - thread_fsm object and associates it with the stepping thread. For the - stepping commands, the FSM's class is step_command_fsm. That object - is what keeps track of how many steps are left to make. When one step - finishes, handle_inferior_event calls stop_waiting and returns, and - then fetch_inferior_event calls the "should_stop" method of the event - thread's FSM. The implementation of that method decrements the - steps-left counter. If the counter is 0, it returns true and we - proceed to presenting the stop to the user. If it isn't 0 yet, then - the method returns false, indicating to fetch_inferior_event to "keep - going". - - Focusing now on when the first step finishes -- we're in "all-stop" - mode, with the target in non-stop mode. When a step finishes, - handle_inferior_event calls stop_waiting, which itself calls - stop_all_threads to stop everything. I.e., after the first step - completes, all threads are stopped, before handle_inferior_event - returns. And after that, now in fetch_inferior_event, we consult the - thread's thread_fsm::should_stop, which as we've seen, for the first - step returns false -- i.e., we need to keep_going for another step. - However, since the target is in non-stop mode, keep_going resumes - _only_ the current thread. All the other threads remain stopped, - inadvertently. - - If the target is in non-stop mode, we don't actually need to stop all - threads right after each step finishes, and then re-resume them again. - We can instead defer stopping all threads until all the steps are - completed. - - So fix this by delaying the stopping of all threads until after we - called the FSM's "should_stop" method. I.e., move it from - stop_waiting, to handle_inferior_events's callers, - fetch_inferior_event and wait_for_inferior. - - New test included. Tested on x86-64 GNU/Linux native and gdbserver. - - Change-Id: Iaad50dcfea4464c84bdbac853a89df92ade6ae01 - -2022-07-20 Alan Modra - - Re: opcodes/arc: Implement style support in the disassembler - * arc-dis.c (print_insn_arc): Fix thinko. - -2022-07-20 Dmitry Selyutin - - gas/symbols: introduce md_resolve_symbol - Assuming GMSD is a special operand, marked as O_md1, the code: - - .set VREG, GMSD - .set REG, VREG - extsw REG, 2 - - ...fails upon attempts to resolve the value of the symbol. This happens - since machine-dependent values are not handled in the giant op switch. - We introduce a custom md_resolve_symbol macro; the ports can use this - macro to customize the behavior when resolve_symbol_value hits O_md - operand. - -2022-07-20 GDB Administrator - - Automatic date update in version.in - -2022-07-19 H.J. Lu - - x86: Disallow invalid relocations against protected symbols - Since glibc 2.36 will issue warnings for copy relocation against - protected symbols and non-canonical reference to canonical protected - functions, change the linker to always disallow such relocations. - - bfd/ - - * elf32-i386.c (elf_i386_scan_relocs): Remove check for - elf_has_indirect_extern_access. - * elf64-x86-64.c (elf_x86_64_scan_relocs): Likewise. - (elf_x86_64_relocate_section): Remove check for - elf_has_no_copy_on_protected. - * elfxx-x86.c (elf_x86_allocate_dynrelocs): Check for building - executable instead of elf_has_no_copy_on_protected. - (_bfd_x86_elf_adjust_dynamic_symbol): Disallow copy relocation - against non-copyable protected symbol. - * elfxx-x86.h (SYMBOL_NO_COPYRELOC): Remove check for - elf_has_no_copy_on_protected. - - ld/ - - * testsuite/ld-i386/i386.exp: Expect linker error for PR ld/17709 - test. - * testsuite/ld-i386/pr17709.rd: Removed. - * testsuite/ld-i386/pr17709.err: New file. - * testsuite/ld-x86-64/pr17709.rd: Removed. - * testsuite/ld-x86-64/pr17709.err: New file. - * testsuite/ld-x86-64/pr28875-func.err: Updated. - * testsuite/ld-x86-64/x86-64.exp: Expect linker error for PR - ld/17709 test. Add tests for function pointer against protected - function. - -2022-07-19 Fangrui Song - - x86: Make protected symbols local for -shared - Call _bfd_elf_symbol_refs_local_p with local_protected==true. This has - 2 noticeable effects for -shared: - - * GOT-generating relocations referencing a protected data symbol no - longer lead to a GLOB_DAT (similar to a hidden symbol). - * Direct access relocations (e.g. R_X86_64_PC32) no longer has the - confusing diagnostic below. - - __attribute__((visibility("protected"))) void *foo() { - return (void *)foo; - } - - // gcc -fpic -shared -fuse-ld=bfd - relocation R_X86_64_PC32 against protected symbol `foo' can not be used when making a shared object - - The new behavior matches arm, aarch64 (commit - 83c325007c5599fa9b60b8d5f7b84842160e1d1b), and powerpc ports, and other - linkers: gold and ld.lld. - - Note: if some code tries to use direct access relocations to take the - address of foo, the pointer equality will break, but the error should be - reported on the executable link, not on the innocent shared object link. - glibc 2.36 will give a warning at relocation resolving time. - - With this change, `#define elf_backend_extern_protected_data 1` is no - longer effective. Just remove it. - - Remove the test "Run protected-func-1 without PIE" since -fno-pic - address taken operation in the executable doesn't work with protected - symbol in a shared object by default. Similarly, remove - protected-data-1a and protected-data-1b. protected-data-1b can be made - working by removing HAVE_LD_PIE_COPYRELOC from GCC - (https://sourceware.org/pipermail/gcc-patches/2022-June/596678.html). - -2022-07-19 Luis Machado - - Reformat gdbarch-components.py to fix deviations - Reformat to make sure we have a clean file with no deviations - from the expected python code format. - -2022-07-19 Luis Machado - - [AArch64] MTE corefile support - Teach GDB how to dump memory tags for AArch64 when using the gcore command - and how to read memory tag data back from a core file generated by GDB - (via gcore) or by the Linux kernel. - - The format is documented in the Linux Kernel documentation [1]. - - Each tagged memory range (listed in /proc//smaps) gets dumped to its - own PT_AARCH64_MEMTAG_MTE segment. A section named ".memtag" is created for each - of those segments when reading the core file back. - - To save a little bit of space, given MTE tags only take 4 bits, the memory tags - are stored packed as 2 tags per byte. - - When reading the data back, the tags are unpacked. - - I've added a new testcase to exercise the feature. - - Build-tested with --enable-targets=all and regression tested on aarch64-linux - Ubuntu 20.04. - - [1] Documentation/arm64/memory-tagging-extension.rst (Core Dump Support) - -2022-07-19 Luis Machado - - [AArch64] Support AArch64 MTE memory tag dumps in core files - The Linux kernel can dump memory tag segments to a core file, one segment - per mapped range. The format and documentation can be found in the Linux - kernel tree [1]. - - The following patch adjusts bfd and binutils so they can handle this new - segment type and display it accordingly. It also adds code required so GDB - can properly read/dump core file data containing memory tags. - - Upon reading, each segment that contains memory tags gets mapped to a - section named "memtag". These sections will be used by GDB to lookup the tag - data. There can be multiple such sections with the same name, and they are not - numbered to simplify GDB's handling and lookup. - - There is another patch for GDB that enables both reading - and dumping of memory tag segments. - - Tested on aarch64-linux Ubuntu 20.04. - - [1] Documentation/arm64/memory-tagging-extension.rst (Core Dump Support) - -2022-07-19 Luis Machado - - [AArch64] Fix testcase compilation failure - Newer distros carry newer headers that contains MTE definitions. Account - for that fact in the MTE testcases (gdb.arch/aarch64-mte.exp) and define - constants conditionally to prevent compilation failures. - -2022-07-19 H.J. Lu - - ld: Pass -nostdlib to compiler with -r - Pass -nostdlib to compiler with -r to avoid unnecessary .o file and - libraries. - - PR ld/29377 - * testsuite/ld-elf/linux-x86.exp: Pass -nostdlib with -r. - -2022-07-19 H.J. Lu - - x86: Properly check invalid relocation against protected symbol - Only check invalid relocation against protected symbol defined in shared - object. - - bfd/ - - PR ld/29377 - * elf32-i386.c (elf_i386_scan_relocs): Only check invalid - relocation against protected symbol defined in shared object. - * elf64-x86-64.c (elf_x86_64_scan_relocs): Likewise. - - ld/ - - PR ld/29377 - * testsuite/ld-elf/linux-x86.exp: Run PR ld/29377 tests. - * testsuite/ld-elf/pr29377a.c: New file. - * testsuite/ld-elf/pr29377b.c: Likewise. - -2022-07-19 GDB Administrator - - Automatic date update in version.in - -2022-07-18 Vladimir Mezentsev - - gprofng: link libgprofng.so against -lpthread - gprofng/ChangeLog - 2022-07-15 Vladimir Mezentsev - - PR gprofng/29364 - * src/Makefile.am (libgprofng_la_LIBADD): Add -lpthread. - * src/Makefile.in: Rebuild. - -2022-07-18 Vladimir Mezentsev - - gprofng: fix regression in build and a race condition in autoreconf - gprofng/ChangeLog - 2022-07-14 Vladimir Mezentsev - - PR gprofng/29338 - * libcollector/configure.ac (AC_CONFIG_HEADERS): Fix a race condition. - * libcollector/configure: Rebuild. - * libcollector/Makefile.in: Rebuild. - * common/config.h.in: Rebuild. - * common/lib-config.h.in: Created by autoreconf. - -2022-07-18 Tom Tromey - - Add gdb.free_objfile event registry - Currently, Python code can use event registries to detect when gdb - loads a new objfile, and when gdb clears the objfile list. However, - there's no way to detect the removal of an objfile, say when the - inferior calls dlclose. - - This patch adds a gdb.free_objfile event registry and arranges for an - event to be emitted in this case. - -2022-07-18 Pedro Alves - - Put gdb.base/bt-on-fatal-signal.exp GDB cores in output dir - I noticed that gdb.base/bt-on-fatal-signal.exp was contributing four - core files to the count of unexpected core files: - - $ make check TESTS="gdb.base/bt-on-fatal-signal.exp" - - === gdb Summary === - - # of unexpected core files 4 - # of expected passes 21 - - These are GDB core dumps. They are expected, however, because the - whole point of the testcase is to crash GDB with a signal. - - Make GDB change its current directory to the output dir just before - crashing, so that the core files end up there. The result is now: - - === gdb Summary === - - # of expected passes 25 - - and: - - $ find . -name "core.*" - ./testsuite/outputs/gdb.base/bt-on-fatal-signal/core.gdb.1676506.nelson.1657727692 - ./testsuite/outputs/gdb.base/bt-on-fatal-signal/core.gdb.1672585.nelson.1657727671 - ./testsuite/outputs/gdb.base/bt-on-fatal-signal/core.gdb.1674833.nelson.1657727683 - ./testsuite/outputs/gdb.base/bt-on-fatal-signal/core.gdb.1673709.nelson.1657727676 - - (Note the test is skipped at the top if on a remote host.) - - Change-Id: I79e4fb2e91330279c7a509930b1952194a72e85a - -2022-07-18 Tom Tromey - - Remove array typedef assumption for Ada - Currently the Ada code assumes that it can distinguish between a - multi-dimensional array and an array of arrays by looking for an - intervening typedef -- that is, for an array of arrays, there will be - a typedef wrapping the innermost array type. - - A recent compiler change removes this typedef, which causes a gdb - failure in the internal AdaCore test suite. - - This patch handles this case by checking whether the array type in - question has a name. - -2022-07-18 Tom Tromey - - Remove manual lifetime management from cli_interp - cli_interp manually manages its cli_out object. This patch changes it - to use a unique_ptr, and also changes cli_uiout to be a private - member. - - Remove cli_out_new - cli_out_new is just a small wrapper around 'new'. This patch removes - it, replacing it with uses of 'new' instead. - - Replace input_interactive_p with a method - This replaces the global input_interactive_p function with a new - method ui::input_interactive_p. - - Remove ui_register_input_event_handler - This patch removes ui_register_input_event_handler and - ui_unregister_input_event_handler, replacing them with methods on - 'ui'. It also changes gdb to use these methods everywhere, rather - than sometimes reaching in to the ui to manage the file descriptor - directly. - -2022-07-18 Claudiu Zissulescu - - opcodes/arc: Implement style support in the disassembler - Update the ARC disassembler to supply style information to the - disassembler output. The output formatting remains unchanged. - - opcodes/ChangeLog: - * disassemble.c (disassemble_init_for_target): Set - created_styled_output for ARC based targets. - * arc-dis.c (find_format_from_table): Use fprintf_styled_ftype - instead of fprintf_ftype throughout. - (find_format): Likewise. - (print_flags): Likewise. - (print_insn_arc): Likewise. - -2022-07-18 Claudiu Zissulescu - - arc: Update missing cipher. - The ciphers 5,7, and 9 are missing when parsing an assembly - instruction leading to errors when those ciphers are - used. - - gas/config - * tc-arc.c (md_assembly): Update strspn string with the - missing ciphers. - -2022-07-18 Tom de Vries - - [gdb/testsuite] Remove duplicate of supports_gnuc - In commit 9d9dd861e98 ("[gdb/testsuite] Fix regression in - step-indirect-call-thunk.exp with gcc 7") I accidentally committed a duplicate - of supports_gnuc, which caused: - ... - DUPLICATE: gdb.base/gdb-caching-proc.exp: supports_gnuc: consistency - ... - - Fix this by removing the duplicate. - - Tested on x86_64-linux. - -2022-07-18 Andrew Burgess - - gdb/python: look for python, then python 3 at configure time - It is possible that a system might have a python3 executable, but no - python executable. For example, on my Fedora system the python2 - package provides /usr/bin/python2, the python3 package provides - /usr/bin/python3, and the python-unversioned-command package provides - /usr/bin/python, which picks between python2 and python3. - - It is quite possible to only have python3 available on a system. - - Currently, when GDB configures, it looks for a 'python' executable. - If non is found then GDB will be built without python support. Or the - user needs to configure using --with-python=/usr/bin/python3. - - This commit updates GDB's configure.ac script to first look for - 'python', and then 'python3'. Now, on a system that only has a - python3 executable, GDB will automatically find, and use that in order - to provide python support, no user supplied configure arguments are - needed. - - I've tested this on my local machine by removing the - python-unversioned-command package, confirming that there is no longer - a 'python' executable in my $PATH, and then rebuilding GDB from - scratch. GDB with this patch has python support. - -2022-07-18 Jan Beulich - - x86: correct VMOVSH attributes - Both forms were missing VexW0 (thus allowing Evex.W=1 to be encoded by - suitable means, which would cause #UD). The memory operand form further - was using the wrong Masking value, thus allowing zeroing-masking to be - encoded for the store form (which would again cause #UD). - - x86: re-order insn template fields - This saves quite a number of shift instructions: The "operands" field - can now be retrieved by just masking (no shift), and extracting the - "extension_opcode" field now only requires a (signed) right shift, with - no prereq left one. (Of course there may be architectures where, in a - cross build, there might be no difference at all, e.g. when there are - suitable bitfield extraction insns.) - -2022-07-18 Tom de Vries - - [gdbsupport] Improve thread scheduling in parallel_for_each - When running a task using parallel_for_each, we get the following - distribution: - ... - Parallel for: n_elements: 7271 - Parallel for: minimum elements per thread: 10 - Parallel for: elts_per_thread: 1817 - Parallel for: elements on worker thread 0 : 1817 - Parallel for: elements on worker thread 1 : 1817 - Parallel for: elements on worker thread 2 : 1817 - Parallel for: elements on worker thread 3 : 0 - Parallel for: elements on main thread : 1820 - ... - - Note that there are 4 active threads, and scheduling elts_per_thread on each - of those handles 4 * 1817 == 7268, leaving 3 "left over" elements. - - These leftovers are currently handled in the main thread. - - That doesn't seem to matter much for this example, but for say 10 threads and - 99 elements, you'd have 9 threads handling 9 elements and 1 thread handling 18 - elements. - - Instead, distribute the left over elements over the worker threads, such that - we have: - ... - Parallel for: elements on worker thread 0 : 1818 - Parallel for: elements on worker thread 1 : 1818 - Parallel for: elements on worker thread 2 : 1818 - Parallel for: elements on worker thread 3 : 0 - Parallel for: elements on main thread : 1817 - ... - - Tested on x86_64-linux. - -2022-07-18 Tom de Vries - - [gdb/testsuite] Allow override of ASAN_OPTIONS in lib/gdb.exp - Use set_sanitizer_default for ASAN_OPTIONS in lib/gdb.exp. - - This allows us to override the default detect_leaks=0 setting, by manually - doing: - ... - $ export ASAN_OPTIONS=detect_leaks=1 - $ make check - ... - - Tested on x86_64-linux, by building with -fsanitize=address and running - test-case gdb.dwarf2/gdb-add-index.exp with and without - "export ASAN_OPTIONS=detect_leaks=1". - -2022-07-18 Tom de Vries - - [gdb/testsuite] Fix regression in step-indirect-call-thunk.exp with gcc 7 - Since commit 43127ae5714 ("Fix gdb.base/step-indirect-call-thunk.exp") I run - into: - ... - gdb compile failed, gcc: error: unrecognized command line option \ - '-fcf-protection=none'; did you mean '-flto-partition=none'? - UNTESTED: gdb.base/step-indirect-call-thunk.exp: failed to prepare - ... - - The problem is that -fcf-protection is supported starting gcc 8, but I'm using - system gcc 7.5.0. - - Fix this by only adding -fcf-protection=none for gcc 8 and later. - - Tested on x86_64-linux, with gcc 7.5.0, 8.2.1 and 12.1.1. - -2022-07-18 Tom de Vries - - [gdb/testsuite] Fix gdb.arch/i386-mpx.exp - Since commit c4a3dbaf113 ("Expose current 'print' settings to Python") we - have: - ... - (gdb) print /x $bnd0 = {0x10, 0x20}^M - $22 = {lbound = 0x10, ubound = 0x20} : size 0x11^M - (gdb) FAIL: gdb.arch/i386-mpx.exp: verify size for bnd0 - ... - - The regexp in the test-case expects "size 17". - - Fix this by updating the regexp. - - Tested on x86_64-linux. - -2022-07-18 Tom de Vries - - [gdbsupport] Add parallel_for_each_debug - Add a parallel_for_each_debug variable, set to false by default. - - With an a.out compiled from hello world, we get with - parallel_for_each_debug == true: - ... - $ gdb -q -batch a.out -ex start - ... - Parallel for: n_elements: 7271 - Parallel for: minimum elements per thread: 10 - Parallel for: elts_per_thread: 1817 - Parallel for: elements on worker thread 0 : 1817 - Parallel for: elements on worker thread 1 : 1817 - Parallel for: elements on worker thread 2 : 1817 - Parallel for: elements on worker thread 3 : 0 - Parallel for: elements on main thread : 1820 - - Temporary breakpoint 1, main () at /home/vries/hello.c:6 - 6 printf ("hello\n"); - ... - - Tested on x86_64-linux. - -2022-07-18 GDB Administrator - - Automatic date update in version.in - -2022-07-17 GDB Administrator - - Automatic date update in version.in - -2022-07-16 GDB Administrator - - Automatic date update in version.in - -2022-07-15 Aaron Merey - - gdb-add-index always generates an error when libdebuginfod wasn't compiled in - gdb-add-index runs gdb with -iex 'set debuginfod enabled off'. If gdb - is not compiled against libdebuginfod this causes an unnecessary error - message to be printed to stderr indicating that gdb was not built with - debuginfod support. - - Fix this by changing the 'set debuginfod enabled off' command to a - no-op when gdb isn't built with libdebuginfod. - -2022-07-15 Bruno Larsen - - gdb/testsuite: modernize gdb.base/maint.exp - gdb.base/maint.exp was using several gdb_expect statements, probably - because this test case predates the existance of gdb_test_multiple. This - commit updates the test case to use gdb_test_multiple, making it more - resilient to internal errors and such. - - The only gdb_expect left in the testcase is one that specifically looks - for an internal error being triggered as a PASS. - -2022-07-15 Tom Tromey - - Add 'nibbles' to gdb.print_options - When I rebased and updated the print_options patch, I forgot to update - print_options to add the new 'nibbles' feature to the result. This - patch fixes the oversight. I'm checking this in. - -2022-07-15 Carl Love - - PowerPC: Add support for IEEE 128-bit format. - The test gdb.base/infcall-nested-structs-c.exp fails on a gdb assert - in function ppc64_sysv_abi_return_value in file gdb/ppc-sysv-tdep.c. The - assert is due to the missing IEEE 128-bit support in file - gdb/ppc-sysv-tdep.c. - - The IBM long double was the initial float 128-bit support added by IBM - The IEEE 128-bit support, which is similar IBM long double support, was - made the default starting with GCC 12. The floating point format - differences include the number of bits used to encode the exponent - and significand. Also, IBM long double values are passed in a pair of - floating point registers. The IEEE 128-bit value is passed in a single - vector register. - - This patch fixes the gdb_assert (ok); in function - ppc64_sysv_abi_return_value in gdb/ppc-sysv-tdep.c by adding IEEE FLOAT - 128-bit type support for PowerPC. - - The patch has been tested on Power 10, ELFv2. It fixes the following list - of regression failures on Power 10: - - gdb.base/infcall-nested-structs-c.exp 192 - gdb.base/infcall-nested-structs-c++.exp 76 - gdb.base/structs.exp 9 - - The patch has been tested on Power 8 BE which is ELFv1. - -2022-07-15 Tom Tromey - - Add 'summary' mode to Value.format_string - This adds a 'summary' mode to Value.format_string and to - gdb.print_options. For the former, it lets Python code format values - using this mode. For the latter, it lets a printer potentially detect - if it is being called in a backtrace with 'set print frame-arguments' - set to 'scalars'. - - I considered adding a new mode here to let a pretty-printer see - whether it was being called in a 'backtrace' context at all, but I'm - not sure if this is really desirable. - -2022-07-15 Tom Tromey - - Expose current 'print' settings to Python - PR python/17291 asks for access to the current print options. While I - think this need is largely satisfied by the existence of - Value.format_string, it seemed to me that a bit more could be done. - - First, while Value.format_string uses the user's settings, it does not - react to temporary settings such as "print/x". This patch changes - this. - - Second, there is no good way to examine the current settings (in - particular the temporary ones in effect for just a single "print"). - This patch adds this as well. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17291 - -2022-07-15 Carl Love - - PowerPC: fix for gdb.base/eh_return.exp - Disable the Traceback Table generation on PowerPC for this test. The - Traceback Table consists of a series of bit fields to indicate things like - the Traceback Table version, language, and specific information about the - function. The Traceback Table is generated following the end of the code - for every function by default. The Traceback Table is defined in the - PowerPC ELF ABI and is intended to support debuggers and exception - handlers. The Traceback Table is displayed in the disassembly of functions - by default and is part of the function length. The table is typically - interpreted by the disassembler as data represented by .long xxx entries. - - Generation of the Traceback Table is disabled in this test using the - PowerPC specific gcc compiler option -mtraceback=no, the xlc option - additional_flags-qtable=none and the clang optons - -mllvm -xcoff-traceback-table=false. Disabling the Traceback Table - generation in this test results in the gdb_test_multiple statement - correctly locating the address of the bclr instruction before the statement - "End of assembler dump." in the disassembly output. - -2022-07-15 Tom Tromey - - Run 'black' on gdb - Running 'black' on gdb fixed a couple of small issues. This patch is - the result. - -2022-07-15 GDB Administrator - - Automatic date update in version.in - -2022-07-14 Tom de Vries - - [gdb/symtab] Fix data race in cooked_index_functions::expand_symtabs_matching - When building gdb with -fsanitize-threads and running test-case - gdb.ada/char_enum_unicode.exp, I run into: - ... - WARNING: ThreadSanitizer: data race (pid=21301)^M - Write of size 8 at 0x7b2000008080 by main thread:^M - #0 free (libtsan.so.2+0x4c5e2)^M - #1 _dl_close_worker (ld-linux-x86-64.so.2+0x4b7b)^M - #2 convert_between_encodings() charset.c:584^M - ... - #21 cooked_index_functions::expand_symtabs_matching() read.c:18606 - ... - - This is fixed by making cooked_index_functions::expand_symtabs_matching wait - for the cooked index finalization to be done. - - Tested on x86_64-linux. - - https://sourceware.org/bugzilla/show_bug.cgi?id=29311 - https://sourceware.org/bugzilla/show_bug.cgi?id=29286 - -2022-07-14 Tom de Vries - - [gdbsupport] Add sequential_for_each - Add a sequential_for_each alongside the parallel_for_each, which can be used - as a drop-in replacement. - - This can be useful when debugging multi-threading behaviour, and you want to - limit multi-threading in a fine-grained way. - - Tested on x86_64-linux, by using it instead of the parallel_for_each in - dwarf2_build_psymtabs_hard. - -2022-07-14 Tiezhu Yang - - gdb: Document floating-point support for LoongArch - Update NEWS and gdb.texinfo to document floating-point support - for LoongArch. - -2022-07-14 Tom de Vries - - [gdb/build] Fix gdb build with gcc 4.8.5 - When building gdb with gcc 4.8.5, we run into: - ... - In file included from /usr/include/c++/4.8/future:43:0, - from gdbsupport/thread-pool.h:30, - from gdb/dwarf2/cooked-index.h:33, - from gdb/dwarf2/read.h:26, - from gdb/dwarf2/abbrev-cache.c:21: - /usr/include/c++/4.8/atomic: In instantiation of \ - ‘_Tp std::atomic<_Tp>::load(std::memory_order) const [with _Tp = \ - packed; std::memory_order = std::memory_order]’: - gdb/dwarf2/read.h:332:44: required from here - /usr/include/c++/4.8/atomic:208:13: error: no matching function for call to \ - ‘packed::packed()’ - _Tp tmp; - ^ - ... - - Fix this by adding the default constructor for packed. - - Tested on x86_64-linux, with gdb build with gcc 4.8.5. - -2022-07-14 Tom de Vries - - [gdb/symtab] Make per_cu->m_lang atomic - When building gdb with -fsanitize=thread and running test-case - gdb.dwarf2/inlined_subroutine-inheritance.exp, we run into a data race - between: - ... - Read of size 1 at 0x7b2000003010 by thread T4: - #0 packed::operator language() const packed.h:54 - #1 dwarf2_per_cu_data::set_lang(language) read.h:363 - ... - and: - ... - Previous write of size 1 at 0x7b2000003010 by main thread: - #0 dwarf2_per_cu_data::set_lang(language) read.h:365 - ... - - Fix this by making per_cu->m_lang atomic. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29286 - -2022-07-14 Tom de Vries - - [gdb/symtab] Make per_cu->unit_type atomic - With gdb with -fsanitize=thread and test-case gdb.ada/array_bounds.exp, I run - into a data race between: - ... - Read of size 1 at 0x7b2000025f0f by main thread: - #0 packed::operator dwarf_unit_type() const packed.h:54 - #1 dwarf2_per_cu_data::set_unit_type(dwarf_unit_type) read.h:339 - ... - and: - ... - Previous write of size 1 at 0x7b2000025f0f by thread T3: - #0 dwarf2_per_cu_data::set_unit_type(dwarf_unit_type) read.h:341 - ... - - Fix this by making per_cu->unit_type atomic. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29286 - -2022-07-14 Tom de Vries - - [gdb/symtab] Fix data race in ~charset_vector - When doing: - ... - $ gdb ./outputs/gdb.ada/char_enum_unicode/foo -batch -ex "break foo.adb:26" - ... - with a gdb build with -fsanitize=thread I run into a data race: - ... - WARNING: ThreadSanitizer: data race (pid=30917) - Write of size 8 at 0x7b0400004070 by main thread: - #0 free (libtsan.so.2+0x4c5e2) - #1 xfree gdbsupport/gdb-xfree.h:37 (gdb+0x650f17) - #2 charset_vector::clear() gdb/charset.c:703 (gdb+0x651354) - #3 charset_vector::~charset_vector() gdb/charset.c:697 (gdb+0x6512d3) - #4 (libtsan.so.2+0x32643) - #5 captured_main_1 gdb/main.c:1310 (gdb+0xa3975a) - ... - - The problem is that we're freeing the charset_vector elements in the destructor, - which may still be used by a worker thread. - - Fix this by not freeing the charset_vector elements in the destructor. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29311 - -2022-07-14 Alan Modra - - Re: PowerPC: implement md_operand to parse register names - I meant to make this change before committing, to let compilers know - the code on the false branch of md_parse_name is dead. - - * config/tc-ppc.c (ppc_parse_name): Return void. - * config/tc-ppc.h (md_parse_name): Always true. - (ppc_parse_name): Update prototype. - -2022-07-14 Alan Modra - - PowerPC: implement md_operand to parse register names - Allows register names to appear in symbol assignments, so for example - tocp = %r2 - mr %r3,tocp - now assembles. - - * gas/config/tc-ppc.c (REG_NAME_CNT): Delete, replace uses with - ARRAY_SIZE. - (register_name): Rename to.. - (md_operand): ..this. Only handle %reg. - (cr_names): Rename to.. - (cr_cond): ..this. Just keep conditions. - (ppc_parse_name): Add mode param. Search both cr_cond and - pre_defined_registers. Handle absolute and register symbol - values here rather than in expr.c:operand(). - (md_assemble): Don't special case register name matching in - operands, except to set cr_operand as appropriate. - * gas/config/tc-ppc.h (md_operand): Don't define. - (md_parse_name, ppc_parse_name): Update. - * read.c (pseudo_set): Copy over entire O_register value. - * testsuite/gas/ppc/regsyms.d. - * testsuite/gas/ppc/regsyms.s: New test. - * testsuite/gas/ppc/ppc.exp: Run it. - -2022-07-14 GDB Administrator - - Automatic date update in version.in - -2022-07-13 Pedro Alves - - Tighten gdb.threads/no-unwaited-for-left.exp regexps - A WIP version of a patch - (https://sourceware.org/pipermail/gdb-patches/2022-June/190202.html) - resulted in a bug that went unnoticed by the testuite, like so: - - (gdb) PASS: gdb.threads/no-unwaited-for-left.exp: enable scheduler-locking, for main thread - continue - Continuing. - [New Thread 1251861.1251861] - No unwaited-for children left. - (gdb) PASS: gdb.threads/no-unwaited-for-left.exp: continue stops when the main thread exits - info threads - Id Target Id Frame - 3 Thread 1251861.1251863 "no-unwaited-for" __pthread_clockjoin_ex (threadid=140737351558976, thread_return=0x0, clockid=, abstime=, block=) at pthread_join_common.c:145 - 4 Thread 1251861.1251861 "no-unwaited-for" in ?? () - - The current thread has terminated. See `help thread'. - (gdb) PASS: gdb.threads/no-unwaited-for-left.exp: only thread 3 left, main thread terminated - - Somehow, above, GDB re-added the zombie leader back before printing - "No unwaited-for children left.". The "only thread 3 left, main - thread terminated" test should have caught this, but didn't. That is - because the test's regexp has a ".*" after the part that matches - thread 3. This commit tightens that regexp to catch such a bug. It - also tightens the "only main thread left, thread 2 terminated" test's - regexp in the same way. - - Change-Id: I8744f327a0aa0e2669d1ddda88247e99b91cefff - -2022-07-13 Carl Love - - Fix for gdb.base/stap-probe.c - On PowePC, the test fails on a compile error: - - /../binutils-gdb-current/gdb/testsuite/gdb.base/stap-probe.c:107:1: error: expected '=', ',', ';', 'asm' or 'attribute' before 'use_xmm_reg' - 107 | use_xmm_reg (int val) - | ^~~~~~~~~~~ - - Where the source code for stap-probe.c is: - - static const char * __attribute__((noinline)) ATTRIBUTE_NOCLONE - use_xmm_reg (int val) <-- line 107 - { - ... - - The issue is the ATTRIBUTE_NOCLONE is not defined as an attribute as - expected. The #define for ATTRIBUTE_NOCLONE can be found in - ../lib/attributes.h. - - This patch adds the missing include statement for the definition of - ATTRIBUTE_NOCLONE. - - The patch has been tested and verified on a Power10 system. - -2022-07-13 Carl Love - - Add PowerPC support to gdb.cp/call-method-register.cc - This patch adds the needed define ASM_REG for PowerPC. - - The patch was run on a Power 10 system. The gdb Summary for the run lists - 2 expected passes, no unexpected failures or untested testcases. - - Please let me know if this patch is acceptable for mainline. - - Carl Love - -2022-07-13 Carl Love - - Fix gdb.base/step-indirect-call-thunk.exp - Due to recent changes in the default value of -fcf-protection for gcc, the - test gdb.base/step-indirect-call-thunk.exp fails on Intel X86-64 with the - error: - - Executing on host: gcc -fno-stack-protector -fdiagnostics-color=never - -mindirect-branch=thunk -mfunction-return=thunk -c -g - -o /.../gdb/testsuite/outputs/gdb.base/step-indirect-call-thunk/step-indirect-call-thunk0.o - /.../gdb/testsuite/gdb.base/step-indirect-call-thunk.c - (timeout = 300) builtin_spawn -ignore SIGHUP gcc -fno-stack-protector - -fdiagnostics-color=never -mindirect-branch=thunk -mfunction-return=thunk -c - -g -o /.../gdb/testsuite/outputs/gdb.base/step-indirect-call-thunk/step-indirect-call-thunk0.o - /.../binutils-gdb-current/gdb/testsuite/gdb.base/step-indirect-call-thunk.c - /.../gdb/testsuite/gdb.base/step-indirect-call-thunk.c: - In function 'inc': /.../gdb/testsuite/gdb.base/step-indirect-call-thunk.c: - 22:1: error: '-mindirect-branch' and '-fcf-protection' are not compatible - 22 | { /* inc.1 */ - - As stated in the error message the default "-fcf-protection" and - "-mindirect-branch' are in compatible. The fcf-protection argument needs - to be "-fcf-protection=none" for the test to compile on Intel. - - The gcc command line "-mindirect-branch' is an Intel specific and will give - an error on other platforms. A check for X86 is added so the test will - only run on X86 platforms. - - The patch has been tested and verified on Power 10 and Intel X86-64 systems - with no regressions. - -2022-07-13 Pedro Alves - - Fix "until LINE" in main, when "until" runs into longjmp - With a test like this: - - 1 #include - 2 int - 3 main () - 4 { - 5 dlsym (RTLD_DEFAULT, "FOO"); - 6 return 0; - 7 } - - and then "start" followed by "until 6", GDB currently incorrectly - stops inside the runtime loader, instead of line 6. Vis: - - ... - Temporary breakpoint 1, main () at until.c:5 - 4 { - (gdb) until 6 - 0x00007ffff7f0a90d in __GI__dl_catch_exception (exception=exception@entry=0x7fffffffdb00, operate=, args=0x7ffff7f0a90d <__GI__dl_catch_exception+109>) at dl-error-skeleton.c:206 - 206 dl-error-skeleton.c: No such file or directory. - (gdb) - - The problem is related to longjmp handling -- dlsym internally - longjmps on error. The testcase can be reduced to this: - - 1 #include - 2 void func () { - 3 jmp_buf buf; - 4 if (setjmp (buf) == 0) - 5 longjmp (buf, 1); - 6 } - 7 - 8 int main () { - 9 func (); - 10 return 0; /* until to here */ - 11 } - - and then with "start" followed by "until 10", GDB currently - incorrectly stops at line 4 (returning from setjmp), instead of line - 10. - - The problem is that the BPSTAT_WHAT_CLEAR_LONGJMP_RESUME code in - infrun.c fails to find the initiating frame, and so infrun thinks that - the longjmp jumped somewhere outer to "until"'s originating frame. - - Here: - - case BPSTAT_WHAT_CLEAR_LONGJMP_RESUME: - { - struct frame_info *init_frame; - - /* There are several cases to consider. - - 1. The initiating frame no longer exists. In this case we - must stop, because the exception or longjmp has gone too - far. - - ... - - init_frame = frame_find_by_id (ecs->event_thread->initiating_frame); - - if (init_frame) // this is NULL! - { - ... - } - - /* For Cases 1 and 2, remove the step-resume breakpoint, if it - exists. */ - delete_step_resume_breakpoint (ecs->event_thread); - - end_stepping_range (ecs); // case 1., so we stop. - } - - The initiating frame is set by until_break_command -> - set_longjmp_breakpoint. The initiating frame is supposed to be the - frame that is selected when the command was issued, but - until_break_command instead passes the frame id of the _caller_ frame - by mistake. When the "until LINE" command is issued from main, the - caller frame is the caller of main. When later infrun tries to find - that frame by id, it fails to find it, because frame_find_by_id - doesn't unwind past main. - - The bug is that we passed the caller frame's id to - set_longjmp_breakpoint. We should have passed the selected frame's id - instead. - - Change-Id: Iaae1af7cdddf296b7c5af82c3b5b7d9b66755b1c - -2022-07-13 Enze Li - - gdbserver: remove unused variable - When building with clang 15, I got this error: - - CXX server.o - server.cc:2985:10: error: variable 'new_argc' set but not used [-Werror,-Wunused-but-set-variable] - int i, new_argc; - ^ - Remove the unused variable to eliminate the error. - - Tested by rebuilding on x86_64-linux with clang 15. - -2022-07-13 Tom de Vries - - [gdb/symtab] Make per_cu->set_lang more strict - We have in per_cu->set_lang this comment: - ... - void set_lang (enum language lang) - { - /* We'd like to be more strict here, similar to what is done in - set_unit_type, but currently a partial unit can go from unknown to - minimal to ada to c. */ - ... - - Fix this by not setting m_lang for partial units. - - This requires us to move the m_unit_type initialization to ensure that - m_unit_type is initialized before per_cu->m_lang. - - Tested on x86_64-linux, with native and target board cc-with-dwz-m. - -2022-07-13 GDB Administrator - - Automatic date update in version.in - -2022-07-12 Pedro Alves - - Improve "set scheduler-locking" documentation - This improves the "set scheduler-locking" documentation in the GDB - manual: - - - Use a table to describe the four available modes. - - - Describe "step" in terms of "on" and "off". - - - Tweak the "replay" mode's description to describe replay first - instead of recording, and also mention how the mode behaves during - normal execution. - - - Say what is the default mode. - - Change-Id: Ie12140138b37534b7fc1d904da34f0f174aa11ce - -2022-07-12 Tom de Vries - - [gdb/symtab] Add dwarf2_cu::lang () - The cu->per_cu->lang field was added to carry information from the initial - partial symtabs phase to the symtab expansion phase, for the benefit of a - particular optimization in process_imported_unit_die. - - Other uses have been added, but since the first phase now has been - parallelized, those have become problematic and sources of race conditions. - - Fix this by adding dwarf2_cu::lang () and using it where we can to replace - cu->per_cu->lang () with cu->lang (). - - Also assert in dwarf2_cu::lang () that we're not returning language_unknown. - - Tested on x86_64-linux. - -2022-07-12 Martin Liska - - LTO plugin: sync header file with GCC - include/ChangeLog: - - * plugin-api.h (enum ld_plugin_tag): Sync with GCC. - -2022-07-12 Tom de Vries - - [gdb/record] Support recording of getrandom - Add missing support for recording of linux syscall getrandom. - - Tested on x86_64-linux with native and target board unix/-m32. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22081 - -2022-07-12 Tiezhu Yang - - gdbserver: LoongArch: Add floating-point support - This commit adds floating-point support for LoongArch gdbserver. - - gdb: LoongArch: Add floating-point support - This commit adds floating-point support for LoongArch gdb. - -2022-07-12 Tom de Vries - - [gdb/testsuite] Run two test-cases with ASAN_OPTIONS=verify_asan_link_order=0 - When building gdb with -fsanitize=address we run into: - ... - builtin_spawn gdb -nw -nx -iex set height 0 -iex set width 0 -data-directory \ - build/gdb/data-directory^M - ==10637==ASan runtime does not come first in initial library list; you \ - should either link runtime to your application or manually preload it with \ - LD_PRELOAD.^M - ERROR: GDB process no longer exists - ... - - Prevent the ASan runtime error by using - ASAN_OPTIONS=verify_asan_link_order=0. This makes both test-cases pass. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29358 - -2022-07-12 Tom de Vries - - [gdb/testsuite] Add tsan-suppressions.txt - Add a new file tsan-suppressions.txt, to suppress the "unlock unlocked mutex" - problem in ncurses, filed in PR29328. - - The file is added to the TSAN_OPTIONS in lib/gdb.exp. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29328 - -2022-07-12 Tom de Vries - - [gdb/build] Fix build with gcc 4.8.5 - When building gdb with gcc 4.8.5, we run into problems due to unconditionally - using: - ... - gdb_static_assert (std::is_trivially_copyable::value); - ... - in gdbsupport/packed.h. - - Fix this by guarding the usage with HAVE_IS_TRIVIALLY_COPYABLE. - - Tested by doing a full gdb build with gcc 4.8.5. - -2022-07-12 Tom de Vries - - Fix -fsanitize=thread for per_cu fields - When building gdb with -fsanitize=thread and gcc 12, and running test-case - gdb.dwarf2/dwz.exp, we run into a data race between: - ... - Read of size 1 at 0x7b200000300d by thread T2:^M - #0 cutu_reader::cutu_reader(dwarf2_per_cu_data*, dwarf2_per_objfile*, \ - abbrev_table*, dwarf2_cu*, bool, abbrev_cache*) gdb/dwarf2/read.c:6164 \ - (gdb+0x82ec95)^M - ... - and: - ... - Previous write of size 1 at 0x7b200000300d by main thread:^M - #0 prepare_one_comp_unit gdb/dwarf2/read.c:23588 (gdb+0x86f973)^M - ... - - In other words, between: - ... - if (this_cu->reading_dwo_directly) - ... - and: - ... - cu->per_cu->lang = pretend_language; - ... - - Likewise, we run into a data race between: - ... - Write of size 1 at 0x7b200000300e by thread T4: - #0 process_psymtab_comp_unit gdb/dwarf2/read.c:6789 (gdb+0x830720) - ... - and: - ... - Previous read of size 1 at 0x7b200000300e by main thread: - #0 cutu_reader::cutu_reader(dwarf2_per_cu_data*, dwarf2_per_objfile*, \ - abbrev_table*, dwarf2_cu*, bool, abbrev_cache*) gdb/dwarf2/read.c:6164 \ - (gdb+0x82edab) - ... - - In other words, between: - ... - this_cu->unit_type = DW_UT_partial; - ... - and: - ... - if (this_cu->reading_dwo_directly) - ... - - Likewise for the write to addresses_seen in cooked_indexer::check_bounds and a - read from is_dwz in dwarf2_find_containing_comp_unit for test-case - gdb.dwarf2/dw2-dir-file-name.exp and target board cc-with-dwz-m. - - The problem is that the written fields are part of the same memory location as - the read fields, so executing a read and write in different threads is - undefined behavour. - - Making the written fields separate memory locations, using the new - struct packed template fixes this. - - The set of fields has been established experimentally to be the - minimal set to get rid of this type of -fsanitize=thread errors, but - more fields might require the same treatment. - - Looking at the properties of the lang field, unlike dwarf_version it's - not available in the unit header, so it will be set the first time - during the parallel cooked index reading. The same holds for - unit_type, and likewise for addresses_seen. - - dwarf2_per_cu_data::addresses_seen is moved so that the bitfields that - currently follow it can be merged in the same memory location as the - bitfields that currently precede it, for better packing. - - Tested on x86_64-linux. - - Co-Authored-By: Pedro Alves - - Change-Id: Ifa94f0a2cebfae5e8f6ddc73265f05e7fd9e1532 - -2022-07-12 Pedro Alves - - Introduce struct packed template - When building gdb with -fsanitize=thread and gcc 12, and running test-case - gdb.dwarf2/dwz.exp, we run into a few data races. For example, between: - - ... - Write of size 1 at 0x7b200000300e by thread T4: - #0 process_psymtab_comp_unit gdb/dwarf2/read.c:6789 (gdb+0x830720) - ... - - and: - - ... - Previous read of size 1 at 0x7b200000300e by main thread: - #0 cutu_reader::cutu_reader(dwarf2_per_cu_data*, dwarf2_per_objfile*, \ - abbrev_table*, dwarf2_cu*, bool, abbrev_cache*) gdb/dwarf2/read.c:6164 \ - (gdb+0x82edab) - ... - - In other words, between: - - ... - this_cu->unit_type = DW_UT_partial; - ... - - and: - - ... - if (this_cu->reading_dwo_directly) - ... - - The problem is that the written fields are part of the same memory - location as the read fields, so executing a read and write in - different threads is undefined behavour. - - Making the written fields separate memory locations, like this: - - ... - struct { - ENUM_BITFIELD (dwarf_unit_type) unit_type : 8; - }; - ... - - fixes it, however that also increases the size of struct - dwarf2_per_cu_data, because it introduces padding due to alignment of - these new structs, which align on the natural alignment of the - specified type of their fields. We can fix that with - __attribute__((packed)), like so: - - struct { - ENUM_BITFIELD (dwarf_unit_type) unit_type : 8 __attribute__((packed)); - }; - - but to avoid having to write that in several places and add suitable - comments explaining how that concoction works, introduce a new struct - packed template that wraps/hides this. Instead of the above, we'll be - able to write: - - packed unit_type; - - Note that we can't change the type of dwarf_unit_type, as that is - defined in include/, and shared with other projects, some of those - written in C. - - This patch just adds the struct packed type. Following patches will - make use of it. One of those patches will want to wrap a struct - packed in an std::atomic, like: - - std::atomic> m_lang; - - so the new gdbsupport/packed.h header adds some operators to make - comparisions between that std::atomic and the type that the wrapped - struct packed wraps work, like in: - - if (m_lang == language_c) - - It would be possible to implement struct packed without using - __attribute__((packed)), by having it store an array of bytes of the - appropriate size instead, however that would make it less convenient - to debug GDB. The way it's implemented, printing a struct packed - variable just prints its field using its natural type, which is - particularly useful if the type is an enum. I believe that - __attribute__((packed)) is supported by all compilers that are able to - build GDB. Even a few BFD headers use on ATTRIBUTE_PACKED on external - types: - - include/coff/external.h: } ATTRIBUTE_PACKED - include/coff/external.h:} ATTRIBUTE_PACKED ; - include/coff/external.h:} ATTRIBUTE_PACKED ; - include/coff/pe.h:} ATTRIBUTE_PACKED ; - include/coff/pe.h:} ATTRIBUTE_PACKED; - include/elf/external.h:} ATTRIBUTE_PACKED Elf_External_Versym; - - It is not possible to build GDB with MSVC today, but if it could, that - would be one compiler that doesn't support this attribute. However, - it supports packing via pragmas, so there's a way to cross that bridge - if we ever get to it. I believe any compiler worth its salt supports - some way of packing. - - In any case, the worse that happens without the attribute is that some - types become larger than ideal. Regardless, I've added a couple - static assertions to catch such compilers in action: - - /* Ensure size and aligment are what we expect. */ - gdb_static_assert (sizeof (packed) == Bytes); - gdb_static_assert (alignof (packed) == 1); - - Change-Id: Ifa94f0a2cebfae5e8f6ddc73265f05e7fd9e1532 - -2022-07-12 Alan Modra - - PowerPC md_end: Don't htab_delete(NULL) - It might be possible to hit md_end before md_begin is called, don't - segfault if so. Also, remove a useless check. - - * gas/config/tc-ppc.c (insn_calloc): Remove needless overflow - check. - (ppc_md_end): Check ppc_hash before deleting. Clear ppc_hash. - -2022-07-12 Alan Modra - - PR29355, ld segfaults with -r/-q and custom-named section .rela* - The bug testcase uses an output section named .rel or .rela which has - input .data sections mapped to it. The input .data section has - relocations. When counting output relocations SHT_REL and SHT_RELA - section reloc_count is ignored, with the justification that reloc - sections themselves can't have relocations and some backends use - reloc_count in reloc sections. However, the test wrongly used the - output section type (which normally would match input section type). - Fix that. Note that it is arguably wrong for ld to leave the output - .rel/.rela section type as SHT_REL/SHT_RELA when non-empty non-reloc - sections are written to it, but I'm not going to change that since it - might be useful to hand-craft relocs in a data section that is then - written to a SHT_REL/SHT_RELA output section. - - PR 29355 - * elflink.c (bfd_elf_final_link): Use input section type rather - than output section type to determine whether to exclude using - reloc_count from that section. - -2022-07-12 Jiangshuai Li - - gdb/csky complete csky_dwarf_reg_to_regnum - For csky arch, the correspondence between Dwarf registers and GDB - registers are as follows: - dwarf regnos 0~31 ==> gdb regs r0~r31 - dwarf regno CSKY_HI_REGNUM(36) ==> gdb reg hi - dwarf regno CSKY_LO_REGNUM(37) ==> gdb reg hi - dwarf regno CSKY_PC_REGNUM(72) ==> gdb reg pc - dwarf regnos FV_PSEUDO_REGNO_FIRST(74)~FV_PSEUDO_REGNO_LAST(201) - ==> - gdb regs s0~s127 (pseudo regs for float and vector regs) - - other dwarf regnos have no corresponding gdb regs to them. - -2022-07-12 GDB Administrator - - Automatic date update in version.in - -2022-07-11 Pedro Alves - - Always emit =thread-exited notifications, even if silent - [Note: the testcased added by this commit depends on - https://sourceware.org/pipermail/gdb-patches/2022-June/190259.html, - otherwise GDB just crashes when detaching the core] - - Currently, in MI, =thread-created are always emitted, like: - - =thread-group-started,id="i1",pid="195680" - =thread-created,id="1",group-id="i1" - ... - - but on teardown, if the target uses exit_inferior_silent, then you'll - only see the inferior exit notification (thread-group-exited), no - notification for threads. - - The core target is one of the few targets that use - exit_inferior_silent. Here's an example session: - - -target-select core $corefile - =thread-group-started,id="i1",pid="195680" - =thread-created,id="1",group-id="i1" - ... - ^connected,frame=.... - (gdb) - -target-detach - =thread-group-exited,id="i1" - ^done - (gdb) - - This imbalance of emitting =thread-created but then not =thread-exited - seems off to me. (And, it complicates changes I want to do to - centralize emitting thread exit notifications for the CLI, which is - why I'm looking at this.) - - And then, since most other targets use exit_inferior instead of - exit_inferior_silent, MI is already emitting =thread-exited - notifications when tearing down an inferior, for most targets. - - This commit makes MI always emit the =thread-exited notifications, - even for exit_inferior_silent. - - Afterwards, when debugging a core, MI outputs: - - (gdb) - -target-detach - =thread-exited,id="1",group-id="i1" << new line - =thread-group-exited,id="i1" - ^done - (gdb) - - Surprisingly, there's no MI testcase debugging a core file. This - commit adds the first. - - Change-Id: I5100501a46f07b6bbad3e04d120c2562a51c93a4 - -2022-07-11 Pedro Alves - - Fix core-file -> detach -> crash (corefiles/29275) - After loading a core file, you're supposed to be able to use "detach" - to unload the core file. That unfortunately regressed starting with - GDB 11, with these commits: - - 1192f124a308 - gdb: generalize commit_resume, avoid commit-resuming when threads have pending statuses - 408f66864a1a - detach in all-stop with threads running - - resulting in a GDB crash: - - ... - Thread 1 "gdb" received signal SIGSEGV, Segmentation fault. - 0x0000555555e842bf in maybe_set_commit_resumed_all_targets () at ../../src/gdb/infrun.c:2899 - 2899 if (proc_target->commit_resumed_state) - (top-gdb) bt - #0 0x0000555555e842bf in maybe_set_commit_resumed_all_targets () at ../../src/gdb/infrun.c:2899 - #1 0x0000555555e848bf in scoped_disable_commit_resumed::reset (this=0x7fffffffd440) at ../../src/gdb/infrun.c:3023 - #2 0x0000555555e84a0c in scoped_disable_commit_resumed::reset_and_commit (this=0x7fffffffd440) at ../../src/gdb/infrun.c:3049 - #3 0x0000555555e739cd in detach_command (args=0x0, from_tty=1) at ../../src/gdb/infcmd.c:2791 - #4 0x0000555555c0ba46 in do_simple_func (args=0x0, from_tty=1, c=0x55555662a600) at ../../src/gdb/cli/cli-decode.c:95 - #5 0x0000555555c112b0 in cmd_func (cmd=0x55555662a600, args=0x0, from_tty=1) at ../../src/gdb/cli/cli-decode.c:2514 - #6 0x0000555556173b1f in execute_command (p=0x5555565c5916 "", from_tty=1) at ../../src/gdb/top.c:699 - - The code that crashes looks like: - - static void - maybe_set_commit_resumed_all_targets () - { - scoped_restore_current_thread restore_thread; - - for (inferior *inf : all_non_exited_inferiors ()) - { - process_stratum_target *proc_target = inf->process_target (); - - if (proc_target->commit_resumed_state) - ^^^^^^^^^^^ - - With 'proc_target' above being null. all_non_exited_inferiors filters - out inferiors that have pid==0. We get here at the end of - detach_command, after core_target::detach has already run, at which - point the inferior _should_ have pid==0 and no process target. It is - clear it no longer has a process target, but, it still has a pid!=0 - somehow. - - The reason the inferior still has pid!=0, is that core_target::detach - just unpushes, and relies on core_target::close to actually do the - getting rid of the core and exiting the inferior. The problem with - that is that detach_command grabs an extra strong reference to the - process stratum target, so the unpush_target inside - core_target::detach doesn't actually result in a call to - core_target::close. - - Fix this my moving the cleaning up the core inferior to a shared - routine called by both core_target::close and core_target::detach. We - still need to cleanup the inferior from within core_file::close - because there are paths to it that want to get rid of the core without - going through detach. E.g., "core-file" -> "run". - - This commit includes a new test added to gdb.base/corefile.exp to - cover the "core-file core" -> "detach" scenario. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29275 - - Change-Id: Ic42bdd03182166b19f598428b0dbc2ce6f67c893 - -2022-07-11 Pedro Alves - - Fix non-existent "@var{thread-id}" in stop reply descriptions - In the description of stop replies, where the "thread" register is - explained, and where the fork and vfork stop reasons are detailed, - there are references to "@var{thread-id}", but such variable does not - actually exist. This commit fixes it. - - Change-Id: If679944aaf15f6f64aabe506339a9e7667864cab - -2022-07-11 Luis Machado - - Try a couple PAuth compilation flags for gdb.arch/aarch64-pauth.exp - The -msign-return-address switch has been dropped from GCC, but some - older compiler may still support it. Make sure we try both - -msign-return-address and -mbranch-protection before bailing out when - running gdb.arch/aarch64-pauth.exp. - -2022-07-11 Andrew Burgess - - gdb: add support for disassembler styling using libopcodes - This commit extends GDB to make use of libopcodes styling support - where available, currently this is just i386 based architectures, and - RISC-V. - - For architectures that don't support styling using libopcodes GDB will - fall back to using the Python Pygments package, when the package is - available. - - The new libopcodes based styling has the disassembler identify parts - of the disassembled instruction, e.g. registers, immediates, - mnemonics, etc, and can style these components differently. - Additionally, as the styling is now done in GDB we can add settings to - allow the user to configure which colours are used right from the GDB - CLI. - - There's some new maintenance commands: - - maintenance set libopcodes-styling enabled on|off - maintenance show libopcodes-styling - - These can be used to manually disable use of libopcodes styling. This - is a maintenance command as it's not anticipated that a user should - need to do this. But, this could be useful for testing, or, in some - rare cases, a user might want to override the Python hook used for - disassembler styling, and then disable libopcode styling so that GDB - falls back to using Python. Right now I would consider this second - use case a rare situation, which is why I think a maintenance command - is appropriate. - - When libopcodes is being used for styling then the user can make use - of the following new styles: - - set/show style disassembler comment - set/show style disassembler immediate - set/show style disassembler mnemonic - set/show style disassembler register - - The disassembler also makes use of the 'address' and 'function' - styles to style some parts of the disassembler output. I have also - added the following aliases though: - - set/show style disassembler address - set/show style disassembler symbol - - these are aliases for: - - set/show style address - set/show style function - - respectively, and exist to make it easier for users to discover - disassembler related style settings. The 'address' style is used to - style numeric addresses in the disassembler output, while the 'symbol' - or 'function' style is used to style the names of symbols in - disassembler output. - - As not every architecture supports libopcodes styling, the maintenance - setting 'libopcodes-styling enabled' has an "auto-off" type behaviour. - Consider this GDB session: - - (gdb) show architecture - The target architecture is set to "auto" (currently "i386:x86-64"). - (gdb) maintenance show libopcodes-styling enabled - Use of libopcodes styling support is "on". - - the setting defaults to "on" for architectures that support libopcodes - based styling. - - (gdb) set architecture sparc - The target architecture is set to "sparc". - (gdb) maintenance show libopcodes-styling enabled - Use of libopcodes styling support is "off" (not supported on architecture "sparc") - - the setting will show as "off" if the user switches to an architecture - that doesn't support libopcodes styling. The underlying setting is - still "on" at this point though, if the user switches back to - i386:x86-64 then the setting would go back to being "on". - - (gdb) maintenance set libopcodes-styling enabled off - (gdb) maintenance show libopcodes-styling enabled - Use of libopcodes styling support is "off". - - now the setting is "off" for everyone, even if the user switches back - to i386:x86-64 the setting will still show as "off". - - (gdb) maintenance set libopcodes-styling enabled on - Use of libopcodes styling not supported on architecture "sparc". - (gdb) maintenance show libopcodes-styling enabled - Use of libopcodes styling support is "off". - - attempting to switch the setting "on" for an unsupported architecture - will give an error, and the setting will remain "off". - - (gdb) set architecture auto - The target architecture is set to "auto" (currently "i386:x86-64"). - (gdb) maintenance show libopcodes-styling enabled - Use of libopcodes styling support is "off". - (gdb) maintenance set libopcodes-styling enabled on - (gdb) maintenance show libopcodes-styling enabled - Use of libopcodes styling support is "on". - - the user will need to switch back to a supported architecture before - they can one again turn this setting "on". - -2022-07-11 Andrew Burgess - - gdb: have gdb_disassemble_info carry 'this' in its stream pointer - The gdb_disassemble_info class is a wrapper around the libopcodes - disassemble_info struct. The 'stream' field of disassemble_info is - passed as an argument to the fprintf_func and fprintf_styled_func - callbacks when the disassembler wants to print anything. - - Previously, GDB would store a pointer to a ui_file object in the - 'stream' field, then, when the disassembler wanted to print anything, - the content would be written to the ui_file object. An example of an - fprintf_func callback, from gdb/disasm.c is: - - int - gdb_disassembler::dis_asm_fprintf (void *stream, const char *format, ...) - { - /* Write output to STREAM here. */ - } - - This is fine, but has one limitation, within the print callbacks we - only have access to STREAM, we can't access any additional state - stored within the gdb_disassemble_info object. - - Right now this isn't a problem, but in a future commit this will - become an issue, how we style the output being written to STREAM will - depend on the state of the gdb_disassemble_info object, and this state - might need to be updated, depending on what is being printed. - - In this commit I propose changing the 'stream' field of the - disassemble_info to carry a pointer to the gdb_disassemble_info - sub-class, rather than the stream itself. - - We then have the two sub-classes of gdb_disassemble_info to consider, - the gdb_non_printing_disassembler class never cared about the stream, - previously, for this class, the stream was nullptr. With the change - to make stream be a gdb_disassemble_info pointer, no further updates - are needed for gdb_non_printing_disassembler. - - The other sub-class is gdb_printing_disassembler. In this case the - sub-class now carries around a pointer to the stream object. The - print callbacks are updated to cast the incoming stream object back to - a gdb_printing_disassembler, and then extract the stream. - - This is purely a refactoring commit. A later commit will add - additional state to the gdb_printing_disassembler, and update the - print callbacks to access this state. - - There should be no user visible changes after this commit. - -2022-07-11 Tom de Vries - - [gdb/symtab] Fix data race in per_cu->length - With gdb build with -fsanitize=thread and test-case - gdb.dwarf2/dw4-sig-types.exp and target board cc-with-dwz-m we run into a data - race between: - ... - Write of size 4 at 0x7b2800002268 by thread T4:^M - #0 cutu_reader::cutu_reader(dwarf2_per_cu_data*, dwarf2_per_objfile*, \ - abbrev_table*, dwarf2_cu*, bool, abbrev_cache*) gdb/dwarf2/read.c:6236 \ - (gdb+0x82f525)^M - ... - and this read: - ... - Previous read of size 4 at 0x7b2800002268 by thread T1:^M - #0 dwarf2_find_containing_comp_unit gdb/dwarf2/read.c:23444 \ - (gdb+0x86e22e)^M - ... - - In other words, between this write: - ... - this_cu->length = cu->header.get_length (); - ... - and this read: - ... - && mid_cu->sect_off + mid_cu->length > sect_off)) - ... - of per_cu->length. - - Fix this similar to the per_cu->dwarf_version case, by only setting it if - needed, and otherwise verifying that the same value is used. [ Note that the - same code is already present in the other cutu_reader constructor. ] - - Move this logic into into a member function set_length to make sure it's used - consistenly, and make the field private in order to enforce access through the - member functions, and rename it to m_length. - - This exposes (running test-case gdb.dwarf2/fission-reread.exp) that in - fill_in_sig_entry_from_dwo_entry, the m_length field is overwritten. - For now, allow for that exception. - - While we're at it, make sure that the length is set before read. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29344 - -2022-07-11 Tom de Vries - - [gdb/symtab] Use comp_unit_head::get_length - There's a spot in read_comp_units_from_section where we explictly use - initial_length_size to get the total length: - ... - this_cu->length = cu_header.length + cu_header.initial_length_size; - ... - - Instead, just use cu_header.get_length (). - - Tested on x86_64-linux. - -2022-07-11 GDB Administrator - - Automatic date update in version.in - -2022-07-10 Luis Machado - - Fix include guard naming for arch/aarch64-mte-linux.h - It should be ARCH_AARCH64_MTE_LINUX_H as opposed to ARCH_AARCH64_LINUX_H. - -2022-07-10 Youling Tang - - gdbserver: LoongArch: Add orig_a0 processing - Commit 736918239b16 ("gdb: LoongArch: add orig_a0 into register set") - introduced orig_a0, similar processing needs to be done in gdbserver. - - At the same time, add orig_a0 related comments. - -2022-07-10 Youling Tang - - gdbserver: LoongArch: Simplify code with register number macros - Move "enum loongarch_regnum" to gdb/arch/loongarch.h so that the - macro definitions can be used in gdbserver/linux-loongarch-low.cc - to simplify the code. - -2022-07-10 GDB Administrator - - Automatic date update in version.in - -2022-07-09 Alan Modra - - gas: tc-tic54x.c hash tables - Cleaning up the subsym_hash memory is a real pain. Keys and values - entered into the table are quite diverse. In some cases the key is - allocated and thus needs to be freed, in others the key is a const - string. Values are similar, and in some cases not even a string. - Tidy this by inserting a new subsym_ent_t that describes key/value - type. This meant the math_hash table was no longer needed. The patch - also tidies how math functions are called, those that are supposed to - return int now no longer return their value in a float. - - * config/tc-tic54x.c (math_hash): Delete. - (subsym_proc_entry): Move earlier, make proc a union, merge with.. - (math_proc_entry): ..this. Delete type. - (math_procs): Merge into subsym_procs. - (subsym_ent_t): New. Use this type in subsym_hash.. - (stag_add_field_symbols, tic54x_var, tic54x_macro_info): ..here.. - (md_begin, subsym_create_or_replace, subsym_lookup): ..and here.. - (subsym_substitute): ..and here. Adjust subsym_proc_entry - function calls. Free replacement when not returned. - (subsym_get_arg): Adjust subsym_lookup. - (free_subsym_ent, subsym_htab_create ): New functions, use when - creating subsym_hash. - (free_local_label_ent, local_label_htab_create): Similarly. - (tic54x_remove_local_label): Delete. - (tic54x_clear_local_labels): Simplify. - (tic54x_asg): Use notes obstack to dup strings. - (tic54x_eval): Likewise. - (subsym_ismember): Likewise. - (math_cvi, math_int, math_sgn): Return int. - (tic54x_macro_start): Decrement macro_level before calling as_fatal. - (tic54x_md_end): New function. - * config/tc-tic54h.c (tic54x_md_end): Declare. - (md_end): Define. - -2022-07-09 Alan Modra - - gas: use notes_calloc in string hash - Using notes_calloc means all of the string hash table memory should - now be freed before gas exits, even though htab_delete isn't called. - This also means that the hash table free_f and del_f must be NULL, - because freeing notes obstack memory results in all more recently - allocated notes memory being freed too. So hash table resizing won't - free any memory, and will be a little faster. Also, htab_delete won't - do anything (and be quick about it). - - Since htab_traverse can also resize hash tables (to make another - traversal faster if the table is largely empty), stop that happening - when only one traversal is done. - - * as.h: Reorder hash.h after symbols.h for notes_calloc decl. - * hash.h (str_htab_create): Use notes_calloc. Do not free. - * symbols.c (resolve_local_symbol_values): Don't resize - during hash table traversal. - * config/obj-elf.c (elf_frob_file_after_relocs): Likewise. - * config/tc-ia64.c (ia64_adjust_symtab, ia64_frob_file): Likewise. - * config/tc-nds32.c (nds32_elf_analysis_relax_hint): Likewise. - -2022-07-09 Alan Modra - - gas: target string hash tables - This allocates entries added to the string hash tables on the notes - obstack, so that at least those do not leak. A followup patch will - switch over the str_hash allocation to notes_calloc, which is why I - haven't implemented deleting all the target string hash tables. - - * config/obj-coff-seh.c (get_pxdata_name, alloc_pxdata_item): Use - notes obstack for string hash table entries. - * config/tc-alpha.c (get_alpha_reloc_tag, md_begin): Likewise. - * config/tc-h8300.c (md_begin): Likewise. - * config/tc-ia64.c (dot_rot, dot_pred_rel, dot_alias): Likewise. - * config/tc-nds32.c (nds32_relax_hint): Likewise. - * config/tc-riscv.c (riscv_init_csr_hash): Likewise. - * config/tc-score.c (s3_insert_reg): Likewise. - (s3_build_score_ops_hsh, s3_build_dependency_insn_hsh): Likewise. - * config/tc-score7.c (s7_build_score_ops_hsh): Likewise. - (s7_build_dependency_insn_hsh): Likewise. - * config/tc-tic4x.c (tic4x_asg): Likewise. - -2022-07-09 Alan Modra - - arc gas: don't leak arc_opcode_hash memory - The arc opcode hash table has entries that have a realloc'd field. - This doesn't lend itself to obstack allocation, so freeing must be - done with a purpose built hashtab del_f. - - * config/tc-arc.c (arc_opcode_free): New function. - (md_begin): Pass the above as del_f to htab_create_alloc. - (arc_md_end): New function. - * config/tc-arc.h (arc_md_end): Declare. - (md_end): Define. - -2022-07-09 Alan Modra - - i386 gas: don't leak op_hash or reg_hash memory - This tidies memory used by the two x86 gas string hash tables before - exiting. I'm using a two-pronged approach, firstly the obvious call - to htab_delete plus telling the libiberty/hashtab.c infrastructure to - free tuples generated by str_hash_insert, and secondly putting the x86 - core_optab memory on the notes obstack. It would be possible to free - core_optab memory by using a custom hash table del_f on x86, as I do - for arc, but a later patch will move all the string hash memory to the - notes obstack. - - * config/tc-i386.c (md_begin): Use notes_alloc for core_optab. - (386_md_end): New function. - * config/tc-i386.h (386_md_end): Declare. - (md_end): Define. - * hash.h (str_htab_create): Pass free as del_f. - -2022-07-09 Alan Modra - - ppc gas: don't leak ppc_hash memory - * config/tc-ppc.c (insn_obstack): New. - (insn_calloc): New function. - (ppc_setup_opcodes): Use insn_obstack for ppc_hash. - (ppc_md_end): New function. - * config/tc-ppc.h (ppc_md_end): Declare - (md_end): Define. - -2022-07-09 Alan Modra - - gas hash.h tidy - Only inline functions should be defined in hash.h, there's no benefit - in having multiple copies of hash_string_tuple and eq_string_tuple. - Also, use the table alloc_f when allocating tuples to be stored, so - that these functions are usable with different memory allocation - strategies. - - * hash.h (struct string_tuple, string_tuple_t): Move earlier. - (string_tuple_alloc): Add table param, allocate using table alloc_f. - (str_hash_insert): Adjust to suit. Call table->free_f when - entry is not used. - (hash_string_tuple, eq_string_tuple): Move to.. - * hash.c: ..here. - -2022-07-09 Alan Modra - - gas: rename md_end to md_finish - Currently md_end is typically used for some final actions rather than - freeing memory like other *_end functions. Rename it to md_finish, - and rename target implementation. The renaming of target functions - makes it possible to find them all with "grep md_finish", - eg. md_mips_end is renamed to mips_md_finish, not md_mips_finish. - This patch leaves a number of md_end functions unchanged, those that - either do nothing or deallocate memory, and calls them late. - - The idea here is that target maintainers implement md_end functions to - tidy memory, if anyone cares. Freeing persistent memory in gas is - not at all important, except that it can hide more important memory - leaks, those that happen once per some frequent gas operation, amongst - these unimportant memory leaks. - - * as.c (main): Rename md_end to md_finish. - * config/tc-alpha.c, * config/tc-alpha.h, - * config/tc-arc.c, * config/tc-arc.h, - * config/tc-arm.c, * config/tc-arm.h, - * config/tc-csky.c, * config/tc-csky.h, - * config/tc-ia64.c, * config/tc-ia64.h, - * config/tc-mcore.c, * config/tc-mcore.h, - * config/tc-mips.c, * config/tc-mips.h, - * config/tc-mmix.c, * config/tc-mmix.h, - * config/tc-msp430.c, * config/tc-msp430.h, - * config/tc-nds32.c, * config/tc-nds32.h, - * config/tc-ppc.c, * config/tc-ppc.h, - * config/tc-pru.c, * config/tc-pru.h, - * config/tc-riscv.c, * config/tc-riscv.h, - * config/tc-s390.c, * config/tc-s390.h, - * config/tc-sparc.c, * config/tc-sparc.h, - * config/tc-tic4x.c, * config/tc-tic4x.h, - * config/tc-tic6x.c, * config/tc-tic6x.h, - * config/tc-v850.c, * config/tc-v850.h, - * config/tc-xtensa.c, * config/tc-xtensa.h, - * config/tc-z80.c, * config/tc-z80.h: Similarly. - * output-file.c (output_file_close): Call md_end. - -2022-07-09 Alan Modra - - gas: set up notes obstack earlier - So that the notes obstack can be used for persistent storage in - parse_args. - - * as.c (parse_args): Use notes_alloc and notes_strdup. - (free_notes): New function. - (main): Init notes obstack, and arrange to be freed on exit. - * read.c (read_begin): Don't init notes obstack. - (read_end): Free cond_obstack. - * subsegs.c (subsegs_end): Don't free cond_obstack or notes. - -2022-07-09 Alan Modra - - gas: itbl_files - itbl_files seems to be debug code. Get rid of it. - - * as.c (struct itbl_file_list): Delete. - (itbl_files): Delete. - (parse_args): Don't keep itbl_files list. - -2022-07-09 Alan Modra - - gas: free sy_hash, macro_hash and po_hash - * macro.c (macro_end): New function. - * macro.h (macro_end): Declare. - * read.c (read_end, poend): New functions. - * read.h (read_end): Declare. - * symbols.c (symbol_end): New function. - * symbols.h (symbol_end): Declare. - * output-file.c (output_file_close): Call new *_end functions. - -2022-07-09 Alan Modra - - dw2gencfi.c: use notes obstack - Use notes obstack for dwcfi_hash entries, and free table. Freeing the - table makes memory checkers complain more about "definitely lost" - memory as we've moved some from the "still reachable" category. - That will be fixed with a later patch. - - * dw2gencfi.c (get_debugseg_name): Allocate on notes obstack. - (alloc_debugseg_item): Likewise. - (dwcfi_hash_find_or_make): Adjust failure path free. - (cfi_finish): Delete dwfci_hash. - -2022-07-09 Alan Modra - - expr.c make_expr_symbol: use notes obstack - * expr.c (make_expr_symbol): Use notes_alloc. - - read.c assign_symbol: use notes obstack for dummy listing frag - * read.c (assign_symbol): Use notes_calloc for dummy_frag. - - read.c s_include: use notes obstack for path - * read.c (s_include): Use notes obstack for path mem. - -2022-07-09 Alan Modra - - macro.c: use string hash from hash.h for macro_hash - Another case of duplicated hash.h code, the only minor difference - being that macro->format_hash was created with 7 entries vs. str_hash - with 16 entries. - - * macro.c (macro_init, define_macro): Use str_htab_create. - (do_formals, define_macro, macro_expand_body): Use str_hash_insert - (macro_expand_body): Use str_hash_find and str_hash_delete. - (delete_macro): Likewise. - (sub_actual, macro_expand, check_macro): Use str_hash_find. - (expand_irp): Use str_htab_create and str_hash_insert. - * macro.h (struct macro_struct): Tidy. - (struct macro_hash_entry, macro_hash_entry_t, hash_macro_entry), - (eq_macro_entry, macro_entry_alloc, macro_entry_find), - (struct formal_hash_entry, formal_hash_entry_t), - (hash_formal_entry, eq_formal_entry, formal_entry_alloc), - (formal_entry_find): Delete. - * config/tc-iq2000.c (iq2000_add_macro): Use str_htab_create - and str_hash_insert. - -2022-07-09 Alan Modra - - read.c: use string hash from hash.h for po_hash - po_hash code duplicates the str_hash code in hash.h for no good reason. - - * read.c (struct po_entry, po_entry_t): Delete. - (hash_po_entry, eq_po_entry, po_entry_alloc, po_entry_find): Delete. - (pop_insert): Use str_hash_insert. - (pobegin): Use str_htab_create. - (read_a_source_file, s_macro): Use str_hash_find. - -2022-07-09 Alan Modra - - free read_symbol_name string - read_symbol_name mallocs the string it returns. Free it when done. - - * read.c (read_symbol_name): Free name on error path. - * config/tc-ppc.c (ppc_GNU_visibility): Free name returned from - read_symbol_name. - (ppc_extern, ppc_globl, ppc_weak): Likewise. - -2022-07-09 Alan Modra - - gas: output_file_close - This is mostly a tidy with the aim of being able to free - out_file_name, but it does fix a possible attempt to unlink the output - file twice (not that that matters). - - * as.h (keep_it): New global. - * as.c (keep_it): Delete. - (close_output_file): Delete, merged into.. - * output-file.c (output_file_close): ..here. Delete parameter. - * output-file.h (output_file_close): Update prototype. - -2022-07-09 Alan Modra - - gas: utility notes memory alloc functions - Makes it a little easier to use the notes obstack for persistent - storage. - - * as.h (gas_mul_overflow): Define. - * symbols.h (notes_alloc, notes_calloc, notes_memdup), - (notes_strdup, notes_concat, notes_free): Declare. - * symbols.c (notes_alloc, notes_calloc, notes_memdup), - (notes_strdup, notes_concat, notes_free): New functions. - (save_symbol_name): Use notes_strdup. - (symbol_create, local_symbol_make, local_symbol_convert), - (symbol_clone, decode_local_label_name): Use notes_alloc. - -2022-07-09 Alan Modra - - gas: arm -mwarn-syms duplicates - arm gas is only supposed to warn once per symbol for -mwarn-syms, but - doesn't because the str_hash_find added with commit 629310abec88 - always returns NULL. That's so because the str_hash_insert inserts a - NULL value for the key,value pair. Let str_hash_insert do the job - instead. - - * config/tc-arm.c (arm_tc_equal_in_insn): Correct already_warned - logic. - * testsuite/gas/arm/pr18347.s: Modify to generate duplicate - warning without this patch. - -2022-07-09 Alan Modra - - Regenerate with automake-1.15.1 - Until we update the recommended versions of autoconf/automake, files - should be regenerated with automake-1.15.1 and autoconf-2.69. That's - not because we think those versions are golden, and newer versions are - bad. It's simply because maintainers want to be able to update - configury files without trouble, and if someone regenerates files with - automake-1.16.5 then --enable-maintainer-mode builds will hit errors: - - checking that generated files are newer than configure... configure.ac:26: error: version mismatch. This is Automake 1.15.1, - configure.ac:26: but the definition used by this AM_INIT_AUTOMAKE - configure.ac:26: comes from Automake 1.16.5. You should recreate - configure.ac:26: aclocal.m4 with aclocal and run automake again. - WARNING: 'automake-1.15' is probably too old. - - Correcting this requires regenerating the files by hand. - -2022-07-09 GDB Administrator - - Automatic date update in version.in - -2022-07-08 Tom Tromey - - Accept gdb.Value in more Python APIs - PR python/27000 points out that gdb.block_for_pc will accept a Python - integer, but not a gdb.Value. This patch corrects this oversight. - - I looked at all uses of GDB_PY_LLU_ARG and fixed these up to use - get_addr_from_python instead. I also looked at uses of GDB_PY_LL_ARG, - but those seemed relatively unlikely to be useful with a gdb.Value, so - I didn't change them. My thinking here is that a Value will typically - come from inferior memory, and something like a line number is not too - likely to be found this way. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=27000 - -2022-07-08 Tom Tromey - - Handle bool specially in gdb.set_parameter - PR python/29217 points out that gdb.parameter will return bool values, - but gdb.set_parameter will not properly accept them. This patch fixes - the problem by adding a special case to set_parameter. - - I looked at a fix involving rewriting set_parameter in C++. However, - this one is simpler. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29217 - -2022-07-08 Ludovic Courtès - - [gdb/build] Handle deprecation of scm_install_gmp_memory_functions - When building gdb with guile 3.0.8, we run into: - ... - gdb/guile/guile.c: In function \ - 'void gdbscm_initialize(const extension_language_defn*)': - gdb/guile/guile.c:680:5: error: 'scm_install_gmp_memory_functions' is \ - deprecated [-Werror=deprecated-declarations] - 680 | scm_install_gmp_memory_functions = 0; - | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - In file included from /usr/include/guile/3.0/libguile.h:128, - from gdb/guile/guile-internal.h:30, - from gdb/guile/guile.c:36: - /usr/include/guile/3.0/libguile/deprecated.h:164:20: note: declared here - 164 | SCM_DEPRECATED int scm_install_gmp_memory_functions; - | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - cc1plus: all warnings being treated as errors - make[1]: *** [Makefile:1896: guile/guile.o] Error 1 - ... - - The variable has been deprecated because it no longer has any effect. - - Fix this by disabling the specific deprecation warning. - - Also handle upcoming guile versions > 3.0, in which the variable will be - removed, by limiting the usage of the variable to guile versions <= 3.0. - - This does not break anything. The variable was merely used to address a - problem present in guile versions <= v3.0.5. - - Note that we don't limit the usage of the variable to guile versions <= 3.0.5, - because we want to support f.i. building against 3.0.6 and then using a shared - lib with 3.0.5. - - Tested on x86_64-linux. - - Co-Authored-By: Tom de Vries - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28994 - -2022-07-08 Tom de Vries - - [gdb/symtab] Fix assert in process_imported_unit_die - When running test-case gdb.dwarf2/dw2-symtab-includes.exp with target board - cc-with-debug-names, I run into: - ... - (gdb) maint expand-symtab dw2-symtab-includes.h^M - src/gdb/dwarf2/read.h:311: internal-error: unit_type: \ - Assertion `m_unit_type != 0' failed.^M - A problem internal to GDB has been detected,^M - further debugging may prove unreliable.^M - ----- Backtrace -----^M - FAIL: gdb.dwarf2/dw2-symtab-includes.exp: maint expand-symtab \ - dw2-symtab-includes.h (GDB internal error) - ... - - The assert was recently added in commit 2c474c46943 ("[gdb/symtab] Add get/set - functions for per_cu->lang/unit_type"). - - The assert is triggered here: - ... - /* We're importing a C++ compilation unit with tag DW_TAG_compile_unit - into another compilation unit, at root level. Regard this as a hint, - and ignore it. */ - if (die->parent && die->parent->parent == NULL - && per_cu->unit_type () == DW_UT_compile - && per_cu->lang () == language_cplus) - return; - ... - - We're trying to access unit_type / lang which hasn't been set yet. - - Normally, these are set during cooked index creation, but that's not the case - when using an index (or using -readnow). - - In other words, this lto binary reading speed optimization only works in the - normal use case. - - IWBN to have this working in all use cases, but for now, allow lang () and - unit_type () to return language_unknown and 0 here. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29321 - -2022-07-08 Tom de Vries - - [gdb/symtab] Fix segfault in dwarf2_per_objfile::symtab_set_p - When running test-case gdb.cp/cpexprs-debug-types.exp with target board - cc-with-debug-names, I run into: - ... - (gdb) print base::operator new^M - ^M - ^M - Fatal signal: Segmentation fault^M - ----- Backtrace -----^M - 0x57ea46 gdb_internal_backtrace_1^M - /home/vries/gdb_versions/devel/src/gdb/bt-utils.c:122^M - 0x57eae9 _Z22gdb_internal_backtracev^M - /home/vries/gdb_versions/devel/src/gdb/bt-utils.c:168^M - 0x75b8ad handle_fatal_signal^M - /home/vries/gdb_versions/devel/src/gdb/event-top.c:946^M - 0x75ba19 handle_sigsegv^M - /home/vries/gdb_versions/devel/src/gdb/event-top.c:1019^M - 0x7f795f46a8bf ???^M - 0x6d3cb1 _ZNK18dwarf2_per_objfile12symtab_set_pEPK18dwarf2_per_cu_data^M - /home/vries/gdb_versions/devel/src/gdb/dwarf2/read.c:1515^M - ... - - The problem is in this piece of code in dw2_debug_names_iterator::next: - ... - case DW_IDX_type_unit: - /* Don't crash on bad data. */ - if (ull >= per_bfd->tu_stats.nr_tus) - { - complaint (_(".debug_names entry has bad TU index %s" - " [in module %s]"), - pulongest (ull), - objfile_name (objfile)); - continue; - } - per_cu = per_bfd->get_cu (ull + per_bfd->tu_stats.nr_tus); - break; - ... - - The all_comp_units vector (which get_cu accesses) contains both CUs and TUs, - with CUs first. - - So to get the nth TU we need the element at "nr_cus + n", but - the code uses "nr_tus + n" instead. - - Fix this by using "nr_cus + n". - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29334 - -2022-07-08 Enze Li - - gdb: initialize the data_head variable to eliminate compilation warnings - On a machine with gcc 12, I get this warning: - - CXX nat/linux-btrace.o - In function ‘btrace_error linux_read_bts(btrace_data_bts*, btrace_target_info*, btrace_read_type)’, - inlined from ‘btrace_error linux_read_btrace(btrace_data*, btrace_target_info*, btrace_read_type)’ at ../gdb/nat/linux-btrace.c:935:29: - ../gdb/nat/linux-btrace.c:865:21: warning: ‘data_head’ may be used uninitialized [-Wmaybe-uninitialized] - 865 | pevent->last_head = data_head; - | ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~ - ../gdb/nat/linux-btrace.c: In function ‘btrace_error linux_read_btrace(btrace_data*, btrace_target_info*, btrace_read_type)’: - ../gdb/nat/linux-btrace.c:792:9: note: ‘data_head’ was declared here - 792 | __u64 data_head, data_tail; - | ^~~~~~~~~ - - Fix this by initializing the 'data_head' variable. - - Tested by rebuilding on x86_64 openSUSE Tumbleweed with gcc 12. - -2022-07-08 Andrew Burgess - - libopcodes/s390: add support for disassembler styling - This commit adds disassembler style to the libopcodes s390 - disassembler. This conversion was pretty straight forward, I just - converted the fprintf_func calls to fprintf_styled_func calls and - added an appropriate style. - - For testing the new styling I just assembled then disassembled the - source files in gas/testsuite/gas/s390 and manually checked that the - styling looked reasonable. - - If the user does not request styled output from objdump, then there - should be no change in the disassembler output after this commit. - -2022-07-08 Nick Clifton - - Fix regeneration of ld configure and makefiles - - Update release README with new version numbers - - Update version to 2.39.50 and regenerate files - - Add markers for 2.39 branch - -2022-07-08 GDB Administrator - - Automatic date update in version.in - -2022-07-07 Vladimir Mezentsev - - gprofng: fix regression in testing for not yet installed version - gprofng/ChangeLog - 2022-07-07 Vladimir Mezentsev - - * src/Settings.cc (Settings::read_rc): Read environment variable - GPROFNG_SYSCONFDIR. - * testsuite/lib/Makefile.skel: Export GPROFNG_SYSCONFDIR. - * testsuite/gprofng.display/display.exp: Shorten the list of tests. - -2022-07-07 Simon Marchi - - gdb: fix {rs6000_nat_target,aix_thread_target}::wait to not use inferior_ptid - Trying to run a simple program (empty main) on AIX, I get: - - (gdb) run - Starting program: /scratch/simark/build/gdb/a.out - Child process unexpectedly missing: There are no child processes.. - ../../src/binutils-gdb/gdb/inferior.c:304: internal-error: find_inferior_pid: Assertion `pid != 0' failed. - A problem internal to GDB has been detected, - further debugging may prove unreliable. - ----- Backtrace ----- - 0x10ef12a8 gdb_internal_backtrace_1() - ../../src/binutils-gdb/gdb/bt-utils.c:122 - 0x10ef1470 gdb_internal_backtrace() - ../../src/binutils-gdb/gdb/bt-utils.c:168 - 0x1004d368 internal_vproblem(internal_problem*, char const*, int, char const*, char*) - ../../src/binutils-gdb/gdb/utils.c:396 - 0x1004d8a8 internal_verror(char const*, int, char const*, char*) - ../../src/binutils-gdb/gdb/utils.c:476 - 0x1004c424 internal_error(char const*, int, char const*, ...) - ../../src/binutils-gdb/gdbsupport/errors.cc:55 - 0x102ab344 find_inferior_pid(process_stratum_target*, int) - ../../src/binutils-gdb/gdb/inferior.c:304 - 0x102ab4a4 find_inferior_ptid(process_stratum_target*, ptid_t) - ../../src/binutils-gdb/gdb/inferior.c:318 - 0x1061bae8 find_thread_ptid(process_stratum_target*, ptid_t) - ../../src/binutils-gdb/gdb/thread.c:519 - 0x10319e98 handle_inferior_event(execution_control_state*) - ../../src/binutils-gdb/gdb/infrun.c:5532 - 0x10315544 fetch_inferior_event() - ../../src/binutils-gdb/gdb/infrun.c:4221 - 0x10952e34 inferior_event_handler(inferior_event_type) - ../../src/binutils-gdb/gdb/inf-loop.c:41 - 0x1032640c infrun_async_inferior_event_handler(void*) - ../../src/binutils-gdb/gdb/infrun.c:9548 - 0x10673188 check_async_event_handlers() - ../../src/binutils-gdb/gdb/async-event.c:335 - 0x1066fce4 gdb_do_one_event() - ../../src/binutils-gdb/gdbsupport/event-loop.cc:214 - 0x10001a94 start_event_loop() - ../../src/binutils-gdb/gdb/main.c:411 - 0x10001ca0 captured_command_loop() - ../../src/binutils-gdb/gdb/main.c:471 - 0x10003d74 captured_main(void*) - ../../src/binutils-gdb/gdb/main.c:1329 - 0x10003e48 gdb_main(captured_main_args*) - ../../src/binutils-gdb/gdb/main.c:1344 - 0x10000744 main - ../../src/binutils-gdb/gdb/gdb.c:32 - --------------------- - ../../src/binutils-gdb/gdb/inferior.c:304: internal-error: find_inferior_pid: Assertion `pid != 0' failed. - A problem internal to GDB has been detected, - further debugging may prove unreliable. - Quit this debugging session? (y or n) - - This is due to some bit-rot in the AIX port, still relying on the entry - value of inferior_ptid in the wait methods. - - Problem #1 is in rs6000_nat_target::wait, here: - - /* Ignore terminated detached child processes. */ - if (!WIFSTOPPED (status) && pid != inferior_ptid.pid ()) - pid = -1; - - At this point, waitpid has returned an "exited" status for some pid, so - pid is non-zero. Since inferior_ptid is set to null_ptid on entry, the - pid returned by wait is not equal to `inferior_ptid.pid ()`, so we reset - pid to -1 and go to waiting again. Since there are not more children to - wait for, waitpid then returns -1 so we get here: - - if (pid == -1) - { - 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); - return inferior_ptid; - } - - We therefore return a "signalled" status with a null_ptid (again, - inferior_ptid is null_ptid). This confuses infrun, because if the - target returns a "signalled" status, it should be coupled with a ptid - for an inferior that exists. - - So, the first step is to fix the snippets above to not use - inferior_ptid. In the first snippet, use find_inferior_pid to see if - we know the event process. If there is no inferior with that pid, we - assume it's a detached child process to we ignore the event. That - should be enough to fix the problem, because it should make it so we - won't go into the second snippet. But still, fix the second snippet to - return an "ignore" status. This is copied from inf_ptrace_target::wait, - which is where rs6000_nat_target::wait appears to be copied from in the - first place. - - These changes, are not sufficient, as the aix_thread_target, which sits - on top of rs6000_nat_target, also relies on inferior_ptid. - aix_thread_target::wait, by calling pd_update, assumes that - rs6000_nat_target has set inferior_ptid to the appropriate value (the - ptid of the event thread), but that's not the case. pd_update - returns inferior_ptid - null_ptid - and therefore - aix_thread_target::wait returns null_ptid too, and we still hit the - assert shown above. - - Fix this by changing pd_activate, pd_update, sync_threadlists and - get_signaled_thread to all avoid using inferior_ptid. Instead, they - accept as a parameter the pid of the process we are working on. - - With this patch, I am able to run the program to completion: - - (gdb) r - Starting program: /scratch/simark/build/gdb/a.out - [Inferior 1 (process 11010794) exited normally] - - As well as break on main: - - (gdb) b main - Breakpoint 1 at 0x1000036c - (gdb) r - Starting program: /scratch/simark/build/gdb/a.out - - Breakpoint 1, 0x1000036c in main () - (gdb) c - Continuing. - [Inferior 1 (process 26083688) exited normally] - - Change-Id: I7c2613bbefe487d75fa1a0c0994423471d961ee9 - -2022-07-07 Pedro Alves - - Fix pedantically invalid DWARF in gdb.trace/unavailable-dwarf-piece.exp - The DWARF spec says: - - Any debugging information entry representing the declaration of an object, - module, subprogram or type may have DW_AT_decl_file, DW_AT_decl_line and - DW_AT_decl_column attributes, each of whose value is an unsigned integer - ^^^^^^^^ - constant. - - Grepping around the DWARF-assembler-based testcases, I noticed that - gdb.trace/unavailable-dwarf-piece.exp emits decl_line with - DW_FORM_sdata, a signed integer form. This commit tweaks it to use - DW_FORM_udata instead. - - Unsurprisingly, this: - - $ make check \ - TESTS="gdb.trace/unavailable-dwarf-piece.exp" \ - RUNTESTFLAGS="--target_board=native-gdbserver" - - ... still passes cleanly for me after this change. - - I've noticed this because current llvm-dwarfdump crashed on an - ROCm-internal DWARF-assembler-based testcase that incorrectly used - signed forms for DW_AT_decl_file/DW_AT_decl_line. - - The older llvm-dwarfdump found on Ubuntu 20.04 (LLVM 10) reads the - line numbers with signed forms as "0" instead of crashing. Here's the - before/after fix for gdb.trace/unavailable-dwarf-piece.exp with that - llvm-dwarfdump version: - - $ diff -up before.txt after.txt - --- before.txt 2022-07-07 13:21:28.387690334 +0100 - +++ after.txt 2022-07-07 13:21:39.379801092 +0100 - @@ -18,7 +18,7 @@ - DW_AT_name ("s") - DW_AT_byte_size (3) - DW_AT_decl_file (0) - - DW_AT_decl_line (0) - + DW_AT_decl_line (1) - - 0x0000002f: DW_TAG_member - DW_AT_name ("a") - @@ -41,7 +41,7 @@ - DW_AT_name ("t") - DW_AT_byte_size (3) - DW_AT_decl_file (0) - - DW_AT_decl_line (0) - + DW_AT_decl_line (1) - - 0x00000054: DW_TAG_member - DW_AT_name ("a") - - Change-Id: I5c866946356da421ff944019d0eca2607b2b738f - -2022-07-07 Tiezhu Yang - - gdb: LoongArch: Fix typos in code comments - "it’s" should be "it's". - -2022-07-07 Maciej W. Rozycki - - GDB/testsuite: Add coverage for `print -elements' command - We currently have no coverage for the `print -elements ...' command (or - `p -elements ...' in the shortened form), so add a couple of test cases - mimicking ones using corresponding `set print elements ...' values. - -2022-07-07 Tiezhu Yang - - gdb: LoongArch: Implement the push_dummy_call gdbarch method - According to "Procedure Calling Convention" in "LoongArch ELF ABI - specification" [1], implement the push_dummy_call gdbarch method - as clear as possible. - - [1] https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html#_procedure_calling_convention - -2022-07-07 Tsukasa OI - - RISC-V: Added Zfhmin and Zhinxmin. - This commit adds Zfhmin and Zhinxmin extensions (subsets of Zfh and - Zhinx extensions, respectively). In the process supporting Zfhmin and - Zhinxmin extension, this commit also changes how instructions are - categorized considering Zfhmin, Zhinx and Zhinxmin extensions. - - Detailed changes, - - * From INSN_CLASS_ZFH to INSN_CLASS_ZFHMIN: - - flh, fsh, fmv.x.h and fmv.h.x. - - * From INSN_CLASS_ZFH to INSN_CLASS_ZFH_OR_ZHINX: - - fmv.h. - - * From INSN_CLASS_ZFH_OR_ZHINX to INSN_CLASS_ZFH_OR_ZHINX: - - fneg.h, fabs.h, fsgnj.h, fsgnjn.h, fsgnjx.h, - fadd.h, fsub.h, fmul.h, fdiv.h, fsqrt.h, fmin.h, fmax.h, - fmadd.h, fnmadd.h, fmsub.h, fnmsub.h, - fcvt.w.h, fcvt.wu.h, fcvt.h.w, fcvt.h.wu, - fcvt.l.h, fcvt.lu.h, fcvt.h.l, fcvt.h.lu, - feq.h, flt.h, fle.h, fgt.h, fge.h, - fclass.h. - - * From INSN_CLASS_ZFH_OR_ZHINX to INSN_CLASS_ZFHMIN_OR_ZHINXMIN: - - fcvt.s.h and fcvt.h.s. - - * From INSN_CLASS_D_AND_ZFH_INX to INSN_CLASS_ZFHMIN_AND_D: - - fcvt.d.h and fcvt.h.d. - - * From INSN_CLASS_Q_AND_ZFH_INX to INSN_CLASS_ZFHMIN_AND_Q: - - fcvt.q.h and fcvt.h.q. - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_implicit_subsets): Change implicit - subsets. Zfh->Zicsr is not needed and Zfh->F is replaced with - Zfh->Zfhmin and Zfhmin->F. Zhinx->Zicsr is not needed and - Zhinx->Zfinx is replaced with Zhinx->Zhinxmin and - Zhinxmin->Zfinx. - (riscv_supported_std_z_ext): Added zfhmin and zhinxmin. - (riscv_multi_subset_supports): Rewrite handling for new - instruction classes. - (riscv_multi_subset_supports_ext): Updated. - (riscv_parse_check_conflicts): Change error message to include - zfh and zfhmin extensions. - - gas/ChangeLog: - - * testsuite/gas/riscv/zfhmin-d-insn-class-fail.s: New complex - error handling test. - * testsuite/gas/riscv/zfhmin-d-insn-class-fail-1.d: Likewise. - * testsuite/gas/riscv/zfhmin-d-insn-class-fail-1.l: Likewise. - * testsuite/gas/riscv/zfhmin-d-insn-class-fail-2.d: Likewise. - * testsuite/gas/riscv/zfhmin-d-insn-class-fail-2.l: Likewise. - * testsuite/gas/riscv/zfhmin-d-insn-class-fail-3.d: Likewise. - * testsuite/gas/riscv/zfhmin-d-insn-class-fail-3.l: Likewise. - * testsuite/gas/riscv/zfhmin-d-insn-class-fail-4.d: Likewise. - * testsuite/gas/riscv/zfhmin-d-insn-class-fail-4.l: Likewise. - * testsuite/gas/riscv/zfhmin-d-insn-class-fail-5.d: Likewise. - * testsuite/gas/riscv/zfhmin-d-insn-class-fail-5.l: Likewise. - * testsuite/gas/riscv/zhinx.d: Renamed from fp-zhinx-insns.d - and refactored. - * testsuite/gas/riscv/zhinx.s: Likewise. - - include/ChangeLog: - - * opcode/riscv.h (enum riscv_insn_class): Removed INSN_CLASS_ZFH, - INSN_CLASS_D_AND_ZFH_INX and INSN_CLASS_Q_AND_ZFH_INX. Added - INSN_CLASS_ZFHMIN, INSN_CLASS_ZFHMIN_OR_ZHINXMIN, - INSN_CLASS_ZFHMIN_AND_D and INSN_CLASS_ZFHMIN_AND_Q. - - opcodes/ChangeLog: - - * riscv-opc.c (riscv_opcodes): Change instruction classes for - Zfh and Zfhmin instructions. Fix `fcvt.h.lu' instruction - (two operand variant) mask. - -2022-07-07 Vladimir Mezentsev - - gprofng: adjust GPROFNG_VARIANT - GPROFNG_VARIANT depends on compiler options, not on $(host). - - gprofng/ChangeLog - 2022-07-06 Vladimir Mezentsev - - PR gprofng/29116 - * libcollector/configure.ac: Adjust GPROFNG_VARIANT. - * libcollector/configure: Rebuild. - -2022-07-07 Tsukasa OI - - RISC-V: Fix disassembling Zfinx with -M numeric - This commit fixes floating point operand register names from ABI ones - to dynamically set ones. - - gas/ChangeLog: - - * testsuite/gas/riscv/zfinx-dis-numeric.s: Test new behavior of - Zfinx extension and -M numeric disassembler option. - * testsuite/gas/riscv/zfinx-dis-numeric.d: Likewise. - - opcodes/ChangeLog: - - * riscv-dis.c (riscv_disassemble_insn): Use dynamically set GPR - names to disassemble Zfinx instructions. - -2022-07-07 Tsukasa OI - - RISC-V: Fix requirement handling on Zhinx+{D,Q} - This commit fixes how instructions are masked on Zhinx+Z{d,q}inx. - fcvt.h.d and fcvt.d.h require ((D&&Zfh)||(Zdinx&&Zhinx)) and - fcvt.h.q and fcvt.q.h require ((Q&&Zfh)||(Zqinx&&Zhinx)). - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_multi_subset_supports): Fix feature gate - on INSN_CLASS_{D,Q}_AND_ZFH_INX. - (riscv_multi_subset_supports_ext): Fix feature gate diagnostics - on INSN_CLASS_{D,Q}_AND_ZFH_INX. - - gas/ChangeLog: - - * testsuite/gas/riscv/fp-zhinx-insns.d: Add Zqinx to -march - for proper testing. - -2022-07-07 Alan Modra - - PR29320, 'struct obstack' declared inside parameter list - PR 29320 - * frags.h: Move declaration of struct obstack.. - * as.h: ..to here. - -2022-07-07 GDB Administrator - - Automatic date update in version.in - -2022-07-06 Ruud van der Pas - - gprofng: implement a functional gp-display-html - This patch enables the first support for the "gprofng display html" command. - This command works for C/C++ applications on x86_64. Using one or more gprofng - experiment directories as input, a new directory with html files is created. - Through the index.html file in this directory, the performance results may be - viewed in a browser. - - gprofng/Changelog: - 2022-06-28 Ruud van der Pas - - * gp-display-html/gp-display-html.in: implement first support for x86_64 and C/C++ - -2022-07-06 H.J. Lu - - elf: Copy p_align of PT_GNU_STACK for stack alignment - commit 74e315dbfe5200c473b226e937935fb8ce391489 - Author: H.J. Lu - Date: Mon Dec 13 19:46:04 2021 -0800 - - elf: Set p_align to the minimum page size if possible - - may ignore p_align of PT_GNU_STACK when copying ELF program header if - the maximum page size is larger than p_align of PT_LOAD segments. Copy - p_align of PT_GNU_STACK since p_align of PT_GNU_STACK describes stack - alignment, not page size, - - PR binutils/29319 - * elf.c (copy_elf_program_header): Copy p_align of PT_GNU_STACK - for stack alignment. - -2022-07-06 Jan Beulich - - x86: make D attribute usable for XOP and FMA4 insns - This once again allows to reduce redundancy in (and size of) the opcode - table. - - Don't go as far as also making D work on the two 5-operand XOP insns: - This would significantly complicate the code, as there the first - (immediate) operand would need special treatment in several places. - - Note that the .s suffix isn't being enabled to have any effect, for - being deprecated. Whereas neither {load} nor {store} pseudo prefixes - make sense here, as the respective operands are inputs (loads) only - anyway, regardless of order. Hence there is (as before) no way for the - programmer to request the alternative encoding to be used for register- - only insns. - - Note further that it is always the first original template which is - retained (and altered), to make sure the same encoding as before is - used for register-only insns. This has the slightly odd (but pre- - existing) effect of XOP register-only insns having XOP.W clear, but FMA4 - ones having VEX.W set. - -2022-07-06 Jan Beulich - - x86: fold two switch() statements in match_template() - I don't see why two of them were introduced (very long ago) using - similar fall-through logic. - -2022-07-06 Jan Beulich - - x86: fix 3-operand insn reverse-matching - The middle operand would have gone entirely unchecked, allowing e.g. - - vmovss %xmm0, %esp, %xmm2 - - to assemble successfully, or e.g. - - vmovss %xmm0, $4, %xmm2 - - causing an internal error. Alongside dealing with this also drop a - related comment, which hasn't been applicable anymore since the - introduction of 3-operand patterns with D set (and which perhaps never - had been logical to be there, as reverse-matched insns don't make it - there in the first place). - -2022-07-06 Bhuvanendra Kumar N - - Descriptive DWARF operations dump support for DW_AT_rank - DW_AT_rank is a dwarf-5 feature. - -2022-07-06 Jan Beulich - - x86: introduce a state stack for .arch - When using just slightly non-trivial combinations of .arch, it can be - quite useful to be able to go back to prior state without needing to - re-invoke perhaps many earlier directives and without needing to invoke - perhaps many "negative" ones. Like some other architectures allow - saving (pushing) and restoring (popping) present/prior state. - - For now require the same .code to be in effect for ".arch pop" that - was in effect for the corresponding ".arch push". - - Also change the global "no_cond_jump_promotion" to be bool, to match the - new struct field. - -2022-07-06 Jan Beulich - - x86: generalize disabling of sub-architectures - I never really understood upon what basis ".arch .no*" options were made - available. Let's not have any "criteria" at all, and simply allow - disabling of all of them. Then we also have all data for a sub-arch in - a single place, as we now only need a single table. - -2022-07-06 Jan Beulich - - x86: permit "default" with .arch - So far there was no way to reset the architecture to that assembly would - start with in the absence of any overrides (command line or directives). - Note that for Intel MCU "default" is merely an alias of "iamcu". - - While there also zap a stray @item from the doc section, as noticed - when inspecting the generated output (which still has some quirks, but - those aren't easy to address without re-flowing almost the entire - section). - -2022-07-06 Jan Beulich - - x86: don't leak sub-architecture accumulated strings - While it may not be necessary in i386_target_format() (but then setting - the variable to NULL also wouldn't be necessary), at least in the other - cases strings may already have accumulated. - -2022-07-06 GDB Administrator - - Automatic date update in version.in - -2022-07-05 Tom de Vries - - [gdb/exp] Fix internal error when printing C++ pointer-to-member - When running the test-case included with this patch, we run into: - ... - (gdb) print ptm^M - $1 = gdb/gdbtypes.h:695: internal-error: loc_bitpos: \ - Assertion `m_loc_kind == FIELD_LOC_KIND_BITPOS' failed.^M - ... - while printing a c++ pointer-to-member. - - Fix this by skipping static fields in cp_find_class_member, such that we have: - ... - (gdb) print ptm^M - $1 = &A::i^M - ... - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29294 - -2022-07-05 Tom Tromey - - Add gdb.Objfile.is_file attribute - Sometimes an objfile comes from memory and not from a file. It can be - useful to be able to check this from Python, so this patch adds a new - "is_file" attribute. - -2022-07-05 Tom Tromey - - Make 'import gdb.events' work - Pierre-Marie noticed that, while gdb.events is a Python module, it - can't be imported. This patch changes how this module is created, so - that it can be imported, while also ensuring that the module is always - visible, just as it was in the past. - - This new approach required one non-obvious change -- when running - gdb.base/warning.exp, where --data-directory is intentionally not - found, the event registries can now be nullptr. Consequently, this - patch probably also requires - - https://sourceware.org/pipermail/gdb-patches/2022-June/189796.html - - Note that this patch obsoletes - - https://sourceware.org/pipermail/gdb-patches/2022-June/189797.html - -2022-07-05 Xi Ruoyao - - gdb: LoongArch: add orig_a0 into register set - The basic support for LoongArch has been merged into the upstream Linux - kernel since 5.19-rc1 on June 5, 2022. This commit adds orig_a0 which - is added into struct user_pt_regs [1] to match the upstream kernel, and - then the upstream GDB will work with the upstream kernel. - - Note that orig_a0 was added into struct user_pt_regs in the development - cycle for merging LoongArch port into the upstream Linux kernel, so - earlier kernels (notably, the product kernel with version 4.19 used in - distros like UOS and Loongnix) don't have it. Inspect - arch/loongarch/include/uapi/asm/ptrace.h in the kernel tree to make sure. - To build upstream GDB for a kernel lacking orig_a0, it's necessary to - revert this commit locally. - - [1]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/loongarch/include/uapi/asm/ptrace.h#n24 - -2022-07-05 Bhuvanendra Kumar N - - Support for location and range lists for split-dwarf and dwarf-5. - Adding support for location and range lists for split-dwarf and dwarf-5. - Following issues are taken care. - 1. Display of the index values for DW_FORM_loclistx and DW_FORM_rnglistx. - 2. Display of .debug_loclists.dwo and .debug_rnglists.dwo sections. - - * dwarf.c(read_and_display_attr_value): Handle DW_FORM_loclistx - and DW_FORM_rnglistx for .dwo files. - (process_debug_info): Load .debug_loclists.dwo and - .debug_rnglists.dwo if exists. - (load_separate_debug_files): Load .debug_loclists and - .debug_rnglists if exists. - Include 2 entries in debug_displays table. - * dwarf.h (enum dwarf_section_display_enum): Include 2 entries. - -2022-07-05 Jan Beulich - - x86: introduce fake processor type to mark sub-arch entries in cpu_arch[] - This is in preparation of dropping the leading . from the strings. - - While there also move PROCESSOR_GENERIC{32,64} from the middle of AMD - entries to near the top. - -2022-07-05 Jan Beulich - - x86: macro-ize cpu_arch[] entries - Putting individual elements behind macros, besides (imo) improving - readability, will make subsequent (and likely also future) changes less - intrusive. - - Utilize this right away to pack the table a little more tightly, by - converting "skip" to bool and putting it earlier in a group of bitfields - together with "len". - -2022-07-05 Jan Beulich - - x86: de-duplicate sub-architecture strings accumulation - Introduce a helper function to replace 4 instances of similar code. Use - reconcat() to cover the previously explicit free(). - -2022-07-05 GDB Administrator - - Automatic date update in version.in - -2022-07-04 Nick Clifton - - Fix snafu in rust demangler recursion limit code - -2022-07-04 Alan Modra - - alloc gas seginfo on notes obstack - Lots of memory used in gas should go on this obstack. The patch also - frees all the gas obstacks on exit, which isn't a completely trivial - task. - - * subsegs.c (alloc_seginfo): New function. - (subseg_change, subseg_get): Use it. - (subsegs_end): New function. - * as.h (subsegs_end): Declare. - * output-file.c: Include subsegs.h - (stash_frchain_obs): New function. - (output_file_close): Save obstacks attached to output bfd before - closing. Call subsegs_end with the array of obstacks. - -2022-07-04 Alan Modra - - objcopy: bfd_alloc orelocation - This fixes an inconsequential objcopy memory leak. I'd normally - ignore reports of leaks like this one, that are merely one block or - fewer per section processed, since objcopy soon exits and frees all - memory. However I thought it worth providing support for allocating - memory on a bfd objalloc in objcopy and other utils. - - PR 29233 - * bucomm.c (bfd_xalloc): New function. - * bucomm.h (bfd_xalloc): Declare. - * objcopy.c (copy_relocations_in_section): Use it to allocate - array of reloc pointers. Rewrite code stripping relocs to do - without extra memory allocation. - -2022-07-04 Nick Clifton - - Synchronize libbierty sources with gcc. - -2022-07-04 Bhuvanendra Kumar N - - Modified changes for split-dwarf and dwarf-5. - * dwarf.c(process_debug_info): Include DW_TAG_skeleton_unit. - (display_debug_str_offsets): While dumping .debug_str_offsets.dwo, - pass proper str_offsets_base to fetch_indexed_string(). - (load_separate_debug_files): Skip DWO ID dump for dwarf-5. - -2022-07-04 Marcus Nilsson - - opcodes/avr: Implement style support in the disassembler - * disassemble.c: (disassemble_init_for_target): Set - created_styled_output for AVR based targets. - * avr-dis.c: (print_insn_avr): Use fprintf_styled_ftype - instead of fprintf_ftype throughout. - (avr_operand): Pass in and fill disassembler_style when - parsing operands. - -2022-07-04 Tom de Vries - - [gdb/symtab] Add get/set functions for per_cu->lang/unit_type - The dwarf2_per_cu_data fields lang and unit_type both have a dont-know - initial value (respectively language_unknown and (dwarf_unit_type)0), which - allows us to add certain checks, f.i. checking that that a field is not read - before written. - - Add get/set member functions for the two fields as a convenient location to - add such checks, make the fields private to enforce using the member - functions, and add the m_ prefix. - - Tested on x86_64-linux. - -2022-07-04 Jan Beulich - - gas/testsuite: properly exclude aout in all/weakref1u - Use the (wider) predicate rather than a triplet. This eliminates the sole - i386-msdos failure in the testsuite. - -2022-07-04 Jan Beulich - - x86: fold Disp32S and Disp32 - The only case where 64-bit code uses non-sign-extended (can also be - considered zero-extended) displacements is when an address size override - is in place for a memory operand (i.e. particularly excluding - displacements of direct branches, which - if at all - are controlled by - operand size, and then are still sign-extended, just from 16 bits). - Hence the distinction in templates is unnecessary, allowing code to be - simplified in a number of places. The only place where logic becomes - more complicated is when signed-ness of relocations is determined in - output_disp(). - - The other caveat is that Disp64 cannot be specified anymore in an insn - template at the same time as Disp32. Unlike for non-64-bit mode, - templates don't specify displacements for both possible addressing - modes; the necessary adjustment to the expected ones has already been - done in match_template() anyway (but of course the logic there needs - tweaking now). Hence the single template so far doing so is split. - -2022-07-04 Jan Beulich - - x86: restore masking of displacement kinds - Commit 7d5e4556a375 rendered the check near the end of what is now - i386_finalize_displacement() entirely dead for AT&T mode, since for - operands involving a displacement .unspecified will always be set. But - the logic there is bogus anyway - Intel syntax operand size specifiers - are of no interest there either. The only thing which matters in the - "displacement only" determination is .baseindex. - - Of course when masking displacement kinds we should not at the same time - also mask off other attributes. - - Furthermore the type mask returned by lex_got() also needs to be - adjusted: The only case where we want Disp32 (rather than Disp32S) is - when dealing with 32-bit addressing mode in 64-bit code. - -2022-07-04 Jan Beulich - - x86-64: improve handling of branches to absolute addresses - There are two related problems here: The use of "addr32" on a direct - branch would, besides causing a warning, result in operands to be - permitted which mistakenly are refused without "addr32". Plus at some - point not too long ago I'm afraid it may have been me who regressed the - relocation addends emitted for such branches. Correct both problems, - adding a testcase to guard against regressing this again. - -2022-07-04 Tsukasa OI - - RISC-V: Update Zihintpause extension version - Because ratified Zihintpause extension has a version number of 2.0 - (not 1.0), we should update the number. - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_supported_std_z_ext): Update version - number of Zihintpause extension. - -2022-07-04 GDB Administrator - - Automatic date update in version.in - -2022-07-03 GDB Administrator - - Automatic date update in version.in - -2022-07-02 Tom de Vries - - [gdb/symtab] Fix data race on per_cu->dwarf_version - When building gdb with -fsanitize=thread and gcc 12, and running test-case - gdb.dwarf2/dwz.exp, we run into a data race between thread T2 and the main - thread in the same write: - ... - Write of size 1 at 0x7b200000300c:^M - #0 cutu_reader::cutu_reader(dwarf2_per_cu_data*, dwarf2_per_objfile*, \ - abbrev_table*, dwarf2_cu*, bool, abbrev_cache*) gdb/dwarf2/read.c:6252 \ - (gdb+0x82f3b3)^M - ... - which is here: - ... - this_cu->dwarf_version = cu->header.version; - ... - - Both writes are called from the parallel for in dwarf2_build_psymtabs_hard, - this one directly: - ... - #1 process_psymtab_comp_unit gdb/dwarf2/read.c:6774 (gdb+0x8304d7)^M - #2 operator() gdb/dwarf2/read.c:7098 (gdb+0x8317be)^M - #3 operator() gdbsupport/parallel-for.h:163 (gdb+0x872380)^M - ... - and this via the PU import: - ... - #1 cooked_indexer::ensure_cu_exists(cutu_reader*, dwarf2_per_objfile*, \ - sect_offset, bool, bool) gdb/dwarf2/read.c:17964 (gdb+0x85c43b)^M - #2 cooked_indexer::index_imported_unit(cutu_reader*, unsigned char const*, \ - abbrev_info const*) gdb/dwarf2/read.c:18248 (gdb+0x85d8ff)^M - #3 cooked_indexer::index_dies(cutu_reader*, unsigned char const*, \ - cooked_index_entry const*, bool) gdb/dwarf2/read.c:18302 (gdb+0x85dcdb)^M - #4 cooked_indexer::make_index(cutu_reader*) gdb/dwarf2/read.c:18443 \ - (gdb+0x85e68a)^M - #5 process_psymtab_comp_unit gdb/dwarf2/read.c:6812 (gdb+0x830879)^M - #6 operator() gdb/dwarf2/read.c:7098 (gdb+0x8317be)^M - #7 operator() gdbsupport/parallel-for.h:171 (gdb+0x8723e2)^M - ... - - Fix this by setting the field earlier, in read_comp_units_from_section. - - The write in cutu_reader::cutu_reader() is still needed, in case - read_comp_units_from_section is not used (run the test-case with say, target - board cc-with-gdb-index). - - Make the write conditional, such that it doesn't trigger if the field is - already set by read_comp_units_from_section. Instead, verify that the - field already has the value that we're trying to set it to. - - Move this logic into into a member function set_version (in analogy to the - already present member function version) to make sure it's used consistenly, - and make the field private in order to enforce access through the member - functions, and rename it to m_dwarf_version. - - While we're at it, make sure that the version is set before read, to avoid - say returning true for "per_cu.version () < 5" if "per_cu.version () == 0". - - Tested on x86_64-linux. - -2022-07-02 Tom de Vries - - [gdb/testsuite] Fix gdb.base/early-init-file.exp with -fsanitize=thread - When building gdb with -fsanitize=thread, I run into: - ... - FAIL: gdb.base/early-init-file.exp: check startup version string has style \ - version - ... - due to this: - ... - warning: Found custom handler for signal 7 (Bus error) preinstalled.^M - warning: Found custom handler for signal 8 (Floating point exception) \ - preinstalled.^M - warning: Found custom handler for signal 11 (Segmentation fault) \ - preinstalled.^M - Some signal dispositions inherited from the environment (SIG_DFL/SIG_IGN)^M - won't be propagated to spawned programs.^M - ... - appearing before the "GNU gdb (GDB) $version" line. - - This is similar to the problem fixed by commit f0bbba7886f - ("gdb.debuginfod/fetch_src_and_symbols.exp: fix when GDB is built with - AddressSanitizer"). - - In that commit, the problem was fixed by starting gdb with -quiet, but using - that would mean the "GNU gdb (GDB) $version" line that we're trying to check - would disappear. - - Fix this instead by updating the regexp to allow the message. - - Tested on x86_64-linux. - -2022-07-02 GDB Administrator - - Automatic date update in version.in - -2022-07-01 Maciej W. Rozycki - - GDB/doc: Remove indentation from `print -elements' completion example - Remove indentation from the text of the manual after the example here: - - " Completion will in some cases guide you with a suggestion of what - kind of argument an option expects. For example: - - (gdb) print -elements - NUMBER unlimited - - Here, the option expects a number (e.g., '100'), not literal - 'NUMBER'. Such metasyntactical arguments are always presented in - uppercase." - - as this is a continuation of the same paragraph. - -2022-07-01 Maciej W. Rozycki - - GDB/doc: Remove extraneous spaces from completion examples - Completion results are usually different when the operation is applied - to a word that is or is not followed by a space. In some cases they are - equivalent, however a space would not be produced if completion was used - earlier on in the word processed. - - However in the manual we have completion examples given using a space - that actually prevents the example from working. E.g.: - - (gdb) info bre - - (nothing) and: - - (gdb) info bre - Display all 200 possibilities? (y or n) - - as it now goes on to propose the entire symbol table, while: - - (gdb) info bre - (gdb) info breakpoints - - does the right thing, but is not what is shown in the manual. - - In other cases an extraneous space is used that does not correspond to - the actual completion pattern shown, which gives an impression of - sloppiness. - - Remove extraneous spaces then from completion examples as appropriate. - -2022-07-01 Nick Clifton - - Add newline to the end of the rnglists displsy. - -2022-07-01 GDB Administrator - - Automatic date update in version.in - -2022-06-30 Maciej W. Rozycki - - GDB: Add `NUMBER' completion to `set' integer commands - Fix a completion consistency issue with `set' commands accepting integer - values and the special `unlimited' keyword: - - (gdb) complete print -elements - print -elements NUMBER - print -elements unlimited - (gdb) - - vs: - - (gdb) complete set print elements - set print elements unlimited - (gdb) - - (there is a space entered at the end of both commands, not shown here) - which also means if you strike with `set print elements ' input, - it will, annoyingly, complete to `set print elements unlimited' right - away rather than showing a choice between `NUMBER' and `unlimited'. - - Add `NUMBER' then as an available completion for such `set' commands: - - (gdb) complete set print elements - set print elements NUMBER - set print elements unlimited - (gdb) - - Adjust the testsuite accordingly. Also document the feature in the - Completion section of the manual in addition to the Command Options - section already there. - -2022-06-30 Bruno Larsen - - gdb/testsuite: Expand gdb.cp/mb-ctor.exp to test dynamic allocation - When testing GDB's ability to stop in constructors, gdb.cp/mb-ctor.exp - only tested objects allocated on the stack. This commit adds a couple of - dynamic allocations and tests if GDB can stop in it as well. - -2022-06-30 Nick Clifton - - Fix implementation of readelf's -wE and -wN options, - * dwarf.c (dwarf_select_sections_by_name): If the entry's value is - zero then clear the corresponding variable. - (dwarf_select_sections_by_letters): Likewise. - * testsuite/binutils-all/debuginfo.exp: Expect -WE and -wE - debuginfod tests to fail. - -2022-06-30 Tom de Vries - - [gdb] Block SIGTERM in worker threads - With gdb build with gcc-12 and -fsanitize=thread, and test-case - gdb.base/gdb-sigterm.exp, I run into: - ... - WARNING: ThreadSanitizer: data race (pid=9722)^M - Write of size 4 at 0x00000325bc68 by thread T1:^M - #0 handle_sigterm(int) src/gdb/event-top.c:1211 (gdb+0x8ec01f)^M - ... - Previous read of size 4 at 0x00000325bc68 by main thread:^M - [failed to restore the stack]^M - ^M - Location is global 'sync_quit_force_run' of size 4 at \ - 0x00000325bc68 (gdb+0x325bc68)^M - ... - SUMMARY: ThreadSanitizer: data race gdb/event-top.c:1211 in \ - handle_sigterm(int)^M - ... - and 3 more data races involving handle_sigterm and locations: - - active_ext_lang - - quit_flag - - heap block of size 40 - (XNEW (async_signal_handler) in create_async_signal_handler) - - This was reported in PR29297. - - The testcase executes a "kill -TERM $gdb_pid", which generates a - process-directed signal. - - A process-directed signal can be delivered to any thread, and what we see - here is the fallout of the signal being delivered to a worker thread rather - than the main thread. - - Fix this by blocking SIGTERM in the worker threads. - - [ I have not been able to reproduce this after it occurred for the first time, - so unfortunately I cannot confirm that the patch fixes the problem. ] - - Tested on x86_64-linux, with and without -fsanitize=thread. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29297 - -2022-06-30 Andrew Burgess - - gdb/doc: fix column widths in MI compatibility table - In passing I noticed that the column headings for the table of MI - compatibility and breaking changes, were overlapping, at least when - the PDF is generated on my machine. - - I propose giving slightly more space to the two version number - columns, this prevents the headers overlapping for me. - -2022-06-30 GDB Administrator - - Automatic date update in version.in - -2022-06-29 Pedro Alves - - Fix GDBserver regression due to change to avoid reading shell registers - Simon reported that the recent change to make GDB and GDBserver avoid - reading shell registers caused a GDBserver regression, caught with - ASan while running gdb.server/non-existing-program.exp: - - $ /home/smarchi/build/binutils-gdb/gdb/testsuite/../../gdb/../gdbserver/gdbserver stdio non-existing-program - ================================================================= - ==127719==ERROR: AddressSanitizer: heap-use-after-free on address 0x60f0000000e9 at pc 0x55bcbfa301f4 bp 0x7ffd238a7320 sp 0x7ffd238a7310 - WRITE of size 1 at 0x60f0000000e9 thread T0 - #0 0x55bcbfa301f3 in scoped_restore_tmpl::~scoped_restore_tmpl() /home/smarchi/src/binutils-gdb/gdbserver/../gdbsupport/scoped_restore.h:86 - #1 0x55bcbfa2ffe9 in post_fork_inferior(int, char const*) /home/smarchi/src/binutils-gdb/gdbserver/fork-child.cc:120 - #2 0x55bcbf9c9199 in linux_process_target::create_inferior(char const*, std::__debug::vector > const&) /home/smarchi/src/binutils-gdb/gdbserver/linux-low.cc:991 - #3 0x55bcbf954549 in captured_main /home/smarchi/src/binutils-gdb/gdbserver/server.cc:3941 - #4 0x55bcbf9552f0 in main /home/smarchi/src/binutils-gdb/gdbserver/server.cc:4084 - #5 0x7ff9d663b0b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x240b2) - #6 0x55bcbf8ef2bd in _start (/home/smarchi/build/binutils-gdb/gdbserver/gdbserver+0x1352bd) - - 0x60f0000000e9 is located 169 bytes inside of 176-byte region [0x60f000000040,0x60f0000000f0) - freed by thread T0 here: - #0 0x7ff9d6c6f0c7 in operator delete(void*) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:160 - #1 0x55bcbf910d00 in remove_process(process_info*) /home/smarchi/src/binutils-gdb/gdbserver/inferiors.cc:164 - #2 0x55bcbf9c4ac7 in linux_process_target::remove_linux_process(process_info*) /home/smarchi/src/binutils-gdb/gdbserver/linux-low.cc:454 - #3 0x55bcbf9cdaa6 in linux_process_target::mourn(process_info*) /home/smarchi/src/binutils-gdb/gdbserver/linux-low.cc:1599 - #4 0x55bcbf988dc4 in target_mourn_inferior(ptid_t) /home/smarchi/src/binutils-gdb/gdbserver/target.cc:205 - #5 0x55bcbfa32020 in startup_inferior(process_stratum_target*, int, int, target_waitstatus*, ptid_t*) /home/smarchi/src/binutils-gdb/gdbserver/../gdb/nat/fork-inferior.c:515 - #6 0x55bcbfa2fdeb in post_fork_inferior(int, char const*) /home/smarchi/src/binutils-gdb/gdbserver/fork-child.cc:111 - #7 0x55bcbf9c9199 in linux_process_target::create_inferior(char const*, std::__debug::vector > const&) /home/smarchi/src/binutils-gdb/gdbserver/linux-low.cc:991 - #8 0x55bcbf954549 in captured_main /home/smarchi/src/binutils-gdb/gdbserver/server.cc:3941 - #9 0x55bcbf9552f0 in main /home/smarchi/src/binutils-gdb/gdbserver/server.cc:4084 - #10 0x7ff9d663b0b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x240b2) - - previously allocated by thread T0 here: - #0 0x7ff9d6c6e5a7 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:99 - #1 0x55bcbf910ad0 in add_process(int, int) /home/smarchi/src/binutils-gdb/gdbserver/inferiors.cc:144 - #2 0x55bcbf9c477d in linux_process_target::add_linux_process_no_mem_file(int, int) /home/smarchi/src/binutils-gdb/gdbserver/linux-low.cc:425 - #3 0x55bcbf9c8f4c in linux_process_target::create_inferior(char const*, std::__debug::vector > const&) /home/smarchi/src/binutils-gdb/gdbserver/linux-low.cc:985 - #4 0x55bcbf954549 in captured_main /home/smarchi/src/binutils-gdb/gdbserver/server.cc:3941 - #5 0x55bcbf9552f0 in main /home/smarchi/src/binutils-gdb/gdbserver/server.cc:4084 - #6 0x7ff9d663b0b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x240b2) - - Above we see that in the non-existing-program case, the process gets - deleted before the starting_up flag gets restored to false. - - This happens because startup_inferior calls target_mourn_inferior - before throwing an error, and in GDBserver, unlike in GDB, mourning - deletes the process. - - Fix this by not using a scoped_restore to manage the starting_up flag, - since we should only clear it when startup_inferior doesn't throw. - - Change-Id: I67325d6f81c64de4e89e20e4ec4556f57eac7f6c - -2022-06-29 Maciej W. Rozycki - - GDB/testsuite: Tighten `set print elements' error check - Match the whole error message expected to be given rather than omitting - the part about the "unlimited" keyword. There's no point in omitting - the missing part first, and second with an upcoming change the part in - parentheses will no longer be a fixed string, so doing a full match will - ensure the algorithm correctly builds the message expected here. Also - avoid any wildcard matches. - -2022-06-29 Maciej W. Rozycki - - GDB: Remove extraneous full stops from `set' command error messages - With errors given for bad commands such as `set annotate' or `set width' - we produce an extraneous full stop within parentheses: - - (gdb) set annotate - Argument required (integer to set it to.). - (gdb) set width - Argument required (integer to set it to, or "unlimited".). - (gdb) - - This is grammatically incorrect, so remove the full stop and adjust the - testsuite accordingly. - -2022-06-29 Andrew Burgess - - gdb/doc: improve description of --data-disassemble opcodes output - Extend the description of the MI command --data-disassemble. - Specifically, expand the description of the 'opcodes' field to explain - how the bytes are formatted. - -2022-06-29 Yvan Roux - - gdb/arm: Only stack S16..S31 when FPU registers are secure - The FPCCR.TS bit is used to identify if FPU registers are considered - non-secure or secure. If they are secure, then callee saved registers - (S16 to S31) are stacked on exception entry or otherwise skipped. - -2022-06-29 Andrew Burgess - - opcodes/aarch64: split off creation of comment text in disassembler - The function aarch64_print_operand (aarch64-opc.c) is responsible for - converting an instruction operand into the textual representation of - that operand. - - In some cases, a comment is included in the operand representation, - though this (currently) only happens for the last operand of the - instruction. - - In a future commit I would like to enable the new libopcodes styling - for AArch64, this will allow objdump and GDB[1] to syntax highlight - the disassembler output, however, having operands and comments - combined in a single string like this makes such styling harder. - - In this commit, I propose to extend aarch64_print_operand to take a - second buffer. Any comments for the instruction are written into this - extra buffer. The two callers of aarch64_print_operand are then - updated to pass an extra buffer, and print any resulting comment. - - In this commit no styling is added, that will come later. However, I - have adjusted the output slightly. Before this commit some comments - would be separated from the instruction operands with a tab character, - while in other cases the comment was separated with two single spaces. - - After this commit I use a single tab character in all cases. This - means a few test cases needed updated. If people would prefer me to - move everyone to use the two spaces, then just let me know. Or maybe - there was a good reason why we used a mix of styles, I could probably - figure out a way to maintain the old output exactly if that is - critical. - - Other than that, there should be no user visible changes after this - commit. - - [1] GDB patches have not been merged yet, but have been posted to the - GDB mailing list: - https://sourceware.org/pipermail/gdb-patches/2022-June/190142.html - -2022-06-29 Carl Love - Andrew Burgess - - gdb/testsuite: fix gdb.base/break-idempotent.exp on ppc - When running the gdb.base/break-idempotent.exp test on ppc, I was - seeing some test failures (or rather errors), that looked like this: - - (gdb) watch local - Hardware watchpoint 2: local - - has_hw_wp_support: Hardware watchpoint detected - ERROR: no fileid for gcc2-power8 - ERROR: Couldn't send delete breakpoints to GDB. - ERROR OCCURED: can't read "gdb_spawn_id": no such variable - while executing - "expect { - -i 1000 -timeout 100 - -re ".*A problem internal to GDB has been detected" { - fail "$message (GDB internal error)" - gdb_internal_erro..." - ("uplevel" body line 1) - invoked from within - - What happens is that in break-idempotent.exp we basically do this: - - if {[prepare_for_testing "failed to prepare" $binfile $srcfile $opts]} { - continue - } - - # .... - - if {![skip_hw_watchpoint_tests]} { - test_break $always_inserted "watch" - } - - The problem with this is that skip_hw_watchpoint_tests, includes this: - - if { [istarget "i?86-*-*"] - || [istarget "x86_64-*-*"] - || [istarget "ia64-*-*"] - || [istarget "arm*-*-*"] - || [istarget "aarch64*-*-*"] - || ([istarget "powerpc*-*-linux*"] && [has_hw_wp_support]) - || [istarget "s390*-*-*"] } { - return 0 - } - - For powerpc only we call has_hw_wp_support. This is a caching proc - that runs a test within GDB to detect if we have hardware watchpoint - support or not. - - Unfortunately, to run this test we restart GDB, and when the test has - completed, we exit GDB. This means that in break-idempotent.exp, when - we call skip_hw_watchpoint_tests for the first time on powerpc, GDB - will unexpectedly be exited. When we later call delete_breakpoints we - see the errors I reported above. - - The fix is to call skip_hw_watchpoint_tests early, before we start GDB - as part of the break-idempotent.exp script, and store the result in a - variable, we can then check this variable in the script as needed. - - After this change break-idempotent.exp runs fine on powerpc. - -2022-06-29 Jan Beulich - - x86: drop stray NoRex64 from XBEGIN - Presumably this being there was a result of taking CALL as a reference - when adding the RTM insns. But with No_qSuf the attribute has no effect. - -2022-06-29 Vladimir Mezentsev - - gprofng: fix build when BUILD_MAN is false - gprofng/ChangeLog - 2022-06-28 Vladimir Mezentsev - - PR gprofng/29131 - * gp-display-html/Makefile.am: Set man_MANS only when BUILD_MAN is true. - * src/Makefile.am: Likewise. - * gp-display-html/Makefile.in: Rebuild. - * src/Makefile.in: Rebuild. - -2022-06-29 Vladimir Mezentsev - - gprofng: use $(sysconfdir) instead $(prefix)/etc - gprofng/ChangeLog - 2022-06-28 Vladimir Mezentsev - - PR gprofng/29191 - * src/Makefile.am: Use $(sysconfdir) instead $(prefix)/etc. - * src/Settings.cc: Likewise. - * src/Makefile.in: Rebuild. - -2022-06-29 Alan Modra - - Re: ld/x86: skip p_align-1 tests with unsuitable compiler - commit d0e0f9c87a3e results "ERROR: i586-linux-cc does not exist" if - cross-building an i586-linux target without a target compiler - installed. - - * testsuite/ld-elf/linux-x86.exp (compiler_honours_aligned): New. - Use it after first testing check_compiler_available. - -2022-06-29 GDB Administrator - - Automatic date update in version.in - -2022-06-28 Pedro Alves - - gdb+gdbserver/Linux: avoid reading registers while going through shell - For every stop, Linux GDB and GDBserver save the stopped thread's PC, - in lwp->stop_pc. This is done in save_stop_reason, in both - gdb/linux-nat.c and gdbserver/linux-low.cc. However, while we're - going through the shell after "run", in startup_inferior, we shouldn't - be reading registers, as we haven't yet determined the target's - architecture -- the shell's architecture may not even be the same as - the final inferior's. - - In gdb/linux-nat.c, lwp->stop_pc is only needed when the thread has - stopped for a breakpoint, and since when going through the shell, no - breakpoint is going to hit, we could simply teach save_stop_reason to - only record the stop pc when the thread stopped for a breakpoint. - - However, in gdbserver/linux-low.cc, lwp->stop_pc is used in more cases - than breakpoint hits (e.g., it's used in tracepoints & the - "while-stepping" feature). - - So to avoid GDB vs GDBserver divergence, we apply the same approach to - both implementations. - - We set a flag in the inferior (process in GDBserver) whenever it is - being nursed through the shell, and when that flag is set, - save_stop_reason bails out early. While going through the shell, - we'll only ever get process exits (normal or signalled), random - signals, and exec events, so nothing is lost. - - Change-Id: If0f01831514d3a74d17efd102875de7d2c6401ad - -2022-06-28 Tom de Vries - - [gdb/build] Fix gdb build with -fsanitize=thread and gcc 7 - When building gdb with system gcc 7.5.0, I run into: - ... - gdb/ia64-tdep.c: In function ‘int is_float_or_hfa_type_recurse(type*, type**)’: - gdb/ia64-tdep.c:3362:1: error: control reaches end of non-void function \ - [-Werror=return-type] - ... - - This is due to PR gcc/81275 - "-fsanitize=thread produce incorrect - -Wreturn-type warning", which has been fixed in gcc-8. - - Work around this by moving the default return outside the switch. - - Tested on x86_64-linux. - -2022-06-28 Clément Chigot - - bfd: handle codepage when opening files on MinGW - Even if MS docs say that CP_UTF8 should always be used on newer - applications, forcing it might produce undefined filename if the - encoding isn't UTF-8. - MinGW seems to call ___lc_codepage_func() in order to retrieve the - current thread codepage. - - bfd/ChangeLog: - - * bfdio.c (_bfd_real_fopen): Retrieve codepage with - ___lc_codepage_func() on MinGW. - -2022-06-28 Clément Chigot - - windres: add quotes around preprocessor cmd if needed - This patch ensures that the gcc binary called by windres is quoted if - needed. Otherwise, errors can occur if the gcc is under a folder having - a name containing a space (eg "Program Files"). - - binutils/ - * resrc.c (DEFAULT_PREPROCESSOR): Split into... - (DEFAULT_PREPROCESSOR_CMD): that... - (DEFAULT_PREPROCESSOR_ARGS): and that. - (look_for_default): Add quotes around the command if needed. - (read_rc_file): Adapt to new defines. - -2022-06-28 Nick Clifton - - Fix the display of the idnex values for DW_FORM_loclistx and DW_FORM_rnglistx. Correct the display of .debug.loclists sections. - PR 29267 - * dwarf.c (display_debug_rnglists): New function, broken out of.. - (display_debug_ranges): ... here. - (read_and_display_attr_value): Correct calculation of index - displayed for DW_FORM_loclistx and DW_FORM_rnglistx. - * testsuite/binutils-all/x86-64/pr26808.dump: Update expected - output. - -2022-06-28 Jan Beulich - - ld/x86: skip p_align-1 tests with unsuitable compiler - When the compiler doesn't properly arrange for foo's alignment, there's - no point even trying these tests. Report the situation as a single - "unsupported" test. - -2022-06-28 Alan Modra - - PowerPC64: align plt_branch stubs - plt_branch stubs are similar to plt_call stubs in that they branch - via bctr. Align them too. - - bfd/ - * elf64-ppc.c (ppc_size_one_stub): Align plt_branch stubs as for - plt_call stubs. - ld/ - * testsuite/ld-powerpc/elfv2exe.d: Adjust for plt_branch changes. - * testsuite/ld-powerpc/notoc.d: Likewise. - * testsuite/ld-powerpc/notoc.wf: Likewise. - * testsuite/ld-powerpc/notoc3.d: Likewise. - * testsuite/ld-powerpc/pr23937.d: Likewise. - -2022-06-28 Alan Modra - - PowerPC64: plt_stub_pad - * elf64-ppc.c (plt_stub_pad): Simplify parameters and untangle - from plt_stub_size. - (ppc_size_one_stub): Call plt_stub_size before plt_stub_pad to - provide size. Recalculate size if it might change. - -2022-06-28 Alan Modra - - PowerPC64: Tidy stub type changes - It made sense before I started using separate fields for main type and - sub type to add a difference in main type to the type (thus keeping - sub type unchanged). Not so much now. - - * elf64-ppc.c (ppc_merge_stub): Simplify stub type change. - (ppc_size_one_stub): Likewise. - -2022-06-28 Jiangshuai Li - - gdb:csky add pseudo regs for float and vector regs - In the existing CSKY architecture, there are at most 32 floating - and 16 vector registers. Float registers's count can be configured - as 16 or 32. In the future, the vector registers's count may be - extended to 32. - - The bit width of floating-point register is 64bits, and the bit - width of vector register is 128bit. - - Special points: in fr0~fr15 and vr0~vr15, each FRx is the lower - 64 bits of the corresponding VRx. - - Here, we will split each floating-point and vector register to - 32bits wide, add the corresponding pseudo registers, and finally - use them for the dwarf registers. - - There are 128 pseudo registers in total, s0~s127, including: - 1. s0 and s1 correspond to fr0, s4 and s5 correspond to fr1, and so on. - Every two separated pseudo registers correspond to a float register. - 2. s0, s1, s2 and s3 correspond to vr0; s4, s5, s6 and s7 correspond to vr1, - and so on. Every four pseudo registers corresponds to a vector register. - - Therefore, in s64~s127, there are general registers that are not actually - used. This part is to prepare for the expansion of vector registers to 32 - - Therefore, in s64~s127, half of the registers are actually unused. This - part is to prepare for the expansion of the vector register to 32. - -2022-06-28 Pekka Seppänen - - PR29293, elfnn-aarch64.c: def_protected member unintialized - PR 29293 - * elfnn-aarch64.c (elfNN_aarch64_link_hash_newfunc): Init def_protected. - -2022-06-28 Tsukasa OI - - RISC-V: Add 'Sstc' extension and its CSRs - This commit adds "stimecmp / vstimecmp" Extension (Sstc) and its CSRs. - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_supported_std_s_ext): Add 'Sstc' - extension to valid 'S' extension list. - - gas/ChangeLog: - - * config/tc-riscv.c (enum riscv_csr_class): Add CSR classes for - 'Sstc' extension. (riscv_csr_address): Add handling for new CSR - classes. - * testsuite/gas/riscv/csr-dw-regnums.s: Add new CSRs. - * testsuite/gas/riscv/csr-dw-regnums.d: Likewise. - * testsuite/gas/riscv/csr.s: Add new CSRs. - * testsuite/gas/riscv/csr-version-1p9p1.d: Likewise. - * testsuite/gas/riscv/csr-version-1p9p1.l: Likewise. - * testsuite/gas/riscv/csr-version-1p10.d: Likewise. - * testsuite/gas/riscv/csr-version-1p10.l: Likewise. - * testsuite/gas/riscv/csr-version-1p11.d: Likewise. - * testsuite/gas/riscv/csr-version-1p11.l: Likewise. - * testsuite/gas/riscv/csr-version-1p12.d: Likewise. - * testsuite/gas/riscv/csr-version-1p12.l: Likewise. - - include/ChangeLog: - - * opcode/riscv-opc.h (CSR_STIMECMP, CSR_STIMECMPH, - CSR_VSTIMECMP, CSR_VSTIMECMPH): New CSR macros. - -2022-06-28 Tsukasa OI - - RISC-V: Add 'Sscofpmf' extension with its CSRs - This commit adds Count Overflow and Mode-Based Filtering Extension - (Sscofpmf) and its CSRs. - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_supported_std_s_ext): Add 'Sscofpmf' - extension to valid 'S' extension list. - - gas/ChangeLog: - - * config/tc-riscv.c (enum riscv_csr_class): Add CSR classes for - 'Sscofpmf' extension. (riscv_csr_address): Add handling for new - CSR classes. - * testsuite/gas/riscv/csr-dw-regnums.s: Add new CSRs. - * testsuite/gas/riscv/csr-dw-regnums.d: Likewise. - * testsuite/gas/riscv/csr.s: Add new CSRs. - * testsuite/gas/riscv/csr-version-1p9p1.d: Likewise. - * testsuite/gas/riscv/csr-version-1p9p1.l: Likewise. - * testsuite/gas/riscv/csr-version-1p10.d: Likewise. - * testsuite/gas/riscv/csr-version-1p10.l: Likewise. - * testsuite/gas/riscv/csr-version-1p11.d: Likewise. - * testsuite/gas/riscv/csr-version-1p11.l: Likewise. - * testsuite/gas/riscv/csr-version-1p12.d: Likewise. - * testsuite/gas/riscv/csr-version-1p12.l: Likewise. - - include/ChangeLog: - - * opcode/riscv-opc.h (CSR_SCOUNTOVF, CSR_MHPMEVENT3H, - CSR_MHPMEVENT4H, CSR_MHPMEVENT5H, CSR_MHPMEVENT6H, - CSR_MHPMEVENT7H, CSR_MHPMEVENT8H, CSR_MHPMEVENT9H, - CSR_MHPMEVENT10H, CSR_MHPMEVENT11H, CSR_MHPMEVENT12H, - CSR_MHPMEVENT13H, CSR_MHPMEVENT14H, CSR_MHPMEVENT15H, - CSR_MHPMEVENT16H, CSR_MHPMEVENT17H, CSR_MHPMEVENT18H, - CSR_MHPMEVENT19H, CSR_MHPMEVENT20H, CSR_MHPMEVENT21H, - CSR_MHPMEVENT22H, CSR_MHPMEVENT23H, CSR_MHPMEVENT24H, - CSR_MHPMEVENT25H, CSR_MHPMEVENT26H, CSR_MHPMEVENT27H, - CSR_MHPMEVENT28H, CSR_MHPMEVENT29H, CSR_MHPMEVENT30H, - CSR_MHPMEVENT31H): New CSR macros. - -2022-06-28 Tsukasa OI - - RISC-V: Add 'Smstateen' extension and its CSRs - This commit adds State Enable Extension (Smstateen) and its CSRs. - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_supported_std_s_ext): Add 'Smstateen' - extension to valid 'S' extension list. - - gas/ChangeLog: - - * config/tc-riscv.c (enum riscv_csr_class): Add CSR classes for - 'Smstateen' extension. (riscv_csr_address): Add handling for - new CSR classes. - * testsuite/gas/riscv/csr-dw-regnums.s: Add new CSRs. - * testsuite/gas/riscv/csr-dw-regnums.d: Likewise. - * testsuite/gas/riscv/csr.s: Add new CSRs. - * testsuite/gas/riscv/csr-version-1p9p1.d: Likewise. - * testsuite/gas/riscv/csr-version-1p9p1.l: Likewise. - * testsuite/gas/riscv/csr-version-1p10.d: Likewise. - * testsuite/gas/riscv/csr-version-1p10.l: Likewise. - * testsuite/gas/riscv/csr-version-1p11.d: Likewise. - * testsuite/gas/riscv/csr-version-1p11.l: Likewise. - * testsuite/gas/riscv/csr-version-1p12.d: Likewise. - * testsuite/gas/riscv/csr-version-1p12.l: Likewise. - - include/ChangeLog: - - * opcode/riscv-opc.h (CSR_MSTATEEN0, CSR_MSTATEEN1, - CSR_MSTATEEN2, CSR_MSTATEEN3, CSR_SSTATEEN0, CSR_SSTATEEN1, - CSR_SSTATEEN2, CSR_SSTATEEN3, CSR_HSTATEEN0, CSR_HSTATEEN1, - CSR_HSTATEEN2, CSR_HSTATEEN3, CSR_MSTATEEN0H, CSR_MSTATEEN1H, - CSR_MSTATEEN2H, CSR_MSTATEEN3H, CSR_HSTATEEN0H, CSR_HSTATEEN1H, - CSR_HSTATEEN2H, CSR_HSTATEEN3H): New CSR macros. - -2022-06-28 Tsukasa OI - - RISC-V: Add new CSR feature gate handling (RV32,H) - To support feature gate like Smstateen && H, this commit adds certain - CSR feature gate handling. It also changes how RV32-only CSRs are - handled for cleanliness. - - gas/ChangeLog: - - * config/tc-riscv.c (riscv_csr_address): Add CSR feature gate - handling for H. Change handling on RV32. - -2022-06-28 Alan Modra - - Re: Disable execstack and rwx segments warnings for MIPS targets. - PR 29263 - * configure.ac: Fix typo. - * testsuite/ld-elf/elf.exp: Add mips to targets that need - --warn-execstack to pass first pr29072 test. - -2022-06-28 GDB Administrator - - Automatic date update in version.in - -2022-06-27 Bruno Larsen - - gdb/testsuite: update bug numbers from Gnats to bugzilla - Some tests link to outdated bug numbers when an XFAIL or a KFAIL happen. - - gdb.base/macscp.exp was referencing bug number 555, and the bug 7660 - mentions that it used to be 555 on the Gnats system and seems to relate - to the issue at hand. - - gdb.base/annota1.exp was referencing bug number 1270, and bug 8375 - mentions being number 1270 on Gnats, and mentions annota1 specifically, - so it seemed pretty obvious. - -2022-06-27 Tom de Vries - - [gdb/build] Fix build breaker with --enable-shared - When building gdb with --enable-shared, I run into: - ... - ld: build/zlib/libz.a(libz_a-inffast.o): relocation R_X86_64_32S against \ - `.rodata' can not be used when making a shared object; recompile with -fPIC - ld: build/zlib/libz.a(libz_a-inflate.o): warning: relocation against \ - `inflateResetKeep' in read-only section `.text' - collect2: error: ld returned 1 exit status - make[3]: *** [libbfd.la] Error 1 - ... - - This is a regression since commit a08bdb159bb ("[gdb/build] Fix gdbserver - build with -fsanitize=thread"). - - The problem is that a single case statement in configure is shared to handle - special requirements for both the host libiberty and host zlib, which has the - effect that only one is handled. - - Fix this by handling libiberty and zlib each in its own case statement. - - Build on x86_64-linux, with and without --enable-shared. - - ChangeLog: - - 2022-06-27 Tom de Vries - - * configure.ac: Set extra_host_libiberty_configure_flags and - extra_host_zlib_configure_flags in separate case statements. - * configure: Regenerate. - -2022-06-27 Pedro Alves - - Make GDBserver abort on internal error in development mode - Currently, if GDBserver hits some internal assertion, it exits with - error status, instead of aborting. This makes it harder to debug - GDBserver, as you can't just debug a core file if GDBserver fails an - assertion. I've had to hack the code to make GDBserver abort to debug - something several times before. - - I believe the reason it exits instead of aborting, is to prevent - potentially littering the filesystem of smaller embedded targets with - core files. I think I recall Daniel Jacobowitz once saying that many - years ago, but I can't be sure. Anyhow, that seems reasonable to me. - - Since we nowadays have a distinction between development and release - modes, I propose to make GDBserver abort on internal error if in - development mode, while keeping the status quo when in release mode. - - Thus, after this patch, in development mode, you get: - - $ ../gdbserver/gdbserver - ../../src/gdbserver/server.cc:3711: A problem internal to GDBserver has been detected. - captured_main: Assertion `0' failed. - Aborted (core dumped) - $ - - while in release mode, you'll continue to get: - - $ ../gdbserver/gdbserver - ../../src/gdbserver/server.cc:3711: A problem internal to GDBserver has been detected. - captured_main: Assertion `0' failed. - $ echo $? - 1 - - I do not think that this requires a separate configure switch. - - A "--target_board=native-extended-gdbserver" run on Ubuntu 20.04 ends - up with: - - === gdb Summary === - - # of unexpected core files 29 - ... - - for me, of which 8 are GDBserver core dumps, 7 more than without this - patch. - - Change-Id: I6861e08ad71f65a0332c91ec95ca001d130b0e9d - -2022-06-27 Nick Clifton - - Replace a run-time assertion failure with a warning message when parsing corrupt DWARF data. - PR 29289 - * dwarf.c (display_debug_names): Replace assert with a warning - message. - - Fix NULL pointer indirection when parsing corrupt DWARF data. - PR 29290 - * dwarf.c (read_and_display_attr_value): Check that debug_info_p - is set before dereferencing it. - - Have gold's File_read::do_read() function check the start parameter - PR 23765 - * fileread.cc (File_read::do_read): Check start parameter before - computing number of bytes to read. - -2022-06-27 Yvan Roux - - gdb/arm: Unwind Non-Secure callbacks from Secure - Without this changeset, the unwinding doesn't take into account - Non-Secure to Secure stack unwinding enablement status and - doesn't choose the proper SP to do the unwinding. - - This patch only unwinds the stack when Non-Secure to Secure - unwinding is enabled, previous SP is set w/r to the current mode - (Handler -> msp_s, Thread -> psp_s) and then the Secure stack is - unwound. Ensure thumb bit is set in PSR when needed. Also, drop - thumb bit from PC if set. - -2022-06-27 Nick Clifton - - Stop bogus warnings about DWARF indexed string offsets being too big. - * dwarf.c (fetch_indexed_string): Do not use length of first table - in string section as the length of every table in the section. - * testsuite/binutils-all/pr26112.r: Update expected output. - -2022-06-27 Tom de Vries - - [gdb/testsuite] Handle older python in gdb.python/py-send-packet.py - With python 3.4, I run into: - ... - Traceback (most recent call last):^M - File "", line 1, in ^M - File - "outputs/gdb.python/py-send-packet/py-send-packet.py", line 128, in \ - run_set_global_var_test^M - res = conn.send_packet(b"X%x,4:\x02\x02\x02\x02" % addr)^M - TypeError: Could not convert Python object: b'X%x,4:\x02\x02\x02\x02'.^M - Error while executing Python code.^M - ... - while with python 3.6 this works fine. - - The type of addr is , so the first thing to try is whether - changing it into a string works: - ... - addr_str = "%x" % addr - res = conn.send_packet(b"X%s,4:\x02\x02\x02\x02" % addr_str) - ... - which gets us the more detailed: - ... - TypeError: unsupported operand type(s) for %: 'bytes' and 'str' - ... - - Fix this by avoiding the '%' operator in the byte literal, and use instead: - ... - def xpacket_header (addr): - return ("X%x,4:" % addr).encode('ascii') - ... - res = conn.send_packet(xpacket_header(addr) + b"\x02\x02\x02\x02") - ... - - Tested on x86_64-linux, with python 3.4 and 3.6, and a backported version was - tested on the gdb-12-branch in combination with python 2.7. - -2022-06-27 Tom de Vries - - [gdb/testsuite] Fix gdb.reverse/i387-env-reverse.exp for -pie - When running test-case gdb.reverse/i387-env-reverse.exp for x86_64-linux with - target board unix/-m32/-fPIE/-pie, we run into: - ... - (gdb) PASS: gdb.reverse/i387-env-reverse.exp: push st0 - info register eax^M - eax 0x56550000 1448411136^M - (gdb) FAIL: gdb.reverse/i387-env-reverse.exp: verify eax == 0x8040000 - ... - - The problem is that the tested instruction (fstsw) only sets $ax, not $eax. - - Fix this by verifying $ax instead of $eax. - - Tested on x86_64-linux with target boards unix/-m32 and unix/-m32/-fPIE/-pie. - -2022-06-27 Tom de Vries - - [gdb/testsuite] Enable some test-cases for x86_64 -m32 - When trying to run test-case gdb.reverse/i387-env-reverse.exp for x86_64-linux - with target board unix/-m32, it's skipped. - - Fix this by using is_x86_like_target instead of istarget "i?86-*linux*". - - This exposes a number of duplicates, fix those by making the test names unique. - - Likewise in a couple of other test-cases. - - Tested on x86_64-linux with target boards unix/-m32. - -2022-06-27 Tom de Vries - - [gdb/testsuite] Workaround unnecessary .s file with gfortran 4.8 - After running test-case gdb.fortran/namelist.exp with gfortran 4.8.5, I'm left - with: - ... - $ git sti - On branch master - Your branch is up to date with 'origin/master'. - - Untracked files: - (use "git add ..." to include in what will be committed) - gdb/testsuite/lib/compiler.s - - nothing added to commit but untracked files present (use "git add" to track) - ... - - We're running into PR gcc/60447, which was fixed in gcc 4.9.0. - - Workaround this by first copying the source file to the temp dir, such that - the .s file is left there instead: - ... - $ ls build/gdb/testsuite/temp// - compiler.c compiler.F90 compiler.s - ... - - Tested on x86_64-linux. - -2022-06-27 Tom de Vries - - [gdb/testsuite] Skip gdb.fortran/namelist.exp for gfortran 4.8 - The test-case gdb.fortran/namelist.exp uses a gfortran feature (emitting - DW_TAG_namelist in the debug info) that has been supported since gfortran 4.9, - see PR gcc/37132. - - Skip the test for gfortran 4.8 and earlier. Do this using gcc_major_version, - and update it to be able to handle "gcc_major_version {gfortran-*} f90". - - Tested on x86_64-linux, with gfortran 4.8.5, 7.5.0, and 12.1.1. - -2022-06-27 Tom de Vries - - [gdb/symtab] Fix parsing of .debug_str_offsets header - When running test-case gdb.dwarf2/fission-mix.exp with target board dwarf64 - and gcc-12 (defaulting to DWARF5), I run into: - ... - (gdb) break func2^M - Offset from DW_FORM_GNU_str_index or DW_FORM_strx pointing outside of \ - .debug_str.dwo section in CU at offset 0x0 [in module fission-mix]^M - (gdb) FAIL: gdb.dwarf2/fission-mix.exp: break func2 - ... - - The .debug_str_offsets section has version 5, so as per the standard it has - it's own header, with initial length and version: - ... - Contents of the .debug_str_offsets.dwo section (loaded from fission-mix2.dwo): - - Length: 0x1c - Version: 0x5 - Index Offset [String] - 0 0 build/gdb/testsuite - 1 33 GNU C17 - 2 8f src/gdb/testsuite/gdb.dwarf2/fission-mix-2.c - ... - - But when trying to read the string offset at index 0 in the table (which - is 0), we start reading at offset 8, which points in the header, at the last - 4 bytes of the initial length (it's 12 bytes because of 64-bit dwarf), as well - at the 2-byte version field and 2 bytes of padding, so we get: - ... - (gdb) p /x str_offset - $1 = 0x500000000 - ... - which indeed is an offset that doesn't fit in the .debug_str section. - - The offset 8 is based on reader->cu->header.addr_size: - ... - static const char * - read_dwo_str_index (const struct die_reader_specs *reader, ULONGEST str_index) - { - ULONGEST str_offsets_base = reader->cu->header.version >= 5 - ? reader->cu->header.addr_size : 0; - ... - which doesn't in look in agreement with the standard. - - Note that this happens to give the right answer for 32-bit dwarf and - addr_size == 8, because then we have header size == - (initial length (4) + version (2) + padding (2)) == 8. - - Conversely, for 32-bit dwarf and addr_size == 4 (target board unix/-m32) - we run into a similar problem. It just happens to not trigger the warning, - instead we get the wrong strings, like "func2" for DW_AT_producer and - "build/gdb/testsuite" for DW_AT_name of the DW_TAG_compile_unit DIE. - - Fix this by parsing the .debug_str_offsets header in read_dwo_str_index. - - Add a FIXME that we should not parse this for every call. - - Tested on x86_64-linux. - -2022-06-27 Tom de Vries - - [gdb/build] Fix gdbserver build with -fsanitize=thread - [ Copied from gcc commit 153689603fd ("[gdb/build] Fix gdbserver build with - -fsanitize=thread"). ] - - When building gdbserver with -fsanitize=thread (added to CFLAGS/CXXFLAGS) we - run into: - ... - ld: ../libiberty/libiberty.a(safe-ctype.o): warning: relocation against \ - `__tsan_init' in read-only section `.text' - ld: ../libiberty/libiberty.a(safe-ctype.o): relocation R_X86_64_PC32 \ - against symbol `__tsan_init' can not be used when making a shared object; \ - recompile with -fPIC - ld: final link failed: bad value - collect2: error: ld returned 1 exit status - make[1]: *** [libinproctrace.so] Error 1 - ... - which looks similar to what is described in commit 78e49486944 ("[gdb/build] - Fix gdbserver build with -fsanitize=address"). - - The gdbserver component builds a shared library libinproctrace.so, which uses - libiberty and therefore requires the pic variant. The gdbserver Makefile is - setup to use this variant, if available, but it's not there. - - Fix this by listing gdbserver in the toplevel configure alongside libcc1, as a - component that needs the libiberty pic variant, setting: - ... - extra_host_libiberty_configure_flags=--enable-shared - ... - - Tested on x86_64-linux. - - ChangeLog: - - 2022-06-27 Tom de Vries - - * configure.ac: Build libiberty pic variant for gdbserver. - * configure: Regenerate. - -2022-06-27 Nick Clifton - - Disable execstack and rwx segments warnings for MIPS targets. - PR 29263 - * configure.ac: Move HPPA specific code from here... - * configure.tgt: ... to here. Add similar code for MIPS. - Move code for CRIS, MIPS and HPPA to block at start of file. - * configure: Regenerate. - -2022-06-27 Jan Beulich - - bfd: prune config.bfd's setting of targ_archs - The final "match all" case can take care of a few explicit entries: - Purge those. Also move s12z* into proper position (the table is - otherwise sorted, after all). - -2022-06-27 Jan Beulich - - drop XC16x bits - Commit 04f096fb9e25 ("Move the xc16x target to the obsolete list") moved - the architecture from the "obsolete but still available" to the - "obsolete / support removed" list in config.bfd, making the architecture - impossible to enable (except maybe via "enable everything" options"). - - Note that I didn't touch */po/*.po{,t} on the assumption that these - would be updated by some (half)automatic means. - -2022-06-27 Bhuvanendra Kumar N - - Fix location list offset address dump under DW_AT_location (dwarf-5) - For clang compiled objects with dwarf-5, location list offset address dump - under DW_AT_location is corrected, where DW_FORM_loclistx is used. While - dumping the location list offset, the address dumped is wrong where it was - refering to .debug_addr instead of .debug_loclists - - * dwarf.c (fetch_indexed_value): Add base_address as parameter and - use it to access the section offset. - (read_and_display_attr_value): Handle DW_FORM_loclistx form separately. - Pass loclists_base to fetch_indexed_value(). - -2022-06-27 Alan Modra - - PowerPC64 .branch_lt address - .branch_lt is really an extension of .plt, as is .iplt. We'd like all - of the PLT sections to be fixed relative to .TOC. after stub sizing, - because changes in offset to PLT entries might mean a change in stub - sizes. When -z relro, the relro layout does this by laying out - sections from the end of the relro segment. So for example, a change - in .eh_frame (which happens after stub sizing) will keep the same GOT - to PLT offset when -z relro. Not so when -z norelro, because then the - usual forward layout of section is done and .got is more aligned than - .branch_lt. - - * emulparams/elf64ppc.sh: Set .branch_lt address fixed relative - to .got. - * testsuite/ld-powerpc/elfv2exe.d: Adjust to suit. - -2022-06-27 Alan Modra - - -z relro relaxation and ld script SIZEOF - A number of targets use assignments like: - . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 12 ? 12 : 0, .); - (from i386) in linker scripts to put the end of the relro segment past - the header in .got.plt. Examination of testcases like those edited by - this patch instead sees the end of the relro segment being placed at - the start of .got.plt. For the i386 pie1 test: - - [ 9] .got.plt PROGBITS 00002000 001000 00000c 04 WA 0 0 4 - - GNU_RELRO 0x000f90 0x00001f90 0x00001f90 0x00070 0x00070 R 0x1 - - A map file shows: - - .dynamic 0x0000000000001f90 0x70 - *(.dynamic) - .dynamic 0x0000000000001f90 0x70 tmpdir/pie1.o - 0x0000000000001f90 _DYNAMIC - - .got 0x0000000000002000 0x0 - *(.got) - .got 0x0000000000002000 0x0 tmpdir/pie1.o - *(.igot) - 0x0000000000002ff4 . = DATA_SEGMENT_RELRO_END (., (SIZEOF (.got.plt) >= 0xc)?0xc:0x0) - - .got.plt 0x0000000000002000 0xc - *(.got.plt) - .got.plt 0x0000000000002000 0xc tmpdir/pie1.o - 0x0000000000002000 _GLOBAL_OFFSET_TABLE_ - - The DATA_SEGMENT_RELRO_END value in the map file is weird too. All of - this is triggered by SIZEOF (.got.plt) being evaluated wrongly as - zero. Fix it by taking into account the action of - lang_reset_memory_regions during relaxation. - - * ldexp.c (fold_name ): Use rawsize if size has been reset. - * ldlang.c (lang_size_sections_1): Don't reset processed_vma here. - * testsuite/ld-i386/pie1.d: Adjust to suit. - * testsuite/ld-x86-64/pr20830a.d: Likewise. - * testsuite/ld-x86-64/pr20830b.d: Likewise. - * testsuite/ld-x86-64/pr21038a.d: Likewise. - * testsuite/ld-x86-64/pr21038b.d: Likewise. - * testsuite/ld-x86-64/pr21038c.d: Likewise. - -2022-06-27 GDB Administrator - - Automatic date update in version.in - -2022-06-26 GDB Administrator - - Automatic date update in version.in - -2022-06-25 Fangrui Song - - arm: Define elf_backend_extern_protected_data to 0 [PR 18705] - Similar to commit 4fb55bf6a9606eb7b626c30a9f4e71d6c2d4fbb2 for aarch64. - - Commit b68a20d6675f1360ea4db50a9835c073675b9889 changed ld to produce - R_ARM_GLOB_DAT but that defeated the purpose of protected visibility - as an optimization. Restore the previous behavior (which matches - ld.lld) by defining elf_backend_extern_protected_data to 0. - -2022-06-25 Tom Tromey - - Fix corrupt DWARF in dw2-double-set-die-type - The dw2-double-set-die-type.exp test case caused an AddressSanitizer - failure in the new DWARF scanner. - - The immediate cause was bad DWARF in the test -- in particular, the - the sibling attribute here: - - <2><181>: Abbrev Number: 33 (DW_TAG_subprogram) - <182> DW_AT_external : 1 - <183> DW_AT_name : address - <18b> DW_AT_type : <0x171> - <18f> DW_AT_declaration : 1 - <190> DW_AT_sibling : <0x1a1> - ... - <1><1a1>: Abbrev Number: 23 (DW_TAG_pointer_type) - <1a2> DW_AT_byte_size : 4 - <1a3> DW_AT_type : <0x1a7> - - ...points to a "sibling" DIE that is at a different child depth. - - Because this test case doesn't really require sibling attributes, this - patch fixes the problem by removing them from the test. - - Note that gdb is not generally robust against malformed DWARF. - Detecting and compensating for this problem would probably be - expensive and, IMO, is better left to some (still hypothetical) DWARF - linter. - -2022-06-25 Tom Tromey - - Fix end of CU calculation in cooked_indexer::index_dies - cooked_indexer::index_dies incorrect computes the end of the current - CU in the .debug_info. This isn't readily testable without writing - intentionally corrupt DWARF, but it's apparent through observation: it - is currently based on 'info_ptr', which does not always point to the - start of the CU. This patch fixes the expression. Tested on x86-64 - Fedora 34. - -2022-06-25 Tiezhu Yang - - gdb: LoongArch: Implement loongarch_linux_syscall_next_pc() - When FRAME is at a syscall instruction, return the PC of the next - instruction to be executed. - - gdb: LoongArch: Define register numbers and clean up code - This commit defines register numbers of various important registers, - we can use them directly in the related code, and also clean up some - code to make them more clear and readable. - -2022-06-25 GDB Administrator - - Automatic date update in version.in - -2022-06-24 Pedro Alves - - Eliminate TUI/CLI observers duplication - For historical reasons, the CLI and the TUI observers are basically - exact duplicates, except for the downcast: - - cli: - struct cli_interp *cli = as_cli_interp (interp); - tui: - struct interp *tui = as_tui_interp (interp); - - and how they get at the interpreter's ui_out: - - cli: - cli->cli_uiout - tui: - tui->interp_ui_out () - - Since interp_ui_out() is a virtual method that also works for the CLI - interpreter, and, both the CLI and the TUI interpreters inherit from - the same base class (cli_interp_base), we can convert the CLI - observers to cast to cli_interp_base instead and use interp_ui_out() - too. With that, the CLI observers will work for the TUI interpreter - as well. This lets us completely eliminate the TUI observers. That's - what this commit does. - - Change-Id: Iaf6cf12dfa200ed3ab203a895a72b69dfedbd6e0 - -2022-06-24 Pedro Alves - - Revert "Delete delete_thread_silent" - Turns out we'll be gaining a new use of this function very soon, the - incoming AMDGPU port needs it. Let's add it back, as it isn't really - hurting anything. - - This reverts commit 39b8a8090ed7e8967ceca3655aa5f3a2ae91219d. - -2022-06-24 Yvan Roux - - gdb/arm: Update the value of active sp when base sp changes - For Arm Cortex-M33 with security extensions, there are 4 different - stacks pointers (msp_s, msp_ns, psp_s, psp_ns). - When plain "sp" is updated during unwinding of the stack, the active - stack pointer of the 4 stack pointers needs to be kept in sync. - -2022-06-24 Andrew Burgess - - gdb/testsuite: remove unneeded calls to get_compiler_info - It is not necessary to call get_compiler_info before calling - test_compiler_info, and, after recent commits that removed setting up - the gcc_compiled, true, and false globals from get_compiler_info, - there is now no longer any need for any test script to call - get_compiler_info directly. - - As a result every call to get_compiler_info outside of lib/gdb.exp is - redundant, and this commit removes them all. - - There should be no change in what is tested after this commit. - -2022-06-24 Andrew Burgess - - gdb/testsuite: remove global gcc_compiled from gdb.exp - After this commit the gcc_compiled global is no longer exported from - lib/gdb.exp. In theory we could switch over all uses of gcc_compiled - to instead call test_compiler_info directly, however, I have instead - added a new proc to gdb.exp: 'is_c_compiler_gcc'. I've then updated - the testsuite to call this proc instead of using the global. - - Having a new proc specifically for this task means that we have a - single consistent pattern for detecting gcc. By wrapping this logic - within a proc that calls test_compiler_info, rather than using the - global, means that test scripts don't need to call get_compiler_info - before they read the global, simply calling the new proc does - everything in one go. - - As a result I've been able to remove the get_compiler_info calls from - all the test scripts that I've touched in this commit. - - In some of the tests e.g. gdb.dwarf2/*.exp, the $gcc_compiled flag was - being checked at the top of the script to decide if the whole script - should be skipped or not. In these cases I've called the new proc - directly and removed all uses of gcc_compiled. - - In other cases, e.g. most of the gdb.base scripts, there were many - uses of gcc_compiled. In these cases I set a new global gcc_compiled - near the top of the script, and leave the rest of the script - unchanged. - - There should be no changes in what is tested after this commit. - -2022-06-24 Pedro Alves - - Include count of unexpected core files in gdb.sum summary - If GDB, GDBserver, a testcase program, Valgrind, etc. unexpectedly - crash while running the GDB testsuite, and you've setup your machine - such that core files are dumped in the current directory instead of - being shoved somewhere by abrt, apport, or similar (as you should for - proper GDB testing), you'll end up with an unexpected core file in the - $build/gdb/testsuite/ directory. - - It can happen that GDB, GDBserver, etc. even crashes _after_ gdb_exit, - during teardown, and thus such a crash won't be noticed by looking at - the gdb.sum file at all. This commit aims at improving that, by - including a new "unexpected core files" line in the testrun summary. - - For example, here's what I get on x86-64 Ubuntu 20.04, with this - patch: - - === gdb Summary === - - # of unexpected core files 12 << new info - # of expected passes 107557 - # of unexpected failures 35 - # of expected failures 77 - # of unknown successes 2 - # of known failures 114 - # of untested testcases 31 - # of unsupported tests 139 - - I have my core pattern setup like this: - - $ cat /proc/sys/kernel/core_pattern - core.%e.%p.%h.%t - - That's: - - %e: executable filename - %p: pid - %h: hostname - %t: UNIX time of dump - - and so I get these core files: - - $ ls -1 testsuite/core.* - testsuite/core.connect-with-no.216191.nelson.1656002431 - testsuite/core.connect-with-no.217729.nelson.1656002431 - testsuite/core.gdb.194247.nelson.1656002423 - testsuite/core.gdb.226014.nelson.1656002435 - testsuite/core.gdb.232078.nelson.1656002438 - testsuite/core.gdb.352268.nelson.1656002441 - testsuite/core.gdb.4152093.nelson.1656002337 - testsuite/core.gdb.4154515.nelson.1656002338 - testsuite/core.gdb.4156668.nelson.1656002339 - testsuite/core.gdb.4158871.nelson.1656002341 - testsuite/core.gdb.468495.nelson.1656002444 - testsuite/core.vgdb.4192247.nelson.1656002366 - - where we can see that GDB crashed a number of times, but also - Valgrind's vgdb, and a couple testcase programs. Neither of which is - good. - - If your core_pattern is just "core" (but why??), then I guess that you - may end up with just a single core file in testsuite/. Still, that is - one core file too many. - - Above, we see a couple cores for "connect-with-no", which are the - result of gdb.server/connect-with-no-symbol-file.exp. This is a case - mentioned above -- while the program crashed, that happens during - testcase teardown, and it goes unnoticed (without this commit) by - gdb.sum results. Vis: - - $ make check TESTS="gdb.server/connect-with-no-symbol-file.exp" - ... - === gdb Summary === - - # of unexpected core files 2 - # of expected passes 8 - - ... - $ - - The tests fully passed, but still the testcase program crashed - somehow: - - $ ls -1 testsuite/core.* - testsuite/core.connect-with-no.941561.nelson.1656003317 - testsuite/core.connect-with-no.941682.nelson.1656003317 - - Against --target_board=native-extended-gdbserver it's even worse. I - get: - - # of unexpected core files 26 - - and note that when GDBserver hits an assertion failure, it exits with - error, instead of crashing with SIGABRT. I think that should be - changed, at least on development builds, but that would be for another - patch. After such patch, I suspect the number of unexpected cores - will be higher, as there are likely teardown GDBserver assertions that - we're not noticing. - - I decided to put this new info in the "gdb Summary" section, as that's - a place people already are used to looking at, either when looking at - the tail of gdb.sum, or when diffing gdb.sum files, and we've already - extended this section before, to include the count of DUPLICATE and - PATH problems, so there's precedent. - - Implementation-wise, the new line is appended after DejaGnu is - finished, with a shell script that is invoked by the Makefile. It is - done this way so that serial and parallel testing work the same way. - My initial cut at an implementation was in TCL, straight in - testsuite/lib/check-test-names.exp, where DUPLICATES and PATH are - handled, like so: - - @@ -148,6 +159,10 @@ namespace eval ::CheckTestNames { - $counts(paths,$which) - maybe_show_count "# of duplicate test names\t" \ - $counts(duplicates,$which) - + - + set cores [glob -nocomplain -directory $::objdir core*] - + maybe_show_count "# of unexpected core files\t" \ - + [llength $cores] - } - - But that would only work for serial testing, as in parallel testing, - the final gdb.sum is generated by aggregating the results of all the - individual gdb.sum files, and dg-extract-results.sh doesn't know about - our new summary line. And I don't think that dg-extract-results.sh - should be taught about it, since the count of core files is not - something that we want to count many times, once per testcase, and - then add up the subcounts at the end. Every time we count the core - files, we're already counting the final count. - - I considered using the Tcl implementation in serial mode, and the - script approach for parallel testing, but that has the obvious - downside of implementing and maintaining the same thing twice. In the - end, I settled on the script approach for serial mode too, which - requires making the "check-single" rule print the tail end of the - gdb.sum file, with a side effect being that if you look at the - terminal after a run (instead of at the gdb.sum file), you'll see the - "gdb Summary" section twice, once without the unexpected core lines - printed, and then another with. IMO, this isn't an issue; when - testing in parallel mode, if you look at the terminal after "make -jN - check", you'll also see multiple "gdb Summary" sections printed. - - Change-Id: I190b8d41856d49ad143854b6e3e6ccd7caa04491 - -2022-06-24 Pedro Alves - - Improve core file path detection & put cores in output dir - After a testrun, I noticed that I have some kernel-produced cores for - testcase programs, under build/gdb/testsuite/, which shouldn't be - there: - - $ ls -1 testsuite/core.* - testsuite/core.annota1.1274351.nelson.1656004407 - testsuite/core.annota3.1288474.nelson.1656004414 - testsuite/core.exitsignal.1240674.nelson.1656004391 - - I have my core pattern setup like this: - - $ cat /proc/sys/kernel/core_pattern - core.%e.%p.%h.%t - - That's: - - %e: executable filename - %p: pid - %h: hostname - %t: UNIX time of dump - - so it's easy to tell which program produced the core from the core - file name. - - From above, we can tell that the corresponding testcases are - gdb.base/annota1.exp, gdb.base/annota3.exp and - gdb.base/exitsignal.exp. - - At least gdb.base/annota1.exp and gdb.base/annota3.exp have code in - them to delete the core file. However, that isn't working for me, - because said code only looks for cores named exactly either "core" or - "core.PID", and my core_pattern doesn't match that. - - Another issue I noticed, is that I have not been running - gdb.base/bigcore.exp, for a similar reason. I get: - - Program terminated with signal SIGABRT, Aborted. - The program no longer exists. - (gdb) PASS: gdb.base/bigcore.exp: signal SIGABRT - UNTESTED: gdb.base/bigcore.exp: can't generate a core file - - But I actually have a core file under the testcase's output dir: - - $ find . -name "core.*" - ./testsuite/outputs/gdb.base/bigcore/core.bigcore.2306705.nelson.1656005213 - $ - - This commit fixes these things, by adding a find_core_file routine - that searches core files in a way that works with my core pattern as - well. This then also adds a convenience remove_core routine as a - wrapper around find_core_file that removes the found core file. - - In addition, it changes some testcases that expect to have their - program dump core, to switch the inferior's cwd to the testcase's - output dir, so that the core is dumped there instead of in - build/gdb/testsuite/. Some testcases were already doing that, but not - all. The idea is that any core file dumped in build/gdb/testsuite/ is - an unexpected core file. The next patch will add a count of such - unexpected core files to gdb.sum. - - Another change is that the directory changing is now done with "set - cwd" instead of with "cd". "set cwd" only affects the inferior cwd, - while "cd" affects GDB's cwd too. By using "set cwd" instead of "cd", - if GDB dumps core in these testcases, the GDB core dump will still end - up in build/gdb/testsuite/, and can thus be detected as an unexpected - core. - - Change-Id: I45068f21ffd4814350aaa8a3cc65cad5e3107607 - -2022-06-24 Andrew Burgess - - gdb: make use of RAII in run_inferior_call - In passing I noticed that there are three local variables in - run_inferior_call that are used to save, and then restore some state, - I think these could all be replaced with a RAII style scoped_restore - instead. - - Of the three locals that I've changed, the only one that I believe is - now restored in a different location is ui::async, before this commit - the async field was restored after a call to either delete_file_handle - or ui_register_input_event_handler, and after this commit, the field - is restored before these calls. However, I don't believe that either - of these functions depend on the value of the async field, so I - believe the commit is fine. - - Tested on x86-64/Linux passes with no regressions. - -2022-06-24 Pedro Alves - - Delete delete_thread_silent - delete_thread_silent is no longer used anywhere. Delete it. - - Change-Id: Iafcec12339861d5ab2e29c14d7b1f884c9e11c0f - -2022-06-24 GDB Administrator - - Automatic date update in version.in - -2022-06-23 Tom Tromey - - Don't declare cli_set_logging - cli_set_logging is declared but not defined. It's probably a leftover - from whenever interpreters were changed to use inheritance. This - patch removes the declaration. Tested by grep and rebuilding. - - Use PyBool_FromLong - I noticed a few spots that were explicitly creating new references to - Py_True or Py_False. It's simpler here to use PyBool_FromLong, so - this patch changes all the places I found. - -2022-06-23 Alan Modra - - PowerPC64: fix assertion in ppc_build_one_stub with -Os code - save_res stubs aren't written in ppc_build_one_stub, their offsets - (which are zero) should not be checked. - - * elf64-ppc.c (ppc_build_one_stub): Don't check save_res offsets. - -2022-06-23 Alan Modra - - Re: PowerPC64: stub debug dump - Let's show the current stub as well as the previous one. Of interest - is the current offset and a new field, id. Check that the build - hash table traversal is in the same order as sizing traversal too. - - * elf64-ppc.c (struct ppc_stub_hash_entry): Add id. - (struct ppc_link_hash_table): Add stub_id. - (stub_hash_newfunc): Init id and symtype. - (dump_stub): New function, extracted from.. - (dump_previous_stub): ..here. Deleted. - (ppc_build_one_stub): Sanity check stub id as well as offset. - Show current stub as well as previous. - (ppc_size_one_stub): Set stub id. - (ppc64_elf_size_stubs): Init stub_id before traversal. - (ppc64_elf_build_stubs): Likewise. - -2022-06-23 Fangrui Song - - aarch64: Allow PC-relative relocations against protected STT_FUNC for -shared - __attribute__((visibility("protected"))) void *foo() { - return (void *)foo; - } - - gcc -fpic -shared -fuse-ld=bfd fails with the confusing diagnostic: - - relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `foo' which may bind externally can not be used when making a shared object; recompile with -fPIC - - Call _bfd_elf_symbol_refs_local_p with local_protected==true to suppress - the error. The new behavior matches gold and ld.lld. - - Note: if some code tries to use direct access relocations to take the - address of foo (likely due to -fno-pic), the pointer equality will - break, but the error should be reported on the executable link, not on - the innocent shared object link. glibc 2.36 will give a warning at - relocation resolving time. - -2022-06-23 Fangrui Song - - aarch64: Define elf_backend_extern_protected_data to 0 [PR 18705] - Follow-up to commit 90b7a5df152a64d2bea20beb438e8b81049a5c30 - ("aarch64: Disallow copy relocations on protected data"). - - Commit 32f573bcb3aaa1c9defcad79dbb5851fcc02ae2d changed ld to produce - R_AARCH64_GLOB_DAT but that defeated the purpose of protected visibility - as an optimization. Restore the previous behavior (which matches - ld.lld) by defining elf_backend_extern_protected_data to 0. - -2022-06-23 GDB Administrator - - Automatic date update in version.in - -2022-06-22 Tom Tromey - - Use std::string for interpreter_p - The global interpreter_p is a manually-managed 'char *'. This patch - changes it to be a std::string instead, and removes some erroneous - comments. - - Move mi_interpreter to mi-interp.h - I noticed that touching interps.h caused a lot of recompilation. I - tracked this down to mi-common.h including this file. This patch - moves the MI interpreter to mi-interp.h, which cuts down on - recompilation when modifying interps.h. - - Use unique_xmalloc_ptr in interp - This changes interp::m_name to be a unique_xmalloc_ptr, removing some - manual memory management. It also cleans up the initialization of the - 'inited' member, and moves the 'private:' and 'public:' keywords to - their proper spots. - -2022-06-22 Fangrui Song - - aarch64: Disallow copy relocations on protected data - If an executable has copy relocations for extern protected data, that - can only work if the shared object containing the definition is built - with assumptions (a) the compiler emits GOT-generating relocations (b) - the linker produces R_*_GLOB_DAT instead of R_*_RELATIVE. Otherwise the - shared object uses its own definition directly and the executable - accesses a stale copy. Note: the GOT relocations defeat the purpose of - protected visibility as an optimization, and it turns out this never - worked perfectly. - - glibc 2.36 will warn on copy relocations on protected data. Let's - produce a warning at link time, matching ld.lld which has been used on - many aarch64 OSes. - - Note: x86 requires GNU_PROPERTY_NO_COPY_ON_PROTECTED to have the error. - This is to largely due to GCC 5's "x86-64: Optimize access to globals in - PIE with copy reloc" which started to use direct access relocations for - external data symbols in -fpie mode. - - GCC's aarch64 port does not have the change. Nowadays with most builds - switching to -fpie/-fpic, aarch64 mostly doesn't need to worry about - copy relocations. So for aarch64 we simply don't check - GNU_PROPERTY_NO_COPY_ON_PROTECTED. - -2022-06-22 Kumar N, Bhuvanendra - - Binutils support for split-dwarf and dwarf-5 - * dwarf.c (fetch_indexed_string): Added new parameter - str_offsets_base to calculate the string offset. - (read_and_display_attr_value): Read DW_AT_str_offsets_base - attribute. - (process_debug_info): While allocating memory and initializing - debug_information, do it for do_debug_info also, if its true. - (load_separate_debug_files): Load .debug_str_offsets if exists. - * dwarf.h (struct debug_info): Add str_offsets_base field. - -2022-06-22 Nelson Chu - - RISC-V: Reorder the prefixed extensions which are out of order. - This patch has been pending for almost a year... However, I noticed that - llvm can already re-order the extensions, even if they are out of orders. - Not really sure if they can also re-order the single letter extensions, - but at least we can do this for the multi-letter extensions in binutils. - - bfd/ - * elfxx-riscv.c (riscv_parse_prefixed_ext): Removed the code which are - used to check the prefixed extension orders. - gas/ - * testsuite/gas/riscv/march-fail-order-x-z.d: Removed since we will help - tp reorder the prefixed extensions for now. - * testsuite/gas/riscv/march-fail-order-x-z.l: Likewise. - * testsuite/gas/riscv/march-fail-order-x.d: Likewise. - * testsuite/gas/riscv/march-fail-order-x.l: Likewise. - * testsuite/gas/riscv/march-fail-order-z.d: Likewise. - * testsuite/gas/riscv/march-fail-order-z.l: Likewise. - -2022-06-22 Nelson Chu - - RISC-V: Use single h extension to control hypervisor CSRs and instructions. - According to the picture 28.1 in the current ISA spec, h is no larger the - multi-letter extension, it is a single extension after v. Therefore, this - patch fix the implementation, and use the single h to control hypervisor - CSRs and instructions, which we promised to do before. - - bfd/ - * elfxx-riscv.c (riscv_supported_std_ext): Added h with version 1.0 after v. - (riscv_supported_std_h_ext): Removed. - (riscv_all_supported_ext): Updated since riscv_supported_std_h_ext is removed. - (riscv_prefix_ext_class): Removed RV_ISA_CLASS_H. - (parse_config): Updated since riscv_prefix_ext_class is removed. - (riscv_recognized_prefixed_ext): Likewise. - (riscv_get_default_ext_version): Likewise. - (riscv_multi_subset_supports): Handle INSN_CLASS_H for hypervisor instructions. - (riscv_multi_subset_supports_ext): Likewise. - gas/ - * config/tc-riscv.c (riscv_csr_class): Added CSR_CLASS_H and CSR_CLASS_H_32 for - hypervisor CSRs. - (riscv_csr_address): Likewise. - * testsuite/gas/riscv/csr-version-1p10.d: Updated since hypervisor CSRs are - controlled by single h extension for now. - * testsuite/gas/riscv/csr-version-1p10.l: Likewise. - * testsuite/gas/riscv/csr-version-1p11.d: Likewise. - * testsuite/gas/riscv/csr-version-1p11.l: Likewise. - * testsuite/gas/riscv/csr-version-1p12.d: Likewise. - * testsuite/gas/riscv/csr-version-1p12.l: Likewise. - * testsuite/gas/riscv/csr-version-1p9p1.d: Likewise. - * testsuite/gas/riscv/csr-version-1p9p1.l: Likewise. - * testsuite/gas/riscv/h-ext-32.d: Added h to architecture string. - * testsuite/gas/riscv/h-ext-64.d: Likewise. - * testsuite/gas/riscv/march-fail-single-prefix-h: Removed since h is no - longer multi-letter extension. - * testsuite/gas/riscv/march-fail-unknown-h.d: Likewise. - include/ - * opcode/riscv-opc.h: Control hypervisor CSRs by h extension, rather than - the privileged spec verisons. - * opcode/riscv.h (riscv_insn_class): Added INSN_CLASS_H. - opcodes/ - * riscv-opc.c (riscv_opcodes): Control hypervisor instructions by h extension. - -2022-06-22 Tsukasa OI - - RISC-V: Add 'H' to canonical extension ordering - This commit adds 'H' to canonical extension ordering based on current - consensus (not officially ratified as a new ISA specification manual - but discussion for software compatibility is made). - - bfd/ChangeLog - - * elfxx-riscv.c (riscv_ext_canonical_order): Add 'H' for - canonical extension ordering based on current consensus. - -2022-06-22 Tsukasa OI - - RISC-V: Prepare i18n for required ISA extensions - Some strings returned by the riscv_multi_subset_supports_ext function - contain not just extension names but words like "and" and "or". - This commit wraps such strings with the gettext macro (_) for - internationalization in the future. - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_multi_subset_supports_ext): Wrap some - strings with the gettext macro to prepare future i18n. - -2022-06-22 Tsukasa OI - - RISC-V: Fix inconsistent error message (range) - This commit fixes inconsistent error message format involving compressed - funct fields. In specific, funct6 had an error message with range - 0..2^ ("0..64") unlike other funct fields with 0..2^-1 - (e.g. funct4 with "0..15"). - - gas/ChangeLog: - - * config/tc-riscv.c (riscv_ip): Fix inconsistent error message. - -2022-06-22 Marcus Nilsson - - readelf: replace xmalloc with malloc in slurp_relr_relocs - Using xmalloc makes the null check redundant since failing allocation - will exit the program. Instead use malloc and let the error be - conveyed up the call chain. - -2022-06-22 Alan Modra - - PowerPC64: stub debug dump - powerpc64le-linux-ld is failing the assertion in ppc_build_one_stub, - again apparently, which means a stub will overwrite the tail of a - previous stub. The difficulty with debugging these issues is that - it's not a problem with the stub that triggers the assertion, but the - previous stub in that section. This patch keeps track of the last - stub and adds a debug dump. Hopefully that will help. - - * elf64-ppc.c (enum _ppc64_sec_type): Add sec_stub. - (struct _ppc64_elf_section_data): Add u.last_ent. - (dump_previous_stub): New function. - (ppc_build_one_stub): Keep track of previous stub, and dump it - when finding an overlapping stub. - -2022-06-22 Alan Modra - - PR29270, DW_FORM_udata signed output - PR 29270 - * dwarf.c (read_and_display_attr_value): Output DW_FORM_udata - as unsigned. - -2022-06-22 GDB Administrator - - Automatic date update in version.in - -2022-06-21 Nick Alcock - - ld: regenerate configure after recent misgeneration - Things work again after this. - - ld/ChangeLog: - - * configure: Regenerate. - -2022-06-21 Nick Alcock - - libctf: tests: prune warnings from compiler output - We were failing to call prune_warnings appropriately, leading to - false-positive test failures on some platforms (observed on - sparclinux). - - libctf/ChangeLog: - - * testsuite/lib/ctf-lib.exp: Prune warnings from compiler and - linker output. - * testsuite/libctf-regression/libctf-repeat-cu.exp: Likewise, - and ar output too. - -2022-06-21 Nick Alcock - - libctf: avoid mingw warning - A missing paren led to an intended cast to avoid dependence on the size - of size_t in one argument of ctf_err_warn applying to the wrong type by - mistake. - - libctf/ChangeLog: - - * ctf-serialize.c (ctf_write_mem): Fix cast. - -2022-06-21 Nick Alcock - - libctf: fix linking together multiple objects derived from the same source - Right now, if you compile the same .c input repeatedly with CTF enabled - and different compilation flags, then arrange to link all of these - together, then things misbehave in various ways. libctf may conflate - either inputs (if the .o files have the same name, say if they are - stored in different .a archives), or per-CU outputs when conflicting - types are found: the latter can lead to entirely spurious errors when - it tries to produce multiple per-CU outputs with the same name - (discarding all but the last, but then looking for types in the earlier - ones which have just been thrown away). - - Fixing this is multi-pronged. Both inputs and outputs need to be - differentiated in the hashtables libctf keeps them in: inputs with the - same cuname and filename need to be considered distinct as long as they - have different associated CTF dicts, and per-CU outputs need to be - considered distinct as long as they have different associated input - dicts. Right now there is nothing tying the two together other than the - CU name: fix this by introducing a new field in the ctf_dict_t named - ctf_link_in_out, which (for input dicts) points to the associated per-CU - output dict (if any), and for output dicts points to the associated - input dict. At creation time the name used is completely arbitrary: - it's only important that it be distinct if CTF dicts are distinct. So, - when a clash is found, adjust the CU name by sticking the number of - elements in the input on the end. At output time, the CU name will - appear in the linked object, so it matters a little more that it look - slightly less ugly: in conflicting cases, append an incrementing - integer, starting at 0. - - This naming scheme is not very helpful, but it's hard to see what else - we can do. The input .o name may be the same. The input .a name is not - even visible to ctf_link, and even *that* might be the same, because - .a's can contain many members with the same name, all of which - participate in the link. All we really know is that the two have - distinct dictionaries with distinct types in them, and at least this way - they are all represented, any any symbols, variables etc referring to - those types are accurately stored. - - (As a side-effect this also fixes a use-after-free and double-free when - errors are found during variable or symbol emission.) - - Use the opportunity to prevent a couple of sources of problems, to wit - changing the active CU mappings when a link has already been done - (no effect on ld, which doesn't use CU mappings at all), and causing - multiple consecutive ctf_link's to have the same net effect as just - doing the last one (no effect on ld, which only ever does one - ctf_link) rather than having the links be a sort of half-incremental - not-really-intended mess. - - libctf/ChangeLog: - - PR libctf/29242 - * ctf-impl.h (struct ctf_dict) [ctf_link_in_out]: New. - * ctf-dedup.c (ctf_dedup_emit_type): Set it. - * ctf-link.c (ctf_link_add_ctf_internal): Set the input - CU name uniquely when clashes are found. - (ctf_link_add): Document what repeated additions do. - (ctf_new_per_cu_name): New, come up with a consistent - name for a new per-CU dict. - (ctf_link_deduplicating): Use it. - (ctf_create_per_cu): Use it, and ctf_link_in_out, and set - ctf_link_in_out properly. Don't overwrite per-CU dicts with - per-CU dicts relating to different inputs. - (ctf_link_add_cu_mapping): Prevent per-CU mappings being set up - if we already have per-CU outputs. - (ctf_link_one_variable): Adjust ctf_link_per_cu call. - (ctf_link_deduplicating_one_symtypetab): Likewise. - (ctf_link_empty_outputs): New, delete all the ctf_link_outputs - and blank out ctf_link_in_out on the corresponding inputs. - (ctf_link): Clarify the effect of multiple ctf_link calls. - Empty ctf_link_outputs if it already exists rather than - having the old output leak into the new link. Fix a variable - name. - * testsuite/config/default.exp (AR): Add. - (OBJDUMP): Likewise. - * testsuite/libctf-regression/libctf-repeat-cu.exp: New test. - * testsuite/libctf-regression/libctf-repeat-cu*: Main program, - library, and expected results for the test. - -2022-06-21 Kevin Buettner - - Document how GDB searches for files when using -s, -e, and -se options - GDB's documentation of the 'file' command says: - - If you do not specify a directory and the file is not found in the - GDB working directory, GDB uses the environment variable PATH as a - list of directories to search, just as the shell does when looking - for a program to run. - - The same is true for files specified via commandline options -s, -e, - and -se. - - This commit adds a cross reference to the file command for these options. - -2022-06-21 Nick Clifton - - Binutils support for dwarf-5 (location and range lists related) - * dwarf.h (struct debug_info): Add rnglists_base field. - * dwarf.c (read_and_display_attr_value): Read attribute DW_AT_rnglists_base. - (display_debug_rnglists_list): While handling DW_RLE_base_addressx, - DW_RLE_startx_endx, DW_RLE_startx_length items, pass the proper parameter - value to fetch_indexed_addr(), i.e. fetch the proper entry in .debug_addr section. - (display_debug_ranges): Add rnglists_base to the .debug_rnglists base address. - (load_separate_debug_files): Load .debug_addr section, if exists. - - Default to disabling the linker warnings about execstack and RWX segments if the target is the HPPA architecture. - PR 29263 - * configure.ac (ac_default_ld_warn_execstack): Default to 'no' for - HPPA targets. - (ac_default_ld_warn_rwx_segments): Likewise. - * configure: Regenerate. - * testsuite/ld-elf/elf.exp: Add the --warn-execstack command line - option to the command line when running execstack tests for the - HPPA target. - -2022-06-21 GDB Administrator - - Automatic date update in version.in - -2022-06-20 Tom Tromey - - Move finish_print out of value_print_options - 'finish_print' does not really belong in value_print_options -- this - is consulted only when deciding whether or not to print a value, and - never during the course of printing. This patch removes it from the - structure and makes it a static global in infcmd.c instead. - - Tested on x86-64 Fedora 34. - -2022-06-20 Alan Modra - - PR29262, memory leak in pr_function_type - PR 29262 - * prdbg.c (pr_function_type): Free "s" on failure path. - - PR29261, memory leak in parse_stab_struct_fields - PR 29261 - * stabs.c (parse_stab_struct_fields): Free "fields" on failure path. - -2022-06-20 GDB Administrator - - Automatic date update in version.in - -2022-06-19 GDB Administrator - - Automatic date update in version.in - -2022-06-18 Tom Tromey - - Fix assertion failure in copy_type - PR exp/20630 points out a simple way to cause an assertion failure in - copy_type -- but this was found in the wild a few times as well. - - copy_type only works for objfile-owned types, but there isn't a deep - reason for this. This patch fixes the bug by updating copy_type to - work for any sort of type. - - Better would perhaps be to finally implement type GC, but I still - haven't attempted this. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=20630 - -2022-06-18 Tomoaki Kawada - - Fix the sorting algorithm for reloc entries - The optimized insertion sort algorithm in `elf_link_adjust_relocs` - incorrectly assembled "runs" from unsorted entries and inserted them to an - already-sorted prefix, breaking the loop invariants of insertion sort. - This commit updates the run assembly loop to break upon encountering a - non-monotonic change in the sort key. - - PR 29259 - bfd/ - * elflink.c (elf_link_adjust_relocs): Ensure run being inserted - is sorted. - ld/ - * testsuite/ld-elf/pr29259.d, - * testsuite/ld-elf/pr29259.s, - * testsuite/ld-elf/pr29259.t: New test. - -2022-06-18 Enze Li - - gdb/python: Export nibbles to python layer - This patch makes it possible to allow Value.format_string() to return - nibbles output. - - When we set the parameter of nibbles to True, we can achieve the - displaying binary values in groups of every four bits. - - Here's an example: - (gdb) py print (gdb.Value (1230).format_string (format='t', nibbles=True)) - 0100 1100 1110 - (gdb) - - Note that the parameter nibbles is only useful if format='t' is also used. - - This patch also includes update to the relevant testcase and - documentation. - - Tested on x86_64 openSUSE Tumbleweed. - -2022-06-18 Enze Li - - gdb/doc: Documentation for the new print command - Document the new command "print nibbles" and add a NEWS entry. - -2022-06-18 Enze Li - - gdb: Add new 'print nibbles' feature - Make an introduction of a new print setting that can be set by 'set - print nibbles [on|off]'. The default value if OFF, which can be changed - by user manually. Of course, 'show print nibbles' is also included in - the patch. - - The new feature displays binary values by group, with four bits per - group. The motivation for this work is to enhance the readability of - binary values. - - Here's a GDB session before this patch is applied. - (gdb) print var_a - $1 = 1230 - (gdb) print/t var_a - $2 = 10011001110 - - With this patch applied, we can use the new print setting to display the - new form of the binary values. - (gdb) print var_a - $1 = 1230 - (gdb) print/t var_a - $2 = 10011001110 - (gdb) set print nibbles on - (gdb) print/t var_a - $3 = 0100 1100 1110 - - Tested on x86_64 openSUSE Tumbleweed. - -2022-06-18 GDB Administrator - - Automatic date update in version.in - -2022-06-17 Tiezhu Yang - - gdb: NEWS: Move LoongArch gdbserver to the correct section - commit e5ab6af52d38 ("gdbserver: Add LoongArch/Linux support") - was merged into the master since GDB 12, so we should put the - news in the "Changes since GDB 12" section. - - Thanks Tom Tromey for your correction [1], sorry for that. - - [1] https://sourceware.org/pipermail/gdb-patches/2022-June/190122.html - -2022-06-17 Alan Modra - - PR29256, memory leak in obj_elf_section_name - When handling section names in quotes obj_elf_section_name calls - demand_copy_C_string, which puts the name on the gas notes obstack. - Such strings aren't usually freed, since obstack_free frees all more - recently allocated objects as well as its arg. When handling - non-quoted names, obj_elf_section_name mallocs the name. Due to the - mix of allocation strategies it isn't possible for callers to free - names, if that was desirable. Partially fix this by always creating - names on the obstack, which is more efficient anyway. (You still - can't obstack_free on error paths due to the xtensa - tc_canonicalize_section_name.) Also remove a couple of cases where - the name is dup'd for no good reason as far as I know. - - PR 29256 - * config/obj-elf.c (obj_elf_section_name): Create name on notes - obstack. - (obj_elf_attach_to_group): Don't strdup group name. - (obj_elf_section): Likewise. - (obj_elf_vendor_attribute): Use xmemdup0 rather than xstrndup. - -2022-06-17 Alan Modra - - PR29255, memory leak in make_tempdir - PR 29255 - * bucomm.c (make_tempdir, make_tempname): Free template on all - failure paths. - - PR29254, memory leak in stab_demangle_v3_arg - PR 29254 - * stabs.c (stab_demangle_v3_arg): Free dt on failure path. - -2022-06-17 Pedro Alves - - Fix GDB build with GCC 4.8 & 4.9 - With gcc 4.8/4.9, we run into this build failure (and other similar - ones): - - /home/palves/gdb/binutils-gdb/src/gdb/location.h:224:59: error: could not convert ‘{0, LINE_OFFSET_UNKNOWN}’ from ‘’ to ‘line_offset’ - struct line_offset line_offset = {0, LINE_OFFSET_UNKNOWN}; - ^ - - The issue is that at around the GCC 4.8/4.9 era, a default member - initializer prevented the struct from being an aggregate, so you - cannot use aggregate initialization on them. That rule changed after - GCC 4.9 and GCC 5 & later uses new rules. - - Fix this by not using aggregate initialization for struct line_offset. - The default member initization already leaves line_offset as {0, - LINE_OFFSET_UNKNOWN}, so initialization to those values can just go - away. The remaining cases are of the form {0, LINE_OFFSET_NONE}, and - those cases can be better rewritten to delay setting the sign field - until we know we have a valid offset. - - Change-Id: I0506ea4a83c5fa2f15e159569db68b3b0a7509b4 - -2022-06-17 Pedro Alves - - Convert set_location_spec_string to a method - This converts set_location_spec_string to a method of location_spec, - and makes the location_spec::as_string field protected, renaming it to - m_as_string along the way. - - Change-Id: Iccfb1654e9fa7808d0512df89e775f9eacaeb9e0 - -2022-06-17 Pedro Alves - - Convert location_spec_to_string to a method - This converts location_spec_to_string to a method of location_spec, - simplifying the code using it, as it no longer has to use - std::unique_ptr::get(). - - Change-Id: I621bdad8ea084470a2724163f614578caf8f2dd5 - -2022-06-17 Pedro Alves - - Convert location_spec_type to a method - This converts location_spec_type to location_spec::type(). - - Change-Id: Iff4cbfafb1cf3d22adfa142ff939b4a148e52273 - -2022-06-17 Pedro Alves - - Convert location_spec_empty_p to a method - This converts location_spec_empty_p to a method of location_spec, - simplifying users, as they no longer have to use - std::unique_ptr::get(). - - Change-Id: I83381a729896f12e1c5a1b4d6d4c2eb1eb6582ff - -2022-06-17 Pedro Alves - - Eliminate copy_location_spec - copy_location_spec is just a wrapper around location_spec::clone(), so - remove it and call clone() directly. This simplifies users, as they - no longer have to use std::unique_ptr::get(). - - Change-Id: I8ce8658589460b98888283b306b315a5b8f73976 - -2022-06-17 Pedro Alves - - Eliminate the two-level data structures behind location_specs - Currently, there's the location_spec hierarchy, and then some - location_spec subclasses have their own struct type holding all their - data fields. - - I.e., there is this: - - location_spec - explicit_location_spec - linespec_location_spec - address_location_spec - probe_location_spec - - and then these separate types: - - explicit_location - linespec_location - - where: - - explicit_location_spec - has-a explicit_location - linespec_location_spec - has-a linespec_location - - This patch eliminates explicit_location and linespec_location, - inlining their members in the corresponding location_spec type. - - The location_spec subclasses were the ones currently defined in - location.c, so they are moved to the header. Since the definitions of - the classes are now visible, we no longer need location_spec_deleter. - - Some constructors that are used for cloning location_specs, like: - - explicit explicit_location_spec (const struct explicit_location *loc) - - ... were converted to proper copy ctors. - - In the process, initialize_explicit_location is eliminated, and some - functions that returned the "data type behind a locspec", like - get_linespec_location are converted to downcast functions, like - as_linespec_location_spec. - - Change-Id: Ia31ccef9382b25a52b00fa878c8df9b8cf2a6c5a - -2022-06-17 Pedro Alves - - event_location -> location_spec - Currently, GDB internally uses the term "location" for both the - location specification the user input (linespec, explicit location, or - an address location), and for actual resolved locations, like the - breakpoint locations, or the result of decoding a location spec to - SaLs. This is expecially confusing in the breakpoints module, as - struct breakpoint has these two fields: - - breakpoint::location; - breakpoint::loc; - - "location" is the location spec, and "loc" is the resolved locations. - - And then, we have a method called "locations()", which returns the - resolved locations as range... - - The location spec type is presently called event_location: - - /* Location we used to set the breakpoint. */ - event_location_up location; - - and it is described like this: - - /* The base class for all an event locations used to set a stop event - in the inferior. */ - - struct event_location - { - - and even that is incorrect... Location specs are used for finding - actual locations in the program in scenarios that have nothing to do - with stop events. E.g., "list" works with location specs. - - To clean all this confusion up, this patch renames "event_location" to - "location_spec" throughout, and then all the variables that hold a - location spec, they are renamed to include "spec" in their name, like - e.g., "location" -> "locspec". Similarly, functions that work with - location specs, and currently have just "location" in their name are - renamed to include "spec" in their name too. - - Change-Id: I5814124798aa2b2003e79496e78f95c74e5eddca - -2022-06-17 Vladimir Mezentsev - - gprofng: fix build with -Werror=format-truncation - gprofng/ChangeLog - 2022-06-16 Vladimir Mezentsev - - * configure.ac: Remove -Wno-format-truncation. - * src/Makefile.am: Likewise. - * configure: Rebuild. - * src/Makefile.in: Rebuild. - * common/hwctable.c: Fix -Werror=format-truncation errors. - * src/ipc.cc: Likewise. - * src/parse.cc: Likewise. - -2022-06-17 GDB Administrator - - Automatic date update in version.in - -2022-06-16 Tom de Vries - - [gdb/testsuite] Fix have_mpx test - When testing on openSUSE Leap 15.4 I ran into this FAIL: - ... - FAIL: gdb.arch/i386-mpx-map.exp: NULL address of the pointer - ... - and likewise for all the other mpx tests. - - The problem is that have_mpx is supposed to return 0, but it doesn't because - it tries to match this output: - ... - builtin_spawn -ignore SIGHUP temp/20294/have_mpx-2-20294.x^M - No MPX support^M - No MPX support^M - ... - using: - ... - && ![string equal $output "No MPX support\r\n"]] - ... - - Fix this by matching using a regexp instead. - - Tested on x86_64-linux. - -2022-06-16 Alan Modra - - use of uninitialised value in input_file_open - Triggered by a file containing just "#N" or "#A". fgets when hitting - EOF before reading anything returns NULL and does not write to buf. - strchr (buf, '\n') then is reading from uninitialised memory. - - * input-file.c (input_file_open): Don't assume buf contains - zero string terminator when fgets returns NULL. - -2022-06-16 Alan Modra - - Always free matching vector from bfd_check_format_matches - At least one place calling list_matching_formats failed to free the - "matching" vector from bfd_check_format_matches afterwards. Fix that - by calling free inside list_matching_formats. - - binutils/ - * bucomm.c (list_matching_formats): Free arg. - * addr2line.c (process_file): Adjust to suit. - * ar.c (open_inarch, ranlib_touch): Likewise. - * coffdump.c (main): Likewise. - * nm.c (display_archive, display_file): Likewise. - * objcopy.c (copy_file): Likewise. - * objdump.c (display_object_bfd): Likewise. - * size.c (display_bfd): Likewise. - * srconv.c (main): Likewise. - ld/ - * ldlang.c (load_symbols): Free "matching". - -2022-06-16 Alan Modra - - Revert "Revert "Fix fbsd core matching"" - This reverts commit 476288fa2bddecf0f0e13dee826a076309bf01fe. - -2022-06-16 Alan Modra - - Restore readelf -wF - Commit 94585d6d4495 resulted in readelf -wF failing with - Unrecognized debug letter option 'F' - - binutils/ - * dwarf.c (debug_dump_long_opts): Add letter. - (debug_option_table): New, replacing.. - (opts_table, letter_table): ..these. - (dwarf_select_sections_by_names): Adjust to suit. Set - do_debug_frames outside of loop. - (dwarf_select_sections_by_letters): Similarly. - gas/ - * testsuite/gas/i386/ehinterp.d: Use readelf -wF. - -2022-06-16 Alan Modra - - PR29250, readelf erases CIE initial register state - PR 29250 - binutils/ - * dwarf.c (display_debug_frames): Set col_type[reg] on sizing - pass over FDE to cie->col_type[reg] if CIE specifies reg. - Handle DW_CFA_restore and DW_CFA_restore_extended on second - pass using the same logic. Remove unnecessary casts. Don't - call frame_need_space on second pass over FDE. - gas/ - * testsuite/gas/i386/ehinterp.d, - * testsuite/gas/i386/ehinterp.s: New test. - * testsuite/gas/i386/i386.exp: Run it. - -2022-06-16 GDB Administrator - - Automatic date update in version.in - -2022-06-15 Sergei Trofimovich - - sim: fix BFD_VMA format arguments on 32-bit hosts [PR gdb/29184] - Noticed format mismatch when attempted to build gdb on i686-linux-gnu - in --enable-64-bit-bfd mode: - - sim/../../sim/cris/sim-if.c:576:28: - error: format '%lx' expects argument of type 'long unsigned int', - but argument 4 has type 'bfd_size_type' {aka 'long long unsigned int'} [-Werror=format=] - 576 | sim_do_commandf (sd, "memory region 0x%" BFD_VMA_FMT "x,0x%lx", - | ^~~~~~~~~~~~~~~~~~~ - 577 | interp_load_addr, interpsiz); - | ~~~~~~~~~ - | | - | bfd_size_type {aka long long unsigned int} - - While at it fixed format string for time-related types. - -2022-06-15 Tom Tromey - - Check for listeners in emit_exiting_event - I noticed that emit_exiting_event does not check whether there are any - listeners before creating the event object. All other event emitters - do this, so this patch updates this one as well. - -2022-06-15 Tom Tromey - - Add to documentation of Python 'dont_repeat' method - PR python/28533 points out that the Python 'dont_repeat' documentation - is a bit ambiguous about when the method ought to be called. This - patch spells it out. - -2022-06-15 Yvan Roux - - gdb/arm: Make sp alias for one of the other stack pointers - For Cortex-M targets, SP register is never detached from msp or - psp, it always has the same value as one of them. Let GDB treat - ARM_SP_REGNUM as an alias similar to what is done in hardware. - -2022-06-15 Yvan Roux - - gdb/arm: Track msp and psp - For Arm Cortex-M33 with security extensions, there are 4 different - stack pointers (msp_s, msp_ns, psp_s, psp_ns). To be compatible - with earlier Cortex-M derivates, the msp and psp registers are - aliases for one of the 4 real stack pointer registers. - - These are the combinations that exist: - sp -> msp -> msp_s - sp -> msp -> msp_ns - sp -> psp -> psp_s - sp -> psp -> psp_ns - - This means that when the GDB client is to show the value of "msp", - the value should always be equal to either "msp_s" or "msp_ns". - Same goes for "psp". - - To add a bit more context; GDB does not really use the register msp - (or psp) internally, but they are part of the set of registers which - are provided by the target.xml file. As a result, they will be part - of the set of registers printed by the "info r" command. - - Without this particular patch, GDB will hit the assert in the bottom - of arm_cache_get_sp_register function. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29121 - -2022-06-15 Yvan Roux - - gdb/arm: Fetch initial sp value prior to compare - For Arm Cortex-M33 with security extensions, there are 4 different - stack pointers (msp_s, msp_ns, psp_s, psp_ns). In order to - identify the active one, compare the values of the different - stacks. The value of the initial sp register needs to be fetched to - perform this comparison. - -2022-06-15 Andrew Burgess - - gdb: unify two dis_asm_read_memory functions in disasm.c - After the recent restructuring of the disassembler code, GDB has ended - up with two identical class static functions, both called - dis_asm_read_memory, with identical implementations. - - My first thought was to move these out of their respective classes, - and just make them global functions, then I'd only need a single - copy. - - And maybe that's the right way to go. But I disliked that by doing - that I loose the encapsulation of the method with the corresponding - disassembler class. - - So, instead, I placed the static method into its own class, and had - both the gdb_non_printing_memory_disassembler and gdb_disassembler - classes inherit from this new class as an additional base-class. - - In terms of code generated, I don't think there's any significant - difference with this approach, but I think this better reflects how - the function is closely tied to the disassembler. - - There should be no user visible changes after this commit. - -2022-06-15 Andrew Burgess - - gdb: refactor the non-printing disassemblers - This commit started from an observation I made while working on some - other disassembler patches, that is, that the function - gdb_buffered_insn_length, is broken ... sort of. - - I noticed that the gdb_buffered_insn_length function doesn't set up - the application data field if the disassemble_info structure. - - Further, I noticed that some architectures, for example, ARM, require - that the application_data field be set, see gdb_print_insn_arm in - arm-tdep.c. - - And so, if we ever use gdb_buffered_insn_length for ARM, then GDB will - likely crash. Which is why I said only "sort of" broken. Right now - we don't use gdb_buffered_insn_length with ARM, so maybe it isn't - broken yet? - - Anyway to prove to myself that there was a problem here I extended the - disassembler self tests in disasm-selftests.c to include a test of - gdb_buffered_insn_length. As I run the test for all architectures, I - do indeed see GDB crash for ARM. - - To fix this we need gdb_buffered_insn_length to create a disassembler - that inherits from gdb_disassemble_info, but we also need this new - disassembler to not print anything. - - And so, I introduce a new gdb_non_printing_disassembler class, this is - a disassembler that doesn't print anything to the output stream. - - I then observed that both ARC and S12Z also create non-printing - disassemblers, but these are slightly different. While the - disassembler in gdb_non_printing_disassembler reads the instruction - from a buffer, the ARC and S12Z disassemblers read from target memory - using target_read_code. - - And so, I further split gdb_non_printing_disassembler into two - sub-classes, gdb_non_printing_memory_disassembler and - gdb_non_printing_buffer_disassembler. - - The new selftests now pass, but otherwise, there should be no user - visible changes after this commit. - -2022-06-15 Andrew Burgess - - gdb/python: implement the print_insn extension language hook - This commit extends the Python API to include disassembler support. - - The motivation for this commit was to provide an API by which the user - could write Python scripts that would augment the output of the - disassembler. - - To achieve this I have followed the model of the existing libopcodes - disassembler, that is, instructions are disassembled one by one. This - does restrict the type of things that it is possible to do from a - Python script, i.e. all additional output has to fit on a single line, - but this was all I needed, and creating something more complex would, - I think, require greater changes to how GDB's internal disassembler - operates. - - The disassembler API is contained in the new gdb.disassembler module, - which defines the following classes: - - DisassembleInfo - - Similar to libopcodes disassemble_info structure, has read-only - properties: address, architecture, and progspace. And has methods: - __init__, read_memory, and is_valid. - - Each time GDB wants an instruction disassembled, an instance of - this class is passed to a user written disassembler function, by - reading the properties, and calling the methods (and other support - methods in the gdb.disassembler module) the user can perform and - return the disassembly. - - Disassembler - - This is a base-class which user written disassemblers should - inherit from. This base class provides base implementations of - __init__ and __call__ which the user written disassembler should - override. - - DisassemblerResult - - This class can be used to hold the result of a call to the - disassembler, it's really just a wrapper around a string (the text - of the disassembled instruction) and a length (in bytes). The user - can return an instance of this class from Disassembler.__call__ to - represent the newly disassembled instruction. - - The gdb.disassembler module also provides the following functions: - - register_disassembler - - This function registers an instance of a Disassembler sub-class - as a disassembler, either for one specific architecture, or, as a - global disassembler for all architectures. - - builtin_disassemble - - This provides access to GDB's builtin disassembler. A common - use case that I see is augmenting the existing disassembler output. - The user code can call this function to have GDB disassemble the - instruction in the normal way. The user gets back a - DisassemblerResult object, which they can then read in order to - augment the disassembler output in any way they wish. - - This function also provides a mechanism to intercept the - disassemblers reads of memory, thus the user can adjust what GDB - sees when it is disassembling. - - The included documentation provides a more detailed description of the - API. - - There is also a new CLI command added: - - maint info python-disassemblers - - This command is defined in the Python gdb.disassemblers module, and - can be used to list the currently registered Python disassemblers. - -2022-06-15 Andrew Burgess - - gdb: add extension language print_insn hook - This commit is setup for the next commit. - - In the next commit I will add a Python API to intercept the print_insn - calls within GDB, each print_insn call is responsible for - disassembling, and printing one instruction. After the next commit it - will be possible for a user to write Python code that either wraps - around the existing disassembler, or even, in extreme situations, - entirely replaces the existing disassembler. - - This commit does not add any new Python API. - - What this commit does is put the extension language framework in place - for a print_insn hook. There's a new callback added to 'struct - extension_language_ops', which is then filled in with nullptr for Python - and Guile. - - Finally, in the disassembler, the code is restructured so that the new - extension language function ext_lang_print_insn is called before we - delegate to gdbarch_print_insn. - - After this, the next commit can focus entirely on providing a Python - implementation of the new print_insn callback. - - There should be no user visible change after this commit. - -2022-06-15 Andrew Burgess - - gdb: add new base class to gdb_disassembler - The motivation for this change is an upcoming Python disassembler API - that I would like to add. As part of that change I need to create a - new disassembler like class that contains a disassemble_info and a - gdbarch. The management of these two objects is identical to how we - manage these objects within gdb_disassembler, so it might be tempting - for my new class to inherit from gdb_disassembler. - - The problem however, is that gdb_disassembler has a tight connection - between its constructor, and its print_insn method. In the - constructor the ui_file* that is passed in is replaced with a member - variable string_file*, and then in print_insn, the contents of the - member variable string_file are printed to the original ui_file*. - - What this means is that the gdb_disassembler class has a tight - coupling between its constructor and print_insn; the class just isn't - intended to be used in a situation where print_insn is not going to be - called, which is how my (upcoming) sub-class would need to operate. - - My solution then, is to separate out the management of the - disassemble_info and gdbarch into a new gdb_disassemble_info class, - and make this class a parent of gdb_disassembler. - - In arm-tdep.c and mips-tdep.c, where we used to cast the - disassemble_info->application_data to a gdb_disassembler, we can now - cast to a gdb_disassemble_info as we only need to access the gdbarch - information. - - Now, my new Python disassembler sub-class will still want to print - things to an output stream, and so we will want access to the - dis_asm_fprintf functionality for printing. - - However, rather than move this printing code into the - gdb_disassemble_info base class, I have added yet another level of - hierarchy, a gdb_printing_disassembler, thus the class structure is - now: - - struct gdb_disassemble_info {}; - struct gdb_printing_disassembler : public gdb_disassemble_info {}; - struct gdb_disassembler : public gdb_printing_disassembler {}; - - In a later commit my new Python disassembler will inherit from - gdb_printing_disassembler. - - The reason for adding the additional layer to the class hierarchy is - that in yet another commit I intend to rewrite the function - gdb_buffered_insn_length, and to do this I will be creating yet more - disassembler like classes, however, these will not print anything, - thus I will add a gdb_non_printing_disassembler class that also - inherits from gdb_disassemble_info. Knowing that that change is - coming, I've gone with the above class hierarchy now. - - There should be no user visible changes after this commit. - -2022-06-15 Andrew Burgess - - gdb/python: convert gdbpy_err_fetch to use gdbpy_ref - Convert the gdbpy_err_fetch class to make use of gdbpy_ref, this - removes the need for manual reference count management, and allows the - destructor to be removed. - - There should be no functional change after this commit. - - I think this cleanup is worth doing on its own, however, in a later - commit I will want to copy instances of gdbpy_err_fetch, and switching - to using gdbpy_ref means that I can rely on the default copy - constructor, without having to add one that handles the reference - counts, so this is good preparation for that upcoming change. - -2022-06-15 Jan Beulich - - x86: drop print_operand_value()'s "hex" parameter - For quite some time all callers have been passing 1 / true. While there - fold the final oappend_with_style() calls. - -2022-06-15 Tom de Vries - - [gdb/build] Fix build for gcc < 11 - When building trunk on openSUSE Leap 15.3 with system gcc 7.5.0, I run into: - ... - In file included from ../bfd/bfd.h:46:0, - from gdb/defs.h:37, - from gdb/debuginfod-support.c:19: - gdb/debuginfod-support.c: In function ‘bool debuginfod_is_enabled()’: - gdb/../include/diagnostics.h:42:3: error: unknown option after \ - ‘#pragma GCC diagnostic’ kind [-Werror=pragmas] - _Pragma (DIAGNOSTIC_STRINGIFY (GCC diagnostic ignored option)) - ^ - gdb/../include/diagnostics.h:80:3: note: in expansion of macro \ - ‘DIAGNOSTIC_IGNORE’ - DIAGNOSTIC_IGNORE ("-Wstringop-overread") - ^~~~~~~~~~~~~~~~~ - gdb/debuginfod-support.c:201:4: note: in expansion of macro \ - ‘DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD’ - DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD - ^ - ... - - The problem is that the warning -Wstringop-overread has been introduced for - gcc 11, and we can only tell gcc to ignore if it knows about it. - - Fix this by guarding the DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD definition in - diagnostics.c with '#if __GNUC__ >= 11'. - - Tested on x86_64-linux, by completing a build. - -2022-06-15 Alan Modra - - PR29230, segv in lookup_symbol_in_variable_table - The PR23230 testcase uses indexed strings without specifying - SW_AT_str_offsets_base. In this case we left u.str with garbage (from - u.val) which then led to a segfault when attempting to access the - string. Fix that by clearing u.str. The patch also adds missing - sanity checks in the recently committed read_indexed_address and - read_indexed_string functions. - - PR 29230 - * dwarf2.c (read_indexed_address): Return uint64_t. Sanity check idx. - (read_indexed_string): Use uint64_t for str_offset. Sanity check idx. - (read_attribute_value): Clear u.str for indexed string forms when - DW_AT_str_offsets_base is not yet read or missing. - -2022-06-15 Mark Wielaard - - gdb: Always suppress stringop-overread warning in debuginfod-support.c - Just like on s390x with g++ 11.2.1 and ppc64le with g++ 11.3.1 g++ 11 - on hppa produces a spurious warning for stringop-overread in - debuginfod_is_enabled for url_view. Just always suppress it on all - arches. - - https://sourceware.org/bugzilla/show_bug.cgi?id=29198 - - gdb/ChangeLog: - - * debuginfod-support.c (debuginfod_is_enabled): Always use - DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD. - -2022-06-15 GDB Administrator - - Automatic date update in version.in - -2022-06-14 Vladimir Mezentsev - - gprofng docs: provide help for == - The help message from 'gprofng collect app -h', in - the section on == , had a dangling - reference to a non-existent manpage. Provide basic - info, including reasons for caution. - - gprofng docs: mention HTML / PDF in the gprofng README - The HTML and PDF formats are described in the gprofng tutorial (info - topic "Other Document Formats"). In addition, describe them in the - README because: they are important; they are easily searchable; and the - README is primarily oriented to the person who is installing gprofng, - who may differ from the person who follows a user tutorial. - -2022-06-14 Vladimir Mezentsev - - gprofng: fix build with -Werror=format-security - gprofng/ChangeLog - 2022-06-13 Vladimir Mezentsev - - PR gprofng/28968 - * src/src/Hist_data.cc (print_row): Make param const. - * src/src/Hist_data.h (print_row): Likewise. - * src/src/Print.h: Remove unused functions and variables. - * src/Print.cc: Fix -Werror=format-security errors. - * src/parse.cc: Likewise. - -2022-06-14 Tom de Vries - - [gdb/testsuite] Handle unordered dict in gdb.python/py-mi-cmd.exp - When running test-case gdb.python/py-mi-cmd.exp on openSUSE Leap 42.3 with - python 3.4, I occasionally run into: - ... - Expecting: ^(-pycmd dct[^M - ]+)?(\^done,result={hello="world",times="42"}[^M - ]+[(]gdb[)] ^M - [ ]*) - -pycmd dct^M - ^done,result={times="42",hello="world"}^M - (gdb) ^M - FAIL: gdb.python/py-mi-cmd.exp: -pycmd dct (unexpected output) - ... - - The problem is that the data type used here in py-mi-cmd.py: - ... - elif argv[0] == "dct": - return {"result": {"hello": "world", "times": 42}} - ... - is a dictionary, and only starting version 3.6 are dictionaries insertion - ordered, so using PyDict_Next in serialize_mi_result doesn't guarantee a - fixed order. - - Fix this by allowing the alternative order. - - Tested on x86_64-linux. - -2022-06-14 Tom Tromey - - Implement lazy FPU initialization for ravenscar - Some ravenscar runtimes implement lazy FPU handling. On these - runtimes, the FPU is only initialized when a task tries to use it. - Furthermore, the FP registers aren't automatically saved on a task - switch -- instead, the save is deferred until the new task tries to - use the FPU. Furthermore, each task's context area has a flag - indicating whether the FPU has been initialized for this task. - - This patch teaches GDB to understand this implementation. When - fetching or storing registers, GDB now checks to see whether the live - FP registers should be used. If not, the task's saved FP registers - will be used if the task has caused FPU initialization. - - Currently only AArch64 uses this code. bb-runtimes implements this - for ARM as well, but GDB doesn't yet have an arm-ravenscar-thread.c. - -2022-06-14 Tom Tromey - - Reimplement ravenscar registers using tables - Currently, the ravenscar-thread implementation for each architecture - is written by hand. However, these are actually written by - copy-paste. It seems better to switch to a table-driven approach. - - The previous code also fetched all registers whenever any register was - requested. This is corrected in the new implementation. - -2022-06-14 Tom Tromey - - Fix bugs in aarch64-ravenscar-thread.c - We found a few bugs in aarch64-ravenscar-thread.c. - - First, some of the register offsets were incorrect. The "bb-runtimes" - file for this runtime had the wrong offsets in comments, which GDB - took to be correct. However, those comments didn't account for - alignment. This patch adjusts the offsets. - - Next, the "FPU Saved field" is not a register -- it is an - implementation detail of the runtime. This is removed. - - Finally, I think the FP registers are actually named V0-V31, and the - "Q" names are pseudo-registers. This patch fixes the comment. - -2022-06-14 Tom Tromey - - Allow 'interrupt -a' in all-stop mode - PR gdb/17160 points out that "interrupt -a" errors in all-stop mode, - but there's no good reason for this. This patch removes the error. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17160 - -2022-06-14 Youling Tang - - gdbserver: Add LoongArch/Linux support - Implement LoongArch/Linux support, including XML target description - handling based on features determined, GPR regset support, and software - breakpoint handling. - - In the Linux kernel code of LoongArch, ptrace implements PTRACE_POKEUSR - and PTRACE_PEEKUSR in the arch_ptrace function, so srv_linux_usrregs is - set to yes. - - With this patch on LoongArch: - - $ make check-gdb TESTS="gdb.server/server-connect.exp" - [...] - # of expected passes 18 - [...] - -2022-06-14 Tom de Vries - - Revert "Fix fbsd core matching" - This reverts commit a7e29f797cecd5a2f73c27838b09eae1f1b6c657. - - I accidentally pushed this, so revert. - -2022-06-14 Tom de Vries - - [gdb/testsuite] Fix regexp in gdb.ada/mi_var_access.exp - With gcc-12 and target board unix/-m32, we run into: - ... - (gdb) ^M - Expecting: ^(-var-create A_String_Access \* A_String_Access[^M - ]+)?(\^done,name="A_String_Access",numchild="1",.*[^M - ]+[(]gdb[)] ^M - [ ]*) - -var-create A_String_Access * A_String_Access^M - ^error,msg="Value out of range."^M - (gdb) ^M - FAIL: gdb.ada/mi_var_access.exp: Create varobj (unexpected output) - ... - - What happens is easier to understand if we take things out of the mi context: - ... - $ gdb -q -batch \ - outputs/gdb.ada/mi_var_access/mi_access \ - -ex "b mi_access.adb:19" \ - -ex run \ - -ex "p A_String_Access" - ... - Breakpoint 1, mi_access () at mi_access.adb:19 - 19 A_String : String (3 .. 5) := "345"; -- STOP - $1 = (pck.string_access) - ... - while with target board unix we have instead: - ... - $1 = (pck.string_access) 0x431b40 - ... - - The var-create command samples the value of the variable at a location where - the variable is not yet initialized, and with target board unix we - accidentally hit a valid address, but with target board unix/-m32 that's not - the case. - - Fix the FAIL by accepting the error message. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28464 - -2022-06-14 Alan Modra - - Fix fbsd core matching - On Thu, Jun 09, 2022 at 08:59:37AM -0700, John Baldwin wrote: - > On 6/9/22 1:58 AM, Tom de Vries via Gdb-patches wrote: - > > Hi, - > > - > > With an --enable-targets=all build and target board unix/-m32 I run into a - > > FAIL in test-case gdb.base/corefile.exp: - > > ... - > > (gdb) file outputs/gdb.base/corefile/corefile^M - > > Reading symbols from outputs/gdb.base/corefile/corefile...^M - > > (gdb) core-file outputs/gdb.base/corefile/corefile.core^M - > > warning: core file may not match specified executable file.^M - > > [New LWP 12011]^M - > > Core was generated by `outputs/gdb.base/corefile/co'.^M - > > Program terminated with signal SIGABRT, Aborted.^M - > > (gdb) FAIL: gdb.base/corefile.exp: core-file warning-free - > > ... - > > - > > The warning is there because of this mismatch between core and exec: - > > ... - > > (gdb) p core_bfd->xvec - > > $3 = (const struct bfd_target *) 0x20112a0 - > > (gdb) p exec_bfd->xvec - > > $4 = (const struct bfd_target *) 0x2010b00 - > > ... - > > - > > In the exec case, the detected architecture is i386_elf32_vec because this bit - > > of code in elfcode.h:elf_object_p(): - > > ... - > > if (ebd->elf_machine_code != EM_NONE - > > && i_ehdrp->e_ident[EI_OSABI] != ebd->elf_osabi - > > && ebd->elf_osabi != ELFOSABI_NONE) - > > goto got_wrong_format_error; - > > ... - > > prevents i386_elf32_fbsd from matching. - > > - > > Fix the core matching by copying that code to elfcore.h:elf_core_file_p(). - > > - > > Tested on x86_64-linux. - > > - > > Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29227 - > > - > > Any comments? - - Looks good. - - > Looking at elfcore.h, it seems to have not gotten changes made to elfcode.h over - > time and is a bit rotted. I suspect that all of changes made in commit 0aabe54e6222 - > that added these lines in elfcode.h (along with several other changes) need to - > be applied to this function in elfcore.h, not just adding these lines. - - Yes, the commit 0aabe54e6222 changes likely should go in too. I'm a - little wary of adding all the sanity checks to elf_core_file_p since - that might result in some core files not being recognised at all. For - example, despite the FIXME I'd guess leaving out the EI_VERSION check - was deliberate. The following seems reasonable to me. Please test. - -2022-06-14 Kavitha Natarajan - - Debug support for global alias variable - Starting with (future) Clang 15 (since - https://reviews.llvm.org/D120989), Clang emits the DWARF information - of global alias variables as DW_TAG_imported_declaration. However, - GDB does not handle it. It incorrectly always reads this tag as - C++/Fortran imported declaration (type alias, namespace alias and - Fortran module). This commit adds support to handle this tag as an - alias variable. - - This change fixes the failures in the gdb.base/symbol-alias.exp - testcase with current git Clang. This testcase is also updated to - test nested (recursive) aliases. - -2022-06-14 Alan Modra - - BFD_RELOC_MIPS_16 - MIPS should not be using BFD_RELOC_16 for its R_MIPS_16 relocation, - since R_MIPS_16 specifies a 16-bit field in a 32-bit word. - BFD_RELOC_16, emitted by generic code to handle fixups on 16-bit data - directives, expects fixups to operate on the whole of a 16-bit word. - - This patch corrects the problem by using BFD_RELOC_MIPS_16, a new bfd - reloc that is used to generate R_MIPS_16. BFD_RELOC_16 is handled in - md_apply_fix for cases where the fixup can be applied at assembly - time. Like BFD_RELOC_8, BFD_RELOC_16 now has no corresponding object - file relocation, and thus .half, .hword, .short and .dc.w must be - resolved at assembly time. BFD_RELOC_MIPS_REL16 is removed by this - patch since it isn't used. - - PR 3243 - PR 26542 - * reloc.c (BFD_RELOC_MIPS_16): Rename from BFD_RELOC_MIPS_REL16. - * elf32-mips.c (mips_reloc_map): Map BFD_RELOC_MIPS_16 to R_MIPS_16. - * elf64-mips.c (mips_reloc_map): Likewise, delete BFD_RELOC_MIPS_REL16. - * elfn32-mips.c (mips_reloc_map): Likewise. - * libbfd.h: Regenerate. - * bfd-in2.h: Regenerate. - gas/ - * config/tc-mips.c (append_insn): Handle BFD_RELOC_MIPS_16. - (macro_build): Likewise. - (mips_percent_op <%half>): Generate BFD_RELOC_MIPS_16. - (md_apply_fix): Handle BFD_RELOC_16 and BFD_RELOC_MIPS_16 when fx_done. - ld/ - * testsuite/ld-mips-elf/reloc-local-overflow.d, - * testsuite/ld-mips-elf/reloc-local-overflow.s: Rewrite. - -2022-06-14 Alan Modra - - Correct R_MIPS_16 n32 howto - If the howto is actually used, an all-zero dst_mask will result in - unchanged section contents on attempting to apply R_MIPS_16. - - * elfn32-mips.c (elf_mips_howto_table_rela ): Correct - dst_mask. - -2022-06-14 Alan Modra - - asan: applying zero offset to NULL pointer - * dwarf.c (fetch_indexed_string): Move initialisation of "curr" - and "end" after checking for missing section. - -2022-06-14 Alan Modra - - gas dwarf2dbg.c tidy - Make it a little more obvious that remap_debug_filename returns an - allocated string (that should be freed) by returning a char * rather - than const char *. Free a few missed cases in dwarf2dbg.c, and free - other memory allocated in dwarf2dbg.c. Also remove static - initialisation of variables and initialise in dwarf2_init instead, - in order to ensure gas state is saner for oss-fuzz. - - * remap.c (remap_debug_filename): Remove const from return. - * as.h (remap_debug_filename): Update prototype. - * config/obj-elf.c (obj_elf_ident): Simplify free of - remap_debug_filename output. - * stabs.c (stabs_generate_asm_file): Likewise. - * dwarf2dbg.c (dirs, dirs_in_use, dirs_allocated, current): Don't - initialise statically.. - (dwarf2_init): ..do so here, along with most other static vars. - (assign_file_to_slot): Don't set files_allocated until we - succeed in allocating memory. - (purge_generated_debug): Add bool param, free more stuff if true. - (dwarf2_directive_filename): Adjust purge_generated_debug call. - (process_entries): Don't free line_entry here.. - (dwarf2_cleanup): ..do so here instead, new function. - (dwarf2_finish): Call dwarf2_cleanup. When chaining together - subseg line entries, unhook entries from old subseg list. - (dwarf2_directive_loc): Free remap_debug_filename string. - (out_dir_and_file_list): Likewise. - (out_debug_str): Likewise. - -2022-06-14 GDB Administrator - - Automatic date update in version.in - -2022-06-13 Tom de Vries - - [gdb/testsuite] Fix gdb.reverse/test_ioctl_TCSETSW.exp with libc debuginfo - When running test-case gdb.reverse/test_ioctl_TCSETSW.exp with glibc debuginfo - installed, I run into: - ... - (gdb) PASS: gdb.reverse/test_ioctl_TCSETSW.exp: at TCSETSW call - step^M - __tcsetattr (fd=0, optional_actions=1, termios_p=0x7fffffffcf50) at \ - ../sysdeps/unix/sysv/linux/tcsetattr.c:45^M - 45 {^M - (gdb) FAIL: gdb.reverse/test_ioctl_TCSETSW.exp: handle TCSETSW - ... - - The problem is that the step is expected to step over the call to tcsetattr, - but due to glibc debuginfo being installed, we step into the call. - - Fix this by using next instead of step. - - Tested on x86_64-linux. - -2022-06-13 Tom de Vries - - [gdb] Avoid warnings in cooked_{read,write}_test for m68hc11 - With --enable-targets=all we have: - ... - $ gdb -q -batch -ex "maint selftest" - ... - Running selftest regcache::cooked_read_test::m68hc11. - warning: No frame soft register found in the symbol table. - Stack backtrace will not work. - Running selftest regcache::cooked_read_test::m68hc12. - warning: No frame soft register found in the symbol table. - Stack backtrace will not work. - Running selftest regcache::cooked_read_test::m68hc12:HCS12. - warning: No frame soft register found in the symbol table. - Stack backtrace will not work. - ... - - Likewise for regcache::cooked_write_test. - - The warning has no use in the selftest context. - - Fix this by skipping the specific selftests. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29224 - -2022-06-13 Tiezhu Yang - - gdb: LoongArch: Deal with atomic sequence - We can't put a breakpoint in the middle of a ll/sc atomic sequence, - so look for the end of the sequence and put the breakpoint there. - -2022-06-13 Sam James - - gdb: don't use bashism in configure test - Results in configure output like: - ``` - checking for X... no - /var/tmp/portage/sys-devel/gdb-12.1/work/gdb-12.1/gdb/configure: 18837: test: yes: unexpected operator - checking whether to use babeltrace... auto - ``` - - ... when /bin/sh is provided by a POSIX-compliant shell, like dash, - instead of bash. - -2022-06-13 Jiangshuai Li - - gdb:csky add support target-descriptions for CSKY arch - Registers in CSKY architecture included: - 1. 32 gprs - 2. 16 ars (alternative gprs used for quick interrupt) - 3. hi, lo, pc - 4. fr0~fr31, fcsr, fid, fesr - 5. vr0~vr15 - 6. ((32 banks) * 32) cr regs (max 32 banks, 32 control regs a bank) - - For register names: - Except over control registers, other registers, like gprs, hi, lo ... - are fixed names. Among the 32*32 control registers, some used registers - will have fixed names, others will have a default name "cpxcry". 'x' - refers to bank, y refers index in the bank(a control register in bank - 4 with index 14 will has a default name cp4cr14). - - For register numbers in GDB: - We assign a fixed number to each register in GDB, like: - r0~r31 with 0~31 - hi, lo with 36, 37 - fpu/vpu with 40~71 - ... - described in function csky_get_supported_register_by_index(). - - Function csky_get_supported_tdesc_registers_count(): - To calculate the total number of registers that GDB can analyze, - including those with fixed names and those with default register names. - - Function csky_get_supported_register_by_index(): - To find a supported struct csky_supported_tdesc_register, return a - struct include name with regnum via index. - - Arrays csky_supported_tdesc_feature_names[]: - Include all supported feature names in tdesc-xmls. - - We use the information described above to load the register description - file of the target from the stub. When loading, do a little check that - whether the register description file contains SP, LR and PC. - -2022-06-13 Tom de Vries - - [gdb/testsuite] Handle quotes in gdb_py_module_available - On openSUSE Leap 42.3 with python 3.4, I run into: - ... - (gdb) python import pygments^M - Traceback (most recent call last):^M - File "", line 1, in ^M - ImportError: No module named 'pygments'^M - Error while executing Python code.^M - (gdb) FAIL: gdb.base/style.exp: python import pygments - ERROR: unexpected output from python import - ... - because gdb_py_module_available doesn't handle the single quotes around the - module name in the ImportError. - - Fix this by allowing the single quotes. - - Tested on x86_64-linux. - -2022-06-13 Jan Beulich - - x86: fix incorrect indirection - Commit 384e201e5aec ("x86: properly initialize struct instr_info - instance(s)") was based on an improperly refreshed patch. Correct the - oversight. - -2022-06-13 Jan Beulich - - x86: replace global scratch buffer - With its movement to the stack, and with the subsequent desire to - initialize the entire instr_info instances, this has become doubly - inefficient. Individual users have better knowledge of how big a buffer - they need, and in a number of cases going through an intermediate buffer - can be avoided altogether. - - Having got confirmation that it wasn't intentional to print memory - operand displacements with inconsistent style, print_displacement() is - now using dis_style_address_offset consistently (eliminating the need - for callers to pass in a style). - - While touching print_operand_value() also convert its "hex" parameter to - bool. And while altering (and moving) oappend_immediate(), fold - oappend_maybe_intel_with_style() into its only remaining caller. Finally - where doing adjustments, use snprintf() in favor of sprintf(). - -2022-06-13 Jan Beulich - - x86: avoid string copy when swapping Vex.W controlled operands - Now that op_out[] is an array of pointers, there's no need anymore to - copy strings. Simply swap the pointers. - -2022-06-13 Jan Beulich - - x86: shrink prefix related disassembler state fields - By changing the values used for "artificial" prefix values, - all_prefixes[] can be shrunk to array of unsigned char. All that - additionally needs adjusting is the printing of possible apparently - standalone prefixes when recovering from longjmp(): Simply check - whether any prefixes were successfully decoded, to avoid converting - opcode bytes matching the "artificial" values to prefix mnemonics. - - Similarly by re-arranging the bits assigned to PREFIX_* mask values - we can fit all segment register masks in a byte and hence shrink - active_seg_prefix to unsigned char. - - Somewhat similarly with last_*_prefix representing offsets into the - opcode being disassembled, signed char is sufficient to hold all possible - values. - -2022-06-13 Jan Beulich - - x86: properly initialize struct instr_info instance(s) - Commit 39fb369834a3 ("opcodes: Make i386-dis.c thread-safe") introduced - a lot of uninitialized data. Alan has in particular observed ubsan - taking issue with the loop inverting the order of operands, where - op_riprel[] - an array of bool - can hold values other than 0 or 1. - - Move instantiation of struct instr_info into print_insn() (thus having - just a single central point), and make use of C99 dedicated initializers - to fill fields right in the initializer where possible. This way all - fields not explicitly initialized will be zero-filled, which in turn - allows dropping of some other explicit initialization later in the - function or in ckprefix(). Additionally this removes a lot of - indirection, as all "ins->info" uses can simply become "info". - - Make one further arrangement though, to limit the amount of data needing - (zero)initializing on every invocation: Convert the op_out structure - member to just an array of pointers, with the actual arrays living - inside print_insn() (and, as befoe, having just their 1st char filled - with nul). - - While there, instead of adjusting print_insn()'s forward declaration, - arrange for no such declaration to be needed in the first place. - -2022-06-13 GDB Administrator - - Automatic date update in version.in - -2022-06-12 Tom Tromey - - Fix self-test failure in addrmap - Mark pointed out that my recent addrmap C++-ficiation changes caused a - regression in the self-tests. This patch fixes the problem by - updating this test not to allocate the mutable addrmap on an obstack. - - Remove psymtab_addrmap - While working on addrmaps, I noticed that psymtab_addrmap is no longer - needed now. It was introduced in ancient times as an optimization for - DWARF, but no other symbol reader was ever updated to use it. Now - that DWARF does not use psymtabs, it can be deleted. - - Use malloc for mutable addrmaps - Mutable addrmaps currently require an obstack. This was probably done - to avoid having to call splay_tree_delete, but examination of the code - shows that all mutable obstacks have a limited lifetime -- now it's - simple to treat them as ordinary C++ objects, in some cases - stack-allocating them, and have a destructor to make the needed call. - This patch implements this change. - - Remove addrmap::create_fixed - addrmap::create_fixed is just a simple wrapper for 'new', so remove it - in favor of uses of 'new'. - - Remove addrmap_create_mutable - This removes addrmap_create_mutable in favor of using 'new' at the - spots where the addrmap is created. - - Remove addrmap wrapper functions - This removes the various addrmap wrapper functions in favor of simple - method calls on the objects themselves. - - Move addrmap classes to addrmap.h - This moves the addrmap class definitions to addrmap.h. This is safe - to do now that the contents are private. - - Privacy for addrmap_mutable - This changes addrmap_mutable so that its data members are private. - - Privacy for addrmap_fixed - This changes addrmap_fixed so that its data members are private. - It also makes struct addrmap_transition private as well. - - Use inheritance for addrmap - This is a simply C++-ification of the basics of addrmap: it uses - virtual methods rather than a table of function pointers, and it - changes the concrete implementations to be subclasses. - -2022-06-12 Jon Turney - - Trivial fixes to Cygwin build after 8fea1a81 - * Remove a stray semicolon - * Restore dropped nullptr program argument in use of create_process() under CYGWIN - - Simplify __USEWIDE - Prior to c6ca3dab dropping support for Cygwin 1.5, __USEWIDE was not - defined for Cygwin 1.5. After that, it's always defined if __CYGWIN__ - is, so remove __USEWIDE conditionals inside __CYGWIN__ conditionals. - - Simplify cygwin_buf_t - Prior to c6ca3dab dropping support for Cygwin 1.5, cygwin_buf_t was - defined as char for Cygwin 1.5. After that, it's always wchar_t, so - just use that. - -2022-06-12 GDB Administrator - - Automatic date update in version.in - -2022-06-11 GDB Administrator - - Automatic date update in version.in - -2022-06-10 Tom Tromey - - Fix warning-avoidance initialization in xcoffread.c - With the registry rewrite series, on Fedora 34, I started seeing this - error in xcoffread.c: - - ../../binutils-gdb/gdb/xcoffread.c: In function ‘void read_xcoff_symtab(objfile*, legacy_psymtab*)’: - ../../binutils-gdb/gdb/xcoffread.c:948:25: error: ‘main_aux’ is used uninitialized [-Werror=uninitialized] - 948 | union internal_auxent fcn_aux_saved = main_aux; - | ^~~~~~~~~~~~~ - ../../binutils-gdb/gdb/xcoffread.c:933:25: note: ‘main_aux’ declared here - 933 | union internal_auxent main_aux; - | ^~~~~~~~ - - I don't know why this error started suddenly... that seems weird, - because it's not obviously related to the changes I made. - - Looking into it, it seems this line was intended to avoid a similar - warning -- but since 'main_aux' is uninitialized at the point where it - is used, this fix was incomplete. - - This patch avoids the warning by initializing using "{}". I'm - checking this in. - -2022-06-10 Carl Love - - Fix comparison of unsigned long int to int in record_linux_system_call. - The if statement in case gdb_sys_ioctl in function - record_linux_system_call in file gdb/linux-record.c is as follows: - - if (tmpulongest == tdep->ioctl_FIOCLEX - || tmpulongest == tdep->ioctl_FIONCLEX - .... - || tmpulongest == tdep->ioctl_TCSETSW - ... - } - - The PowerPC ioctl value for ioctl_TCSETW is 0x802c7415. The variable - ioctl_TCSETW is defined in gdb/linux-record.h as an int. The TCSETW value - has the MSB set to one so it is a negative integer. The comparison of the - unsigned long value tmpulongest to a negative integer value for - ioctl_TCSETSW fails. - - This patch changes the declarations for the ioctl_* values in struct - linux_record_tdep to unsigned long to fix the comparisons between - tmpulongest and the tdep->ioctl_* values. - - An additional test gdb.reverse/test_ioctl_TCSETSW.exp is added to verify - the gdb record_linux_system_call() if statement for the ioctl TCSETSW - succeeds. - - This patch has been tested on Power 10 and Intel with no test failures. - -2022-06-10 Carl Love - - PowerPC, correct the gdb ioctl values for TCGETS, TCSETS, TCSETSW and TCSETSF. - Some of the ioctl numbers are based on the size of kernel termios structure. - Currently the PowerPC GDB definitions are "hard coded" into the ioctl - number. - - The current PowerPC values for TCGETS, TCSETS, TCSETSW and TCSETSF are - defined in gdb/ppc-linux-tdep.c as: - - record_tdep->ioctl_TCGETS = 0x403c7413; - record_tdep->ioctl_TCSETS = 0x803c7414; - record_tdep->ioctl_TCSETSW = 0x803c7415; - record_tdep->ioctl_TCSETSF = 0x803c7416; - - Where the termios structure size is in hex digits [5:4] as 0x3c. - - The definition for the PowerPC termios structure is given in: - arch/powerpc/include/uapi/asm/termbits.h - - The size of the termios data structure in this file is 0x2c not 0x3c. - - This patch changes the hex digits for the size of the PowerPC termios size - in the ioctl values for TCGETS, TCSETS, TCSETSW and TCSETSF to 0x2c. - This patch also changes the hard coding to generate the number based on a - it easier to update the ioctl numbers. - -2022-06-10 Andrew Burgess - - gdb/testsuite: remove definition of true/false from gdb_compiler_info - Since pretty much forever the get_compiler_info function has included - these lines: - - # Most compilers will evaluate comparisons and other boolean - # operations to 0 or 1. - uplevel \#0 { set true 1 } - uplevel \#0 { set false 0 } - - These define global variables true (to 1) and false (to 0). - - It seems odd to me that these globals are defined in - get_compiler_info, I guess maybe the original thinking was that if a - compiler had different true/false values then we would detect it there - and define true/false differently. - - I don't think we should be bundling this logic into get_compiler_info, - it seems weird to me that in order to use $true/$false a user needs to - first call get_compiler_info. - - It would be better I think if each test script that wants these - variables just defined them itself, if in the future we did need - different true/false values based on compiler version then we'd just - do: - - if { [test_compiler_info "some_pattern"] } { - # Defined true/false one way... - } else { - # Defined true/false another way... - } - - But given the current true/false definitions have been in place since - at least 1999, I suspect this will not be needed any time soon. - - Given that the definitions of true/false are so simple, right now my - suggestion is just to define them in each test script that wants - them (there's not that many). If we ever did need more complex logic - then we can always add a function in gdb.exp that sets up these - globals, but that seems overkill for now. - - There should be no change in what is tested after this commit. - -2022-06-10 Luis Machado - - Document the ARM_CC_FOR_TARGET testsuite variable - This variable is useful when exercising AArch64 multi-arch support (debugging - 32-bit AArch32 executables). - - Unfortunately it isn't well documented. This patch adds information about it - and explains how to use it. - -2022-06-10 Tom de Vries - - [gdb/testsuite] Fix XPASS with gcc-12 in gdb.base/vla-struct-fields.exp - With gcc-12, I get for test-case gdb.base/vla-struct-fields.exp: - ... - (gdb) print inner_vla_struct_object_size == sizeof(inner_vla_struct_object)^M - $7 = 1^M - (gdb) XPASS: gdb.base/vla-struct-fields.exp: size of inner_vla_struct_object - ... - - Fix this by limiting the xfailing to gcc-11 and earlier. Also, limit the - xfailing to the equality test. - - Tested on x86_64-linux. - -2022-06-10 Tom de Vries - - [gdb/testsuite] Fix timeout in gdb.ada/ghost.exp - On openSUSE Tumbleweed with gcc-12, I run into a timeout: - ... - (gdb) print value^M - Multiple matches for value^M - [0] cancel^M - [1] ada.strings.maps.value ( ada.strings.maps.character_mapping; \ - character) return character at a-strmap.adb:599^M - [2] pck.value at src/gdb/testsuite/gdb.ada/ghost/pck.ads:17^M - [3] system.object_reader.value ( system.object_reader.object_symbol) \ - return system.object_reader.uint64 at s-objrea.adb:2279^M - [4] system.traceback.symbolic.value (system.address) return string at \ - s-trasym.adb:200^M - > FAIL: gdb.ada/ghost.exp: print value (timeout) - print ghost_value^M - Argument must be choice number^M - (gdb) FAIL: gdb.ada/ghost.exp: print ghost_value - ... - - Fix this by prefixing value (as well as the other printed values) with the - package name: - ... - (gdb) print pck.value^M - ... - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29055 - -2022-06-10 GDB Administrator - - Automatic date update in version.in - -2022-06-09 Tom Tromey - - Minor fix to Python breakpoint event documentation - I noticed that the Python event documentation referred to the event's - "breakpoint" field as a function, whereas it is actually an attribute. - This patch fixes the error. - -2022-06-09 Andrew Burgess - - gdb/aarch64: fix 32-bit arm compatibility - GDB's ability to run 32-bit ARM processes on an AArch64 native target - is currently broken. The test gdb.multi/multi-arch.exp currently - fails with a timeout. - - The cause of these problems is the following three functions: - - aarch64_linux_nat_target::thread_architecture - aarch64_linux_nat_target::fetch_registers - aarch64_linux_nat_target::store_registers - - What has happened, over time, is that these functions have been - modified, forgetting that any particular thread (running on the native - target) might be an ARM thread, or might be an AArch64 thread. - - The problems always start with a line similar to this: - - aarch64_gdbarch_tdep *tdep - = (aarch64_gdbarch_tdep *) gdbarch_tdep (inf->gdbarch); - - The problem with this line is that if 'inf->gdbarch' is an ARM - architecture, then gdbarch_tdep will return a pointer to an - arm_gdbarch_tdep object, not an aarch64_gdbarch_tdep object. The - result of the above cast will, as a consequence, be undefined. - - In aarch64_linux_nat_target::thread_architecture, after the undefined - cast we then proceed to make use of TDEP, like this: - - if (vq == tdep->vq) - return inf->gdbarch; - - Obviously at this point the result is undefined, but, if this check - returns false we then proceed with this code: - - struct gdbarch_info info; - info.bfd_arch_info = bfd_lookup_arch (bfd_arch_aarch64, bfd_mach_aarch64); - info.id = (int *) (vq == 0 ? -1 : vq); - return gdbarch_find_by_info (info); - - As a consequence we will return an AArch64 gdbarch object for our ARM - thread! Things go downhill from there on. - - There are similar problems, with similar undefined behaviour, in the - fetch_registers and store_registers functions. - - The solution is to make use of a check like this: - - if (gdbarch_bfd_arch_info (inf->gdbarch)->bits_per_word == 32) - - If the word size is 32 then we know we have an ARM architecture. We - just need to make sure that we perform this check before trying to - read the tdep field. - - In aarch64_linux_nat_target::thread_architecture a little reordering, - and the addition of the above check allows us to easily avoid the - undefined behaviour. - - For fetch_registers and store_registers I made the decision to split - each of the functions into two new helper functions, and so - aarch64_linux_nat_target::fetch_registers now calls to either - aarch64_fetch_registers or aarch32_fetch_registers, and there's a - similar change for store_registers. - - One thing I had to decide was whether to place the new aarch32_* - functions into the aarch32-linux-nat.c file. In the end I decided to - NOT place the functions there, but instead leave them in - aarch64-linux-nat.c, my reasoning was this: - - The existing functions in that file are shared from arm-linux-nat.c - and aarch64-linux-nat.c, this generic code to support 32-bit ARM - debugging from either native target. - - In contrast, the two new aarch32 functions I have added _only_ make - sense when debugging on an AArch64 native target. These function - shouldn't be called from arm-linux-nat.c at all, and so, if we places - the functions into aarch32-linux-nat.c, the functions would be built - into a 32-bit ARM GDB, but never used. - - With that said, there's no technical reason why they couldn't go in - aarch32-linux-nat.c, so if that is preferred I'm happy to move them. - - After this commit the gdb.multi/multi-arch.exp passes. - -2022-06-09 Yvan Roux - - gdb/arm: Document and fix exception stack offsets - Add a description of exception entry context stacking and fix next - frame offset (at 0xA8 relative to R0 location) as well as FPU - registers ones (starting at 0x68 relative to R0). - - gdb/arm: Simplify logic for updating addresses - Small performance improvement by fetching previous SP value only - once before the loop and reuse it to avoid fetching at every - iteration. - -2022-06-09 Pedro Alves - - Fix ARM_CC_FOR_TARGET handling - The previous patch that introduced the arm_cc_for_target procedure - moved the ARM_CC_FOR_TARGET global check to that procedure, but forgot - to tell tcl that ARM_CC_FOR_TARGET is a global. As a result, - specifying ARM_CC_FOR_TARGET on the command line actually does - nothing. This fixes it. - - Change-Id: I4e33b7633fa665e2f7b8f8c9592a949d74a19153 - -2022-06-09 Yvan Roux - - gdb/arm: Terminate unwinding when LR is 0xffffffff - ARMv7-M Architecture Reference "A2.3.1 Arm core registers" states - that LR is set to 0xffffffff on reset. - - ARMv8-M Architecture Reference "B3.3 Registers" states that LR is set - to 0xffffffff on warm reset if Main Extension is implemented, - otherwise the value is unknown. - -2022-06-09 Andrew Burgess - - gdb/testsuite: solve problems with compiler_info caching - After this commit: - - commit 44d469c5f85a4243462b8966722dafa62b602bf5 - Date: Tue May 31 16:43:44 2022 +0200 - - gdb/testsuite: add Fortran compiler identification to GDB - - Some regressions were noticed: - - https://sourceware.org/pipermail/gdb-patches/2022-May/189673.html - - The problem is associated with how compiler_info variable is cached - between calls to get_compiler_info. - - Even before the above commit, get_compiler_info supported two - language, C and C++. Calling get_compiler_info would set the global - compiler_info based on the language passed as an argument to - get_compiler_info, and, in theory, compiler_info would not be updated - for the rest of the dejagnu run. - - This obviously is slightly broken behaviour. If the first call to - get_compiler_info was for the C++ language then compiler_info would be - set based on the C++ compiler in use, while if the first call to - get_compiler_info was for the C language then compiler_info would be - set based on the C compiler. - - This probably wasn't very noticable, assuming a GCC based test - environment then in most cases the C and C++ compiler would be the - same version. - - However, if the user starting playing with CC_FOR_TARGET or - CXX_FOR_TARGET, then they might not get the behaviour they expect. - - Except, to make matters worse, most of the time, the user probably - would get the behaviour they expected .... except when they didn't! - I'll explain: - - In gdb.exp we try to avoid global variables leaking between test - scripts, this is done with the help of the two procs - gdb_setup_known_globals and gdb_cleanup_globals. All known globals - are recorded before a test script starts, and then, when the test - script ends, any new globals are deleted. - - Normally, compiler_info is only set as a result of a test script - calling get_compiler_info or test_compiler_info. This means that the - compiler_info global will not exist when the test script starts, but - will exist when the test script end, and so, the compiler_info - variable is deleted at the end of each test. - - This means that, in reality, the compiler_info is recalculated once - for each test script, hence, if a test script just checks on the C - compiler, or just checks on the C++ compiler, then compiler_info will - be correct and the user will get the behaviour they expect. - - However, if a single test script tries to check both the C and C++ - compiler versions then this will not work (even before the above - commit). - - The situation is made worse be the behaviour or the load_lib proc. - This proc (provided by dejagnu) will only load each library once. - This means that if a library defines a global, then this global would - normally be deleted at the end of the first test script that includes - the library. - - As future attempts to load the library will not actually reload it, - then the global will not be redefined and would be missing for later - test scripts that also tried to load that library. - - To work around this issue we override load_lib in gdb.exp, this new - version adds all globals from the newly loaded library to the list of - globals that should be preserved (not deleted). - - And this is where things get interesting for us. The library - trace-support.exp includes calls, at the file scope, to things like - is_amd64_regs_target, which cause get_compiler_info to be called. - This means that after loading the library the compiler_info global is - defined. - - Our override of load_lib then decides that this new global has to be - preserved, and adds it to the gdb_persistent_globals array. - - From that point on compiler_info will never be recomputed! - - This commit addresses all the caching problems by doing the following: - - Change the compiler_info global into compiler_info_cache global. This - new global is an array, the keys of this array will be each of the - supported languages, and the values will be the compiler version for - that language. - - Now, when we call get_compiler_info, if the compiler information for - the specific language has not been computed, then we do that, and add - it to the cache. - - Next, compiler_info_cache is defined by calling - gdb_persistent_global. This automatically adds the global to the list - of persistent globals. Now the cache will not be deleted at the end - of each test script. - - This means that, for a single test run, we will compute the compiler - version just once for each language, this result will then be cached - between test scripts. - - Finally, the legacy 'gcc_compiled' flag is now only set when we call - get_compiler_info with the language 'c'. Without making this change - the value of 'gcc_compiled' would change each time a new language is - passed to get_compiler_info. If the last language was e.g. Fortran, - then gcc_compiled might be left false. - -2022-06-09 Andrew Burgess - - gdb/testsuite: handle errors better in test_compiler_info - Now that get_compiler_info might actually fail (if the language is not - handled), then we should try to handle this failure better in - test_compiler_info. - - After this commit, if get_compiler_info fails then we will return a - suitable result depending on how the user called test_compiler_info. - - If the user does something like: - - set version [test_compiler_info "" "unknown-language"] - - Then test_compiler_info will return an empty string. My assumption is - that the user will be trying to match 'version' against something, and - the empty string hopefully will not match. - - If the user does something like: - - if { [test_compiler_info "some_pattern" "unknown-language"] } { - .... - } - - Then test_compiler_info will return false which seems the obvious - choice. - - There should be no change in the test results after this commit. - -2022-06-09 Andrew Burgess - - gdb/testsuite: make 'c' default language for get/test compiler info - This commit is a minor cleanup for the two functions (in gdb.exp) - get_compiler_info and test_compiler_info. - - Instead of using the empty string as the default language, and just - "knowing" that this means the C language. Make this explicit. The - language argument now defaults to "c" if not specified, and the if - chain in get_compiler_info that checks the language not explicitly - handles "c" and gives an error for unknown languages. - - This is a good thing, now that the API appears to take a language, if - somebody does: - - test_compiler_info "xxxx" "rust" - - to check the version of the rust compiler then we will now give an - error rather than just using the C compiler and leaving the user - having to figure out why they are not getting the results they - expect. - - After a little grepping, I think the only place we were explicitly - passing the empty string to either get_compiler_info or - test_compiler_info was in gdb_compile_shlib_1, this is now changed to - pass "c" as the default language. - - There should be no changes to the test results after this commit. - -2022-06-09 Andrew Burgess - - gdb/testsuite: remove get_compiler_info calls from gdb.exp and dwarf.exp - We don't need to call get_compiler_info before calling - test_compiler_info; test_compiler_info includes a call to - get_compiler_info. - - This commit cleans up lib/gdb.exp and lib/dwarf.exp a little by - removing some unneeded calls to get_compiler_info. We could do the - same cleanup throughout the testsuite, but I'm leaving that for - another day. - - There should be no change in the test results after this commit. - -2022-06-09 Nils-Christian Kempke - - gdb/testsuite: use test_compiler_info in gcc_major_version - The procedure gcc_major_version was earlier using the global variable - compiler_info to retrieve gcc's major version. This is discouraged and - (as can be read in a comment in compiler.c) compiler_info should be - local to get_compiler_info and test_compiler_info. - - The preferred way of getting the compiler string is via calling - test_compiler_info without arguments. Gcc_major_version was changed to - do that. - -2022-06-09 Yvan Roux - - gdb: add Yvan Roux to gdb/MAINTAINERS - -2022-06-09 Andrew Burgess - - gdb/testsuite: resolve duplicate test names in gdb.threads/tls.exp - While running the gdb.threads/tls.exp test with a GDB configured - without Python, I noticed some duplicate test names. - - This is caused by a call to skip_python_tests that is within a proc - that is called multiple times by the test script. Each call to - skip_python_tests results in a call to 'unsupported', and this causes - the duplicate test names. - - After this commit we now call skip_python_tests just once and place - the result into a variable. Now, instead of calling skip_python_tests - multiple times, we just check the variable. - - There should be no change in what is tested after this commit. - -2022-06-09 Andrew Burgess - - gdb/testsuite: resolve duplicate test name in gnu_vector.exp - While testing on AArch64 I spotted a duplicate test name in the - gdb.base/gnu_vector.exp test. - - This commit adds a 'with_test_prefix' to resolve the duplicate. - - While I was in the area I updated a 'gdb_test_multiple' call to make - use of $gdb_test_name. - - There should be no change in what is tested after this commit. - -2022-06-09 GDB Administrator - - Automatic date update in version.in - -2022-06-08 Andrew Burgess - - gdb: make throw_perror_with_name static - The throw_perror_with_name function is not used outside of utils.c - right now. And as perror_with_name is just a wrapper around - throw_perror_with_name, then any future calls would be to - perror_with_name. - - Lets make throw_perror_with_name static. - - There should be no user visible changes after this commit. - -2022-06-08 Andrew Burgess - - gdb: remove trailing '.' from perror_with_name calls - I ran into this error while working on AArch64 GDB: - - Unable to fetch VFP registers.: Invalid argument. - - Notice the '.:' in the middle of this error message. - - This is because of this call in aarch64-linux-nat.c: - - perror_with_name (_("Unable to fetch VFP registers.")); - - The perror_with_name function take a string, and adds ': ' to - the end the string, so I don't think the string that we pass to - perror_with_name should end in '.'. - - This commit removes all of the trailing '.' characters from - perror_with_name calls, which give more readable error messages. - - I don't believe that any of these errors are tested in the - testsuite (after a little grepping). - -2022-06-08 Tom Tromey - - Move CU queue to dwarf2_per_objfile - The CU queue is a member of dwarf2_per_bfd, but it is only used when - expanding CUs. Also, the dwarf2_per_objfile destructor checks the - queue -- however, if the per-BFD object is destroyed first, this will - not work. This was pointed out Lancelot as fallout from the patch to - rewrite the registry system. - - This patch avoids this problem by moving the queue to the per-objfile - object. - -2022-06-08 Tom Tromey - - Change allocation of m_dwarf2_cus - m_dwarf2_cus manually manages the 'dwarf2_cu' pointers it owns. This - patch simplifies the code by changing it to use unique_ptr. - -2022-06-08 Andrew Burgess - - libopcodes: extend the styling within the i386 disassembler - The i386 disassembler is pretty complex. Most disassembly is done - indirectly; operands are built into buffers within a struct instr_info - instance, before finally being printed later in the disassembly - process. - - Sometimes the operand buffers are built in a different order to the - order in which they will eventually be printed. - - Each operand can contain multiple components, e.g. multiple registers, - immediates, other textual elements (commas, brackets, etc). - - When looking for how to apply styling I guess the ideal solution would - be to move away from the operands being a single string that is built - up, and instead have each operand be a list of "parts", where each - part is some text and a style. Then, when we eventually print the - operand we would loop over the parts and print each part with the - correct style. - - But it feels like a huge amount of work to move from where we are - now to that potentially ideal solution. Plus, the above solution - would be pretty complex. - - So, instead I propose a .... different solution here, one that works - with the existing infrastructure. - - As each operand is built up, piece be piece, we pass through style - information. This style information is then encoded into the operand - buffer (see below for details). After this the code can continue to - operate as it does right now in order to manage the set of operand - buffers. - - Then, as each operand is printed we can split the operand buffer into - chunks at the style marker boundaries, with each chunk being printed - with the correct style. - - For encoding the style information I use a single character, currently - \002, followed by the style encoded as a single hex digit, followed - again by the \002 character. - - This of course relies on there not being more than 16 styles, but that - is currently true, and hopefully will remain true for the foreseeable - future. - - The other major concern that has arisen around this work is whether - the escape character could ever be encountered in output naturally - generated by the disassembler. If this did happen then the escape - characters would be stripped from the output, and the wrong styling - would be applied. - - However, I don't believe that this is currently a problem. - Disassembler content comes from a number of sources. First there's - content that copied directly from the i386-dis.c file, this is things - like register names, and other syntax elements (brackets, commas, - etc). We can easily check that the i386-dis.c file doesn't contain - our special character. - - The next source of content are immediate operands. The text for these - operands is generated by calls into libc. By selecting a - non-printable character we can be confident that this is not something - that libc will generate as part of an immediate representation. - - The other output that appears to be from the disassembler is operands - that contain addresses and (possibly) symbol names. It is quite - possible that a symbol name might contain any special character we - could imagine, so is this a problem? - - I don't think it is, we don't actually print address and symbol - operands through the disassembler, instead, the disassembler calls - back to the user (objdump, gdb, etc) to print the address and symbol - on its behalf. This content is printed directly to the output stream, - it does not pass through the i386 disassembler output buffers. As a - result, we never check this particular output for styling escape - characters. - - In some (not very scientific) benchmarking on my machine, - disassembling a reasonably large (142M) shared library, I'm not seeing - any significant slow down in disassembler speed with this change. - - Most instructions are now being fully syntax highlighted when I - disassemble using the --disassembler-color=extended-color option. I'm - sure that there are probably still a few corner cases that need fixing - up, but we can come back to them later I think. - - When disassembler syntax highlighting is not being used, then there - should be no user visible changes after this commit. - -2022-06-08 Carl Love - - Fix gdb.arch/powerpc-power7.exp isel disassembly output. - The following commit changes the output format for the isel instruction on - PowerPC. - - commit dd4832bf3efc1bd1797a6b9188260692b8b0db52 Introduces error in test - Author: Dmitry Selyutin - Date: Tue May 24 13:46:35 2022 +0000 - - opcodes: introduce BC field; fix isel - - Per Power ISA Version 3.1B 3.3.12, isel uses BC field rather than CRB - field present in binutils sources. Also, per 1.6.2, BC has the same - semantics as BA and BB fields, so this should keep the same flags and - mask, only with the different offset. - - opcodes/ - * ppc-opc.c - (BC): Define new field, with the same definition as CRB field, - but with the PPC_OPERAND_CR_BIT flag present. - gas/ - * testsuite/gas/ppc/476.d: Update. - * testsuite/gas/ppc/a2.d: Update. - * testsuite/gas/ppc/e500.d: Update. - * testsuite/gas/ppc/power7.d: Update. - - --- a/gas/testsuite/gas/ppc/476.d - +++ b/gas/testsuite/gas/ppc/476.d - @@ -209,7 +209,7 @@ Disassembly of section \.text: - .*: (7c 20 07 8c|8c 07 20 7c) ici 1 - .*: (7c 03 27 cc|cc 27 03 7c) icread r3,r4 - .*: (50 83 65 36|36 65 83 50) rlwimi r3,r4,12,20,27 - -.*: (7c 43 27 1e|1e 27 43 7c) isel r2,r3,r4,28 - +.*: (7c 43 27 1e|1e 27 43 7c) isel r2,r3,r4,4\*cr7\+lt - - The above change breaks the gdb regression test gdb.arch/powerpc-power7.exp - on Power 7, Power 8, Power 9 and Power 10. - - This patch updates the regression test gdb.arch/powerpc-power7.exp with - the new expected output for the isel instruction. - - The patch has been tested on Power 7 and Power 10 to verify the patch fixes - the test. - -2022-06-08 Pedro Alves - - aarch64: Add fallback if ARM_CC_FOR_TARGET not set - On Aarch64, you can set ARM_CC_FOR_TARGET to point to the 32-bit - compiler to use when testing gdb.multi/multi-arch.exp and - gdb.multi/multi-arch-exec.exp. If you don't set it, then those - testcases don't run. - - I guess that approximately nobody remembers to set ARM_CC_FOR_TARGET. - - This commit adds a fallback. If ARM_CC_FOR_TARGET is not set, and - testing for Linux, try arm-linux-gnueabi-gcc, - arm-none-linux-gnueabi-gcc, arm-linux-gnueabihf-gcc as 32-bit - compilers, making sure that the produced executable runs on the target - machine before claiming that the compiler produces useful executables. - - Change-Id: Iefe5865d5fc84b4032eaff7f4c5c61582bf75c39 - -2022-06-08 Alan Modra - - Don't encode reloc.size - I expect the encoded reloc.size field originally came from aout - r_length ecoding, but somehow went wrong for 64-bit relocs (which - should have been encoded as 3). Toss all that out, just use a byte - size instead. The changes outside of reloc.c in this patch should - make the code independent of how reloc.size is encoded. - - * reloc.c (struct reloc_howto_struct): Increase size field by - one bit. Comment. - (HOWTO_RSIZE): Don't encode size. - (bfd_get_reloc_size): Adjust, and make it an inline function. - (read_reloc, write_reloc): Adjust. - * bfd-in2.h: Regenerate. - * aout-ns32k.c: Include libbfd.h. - (put_reloc): Don't use howto->size directly. Calculate r_length - using bfd_log2 and bfd_get_reloc_size. - * aoutx.h (swap_std_reloc_out): Likewise. - (aout_link_reloc_link_order): Likewise. - * i386lynx.c (swap_std_reloc_out - * mach-o-i386.c (bfd_mach_o_i386_swap_reloc_out - * pdp11.c (aout_link_reloc_link_order - * coff-arm.c (coff_arm_reloc): Don't use howto->size directly, - use bfd_get_reloc_size instead and adjust switch cases. - * coff-i386.c (coff_i386_reloc): Similarly. - * coff-x86_64.c (coff_amd64_reloc): Likewise. - * cpu-ns32k.c (do_ns32k_reloc): Likewise. - * elf32-arc.c (arc_do_relocation): Likewise. - * elf32-arm.c (elf32_arm_final_link_relocate): Likewise. - * elf32-bfin.c (bfin_bfd_reloc): Likewise. - * elf32-cr16.c (cr16_elf_final_link_relocate): Likewise. - * elf32-cris.c (cris_elf_pcrel_reloc): Likewise. - * elf32-crx.c (crx_elf_final_link_relocate): Likewise. - * elf32-csky.c (csky_elf_relocate_section): Likewise. - * elf32-d10v.c (extract_rel_addend, insert_rel_addend): Likewise. - * elf32-i386.c (elf_i386_relocate_section): Likewise. - * elf32-m32r.c (m32r_elf_generic_reloc): Likewise. - * elf32-nds32.c (nds32_elf_generic_reloc): Likewise. - * syms.c (_bfd_stab_section_find_nearest_line): Likewise. - * coff-rs6000.c (xcoff_ppc_relocate_section): Adjust howto.size. - * coff64-rs6000.c (xcoff64_ppc_relocate_section): Likewise. - -2022-06-08 Alan Modra - - bfin reloc offset checks - These all ought to use bfd_reloc_offset_in_range. In particular, replace - the check using howto->size + 1u. - - * elf32-bfin.c (bfin_pcrel24_reloc): Use bfd_reloc_offset_in_range. - (bfin_imm16_reloc, bfin_byte4_reloc, bfin_bfd_reloc), - (bfin_final_link_relocate): Likewise. - -2022-06-08 Alan Modra - - Revert reloc howto nits - The "HOWTO size encoding" patch put 1 as the HOWTO size arg for - numerous howtos that are unused, describe dynamic relocs, are markers, - or otherwise are special purpose reloc howtos that don't care about - the size. The idea was to ensure no howto changed by inspecting - object files. Revert those changes, making them zero size. - - * coff-alpha.c: Give special purpose reloc howtos a size of zero. - * coff-mcore.c, * elf-hppa.h, * elf-m10300.c, * elf32-arm.c, - * elf32-csky.c, * elf32-m32c.c, * elf32-m68k.c, * elf32-mep.c, - * elf32-mips.c, * elf32-ppc.c, * elf32-rx.c, * elf32-s390.c, - * elf32-spu.c, * elf32-tic6x.c, * elf32-tilepro.c, *elf32-vax.c, - * elf32-xtensa.c, * elf64-alpha.c, * elf64-mips.c, - * elf64-mmix.c, * elf64-ppc.c, * elf64-s390.c, * elfn32-mips.c, - * elfxx-loongarch.c, * elfxx-riscv.c, * elfxx-sparc.c, - * elfxx-tilegx.c, * som.c, * vms-alpha.c: Likewise. - -2022-06-08 Alan Modra - - HOWTO size encoding - This changes the HOWTO macro to encode the howto.size field from a - value given in bytes. This of course requires editing all target - uses of HOWTO, a major pain, but makes it a little nicer to specify - new target HOWTOs. Object files before/after this patch are - unchanged in .data and .rodata. - - bfd/ - * reloc.c (HOWTO_RSIZE): Encode size in bytes. - (EMPTY_HOWTO): Adjust to keep it all zero. - * aout-ns32k.c, * aoutx.h, * coff-alpha.c, * coff-arm.c, - * coff-i386.c, * coff-mcore.c, * coff-mips.c, * coff-rs6000.c, - * coff-sh.c, * coff-tic30.c, * coff-tic4x.c, * coff-tic54x.c, - * coff-x86_64.c, * coff-z80.c, * coff-z8k.c, * coff64-rs6000.c, - * elf-hppa.h, * elf-m10200.c, * elf-m10300.c, * elf32-arc.c, - * elf32-arm.c, * elf32-avr.c, * elf32-bfin.c, * elf32-cr16.c, - * elf32-cris.c, * elf32-crx.c, * elf32-csky.c, * elf32-d10v.c, - * elf32-d30v.c, * elf32-dlx.c, * elf32-epiphany.c, - * elf32-fr30.c, * elf32-frv.c, * elf32-ft32.c, * elf32-gen.c, - * elf32-h8300.c, * elf32-i386.c, * elf32-ip2k.c, * elf32-iq2000.c, - * elf32-lm32.c, * elf32-m32c.c, * elf32-m32r.c, * elf32-m68hc11.c, - * elf32-m68hc12.c, * elf32-m68k.c, * elf32-mcore.c, * elf32-mep.c, - * elf32-metag.c, * elf32-microblaze.c, * elf32-mips.c, - * elf32-moxie.c, * elf32-msp430.c, * elf32-mt.c, * elf32-nds32.c, - * elf32-nios2.c, * elf32-or1k.c, * elf32-pj.c, * elf32-ppc.c, - * elf32-pru.c, * elf32-rl78.c, * elf32-rx.c, * elf32-s12z.c, - * elf32-s390.c, * elf32-score.c, * elf32-score7.c, - * elf32-sh-relocs.h, * elf32-spu.c, * elf32-tic6x.c, - * elf32-tilepro.c, * elf32-v850.c, * elf32-vax.c, - * elf32-visium.c, * elf32-wasm32.c, * elf32-xc16x.c, - * elf32-xgate.c, * elf32-xstormy16.c, * elf32-xtensa.c, - * elf32-z80.c, * elf64-alpha.c, * elf64-bpf.c, * elf64-gen.c, - * elf64-mips.c, * elf64-mmix.c, * elf64-nfp.c, * elf64-ppc.c, - * elf64-s390.c, * elf64-x86-64.c, * elfn32-mips.c, - * elfnn-aarch64.c, * elfxx-ia64.c, * elfxx-loongarch.c, - * elfxx-mips.c, * elfxx-riscv.c, * elfxx-sparc.c, - * elfxx-tilegx.c, * mach-o-aarch64.c, * mach-o-arm.c, - * mach-o-i386.c, * mach-o-x86-64.c, * pdp11.c, * reloc.c, - * som.c, * vms-alpha.c: Adjust all uses of HOWTO. - * bfd-in2.h: Regenerate. - include/ - * elf/arc-reloc.def: Adjust all uses of HOWTO. - -2022-06-08 Alan Modra - - HOWTO_RSIZE - Define a helper macro for HOWTO. - - * reloc.c (HOWTO_RSIZE): Define. - (HOWTO): Use it. - * bfd-in2.h: Regenerate. - -2022-06-08 Alan Modra - - elf64-nfp reloc fix - These are all dummy howtos, there is no reason one of them should - have partial_inplace true. - - * elf64-nfp.c (elf_nfp_howto_table ): Don't - set partial_inplace. - -2022-06-08 Alan Modra - - coff-z80 reloc howto fixes - Mostly cosmetic unless attempting to link coff-z80 into another output - format. - - * coff-z80.c (howto_table ): Correct size. - (extra_case): Use bfd_{get,put}_24 when applying R_IMM24. - -2022-06-08 Alan Modra - - NONE reloc fixes - Make them all zero size standard do-nothing howtos. - - * elf32-csky.c (csky_elf_howto_table ): Correct howto. - * elf32-ft32.c (ft32_elf_howto_table ): Likewise. - * elf32-gen.c (dummy): Likewise. - * elf32-nds32.c (none_howto): Likewise. - * elf32-nios2.c (elf_nios2_r2_howto_table_rel ): - Likewise. - * elf32-pru.c (elf_pru_howto_table_rel ): Likewise. - * elf32-v850.c (v800_elf_howto_table ): Likewise. - * elf64-gen.c (dummy): Likewise. - * elfn32-mips.c (elf_mips_howto_table_rela - - asan: double free sb_kill - oss-fuzz hits a flaky crash with a double-free. I think this is due - to gas static state not being reinitialised between testcases, a bug - with oss-fuzz not gas. Anyway, this patch should avoid the problem. - - * input-scrub.c (input_scrub_push): Move init of sb_index.. - (input_scrub_reinit): ..to here. - -2022-06-08 GDB Administrator - - Automatic date update in version.in - -2022-06-07 Tom Tromey - - Use subclasses of windows_process_info - This changes windows_process_info to use virtual methods for its - callbacks, and then changes the two clients of this code to subclass - this class to implement the methods. - - I considered using CRTP here, but that would require making the new - structures visible to the compilation of of nat/windows-nat.c. This - seemed like a bit of a pain, so I didn't do it. - - This change then lets us change all the per-inferior globals to be - members of the new subclass. Note that there can still only be a - single inferior -- currently there's a single global of the new type. - This is just another step toward possibly implementing multi-inferior - for Windows. - - It's possible this could be cleaned up further... ideally I'd like to - move more of the data into the base class. However, because gdb - supports Cygwin and gdbserver does not, and because I don't have a way - to build or test Cygwin, larger refactorings are difficult. - -2022-06-07 Tom Tromey - - Turn some windows-nat.c static functions into methods - This patch turns some windows-nat.c static functions into methods on - windows_nat_target. This avoids having to reference the - windows_nat_target singleton in some more spots -- a minor code - cleanup. - - Allow ASLR to be disabled on Windows - On Windows, it is possible to disable ASLR when creating a process. - This patch adds code to do this, and hooks it up to gdb's existing - disable-randomization feature. Because the Windows documentation - cautions that this isn't available on all versions of Windows, the - CreateProcess wrapper function is updated to make the attempt, and - then fall back to the current approach if it fails. - - Introduce wrapper for CreateProcess - This is a small refactoring that introduces a wrapper for the Windows - CreateProcess function. This is done to make the next patch a bit - simpler. - -2022-06-07 Enze Li - - Update my email address in gdb/MAINTAINERS - -2022-06-07 Tom Tromey - - Constify solib_name_from_address - I noticed that solib_name_from_address returned a non-const string, - but it's more appropriate to return const. This patch implements - this. Tested by rebuilding. - -2022-06-07 Tom de Vries - - [gdb/rust] Add missing _() for error call - In commit 1390b65a1b9 ("[gdb/rust] Fix literal truncation") I forgot to add - _() around a string using in an error call. - - Fix this by adding the missing _(). - - Tested on x86_64-linux. - -2022-06-07 Tom de Vries - - [gdb] Allow frv::fr300 in selftests - In skip_arch in gdb/selftest-arch.c we skip architecture fr300 because of - PR20946, but the PR has been fixed by commit 0ae60c3ef45 ("Prevent an abort in - the FRV disassembler if the target bfd name is unknown.") in Januari 2017. - - Remove the skipping of frv::fr300. - - Tested on x86_64-linux. - -2022-06-07 GDB Administrator - - Automatic date update in version.in - -2022-06-06 Tom Tromey - - Consolidate "Python API" sections in NEWS - I noticed that the gdb NEWS file had two "Python API" sections in - "Changes since GDB 12". This patch consolidates the two. I chose to - preserve the second one, first because it is longer, and second - because I felt that user command changes should come before API - changes. - - Simplify varobj "change" logic - varobj used to store 'print_value' as a C string, where NULL was a - valid value, and so it had logic to handle this situation. However, - at some point this was changed to be a std::string, and so the code - can be simplified in this spot. - -2022-06-06 Tom Tromey - - Remove "-break-insert -r" tests - PR mi/14270 points out that mi-break.exp has some tests for an - unimplemented "-r" switch for "-break-insert". This switch was never - implemented, and is not documented -- though it is mentioned in a - comment in the documentation. This patch removes the test and the doc - comment. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=14270 - -2022-06-06 Tom de Vries - - [gdb] Name arch selftests more clearly - When running some all archs selftest I get: - ... - $ gdb -q -batch -ex "maint selftest unpack_field_as_long" - Running selftest unpack_field_as_long::A6. - ... - - By now I know that A6 is an arc architecture, but for others that's less - clear. - - Fix this by using unpack_field_as_long::arc::A6 instead. - - This then introduces redundant names like arm::arm, so try to avoid those, - though I'm not entirely convinced that that's worth the trouble. - - This introduces the following new names: - ... - +Running selftest unpack_field_as_long::am33_2::am33-2. - +Running selftest unpack_field_as_long::arc::A6. - +Running selftest unpack_field_as_long::arc::A7. - +Running selftest unpack_field_as_long::arc::EM. - +Running selftest unpack_field_as_long::arc::HS. - +Running selftest unpack_field_as_long::arm::ep9312. - +Running selftest unpack_field_as_long::arm::iwmmxt. - +Running selftest unpack_field_as_long::arm::iwmmxt2. - +Running selftest unpack_field_as_long::arm::xscale. - +Running selftest unpack_field_as_long::bpf::xbpf. - +Running selftest unpack_field_as_long::frv::fr400. - +Running selftest unpack_field_as_long::frv::fr450. - +Running selftest unpack_field_as_long::frv::fr500. - +Running selftest unpack_field_as_long::frv::fr550. - +Running selftest unpack_field_as_long::frv::simple. - +Running selftest unpack_field_as_long::frv::tomcat. - +Running selftest unpack_field_as_long::iq2000::iq10. - +Running selftest unpack_field_as_long::m32c::m16c. - +Running selftest unpack_field_as_long::mep::c5. - +Running selftest unpack_field_as_long::mep::h1. - +Running selftest unpack_field_as_long::nds32::n1. - +Running selftest unpack_field_as_long::nds32::n1h. - +Running selftest unpack_field_as_long::nds32::n1h_v2. - +Running selftest unpack_field_as_long::nds32::n1h_v3. - +Running selftest unpack_field_as_long::nds32::n1h_v3m. - +Running selftest unpack_field_as_long::z80::ez80-adl. - +Running selftest unpack_field_as_long::z80::ez80-z80. - +Running selftest unpack_field_as_long::z80::gbz80. - +Running selftest unpack_field_as_long::z80::r800. - +Running selftest unpack_field_as_long::z80::z180. - ... - - Tested on x86_64-linux. - -2022-06-06 Tom de Vries - - [gdb] Enable some more print_one_insn selftests - In print_one_insn_test we have this cluster of skipped tests: - ... - case bfd_arch_ia64: - case bfd_arch_mep: - case bfd_arch_mips: - case bfd_arch_tic6x: - case bfd_arch_xtensa: - return; - ... - - Enable some of these, and document in more detail why they're enabled or - skipped. - - Likewise, document bfd_arch_or1k because it's an odd case. - - Tested on x86_64-linux. - -2022-06-06 Tom de Vries - - [gdb] Fix maint selftest -v print_one_insn - When running the print_one_insn selftests with -v, I get: - ... - $ gdb -q -batch -ex "maint selftest -v print_one_insn" - Running selftest print_one_insn::A6. - .shor 0x783eRunning selftest print_one_insn::A7. - trap_s 0x1Running selftest print_one_insn::ARC600. - .shor 0x783eRunning selftest print_one_insn::ARC601. - Running selftest print_one_insn::ARC700. - trap_s 0x1Running selftest print_one_insn::ARCv2. - trap_s 0x1Running selftest print_one_insn::EM. - trap_s 0x1Running selftest print_one_insn::HS. - trap_s 0x1Running selftest print_one_insn::Loongarch32. - ... - - The insn is written to gdb_stdout, and there is code in the selftest to add a - newline after the insn, which writes to stream(). - - The stream() ui_file points into a string buffer, which the disassembler uses - before writing to gdb_stdout, so writing into it after the disassembler has - finished has no effect. - - Fix this by using gdb_stdlog and debug_printf (which is what the unit test - infrastructure itself uses) instead, such that we have: - ... - Running selftest print_one_insn::A6. - .shor 0x783e - Running selftest print_one_insn::A7. - trap_s 0x1 - Running selftest print_one_insn::ARC600. - .shor 0x783e - Running selftest print_one_insn::ARC601. - Running selftest print_one_insn::ARC700. - trap_s 0x1 - Running selftest print_one_insn::ARCv2. - trap_s 0x1 - Running selftest print_one_insn::Loongarch32. - ... - - Note: I've also removed the printing of arch_name, which would give - us otherwise the redundant: - ... - Running selftest print_one_insn::A6. - arc .shor 0x783e - Running selftest print_one_insn::A7. - arc trap_s 0x1 - ... - - Tested on x86_64-linux. - -2022-06-06 Andrew Burgess - - gdb/testsuite: add missing skip_python_tests call in py-doc-reformat.exp - In commit: - - commit 51e8dbe1fbe7d8955589703140ca5eba7b4f1bd7 - Date: Mon May 16 19:26:54 2022 +0100 - - gdb/python: improve formatting of help text for user defined commands - - the test that was added (gdb.python/py-doc-reformat.exp) was missing a - call to skip_python_tests. As a result, this test would fail for any - GDB built within Python support. - - This commit adds a call to skip_python_tests. - -2022-06-06 GDB Administrator - - Automatic date update in version.in - -2022-06-05 Tom Tromey - - Remove obsolete Python 2 comment - I found a comment that referred to Python 2, but that is now obsolete - -- the code it refers to is gone. I'm checking in this patch to - remove the comment. - - There's a similar comment elsewhere, but I plan to remove that one in - another patch I'm going to submit shortly. - -2022-06-05 GDB Administrator - - Automatic date update in version.in - -2022-06-04 Alan Modra - - asan: null dereference in coff_count_linenumbers - * coffgen.c (coff_count_linenumbers): Don't segfault when asymbol - the_bfd is NULL. - - asan: uninitialised write in bfd_mach_o_write_contents - * mach-o.c (bfd_mach_o_write_contents): Always set - bfd_mach_o_dyld_info_command *_off fields. - -2022-06-04 Tom de Vries - - [gdb/ada] Fix literal truncation - Make sure we error out on overflow instead of truncating in all cases. - - Tested on x86_64-linux, with a build with --enable-targets=all. - -2022-06-04 Tom de Vries - - [gdb/m2] Fix UB and literal truncation - Rewrite parse_number to use ULONGEST instead of LONGEST, to fix UB errors as - mentioned in PR29163. - - Furthermore, make sure we error out on overflow instead of truncating in all - cases. - - Tested on x86_64-linux, with a build with --enable-targets=all. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29163 - -2022-06-04 Tom de Vries - - [gdb/rust] Fix literal truncation - Make sure we error out on overflow instead of truncating in all cases. - - I've used as overflow string: "Integer literal is too large", based - on what I found at - /src/test/ui/parser/int-literal-too-large-span.rs - but perhaps someone has a better idea. - - Tested on x86_64-linux, with a build with --enable-targets=all. - -2022-06-04 Tom de Vries - - [gdb/pascal] Fix literal truncation - Make sure we error out on overflow instead of truncating in all cases. - - The current implementation of parse_number contains a comment about PR16377, - but that's related to C-like languages. In absence of information of whether - the same fix is needed for pascal, take the conservative approach and keep - behaviour for decimals unchanged. - - Tested on x86_64-linux, with a build with --enable-targets=all. - -2022-06-04 Tom de Vries - - [gdb/go] Fix literal truncation - Make sure we error out on overflow instead of truncating in all cases. - - The current implementation of parse_number contains a comment about PR16377, - but that's related to C-like languages. In absence of information of whether - the same fix is needed for go, take the conservative approach and keep - behaviour for decimals unchanged. - - Tested on x86_64-linux, with a build with --enable-targets=all. - -2022-06-04 Tom de Vries - - [gdb/fortran] Fix literal truncation - As mentioned in commit 5b758627a18 ("Make gdb.base/parse_number.exp test all - architectures"): - ... - There might be a bug that 32-bit fortran truncates 64-bit values to - 32-bit, given "p/x 0xffffffffffffffff" returns "0xffffffff". - ... - - More concretely, we have: - ... - $ for arch in i386:x86-64 i386; do \ - gdb -q -batch -ex "set arch $arch" -ex "set lang fortran" \ - -ex "p /x 0xffffffffffffffff"; \ - done - The target architecture is set to "i386:x86-64". - $1 = 0xffffffffffffffff - The target architecture is set to "i386". - $1 = 0xffffffff - ... - - Fix this by adding a range check in parse_number in gdb/f-exp.y. - - Furthermore, make sure we error out on overflow instead of truncating in all - other cases. - - Tested on x86_64-linux. - -2022-06-04 Tom de Vries - - [gdb/c] Fix type of 2147483648 and literal truncation - [ Assuming arch i386:x86-64, sizeof (int) == 4, - sizeof (long) == sizeof (long long) == 8. ] - - Currently we have (decimal for 0x80000000): - ... - (gdb) ptype 2147483648 - type = unsigned int - ... - - According to C language rules, unsigned types cannot be used for decimal - constants, so the type should be long instead (reported in PR16377). - - Fix this by making sure the type of 2147483648 is long. - - The next interesting case is (decimal for 0x8000000000000000): - ... - (gdb) ptype 9223372036854775808 - type = unsigned long - ... - - According to the same rules, unsigned long is incorrect. - - Current gcc uses __int128 as type, which is allowed, but we don't have that - available in gdb, so the strict response here would be erroring out with - overflow. - - Older gcc without __int128 support, as well as clang use an unsigned type, but with - a warning. Interestingly, clang uses "unsigned long long" while gcc uses - "unsigned long", which seems the better choice. - - Given that the compilers allow this as a convience, do the same in gdb - and keep type "unsigned long", and make this explicit in parser and test-case. - - Furthermore, make sure we error out on overflow instead of truncating in all - cases. - - Tested on x86_64-linux with --enable-targets=all. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=16377 - -2022-06-04 Tom de Vries - - [gdb/testsuite] Test more values in gdb.base/parse_numbers.exp - Currently we only test value 0xffffffffffffffff in test-case - gdb.base/parse_numbers.exp. - - Test more interesting values, both in decimal and hex format, as well as - negative decimals for language modula-2. - - This results in an increase in total tests from 15572 to 847448 (55 times - more tests). - - Balance out the increase in runtime by reducing the number of architectures - tested: only test one architecture per sizeof longlong/long/int/short - combination, while keeping the possibility intact to run with all - architectures (through setting a variable in the test-case) - - Results in slight reduction of total tests: 15572 -> 13853. - - Document interesting cases in the expected results: - - wrapping from unsigned to signed - - truncation - - PR16377: using unsigned types to represent decimal constants in C - - Running the test-case with a gdb build with -fsanitize=undefined, we trigger - two UB errors in the modula-2 parser, filed as PR29163. - - Tested on x86_64-linux with --enable-targets=all. - -2022-06-04 Tom de Vries - - [gdb/testsuite] Fix ERROR in gdb.ctf/funcreturn.exp - On openSUSE Tumbleweed (with gcc-12, enabling ctf tests) I run into: - ... - ERROR: tcl error sourcing src/gdb/testsuite/gdb.ctf/funcreturn.exp. - ERROR: tcl error code NONE - ERROR: Unexpected arguments: \ - {print v_double_func} \ - {[0-9]+ = {double \(\)} 0x[0-9a-z]+.*} \ - {print double function} \ - } - ... - - The problem is a curly brace as fourth argument to gdb_test, which errors out - due to recently introduced more strict argument checking in gdb_test. - - Fix the error by removing the brace. - - Though this fixes the error for me, due to PR29160 I get only FAILs, so I can't - claim proper testing on x86_64-linux. - -2022-06-04 Tom de Vries - - [gdb/testsuite] Fix gdb.threads/manythreads.exp with check-read1 - When running test-case gdb.threads/manythreads.exp with check-read1, I ran - into this hard-to-reproduce FAIL: - ... - [New Thread 0x7ffff7318700 (LWP 31125)]^M - [Thread 0x7ffff7321700 (LWP 31124) exited]^M - [New T^C^M - ^M - Thread 769 "manythreads" received signal SIGINT, Interrupt.^M - [Switching to Thread 0x7ffff6d66700 (LWP 31287)]^M - 0x00007ffff7586a81 in clone () from /lib64/libc.so.6^M - (gdb) FAIL: gdb.threads/manythreads.exp: stop threads 1 - ... - - The matching in the failing gdb_test_multiple is done in an intricate way, - trying to pass on some order and fail on another order. - - Fix this by rewriting the regexps to match one line at most, and detecting - invalid order by setting and checking state variables. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29177 - -2022-06-04 Tom de Vries - - [gdb] Fix warning in print_one_insn::ez80-adl - When running selftest print_one_insn::ez80-adl we run into this warning: - ... - Running selftest print_one_insn::ez80-adl. - warning: Unable to determine inferior's software breakpoint type: couldn't - find `_break_handler' function in inferior. Will be used default software \ - breakpoint instruction RST 0x08. - ... - - Fix this by explicitly handling bfd_arch_z80 in print_one_insn_test. - - Tested on x86_64-linux. - -2022-06-04 GDB Administrator - - Automatic date update in version.in - -2022-06-03 Tom Tromey - - Use bool for evregpy_no_listeners_p - I noticed that evregpy_no_listeners_p should return a bool. This - patch makes this change. I'm checking it in. - -2022-06-03 Alan Modra - - asan: heap buffer overflow in _bfd_mips_elf_section_from_shdr - * elfxx-mips.c (_bfd_mips_elf_section_from_shdr): Sanity check - intopt.size and remaining bytes in section for reginfo. - -2022-06-03 Alan Modra - - Re: ubsan: undefined shift in frag_align_code - This one needs the same fix too. - - * config/tc-i386.h (MAX_MEM_FOR_RS_ALIGN_CODE): Avoid signed - integer overflow. - -2022-06-03 Tom de Vries - - [gdb] Fix warning in foreach_arch selftests - When running the selftests, I run into: - ... - $ gdb -q -batch -ex "maint selftest" - ... - Running selftest execute_cfa_program::aarch64:ilp32. - warning: A handler for the OS ABI "GNU/Linux" is not built into this - configuration of GDB. Attempting to continue with the default aarch64:ilp32 - settings. - ... - and likewise for execute_cfa_program::i8086 and - execute_cfa_program::ia64-elf32. - - The warning can easily be reproduced outside the selftests by doing: - ... - $ gdb -q -batch -ex "set arch aarch64:ilp32" - ... - and can be prevented by first doing "set osabi none". - - Fix the warning by setting osabi to none while doing selftests that iterate - over all architectures. - - This causes a regression in the print_one_insn selftests for the ARC - architecture. - - The problem is pre-existing, and can be demonstrated (already without this - patch) using: - ... - $ gdb -q -batch -ex "set osabi none" -ex "maint selftest print_one_insn::A6" - Running selftest print_one_insn::A6. - Self test failed: Cannot access memory at address 0x0 - Ran 1 unit tests, 1 failed - $ - ... - - For ARC, we use the generic case in print_one_insn_test, containing this code: - ... - int kind = gdbarch_breakpoint_kind_from_pc (gdbarch, &pc); - ... - insn = gdbarch_sw_breakpoint_from_kind (gdbarch, kind, &bplen); - ... - - The problem is that with osabi linux we trigger: - ... - static int - arc_linux_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr) - { - return trap_size; - } - ... - but with osabi none: - ... - arc_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr) - { - size_t length_with_limm = gdb_insn_length (gdbarch, *pcptr); - ... - which needs access to memory, and will consequently fail. - - Fix this in print_one_insn_test, in the default case, by iterating over - supported osabi's to makes sure we trigger arc_linux_breakpoint_kind_from_pc - which will give us a usable instruction to disassemble. - - Tested on x86_64-linux. - -2022-06-03 Tom de Vries - - Revert "[gdb] Fix warning in foreach_arch selftests" - This reverts commit fc18b1c5afd ("[gdb] Fix warning in foreach_arch - selftests"). - - The commit introduced regressions for an --enable-targets=all build: - ... - Running selftest print_one_insn::A6.^M - Self test failed: Cannot access memory at address 0x0^M - ... - and while investigating those I realized that the commit fc18b1c5afd - complicates things by trying to set the current osabi. - - So, revert the patch in preparation for a simpler solution. - - Tested on x86_64-linux. - -2022-06-03 Jan Beulich - - x86: exclude certain ISA extensions from v3/v4 ISA - Like TBM and LWP, XOP and FMA4 also shouldn't be included in v3. - - Like AVX512-4VNNIW, AVX512-4FMAPS also shouldn't be included in v4. - -2022-06-03 Roland McGrath - - gdb: LoongArch: Remove nonportable #include - Don't use gregset.h in *-tdep.c since it's not usable on - hosts that don't have . It's not needed by - this file, and should only be needed by *-nat.c files. - -2022-06-03 Alan Modra - - Re: asan: mips_gprel_reloc segfault - Similarly for the elf mips support. - - * elf32-mips.c (mips_elf_final_gp): Don't segfault on symbols - in any of the bfd_is_const_section sections. - * elf64-mips.c (mips_elf64_final_gp): Likewise. - * elfn32-mips.c (mips_elf_final_gp): Likewise. - -2022-06-03 Alan Modra - - asan: mips_gprel_reloc segfault - Not just the undefined section has a NULL owner, the absolute section - has too. Which means we can't find output_bfd for __gp. Also, may as - well test directly for output_bfd == NULL. - - * coff-mips.c (mips_gprel_reloc): Don't segfault on any of - bfd_is_const_section sections. - -2022-06-03 GDB Administrator - - Automatic date update in version.in - -2022-06-02 Tom de Vries - - [gdb/testsuite] Detect change instead of init in gdb.mi/mi-var-block.exp - On openSUSE Tumbleweed with target board unix/-m32, I run into: - ... - PASS: gdb.mi/mi-var-block.exp: step at do_block_test 2 - Expecting: ^(-var-update \*[^M - ]+)?(\^done,changelist=\[{name="foo",in_scope="true",type_changed="false",has_more="0"}, - {name="cb",in_scope="true",type_changed="false",has_more="0"}\][^M - ]+[(]gdb[)] ^M - [ ]*) - -var-update *^M - ^done,changelist=[{name="foo",in_scope="true",type_changed="false",has_more="0"}]^M - (gdb) ^M - FAIL: gdb.mi/mi-var-block.exp: update all vars: cb foo changed (unexpected output) - ... - - The problem is that the test-case attempts to detect a change in the cb - variable caused by this initialization: - ... - void - do_block_tests () - { - int cb = 12; - ... - but that only works if the stack location happens to be unequal to 12 before - the initialization. - - Fix this by first initializing to 0, and then changing the value to 12: - ... - - int cb = 12; - + int cb = 0; - + cb = 12; - ... - and detecting that change. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29195 - -2022-06-02 Eli Zaretskii - - Rearrange and slightly reword the "Location Specification" section - This rearranges and changes the wording of the "Location - Specification" section of the GDB manual in minor ways. - -2022-06-02 Tom Tromey - - ODR warning for "main" - "main" is redeclared with a different type in maint.c. I think this - might have come from my first gdb patch, many many years ago. While I - wonder if this profiling code is actually useful at all any more, in - the meantime it's simple to fix the declaration. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395 - -2022-06-02 Tom Tromey - - ODR warnings for "struct coff_symbol" - "struct coff_symbol" is defined in multiple .c files, causing ODR - warnings. This patch renames just the xcoffread.c type. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395 - -2022-06-02 Tom Tromey - - ODR warnings for "struct insn_decode_record_t" - "struct insn_decode_record_t" is defined in multiple .c files, causing - ODR warnings. This patch renames the types, and removes the use of - "typedef" here -- this is a C-ism that's no longer needed. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395 - -2022-06-02 Tom Tromey - - ODR warnings for "struct insn_info" - "struct insn_info" is defined in multiple .c files, causing ODR - warnings. This patch renames the type in z80-tdep.c, leaving the - other one alone. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395 - -2022-06-02 Tom Tromey - - ODR warnings from overlay constants - Some overlay-related constants are duplicated in z80-tdep.c, causing - ODR warnings. This patch renames just the z80-specific ones. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395 - -2022-06-02 Tom Tromey - - ODR warning for "enum string_repr_result" - "enum string_repr_result" is defined in multiple .c files, causing ODR - warnings. This patch renames the types. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395 - -2022-06-02 Tom Tromey - - ODR warning for "struct find_targ_sec_arg" - "struct find_targ_sec_arg" is defined in multiple .c files, causing - ODR warnings. This patch renames the types. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395 - -2022-06-02 Tom Tromey - - ODR warning for "struct stack_item" - "struct stack_item" is defined in multiple .c files, causing ODR - warnings. This patch renames these types. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395 - -2022-06-02 Tom Tromey - - ODR warning for "struct instruction_type" - "struct instruction_type" is defined in multiple .c files, causing an - ODR warning. This patch renames the types. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395 - -2022-06-02 Tom Tromey - - ODR warning for struct ext_link_map - This renames the solib-dsbt.c copy of "struct ext_link_map" to avoid - an ODR warning. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395 - -2022-06-02 Tom Tromey - - ODR warning for struct field_info - This renames one of the instance of "struct field_info" to avoid an - ODR warning. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395 - -2022-06-02 Tom Tromey - - ODR warnings for struct nextfield - "struct nextfield" is defined in multiple places in GDB. This patch - renames just the stabs one, leaving the DWARF one untouched. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395 - -2022-06-02 Tom Tromey - - ODR warnings for struct symloc - "struct symloc" is defined in multiple spots in gdb, causing ODR - warnings. This patch renames these. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395 - -2022-06-02 Tom Tromey - - Fix ODR warning in observable.h - observable.h triggers an ODR warning because this line: - - extern observable target_changed; - - ... may be the only declaration of "struct target_ops" in scope - (depending on the particular .c file) -- and this declares it in a - namespace, resulting in confusion. - - This patch fixes the problem by adding a forward declaration. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395 - -2022-06-02 Tiezhu Yang - - gdb: LoongArch: Implement the software_single_step gdbarch method - When execute the following command on LoongArch: - - make check-gdb TESTS="gdb.base/branch-to-self.exp" - - there exist the following failed testcases: - - FAIL: gdb.base/branch-to-self.exp: single-step: si (timeout) - FAIL: gdb.base/branch-to-self.exp: break-cond: side=host: continue to breakpoint: continue to break (timeout) - FAIL: gdb.base/branch-to-self.exp: break-cond: side=host: p counter (timeout) - - Implement the software_single_step gdbarch method to decode the current - branch instruction and determine the address of the next instruction on - LoongArch to fix the above failed testcases. - -2022-06-02 Ilya Leoshkevich - - gdb: Do not add empty sections to the section map - From: Ulrich Weigand - - build_objfile_section_table () creates four synthetic sections per - objfile, which are collected by update_section_map () and passed to - std::sort (). When there are a lot of objfiles, for example, when - debugging JITs, the presence of these sections slows down the sorting - significantly. - - The output of update_section_map () is used by find_pc_section (), - which can never return any of these sections: their size is 0, so they - cannot be accepted by bsearch_cmp (). - - Filter them (and all the other empty sections) out in - insert_section_p (), which is used only by update_section_map (). - -2022-06-02 Jon Turney - - Fix a new warning on Cygwin - > ../../gdb/windows-nat.c: In function ‘windows_solib* windows_make_so(const char*, LPVOID)’: - > ../../gdb/windows-nat.c:714:12: error: declaration of ‘char name [512]’ shadows a parameter [-Werror=shadow=compatible-local] - > 714 | char name[SO_NAME_MAX_PATH_SIZE]; - > | ^~~~ - > ../../gdb/windows-nat.c:655:30: note: shadowed declaration is here - > 655 | windows_make_so (const char *name, LPVOID load_addr) - > | ~~~~~~~~~~~~^~~~ - - Fix Cygwin build after 85b25bd9 - Fix Cygwin build after 85b25bd9 ("Simplify windows-nat.c solib handling"). - - Fix Cygwin build after 0578e87f - Fix Cygwin build after 0578e87f ("Remove some globals from - nat/windows-nat.c"). Update code under ifdef __CYGWIN__ for globals - moved to members of struct windows_process_info. - - Fix Cygwin build after fcab5839 - Fix Cygwin build after fcab5839 ("Implement pid_to_exec_file for Windows - in gdbserver"). That change moves code from gdb/windows-nat.c to - gdb/nat/windows-nat.c, but doesn't add the required typedefs and - includes for parts of that code under ifdef __CYGWIN__. - -2022-06-02 Alan Modra - - Re: ubsan: signed integer overflow in atof_generic - Oops. - - * atof-generic.c: Include limits.h. - -2022-06-02 Alan Modra - - ubsan: signed integer overflow in atof_generic - Fix the signed overflows by using unsigned variables and detect - overflow at BUG! comment. - - * atof-generic.c (atof_generic): Avoid signed integer overflow. - Return ERROR_EXPONENT_OVERFLOW if exponent overflows a long. - -2022-06-02 Alan Modra - - asan: uninit write _bfd_ecoff_write_object_contents - * ecoff.c (_bfd_ecoff_write_object_contents): zalloc reloc_buff. - - asan: null deref in coff_write_relocs - * coffcode.h (coff_write_relocs): Don't deref NULL howto. - - ubsan: undefined shift in frag_align_code - * frags.c (MAX_MEM_FOR_RS_ALIGN_CODE): Avoid signed integer - overflow. - -2022-06-02 Alan Modra - - gas read_a_source_file #APP processing - This fixes some horrible code using do_scrub_chars. What we had ran - text through do_scrub_chars twice, directly in read_a_source_file and - again via the input_scrub_include_sb call. That's silly, and since - do_scrub_chars is a state machine, possibly wrong. More silliness is - evident in the temporary malloc'd buffer for do_scrub_chars output, - which should have been written directly to sbuf. - - So, get rid of the do_scrub_chars call and support functions, leaving - scrubbing to input_scrub_include_sb. I did wonder about #NO_APP - overlapping input_scrub_next_buffer buffers, but that should only - happen if the string starts in one file and finishes in another. - - * read.c (scrub_string, scrub_string_end): Delete. - (scrub_from_string): Delete. - (read_a_source_file): Rewrite #APP processing. - -2022-06-02 Alan Modra - - sb_scrub_and_add_sb not draining input string buffer - It is possible for sb_scrub_and_add_sb to not consume all of the input - string buffer. If this happens for reasons explained in the comment, - do_scrub_chars can leave pointers to the string buffer for the next - call. This patch fixes that by ensuring the input is drained. Note - that the behaviour for an empty string buffer is also changed, - avoiding another do_scrub_chars bug where empty input and single char - sized output buffers could result in a write past the end of the - output. - - sb.c (sb_scrub_and_add_sb): Loop until all of input sb is - consumed. - -2022-06-02 Alan Modra - - asan: heap buffer overflow in dwarf2_directive_filename - Seen with .file 4294967289 "xxx.c" - - * dwarf2dbg.c (assign_file_to_slot): Catch more cases of integer - overflow. Make param i an unsigned int. - -2022-06-02 Alan Modra - - asan: NULL deref in scan_unit_for_symbols - Since commit b43771b045 it has been possible to look up addresses - that match a unit with errors, since ranges are added to a trie while - the unit is being parsed. On error, parse_comp_unit leaves - first_child_die_ptr NULL which results in a NULL info_ptr being passed - to scan_unit_for_symbols. Fix this by setting unit->error. - - Also wrap some overlong lines, and fix some formatting errors. - - * dwarf2.c: Formatting. - (parse_comp_unit): Set unit->error on err_exit path. - -2022-06-02 GDB Administrator - - Automatic date update in version.in - -2022-06-01 Tom de Vries - - [gdb] Fix warning in foreach_arch selftests - When running the selftests, I run into: - ... - $ gdb -q -batch -ex "maint selftest" - ... - Running selftest execute_cfa_program::aarch64:ilp32. - warning: A handler for the OS ABI "GNU/Linux" is not built into this - configuration of GDB. Attempting to continue with the default aarch64:ilp32 - settings. - ... - and likewise for execute_cfa_program::i8086 and - execute_cfa_program::ia64-elf32. - - The warning can easily be reproduced outside the selftests by doing: - ... - $ gdb -q -batch -ex "set arch aarch64:ilp32" - ... - and can be prevented by first doing "set osabi none". - - Fix the warning by setting osabi to none while doing selftests that iterate - over all architectures. - - Tested on x86_64-linux. - -2022-06-01 Tom Tromey - - Add gdb.current_language and gdb.Frame.language - This adds the gdb.current_language function, which can be used to find - the current language without (1) ever having the value "auto" or (2) - having to parse the output of "show language". - - It also adds the gdb.Frame.language, which can be used to find the - language of a given frame. This is normally preferable if one has a - Frame object handy. - -2022-06-01 Yvan Roux - - [arm] Don't use special treatment for PC - In an exception frame the PC register is extracted from the stack - just like other base registers, so there is no need for a special - treatment. - - [arm] Add support for FPU registers in prologue unwinder - The prologue unwinder had support for FPU registers, but only to - calculate the correct offset on the stack, the values were not saved. - -2022-06-01 Yvan Roux - - [arm] d0..d15 are 64-bit each, not 32-bit - When unwinding the stack, the floating point registers d0 to d15 - need to be handled as double words, not words. - - Only the first 8 registers have been confirmed fixed with this patch - on a STM32F407-DISC0 board, but the upper 8 registers on Cortex-M33 - should be handled in the same way. - - The test consisted of running a program compiled with float-abi=hard. - In the main function, a function taking a double as an argument was - called. After the function call, a hardware timer was used to - trigger an interrupt. - - In the debug session, a breakpoint was set in the function called - from main to verify the content of the registers using "info float" - and another breakpoint in the interrupt handler was used to check - the same registers using "info float" on frame 2 (the frame just - before the dummy frame created for the signal handler in gdb). - -2022-06-01 Yvan Roux - - [arm] Cleanup: use hex for offsets - Changed offset from decimal to hex to match architecture reference - manual terminology and keep coherency with the rest of the code. - -2022-06-01 Jiangshuai Li - - gdb:csky save fpu and vdsp info to struct csky_gdbarch_tdep - First, add three variables fpu_abi, fpu_hardfp and vdsp_version - to csky_gdbarch_tdep. They will be initialized from info.abfd in - cskg_gdbarch_init. - - Now, they are just used to find a candidate among the list of pre-declared - architectures - - Later, they will be used in gdbarch_return_value and gdbarch_push_dummy_call - for funtions described below: - fpu_abi: to check if the bfd is using VAL_CSKY_FPU_ABI_HARD or - VAL_CSKY_FPU_ABI_SOFT - fpu_hardfp: to check if the bfd is using VAL_CSKY_FPU_HARDFP_SINGLE - or VAL_CSKY_FPU_HARDFP_DOUBLE - vdsp_version: to check if a function is returned with CSKY_VRET_REGNUM - -2022-06-01 Alan Modra - - Re: use libiberty xmalloc in bfd/doc/chew.c - We can't use libiberty.a in chew. libiberty is a host library, chew - a build program. Partly revert commit 7273d78f3f7a, instead define - local versions of the libiberty functions. ansidecl.h also isn't - needed. - - * doc/chew.c: Don't include libiberty.h or ansidecl.h. - (xmalloc, xrealloc, xstrdup): New functions. - * doc/local.mk (LIBIBERTY): Don't define or use. - * Makefile.in: Regenerate. - -2022-06-01 GDB Administrator - - Automatic date update in version.in - -2022-06-01 H.J. Lu - - x86: Properly handle IFUNC function pointer reference - Update - - commit 68c4956b1401de70173848a6bdf620cb42fa9358 - Author: H.J. Lu - Date: Tue Apr 26 09:08:54 2022 -0700 - - x86: Properly handle function pointer reference - - to properly handle IFUNC function pointer reference. Since IFUNC symbol - value is only known at run-time, set pointer_equality_needed for IFUNC - function pointer reference in PDE so that it will be resolved to its PLT - entry directly. - - bfd/ - - PR ld/29216 - * elf32-i386.c (elf_i386_scan_relocs): Set pointer_equality_needed - for IFUNC function pointer reference in PDE. - * elf64-x86-64.c (elf_x86_64_scan_relocs): Likewise. - - ld/ - - PR ld/29216 - * testsuite/ld-ifunc/ifunc.exp: Run PR ld/29216 test. - * testsuite/ld-ifunc/pr29216.c: New file. - -2022-05-31 H.J. Lu - - i386: Ajdust more tests for opcodes/i386: remove trailing whitespace - This fixes: - - FAIL: Build ifunc-1a with -z ibtplt - FAIL: Build ifunc-1a with PIE -z ibtplt - FAIL: Build libno-plt-1b.so - FAIL: No PLT (dynamic 1a) - FAIL: No PLT (dynamic 1b) - FAIL: No PLT (dynamic 1c) - FAIL: No PLT (static 1d) - FAIL: No PLT (PIE 1e) - FAIL: No PLT (PIE 1f) - FAIL: No PLT (PIE 1g) - FAIL: No PLT (dynamic 1h) - FAIL: No PLT (dynamic 1i) - FAIL: No PLT (static 1j) - - * ld-i386/libno-plt-1b.dd: Remove trailing whitespaces. - * ld-i386/no-plt-1a.dd: Likewise. - * ld-i386/no-plt-1b.dd: Likewise. - * ld-i386/no-plt-1c.dd: Likewise. - * ld-i386/no-plt-1d.dd: Likewise. - * ld-i386/no-plt-1e.dd: Likewise. - * ld-i386/no-plt-1f.dd: Likewise. - * ld-i386/no-plt-1g.dd: Likewise. - * ld-i386/no-plt-1h.dd: Likewise. - * ld-i386/no-plt-1i.dd: Likewise. - * ld-i386/no-plt-1j.dd: Likewise. - * ld-i386/plt-main-ibt.dd: Likewise. - * ld-i386/plt-pie-ibt.dd: Likewise. - -2022-05-31 Tom Tromey - - Use unique_ptr for objfiles - A while back, I changed objfiles to be held via a shared_ptr. The - idea at the time was that this was a step toward writing to the index - cache in the background, and this would let gdb keep a reference alive - to do so. However, since then we've rewritten the DWARF reader, and - the new index can do this without requiring a shared pointer -- in - fact there are patches pending to implement this. - - This patch switches objfile management to unique_ptr, which makes more - sense now. - - Regression tested on x86-64 Fedora 34. - -2022-05-31 Nils-Christian Kempke - - gdb/testsuite: fixup common-block.exp for intel compilers - The order in which the variables in info common and info locals are - displayed is compiler (and dwarf) dependent. While all symbols should - be displayed the order is not fixed. - - I added a gdb_test_multiple that lets ifx and ifort pass in cases where - only the order differs. - -2022-05-31 Nils-Christian Kempke - - gdb, testsuite, fortran: fixup mixed-lang-stack for Intel/LLVM compilers - When value-printing a pointer within GDB by default GDB will look for - defined symbols residing at the address of the pointer. For the given - test the Intel/LLVM compiler stacks both display a symbol associated - with a printed pointer while the gnu stack does not. This leads to - failures in the test when running the test with CC_FOR_TARGET='clang' - CXX_FOR_TARGET='clang' F90_FOR_TARGET='flang'" - - (gdb) b 37 - (gdb) r - (gdb) f 6 - (gdb) info args - a = 1 - b = 2 - c = 3 - d = 4 + 5i - f = 0x419ed0 "abcdef" - g = 0x4041a0 <.BSS4> - - or CC_FOR_TARGET='icx' CXX_FOR_TARGET='icpx' F90_FOR_TARGET='ifx'" - - (gdb) b 37 - (gdb) r - (gdb) f 6 - (gdb) info args - a = 1 - b = 2 - c = 3 - d = 4 + 5i - f = 0x52eee0 "abcdef" - g = 0x4ca210 - - For the compiled binary the Intel/LLVM compilers both decide to move the - local variable g into the .bss section of their executable. The gnu - stack will keep the variable locally on the stack and not define a - symbol for it. - - Since the behavior for Intel/LLVM is actually expected I adapted the - testcase at this point to be a bit more allowing for other outputs. - I added the optional "" to the regex testing for g. - - The given changes reduce the test fails for Intel/LLVM stack by 4 each. - -2022-05-31 Nils-Christian Kempke - - gdb, testsuite, fortran: fix double free in mixed-lang-stack.exp - While testing mixed-lang-stack I realized that valgrind actually - complained about a double free in the test. - - All done - ==2503051== - ==2503051== HEAP SUMMARY: - ==2503051== in use at exit: 0 bytes in 0 blocks - ==2503051== total heap usage: 26 allocs, 27 frees, 87,343 bytes allocated - ==2503051== - ==2503051== All heap blocks were freed -- no leaks are possible - ==2503051== - ==2503051== For lists of detected and suppressed errors, rerun with: -s - ==2503051== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0) - - Reason for this is that in mixed-lang-stack.cpp in mixed_func_1f an - object "derived_type obj" goes on the stack which is then passed-by-value - (so copied) to mixed_func_1g. The default copy-ctor will be called but, - since derived_type contains a heap allocated string and the copy - constructor is not implemented it will only be able to shallow copy the - object. Right after each of the functions the object gets freed - on the - other hand the d'tor of derived_type actually is implemented and calls - free on the heap allocated string which leads to a double free. Instead - of obeying the rule of 3/5 I just got rid of all that since it does not - serve the test. The string is now just a const char* = ".." object - member. - -2022-05-31 Nils-Christian Kempke - - testsuite, fortran: allow additional completions in module.exp - For ifort, ifx, and flang the tests "complete modm" and "complete - modmany" fail. This is because all three emit additional completion - suggestions. These additional suggestions have their origin in symbols - emitted by the compilers which can also be completed from the respective - incomplete word (modm or modmany). For this specific example gfortran - does not emit any additional symbols. - - For example, in this test the linkage name for var_a in ifx is - "modmany_mp_var_a_" while gfortran uses "__modmany_MOD_var_a" instead. - Since modmany_mp_var_a can be completed from modm and also modmany they - will get displayed, while gfortran's symbol starts with "__" and thus will - be ignored (it cannot be a completion of a word starting with "m"). - - Similar things happen in flang and ifort. Some example output is shown - below: - - FLANG - (gdb) complete p modm - p modmany - p modmany::var_a - p modmany::var_b - p modmany::var_c - p modmany::var_i - p modmany_ - - IFX/IFORT - (gdb) complete p modm - p modmany - p modmany._ - p modmany::var_a - p modmany::var_b - p modmany::var_c - p modmany::var_i - p modmany_mp_var_a_ - p modmany_mp_var_b_ - p modmany_mp_var_c_ - p modmany_mp_var_i_ - - GFORTRAN - (gdb) complete p modm - p modmany - p modmany::var_a - p modmany::var_b - p modmany::var_c - p modmany::var_i - - I want to emphasize: for Fortran (and also C/C++) the complete command - does not actually check whether its suggestions make sense - all it does - is look for any symbol (in the minimal symbols, partial symbols etc.) - that a given substring can be completed to (meaning that the given substring - is the beginning of the symbol). One can easily produce a similar - output for the gfortran compiled executable. For this look at the - slightly modified "complete p mod" in gfortran: - - (gdb) complete p mod - p mod1 - p mod1::var_const - ... - p mod_1.c - p modcounter - p mode_t - p modf - ... - p modify_ldt - p modmany - p modmany::var_a - p modmany::var_b - p modmany::var_c - p modmany::var_i - p module - p module.f90 - p module_entry - p moduse - p moduse::var_x - p moduse::var_y - - Many of the displayed symbols do not actually work with print: - - (gdb) p mode_t - Attempt to use a type name as an expression - (gdb) p mod_1.c - No symbol "mod_1" in current context. - (gdb) - - I think that in the given test the output for gfortran only looks nice - "by chance" rather than is actually expected. Expected is any output - that also contains the completions - - p modmany - - p modmany::var_a - p modmany::var_b - p modmany::var_c - p modmany::var_i - - while anythings else can be displayed as well (depending on the - compiler and its emitted symbols). - - This, I'd consider all three outputs as valid and expected - one is just - somewhat lucky that gfortran does not produce any additional symbols that - got matched. - - The given patch improves test performance for all three compilers - by allowing additional suggested completions inbetween and after - the two given blocks in the test. I did not allow additional print - within the modmany_list block since the output is ordered alphabetically - and there should normally not appear any additional symbols there. - - For flang/ifx/ifort I each see 2 failures less (which are exactly the two - complete tests). - - As a side note and since I mentioned C++ in the beginning: I also tried - the gdb.cp/completion.exp. The output seems a bit more reasonable, - mainly since C++ actually has a demangler in place and linkage symbols - do not appear in the output of complete. Still, with a poor enough - to-be-completed string one can easily produce similar results: - - (gdb) complete p t - ... - p typeinfo name for void - p typeinfo name for void const* - p typeinfo name for void* - p typeinfo name for wchar_t - p typeinfo name for wchar_t const* - p typeinfo name for wchar_t* - p t *** List may be truncated, max-completions reached. *** - (gdb) p typeinfo name for void* - No symbol "typeinfo" in current context. - (gdb) complete p B - p BACK_SLASH - p BUF_FIRST - p BUF_LAST - ... - p Base - p Base::Base() - p Base::get_foo() - p bad_key_err - p buf - p buffer - p buffer_size - p buflen - p bufsize - p build_charclass.isra - (gdb) p bad_key_err - No symbol "bad_key_err" in current context. - - (compiled with gcc/g++ and breaking at main). - - This patch is only about making the referenced test more 'fair' for the - other compilers. Generally, I find the behavior of complete a bit - confusing and maybe one wants to change this at some point but this - would be a bigger task. - -2022-05-31 Nils-Christian Kempke - - testsuite, fortran: fix info-types for intel compilers - This info-types.exp test case had a few issues that this patch fixes. - - First, the emitted symbol character(kind=1)/character*1 (different - compilers use different naming converntions here) which is checkedin the - test is not actually expected given the test program. There is no - variable of that type in the test. Still, gfortran emits it for every - Fortran program there is. The reason is the way gfortran handles Fortran's - named main program. It generates a wrapper around the Fortran program - that is quite similar to a C main function. This C-like wrapper has - argc and argv arguments for command line argument passing and the argv - pointer type has a base type character(kind=1) DIE emitted at CU scope. - - Given the program - - program prog - end program prog - - the degbug info gfortran emits looks somewhat like - - <0>: Abbrev Number: 3 (DW_TAG_compile_unit) - ... - <1><2f>: Abbrev Number: 4 (DW_TAG_subprogram) - <30> DW_AT_external : 1 - <30> DW_AT_name : (indirect string, ...): main - ... - <2><51>: Abbrev Number: 1 (DW_TAG_formal_parameter) - <52> DW_AT_name : (indirect string, ...): argc - ... - <2><5d>: Abbrev Number: 1 (DW_TAG_formal_parameter) - <5e> DW_AT_name : (indirect string, ...): argv - ... - <62> DW_AT_type : <0x77> - ... - <2><6a>: Abbrev Number: 0 - ... - <1><77>: Abbrev Number: 6 (DW_TAG_pointer_type) - <78> DW_AT_byte_size : 8 - <79> DW_AT_type : <0x7d> - <1><7d>: Abbrev Number: 2 (DW_TAG_base_type) - <7e> DW_AT_byte_size : 1 - <7f> DW_AT_encoding : 8 (unsigned char) - <80> DW_AT_name : (indirect string, ...): character(kind=1) - <1><84>: Abbrev Number: 7 (DW_TAG_subprogram) - <85> DW_AT_name : (indirect string, ...): prog - ... - - Ifx and flang do not emit any debug info for a wrapper main method so - the type is missing here. There was the possibility of actually adding - a character*1 type variable to the Fortran executable, but both, ifx and - gfortran chose to emit this variable's type as a DW_TAG_string_type of - length one (instead of a character(kind=1), or whatever the respective - compiler naming convention is). While string types are printed as - character*LENGHT in the fortran language part (e.g. when issuing a - 'ptype') they do not generate any symbols inside GDB. In read.c it says - - /* These dies have a type, but processing them does not create - a symbol or recurse to process the children. Therefore we can - read them on-demand through read_type_die. */ - - So they did not add any output to 'info types'. Only flang did emit a - character type here. - As adding a type would have a) not solved the problem for ifx and would - have b) somehow hidden the curious behavior of gfortran, instead, the - check for this character type was chagened to optional with the - check_optional_entry to allow for the symbols's absence and to allow - flang and ifx to pass this test as well. - - Second, the line checked for s1 was hardcoded as 37 in the test. Given - that the type is actually defined on line 41 (which is what is emitted by - ifx) it even seems wrong. The line check for s1 was changed to actually - check for 41 and a gfortran bug has been filed here - - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105454 - - The test is now marked as xfail for gfortran. - - Third, the whole test of checking for the 'Type s1' in info types seemed - questionable. The type s1 is declared iside the scope of the Fortran - program info_types_test. Its DIE however is emitted as a child of the - whole compilation unit making it visible outside of the program's scope. - The 'info types' command checks for types stored in the GLOBAL_BLOCK, - or STATIC_BLOCKm wgucm according to block.h - - The GLOBAL_BLOCK contains all the symbols defined in this compilation - whose scope is the entire program linked together. - The STATIC_BLOCK contains all the symbols whose scope is the - entire compilation excluding other separate compilations. - - so for gfortran, the type shows up in the output of 'info types'. For - flang and ifx on the other hand this is not the case. The two compilers - emit the type (correctly) as a child of the Fortran program, thus not - adding it to either, the GLOBAL_BLOCK nor the LOCAL_BLOCK. A bug has - been opened for the gfortran scoping issue: - - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105454 - - While the most correct change might have been removing the check for s1, - the change made here was to only check for this type in case of gfortran - being used as the compiler, as this check also covers the declaration - line issue mentioned above. A comment was added to maybe remove this - check once the scoping issue is resolved (and it starts to fail with - newer gfortran versions). The one used to test these changes was 13.0. - -2022-05-31 Nils-Christian Kempke - - testsuite/lib: add check_optional_entry for GDBInfoSymbols - There was already a similar functionality for the GDBInfoModuleSymbols. - This just extends the GDBInfoSymbols. We will use this feature in a - later commit to make a testcase less GNU specific and more flexible for - other compilers. - - Namely, in gdb.fortran/info-types.exp currenlty - GDBInfoSymbols::check_entry is used to verify and test the output of the - info symbols command. The test, however was written with gfortran as a - basis and some of the tests are not fair with e.g. ifx and ifort as - they test for symbols that are not actually required to be emitted. The - lines - GDBInfoSymbols::check_entry "${srcfile}" "" "${character1}" - and - GDBInfoSymbols::check_entry "${srcfile}" "37" "Type s1;" - - check for types that are either not used in the source file (character1) - or should not be emitted by the compiler at global scope (s1) thus no - appearing in the info symbols command. In order to fix this we will - later use the newly introduced check_optional_entry over check_entry. - -2022-05-31 Nils-Christian Kempke - - testsuite, fortran: Add '-debug-parameters all' when using ifx/ifort - In order for ifx and ifort to emit all debug entries, even for unused - parameters in modules we have to define the '-debug-parameters all' flag. - - This commit adds it to the ifx-*/ifort-* specific flags in gdb.exp. - -2022-05-31 Nils-Christian Kempke - - testsuite, fortran: add compiler dependent types to dynamic-ptype-whatis - The test was earlier not using the compiler dependent type print system - in fortran.exp. I changed this. It should generally improve the test - performance for different compilers. For ifx and gfortran I do not see - any failures. - -2022-05-31 Nils-Christian Kempke - - testsuite, fortran: add required external keyword - Currenlty, ifx/ifort cannot compile the given executable as it is not - valid Fortran. It is missing the external keyword on the - no_arg_subroutine. Gfortran compiles the example but this is actually - a bug and there is an open gcc ticket for this here: - - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=50377 - - Adding the keyword does not change the gfortran compiling of the example. - It will, however, prevent a future fail once 50377 has been addressed. - -2022-05-31 Nils-Christian Kempke - - gdb/testsuite: disable charset.exp for intel compilers - The test specifically tests for the Fortran CHARACTER(KIND=4) which is - not available in ifx/ifort. - - Since the other characters are also printed elsewhere, we disable this - test for the unsupported compilers. - -2022-05-31 Nils-Christian Kempke - - gdb/testsuite: rename intel next gen c/cpp compilers - The name for icx and icpx in the testsuite was earlier set to 'intel-*' - by the compiler identification. This commit changes this to 'icx-*'. - - Note, that currently these names are not used within the testsuite so no - tests have to be adapted here. - -2022-05-31 Cristian Sandu - Nils-Christian Kempke - - gdb/testsuite: add Fortran compiler identification to GDB - This commit adds a separate Fortran compiler identification mechanism to - the testsuite, similar to the existing one for C/C++. Before this - change, the options and version for the Fortran compiler specified when - running the testsuite with F90_FOR_TARGET set, was detected via its - respective C compiler. So running the testsuite as - - make check TEST=gdb.fortran/*.exp CC_FOR_TARGET=gcc F90_FOR_TARGET=ifx - - or even - - make check TEST=gdb.fortran/*.exp F90_FOR_TARGET=ifx - - would use the gcc compiler inside the procedures get_compiler_info and - test_compiler_info to identify compiler flags and the compiler version. - This could sometimes lead to unpredictable outputs. It also limited - testsuite execution to combinations where C and Fortran compiler would - come from the same family of compiers (gcc/gfortran, icc/ifort, icx/ifx, - clang/flang ..). This commit enables GDB to detect C and Fortran - compilers independently of each other. - - As most/nearly all Fortran compilers have a mechanism for preprocessing - files in a C like fashion we added the exact same meachnism that already - existed for C/CXX. We let GDB preprocess a file with the compilers - Fortran preprocessor and evaluate the preprocessor defined macros in that - file. - - This enables GDB to properly run heterogeneous combinations of C and - Fortran compilers such as - - CC_FOR_TARGET='gcc' and F90_FOR_TARGET='ifort' - - or enables one to run the testsuite without specifying a C compiler as in - - make check TESTS=gdb.fortran/*.exp F90_FOR_TARGET='ifx' - make check TESTS=gdb.fortran/*.exp F90_FOR_TARGET='flang' - - On the other hand this also requires one to always specify a - identification mechanism for Fortran compilers in the compiler.F90 file. - - We added identification for GFORTRAN, FLANG (CLASSIC and LLVM) IFX, - IFORT, and ARMFLANG for now. - - Classic and LLVM flang were each tested with their latest releases on - their respective release pages. Both get recognized by the new compiler - identification and we introduced the two names flang-classic and - flang-llvm to distinguish the two. While LLVM flang is not quite mature - enough yet for running the testsuite we still thought it would be a good - idea to include it already. For this we added a case for the fortran_main - procedure. LLVM flang uses 'MAIN__' as opposed to classic flang which - uses 'MAIN_' here. - - We did not have the possibility to test ARMFLANG - the versioning scheme - here was extracted from its latest online documentation. - - We changed the test_compiler_info procedure to take another optional - argument, the language string, which will be passed though to the - get_compiler_info procedure. Passing 'f90' or 'c++' here will then - trigger the C++/Fortran compiler identification within - get_compiler_info. The latter procedure was extended to also handle - the 'f90' argument (similarly to the already existing 'c++' one). - -2022-05-31 Nils-Christian Kempke - - gdb/testsuite: move getting_compiler_info to front of gdb_compile - The procedure gdb_compile queries its options via - - [lsearch -exact $options getting_compiler_info] - - to check whether or not it was called in with the option - getting_compiler_info. If it was called with this option it would - preprocess some test input to try and figure out the actual compiler - version of the compiler used. While doing this we cannot again try to - figure out the current compiler version via the 'getting_compiler_info' - option as this would cause infinite recursion. As some parts of the - procedure do recursively test for the compiler version to e.g. set - certain flags, at several places gdb_compile there are checks for the - getting_compiler_info option needed. - - In the procedure, there was already a variable 'getting_compiler_info' - which was set to the result of the 'lsearch' query and used instead of - again and again looking for getting_compiler_info in the procedure - options. But, this variable was actually set too late within the code. - This lead to a mixture of querying 'getting_compiler_info' or - doing an lserach on the options passed to the procedure. - - I found this inconsistent and instead moved the variable - getting_compiler_info to the front of the procedure. It is set to true - or false depending on whether or not the argument is found in the - procedure's options (just as before) and queried instead of doing an - lsearch on the procedure options in the rest of the procedure. - -2022-05-31 Felix Willgerodt - Abdul Basit Ijaz - Nils-Christian Kempke - - gdb/testsuite: Fix fortran types for Intel compilers. - Newer Intel compilers emit their dwarf type name in a slightly different - format. Therefore, this needs adjustment to make more tests pass in the - Fortran testsuite. - -2022-05-31 Abdul Basit Ijaz - - gdb/testsuite: Use -module option for Intel Fortran compilers - The '-J' option is not supported in Intel compilers (ifx and ifort). - The Intel version of the flag is '-module' which serves the same purpose. - -2022-05-31 Nils-Christian Kempke - - gdb/testsuite: remove F77_FOR_TARGET support - The last uses of the F77_FOR_TARGET via passing f77 to GDB's compile - procedure were removed in this commit - - commit 0ecee54cfd04a60e7ca61ae07c72b20e21390257 - Author: Tom Tromey - Date: Wed Jun 29 17:50:47 2011 +0000 - - over 10 years ago. The last .f files in the testsuite by now are all - being compiled by passing 'f90' to the GDB compile, thus only actually - using F90_FOR_TARGET (array-element.f, block-data.f, subarray.f). - Gfortran in this case is backwards compatible with most f77 code as - claimed on gcc.gnu.org/fortran. - - The reason we'd like to get rid of this now is, that we'll be - implementing a Fortran compiler identification mechanism, similar to the - C/Cpp existing ones. It would be using the Fortran preprocessor macro - defines to identify the Fortran compiler version at hand. We found it - inconsequent to only implement this for f90 but, on the other hand, f77 - seems deprecated. So, with this commit we remove the remaining lines for - its support. - -2022-05-31 Pedro Alves - - Improve clear command's documentation - Co-Authored-By: Eli Zaretskii - - Change-Id: I9440052fd28f795d6f7c93a4576beadd21f28885 - -2022-05-31 Pedro Alves - - Clarify why we unit test matching symbol names with 0xff characters - In the name matching unit tests in gdb/dwarf2/read.c, explain better - why we test symbols with \377 / 0xff characters (Latin1 'ÿ'). - - Change-Id: I517f13adfff2e4d3cd783fec1d744e2b26e18b8e - -2022-05-31 Pedro Alves - - Improve break-range's documentation - Change-Id: Iac26e1d2e7d8dc8a7d9516e6bdcc5c3fc4af45c8 - - Explicitly mention yet-unloaded shared libraries in location spec examples - Change-Id: I05639ddb3bf620c7297b57ed286adc3aa926b7b6 - -2022-05-31 Alan Modra - - sparc64 segfault in finish_dynamic_symbol - SYMBOL_REFERENCES_LOCAL can return true for undefined symbols. This - can result in a segfault when running sparc64 ld/testsuite/ld-vsb - tests that expect a failure. - - * elfxx-sparc.c (_bfd_sparc_elf_finish_dynamic_symbol): Don't - access u.def.section on non-default visibility undefined symbol. - -2022-05-31 Alan Modra - - ia64 gas: Remove unnecessary init - The whole struct is cleared by alloc_record. - - * config/tc-ia64.c (output_prologue, output_prologue_gr): Don't - zero r.record.r.mask. - -2022-05-31 Alan Modra - - v850_elf_set_note prototype - v850_elf_set_note is declared using an unsigned int note param in - elf32-v850.h but defined with enum c850_notes note in elf32-v850.c. - Current mainline gcc is warning about this. Huh. - - * elf32-v850.c (v850_elf_set_note): Make "note" param an - unsigned int. - -2022-05-31 Alan Modra - - Import libiberty from gcc - PR 29200 - include/ - * ansidecl.h, - * demangle.h: Import from gcc. - libiberty/ - * cp-demangle.c, - * testsuite/demangle-expected: Import from gcc. - -2022-05-31 Andrew Burgess - - gdb/testsuite: resolve duplicate test name in gdb.trace/signal.exp - Spotted a duplicate test name in gdb.trace/signal.exp, resolved in - this commit by making use of 'with_test_prefix'. - -2022-05-31 Alan Modra - - Ajdust more tests for opcodes/i386: remove trailing whitespace - git commit 202be274a4 also missed adjusting a few testsuite files. - This fixes - i686-vxworks +FAIL: VxWorks shared library test 1 - i686-vxworks +FAIL: VxWorks executable test 1 (dynamic) - -2022-05-31 Alan Modra - - Trailing spaces in objdump -r header - git commit 202be274a4 went a little wild in removing trailing spaces - in gas/testsuite/gas/i386/{secidx.d,secrel.d}, causing - x86_64-w64-mingw32 +FAIL: i386 secrel reloc - x86_64-w64-mingw32 +FAIL: i386 secidx reloc - - I could have just replaced the trailing space, but let's fix the - objdump output instead. Touches lots of testsuite files. - -2022-05-31 GDB Administrator - - Automatic date update in version.in - -2022-05-30 Simon Marchi - - gdb/testsuite: fix gdb.trace/signal.exp on x86 - Patch - - 202be274a41a ("opcodes/i386: remove trailing whitespace from insns with zero operands") - - causes this regression: - - FAIL: gdb.trace/signal.exp: find syscall insn in kill - - It's because the test still expects to match a whitespace after the - instruction, which the patch mentioned above removed. Remove the - whitespaces for the regexp. - - Change-Id: Ie194273cc942bfd91332d4035f6eec55b7d3a428 - -2022-05-30 Pedro Alves - - gdb/manual: Introduce location specs - The current "Specify Location" section of the GDB manual starts with: - - "Several @value{GDBN} commands accept arguments that specify a location - of your program's code." - - And then, such commands are documented as taking a "location" - argument. For example, here's a representative subset: - - @item break @var{location} - @item clear @var{location} - @item until @var{location} - @item list @var{location} - @item edit @var{location} - @itemx info line @var{location} - @item info macros @var{location} - @item trace @var{location} - @item info scope @var{location} - @item maint agent @r{[}-at @var{location}@r{,}@r{]} @var{expression} - - The issue here is that "location" isn't really correct for most of - these commands. Instead, the "location" argument is really a - placeholder that represent an umbrella term for all of the - "linespecs", "explicit location", and "address location" input - formats. GDB parses these and then finds the actual code locations - (plural) in the program that match. For example, a "location" - specified like "-function func" will actually match all the code - locations in the program that correspond to the address/file/lineno of - all the functions named "func" in all the loaded programs and shared - libraries of all the inferiors. A location specified like "-function - func -label lab" matches all the addresses of C labels named "lab" in - all functions named "func". Etc. - - This means that several of the commands that claim they accept a - "location", actually end up working with multiple locations, and the - manual doesn't explain that all that well. In some cases, the command - will work with all the resolved locations. In other cases, the - command aborts with an error if the location specification resolves to - multiple locations in the program. In other cases, GDB just - arbitrarily and silently picks whatever is the first resolved code - location (which sounds like should be improved). - - To clarify this, I propose we use the term "Location Specification", - with shorthand "locaction spec", when we're talking about the user - input, the argument or arguments that is/are passed to commands to - instruct GDB how to find locations of interest. This is distinct from - the actual code locations in the program, which are what GDB finds - based on the user-specified location spec. Then use "location - specification or the shorter "location spec" thoughout instead of - "location" when we're talking about the user input. - - Thus, this commit does the following: - - - renames the "Specify Location" section of the manual to "Location - Specifications". - - - It then introduces the term "Location Specification", with - corresponding shorthand "location spec", as something distinct from - an actual code location in the program. It explains what a concrete - code location is. It explains that a location specification may be - incomplete, and that may match multiple code locations in the - program, or no code location at all. It gives examples. Some - pre-existing examples were moved from the "Set Breaks" section, and - a few new ones that didn't exist yet were added. I think it is - better to have these centralized in this "Location Specification" - section, since all the other commands that accept a location spec - have an xref that points there. - - - Goes through the manual, and where "@var{location}" was used for a - command argument, updated it to say "@var{locspec}" instead. At the - same time, tweaks the description of the affected commands to - describe what happens when the location spec resolves to more than - one location. Most commands just did not say anything about that. - - One command -- "maint agent -at @var{location}" -- currently says it - accepts a "location", suggesting it can accept address and explicit - locations too, but that's incorrect. In reality, it only accepts - linespecs, so fix it accordingly. - - One MI command -- "-trace-find line" -- currently says it accepts a - "line specification", but it can accept address and explicit - locations too, so fix it accordingly. - - Special thanks goes to Eli Zaretskii for reviews and rewording - suggestions. - - Change-Id: Ic42ad8565e79ca67bfebb22cbb4794ea816fd08b - -2022-05-30 Luis Machado - - Move 64-bit BFD files from ALL_TARGET_OBS to ALL_64_TARGET_OBS - Doing a 32-bit build with "--enable-targets=all --disable-sim" fails to link - properly. - - -- - - loongarch-tdep.o: In function `loongarch_gdbarch_init': - binutils-gdb/gdb/loongarch-tdep.c:443: undefined reference to `loongarch_r_normal_name' - loongarch-tdep.o: In function `loongarch_fetch_instruction': - binutils-gdb/gdb/loongarch-tdep.c:37: undefined reference to `loongarch_insn_length' - loongarch-tdep.o: In function `loongarch_scan_prologue(gdbarch*, unsigned long long, unsigned long long, frame_info*, trad_frame_cache*) [clone .isra.4]': - binutils-gdb/gdb/loongarch-tdep.c:87: undefined reference to `loongarch_insn_length' - binutils-gdb/gdb/loongarch-tdep.c:88: undefined reference to `loongarch_decode_imm' - binutils-gdb/gdb/loongarch-tdep.c:89: undefined reference to `loongarch_decode_imm' - binutils-gdb/gdb/loongarch-tdep.c:90: undefined reference to `loongarch_decode_imm' - binutils-gdb/gdb/loongarch-tdep.c:91: undefined reference to `loongarch_decode_imm' - binutils-gdb/gdb/loongarch-tdep.c:92: undefined reference to `loongarch_decode_imm' - - -- - - Given the list of 64-bit BFD files in - opcodes/Makefile.am:TARGET64_LIBOPCODES_CFILES, it looks like GDB's - ALL_TARGET_OBS list is including files that should be included in - ALL_64_TARGET_OBS instead. - - This patch accomplishes this and enables a 32-bit build with - "--enable-targets=all --disable-sim" to complete. - - Moving the bpf, tilegx and loongarch files to the correct list means GDB can - find the correct disassembler function instead of finding a null pointer. - - We still need the "--disable-sim" switch (or "--enable-64-bit-bfd") to - make a 32-bit build with "--enable-targets=all" complete correctly - -2022-05-30 Luis Machado - - Fix failing test for armeb-gnu-eabi - The following test fails on the armeb-gnu-eabi target: - - FAIL: Unwind information for Armv8.1-M.Mainline PACBTI extension - - This patch adjusts the expected output for big endian. - -2022-05-30 Alan Modra - - Use a union to avoid casts in bfd/doc/chew.c - This fixes -Wpedantic warnings in chew.c. Conversion between function - and object pointers is not guaranteed. They can even be different - sizes, not that we're likely to encounter build machines like that - nowadays. - - PR 29194 - * doc/chew.c (pcu): New union typedef. - (dict_type, pc): Use it here. Adjust uses of pc. - (add_to_definition): Make "word" param a pcu. Adjust all uses - of function. - (stinst_type): Delete. - -2022-05-30 Alan Modra - - use libiberty xmalloc in bfd/doc/chew.c - Catch out of memory. - - * doc/chew.c: Include libibery.h. - (init_string_with_size, nextword): Replace malloc with xmalloc. - (newentry, add_to_definition): Likewise. - (catchar, catbuf): Replace realloc with xrealloc. - (add_intrinsic): Replace strdup with xstrdup. - * doc/local.mk (LIBIBERTY): Define. - (chew): Link against libiberty. - * Makefile.in: Regenerate. - -2022-05-30 Alan Modra - - Update K&R functions in bfd/doc/chew.c - * doc/chew.c: Update function definitions to ISO C, remove - now unnecessary prototypes. - -2022-05-30 Alan Modra - - Reorganise bfd/doc/chew.c a little - This also removes some unused variables, and deletes support for the - "var" keyword which isn't used and was broken. (No means to set - variables, and add_var used push_number inconsistent with its use - elsewhere.) - - * doc/chew.c: Move typedefs before variables, variables before - functions. - (die): Move earlier. - (word_type, sstack, ssp): Delete. - (dict_type): Delete var field. - (add_var): Delete. - (compile): Remove "var" support. - -2022-05-30 jiawei - - RISC-V: Add zhinx extension supports. - The zhinx extension is a sub-extension in zfinx, corresponding to - zfh extension but use GPRs instead of FPRs. - - This patch expanded the zfh insn class define, since zfh and zhinx - use the same opcodes, thanks for Nelson's works. - - changelog in V2: Add missing classes of 'zfh' and 'zhinx' in - "riscv_multi_subset_supports_ext". - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_multi_subset_supports): New extensions. - (riscv_multi_subset_supports_ext): New extensions. - - gas/ChangeLog: - - * testsuite/gas/riscv/fp-zhinx-insns.d: New test. - * testsuite/gas/riscv/fp-zhinx-insns.s: New test. - - include/ChangeLog: - - * opcode/riscv.h (enum riscv_insn_class): New INSN classes. - - opcodes/ChangeLog: - - * riscv-opc.c: Modify INSN_CLASS. - -2022-05-30 GDB Administrator - - Automatic date update in version.in - -2022-05-29 GDB Administrator - - Automatic date update in version.in - -2022-05-28 Andrew Burgess - - gdb/python: improve formatting of help text for user defined commands - Consider this command defined in Python (in the file test-cmd.py): - - class test_cmd (gdb.Command): - """ - This is the first line. - Indented second line. - This is the third line. - """ - - def __init__ (self): - super ().__init__ ("test-cmd", gdb.COMMAND_OBSCURE) - - def invoke (self, arg, from_tty): - print ("In test-cmd") - - test_cmd() - - Now, within a GDB session: - - (gdb) source test-cmd.py - (gdb) help test-cmd - - This is the first line. - Indented second line. - This is the third line. - - (gdb) - - I think there's three things wrong here: - - 1. The leading blank line, - 2. The trailing blank line, and - 3. Every line is indented from the left edge slightly. - - The problem of course, is that GDB is using the Python doc string - verbatim as its help text. While the user has formatted the help text - so that it appears clear within the .py file, this means that the text - appear less well formatted when displayed in the "help" output. - - The same problem can be observed for gdb.Parameter objects in their - set/show output. - - In this commit I aim to improve the "help" output for commands and - parameters. - - To do this I have added gdbpy_fix_doc_string_indentation, a new - function that rewrites the doc string text following the following - rules: - - 1. Leading blank lines are removed, - 2. Trailing blank lines are removed, and - 3. Leading whitespace is removed in a "smart" way such that the - relative indentation of lines is retained. - - With this commit in place the above example now looks like this: - - (gdb) source ~/tmp/test-cmd.py - (gdb) help test-cmd - This is the first line. - Indented second line. - This is the third line. - (gdb) - - Which I think is much neater. Notice that the indentation of the - second line is retained. Any blank lines within the help text (not - leading or trailing) will be retained. - - I've added a NEWS entry to note that there has been a change in - behaviour, but I didn't update the manual. The existing manual is - suitably vague about how the doc string is used, so I think the new - behaviour is covered just as well by the existing text. - -2022-05-28 Andrew Burgess - - gdb: use gdb::unique_xmalloc_ptr for docs in cmdpy_init - Make use of gdb::unique_xmalloc_ptr to hold the documentation - string in cmdpy_init (when creating a custom GDB command in Python). - I think this is all pretty straight forward, the only slight weirdness - is the removal of the call to free toward the end of this function. - - Prior to this commit, if an exception was thrown after the GDB command - was created then we would (I think) end up freeing the documentation - string even though the command would remain registered with GDB, which - would surely lead to undefined behaviour. - - After this commit we release the doc string at the point that we hand - it over to the command creation routines. If we throw _after_ the - command has been created within GDB then the doc string will be left - live. If we throw during the command creation itself (either from - add_prefix_cmd or add_cmd) then it is up to those functions to free - the doc string (I suspect we don't, but I think in general the - commands are pretty bad at cleaning up after themselves, so I don't - think this is a huge problem). - -2022-05-28 Vladimir Mezentsev - - gprofng: fix build with -mx32 - gprofng/ChangeLog - 2022-05-27 Vladimir Mezentsev - - PR gprofng/28983 - PR gprofng/29143 - * src/Experiment.cc (write_header): Fix argument for ctime. - Fix -Wformat= warnings. - * src/Dbe.cc: Likewise. - * src/DwarfLib.h: Fix [-Wsign-compare] warnings. - * src/Experiment.h: Likewise. - * src/ipc.cc: Fix -Wformat= warnings. - -2022-05-28 GDB Administrator - - Automatic date update in version.in - -2022-05-27 Tom Tromey - - Fix crash with "maint print arc" - Luis noticed that "maint print arc" would crash, because the command - handler did not find "show" in the command name, violating an - invariant. This patch fixes the bug by changing the registration to - use add_basic_prefix_cmd instead. - -2022-05-27 Andrew Burgess - - opcodes/i386: remove trailing whitespace from insns with zero operands - While working on another patch[1] I had need to touch this code in - i386-dis.c: - - ins->obufp = ins->mnemonicendp; - for (i = strlen (ins->obuf) + prefix_length; i < 6; i++) - oappend (ins, " "); - oappend (ins, " "); - (*ins->info->fprintf_styled_func) - (ins->info->stream, dis_style_mnemonic, "%s", ins->obuf); - - What this code does is add whitespace after the instruction mnemonic - and before the instruction operands. - - The problem I ran into when working on this code can be seen by - assembling this input file: - - .text - nop - retq - - Now, when I disassemble, here's the output. I've replaced trailing - whitespace with '_' so that the issue is clearer: - - Disassembly of section .text: - - 0000000000000000 <.text>: - 0: 90 nop - 1: c3 retq___ - - Notice that there's no trailing whitespace after 'nop', but there are - three spaces after 'retq'! - - What happens is that instruction mnemonics are emitted into a buffer - instr_info::obuf, then instr_info::mnemonicendp is setup to point to - the '\0' character at the end of the mnemonic. - - When we emit the whitespace, this is then added starting at the - mnemonicendp position. Lets consider 'retq', first the buffer is - setup like this: - - 'r' 'e' 't' 'q' '\0' - - Then we add whitespace characters at the '\0', converting the buffer - to this: - - 'r' 'e' 't' 'q' ' ' ' ' ' ' '\0' - - However, 'nop' is actually an alias for 'xchg %rax,%rax', so, - initially, the buffer is setup like this: - - 'x' 'c' 'h' 'g' '\0' - - Then in NOP_Fixup we spot that we have an instruction that is an alias - for 'nop', and adjust the buffer to this: - - 'n' 'o' 'p' '\0' '\0' - - The second '\0' is left over from the original buffer contents. - However, when we rewrite the buffer, we don't afjust mnemonicendp, - which still points at the second '\0' character. - - Now, when we insert whitespace we get: - - 'n' 'o' 'p' '\0' ' ' ' ' ' ' ' ' '\0' - - Notice the whitespace is inserted after the first '\0', so, when we - print the buffer, the whitespace is not printed. - - The fix for this is pretty easy, I can change NOP_Fixup to adjust - mnemonicendp, but now a bunch of tests start failing, we now produce - whitespace after the 'nop', which the tests don't expect. - - So, I could update the tests to expect the whitespace.... - - ...except I'm not a fan of trailing whitespace, so I'd really rather - not. - - Turns out, I can pretty easily update the whitespace emitting code to - spot instructions that have zero operands and just not emit any - whitespace in this case. So this is what I've done. - - I've left in the fix for NOP_Fixup, I think updating mnemonicendp is - probably a good thing, though this is not really required any more. - - I've then updated all the tests that I saw failing to adjust the - expected patterns to account for the change in whitespace. - - [1] https://sourceware.org/pipermail/binutils/2022-April/120610.html - -2022-05-27 Alan Modra - - Replace bfd_hostptr_t with uintptr_t - bfd_hostptr_t is defined as a type large enough to hold either a long - or a pointer. It mostly appears in the coff backend code in casts. - include/coff/internal.h struct internal_syment and union - internal_auxent have the only uses in data structures, where - comparison with include/coff/external.h and other code reveals that - the type only needs to be large enough for a 32-bit integer or a - pointer. That should mean replacing with uintptr_t is OK. - - Remove much of BFD_HOST configury - This patch removes the definition of bfd_uint64_t and bfd_int64_t as - well as most BFD_HOST_* which are now unused. - - Remove use of bfd_uint64_t and similar - Requiring C99 means that uses of bfd_uint64_t can be replaced with - uint64_t, and similarly for bfd_int64_t, BFD_HOST_U_64_BIT, and - BFD_HOST_64_BIT. This patch does that, removes #ifdef BFD_HOST_* - and tidies a few places that print 64-bit values. - -2022-05-27 Vladimir Mezentsev - - gprofng: fix build with --disable-shared - gprofng/ChangeLog - 2022-05-26 Vladimir Mezentsev - - * libcollector/configure.ac: Use AC_MSG_WARN instead of AC_MSG_ERROR - * libcollector/configure: Rebuild. - -2022-05-27 Jan Beulich - - x86/Intel: allow MASM representation of embedded rounding / SAE - MASM doesn't support the separate operand form; the modifier belongs - after the instruction instead. Accept this form alongside the original - (now legacy) one. Short of having access to a MASM version to actually - check in how far "after the instruction" is a precise statement in their - documentation, allow both that and the SDM mandated form where the - modifier is on the last register operand (with a possible immediate - operand following). - - Sadly the split out function, at least for the time being, needs to cast - away constness at some point, as the two callers disagree in this - regard. - - Adjust some, but not all of the testcases. - -2022-05-27 Jan Beulich - - x86: re-work AVX512 embedded rounding / SAE - As a preparatory step to allowing proper non-operand forms of specifying - embedded rounding / SAE, convert the internal representation to non- - operand form. While retaining properties (and in a few cases perhaps - providing more meaningful diagnostics), this means doing away with a few - hundred standalone templates, thus - as a nice side effect - reducing - memory consumption / cache occupancy. - - x86/Intel: adjust representation of embedded rounding / SAE - MASM doesn't consider {sae} and alike a separate operand; it is attached - to the last register operand instead, just like spelled out by the SDM. - Make the disassembler follow this first, before also adjusting the - assembler (such that it'll be easy to see that the assembler change - doesn't alter generated code). - -2022-05-27 Jan Beulich - - x86/Intel: allow MASM representation of embedded broadcast - MASM doesn't support the {1to} form; DWORD BCST (paralleling - DWORD PTR) and alike are to be used there instead. Accept these forms - alongside the original (now legacy) ones. - - Acceptance of the original {1to} operand suffix is retained both for - backwards compatibility and to disambiguate VFPCLASSP{S,D,H} and vector - conversions with shrinking element sizes. I have no insight (yet) into - how MASM expects those to be disambiguated. - - Adjust some, but not all of the testcases. - -2022-05-27 Jan Beulich - - x86/Intel: adjust representation of embedded broadcast - MASM doesn't support the {1to} form; DWORD BCST (paralleling - DWORD PTR) and alike are to be used there instead. Make the disassembler - follow this first, before also adjusting the assembler (such that it'll - be easy to see that the assembler change doesn't alter generated code). - - For VFPCLASSP{S,D,H} and vector conversions with shrinking element sizes - the original {1to} operand suffix is retained, to disambiguate - output. I have no insight (yet) into how MASM expects those to be - disambiguated. - -2022-05-27 Vladimir Mezentsev - - gprofng: fix build with -mx32 - gprofng/ChangeLog - 2022-05-26 Vladimir Mezentsev - - PR gprofng/28983 - * libcollector/libcol_util.h (__collector_getsp, __collector_getfp, - __collector_getpc): Adapt for build with -mx32 - * libcollector/heaptrace.c: Fix -Wpointer-to-int-cast warnings. - * libcollector/hwprofile.h: Likewise. - * libcollector/mmaptrace.c: Likewise. - * libcollector/synctrace.c: Likewise. - * libcollector/unwind.c: Likewise. - -2022-05-27 GDB Administrator - - Automatic date update in version.in - -2022-05-27 Hans-Peter Nilsson - - ld: cris*-elf: Default to --no-warn-rwx-segment - ld: - configure.tgt (cris-*-*, crisv32-*-* sans *-aout and *-linux): Unless - specified through the --enable-* -option, default to - --no-warn-rwx-segment. - - Change-Id: I846bcd3e6762da807b17215a9fe337461ea0d710 - -2022-05-27 Hans-Peter Nilsson - - cris: bfd: Correct default to no execstack - In the now-historical CRIS glibc port, the default stack permission - was no-exec as in "#define DEFAULT_STACK_PERMS (PF_R|PF_W)", and the - gcc port only emits the executable-stack marker when needed; when - emitting code needing it. In other words, the binutils setting - mismatches. It doesn't matter much, except being confusing and - defaulting to "off" is more sane. - - ld: - - * testsuite/ld-elf/elf.exp (target_defaults_to_execstack): Switch to 0 - for cris*-*-*. - - bfd: - * elf32-cris.c (elf_backend_default_execstack): Define to 0. - - Change-Id: I52f37598f119b19111c7a6546c00a627fca0f396 - -2022-05-26 John Baldwin - - aarch64-fbsd-nat: Move definition of debug_regs_probed under HAVE_DBREG. - This fixes the build on older FreeBSD systems without support for - hardware breakpoints/watchpoints. - -2022-05-26 Lancelot SIX - - gdb: Change psymbol_functions::require_partial_symbols to partial_symbols - The previous patch ensured that partial symbols are read before calling - most of the quick_function's methods. - - The psymbol_functions class has the require_partial_symbols method which - serves this exact purpose, and does not need to do it anymore. - - This patch renames this method to partial_symbols and makes it an accessor - which asserts that partial symbols have been read at this point. - - Regression tested on x86_64-linux. - -2022-05-26 Lancelot SIX - - gdb: Require psymtab before calling quick_functions in objfile - The recent DWARF indexer rewrite introduced a regression when debugging - a forking program. - - Here is a way to reproduce the issue (there might be other ways, but one - is enough and this one mimics the situation we encountered). Consider a - program which forks, and the child loads a shared library and calls a - function in this shared library: - - if (fork () == 0) - { - void *solib = dlopen (some_solib, RTLD_NOW); - void (*foo) () = dlsym (some_solib, "foo"); - foo (); - } - - Suppose that this program is compiled without debug info, but the shared - library it loads has debug info enabled. - - When debugging such program with the following options: - - - set detach-on-fork off - - set follow-fork-mode child - - we see something like: - - (gdb) b foo - Function "foo" not defined. - Make breakpoint pending on future shared library load? (y or [n]) y - Breakpoint 1 (foo) pending. - (gdb) run - Starting program: a.out - [Attaching after process 19720 fork to child process 19723] - [New inferior 2 (process 19723)] - [Switching to process 19723] - - Thread 2.1 "a.out" hit Breakpoint 1, 0x00007ffff7fc3101 in foo () from .../libfoo.so - (gdb) list - - Fatal signal: Segmentation fault - ----- Backtrace ----- - 0x55a278f77d76 gdb_internal_backtrace_1 - ../../gdb/bt-utils.c:122 - 0x55a278f77f83 _Z22gdb_internal_backtracev - ../../gdb/bt-utils.c:168 - 0x55a27940b83b handle_fatal_signal - ../../gdb/event-top.c:914 - 0x55a27940bbb1 handle_sigsegv - ../../gdb/event-top.c:987 - 0x7effec0343bf ??? - /build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/sysv/linux/x86_64/sigaction.c:0 - 0x55a27924c9d3 _ZNKSt15__uniq_ptr_implI18dwarf2_per_cu_data26dwarf2_per_cu_data_deleterE6_M_ptrEv - /usr/include/c++/9/bits/unique_ptr.h:154 - 0x55a279248bc9 _ZNKSt10unique_ptrI18dwarf2_per_cu_data26dwarf2_per_cu_data_deleterE3getEv - /usr/include/c++/9/bits/unique_ptr.h:361 - 0x55a2792ae718 _ZN27dwarf2_base_index_functions23find_last_source_symtabEP7objfile - ../../gdb/dwarf2/read.c:3164 - 0x55a279afb93e _ZN7objfile23find_last_source_symtabEv - ../../gdb/symfile-debug.c:139 - 0x55a279aa3040 _Z20select_source_symtabP6symtab - ../../gdb/source.c:365 - 0x55a279aa22a1 _Z34set_default_source_symtab_and_linev - ../../gdb/source.c:268 - 0x55a27903c44c list_command - ../../gdb/cli/cli-cmds.c:1185 - 0x55a279051233 do_simple_func - ../../gdb/cli/cli-decode.c:95 - 0x55a27905f221 _Z8cmd_funcP16cmd_list_elementPKci - ../../gdb/cli/cli-decode.c:2514 - 0x55a279c3b0ba _Z15execute_commandPKci - ../../gdb/top.c:660 - 0x55a27940a6c3 _Z15command_handlerPKc - ../../gdb/event-top.c:598 - 0x55a27940b032 _Z20command_line_handlerOSt10unique_ptrIcN3gdb13xfree_deleterIcEEE - ../../gdb/event-top.c:797 - 0x55a279caf401 tui_command_line_handler - ../../gdb/tui/tui-interp.c:278 - 0x55a279409098 gdb_rl_callback_handler - ../../gdb/event-top.c:230 - 0x55a279ed5df2 rl_callback_read_char - ../../../readline/readline/callback.c:281 - 0x55a279408bd8 gdb_rl_callback_read_char_wrapper_noexcept - ../../gdb/event-top.c:188 - 0x55a279408de7 gdb_rl_callback_read_char_wrapper - ../../gdb/event-top.c:205 - 0x55a27940a061 _Z19stdin_event_handleriPv - ../../gdb/event-top.c:525 - 0x55a27a23771e handle_file_event - ../../gdbsupport/event-loop.cc:574 - 0x55a27a237f5f gdb_wait_for_event - ../../gdbsupport/event-loop.cc:700 - 0x55a27a235d81 _Z16gdb_do_one_eventv - ../../gdbsupport/event-loop.cc:237 - 0x55a2796c2ef0 start_event_loop - ../../gdb/main.c:418 - 0x55a2796c3217 captured_command_loop - ../../gdb/main.c:478 - 0x55a2796c717b captured_main - ../../gdb/main.c:1340 - 0x55a2796c7217 _Z8gdb_mainP18captured_main_args - ../../gdb/main.c:1355 - 0x55a278d0b381 main - ../../gdb/gdb.c:32 - --------------------- - A fatal error internal to GDB has been detected, further - debugging is not possible. GDB will now terminate. - - This is a bug, please report it. For instructions, see: - . - - The first issue observed is in the message printed when hitting the - breakpoint. It says that there was a break in the .so file as if there - was no debug info associated with it, but there is. Later, if we try to - display the source where the execution stopped, we have a segfault. - - Note that not having the debug info on the main binary is not strictly - required to encounter some issues, it only is to encounter the segfault. - If the main binary has debug information, GDB shows some source form the - main binary, unrelated to where we stopped. - - The core of the issue is that GDB never loads the psymtab for the - library. It is not loaded when we first see the .so because in case of - detach-on-fork off, follow-fork-mode child, infrun.c sets - child_inf->symfile_flags = SYMFILE_NO_READ to delay the psymtab loading - as much as possible. If we compare to what was done to handle this - before the new indexer was activated, the psymatb construction for the - shared library was done under - psymbol_functions::expand_symtabs_matching: - - bool - psymbol_functions::expand_symtabs_matching (...) - { - for (partial_symtab *ps : require_partial_symbols (objfile)) - ... - } - - The new indexer's expand_symtabs_matching callback does not have a call - to the objfile's require_partial_symbols, so if the partial symbol table - is not loaded at this point, there is no mechanism to fix this. - - Instead of requiring each implementation of the quick_functions to check - that partial symbols have been read, I think it is safer to enforce this - when calling the quick functions. The general pattern for calling the - quick functions is: - - for (auto *iter : qf) - iter->the_actual_method_call (...) - - This patch proposes to wrap the access of the `qf` field with an accessor - which ensures that partial symbols have been read before iterating: - qf_require_partial_symbols. All calls to quick functions are updated - except: - - - quick_functions::dump - - quick_functions::read_partial_symbols (from - objfile::require_partial_symbols) - - quick_functions::can_lazily_read_symbols and quick_functions::has_symbols - (from objfile::has_partial_symbols) - - Regression tested on x86_64-gnu-linux. - - Change-Id: I39a13a937fdbaae613a5cf68864b021000554546 - -2022-05-26 Tom Tromey - - Fix crash in new DWARF indexer - PR gdb/29128 points out a crash in the new DWARF index code. This - happens if the aranges for a CU claims a PC, but the symtab that is - created during CU expansion does not actually contain the PC. This - can only occur due to bad debuginfo, but at the same time, gdb should - not crash. - - This patch fixes the bug and further merges some code into - dwarf2_base_index_functions. This merger helps prevent the same issue - from arising from the other index implementations. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29128 - -2022-05-26 Tom Tromey - - Finalize each cooked index separately - After DWARF has been scanned, the cooked index code does a - "finalization" step in a worker thread. This step combines all the - index entries into a single master list, canonicalizes C++ names, and - splits Ada names to synthesize package names. - - While this step is run in the background, gdb will wait for the - results in some situations, and it turns out that this step can be - slow. This is PR symtab/29105. - - This can be sped up by parallelizing, at a small memory cost. Now - each index is finalized on its own, in a worker thread. The cost - comes from name canonicalization: if a given non-canonical name is - referred to by multiple indices, there will be N canonical copies (one - per index) rather than just one. - - This requires changing the users of the index to iterate over multiple - results. However, this is easily done by introducing a new "chained - range" class. - - When run on gdb itself, the memory cost seems rather low -- on my - current machine, "maint space 1" reports no change due to the patch. - - For performance testing, using "maint time 1" and "file" will not show - correct results. That approach measures "time to next prompt", but - because the patch only affects background work, this shouldn't (and - doesn't) change. Instead, a simple way to make gdb wait for the - results is to set a breakpoint. - - Before: - - $ /bin/time -f%e ~/gdb/install/bin/gdb -nx -q -batch \ - -ex 'break main' /tmp/gdb - Breakpoint 1 at 0x43ec30: file ../../binutils-gdb/gdb/gdb.c, line 28. - 2.00 - - After: - - $ /bin/time -f%e ./gdb/gdb -nx -q -batch \ - -ex 'break main' /tmp/gdb - Breakpoint 1 at 0x43ec30: file ../../binutils-gdb/gdb/gdb.c, line 28. - 0.65 - - Regression tested on x86-64 Fedora 34. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29105 - -2022-05-26 Alan Modra - - bit-rot in target before_parse function - Copy initialisation over from the elf.em before_parse. Commit - ba951afb999 2022-05-03 changed behaviour on arm and score regarding - exec stack. This patch restores the previous behaviour. - - * emultempl/aarch64elf.em (before_parse): Init separate_code, - warn_execstack, no_warn_rwx_segments and default_execstack. - * emultempl/armelf.em (before_parse): Likewise. - * emultempl/scoreelf.em (before_parse): Likewise. - * testsuite/ld-elf/elf.exp (target_defaults_to_execstack): Return - true for arm and nacl. - -2022-05-26 Richard Earnshaw - - arm: avoid use of GNU builtin function in s_arm_unwind_save_mixed - Whilst reviewing Luis' proposed change to s_arm_unwind_save_mixed - yesterday I noticed that we were making use of __builting_clzl - directly within the main function, which is not guaranteed to be - portable. Whilst studying the code further, I also realized that it - could be rewritten without using it and also reworked to remove a lot - of unnecessary iterations steps. So this patch does that (and also - removes the source of the warning that Luis was trying to fix). - Finally, with the rewrite we can also simplify the caller of this - routine as the new version can handle all the cases directly. - - * config/tc-arm.c (s_arm_unwind_save_mixed): Rewrite without - using __builtin_clzl. - (s_arm_unwind_save): Simplify logic for simple/mixed register saves. - -2022-05-26 Lancelot SIX - - gdb/linux-nat: xfer_memory_partial return E_IO on error - When accessing /proc/PID/mem, if pread64/pwrite64/read/write encounters - an error and return -1, linux_proc_xfer_memory_partial return - TARGET_XFER_EOF. - - I think it should return TARGET_XFER_E_IO in this case. TARGET_XFER_EOF - is returned when pread64/pwrite64/read/frite returns 0, which indicates - that the address space is gone and the whole process has exited or - execed. - - This patch makes this change. - - Regression tested on x86_64-linux-gnu. - - Change-Id: I6030412459663b8d7933483fdda22a6c2c5d7221 - -2022-05-26 Lancelot SIX - - gdb/testsuite: prefer gdb_test in gdb.dwarf2/calling-convention - Since ed01945057c "Make gdb_test's question non-optional if specified", - if the question and response parameters are given to gdb_test, the - framework enforces that GDB asks the question. Before this patch, tests - needed to use gdb_test_multiple to enforce this. - - This patch updates the gdb.dwarf2/calling-convention.exp testcase to use - gdb_test to check that GDB asks a question. This replaces the more - complicated gdb_test_multiple based implementation. - - Tested on x86_64-gnu-linux. - - Change-Id: I7216e822ca68f2727e0450970097d74c27c432fe - -2022-05-26 Potharla, Rupesh - - bfd: Add Support for DW_FORM_strx* and DW_FORM_addrx* - -2022-05-26 Luca Boccassi - - ld: add --package-metadata - Generate a .note.package FDO package metadata ELF note, following - the spec: https://systemd.io/ELF_PACKAGE_METADATA/ - - If the jansson library is available at build time (and it is explicitly - enabled), link ld to it, and use it to validate that the input is - correct JSON, to avoid writing garbage to the file. The - configure option --enable-jansson has to be used to explicitly enable - it (error out when not found). This allows bootstrappers (or others who - are not interested) to seamlessly skip it without issues. - -2022-05-26 GDB Administrator - - Automatic date update in version.in - -2022-05-26 Natarajan, Kavitha - - Re: Add bionutils support for DWARF v5's DW_OP_addrx - Testsuite files belonging to commit 3ac9da49378c. - -2022-05-25 Pedro Alves - - Show enabled locations with disabled breakpoint parent as "y-" - Currently, breakpoint locations that are enabled while their parent - breakpoint is disabled are displayed with "y" in the Enb colum of - "info breakpoints": - - (gdb) info breakpoints - Num Type Disp Enb Address What - 1 breakpoint keep n - 1.1 y 0x00000000000011b6 in ... - 1.2 y 0x00000000000011c2 in ... - 1.3 n 0x00000000000011ce in ... - - Such locations won't trigger a break, so to avoid confusion, show "y-" - instead. For example: - - (gdb) info breakpoints - Num Type Disp Enb Address What - 1 breakpoint keep n - 1.1 y- 0x00000000000011b6 in ... - 1.2 y- 0x00000000000011c2 in ... - 1.3 n 0x00000000000011ce in ... - - The "-" sign is inspired on how the TUI represents breakpoints on the - left side of the source window, with "b-" for a disabled breakpoint. - - Change-Id: I9952313743c51bf21b4b380c72360ef7d4396a09 - -2022-05-25 Natarajan, Kavitha - - Add bionutils support for DWARF v5's DW_OP_addrx. - -2022-05-25 Pedro Alves - - gdb: Fix DUPLICATE and PATH regressions throughout - The previous patch to add -prompt/-lbl to gdb_test introduced a - regression: Before, you could specify an explicit empty message to - indicate you didn't want to PASS, like so: - - gdb_test COMMAND PATTERN "" - - After said patch, gdb_test no longer distinguishes - no-message-specified vs empty-message, so tests that previously would - be silent on PASS, now started emitting PASS messages based on - COMMAND. This in turn introduced a number of PATH/DUPLICATE - violations in the testsuite. - - This commit fixes all the regressions I could see. - - This patch uses the new -nopass feature introduced in the previous - commit, but tries to avoid it if possible. Most of the patch fixes - DUPLICATE issues the usual way, of using with_test_prefix or explicit - unique messages. - - See previous commit's log for more info. - - In addition to looking for DUPLICATEs, I also looked for cases where - we would now end up with an empty message in gdb.sum, due to a - gdb_test being passed both no message and empty command. E.g., this - in gdb.ada/bp_reset.exp: - - gdb_run_cmd - gdb_test "" "Breakpoint $decimal, foo\\.nested_sub \\(\\).*" - - was resulting in this in gdb.sum: - - PASS: gdb.ada/bp_reset.exp: - - I fixed such cases by passing an explicit message. We may want to - make such cases error out. - - Tested on x86_64 GNU/Linux, native and native-extended-gdbserver. I - see zero PATH cases now. I get zero DUPLICATEs with native testing - now. I still see some DUPLICATEs with native-extended-gdbserver, but - those were preexisting, unrelated to the gdb_test change. - - Change-Id: I5375f23f073493e0672190a0ec2e847938a580b2 - -2022-05-25 Pedro Alves - - Add -nopass option to gdb_test/gdb_test_multiple - The previous patch to add -prompt/-lbl to gdb_test introduced a - regression: Before, you could specify an explicit empty message to - indicate you didn't want to PASS, like so: - - gdb_test COMMAND PATTERN "" - - After said patch, gdb_test no longer distinguishes - no-message-specified vs empty-message, so tests that previously would - be silent on PASS, now started emitting PASS messages based on - COMMAND. This in turn introduced a number of PATH/DUPLICATE - violations in the testsuite. - - I think that not issuing a PASS should be restricted to only a few - cases -- namely in shared routines exported by gdb.exp, which happen - to use gdb_test internally. In tests that iterate an unknown number - of tests exercising some racy scenario. In the latter case, if we - emit PASSes for each iteration, we run into the situation where - different testsuite runs emit a different number of PASSes. - - Thus, this patch preserves the current behavior, and, instead, adds a - new "-nopass" option to gdb_test and gdb_test_no_output. Compared to - the old way of supressing PASS with an empty message, this has the - advantage that you can specify a FAIL message that is distinct from - the command string, and, it's also more explicit. - - Change-Id: I5375f23f073493e0672190a0ec2e847938a580b2 - -2022-05-25 Tsukasa OI - - RISC-V: Fix RV32Q conflict - This commit makes RV32 + 'Q' extension (version 2.2 or later) not - conflicting since this combination is no longer prohibited by the - specification. - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_parse_check_conflicts): Remove conflict - detection that prohibits RV32Q on 'Q' version 2.2 or later. - - gas/ChangeLog: - - * testsuite/gas/riscv/march-fail-rv32iq.d: Removed. - * testsuite/gas/riscv/march-fail-rv32iq.l: Likewise. - * testsuite/gas/riscv/march-fail-rv32iq2p0.d: New test - showing RV32IQ fails on 'Q' extension version 2.0. - * testsuite/gas/riscv/march-fail-rv32iq2p0.l: Likewise. - * testsuite/gas/riscv/march-fail-rv32iq2.d: Likewise. - * testsuite/gas/riscv/march-fail-rv32iq-isa-2p2.d: New test - showing RV32IQ fails on ISA specification version 2.2. - * testsuite/gas/riscv/march-ok-rv32iq2p2.d: New test - showing RV32IQ succesds on 'Q' extension version 2.2. - * testsuite/gas/riscv/march-ok-rv32iq-isa-20190608.d: New test - showing RV32IQ succesds on ISA specification 20190608. - -2022-05-25 Dmitry Selyutin - - opcodes: introduce BC field; fix isel - Per Power ISA Version 3.1B 3.3.12, isel uses BC field rather than CRB - field present in binutils sources. Also, per 1.6.2, BC has the same - semantics as BA and BB fields, so this should keep the same flags and - mask, only with the different offset. - - opcodes/ - * ppc-opc.c - (BC): Define new field, with the same definition as CRB field, - but with the PPC_OPERAND_CR_BIT flag present. - gas/ - * testsuite/gas/ppc/476.d: Update. - * testsuite/gas/ppc/a2.d: Update. - * testsuite/gas/ppc/e500.d: Update. - * testsuite/gas/ppc/power7.d: Update. - -2022-05-25 Dmitry Selyutin - - ppc: extend opindex to 16 bits - With the upcoming SVP64 extension[0] to PowerPC architecture, it became - evident that PowerPC operand indices no longer fit 8 bits. This patch - switches the underlying type to uint16_t, also introducing a special - typedef so that any future extension goes even smoother. - - [0] https://libre-soc.org - - include/ - * opcode/ppc.h (ppc_opindex_t): New typedef. - (struct powerpc_opcode): Use it. - (PPC_OPINDEX_MAX): Define. - gas/ - * write.h (struct fix): Increase size of fx_pcrel_adjust. - Reorganise. - * config/tc-ppc.c (insn_validate): Use ppc_opindex_t for operands. - (md_assemble): Likewise. - (md_apply_fix): Likewise. Mask fx_pcrel_adjust with PPC_OPINDEX_MAX. - (ppc_setup_opcodes): Adjust opcode index assertion. - opcodes/ - * ppc-dis.c (skip_optional_operands): Use ppc_opindex_t for - operand pointer. - (lookup_powerpc, lookup_prefix, lookup_vle, lookup_spe2): Likewise. - (print_insn_powerpc): Likewise. - -2022-05-25 GDB Administrator - - Automatic date update in version.in - -2022-05-24 Tom de Vries - - [gdb/testsuite] Fix gdb.opt/clobbered-registers-O2.exp with clang - When running test-case gdb.opt/clobbered-registers-O2.exp with clang 12.0.1, I - get: - ... - (gdb) run ^M - Starting program: clobbered-registers-O2 ^M - ^M - Program received signal SIGSEGV, Segmentation fault.^M - gen_movsd (operand0=, operand1=) at \ - clobbered-registers-O2.c:31^M - 31 return *start_sequence(operand0, operand1);^M - (gdb) FAIL: gdb.opt/clobbered-registers-O2.exp: runto: run to start_sequence - ... - - The problem is that the breakpoint in start_sequence doesn't trigger, because: - - the call to start_sequence in gen_movsd is optimized away, despite the - __attribute__((noinline)), so the actual function start_sequence doesn't get - called, and - - the debug info doesn't contain inlined function info, so there's only one - breakpoint location. - - Adding noclone and noipa alongside the noinline attribute doesn't fix this. - - Adding the clang-specific attribute optnone in start_sequence does, but since - it inhibits all optimization, that's not a preferred solution in a gdb.opt - test-case, and it would work only for clang and not other compilers that - possibly have the same issue. - - Fix this by moving functions start_sequence and gen_movsd into their own - files, as a way of trying harder to enforce noinline/noipa/noclone. - - Tested on x86_64-linux. - -2022-05-24 Tom de Vries - - [gdb/testsuite] Fix gdb.opt/clobbered-registers-O2.exp with gcc-12 - When running test-case gdb.opt/clobbered-registers-O2.exp with gcc-12, I run - into: - ... - (gdb) PASS: gdb.opt/clobbered-registers-O2.exp: backtracing - print operand0^M - $1 = (unsigned int *) 0x7fffffffd070^M - (gdb) print *operand0^M - $2 = 4195541^M - (gdb) FAIL: gdb.opt/clobbered-registers-O2.exp: print operand0 - ... - - The problem is that starting gcc-12, the assignments to x and y in main are - optimized away: - ... - int main(void) - { - unsigned x, y; - - x = 13; - y = 14; - return (int)gen_movsd (&x, &y); - ... - - Fix this by making x and y volatile. - - Note that the test-case intends to check the handling of debug info for - optimized code in function gen_movsd, so inhibiting optimization in main - doesn't interfere with that. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29161 - -2022-05-24 Tiezhu Yang - - gdb: LoongArch: Define LOONGARCH_LINUX_NUM_GREGSET as 45 - LOONGARCH_LINUX_NUM_GREGSET should be defined as 45 (32 + 1 + 1 + 11) - due to reserved 11 for extension in glibc, otherwise when execute: - - make check-gdb TESTS="gdb.base/corefile.exp" - - there exists the following failed testcase: - - (gdb) core-file /home/loongson/build.git/gdb/testsuite/outputs/gdb.base/corefile/corefile.core - [New LWP 7742] - warning: Unexpected size of section `.reg/7742' in core file. - Core was generated by `/home/loongson/build.git/gdb/testsuite/outputs/gdb.base/corefile/corefile'. - Program terminated with signal SIGABRT, Aborted. - warning: Unexpected size of section `.reg/7742' in core file. - #0 0x000000fff76f4e24 in raise () from /lib/loongarch64-linux-gnu/libc.so.6 - (gdb) FAIL: gdb.base/corefile.exp: core-file warning-free - -2022-05-24 Christophe Lyon - - AArch64: add support for DFP (Decimal Floating point) - This small patch adds support for TYPE_CODE_DECFLOAT in - aapcs_is_vfp_call_or_return_candidate_1 and pass_in_v_vfp_candidate, - so that GDB for AArch64 knows how to pass DFP parameters and how to - read DFP results when calling a function. - - Tested on aarch64-linux-gnu, with a GCC with DFP support in the PATH, - all of GDB's DFP tests pass. - -2022-05-24 Christophe Lyon - - Merge config/ changes from GCC, to enable DFP on AArch64 - 2022-04-28 Christophe Lyon - - config/ - * dfp.m4 (enable_decimal_float): Enable BID for AArch64. - - libdecnumber/ - * configure: Regenerate. - -2022-05-24 Alan Modra - - PR29171, invalid read causing SIGSEGV - The fix here is to pass "section" down to read_and_display_attr_value. - The test in read_and_display_attr_value is a little bit of hardening. - - PR 29171 - * dwarf.c (display_debug_macro, display_debug_names): Pass section - to read_and_display_attr_value2. - (read_and_display_attr_value): Don't attempt to check for .dwo - section name when section is NULL. - -2022-05-24 Alan Modra - - PR29170, divide by zero displaying fuzzed .debug_names - PR 29170 - * dwarf.c (display_debug_names): Don't attempt to display bucket - clashes when bucket count is zero. - - PR29169, invalid read displaying fuzzed .gdb_index - PR 29169 - * dwarf.c (display_gdb_index): Combine sanity checks. Calculate - element counts, not word counts. - -2022-05-24 GDB Administrator - - Automatic date update in version.in - -2022-05-23 John Baldwin - - Tweak the std::hash<> specialization for aarch64_features. - Move the specialization into an explicit std namespace to workaround a - bug in older compilers. GCC 6.4.1 at least fails to compile the previous - version with the following error: - - gdb/arch/aarch64.h:48:13: error: specialization of 'template struct std::hash' in different namespace [-fpermissive] - - struct std::hash - -2022-05-23 John Baldwin - - Fix loongarch_iterate_over_regset_sections for non-native targets. - Define a constant for the number of registers stored in a register set - and use this with register_size to compute the size of the - general-purpose register set in core dumps. - - This also fixes the build on hosts such as FreeBSD that do not define - an elf_gregset_t type. - -2022-05-23 Tiezhu Yang - - gdb: LoongArch: Implement the iterate_over_regset_sections gdbarch method - When execute the following command on LoongArch: - - make check-gdb TESTS="gdb.base/auxv.exp" - - there exist the following unsupported and failed testcases: - - UNSUPPORTED: gdb.base/auxv.exp: gcore - FAIL: gdb.base/auxv.exp: load core file for info auxv on native core dump - FAIL: gdb.base/auxv.exp: info auxv on native core dump - FAIL: gdb.base/auxv.exp: matching auxv data from live and core - UNSUPPORTED: gdb.base/auxv.exp: info auxv on gcore-created dump - UNSUPPORTED: gdb.base/auxv.exp: matching auxv data from live and gcore - - we can see the following messages in gdb/testsuite/gdb.log: - - gcore /home/loongson/build.git/gdb/testsuite/outputs/gdb.base/auxv/auxv.gcore - Target does not support core file generation. - (gdb) UNSUPPORTED: gdb.base/auxv.exp: gcore - - In order to fix the above issues, implement the iterate_over_regset_sections - gdbarch method to iterate over core file register note sections on LoongArch. - - By the way, with this patch, the failed testcases in gdb.base/corefile.exp - and gdb.base/gcore.exp can also be fixed. - -2022-05-23 Tom de Vries - - [gdb/testsuite] Fix -prompt handling in gdb_test - With check-read1 I run into: - ... - [infrun] maybe_set_commit_resumed_all_targets: not requesting - commit-resumed for target native, no resumed threads^M - (gdb) FAIL: gdb.base/ui-redirect.exp: debugging: continue - [infrun] fetch_inferior_event: exit^M - ... - - The problem is that proc gdb_test doesn't pass down the -prompt option to proc - gdb_test_multiple, due to a typo making this lappend without effect: - ... - set opts {} - lappend "-prompt $prompt" - ... - - Fix this by actually appending to opts. - - Tested on x86_64-linux. - -2022-05-23 Tom de Vries - - [gdbsupport] Fix UB in print-utils.cc:int_string - When building gdb with -fsanitize=undefined, I run into: - ... - (gdb) PASS: gdb.ada/access_to_packed_array.exp: set logging enabled on - maint print symbols^M - print-utils.cc:281:29:runtime error: negation of -9223372036854775808 cannot \ - be represented in type 'long int'; cast to an unsigned type to negate this \ - value to itself - (gdb) FAIL: gdb.ada/access_to_packed_array.exp: maint print symbols - ... - - By running in a debug session, we find that this happens during printing of: - ... - typedef system.storage_elements.storage_offset: \ - range -9223372036854775808 .. 9223372036854775807; - ... - Possibly, an ada test-case could be created that exercises this in isolation. - - The problem is here in int_string, where we negate a val with type LONGEST: - ... - return decimal2str ("-", -val, width); - ... - - Fix this by, as recommend, using "-(ULONGEST)val" instead. - - Tested on x86_64-linux. - -2022-05-23 Tom de Vries - - [gdb/exp] Fix UB in scalar_binop - When building gdb with -fsanitize=undefined, I run into: - ... - $ gdb -q -batch -ex "p -(-0x7fffffffffffffff - 1)" - src/gdb/valarith.c:1385:10: runtime error: signed integer overflow: \ - 0 - -9223372036854775808 cannot be represented in type 'long int' - $1 = -9223372036854775808 - ... - - Fix this by performing the substraction in scalar_binop using unsigned types. - - Tested on x86_64-linux. - -2022-05-23 Tom de Vries - - [gdb/ada] Fix gdb.ada/dynamic-iface.exp with gcc 7 - This test in test-case gdb.ada/dynamic-iface.exp passes with gcc 8: - ... - (gdb) print obj^M - $1 = (n => 3, a => "ABC", value => 93)^M - (gdb) PASS: gdb.ada/dynamic-iface.exp: print local as interface - ... - but fails with gcc 7: - ... - (gdb) print obj^M - $1 = ()^M - (gdb) FAIL: gdb.ada/dynamic-iface.exp: print local as interface - ... - - More concretely, we have trouble finding the type of obj. With gcc 8: - ... - $ gdb -q -batch main -ex "b concrete.adb:20" -ex run -ex "ptype obj" - ... - type = new concrete.intermediate with record - value: integer; - end record - ... - and with gcc 7: - ... - type = tagged record null; end record - ... - - The translation from tagged type to "full view" type happens in - ada_tag_value_at_base_address, where we hit this code: - ... - /* 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. */ - 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)); - } - ... - resulting in an offset_to_top for gcc 8: - ... - (gdb) p offset_to_top - $1 = -16 - ... - and for gcc 7: - ... - (gdb) p offset_to_top - $1 = 16 - ... - - The difference is expected, it bisects to gcc commit d0567dc0dbf ("[multiple - changes]") which mentions this change. - - There's some code right after the code quoted above that deals with this - change: - ... - 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; - } - ... - but it's not activated because of the 'else'. - - Fix this by removing the 'else'. - - Tested on x86_64-linux, with gcc 7.5.0. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29057 - -2022-05-23 Mark Harmstone - - ld: use definitions in generate_reloc rather than raw literals - -2022-05-23 Tom de Vries - - [gdb/testsuite] Skip language auto in gdb.base/parse_number.exp - In test-case gdb.base/parse_number.exp, we skip architecture auto in the - $supported_archs loop, to prevent duplicate testing. - - Likewise, skip language auto and its alias local in the $::all_languages - loop. This reduces the number of tests from 17744 to 15572. - - Tested on x86_64-linux, with a build with --enable-targets=all. - -2022-05-23 GDB Administrator - - Automatic date update in version.in - -2022-05-22 Alok Kumar Sharma - - Accept functions with DW_AT_linkage_name present - Currently GDB is not able to debug (Binary generated with Clang) variables - present in shared/private clause of OpenMP Task construct. Please note that - LLVM debugger LLDB is able to debug. - - In case of OpenMP, compilers generate artificial functions which are not - present in actual program. This is done to apply parallelism to block of - code. - - For non-artifical functions, DW_AT_name attribute should contains the name - exactly as present in actual program. - (Ref# http://wiki.dwarfstd.org/index.php?title=Best_Practices) - Since artificial functions are not present in actual program they not having - DW_AT_name and having DW_AT_linkage_name instead should be fine. - - Currently GDB is invalidating any function not havnig DW_AT_name which is why - it is not able to debug OpenMP (Clang). - - It should be fair to fallback to check DW_AT_linkage_name in case DW_AT_name - is absent. - -2022-05-22 GDB Administrator - - Automatic date update in version.in - -2022-05-21 GDB Administrator - - Automatic date update in version.in - -2022-05-20 Pedro Alves - - Rename base_breakpoint -> code_breakpoint - Even after the previous patches reworking the inheritance of several - breakpoint types, the present breakpoint hierarchy looks a bit - surprising, as we have "breakpoint" as the superclass, and then - "base_breakpoint" inherits from "breakpoint". Like so, simplified: - - breakpoint - base_breakpoint - ordinary_breakpoint - internal_breakpoint - momentary_breakpoint - ada_catchpoint - exception_catchpoint - tracepoint - watchpoint - catchpoint - exec_catchpoint - ... - - The surprising part to me is having "base_breakpoint" being a subclass - of "breakpoint". I'm just refering to naming here -- I mean, you'd - expect that it would be the top level baseclass that would be called - "base". - - Just flipping the names of breakpoint and base_breakpoint around - wouldn't be super great for us, IMO, given we think of every type of - *point as a breakpoint at the user visible level. E.g., "info - breakpoints" shows watchpoints, tracepoints, etc. So it makes to call - the top level class breakpoint. - - Instead, I propose renaming base_breakpoint to code_breakpoint. The - previous patches made sure that all code breakpoints inherit from - base_breakpoint, so it's fitting. Also, "code breakpoint" contrasts - nicely with a watchpoint also being typically known as a "data - breakpoint". - - After this commit, the resulting hierarchy looks like: - - breakpoint - code_breakpoint - ordinary_breakpoint - internal_breakpoint - momentary_breakpoint - ada_catchpoint - exception_catchpoint - tracepoint - watchpoint - catchpoint - exec_catchpoint - ... - - ... which makes a lot more sense to me. - - I've left this patch as last in the series in case people want to - bikeshed on the naming. - - "code" has a nice property that it's exactly as many letters as - "base", so this patch didn't require any reindentation. :-) - - Change-Id: Id8dc06683a69fad80d88e674f65e826d6a4e3f66 - -2022-05-20 Pedro Alves - - Test "set multiple-symbols on" creating multiple breakpoints - To look for code paths that lead to create_breakpoints_sal creating - multiple breakpoints, I ran the whole testsuite with this hack: - - --- a/gdb/breakpoint.c - +++ b/gdb/breakpoint.c - @@ -8377,8 +8377,7 @@ create_breakpoints_sal (struct gdbarch *gdbarch, - int from_tty, - int enabled, int internal, unsigned flags) - { - - if (canonical->pre_expanded) - - gdb_assert (canonical->lsals.size () == 1); - + gdb_assert (canonical->lsals.size () == 1); - - surprisingly, the assert never failed... - - The way to get to create_breakpoints_sal with multiple lsals is to use - "set multiple-symbols ask" and then select multiple options from the - menu, like so: - - (gdb) set multiple-symbols ask - (gdb) b overload1arg - [0] cancel - [1] all - [2] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg() - [3] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(char) - [4] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(double) - [5] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(float) - [6] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(int) - [7] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(long) - [8] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(short) - [9] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(signed char) - [10] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(unsigned char) - [11] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(unsigned int) - [12] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(unsigned long) - [13] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(unsigned short) - > 2-3 - Breakpoint 2 at 0x1532: file /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc, line 107. - Breakpoint 3 at 0x154b: file /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc, line 110. - warning: Multiple breakpoints were set. - Use the "delete" command to delete unwanted breakpoints. - - ... which would trigger the assert. - - This commit makes gdb.cp/ovldbreak.exp test this scenario. It does - that by making set_bp_overloaded take a list of expected created - breakpoints rather than just one breakpoint. It converts the - procedure to use gdb_test_multiple instead of send_gdb/gdb_expect - along the way. - - Change-Id: Id87d1e08feb6670440d926f5344e5081f5e37c8e - -2022-05-20 Pedro Alves - - Make sure momentary breakpoints are always thread-specific - This adds a new ctor to momentary_breakpoints with a few parameters - that are always necessary for momentary breakpoints. - - In particular, I noticed that set_std_terminate_breakpoint doesn't - make the breakpoint be thread specific, which looks like a bug to me. - - The point of that breakpoint is to intercept std::terminate calls that - happen as result of the called thread throwing an exception that won't - be caught by the dummy frame. If some other thread calls - std::terminate, IMO, it's no different from some other thread calling - exit/_exit, for example. - - Change-Id: Ifc5ff4a6d6e58b8c4854d00b86725382d38a1a02 - -2022-05-20 Pedro Alves - - Momentary breakpoints should have no breakpoint number - Momentary breakpoints have no breakpoint number, their breakpoint - number should be always 0, to avoid constantly incrementing (or - decrementing) the internal breakpoint count. - - Indeed, set_momentary_breakpoint installs the created breakpoint - without a number. - - However, momentary_breakpoint_from_master incorrectly gives an - internal breakpoint number to the new breakpoint. This commit fixes - that. - - Change-Id: Iedcae5432cdf232db9e9a6e1a646d358abd34f95 - -2022-05-20 Pedro Alves - - Add/tweak intro comments of struct breakpoint and several subclasses - This tweaks the intro comments of the following classes: - - internal_breakpoint - momentary_breakpoint - breakpoint - base_breakpoint - watchpoint - catchpoint - - Change-Id: If6b31f51ebbb81705fbe5b8435f60ab2c88a98c8 - -2022-05-20 Pedro Alves - - Move add_location(sal) to base_breakpoint - After the previous patches, only base_breakpoint subclasses use - add_location(sal), so we can move it to base_breakpoint (a.k.a. base - class for code breakpoints). - - This requires a few casts here and there, but always at spots where - you can see from context what the breakpoint's type actually is. - - I inlined new_single_step_breakpoint into its only caller exactly for - this reason. - - I did try to propagate more use of base_breakpoint to avoid casts, but - that turned out unwieldy for this patch. - - Change-Id: I49d959322b0fdce5a88a216bb44730fc5dd7c6f8 - -2022-05-20 Pedro Alves - - Move common bits of catchpoint/exception_catchpoint to breakpoint's ctor - Move common bits of catchpoint and exception_catchpoint to - breakpoint's ctor, to avoid duplicating code. - - Change-Id: I3a115180f4d496426522f1d89a3875026aea3cf2 - -2022-05-20 Pedro Alves - - Make catchpoint inherit breakpoint, eliminate init_raw_breakpoint - struct catchpoint's ctor currently calls init_raw_breakpoint, which is - a bit weird, as that ctor-like function takes a sal argument, but - catchpoints don't have code locations. - - Instead, make struct catchpoint's ctor add the catchpoint's dummy - location using add_dummy_location. - - init_raw_breakpoint uses add_location under the hood, and with a dummy - sal it would ultimately use the breakpoint's gdbarch for the - location's gdbarch, so replace the references to loc->gdbarch (which - is now NULL) in syscall_catchpoint to references to the catchpoint's - gdbarch. - - struct catchpoint's ctor was the last user of init_raw_breakpoint, so - this commit eliminates the latter. - - Since catchpoint locations aren't code locations, make struct - catchpoint inherit struct breakpoint instead of base_breakpoint. This - let's us delete the tracepoint::re_set override too. - - Change-Id: Ib428bf71efb09fdaf399c56e4372b0f41d9c5869 - -2022-05-20 Pedro Alves - - Make breakpoint_address_bits look at the location kind - Software watchpoints allocate a special dummy location using - software_watchpoint_add_no_memory_location, and then - breakpoint_address_bits checks whether the location is that special - location to decide whether the location has a meaninful address to - print. - - Introduce a new bp_loc_software_watchpoint location kind, and make - breakpoint_address_bits use bl_address_is_meaningful instead, which - returns false for bp_loc_other, which is in accordance with we - document for bp_location::address: - - /* (... snip ...) Valid for all types except - bp_loc_other. */ - CORE_ADDR address = 0; - - Rename software_watchpoint_add_no_memory_location to - add_dummy_location, and simplify it. This will be used by catchpoints - too in a following patch. - - Note that neither "info breakpoints" nor "maint info breakpoints" - actually prints the addresses of watchpoints, but I think it would be - useful to do so in "maint info breakpoints". This approach let's us - implement that in the future. - - Change-Id: I50e398f66ef618c31ffa662da755eaba6295aed7 - -2022-05-20 Pedro Alves - - Make exception_catchpoint inherit base_breakpoint instead of catchpoint - exception_catchpoint is really a code breakpoint, with locations set - by sals, re-set like other code breakpoints, etc., so make it inherit - base_breakpoint. - - This adds a bit of duplicated code to exception_catchpoint's ctor - (copied from struct catchpoint's ctor), but it will be eliminated in a - following patch. - - Change-Id: I9fbb2927491120e9744a4f5e5cb5e6870ca07009 - -2022-05-20 Pedro Alves - - Refactor momentary breakpoints, eliminate set_raw_breakpoint{,_without_location} - This commit makes set_momentary_breakpoint allocate the breakpoint - type without relying on set_raw_breakpoint, and similarly, - momentary_breakpoint_from_master not rely on - set_raw_breakpoint_without_location. This will let us convert - init_raw_breakpoint to a ctor in a following patch. - - The comment about set_raw_breakpoint being used in gdbtk sources is - stale. gdbtk no longer uses it. - - Change-Id: Ibbf77731e4b22e18ccebc1b5799bbec0aff28c8a - -2022-05-20 Pedro Alves - - Refactor set_internal_breakpoint / internal_breakpoint ctor - This moves initialization of internal_breakpoint's breakpoint fields - to internal_breakpoint's ctor, and stops using - new_breakpoint_from_type for internal_breakpoint breakpoints. - - Change-Id: I898ed0565f47cb00e4429f1c6446e6f9a385a78d - -2022-05-20 Pedro Alves - - Convert init_ada_exception_catchpoint to a ctor - Currently, init_ada_exception_catchpoint is defined in breakpoint.c, I - presume so it can call the static describe_other_breakpoints function. - I think this is a dependency inversion. - init_ada_exception_catchpoint, being code specific to Ada catchpoints, - should be in ada-lang.c, and describe_other_breakpoints, a core - function, should be exported. - - And then, we can convert init_ada_exception_catchpoint to an - ada_catchpoint ctor. - - Change-Id: I07695572dabc5a75d3d3740fd9b95db1529406a1 - -2022-05-20 Pedro Alves - - Make ada_catchpoint_location's owner ctor parameter be ada_catchpoint - This commit changes ada_catchpoint_location's ctor from: - - ada_catchpoint_location (breakpoint *owner) - - to: - - ada_catchpoint_location (ada_catchpoint *owner) - - just to make the code better document intention. - - To do this, we need to move the ada_catchpoint_location type's - definition to after ada_catchpoint is defined, otherwise the compiler - doesn't know that ada_catchpoint is convertible to struct breakpoint. - - Change-Id: Id908b2e38bde30b262381e00c5637adb9bf0129d - -2022-05-20 Pedro Alves - - init_breakpoint_sal -> base_breakpoint::base_breakpoint - This converts init_breakpoint_sal to a base_breakpoint constructor. - - It removes a use of init_raw_breakpoint. - - To avoid manually adding a bunch of parameters to - new_breakpoint_from_type, and manually passing them down to the - constructors of a number of different base_breakpoint subclasses, make - new_breakpoint_from_type a variable template function. - - Change-Id: I4cc24133ac4c292f547289ec782fc78e5bbe2510 - -2022-05-20 Pedro Alves - - Remove "internal" parameter from a couple functions - None of init_breakpoint_sal, create_breakpoint_sal, and - strace_marker_create_breakpoints_sal make use of their "internal" - parameter, so remove it. - - Change-Id: I943f3bb44717ade7a7b7547edf8f3ff3c37da435 - -2022-05-20 Pedro Alves - - More breakpoint_ops parameter elimination - Remove breakpoint_ops parameters from a few functions that don't need - it. - - Change-Id: Ifcf5e1cc688184acbf5e19b8ea60138ebe63cf28 - -2022-05-20 Pedro Alves - - Make a few functions work with base_breakpoint instead of breakpoint - This makes tracepoints inherit from base_breakpoint, since their - locations are code locations. If we do that, then we can eliminate - tracepoint::re_set and tracepoint::decode_location, as they are doing - the same as the base_breakpoint implementations. - - With this, all breakpoint types created by new_breakpoint_from_type - are code breakpoints, i.e., base_breakpoint subclasses, and thus we - can make it return a base_breakpoint pointer. - - Finally, init_breakpoint_sal can take a base_breakpoint pointer as - "self" pointer too. This will let us convert this function to a - base_breakpoint ctor in a following patch. - - Change-Id: I3a4073ff1a4c865f525588095c18dc42b744cb54 - -2022-05-20 Pedro Alves - - ranged_breakpoint: move initialization to ctor - Move initialization of ranged_breakpoint's fields to its ctor. - - Change-Id: If7b842861f3cc6a429ea329d45598b5852283ba3 - -2022-05-20 Pedro Alves - - ranged_breakpoint: use install_breakpoint - This commit replaces a chunk of code in break_range_command by an - equivalent call to install_breakpoint. - - Change-Id: I31c06cabd36f5be91740aab029265f678aa78e35 - -2022-05-20 Pedro Alves - - ranged_breakpoint: don't use init_raw_breakpoint - ranged_breakpoint's ctor already sets the breakpoint's type to - bp_hardware_breakpoint. - - Since this is a "regular" breakpoint, b->pspace should remain NULL. - - Thus, the only thing init_raw_breakpoint is needed for, is to add the - breakpoint's location. Do that directly. - - Change-Id: I1505de94c3919881c2b300437e2c0da9b05f76bd - -2022-05-20 Pedro Alves - - Make structs breakpoint/base_breakpoint/catchpoint be abstract - You should never instanciate these types directly. - - Change-Id: I8086c74c415eadbd44924bb0ef20f34b5b97ee6f - -2022-05-20 Pedro Alves - - add_location_to_breakpoint -> breakpoint::add_location - Make add_location_to_breakpoint be a method of struct breakpoint. - - A patch later in the series will move this to base_breakpoint, but for - now, it needs to be here. - - Change-Id: I5bdc2ec1a7c2d66f26f51bf6f6adc8384a90b129 - -2022-05-20 Carl Love - - PowerPC: Make test gdb.arch/powerpc-power10.exp Endian independent. - The .quad statement stores the 64-bit hex value in Endian order. When used - to store a 64-bit prefix instructions on Big Endian (BE) systems, the .quad - statement stores the 32-bit suffix followed by the 32-bit prefix rather - than the expected order of prefix word followed by the suffix word. GDB - fetches 32-bits at a time when disassembling instructions. The disassembly - on BE gets messed up since GDB fetches the suffix first and interprets it - as a word instruction not a prefixed instruction. When gdb fetches the - prefix part of the instruction, following the initial suffix word, gdb - associates the prefix word incorrectly with the following 32-bits as the - suffix for the instruction when in fact it is the following instruction. - - For example on BE we have two prefixed instructions stored using the - .quad statement as follows: - - addr word GDB action - --------------------------------------------- - 1 suffix inst A <- GDB interprets as a word instruction - 2 prefix inst A <- GDB uses this prefix with - - 3 suffix inst B <- this suffix rather than the suffix at addr 1. - 4 prefix inst B - - This patch changes the .quad statement into two .longs to explicitly store - the prefix followed by the suffix of the instruction. - - The patch rearranges the instructions to put all of the word instructions - together followed by the prefix instructions for clarity. - - The patch has been tested on Power 10 and Power 7 BE and LE to verify - the change works as expected. - -2022-05-20 Tom Tromey - - Remove obsolete text from documentation - The documentation says that -enable-pretty-printing is experimental in - 7.0 and may change -- that's long enough ago that I think we can say - that this text is no longer correct or useful. - -2022-05-20 Nick Clifton - - Stop readekf and objdump from aggressively following links. - * dwarf.c (dwarf_select_sections_by_names): Return zero if no - sections were selected. - (dwarf_select_sections_by_letters): Likewise. - * dwarf.h: (dwarf_select_sections_by_names): Update prototype. - (dwarf_select_sections_by_letters): Update prototype. - * objdump.c (might_need_separate_debug_info): New function. - (dump_bfd): Call new function before attempting to load separate - debug info files. - (main): Do not enable dwarf section dumping for -WK or -WN. - * readelf.c (parse_args): Do not enable dwarf section dumping for - -wK or -wN. - (might_need_separate_debug_info): New function. - (process_object): Call new function before attempting to load - separate debug info files. - * testsuite/binutils-all/debuginfo.exp: Expect -WE and -wE - debuginfod tests to pass. - * testsuite/binutils-all/objdump.Wk: Add extra regexps. - * testsuite/binutils-all/readelf.k: Add extra regexps. - -2022-05-20 Jia-Wei Chen - - RISC-V: Update zfinx implement with zicsr. - Update zfinx implement with zicsr, fix missing fcsr use by zfinx. - add zicsr imply by zfinx. - - bfd/ChangeLog: - - * elfxx-riscv.c: New imply. - - gas/ChangeLog: - - * testsuite/gas/riscv/csr-insns-pseudo-zfinx.d: New test. - - opcodes/ChangeLog: - - * riscv-opc.c: Update insn class. - -2022-05-20 Tsukasa OI - - RISC-V: Remove RV128-only fmv instructions - As fmv.x.q and fmv.q.x instructions are RV128-only (not RV64-only), - it should be removed until RV128 support for GNU Binutils is required - again. - - gas/ChangeLog: - - * testsuite/gas/riscv/fmv.x.q-rv64-fail.d: New failure test. - * testsuite/gas/riscv/fmv.x.q-rv64-fail.l: Likewise. - * testsuite/gas/riscv/fmv.x.q-rv64-fail.s: Likewise. - - include/ChangeLog: - - * opcode/riscv-opc.h (MATCH_FMV_X_Q, MASK_FMV_X_Q, - MATCH_FMV_Q_X, MASK_FMV_Q_X): Remove RV128-only instructions. - - opcodes/ChangeLog: - - * riscv-opc.c (riscv_opcodes): Remove RV128-only instructions. - -2022-05-20 Aditya Vidyadhar Kamath - - Fix non-pointer type compilation error in aix-thread.c - In aix-thread.c we use ms->value_address () to get the symbol address. - This triggers the following compiler error... - - base operand of '->' has non-pointer type 'bound_minimal_symbol' - - ... because ms is not a pointer. - - This commit fixes this error by using ms.value_address () instead. - -2022-05-20 Steinar H. Gunderson - - add a trie to map quickly from address range to compilation unit - When using perf to profile large binaries, _bfd_dwarf2_find_nearest_line() - becomes a hotspot, as perf wants to get line number information - (for inline-detection purposes) for each and every sample. In Chromium - in particular (the content_shell binary), this entails going through - 475k address ranges, which takes a long time when done repeatedly. - - Add a radix-256 trie over the address space to quickly map address to - compilation unit spaces; for content_shell, which is 1.6 GB when some - (but not full) debug information turned is on, we go from 6 ms to - 0.006 ms (6 µs) for each lookup from address to compilation unit, a 1000x - speedup. - - There is a modest RAM increase of 180 MB in this binary (the existing - linked list over ranges uses about 10 MB, and the entire perf job uses - between 2–3 GB for a medium-size profile); for smaller binaries with few - ranges, there should be hardly any extra RAM usage at all. - -2022-05-20 Alan Modra - - Tidy warn-execstack handling - Make ld and bfd values consistent by swapping values 0 and 2 in - link_info.warn_execstack. This has the benefit of making the value an - "extended" boolean, with 0 meaning no warning, 1 meaning warn, other - values a conditional warning. - - Yes, this patch introduces fails on arm/aarch64. Not a problem with - this patch but an arm/aarch64 before_parse problem. - - bfd/ - * elflink.c (bfd_elf_size_dynamic_sections): Adjust - warn_execstack test. - include/ - * bfdlink.h (warn_execstack): Swap 0 and 2 meaning. - ld/ - * configure.ac (DEFAULT_LD_WARN_EXECSTACK): Use values of 0, - 1, 2 consistent with link_info.warn_execstack. - * ld.texi: Typo fixes. - * lexsup.c (parse_args): Adjust setting of link_info.warn_execstack. - (elf_static_list_options): Adjust help message conditions. - * configure: Regenerate. - -2022-05-20 GDB Administrator - - Automatic date update in version.in - -2022-05-19 Srinath Parvathaneni - - arm: Fix system register fpcxt_ns and fpcxt_s naming convention. - The current assembler accepts system registers FPCXTNS and FPCXTS for Armv8.1-M - Mainline Instructions VSTR, VLDR, VMRS and VMSR. - Assembler should be also allowing FPCXT_NS, fpcxt_ns, fpcxtns, FPCXT_S, fpcxt_s - and fpcxts. This patch fixes the issue. - -2022-05-19 Andrew Burgess - - gdb/doc: use @value{GDBP} in 'info pretty-printer' example - Update the 'info pretty-printer' example in the manual to make use of - @value{GDBP} instead of hard-coding '(gdb)'. - -2022-05-19 Andrew Burgess - - gdb/doc: make use of group/end group in 'info pretty-printers' example - The 'info pretty-printers' example is pretty long and consists of many - commands and their output. - - Currently, when the pdf manual is generated this example spans a - page-break, with the page-break falling part way through some example - output from GDB. - - This commit breaks up the example using @group .... @end group, within - each group is a single GDB command and all its output. - - Now, when the pdf manual is created, the page-break is placed after - the output of one GDB command, and before the subsequent command, this - looks much nicer. - -2022-05-19 Nikolaos Chatzikonstantinou - - gdb/doc: fix inconsistent info pretty-printer example - The example for 'info pretty-printer' in the manual passes an - object-regexp in some cases, but presents output as though no - object-regexp was passed. - - This commit fixes the two mistakes, in one case, fixing the output to - filter based on object-regexp, and in the other, to remove the - object-regexp from the command and leave all the output. - -2022-05-19 Nick Clifton - - Fix potentially uninitialised variables in the Windows tools - -2022-05-19 Tiezhu Yang - - gdb: testsuite: Support displaced stepping on LoongArch - When execute the following command on LoongArch: - - make check-gdb TESTS="gdb.base/async-shell.exp" - - we can see the following message in gdb/testsuite/gdb.sum: - - UNSUPPORTED: gdb.base/async-shell.exp: displaced stepping - - modify support_displaced_stepping to support displaced stepping - on LoongArch. - - With this patch: - - PASS: gdb.base/async-shell.exp: run & - PASS: gdb.base/async-shell.exp: shell echo foo - PASS: gdb.base/async-shell.exp: interrupt - PASS: gdb.base/async-shell.exp: process stopped - - I did the following tests that use support_displaced_stepping - with this patch on LoongArch, there is no failed testcases. - - loongson@linux:~/gdb.git$ grep -r support_displaced_stepping gdb/testsuite/gdb.* - gdb/testsuite/gdb.arch/disp-step-insn-reloc.exp:if { ![support_displaced_stepping] } { - gdb/testsuite/gdb.base/step-over-no-symbols.exp: if { $displaced != "off" && ![support_displaced_stepping] } { - gdb/testsuite/gdb.base/moribund-step.exp:if { ![support_displaced_stepping] } { - gdb/testsuite/gdb.base/async-shell.exp:if { ![support_displaced_stepping] } { - gdb/testsuite/gdb.base/inferior-died.exp:if { ![support_displaced_stepping] } { - gdb/testsuite/gdb.base/step-over-syscall.exp: if {$displaced == "on" && ![support_displaced_stepping]} { - gdb/testsuite/gdb.mi/mi-watch-nonstop.exp:if { ![support_displaced_stepping] } { - gdb/testsuite/gdb.mi/mi-ns-stale-regcache.exp:if { ![support_displaced_stepping] } { - gdb/testsuite/gdb.mi/mi-nonstop.exp:if { ![support_displaced_stepping] } { - gdb/testsuite/gdb.mi/mi-nsmoribund.exp:if { ![support_displaced_stepping] } { - gdb/testsuite/gdb.mi/mi-nsintrall.exp:if { ![support_displaced_stepping] } { - gdb/testsuite/gdb.mi/mi-nsthrexec.exp:if { ![support_displaced_stepping] } { - gdb/testsuite/gdb.mi/mi-nonstop-exit.exp:if { ![support_displaced_stepping] } { - gdb/testsuite/gdb.multi/watchpoint-multi.exp:if [support_displaced_stepping] { - gdb/testsuite/gdb.python/py-evthreads.exp:if { ![support_displaced_stepping] } { - gdb/testsuite/gdb.threads/step-over-lands-on-breakpoint.exp: if { $displaced != "off" && ![support_displaced_stepping] } { - gdb/testsuite/gdb.threads/interrupt-while-step-over.exp: if { ${displaced-stepping} != "off" && ![support_displaced_stepping] } { - gdb/testsuite/gdb.threads/step-over-trips-on-watchpoint.exp: if { $displaced != "off" && ![support_displaced_stepping] } { - -2022-05-19 Simon Marchi - - gdbsupport: fix path_join crash with -std=c++17 and -D_GLIBCXX_DEBUG - When building GDB with -std=c++17 and -D_GLIBCXX_DEBUG=1, I get: - - $ ./gdb -nx --data-directory=data-directory -q -ex "maint selftest path_join" - /usr/include/c++/11.2.0/string_view:233: constexpr const value_type& std::basic_string_view<_CharT, _Traits>::operator[](std::basic_string_view<_CharT, _Traits>::size_type) const [with _CharT = char; _Traits = std::char_traits; std::basic_string_view<_CharT, _Traits>::const_reference = const char&; std::basic_string_view<_CharT, _Traits>::size_type = long unsigned int]: Assertion '__pos < this->_M_len' failed. - - The problem is that we're passing an empty string_view to - IS_ABSOLUTE_PATH. IS_ABSOLUTE_PATH accesses [0] on that string_view, - which is out-of-bounds. - - The reason this is not seen with -std less than c++17 is that our local - copy of string_view (used with C++ < 17) does not have the assert in - operator[], as that wouldn't work in a constexpr method: - - https://gitlab.com/gnutools/binutils-gdb/-/blob/5890af36e5112bcbb8d7555e63570f68466e6944/gdbsupport/gdb_string_view.h#L180 - - IS_ABSOLUTE_PATH is normally used with null-terminated string. It's - fine to pass an empty null-terminated string to IS_ABSOLUTE_PATH, - because index 0 in such a string is valid. But not with an empty - string_view. - - Fix that by avoiding the "call" to IS_ABSOLUTE_PATH if the string_view - is empty. - - Change-Id: Idf4df961b63f513b3389235e93814c02b89ea32e - -2022-05-19 Jan Beulich - - Arm64: force emission of ILP32-dependent relocs - Like the placeholder types added in 04dfe7aa5217 ("Arm64: follow-on to - PR gas/27217 fix"), these are also placeholders which are subsequently - resolved (albeit later, hence this being a separate issue). As for the - resolved types 1 is returned, these pseudo-relocs should also have 1 - returned to force retaining of the [eventual] relocations. This is also - spelled out individually for each of them in md_apply_fix(). - -2022-05-19 Jan Beulich - - COFF: use hash for string table also when copying / stripping - Otherwise the string table may grow and hence e.g. change a final binary - (observed with PE/COFF ones) even if really there's no change. Doing so - in fact reduces the overall amount of code, and in particular the number - of places which need to remain in sync. - - Afaics there's no real equivalent to the "traditional_format" field used - when linking, so hashing is always enabled when copying / stripping. - -2022-05-19 Jan Beulich - - COFF/PE: keep linker version during objcopy / strip - Neither of the tools is really a linker, so whatever was originally - recorded should be retained rather than being overwritten by these - tools' versions. - - COFF/PE: don't leave zero timestamp after objcopy / strip - Fill the timestamp field suitably for _bfd_XXi_only_swap_filehdr_out(). - Instead of re-arranging the present if(), fold this logic with that of - copying the optional header. - -2022-05-19 Jan Beulich - - COFF: make objcopy / strip honor --keep-file-symbols - So far this option had no effect when used together with e.g. - --strip-debug. Set BSF_FILE on these symbols to change that. - - While altering this also join two adjacent blocks of case labeled - statements with identical code. - -2022-05-19 Jan Beulich - - don't over-align file positions of PE executable sections - When a sufficiently small alignment was specified via --file-alignment, - individual section alignment shouldn't affect placement within the file. - This involves first of all clearing D_PAGED for images when section and - file alignment together don't permit paging of the image. The involved - comparison against COFF_PAGE_SIZE in turn helped point out (through a - compiler warning) that 'page_size' should be of unsigned type (as in - particular FileAlignment is). This yet in turn pointed out a dubious - error condition (which is being deleted). - - For the D_PAGED case I think the enforced file alignment may still be - too high, but I'm wary of changing that logic without knowing of - possible corner cases. - - Furthermore file positions in PE should be independent of the alignment - recorded in section headers anyway. Otherwise there are e.g. anomalies - following commit 6f8f6017a0c4 ("PR27567, Linking PE files adds alignment - section flags to executables") in that linking would use information a - subsequent processing step (e.g. stripping) wouldn't have available - anymore, and hence a binary could change in that 2nd step for no actual - reason. (Similarly stripping a binary linked with a linker pre-dating - that commit would change the binary again when stripping it a 2nd time.) - -2022-05-19 Yvan Roux - - _bfd_real_fopen should not use ccs parameter on Windows - PR 25713 - * bfdio.c (_bfd_real_fopen): Delete ccs string. - -2022-05-19 Tsukasa OI - - RISC-V: Fix canonical extension order (K and J) - This commit fixes canonical extension order to follow the RISC-V ISA - Manual draft-20210402-1271737 or later. - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_recognized_prefixed_ext): Fix "K" extension - prefix to be placed before "J". - -2022-05-19 GDB Administrator - - Automatic date update in version.in - -2022-05-18 John Baldwin - - Use aarch64_features to describe register features in target descriptions. - Replace the sve bool member of aarch64_features with a vq member that - holds the vector quotient. It is zero if SVE is not present. - - Add std::hash<> specialization and operator== so that aarch64_features - can be used as a key with std::unordered_map<>. - - Change the various functions that create or lookup aarch64 target - descriptions to accept a const aarch64_features object rather than a - growing number of arguments. - - Replace the multi-dimension tdesc_aarch64_list arrays used to cache - target descriptions with unordered_maps indexed by aarch64_feature. - -2022-05-18 Jan Beulich - - Arm64: follow-on to PR gas/27217 fix - PR gas/27217 - - Prior to trying to address PR gas/28888 I noticed anomalies in how - certain insns would / wouldn't be affected in similar ways. - - Commit eac4eb8ecb26 ("Fix a problem assembling AArch64 sources when a - relocation is generated against a symbol that has a defined value") had - two copy-and-paste mistakes, passing the wrong type to - aarch64_force_reloc(). - - It further failed to add placeholder relocation types to that function's - block of case labels leading to a return of 1. While not of interest for - aarch64_force_relocation() (these placeholders are resolved right in - parse_operands()), calls to aarch64_force_reloc() happen before that - resolution would take place. - -2022-05-18 Nick Clifton - - Fix compile time warning building gold with Clang-14. - * int_encoding.cc (get_length_as_unsigned_LEB_128): Remove - current_length variable. - -2022-05-18 Victor Do Nascimento - - oops - forgot changelog entry for the previous delta. - - arm: Add unwind support for mixed register lists - * config/tc-arm.c (parse_reg_list): Add handling of mixed register - types. - (reg_names): Enumerate pseudoregister according to mapped physical - register number. - (s_arm_unwind_save_pseudo): Modify function signature. - (s_arm_unwind_save_core): Likewise. - (s_arm_unwind_save_mixed): New function. - (s_arm_unwind_save): Generate register list mask to pass to nested - functions. - * testsuite/gas/arm/unwind-pacbti-m.s: Expand test for mixed - register type lists. - * testsuite/gas/arm/unwind-pacbti-m.d: Likewise. - * testsuite/gas/arm/unwind-pacbti-m-readelf.d: Likewise. - -2022-05-18 Carl Love - - PowerPC: bp-permanent.exp, kill-after-signal fix - Fix changes that didn't make it into commit: - dd9cd55e990bcc9f8448cac38d242d53974b3604. - - Fix missing -wrap on gdb_test_multiple in gdb.base/kill-after-signal.exp - that is causing regression test on x86_64-linux with taskset -c 0. - -2022-05-18 Yichao Yu - - [AArch64] Return the regnum for PC (32) on aarch64 - This will allow the unwind info to explicitly specify a different value - for the return address from the link register. - Such usage, although uncommon, is valid and useful for signal frames. - It is also supported by aadwarf64 from ARM (Note 9 in [1]). - - Ref https://sourceware.org/pipermail/gdb/2022-May/050091.html - - [1] https://github.com/ARM-software/abi-aa/blob/2022Q1/aadwarf64/aadwarf64.rst#dwarf-register-names - -2022-05-18 Jan Beulich - - x86: shrink op_riprel - It is only ever initialized from a boolean, so it as well as related - variables' types can simply be bool and there's no masking to 32 bits - needed in set_op(). - -2022-05-18 Nick Clifton - - Add a --no-weak option to nm. - PR 29135 - * nm.c (non_weak): New variable. - (filter_symbols): When non-weak is true, ignore weak symbols. - (long_options): Add --no-weak. - (usage): Mention --no-weak. - (main): Handle -W/--no-weak. - * doc/binutils.texi: Document new feature. - * NEWS: Mention the new feature. - * testsuite/binutils-all/nm.exp: Add test of new feature. - * testsuite/binutils-all/no-weak.s: New test source file. - -2022-05-18 Pedro Alves - - Support -prompt and -lbl in gdb_test - This teaches gdb_test to forward the -prompt and -lbl options to - gdb_test_multiple. - - The option parsing is done with parse_args. - - As a cleanup, instead of using llength and lindex to get at the - positional arguments, use lassign, and check whether the corresponding - variable is empty. - - Convert gdb.base/ui-redirect.exp and gdb.xml/tdesc-reload.exp to use - gdb_test -prompt/-lbl instead of gdb_test_multiple as examples. - - Change-Id: I243e1296d32c05a421ccef30b63d43a89eaeb4a0 - -2022-05-18 Luis Machado - - Remove unused DWARF PAUTH registers - The AARCH64_DWARF_PAUTH_DMASK and AARCH64_DWARF_PAUTH_CMASK DWARF registers - never made their way into the aadwarf64. The following patch removes these - constants and their use. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=26295 - -2022-05-18 Luis Machado - - Rename PAUTH_RA_STATE to RA_SIGN_STATE - The aadwarf64 [1] names this register RA_SIGN_STATE, so update the code to use - the same name. - - [1] https://github.com/ARM-software/abi-aa/blob/main/aadwarf64/aadwarf64.rst - -2022-05-18 Tom de Vries - - [gdb/testsuite] Simplify unknown lang testing in gdb.base/parse_number.exp - Move testing of language unknown out of the $supported_archs loop in - gdb.base/parse_number.exp. This reduces total amount of tests from 18466 to - 17744. - - Tested on x86_64-linux. - -2022-05-18 Tom de Vries - - [gdb/testsuite] Use hex_for_lang in gdb.base/parse_number.exp - In gdb.base/parse_number.exp, add a new proc hex_for_lang that formats a hex - number appropriately for a given language. - - Tested on x86_64-linux. - -2022-05-18 Tom de Vries - - [gdb/tdep] Add gdb/syscalls/update-linux-from-src.sh - Add a new script gdb/syscalls/update-linux-from-src.sh, that can be used to - generate *-linux.xml.in files from linux kernel sources, like so: - ... - $ ./update-linux-from-src.sh ~/upstream/linux-stable.git - Skipping aarch64-linux.xml.in, no syscall.tbl - Generating amd64-linux.xml.in - Skipping arm-linux.xml.in, use arm-linux.py instead - Skipping bfin-linux.xml.in, no longer supported - Generating i386-linux.xml.in - Generating mips-n32-linux.xml.in - Generating mips-n64-linux.xml.in - Generating mips-o32-linux.xml.in - Generating ppc64-linux.xml.in - Generating ppc-linux.xml.in - Generating s390-linux.xml.in - Generating s390x-linux.xml.in - Generating sparc64-linux.xml.in - Generating sparc-linux.xml.in - ... - - Update *-linux.xml.in and *-linux.xml using linux kernel tag v5.18-rc6. - -2022-05-18 Tamar Christina - - AArch64: Enable FP16 by default for Armv9-A. - In Armv9-A SVE is mandatory, and for SVE FP16 is mandatory. This fixes a disconnect - between GCC and binutils where GCC has FP16 on by default and gas doesn't. - - include/ChangeLog: - - 2022-05-16 Tamar Christina - - * opcode/aarch64.h (AARCH64_ARCH_V9_FEATURES): Add AARCH64_FEATURE_F16. - -2022-05-18 Jan Beulich - - gas: avoid octal numbers being accepted when processing .linefile - Compilers would put decimal numbers there, so I think we should treat - finding octal numbers the same as finding bignums - ignore them as - actually being comments of some very specific form. - -2022-05-18 Jan Beulich - - gas: avoid bignum related errors when processing .linefile - Any construct which to the scrubber looks like a C preprocessor - line/file "directive" is converted to .linefile, but the amount of - checking the scrubber does is minimal (albeit it does let through only - decimal digits for the line part of the contruct). Since the scrubber - conversion is further tied to # being a line comment character, anything - which upon closer inspection turns out not to be a line/file "directive" - is supposed to be treated as a comment, i.e. ignored. Therefore we - cannot use get_absolute_expression(), as this may raise errors. Open- - code the function instead, treating everything not resulting in - O_constant as a comment as well. - - Furthermore also bounds-check the parsed value. This bounds check tries - to avoid implementation defined behavior (which may be the raising of an - implementation defined signal), but for now makes the assumption that - int has less than 64 bits. The way bfd_signed_vma (which is what offsetT - aliases) is defined in bfd.h for the BFD64 case I cannot really see a - clean way of avoiding this assumption. Omitting the #ifdef, otoh, would - risk "condition is always false" warnings by compilers. - - Convert get_linefile_number() to return bool at this occasion as well. - -2022-05-18 Jan Beulich - - gas: fold do_repeat{,_with_expander}() - do_repeat_with_expander() already deals with the "no expander" case - quite fine, so there's really little point having two functions. What it - lacks compared with do_repeat() is a call to sb_build(), which can - simply be moved (and the then redundant sb_new() be avoided). Along with - this moving also flip if the main if()'s condition such that the "no - expander" case is handled first. - - gas: don't ignore .linefile inside false conditionals - When assembling code previously pre-processed by a C compiler, long - enough comments may have been collapsed into "# " - constructs. If we skip these, line numbers (and possibly even file - names) will be off / wrong in both diagnostics and debug info. - - gas: simplify ignore_input() - First of all convert to switch(), in preparation of adding another - directive here which may not be ignored. While doing so drop dead code: - A string the first two characters of which do not match "if" also wont - match "ifdef" or "ifndef". - - gas: tweak .irp and alike file/line handling for M68K/MRI - In commit 2ee1792bec22 ("gas: further adjust file/line handling for .irp - and alike") I neglected the need to omit the leading . in M68K/MRI mode. - -2022-05-18 Xi Ruoyao - - gold: don't invoke IA32 syscall in x86_64 assembly testcase - pr17704a_test.s is a x86_64 assembly file, but it invokes IA32 exit - syscall with "int 0x80". This causes a segfault on kernels with - CONFIG_IA32_EMULATION disabled. - - gold/ - - * testsuite/pr17704a_test.s (_start): Invoke x86_64 exit syscall - instead of its IA32 counterpart. - -2022-05-18 GDB Administrator - - Automatic date update in version.in - -2022-05-17 Nikolaos Chatzikonstantinou - - Fix typo in info page - -2022-05-17 Pedro Alves - - Fix gdb.python/py-connection.exp with remote targets - After the patch to make gdb_test's question non-optional when - specified, gdb.python/py-connection.exp started failing like so: - - $ make check TESTS="gdb.python/py-connection.exp" RUNTESTFLAGS="--target_board=native-gdbserver" - (gdb) PASS: gdb.python/py-connection.exp: info connections while the connection is still around - disconnect^M - Ending remote debugging.^M - (gdb) FAIL: gdb.python/py-connection.exp: kill the inferior - - The problem is that "disconnect" when debugging with the native target - asks the user whether to kill the program, while with remote targets, - it doesn't. - - Fix it by explicitly killing before disconnecting. - - Tested with --target_board unix, native-gdbserver, and native-extended-gdbserver. - - Change-Id: Icd85015c76deb84b71894715d43853c1087eba0b - -2022-05-17 Felix Willgerodt - - gdb, btrace: Throw an error for empty recordings when replaying starts. - This makes record_btrace_start_replaying() more consistent, as it already - errors out e.g. on a recording with only gaps. - -2022-05-17 Pedro Alves - - Make gdb_test's question non-optional if specified - gdb_test supports handling scenarios where GDB asks a question before - finishing handling some command. The full prototype of gdb_test is: - - # gdb_test COMMAND PATTERN MESSAGE QUESTION RESPONSE - - However, QUESTION is a question that GDB _may_ ask, not one that GDB - _must_ ask: - - # QUESTION is a question GDB may ask in response to COMMAND, like - # "are you sure?" - # RESPONSE is the response to send if QUESTION appears. - - If GDB doesn't raise the question, the test still passes. - - I think that this is a misfeature. If GDB regresses and stops asking - a question, the testsuite won't notice. So I think that if a QUESTION - is specified, gdb_test should ensure it comes out of GDB. - - Running the testsuite exposed a number of tests that pass - QUESTION/RESPONSE to GDB, but no question comes out. The previous - commits fixed them all, so this commit changes gdb_test's behavior. - - A related issue is that gdb_test doesn't enforce that if you specify - QUESTION, that you also specify RESPONSE. I.e., you should pass 1, 2, - 3, or 5 arguments to gdb_test, but never 4, or more than 5. Making - gdb_test detect bogus arguments actually regressed some testcases, - also all fixed in previous commits. - - Change-Id: I47c39c9034e6a6841129312037a5ca4c5811f0db - -2022-05-17 Pedro Alves - - gdb.base/skip.exp: Don't abuse gdb_test's question support - gdb.base/skip.exp abuses gdb_test's support for answering a GDB - question to do this: - - # With gcc 9.2.0 we jump once back to main before entering foo here. - # If that happens try to step a second time. - gdb_test "step" "foo \\(\\) at.*" "step 3" \ - "main \\(\\) at .*\r\n$gdb_prompt " "step" - - After a patch later in this series, gdb_test will FAIL if GDB does NOT - issue the question, so this test would start failing on older GCCs. - - Switch to using gdb_test_multiple instead. There are three spots in - the file that have the same pattern, and they're actually in a - sequence of commands that is repeated those 3 times. Factor all that - out to a procedure. - - I don't have gcc 9.2 handy, but I do have gcc 6.5, and that one is - affected as well, so update the comment. - - Change-Id: If0a7e3cdf5191b4eec95ce0c8845c3a4d801c39e - -2022-05-17 Pedro Alves - - Avoid having to unload file in gdb.server/connect-with-no-symbol-file.exp - gdb.server/connect-with-no-symbol-file.exp's connect_no_symbol_file - does: - - gdb_test "file" ".*" "discard symbol table" \ - {Discard symbol table from `.*'\? \(y or n\) } "y" - - A following patch will make gdb_test expect the question out of GDB if - one is passed down as argument to gdb_test. With that, this test - starts failing. This is because connect_no_symbol_file is called in a - loop, and the first time around, there's a loaded file, so "file" asks - the "Discard symbol table ... ?" question, while in the following - iterations there's no file, so there's no question. - - Fix this by not loading a file into GDB in the first place. - - Change-Id: I810c036b57842c4c5b47faf340466b0d446d1abc - -2022-05-17 Pedro Alves - - Fix bogus gdb_test invocations - A following patch will make gdb_test error out if bogus arguments are - passed, which exposed bugs in a few testcases: - - - gdb.python/py-parameter.exp, passing a spurious "1" as extra - parameter, resulting in: - - ERROR: Unexpected arguments: {set test-file-param bar.txt} {The name of the file has been changed to bar.txt} {set new file parameter} 1 - - - gdb.python/py-xmethods.exp, a missing test message, resulting in - the next gdb_test being interpreted as message, question and - response! With the enforcing patch, this was caught with: - - ERROR: Unexpected arguments: {p g.mul('a')} {From Python G<>::mul.*} gdb_test {p g_ptr->mul('a')} {From Python G<>::mul.*} {after: g_ptr->mul('a')} - - - gdb.base/pointers.exp, missing a quote. - - Change-Id: I66f2db4412025a64121db7347dfb0b48240d46d4 - -2022-05-17 Pedro Alves - - gdb.base/scope.exp: Remove bogus gdb_test questions - This test is abusing the QUESTION/RESPONSE feature to send an - alternative command to GDB if the first command fails. Like so: - - gdb_test "print 'scope0.c'::filelocal" \ - "\\\$$decimal = 1" "print 'scope0.c'::filelocal at main" \ - "No symbol \"scope0.c\" in current context.*" \ - "print '$srcdir/$subdir/scope0.c'::filelocal" - - So if 'scope0.c' doesn't work, we try again with - '$srcdir/$subdir/scope0.c'. I strongly suspect this is really an - obsolete test. I think that if '$srcdir/$subdir/scope0.c' works, then - 'scope0.c' should have worked too, thus I'd think that if we pass due - to the question path, then it's a bug. So just remove the question - part passed to gdb_test. - - Change-Id: I2acc99285f1d519284051b49693b5441fbdfe3cd - -2022-05-17 Pedro Alves - - Remove gdb_test questions that GDB doesn't ask - Change-Id: Ib2616dc883e9dc9ee100f6c86d83a921a0113c16 - -2022-05-17 Nelson Chu - - RISC-V: Added half-precision floating-point v1.0 instructions. - bfd/ - * elfxx-riscv.c (riscv_implicit_subsets): Added implicit f - and zicsr for zfh. - (riscv_supported_std_z_ext): Added default v1.0 version for zfh. - (riscv_multi_subset_supports): Handle INSN_CLASS_ZFH, - INSN_CLASS_D_AND_ZFH and INSN_CLASS_Q_AND_ZFH. - gas/ - * config/tc-riscv.c (FLT_CHARS): Added "hH". - (macro): Expand Pseudo M_FLH and M_FSH. - (riscv_pseudo_table): Added .float16 directive. - * testsuite/gas/riscv/float16-be.d: New testcase for .float16. - * testsuite/gas/riscv/float16-le.d: Likewise. - * testsuite/gas/riscv/float16.s: Likewise. - * testsuite/gas/riscv/fp-zfh-insns.d: New testcase for zfh. - * testsuite/gas/riscv/fp-zfh-insns.s: Likewise. - include/ - * opcode/riscv-opc.h: Added MASK and MATCH encodings for zfh. - * opcode/riscv.h: Added INSN_CLASS and pseudo macros for zfh. - opcodes/ - * riscv-opc.c (riscv_opcodes): Added zfh instructions. - -2022-05-17 GDB Administrator - - Automatic date update in version.in - -2022-05-16 Ilya Leoshkevich - - IBM zSystems: Fix left-shifting negative PCRel32 values (PR gas/29152) - s390_insert_operand ()'s val, min and max are encoded PCRel32 values - and need to be left-shifted by 1 before being shown to the user. - Left-shifting negative values is undefined behavior in C, but the - current code does not try to prevent it, causing UBSan to complain. - - Fix by casting the values to their unsigned equivalents before - shifting. - -2022-05-16 Pedro Alves - - Reindent gdbsupport/event-loop.cc:handle_file_event - The handle_file_event function has a few unnecessary {} lexical - blocks, presumably because they were originally if blocks, and the - conditions were removed, or something along those lines. - - Remove the unnecessary blocks, and reindent. - - Change-Id: Iaecbe5c9f4940a80b81dbbc42e51ce506f6aafb2 - -2022-05-16 Pedro Alves - - gdbsupport/event-loop.cc: simplify !HAVE_POLL paths - gdbsupport/event-loop.cc throughout handles the case of use_poll being - true on a system where HAVE_POLL is not defined, by calling - internal_error if that situation ever happens. - - Simplify this by moving the "use_poll" global itself under HAVE_POLL, - so that it's way more unlikely to ever end up in such a situation. - Then, move the code that checks the value of use_poll under HAVE_POLL - too, and remove the internal_error calls. Like, from: - - if (use_poll) - { - #ifdef HAVE_POLL - // poll code - #else - internal_error (....); - #endif /* HAVE_POLL */ - } - else - { - // select code - } - - to - - #ifdef HAVE_POLL - if (use_poll) - { - // poll code - } - else - #endif /* HAVE_POLL */ - { - // select code - } - - While at it, make use_poll be a bool. The current code is using - unsigned char most probably to save space, but I don't think it really - matters here. - - Co-Authored-By: Youling Tang - Change-Id: I0dd74fdd4d393ccd057906df4cd75e8e83c1cdb4 - -2022-05-16 Eli Zaretskii - - gdb: Fix typo in last change in gdb.texinfo - - gdb: Document the 'metadata' styling in GDB displays. - The 'metadata' styling was never documented in the GDB manual. - This fills that gap. - -2022-05-16 Tom Tromey - - Fix Ada exception regression on Windows - The breakpoint c++-ification series introduced another bug in Ada -- - it caused "catch exception" and related commands to fail on Windows. - The problem is that the re_set method calls the wrong superclass - method, so the breakpoint doesn't get correctly re-set when the - runtime offsets change. This patch fixes the problem. - -2022-05-16 Bruno Larsen - - gdb/testsuite: fix "continue outside of loop" TCL errors - Many test cases had a few lines in the beginning that look like: - - if { condition } { - continue - } - - Where conditions varied, but were mostly in the form of ![runto_main] or - [skip_*_tests], making it quite clear that this code block was supposed - to finish the test if it entered the code block. This generates TCL - errors, as most of these tests are not inside loops. All cases on which - this was an obvious mistake are changed in this patch. - -2022-05-16 GDB Administrator - - Automatic date update in version.in - -2022-05-15 GDB Administrator - - Automatic date update in version.in - -2022-05-14 GDB Administrator - - Automatic date update in version.in - -2022-05-13 Tom Tromey - - Remove unused field cooked_index::m_start - cooked_index::m_start is unused and can be removed. I think this was - a leftover from a previous approach in the index finalization code, - and then when rewriting it I forgot to remove it. - - Tested by rebuilding. - -2022-05-13 Tom Tromey - - Implement pid_to_exec_file for Windows in gdbserver - I noticed that gdbserver did not implement pid_to_exec_file for - Windows, while gdb did implement it. This patch moves the code to - nat/windows-nat.c, so that it can be shared. This makes the gdbserver - implementation trivial. - - Remove windows_process_info::id - I noticed that windows_process_info::id is only used by gdbserver, and - not really necessary. This patch removes it. - - Constify target_pid_to_exec_file - This changes target_pid_to_exec_file and target_ops::pid_to_exec_file - to return a "const char *". I couldn't build many of these targets, - but did examine the code by hand -- also, as this only affects the - return type, it's normally pretty safe. This brings gdb and gdbserver - a bit closer, and allows for the removal of a const_cast as well. - - Put corefile-run.core into test subdirectory - I noticed that corefile-run.core ends up in the 'runtest' directory. - It's better, when at all possible, for test files to end up in the - test's designated subdirectory. This patch makes this change. - -2022-05-13 Tom Tromey - - Do not double-read minimal symbols for PE COFF - This changes coffread.c to avoid re-reading minimal symbols when - possible. This only works when there are no COFF symbols to be read, - but at least for my mingw builds of gdb, this seems to be the case. - - Tested using the AdaCore internal test suite on Windows. I also did - some local builds to ensure that no warnings crept in. - -2022-05-13 Pedro Alves - - Fix "gdb --write" with core files - If you load a core file into GDB with the --write option, or "set - write on" (equivalent), and then poke memory expecting it to patch the - core binary, you'll notice something odd -- the write seems to - succeed, but in reality, it doesn't. The value you wrote doesn't - persist. Like so: - - $ gdb -q --write -c testsuite/outputs/gdb.base/patch/gcore.test - [New LWP 615986] - Core was generated by `/home/pedro/gdb/build/gdb/testsuite/outputs/gdb.base/patch/patch'. - Program terminated with signal SIGTRAP, Trace/breakpoint trap. - #0 0x0000555555555131 in ?? () - (gdb) p *(unsigned char *)0x0000555555555131 = 1 - $1 = 1 '\001' - (gdb) p *(unsigned char *)0x0000555555555131 - $2 = 185 '\271' - (gdb) - - Diffing hexdumps of before/after patching, reveals that a "0x1" was - actually written somewhere in the file. The problem is that the "0x1" - was written at the wrong offset in the file... - - That happens because _bfd_elf_set_section_contents does this to seek - to the section's offset: - - pos = hdr->sh_offset + offset; - if (bfd_seek (abfd, pos, SEEK_SET) != 0 - || bfd_bwrite (location, count, abfd) != count) - return false; - - ... and 'hdr->sh_offset' is zero, so we seek to just OFFSET, which is - incorrect. The reason 'hdr->sh_offset' is zero is that - kernel-generated core files normally don't even have a section header - table (gdb-generated ones do, but that's more an accident than a - feature), and indeed elf_core_file_p doesn't even try to read sections - at all: - - /* Core files are simply standard ELF formatted files that partition - the file using the execution view of the file (program header table) - rather than the linking view. In fact, there is no section header - table in a core file. - - The process status information (including the contents of the general - register set) and the floating point register set are stored in a - segment of type PT_NOTE. We handcraft a couple of extra bfd sections - that allow standard bfd access to the general registers (.reg) and the - floating point registers (.reg2). */ - - bfd_cleanup - elf_core_file_p (bfd *abfd) - - Changing _bfd_elf_set_section_contents from: - - pos = hdr->sh_offset + offset; - - to: - - pos = section->filepos + offset; - - fixes it. If we do that however, the tail end of - _bfd_elf_set_section_contents ends up as a copy of - _bfd_generic_set_section_contents, so just call the latter, thus - eliminating some duplicate code. - - New GDB testcase included, which exercises both patching an executable - and patching a core file. Patching an executable already works - without this fix, because in that case BFD reads in the sections - table. Still, we had no testcase for that yet. In fact, we have no - "set write on" testcases at all, this is the first one. - - Tested on x86-64 GNU/Linux, gdb, ld, binutils, and gas. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=18227 - Change-Id: I0f49f58b48aabab2e269f2959b8fd8a7fe36fdce - -2022-05-13 Alan Modra - - Import libiberty from gcc - - sim: remove use of PTR - PTR will soon disappear from ansidecl.h. Remove uses in sim. Where - a PTR cast is used in assignment or function args to a void* I've - simply removed the unnecessary (in C) cast rather than replacing with - (void *). - -2022-05-13 GDB Administrator - - Automatic date update in version.in - -2022-05-13 Alan Modra - - gdb: remove use of PTR - PTR will disappear from ansidecl.h and libiberty on the next import - from gcc. Remove current uses in gdb. - -2022-05-12 Tom de Vries - - [gdb/testsuite] Fix gdb.cp/break-f-std-string.cc with older gcc - When running test-case gdb.cp/break-f-std-string.exp on openSUSE Leap 15.3 - with system gcc 7.5.0, I run into: - ... - (gdb) whatis /r std::string^M - No symbol "string" in namespace "std".^M - (gdb) FAIL: gdb.cp/break-f-std-string.exp: _GLIBCXX_USE_CXX11_ABI=1: \ - whatis /r std::string - ... - The same for gcc 8.2.1, but it passes with gcc 9.3.1. - - At source level (as we can observe in the .ii file with -save-temps) we have - indeed: - ... - namespace std { - namespace __cxx11 { - typedef basic_string string; - } - } - ... - while with gcc 9.3.1, we have instead: - ... - namespace std { - namespace __cxx11 { - ... - } - typedef basic_string string; - } - ... - due to gcc commit 33b43b0d8cd ("Define std::string and related typedefs - outside __cxx11 namespace"). - - Fix this by adding the missing typedef for gcc version 5 (the first version to - have the dual abi) to 8 (the last version missing aforementioned gcc commit). - - Tested on x86_64-linux, with: - - system gcc 7.5.0 - - gcc 4.8.5, 8.2.1, 9.3.1, 10.3.0, 11.2.1 - - clang 8.0.1, 12.0.1 - -2022-05-12 Alan Modra - - Fix an illegal memory access when creating DLLs. - PR 29006 - * pe-dll.c (dll_name): Delete, replacing with.. - (dll_filename): ..this, moved earlier in file. - (generate_edata): Delete parameters. Don't set up dll_name here.. - (pe_process_import_defs): ..instead set up dll_filename and - dll_symname here before returning. - (dll_symname_len): Delete write-only variable. - (pe_dll_generate_implib): Don't set up dll_symname here. - -2022-05-12 Mark Wielaard - - gdb: Workaround stringop-overread warning in debuginfod-support.c on powerpc64 - Just like on s390x with g++ 11.2.1, ppc64le with g++ 11.3.1 produces a - spurious warning for stringop-overread in debuginfod_is_enabled - for url_view. Also suppress it on powerpc64. - - gdb/ChangeLog: - - * debuginfod-support.c (debuginfod_is_enabled): Use - DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD on powerpc64. - -2022-05-12 Luis Machado - - Make gdb.ada/float-bits.exp more generic - There are assumptions in the test about the long double format - being used. While the results are OK for i387 128-bit long doubles, it - is not correct for IEEE quad 128-bit long doubles. - - Also, depending on the target (64-bit/32-bit), long doubles may not - be available at all. And it may be the case that the compiler for a 64-bit - target doesn't support 128-bit long doubles, but GDB might still support it - internally. - - Lastly, not every long double format has invalid values. Some formats - consider all values as valid floating point numbers. - - These divergences cause the following FAIL's on aarch64/arm: - - FAIL: gdb.ada/float-bits.exp: print val_long_double - FAIL: gdb.ada/float-bits.exp: print val_long_double after assignment - - With the above in mind, extend the test a little so it behaves well on - different architectures and so it works with different long double - formats. - - Main changes: - - - Use long double values appropriate for the long double format. - - Test long double assignment to compiler-generated long - double variables. - - Test long double assignment to GDB internal variables. - - Tested on x86_64 (16 PASS), i686 (16 PASS), aarch64 (12 PASS) and arm (9 PASS). - -2022-05-12 Tom de Vries - - [gdb/tdep] Improve gdb/syscalls/update-linux.sh - Fix two things in update-linux.sh: - - remove use of unnecessary tmp file - - inline gen-header.py into update-linux.sh - - Tested on x86_64-linux. - -2022-05-12 Tom de Vries - - [gdb/testsuite] Fix gdb.dwarf2/dw2-out-of-range-end-of-seq.exp on aarch64 - On aarch64-linux, with test-case gdb.dwarf2/dw2-out-of-range-end-of-seq.exp I - run into: - ... - (gdb) run ^M - Starting program: dw2-out-of-range-end-of-seq ^M - ^M - Program received signal SIGILL, Illegal instruction.^M - main () at src/gdb/testsuite/gdb.dwarf2/main.c:1^M - 1 /* This testcase is part of GDB, the GNU debugger.^M - (gdb) FAIL: gdb.dwarf2/dw2-out-of-range-end-of-seq.exp: runto: run to main - ... - - There are two problems here: - - the test-case contains a hardcoded "DW_LNS_advance_pc 1" which causes the - breakpoint pointing in the middle of an insn - - the FAIL triggers on aarch64-linux, but not on x86_64-linux, because the - test-case uses 'main_label' as the address of the first and only valid entry - in the line table, and: - - on aarch64-linux, there's no prologue, so main_label and main coincide, - while - - on x86_64-linux, there's a prologue, so main_label is different from main. - - Fix these problems by: - - eliminating the use of "DW_LNS_advance_pc 1", and using - "DW_LNE_set_address $main_end" instead, and - - eliminating the use of main_label, using "DW_LNE_set_address $main_start" - instead. - - Tested on both x86_64-linux and aarch64-linux. - -2022-05-12 Alan Modra - - cgen: increase buffer for hash_insn_list - As was done for hash_insn_array in commit d3d1cc7b13b4. - - * cgen-dis.c (hash_insn_list): Increase size of buf. Assert - size is large enough. - -2022-05-12 Alan Modra - - PR29142, segv in ar with empty archive and libdeps specified - PR 29142 - * ar.c (main): Properly handle libdeps for zero file_count. - -2022-05-12 Alan Modra - - Re: IBM zSystems: Accept (. - 0x100000000) PCRel32 operands - The new test failed on s390-linux due to bfd_sprintf_vma trimming - output to 32 bits for 32-bit targets. The test was faulty anyway, - expecting zero as the min end of the range is plainly wrong, but - that's what you get if you cast min to int. - - * config/tc-s390.c (s390_insert_operand): Print range error using - PRId64. - * testsuite/gas/s390/zarch-z900-err.l: Correct expected output. - -2022-05-12 GDB Administrator - - Automatic date update in version.in - -2022-05-11 Tom de Vries - - [gdb/testsuite] Fix gdb.base/catch-syscall.exp with --with-expat=no - When doing a gdb build with --with-expat=no, I run into: - ... - (gdb) PASS: gdb.base/catch-syscall.exp: determine pipe syscall: \ - continue to breakpoint: before pipe call - catch syscall pipe^M - Unknown syscall name 'pipe'.^M - (gdb) PASS: gdb.base/catch-syscall.exp: determine pipe syscall: \ - catch syscall pipe - catch syscall pipe2^M - Unknown syscall name 'pipe2'.^M - (gdb) PASS: gdb.base/catch-syscall.exp: determine pipe syscall: \ - catch syscall pipe2 - continue^M - Continuing.^M - [Detaching after vfork from child process 18538]^M - [Inferior 1 (process 18537) exited normally]^M - (gdb) FAIL: gdb.base/catch-syscall.exp: determine pipe syscall: continue - ... - - This is a regression since recent commit 5463a15c18b ("[gdb/testsuite] Handle - pipe2 syscall in gdb.base/catch-syscall.exp"). - - Fix this by using pipe/pipe2 syscall numbers instead. - - Tested on x86_64-linux. - -2022-05-11 Nick Clifton - - nm: use -U as an alias for --defines-only, in line with llvm-nm - -2022-05-11 Tom de Vries - - [gdb/testsuite] Fix gdb.base/catch-syscall.exp without --enable-targets - When doing a gdb build without --enable-targets, I run into: - ... - (gdb) UNSUPPORTED: gdb.base/catch-syscall.exp: multiple targets: \ - s390:31-bit vs s390:64-bit: set architecture s390:64-bit - delete breakpoints^M - (gdb) info breakpoints^M - No breakpoints or watchpoints.^M - (gdb) break -qualified main^M - No symbol table is loaded. Use the "file" command.^M - Make breakpoint pending on future shared library load? (y or [n]) n^M - (gdb) FAIL: gdb.base/catch-syscall.exp: gdb_breakpoint: set breakpoint at main - ... - - The problem is that due to recent commit e21d8399303 ("[gdb/testsuite] Remove - target limits in gdb.base/catch-syscall.exp") "clean_restart $binfile" no - longer is called at the end of test_catch_syscall_multi_arch. - - Fix this by moving "clean_restart $binfile" back to - test_catch_syscall_multi_arch. - - Tested on x86_64-linux. - -2022-05-11 Tom de Vries - - [gdb/testsuite] Fix gdb.base/maint.exp on powerpc64le - On powerpc64le-linux, I ran into: - ... - FAIL: gdb.base/maint.exp: maint print objfiles: symtabs - ... - - The problem is that: - - the "Cooked index in use" line occurs twice in the gdb output: - - once for exec maint, and - - once for "Object file system-supplied DSO". - - the matching of the second "Cooked index in use" also consumes - the "Symtabs:" string, and consequently the corresponding - clause does not trigger and $symtabs remains 0. - - Fix this by limiting the output of the command to the exec. - - Tested on x86_64-linux and powerpcle-linux. - -2022-05-11 Tom de Vries - - [gdb/tdep] Update syscalls/{ppc64,ppc}-linux.xml - Regenerate syscalls/{ppc64,ppc}-linux.xml on a system with 5.14 kernel. - -2022-05-11 Tom de Vries - - [gdb/testsuite] Remove target limits in gdb.base/catch-syscall.exp - In test-case gdb.base/catch-syscall.exp, proc test_catch_syscall_multi_arch we - test for supported targets using istarget, like so: - ... - if { [istarget "i*86-*-*"] || [istarget "x86_64-*-*"] } { - ... - } elseif { [istarget "powerpc-*-linux*"] \ - || [istarget "powerpc64*-linux*"] } { - ... - ... - but the tests excercised there can all be executed if gdb is configured with - --enable-targets=all. - - Rewrite the proc to iterate over all cases, and check if the test is supported - by trying "set arch $arch1" and "set arch $arch2". - - Tested on x86_64-linux, with: - - a gdb build with --enable-targets=all, and - - a gdb build build with my usual --enable-targets setting (too long to - include here) which means the sparc vs sparc:v9 case is unsupported. - -2022-05-11 Tom de Vries - - [gdb/record] Handle statx system call - When running test-case gdb.reverse/fstatat-reverse.exp with target board - unix/-m32 on openSUSE Tumbleweed, I run into: - ... - (gdb) PASS: gdb.reverse/fstatat-reverse.exp: set breakpoint at marker2 - continue^M - Continuing.^M - Process record and replay target doesn't support syscall number 383^M - Process record: failed to record execution log.^M - ^M - Program stopped.^M - 0xf7fc5555 in __kernel_vsyscall ()^M - (gdb) FAIL: gdb.reverse/fstatat-reverse.exp: continue to breakpoint: marker2 - ... - - The problems is that while with native we're trying to record these syscalls - (showing strace output): - ... - openat(AT_FDCWD, "/", O_RDONLY|O_PATH) = 3 - newfstatat(3, ".", {st_mode=S_IFDIR|0755, st_size=146, ...}, 0) = 0 - ... - with unix/-m32 we have instead: - ... - openat(AT_FDCWD, "/", O_RDONLY|O_PATH) = 3 - statx(3, ".", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, \ - {stx_mask=STATX_ALL|STATX_MNT_ID, stx_attributes=STATX_ATTR_MOUNT_ROOT, \ - stx_mode=S_IFDIR|0755, stx_size=146, ...}) = 0 - ... - and statx is not supported. - - Fix this by adding support for recording syscall statx. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28461 - -2022-05-11 Alan Modra - - opcodes cgen: remove use of PTR - Note that opcodes is regenerated with cgen commit d1dd5fcc38e reverted, - due to failure of bpf to compile with that patch applied. - - .../opcodes/bpf-opc.c:57:11: error: conversion from ‘long unsigned int’ to ‘unsigned int’ changes value from ‘18446744073709486335’ to ‘4294902015’ [-Werror=overflow] - 57 | 64, 64, 0xffffffffffff00ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_CODE) }, { F (F_DSTLE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } } - plus other similar errors. - - cpu/ - * mep.opc (print_tpreg, print_spreg): Delete unnecessary - forward declarations. Replace PTR with void *. - * mt.opc (print_dollarhex, print_pcrel): Delete forward decls. - opcodes/ - * bpf-desc.c, * bpf-dis.c, * cris-desc.c, - * epiphany-desc.c, * epiphany-dis.c, - * fr30-desc.c, * fr30-dis.c, * frv-desc.c, * frv-dis.c, - * ip2k-desc.c, * ip2k-dis.c, * iq2000-desc.c, * iq2000-dis.c, - * lm32-desc.c, * lm32-dis.c, * m32c-desc.c, * m32c-dis.c, - * m32r-desc.c, * m32r-dis.c, * mep-desc.c, * mep-dis.c, - * mt-desc.c, * mt-dis.c, * or1k-desc.c, * or1k-dis.c, - * xc16x-desc.c, * xc16x-dis.c, - * xstormy16-desc.c, * xstormy16-dis.c: Regenerate. - -2022-05-11 GDB Administrator - - Automatic date update in version.in - -2022-05-10 Youling Tang - - gdb: mips: Fix large-frame.exp test case failure - $ objdump -d outputs/gdb.base/large-frame/large-frame-O2 - 0000000120000b20 : - 120000b20: 67bdbff0 daddiu sp,sp,-16400 - 120000b24: ffbc4000 sd gp,16384(sp) - 120000b28: 3c1c0002 lui gp,0x2 - 120000b2c: 679c8210 daddiu gp,gp,-32240 - 120000b30: 0399e02d daddu gp,gp,t9 - 120000b34: df998058 ld t9,-32680(gp) - 120000b38: ffbf4008 sd ra,16392(sp) - 120000b3c: 0411ffd8 bal 120000aa0 - ... - - The disassembly of the above func function shows that we may use - instructions such as daddiu/daddu, so add "daddiu $gp,$gp,n", - "daddu $gp,$gp,$t9" and "daddu $gp,$t9,$gp" to the mips32_scan_prologue - function to fix the large-frame.exp test case. - - Before applying the patch: - - backtrace - #0 blah (a=0xfffffee220) at .../gdb/testsuite/gdb.base/large-frame-1.c:24 - #1 0x0000000120000b44 in func () - Backtrace stopped: frame did not save the PC - (gdb) FAIL: gdb.base/large-frame.exp: optimize=-O2: backtrace - - # of expected passes 5 - # of unexpected failures 1 - - After applying the patch: - - # of expected passes 6 - -2022-05-10 Tiezhu Yang - - gdb: LoongArch: Use GDB style to check readbuf and writebuf - The GDB style is to write 'if (readbuf != nullptr)', and the same for - writebuf. - -2022-05-10 Tom Tromey - - Fix --disable-threading build - PR build/29110 points out that GDB fails to build on mingw when the - "win32" thread model is in use. It turns out that the Fedora cross - tools using the "posix" thread model, which somehow manages to support - std::future, whereas the win32 model does not. - - While looking into this, I found that the configuring with - --disable-threading will also cause a build failure. - - This patch fixes this build by introducing a compatibility wrapper for - std::future. - - I am not able to test the win32 thread model build, but I'm going to - ask the reporter to try this patch. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29110 - -2022-05-10 Pedro Alves - - Fix "b f(std::string)" when current language is C - If you try to set a breakpoint at a function such as "b - f(std::string)", and the current language is C, the breakpoint fails - to be set, like so: - - (gdb) set language c - break f(std::string) - Function "f(std::string)" not defined. - Make breakpoint pending on future shared library load? (y or [n]) n - (gdb) - - The problem is that the code in GDB that expands the std::string - typedef hits this in c-typeprint.c: - - /* If we have "typedef struct foo {. . .} bar;" do we want to - print it as "struct foo" or as "bar"? Pick the latter for - C++, because C++ folk tend to expect things like "class5 - *foo" rather than "struct class5 *foo". We rather - arbitrarily choose to make language_minimal work in a C-like - way. */ - if (language == language_c || language == language_minimal) - { - if (type->code () == TYPE_CODE_UNION) - gdb_printf (stream, "union "); - else if (type->code () == TYPE_CODE_STRUCT) - { - if (type->is_declared_class ()) - gdb_printf (stream, "class "); - else - gdb_printf (stream, "struct "); - } - else if (type->code () == TYPE_CODE_ENUM) - gdb_printf (stream, "enum "); - } - - I.e., std::string is expanded to "class std::..." instead of just - "std::...", and then the "f(class std::..." symbol doesn't exist. - - Fix this by making cp-support.c:inspect_type print the expanded - typedef type using the language of the symbol whose type we're - expanding the typedefs for -- in the example in question, the - "std::string" typedef symbol, which is a C++ symbol. - - Use type_print_raw_options as it seems to me that in this scenario we - always want raw types, to match the real symbol names. - - Adjust the gdb.cp/break-f-std-string.exp testcase to try setting a - breakpoint at "f(std::string)" in both C and C++. - - Change-Id: Ib54fab4cf0fd307bfd55bf1dd5056830096a653b - -2022-05-10 Pedro Alves - - Always pass an explicit language down to c_type_print - The next patch will want to do language->print_type(type, ...), to - print a type in a given language, avoiding a dependency on the current - language. That doesn't work correctly currently, however, because - most language implementations of language_defn::print_type call - c_print_type without passing down the language. There are two - overloads of c_print_type, one that takes a language, and one that - does not. The one that does not uses the current language, defeating - the point of calling language->print_type()... - - This commit removes the c_print_type overload that does not take a - language, and adjusts the codebase throughout to always pass down a - language. In most places, there's already an enum language handy. - language_defn::print_type implementations naturally pass down - this->la_language. In a couple spots, like in ada-typeprint.c and - rust-lang.c there's no enum language handy, but the code is written - for a specific language, so we just hardcode the language. - - In gnuv3_print_method_ptr, I wasn't sure whether we could hardcode C++ - here, and we don't have an enum language handy, so I made it use the - current language, just like today. Can always be improved later. - - Change-Id: Ib54fab4cf0fd307bfd55bf1dd5056830096a653b - -2022-05-10 Pedro Alves - - Fix "b f(std::string)", always use DMGL_VERBOSE - Currently, on any remotely modern GNU/Linux system, - gdb.cp/no-dmgl-verbose.exp fails like so: - - break 'f(std::string)' - Function "f(std::string)" not defined. - (gdb) FAIL: gdb.cp/no-dmgl-verbose.exp: gdb_breakpoint: set breakpoint at 'f(std::string)' - break 'f(std::basic_string, std::allocator >)' - Function "f(std::basic_string, std::allocator >)" not defined. - (gdb) PASS: gdb.cp/no-dmgl-verbose.exp: DMGL_VERBOSE-demangled f(std::string) is not defined - - This testcase was added back in 2011, here: - - [patch] Remove DMGL_VERBOSE - https://sourceware.org/pipermail/gdb-patches/2011-June/083081.html - - Back then, the testcase would pass cleanly. It turns out that the - reason it fails today is that the testcase is exercising something in - GDB that only makes sense if the program is built for the pre-C++11 - libstc++ ABI. Back then the C++11 ABI didn't exist yet, but nowadays, - you need to compile with -D_GLIBCXX_USE_CXX11_ABI=0 to use the old - ABI. See "Dual ABI" in the libstdc++ manual, at - . - - If we tweak the gdb.cp/no-dmgl-verbose.exp testcase to force the old - ABI with -D_GLIBCXX_USE_CXX11_ABI=0, then it passes cleanly. - - So why is it that setting a breakpoint at "f(std::string)" fails with - modern ABI, but passes with old ABI? - - This is where libiberty demangler's DMGL_VERBOSE option comes in. The - Itanium ABI mangling scheme has a shorthand form for std::string (and - some other types). See - : - - "In addition, the following catalog of abbreviations of the form "Sx" are used: - - ::= St # ::std:: - ::= Sa # ::std::allocator - ::= Sb # ::std::basic_string - ::= Ss # ::std::basic_string < char, - ::std::char_traits, - ::std::allocator > - ::= Si # ::std::basic_istream > - ::= So # ::std::basic_ostream > - ::= Sd # ::std::basic_iostream > - " - - When the libiberty demangler encounters such a abbreviation, by - default, it expands it to the user-friendly typedef "std::string", - "std::iostream", etc.. If OTOH DMGL_VERBOSE is specified, the - abbreviation is expanded to the underlying, non-typedefed fullname - "std::basic_string, std::allocator >" - etc. as documented in the Itanium ABI, and pasted above. You can see - the standard abbreviations/substitutions in - libiberty/cp-demangle.c:standard_subs. - - Back before Jan's patch in 2011, there were parts of GDB that used - DMGL_VERBOSE, and others that did not, leading to mismatches. The - solution back then was to stop using DMGL_VERBOSE throughout. - - GDB has code in place to let users set a breakpoint at a function with - typedefs in its parameters, like "b f(uint32_t)". Demangled function - names as they appear in the symbol tables almost (more on this is in a - bit) never have typedefs in them, so when processing "b f(uint32_t)" - GDB first replaces "uint32_t" for its underlying type, and then sets a - breakpoint on the resulting prototype, in this case "f(unsigned int)". - - Now, if DMGL_VERBOSE is _not_ used, then the demangler demangles the - mangled name of a function such as "void f(std::string)" that was - mangled using the standard abbreviations mentioned above really as: - - "void f(std::string)". - - For example, the mangled name of "void f(std::string)" if you compile - with old pre-C++11 ABI is "_Z1fSs". That uses the abbreviation "Ss", - so if you demangle that without DMGL_VERBOSE, you get: - - $ echo "_Z1fSs" | c++filt --no-verbose - f(std::string) - - while with DMGL_VERBOSE you'd get: - - $ echo "_Z1fSs" | c++filt - f(std::basic_string, std::allocator >) - - If, when the user sets a breakpoint at "f(std::string)", GDB would - replace the std::string typedef for its underlying type using the same - mechanism I mentioned for the "f(uint32_t)" example above, then GDB - would really try to set a breakpoint at "f(std::basic_string, std::allocator >)", and that would fail, - as the function symbol GDB knows about for that function, given no - DMGL_VERBOSE, is "f(std::string)". - - For this reason, the code that expands typedefs in function parameter - names has an exception for std::string (and other standard - abbreviation types), such that "std::string" is never - typedef-expanded. - - And here lies the problem when you try to do "b f(std::string)" with a - program compiled with the C++11 ABI. In that case, std::string - expands to a different underlying type, like so: - - f(std::__cxx11::basic_string, std::allocator >) - - and this symbol naturally mangles differently, as: - - _Z1fNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE - - and then because this doesn't use the shorthand mangling abbreviation - for "std::string" anymore, it always demangles as: - - f(std::__cxx11::basic_string, std::allocator >) - - Now, when using the C++11 ABI, and you set a breakpoint at - "f(std::string)", GDB's typedefs-in-parameters expansion code hits the - exception for "std::string" and doesn't expand it, so the breakpoint - fails to be inserted, because the symbol that exists is really the - - f(std::__cxx11::basic_string, std::allocator >) - - one, not "f(std::string)". - - So to fix things for C++11 ABI, clearly we need to remove the - "std::string" exception from the typedef-in-parameters expansion - logic. If we do just that, then "b f(std::string)" starts working - with the C++11 ABI. - - However, if we do _just_ that, and nothing else, then we break - pre-C++11 ABI... - - The solution is then to in addition switch GDB to always use - DMGL_VERBOSE. If we do this, then pre-C++11 ABI symbols works the - same as C++11 ABI symbols overall -- the demangler expands the - standard abbreviation for "std::string" as "std::basic_string, std::allocator >" and letting GDB expand - the "std::string" typedef (etc.) too is no longer a problem. - - To avoid getting in the situation where some parts of GDB use - DMGL_VERBOSE and others not, this patch adds wrappers around the - demangler's entry points that GDB uses, and makes those force - DMGL_VERBOSE. - - The point of the gdb.cp/no-dmgl-verbose.exp testcase was to try to - ensure that DMGL_VERBOSE doesn't creep back in: - - gdb_test {break 'f(std::basic_string, std::allocator >)'} \ - {Function ".*" not defined\.} \ - "DMGL_VERBOSE-demangled f(std::string) is not defined" - - This obviously no longer makes sense to have, since we now depend on - DMGL_VERBOSE. So the patch replaces gdb.cp/no-dmgl-verbose.exp with a - new gdb.cp/break-f-std-string.exp testcase whose purpose is to make - sure that setting a breakpoint at "f(std::string)" works. It - exercises both pre-C++11 ABI and C++11 ABI. - - Change-Id: Ib54fab4cf0fd307bfd55bf1dd5056830096a653b - -2022-05-10 Nils-Christian Kempke - - gdb/testsuite: fix testsuite regressions for unix/-m32 board - This commit fixes two regressions introduced by - 891e4190ba705373eec7b374209478215fff5401. - - Reason for the failures was, that on a 32 bit machine the maximum - array length as well as the maximum allocatable memory for arrays - (in bytes) both seem to be limited by the maximum value of a 4 - byte (signed) Fortran integer. This lead to compiler errors/unexpected - behavior when compiling/running the test with the -m32 board. This - behavior is compiler dependent and can differ for different compiler - implementations, but generally, it seemed like a good idea to simply - avoid such situations. - - The affected tests check for GDB's overflow behavior when using KIND - parameters with GDB implemented Fortran intrinsic functions. If these - KIND parameters are too small to fit the actual intrinsic function's - result, an overflow is expected. This was done for 1, 2, and 4 - byte overflows. The last one caused problems, as it tried to allocate - arrays of length/byte-size bigger than the 4 byte signed integers which - would then be used with the LBOUND/UBOUND/SIZE intrinsics. - - The tests were adapted to only execute the 4 byte overflow tests when - running on targets with 64 bit. For this, the compiled tests evaluate the - byte size of a C_NULL_PTR via C_SIZEOF, both defined in the ISO_C_BINDING - module. The ISO_C_BINDING constant C_NULL_PTR is a Fortran 2003, the - C_SIZEOF a Fortran 2008 extension. Both have been implemented in their - respective compilers for while (e.g. C_SIZEOF is available since - gfortran 4.6). If this byte size evaluates to less than 8 we skip the - 4 byte overflow tests in the compiled tests of size.f90 and - lbound-ubound.f90. Similarly, in the lbound-ubound.exp testsfile we skip - the 4 byte overflow tests if the procedure is_64_target evaluates to false. - - In size.f90, additionally, the to-be-allocated amount of bytes did not - fit into 4 byte signed integers for some of the arrays, as it was - approximately 4 times the maximum size of a 4 byte signed integer. We - adapted the dimensions of the arrays in question as the meaningfulness - of the test does not suffer from this. - - With this patch both test run fine with the unix/-m32 board and - gcc/gfortran (9.4) as well as the standard board file. - - We also thought about completely removing the affected test from the - testsuite. We decided against this as the 32 bit identification comes - with Fortran 2008 and removing tests would have decreased coverage. - - A last change that happened with this patch was due to gfortran's and - ifx's type resolution when assigning big constants to Fortran Integer*8 - variables. Before the above changes this happened in a parameter - statement. Here, both compilers happily accepted a line like - - integer*8, parameter :: var = 2147483647 + 5. - - After this change the assignment is not done as a parameter - anymore, as this triggered compile time overflow errors. Instead, - the assignment is done dynamically, depending on the kind of machine one - is on. Sadly, just changing this line to - - integer*8 :: var - var = 2147483647 + 5 - - does not work with ifx (or flang for that matter, they behave similarly - here). It will create an integer overflow in the addition as ifx deduces - the type the additon is done in as Integer*4. So var will actually - contain the value -2147483644 after this. The lines - - integer*8 :: var - var = 2147483652 - - on the other hand fail to compile with gfortran (9.4.0) as the compiler - identifies an Integer overflow here. Finally, to make this work with - all three compilers an additional parameter has been introduced - - integer*8, parameter :: helper = 2147483647 - integer*8 :: var - var = helper + 5. - - This works on all 3 compilers as expected. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29053 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29054 - -2022-05-10 Pedro Alves - - Move non-dependent gdb::observers::observable::visit_state outside template - The other day, while looking at the symbols that end up in a GDB - index, I noticed that the gdb::observers::observable::visit_state enum - class appears a number of times: - - $ grep VISIT gdb-index-symbol-names.txt - gdb::observers::observable::visit_state::NOT_VISITED - gdb::observers::observable::visit_state::VISITED - gdb::observers::observable::visit_state::VISITING - gdb::observers::observable::visit_state::NOT_VISITED - gdb::observers::observable::visit_state::VISITED - gdb::observers::observable::visit_state::VISITING - gdb::observers::observable::visit_state::NOT_VISITED - gdb::observers::observable::visit_state::VISITED - gdb::observers::observable::visit_state::VISITING - gdb::observers::observable::visit_state::NOT_VISITED - gdb::observers::observable::visit_state::VISITED - gdb::observers::observable::visit_state::VISITING - gdb::observers::observable >::visit_state::NOT_VISITED - gdb::observers::observable >::visit_state::VISITED - gdb::observers::observable >::visit_state::VISITING - gdb::observers::observable::visit_state::NOT_VISITED - gdb::observers::observable::visit_state::VISITED - gdb::observers::observable::visit_state::VISITING - gdb::observers::observable::visit_state::NOT_VISITED - gdb::observers::observable::visit_state::VISITED - gdb::observers::observable::visit_state::VISITING - gdb::observers::observable::visit_state::NOT_VISITED - gdb::observers::observable::visit_state::VISITED - gdb::observers::observable::visit_state::VISITING - [... snip ...] - - $ grep VISIT gdb-index-symbol-names.txt | wc -l - 72 - - enum class visit_state is defined inside the class template - observable, but it doesn't have to be, as it does not depend on the - template parameters. This commit moves it out, so that only one such - type exists. This reduces the size of a -O0 -g3 build for me by - around 0.6%, like so: - - $ du -b gdb.before gdb.after - 164685280 gdb.before - 163707424 gdb.fixed - - and codesize by some 0.5%. - - Change-Id: I405f4ef27b8358fdd22158245b145d849b45658e - -2022-05-10 Nick Clifton - - Fix compiling binutils/resbin.c with Clang version 14 - -2022-05-10 Vladimir Mezentsev - - gprofng: include percentages in default metrics list - gprofng/ChangeLog - 2022-05-09 Vladimir Mezentsev - - * src/gprofng.rc: Include percentages in default metrics list. - -2022-05-10 Alan Modra - - gprof: remove use of PTR - * basic_blocks.c: Replace uses of PTR with void * throughout. - * cg_arcs.c: Likewise. - * cg_print.c: Likewise. - * hist.c: Likewise. - * source.h: Likewise. - * symtab.c: Likewise. - - gas: remove use of PTR - * config/obj-evax.c (evax_symbol_new_hook): Don't cast to PTR. - -2022-05-10 Alan Modra - - opcodes: remove use of PTR - The non-cgen parts of opcodes. - - * cr16-dis.c (print_arg): Replace PTR with void *. - * crx-dis.c (print_arg): Likewise. - * rl78-dis.c (print_insn_rl78_common): Don't use PTR cast. - * rx-dis.c (print_insn_rx): Likewise. - * visium-dis.c (print_insn_visium): Likewise. - * z8k-dis.c (print_insn_z8k): Likewise. - -2022-05-10 Alan Modra - - bfd: remove use of PTR - * coffcode.h (coff_write_object_contents): Don't cast to PTR. - * elf32-csky.c (csky_elf_link_hash_traverse): Remove use of PTR - and PARAMS. - (csky_allocate_dynrelocs): Don't use PTR cast. - * elf32-nios2.c (adjust_dynrelocs, allocate_dynrelocs): Replace - PTR with void *. - * elf32-visium.c (visium_elf_howto_parity_reloc): Likewise. - * elfxx-ia64.c (ia64_elf_reloc): Likewise. - * plugin.c (bfd_plugin_bfd_print_private_bfd_data): Likewise. - - include: remove use of PTR - * hashtab.h (HTAB_EMPTY_ENTRY): Replace PTR with void *. - (HTAB_DELETED_ENTRY): Likewise. - -2022-05-10 GDB Administrator - - Automatic date update in version.in - -2022-05-09 Ilya Leoshkevich - - IBM zSystems: Accept (. - 0x100000000) PCRel32 operands - as does not accept instructions like brasl %r0,.-0x100000000, because - of two problems with the generic overflow check: - - 1. PCRel32 operands are signed, but are treated as unsigned. - - 2. The allowed range for these operands is [-(1 << 32), (1 << 32) - 1], - and not [-(1 << 31), (1 << 31) - 1]. - - Fix both by disabling the generic overflow check - it's not needed, - because s390_insert_operand () performs its own. - - gas/ - - * config/tc-s390.c (md_gather_operands): Set fx_no_overflow. - * testsuite/gas/s390/s390.exp: Add zarch-z900-err. - * testsuite/gas/s390/esa-z900.d: New test. - * testsuite/gas/s390/esa-z900.s: New test. - * testsuite/gas/s390/zarch-z900-err.l: New test. - * testsuite/gas/s390/zarch-z900-err.s: New test. - -2022-05-09 Andrew Burgess - - gdb/testsuite: fix occasional failure in gdb.mi/mi-multi-commands.exp - In bug PR gdb/29036, another failure was reported for the test - gdb.mi/mi-multi-commands.exp. This test sends two commands to GDB as - a single write, and then checks that both commands are executed. - - The problem that was encountered here is that the output of the first - command, which looks like this: - - ^done,value="\"FIRST COMMAND\"" - - Is actually produced in parts, first the '^done' is printed, then the - ',value="\"FIRST COMMAND\"" is printed. - - What was happening is that some characters from the second command - were being echoed after the '^done' had been printed, but before the - value part had been printed. To avoid this issue I've relaxed the - pattern that checks for the first command a little. With this fix in - place the occasional failure in this test is no longer showing up. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29036 - -2022-05-09 Tom de Vries - - [gdb] Update syscalls/{amd64,i386}-linux.xml - - Add a script syscalls/gen-header.py, based on syscalls/arm-linux.py. - - Add a script syscalls/update-linux.sh (alongside update-freebsd.sh and - update-netbsd.sh). - - Use syscalls/update-linux.sh to update syscalls/{amd64,i386}-linux.xml.in. - - Regenerate syscalls/{amd64,i386}-linux.xml using syscalls/Makefile. - - In gdb/syscalls/i386-linux.xml.in, updating has the following notable effect: - ... - - - - - - - + - + - ... - - I've verified in ./arch/x86/entry/syscalls/syscall_32.tbl that the numbers are - correct. - - Tested on x86_64-linux. - -2022-05-09 Tom de Vries - - [gdb] Add gdb/syscalls/Makefile - Add a Makefile in gdb/syscalls that can be used to translate - gdb/syscalls/*.xml.in into gdb/syscalls/*.xml. - - Calling make reveals that bfin-linux.xml is missing, so add it. - - Tested on x86_64-linux. - -2022-05-09 Tiezhu Yang - - gdb: LoongArch: Implement the return_value gdbarch method - When execute the following command on LoongArch: - - make check-gdb TESTS="gdb.base/async.exp" - - there exist the following failed testcases: - - FAIL: gdb.base/async.exp: finish& (timeout) - FAIL: gdb.base/async.exp: jump& (timeout) - FAIL: gdb.base/async.exp: until& (timeout) - FAIL: gdb.base/async.exp: set exec-done-display off (GDB internal error) - - we can see the following messages in gdb/testsuite/gdb.log: - - finish& - Run till exit from #0 foo () at /home/loongson/gdb.git/gdb/testsuite/gdb.base/async.c:9 - (gdb) /home/loongson/gdb.git/gdb/gdbarch.c:2646: internal-error: gdbarch_return_value: Assertion `gdbarch->return_value != NULL' failed. - A problem internal to GDB has been detected, - further debugging may prove unreliable. - - In order to fix the above failed testcases, implement the return_value - gdbarch method on LoongArch. - -2022-05-09 Andrew Burgess - - gdb: fix for gdb.base/eof-exit.exp test failures - This fix relates to PR gdb/29032, this makes the test more stable by - ensuring that the Ctrl-D is only sent once the prompt has been - displayed. This issue was also discussed on the mailing list here: - - https://sourceware.org/pipermail/gdb-patches/2022-April/187670.html - - The problem identified in the bug report is that sometimes the Ctrl-D - (that the test sends to GDB) arrives while GDB is processing a - command. When this happens the Ctrl-D is handled differently than if - the Ctrl-D is sent while GDB is waiting for input at a prompt. - - The original intent of the test was that the Ctrl-D be sent while GDB - was waiting at a prompt, and that is the case the occurs most often, - but, when the Ctrl-D arrives during command processing, then GDB will - ignore the Ctrl-D, and the test will fail. - - This commit ensures the Ctrl-D is always sent while GDB is waiting at - a prompt, which makes this test stable. - - But, that still leaves an open question, what should happen when the - Ctrl-D arrives while GDB is processing a command? This commit doesn't - attempt to answer that question, which is while bug PR gdb/29032 will - not be closed once this commit is merged. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29032 - -2022-05-09 Tom de Vries - - [gdb] Make btrace maintainer entry more clear - Do: - ... - -record btrace - +record - + btrace - ... - to clarify that the listed maintainer is only maintainer of the btrace part of - record. - -2022-05-09 Martin Liska - - ansidecl.h: sync from GCC - include/ChangeLog: - - * ansidecl.h: Sync from GCC. - -2022-05-09 Tom de Vries - - [gdb/tdep] Support catch syscall pipe2 for i386 - With test-case gdb.base/catch-syscall.exp and target board unix/-m32, we run - into: - ... - (gdb) catch syscall pipe2^M - Unknown syscall name 'pipe2'.^M - (gdb) FAIL: gdb.base/catch-syscall.exp: determine pipe syscall: catch syscall pipe2 - ... - - Fix this by: - - adding a pipe2 entry in gdb/syscalls/i386-linux.xml.in, and - - regenerating gdb/syscalls/i386-linux.xml using - "xsltproc --output i386-linux.xml apply-defaults.xsl i386-linux.xml.in". - - Tested on x86_64-linux with native and unix/-m32. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29056 - -2022-05-09 Tom de Vries - - [gdb/testsuite] Handle pipe2 syscall in gdb.base/catch-syscall.exp - When running test-case gdb.reverse/pipe-reverse.exp on openSUSE Tumbleweed, - I run into: - ... - (gdb) continue^M - Continuing.^M - ^M - Catchpoint 2 (returned from syscall pipe2), in pipe () from /lib64/libc.so.6^M - (gdb) FAIL: gdb.base/catch-syscall.exp: without arguments: \ - syscall pipe has returned - ... - - The current glibc on Tumbleweed is 2.35, which contains commit - "linux: Implement pipe in terms of __NR_pipe2", and consequently syscall pipe2 - is used instead of syscall pipe. - - Fix this by detecting whether syscall pipe or pipe2 is used before running the - tests. - - Tested on x86_64-linux, specifically on: - - openSUSE Tumbleweed (with glibc 2.35), and - - openSUSE Leap 15.3 (with glibc 2.31). - - On openSUSE Tumbleweed + target board unix/-m32, this exposes: - ... - (gdb) catch syscall pipe2^M - Unknown syscall name 'pipe2'.^M - ... - which will be fixed in a folllow-up patch. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29056 - -2022-05-09 Tom de Vries - - [gdb/tdep] Handle pipe2 syscall for amd64 - When running test-case gdb.reverse/pipe-reverse.exp on openSUSE Tumbleweed, - I run into: - ... - (gdb) continue^M - Continuing.^M - Process record and replay target doesn't support syscall number 293^M - Process record: failed to record execution log.^M - ^M - Program stopped.^M - 0x00007ffff7daabdb in pipe () from /lib64/libc.so.6^M - (gdb) FAIL: gdb.reverse/pipe-reverse.exp: continue to breakpoint: marker2 - ... - - The current glibc on Tumbleweed is 2.35, which contains commit - "linux: Implement pipe in terms of __NR_pipe2", and consequently syscall pipe2 - is used in stead of syscall pipe. - - There is already support added for syscall pipe2 for aarch64 (which only has - syscall pipe2, not syscall pipe), so enable the same for amd64, by: - - adding amd64_sys_pipe2 in enum amd64_syscall - - translating amd64_sys_pipe2 to gdb_sys_pipe2 in amd64_canonicalize_syscall - - Tested on x86_64-linux, specifically on: - - openSUSE Tumbleweed (with glibc 2.35), and - - openSUSE Leap 15.3 (with glibc 2.31). - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29056 - -2022-05-09 GDB Administrator - - Automatic date update in version.in - -2022-05-08 Tom de Vries - - [gdb/testsuite] Fix gdb.tui/scroll.exp with read1 - When running test-case gdb.tui/scroll.exp, I get: - ... - Box Dump (80 x 8) @ (0, 0): - 0 $17 = 16 - 1 (gdb) p 17 - 2 $18 = 17 - 3 (gdb) p 18 - 4 $19 = 18 - 5 (gdb) p 19 - 6 $20 = 19 - 7 (gdb) - PASS: gdb.tui/scroll.exp: check cmd window in flip layout - ... - but with check-read1 I get instead: - ... - Box Dump (80 x 8) @ (0, 0): - 0 (gdb) 15 - 1 (gdb) p 16 - 2 $17 = 16 - 3 (gdb) p 17 - 4 $18 = 17 - 5 (gdb) p 18 - 6 $19 = 18 - 7 (gdb) p 19 - FAIL: gdb.tui/scroll.exp: check cmd window in flip layout - ... - - The "p 19" command is handled by Term::command, which sends the command and then - does Term::wait_for "^$gdb_prompt [string_to_regexp $cmd]", which: - - matches the line with "(gdb) p 19", and - - tries to match the following prompt "(gdb) " - - The problem is that scrolling results in reissuing output before the "(gdb) p - 19", and the second matching triggers on that. Consequently, wait_for no - longer translates gdb output into screen actions, and the screen does not - reflect the result of "p 19". - - Fix this by using a new proc wait_for_region_contents, which in contrast to - wait_for can handle a multi-line regexp. - - Tested on x86_64-linux with make targets check and check-read1. - -2022-05-08 Tom de Vries - - [gdb/testsuite] Fix gdb.cp/casts.exp with -m32 - When running test-case gdb.cp/casts.exp with target board unix/-m32, I run - into: - ... - (gdb) print (unsigned long long) &gd == gd_value^M - $31 = false^M - (gdb) FAIL: gdb.cp/casts.exp: print (unsigned long long) &gd == gd_value - ... - - With some additional printing, we can see in more detail why the comparison - fails: - ... - (gdb) print /x &gd^M - $31 = 0xffffc5c8^M - (gdb) PASS: gdb.cp/casts.exp: print /x &gd - print /x (unsigned long long)&gd^M - $32 = 0xffffc5c8^M - (gdb) PASS: gdb.cp/casts.exp: print /x (unsigned long long)&gd - print /x gd_value^M - $33 = 0xffffffffffffc5c8^M - (gdb) PASS: gdb.cp/casts.exp: print /x gd_value - print (unsigned long long) &gd == gd_value^M - $34 = false^M - (gdb) FAIL: gdb.cp/casts.exp: print (unsigned long long) &gd == gd_value - ... - - The gd_value is set by this assignment: - ... - unsigned long long gd_value = (unsigned long long) &gd; - ... - - The problem here is directly casting from a pointer to a non-pointer-sized - integer. - - Fix this by adding an intermediate cast to std::uintptr_t. - - Tested on x86_64-linux with native and target board unix/-m32. - -2022-05-08 Tom de Vries - - [gdb/testsuite] Handle init errors in gdb.mi/user-selected-context-sync.exp - In OBS, on aarch64-linux, with a gdb 11.1 based package, I run into: - ... - (gdb) builtin_spawn -pty^M - new-ui mi /dev/pts/5^M - New UI allocated^M - (gdb) =thread-group-added,id="i1"^M - (gdb) ERROR: MI channel failed - warning: Error detected on fd 11^M - thread 1.1^M - Unknown thread 1.1.^M - (gdb) UNRESOLVED: gdb.mi/user-selected-context-sync.exp: mode=non-stop: \ - test_cli_inferior: reset selection to thread 1.1 - ... - with many more UNRESOLVED following. - - The ERROR is a common problem, filed as - https://sourceware.org/bugzilla/show_bug.cgi?id=28561 . - - But the many UNRESOLVEDs are due to not checking whether the setup as done in - the test_setup function succeeds or not. - - Fix this by: - - making test_setup return an error upon failure - - handling test_setup error at the call site - - adding a "setup done" pass/fail to be turned into an unresolved - in case of error during setup. - - Tested on x86_64-linux, by manually triggering the error in - mi_gdb_start_separate_mi_tty. - -2022-05-08 Tom de Vries - - [gdb/testsuite] Fix gdb.ada/catch_ex_std.exp with remote-gdbserver-on-localhost - When running test-case gdb.ada/catch_ex_std.exp on target board - remote-gdbserver-on-localhost, I run into: - ... - (gdb) continue^M - Continuing.^M - [Inferior 1 (process 15656) exited with code 0177]^M - (gdb) FAIL: gdb.ada/catch_ex_std.exp: runto: run to main - Remote debugging from host ::1, port 49780^M - /home/vries/foo: error while loading shared libraries: libsome_package.so: \ - cannot open shared object file: No such file or directory^M - ... - - Fix this by adding the usual shared-library + remote-target helper - "gdb_load_shlib $sofile". - - Tested on x86_64-linux with native and target board - remote-gdbserver-on-localhost. - -2022-05-08 Tom de Vries - - [gdb/testsuite] Fix gdb.threads/fork-plus-threads.exp with check-readmore - When running test-case gdb.threads/fork-plus-threads.exp with check-readmore, - I run into: - ... - [Inferior 11 (process 7029) exited normally]^M - [Inferior 1 (process 6956) exited normally]^M - FAIL: gdb.threads/fork-plus-threads.exp: detach-on-fork=off: \ - inferior 1 exited (timeout) - ... - - The problem is that the regexp consuming the "Inferior exited normally" - messages: - - consumes more than one of those messages at a time, but - - counts only one of those messages. - - Fix this by adopting a line-by-line approach, which deals with those messages - one at a time. - - Tested on x86_64-linux with native, check-read1 and check-readmore. - -2022-05-08 GDB Administrator - - Automatic date update in version.in - -2022-05-07 Tom Tromey - - Fix "catch syscall" - Simon pointed out that some recent patches of mine broke "catch - syscall". Apparently I forgot to finish the conversion of this code - when removing init_catchpoint. This patch completes the conversion - and fixes the bug. - -2022-05-07 Andrew Burgess - - gdb/readline: fix extra 'quit' message problem - After these two commits: - - commit 4fb7bc4b147fd30b781ea2dad533956d0362295a - Date: Mon Mar 7 13:49:21 2022 +0000 - - readline: back-port changes needed to properly detect EOF - - commit 91395d97d905c31ac38513e4aaedecb3b25e818f - Date: Tue Feb 15 17:28:03 2022 +0000 - - gdb: handle bracketed-paste-mode and EOF correctly - - It was observed that, if a previous command is selected at the - readline prompt using the up arrow key, then when the command is - accepted (by pressing return) an unexpected 'quit' message will be - printed by GDB. Here's an example session: - - (gdb) p 123 - $1 = 123 - (gdb) p 123 - quit - $2 = 123 - (gdb) - - In this session the second 'p 123' was entered not by typing 'p 123', - but by pressing the up arrow key to select the previous command. It - is important that the up arrow key is used, typing Ctrl-p will not - trigger the bug. - - The problem here appears to be readline's EOF detection when handling - multi-character input sequences. I have raised this issue on the - readline mailing list here: - - https://lists.gnu.org/archive/html/bug-readline/2022-04/msg00012.html - - a solution has been proposed here: - - https://lists.gnu.org/archive/html/bug-readline/2022-04/msg00016.html - - This patch includes a test for this issue as well as a back-port of - (the important bits of) readline commit: - - commit 2ef9cec8c48ab1ae3a16b1874a49bd1f58eaaca1 - Date: Wed May 4 11:18:04 2022 -0400 - - fix for setting RL_STATE_EOF in callback mode - - That commit also includes some updates to the readline documentation - and tests that I have not included in this commit. - - With this commit in place the unexpected 'quit' messages are resolved. - -2022-05-07 Alan Modra - - Fix multiple ubsan warnings in i386-dis.c - Commit 39fb369834a3 "opcodes: Make i386-dis.c thread-safe" introduced - a number of casts to bfd_signed_vma that cause undefined behaviour - with a 32-bit libbfd. Revert those changes. - - * i386-dis.c (OP_E_memory): Do not cast disp to bfd_signed_vma - for negation. - (get32, get32s): Don't use bfd_signed_vma here. - -2022-05-07 Alan Modra - - Re: Fix new linker testsuite failures due to rwx segment test problems - Fix it some more. - - bfd/ - * elfnn-loongarch.c: Remove commented out elf_backend_* defines. - ld/ - * testsuite/ld-elf/elf.exp (target_defaults_to_execstack): Match - arm*. Delete loongarch. - -2022-05-07 GDB Administrator - - Automatic date update in version.in - -2022-05-07 Carl Love - - PowerPC fix for gdb.server/sysroot.exp - On PowerPC, the stop in the printf function is of the form: - - Breakpoint 2, 0x00007ffff7c6ab08 in printf@@GLIBC_2.17 () from /lib64/libc.so.6 - - On other architectures the output looks like: - - Breakpoint 2, 0x0000007fb7ea29ac in printf () from /lib/aarch64-linux-gnu/libc.so.6 - - The following patch modifies the printf test by matchine any character - starting immediately after the printf. The test now works for PowerPC - output as well as the output from other architectures. - - The test has been run on a Power 10 system and and Intel x86_64 system. - -2022-05-06 Nick Clifton - - Fix new linker testsuite failures due to rwx segment test problems - -2022-05-06 Tom Tromey - - Introduce catchpoint class - This introduces a catchpoint class that is used as the base class for - all catchpoints. init_catchpoint is rewritten to be a constructor - instead. - - This changes the hierarchy a little -- some catchpoints now inherit - from base_breakpoint whereas previously they did not. This isn't a - problem, as long as re_set is redefined in catchpoint. - -2022-05-06 Tom Tromey - - Add initializers to tracepoint - This adds some initializers to tracepoint. I think right now these - may not be needed, due to obscure rules about zero initialization. - However, this will change in the next patch, and anyway it is clearer - to be explicit. - - Remove init_raw_breakpoint_without_location - This removes init_raw_breakpoint_without_location, replacing it with a - constructor on 'breakpoint' itself. The subclasses and callers are - all updated. - - Disable copying for breakpoint - It seems to me that breakpoint should use DISABLE_COPY_AND_ASSIGN. - This patch does this. - - Add constructor to exception_catchpoint - This adds a constructor to exception_catchpoint and simplifies the - caller. - - Add constructor to syscall_catchpoint - This adds a constructor to syscall_catchpoint and simplifies the - caller. - - Add constructor to signal_catchpoint - This adds a constructor to signal_catchpoint and simplifies the - caller. - - Add constructor to solib_catchpoint - This adds a constructor to solib_catchpoint and simplifies the caller. - - Add constructor to fork_catchpoint - This adds a constructor to fork_catchpoint and simplifies the caller. - - Remove unnecessary line from catch_exec_command_1 - catch_exec_command_1 clears the new catchpoint's "exec_pathname" - field, but this is already done by virtue of calling "new". - - Constify breakpoint::print_recreate - This constifies breakpoint::print_recreate. - - Constify breakpoint::print_mention - This constifies breakpoint::print_mention. - - Constify breakpoint::print_one - This constifies breakpoint::print_one. - - Constify breakpoint::print_it - This constifies breakpoint::print_it. Doing this pointed out some - code in ada-lang.c that can be simplified a little as well. - - Move works_in_software_mode to watchpoint - works_in_software_mode is only useful for watchpoints. This patch - moves it from breakpoint to watchpoint, and changes it to return bool. - - Boolify breakpoint::explains_signal - This changes breakpoint::explains_signal to return bool. - - Remove breakpoint::ops - The breakpoint::ops field is set but never used. This removes it. - - Change print_recreate_thread to a method - This changes print_recreate_thread to be a method on breakpoint. This - function is only used as a helper by print_recreate methods, so I - thought this transformation made sense. - -2022-05-06 Carl Love - - PowerPC: bp-permanent.exp, kill-after-signal fix - The break point after the stepi on Intel is the entry point of the user - signal handler function test_signal_handler. The code at the break point - looks like: - - 0x : endbr64 - - On PowerPC with a Linux 5.9 kernel or latter, the address where gdb stops - after the stepi is in the vdso code inserted by the kernel. The code at the - breakpoint looks like: - - 0x <__kernel_start_sigtramp_rt64>: bctrl - - This is different from other architectures. As discussed below, recent - kernel changes involving the vdso for PowerPC have been made changes to the - signal handler code flow. PowerPC is now stopping in function - __kernel_start_sigtramp_rt64. PowerPC now requires an additional stepi to - reach the user signal handler unlike other architectures. - - The bp-permanent.exp and kill-after-signal tests run fine on PowerPC with an - kernel that is older than Linux 5.9. - - The PowerPC 64 signal handler was updated by the Linux kernel 5.9-rc1: - - commit id: 0138ba5783ae0dcc799ad401a1e8ac8333790df9 - powerpc/64/signal: Balance return predictor stack in signal trampoline - - An additional change to the PowerPC 64 signal handler was made in Linux - kernel version 5.11-rc7 : - - commit id: 24321ac668e452a4942598533d267805f291fdc9 - powerpc/64/signal: Fix regression in __kernel_sigtramp_rt64() semantics - - The first kernel change, puts code into the user space signal handler (in - the vdso) as a performance optimization to prevent the call/return stack - from getting out of balance. The patch ensures that the entire - user/kernel/vdso cycle is balanced with the addition of the "brctl" - instruction. - - The second patch, fixes the semantics of __kernel_sigtramp_rt64(). A new - symbol is introduced to serve as the jump target from the kernel to the - trampoline which now consists of two parts. - - The above changes for PowerPC signal handler, causes gdb to stop in the - kernel code not the user signal handler as expected. The kernel dispatches - to the vdso code which in turn calls into the signal handler. PowerPC is - special in that the kernel is using a vdso instruction (bctrl) to enter the - signal handler. - - I do not have access to a system with the first patch but not the second. I did - test on Power 9 with the Linux 5.15.0-27-generic kernel. Both tests fail on - this Power 9 system. The two tests also fail on Power 10 with the Linux - 5.14.0-70.9.1.el9_0.ppc64le kernel. - - The following patch fixes the issue by checking if gdb stopped at "signal - handler called". If gdb stopped there, the tests verifies gdb is in the kernel - function __kernel_start_sigtramp_rt64 then does an additional stepi to reach the - user signal handler. With the patch below, the tests run without errors on both - the Power 9 and Power 10 systems with out any failures. - -2022-05-06 Alan Modra - - bfd targmatch.h makefile rule - I hit this just now with a make -j build after touching config.bfd. - mv: cannot stat 'targmatch.new': No such file or directory - make[2]: *** [Makefile:2336: targmatch.h] Error 1 - make[2]: *** Waiting for unfinished jobs.... - - Fix that by not removing the target of the rule, a practice that seems - likely to cause parallel running of the rule recipe. The bug goes - back to 1997, the initial c0734708814c commit. - - * Makefile.am (targmatch.h): rm the temp file, not targmatch.h. - * Makefile.in: Regenerate. - -2022-05-06 Tom de Vries - - [gdb/testsuite] Fix gdb.dwarf2/locexpr-data-member-location.exp with nopie - When running test-case gdb.dwarf2/locexpr-data-member-location.exp with - target board unix/-fno-PIE/-no-pie/-m32 I run into: - ... - (gdb) step^M - 26 return 0;^M - (gdb) FAIL: gdb.dwarf2/locexpr-data-member-location.exp: step into foo - ... - - The problem is that the test-case tries to mimic some gdb_compile_shlib - behaviour using: - ... - set flags {additional_flags=-fpic debug} - get_func_info foo $flags - ... - but this doesn't work with the target board setting, because we end up doing: - ... - gcc locexpr-data-member-location-lib.c -fpic -g -lm -fno-PIE -no-pie -m32 \ - -o func_addr23029.x - ... - while gdb_compile_shlib properly filters out the -fno-PIE -no-pie. - - Consequently, the address for foo determined by get_func_info doesn't match - the actual address of foo. - - Fix this by printing the address of foo using the result of gdb_compile_shlib. - -2022-05-06 GDB Administrator - - Automatic date update in version.in - -2022-05-05 Simon Marchi - - gdb: use gdb::function_view for gdbarch_iterate_over_objfiles_in_search_order callback - A rather straightforward patch to change an instance of callback + - void pointer to gdb::function_view, allowing pasing lambdas that - capture, and eliminating the need for the untyped pointer. - - Change-Id: I73ed644e7849945265a2c763f79f5456695b0037 - -2022-05-05 Vladimir Mezentsev - - gprofng: use $host instead $target - By mistake, $target was used instead of $host to configure the gprogng build. - - gprofng/ChangeLog - 2022-04-28 Vladimir Mezentsev - - PR gprofng/29113 - PR gprofng/29116 - * configure.ac: Use $host instead $target. - * libcollector/configure.ac: Likewise. - * configure: Rebuild. - * libcollector/configure: Rebuild. - -2022-05-05 Simon Marchi - - gdb: make regcache's cooked_write_test selftest work with native-extended-gdbserver board - Running - - $ make check TESTS="gdb.gdb/unittest.exp" RUNTESTFLAGS="--target_board=native-extended-gdbserver" - - I get some failures: - - Running selftest regcache::cooked_write_test::i386.^M - Self test failed: target already pushed^M - Running selftest regcache::cooked_write_test::i386:intel.^M - Self test failed: target already pushed^M - Running selftest regcache::cooked_write_test::i386:x64-32.^M - Self test failed: target already pushed^M - Running selftest regcache::cooked_write_test::i386:x64-32:intel.^M - Self test failed: target already pushed^M - Running selftest regcache::cooked_write_test::i386:x86-64.^M - Self test failed: target already pushed^M - Running selftest regcache::cooked_write_test::i386:x86-64:intel.^M - Self test failed: target already pushed^M - Running selftest regcache::cooked_write_test::i8086.^M - Self test failed: target already pushed^M - - This is because the native-extended-gdbserver automatically connects GDB - to a GDBserver on startup, and therefore pushes a remote target on the - initial inferior. cooked_write_test is currently written in a way that - errors out if the current inferior has a process_stratum_target pushed. - - Rewrite it to use scoped_mock_context, so it doesn't depend on the - current inferior (the current one upon entering the function). - - Change-Id: I0357f989eacbdecc4bf88b043754451b476052ad - -2022-05-05 Luis Machado - - Move TILE-Gx files to TARGET64_LIBOPCODES_CFILES - TILE-Gx is a 64-bit core, so we should include those files in the - TARGET64_LIBOPCODES_CFILES as opposed to TARGET32_LIBOPCODES_CFILES. - - Don't define ARCH_cris for BFD64 - I believe it is a mistake to define ARCH_cris when BFD64 is defined. It is - a 32-bit architecture, so should be placed outside of the BFD64 block. - -2022-05-05 Xi Ruoyao - - loongarch: Don't check ABI flags if no code section - Various packages (glib and gtk4 for example) produces data-only objects - using `ld -r -b binary` or `objcopy`, with no elf header flags set. But - these files also have no code sections, so they should be compatible - with all ABIs. - - bfd/ - * elfnn-loongarch.c (elfNN_loongarch_merge_private_bfd_data): - Skip ABI checks if the input has no code sections. - - Reported-by: Wu Xiaotian - Suggested-by: Wang Xuerui - -2022-05-05 Andreas Krebbel - - IBM zSystems: mgrk, mg first operand requires register pair - opcodes/ - - * s390-opc.c (INSTR_RRF_R0RER): New instruction type. - (MASK_RRF_R0RER): Define mask for new instruction type. - * s390-opc.txt: Use RRF_R0RER for mgrk and RXY_RERRD for mg. - -2022-05-05 H.J. Lu - - bfd: Check NULL pointer before setting ref_real - PR ld/29086 - * linker.c (bfd_wrapped_link_hash_lookup): Check NULL pointer - before setting ref_real. - -2022-05-05 GDB Administrator - - Automatic date update in version.in - -2022-05-05 H.J. Lu - - LTO: Handle __real_SYM reference in IR - When an IR symbol SYM is referenced in IR via __real_SYM, its resolution - should be LDPR_PREVAILING_DEF, not PREVAILING_DEF_IRONLY, since LTO - doesn't know that __real_SYM should be resolved by SYM. - - bfd/ - - PR ld/29086 - * linker.c (bfd_wrapped_link_hash_lookup): Mark SYM is referenced - via __real_SYM. - - include/ - - PR ld/29086 - * bfdlink.h (bfd_link_hash_entry): Add ref_real. - - ld/ - - PR ld/29086 - * plugin.c (get_symbols): Resolve SYM definition to - LDPR_PREVAILING_DEF for __real_SYM reference. - * testsuite/ld-plugin/lto.exp: Run PR ld/29086 test. - * testsuite/ld-plugin/pr29086.c: New file. - -2022-05-04 Alan Modra - - cris bfd config - cris support will be built into a 32-bit bfd if using --enable-targets=all - on a 32-bit host, so we may as well make targmatch.h include cris. - - * config.bfd (cris): Remove #idef BFD64. - -2022-05-04 Alan Modra - - PowerPC64 check_relocs - Tidy the dynamic reloc handling code in check_relocs, removing - leftover comments and code from when check_relocs was called as each - object file was read in. - - * elf64-ppc.c (ppc64_elf_check_relocs): Tidy dynamic reloc - handling code. - (dec_dynrel_count): Do the same here. - -2022-05-04 Tom Tromey - - Fix crash when creating index from index - My patches yesterday to unify the DWARF index base classes had a bug - -- namely, I did the wholesale dynamic_cast-to-static_cast too hastily - and introduced a crash. This can be seen by trying to add an index to - a file that has an index, or by running a test like gdb-index-cxx.exp - using the cc-with-debug-names.exp target board. - - This patch fixes the crash by introducing a new virtual method and - removing some of the static casts. - -2022-05-04 Luis Machado - - Fix build failure for aarch64 gdbserver - We're missing an argument. - -2022-05-04 Mark Wielaard - - gdb: Workaround stringop-overread warning in debuginfod-support.c on s390x - For some reason g++ 11.2.1 on s390x produces a spurious warning for - stringop-overread in debuginfod_is_enabled for url_view. Add a new - DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD macro to suppress this warning. - - include/ChangeLog: - - * diagnostics.h (DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD): New - macro. - - gdb/ChangeLog: - - * debuginfod-support.c (debuginfod_is_enabled): Use - DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD on s390x. - -2022-05-04 Pedro Alves - - Fix GDBserver Aarch64 Linux regression - Luis noticed that the recent changes to gdbserver to make it track - process and threads independently regressed a few gdb.multi/*.exp - tests for aarch64-linux. - - We started seeing the following internal error for - gdb.multi/multi-target-continue.exp for example: - - Starting program: binutils-gdb/gdb/testsuite/outputs/gdb.multi/multi-target-continue/multi-target-continue ^M - Error in re-setting breakpoint 2: Remote connection closed^M - ../../../repos/binutils-gdb/gdb/thread.c:85: internal-error: inferior_thread: Assertion `current_thread_ != nullptr' failed.^M - A problem internal to GDB has been detected,^M - further debugging may prove unreliable. - - A backtrace looks like: - - #0 thread_regcache_data (thread=thread@entry=0x0) at ../../../repos/binutils-gdb/gdbserver/inferiors.cc:120 - #1 0x0000aaaaaaabf0e8 in get_thread_regcache (thread=0x0, fetch=fetch@entry=0) at ../../../repos/binutils-gdb/gdbserver/regcache.cc:31 - #2 0x0000aaaaaaad785c in is_64bit_tdesc () at ../../../repos/binutils-gdb/gdbserver/linux-aarch64-low.cc:194 - #3 0x0000aaaaaaad8a48 in aarch64_target::sw_breakpoint_from_kind (this=, kind=4, size=0xffffffffef04) at ../../../repos/binutils-gdb/gdbserver/linux-aarch64-low.cc:3226 - #4 0x0000aaaaaaabe220 in bp_size (bp=0xaaaaaab6f3d0) at ../../../repos/binutils-gdb/gdbserver/mem-break.cc:226 - #5 check_mem_read (mem_addr=187649984471104, buf=buf@entry=0xaaaaaab625d0 "\006", mem_len=mem_len@entry=56) at ../../../repos/binutils-gdb/gdbserver/mem-break.cc:1862 - #6 0x0000aaaaaaacc660 in read_inferior_memory (memaddr=, myaddr=0xaaaaaab625d0 "\006", len=56) at ../../../repos/binutils-gdb/gdbserver/target.cc:93 - #7 0x0000aaaaaaac3d9c in gdb_read_memory (len=56, myaddr=0xaaaaaab625d0 "\006", memaddr=187649984471104) at ../../../repos/binutils-gdb/gdbserver/server.cc:1071 - #8 gdb_read_memory (memaddr=187649984471104, myaddr=0xaaaaaab625d0 "\006", len=56) at ../../../repos/binutils-gdb/gdbserver/server.cc:1048 - #9 0x0000aaaaaaac82a4 in process_serial_event () at ../../../repos/binutils-gdb/gdbserver/server.cc:4307 - #10 handle_serial_event (err=, client_data=) at ../../../repos/binutils-gdb/gdbserver/server.cc:4520 - #11 0x0000aaaaaaafbcd0 in gdb_wait_for_event (block=block@entry=1) at ../../../repos/binutils-gdb/gdbsupport/event-loop.cc:700 - #12 0x0000aaaaaaafc0b0 in gdb_wait_for_event (block=1) at ../../../repos/binutils-gdb/gdbsupport/event-loop.cc:596 - #13 gdb_do_one_event () at ../../../repos/binutils-gdb/gdbsupport/event-loop.cc:237 - #14 0x0000aaaaaaacacb0 in start_event_loop () at ../../../repos/binutils-gdb/gdbserver/server.cc:3518 - #15 captured_main (argc=4, argv=) at ../../../repos/binutils-gdb/gdbserver/server.cc:3998 - #16 0x0000aaaaaaab66dc in main (argc=, argv=) at ../../../repos/binutils-gdb/gdbserver/server.cc:4084 - - This sequence of functions is invoked due to a series of conditions: - - 1 - The probe-based breakpoint mechanism failed (for some reason) so ... - - 2 - ... gdbserver has to know what type of architecture it is dealing - with so it can pick the right breakpoint kind, so it wants to - check if we have a 64-bit target. - - 3 - To determine the size of a register, we currently fetch the - current thread's register cache, and the current thread pointer - is now nullptr. - - In #3, the current thread is nullptr because gdb_read_memory clears it - on purpose, via set_desired_process, exactly to expose code relying on - the current thread when it shouldn't. It was always possible to end - up in this situation (when the current thread exits), but it was - harder to reproduce before. - - This commit fixes it by tweaking is_64bit_tdesc to look at the current - process's tdesc instead of the current thread's tdesc. - - Note that the thread's tdesc is itself filled from the process's - tdesc, so this should be equivalent: - - struct regcache * - get_thread_regcache (struct thread_info *thread, int fetch) - { - struct regcache *regcache; - - regcache = thread_regcache_data (thread); - - ... - if (regcache == NULL) - { - struct process_info *proc = get_thread_process (thread); - - gdb_assert (proc->tdesc != NULL); - - regcache = new_register_cache (proc->tdesc); - set_thread_regcache_data (thread, regcache); - } - ... - - Change-Id: Ibc809d7345e70a2f058b522bdc5cdbdca97e2cdc - -2022-05-04 Simon Marchi - - gdb/remote: send qSymbol to all inferiors on startup - start_remote_1 calls remote_check_symbols after things are set up to - give the remote side a chance to look up symbols. One call to - remote_check_symbols sets the "general thread", if needed, and sends one - qSymbol packet. However, a remote target could have more than one - process on initial connection, and this would send a qSymbol for only - one of these processes. - - Change it to iterate on all the target's inferiors and send a qSymbol - packet for each one. - - I tested this by changing gdbserver to spawn two processes on startup: - - diff --git a/gdbserver/server.cc b/gdbserver/server.cc - index 33c42714e72..9b682e9f85f 100644 - --- a/gdbserver/server.cc - +++ b/gdbserver/server.cc - @@ -3939,6 +3939,7 @@ captured_main (int argc, char *argv[]) - - /* Wait till we are at first instruction in program. */ - target_create_inferior (program_path.get (), program_args); - + target_create_inferior (program_path.get (), program_args); - - /* We are now (hopefully) stopped at the first instruction of - the target process. This assumes that the target process was - - Instead of hacking GDBserver, it should also be possible to test this by - starting manually two inferiors on an "extended-remote" connection, - disconnecting from GDBserver (with the disconnect command), and - re-connecting. - - I was able to see qSymbol being sent for each inferior: - - [remote] Sending packet: $Hgp828dc.828dc#1f - [remote] Packet received: OK - [remote] Sending packet: $qSymbol::#5b - [remote] Packet received: qSymbol:6764625f6167656e745f6764625f74705f686561705f627566666572 - [remote] Sending packet: $qSymbol::6764625f6167656e745f6764625f74705f686561705f627566666572#1e - [remote] Packet received: qSymbol:6e70746c5f76657273696f6e - [remote] Sending packet: $qSymbol::6e70746c5f76657273696f6e#4d - [remote] Packet received: OK - [remote] Sending packet: $Hgp828dd.828dd#21 - [remote] Packet received: OK - [remote] Sending packet: $qSymbol::#5b - [remote] Packet received: qSymbol:6764625f6167656e745f6764625f74705f686561705f627566666572 - [remote] Sending packet: $qSymbol::6764625f6167656e745f6764625f74705f686561705f627566666572#1e - [remote] Packet received: qSymbol:6e70746c5f76657273696f6e - [remote] Sending packet: $qSymbol::6e70746c5f76657273696f6e#4d - [remote] Packet received: OK - - Note that there would probably be more work to be done to fully support - this scenario, more things that need to be done for each discovered - inferior instead of just for one. - - Change-Id: I21c4ecf6367391e2e389b560f0b4bd906cf6472f - -2022-05-04 Simon Marchi - - gdb/remote: iterate on pspace inferiors in remote_new_objfile - Commit 152a17495663 ("gdb: prune inferiors at end of - fetch_inferior_event, fix intermittent failure of - gdb.threads/fork-plus-threads.exp") broke some tests with the - native-gdbserver board, such as: - - (gdb) PASS: gdb.base/step-over-syscall.exp: detach-on-fork=off: follow-fork=child: break cond on target : vfork: break marker - continue^M - Continuing.^M - terminate called after throwing an instance of 'gdb_exception_error'^M - - I can manually reproduce the issue by running (just the commands that - the test does as a one liner): - - $ ./gdb -q --data-directory=data-directory \ - testsuite/outputs/gdb.base/step-over-syscall/step-over-vfork \ - -ex "tar rem | ../gdbserver/gdbserver - testsuite/outputs/gdb.base/step-over-syscall/step-over-vfork" \ - -ex "b main" \ - -ex c \ - -ex "d 1" \ - -ex "set displaced-stepping off" \ - -ex "b *0x7ffff7d7ac5a if main == 0" \ - -ex "set detach-on-fork off" \ - -ex "set follow-fork-mode child" \ - -ex c \ - -ex "inferior 1" \ - -ex "b marker" \ - -ex c - - ... where 0x7ffff7d7ac5a is the exact address of the vfork syscall - (which can be found by looking at gdb.log). - - The important part of the above is that a vfork syscall creates inferior - 2, then inferior 2 executes until exit, then we switch back to inferior - 1 and try to resume it. - - The uncaught exception happens here: - - #4 0x00005596969d81a9 in error (fmt=0x559692da9e40 "Cannot execute this command while the target is running.\nUse the \"interrupt\" command to stop the target\nand then try again.") - at /home/simark/src/binutils-gdb/gdbsupport/errors.cc:43 - #5 0x0000559695af6f66 in remote_target::putpkt_binary (this=0x617000038080, buf=0x559692da4380 "qSymbol::", cnt=9) at /home/simark/src/binutils-gdb/gdb/remote.c:9560 - #6 0x0000559695af6aaf in remote_target::putpkt (this=0x617000038080, buf=0x559692da4380 "qSymbol::") at /home/simark/src/binutils-gdb/gdb/remote.c:9518 - #7 0x0000559695ab50dc in remote_target::remote_check_symbols (this=0x617000038080) at /home/simark/src/binutils-gdb/gdb/remote.c:5141 - #8 0x0000559695b3cccf in remote_new_objfile (objfile=0x0) at /home/simark/src/binutils-gdb/gdb/remote.c:14600 - #9 0x0000559693bc52a9 in std::__invoke_impl (__f=@0x61b0000167f8: 0x559695b3cb1d ) at /usr/include/c++/11.2.0/bits/invoke.h:61 - #10 0x0000559693bb2848 in std::__invoke_r (__fn=@0x61b0000167f8: 0x559695b3cb1d ) at /usr/include/c++/11.2.0/bits/invoke.h:111 - #11 0x0000559693b8dddf in std::_Function_handler::_M_invoke(std::_Any_data const&, objfile*&&) (__functor=..., __args#0=@0x7ffe0bae0590: 0x0) at /usr/include/c++/11.2.0/bits/std_function.h:291 - #12 0x00005596956374b2 in std::function::operator()(objfile*) const (this=0x61b0000167f8, __args#0=0x0) at /usr/include/c++/11.2.0/bits/std_function.h:560 - #13 0x0000559695633c64 in gdb::observers::observable::notify (this=0x55969ef5c480 , args#0=0x0) at /home/simark/src/binutils-gdb/gdb/../gdbsupport/observable.h:150 - #14 0x0000559695df6cc2 in clear_symtab_users (add_flags=...) at /home/simark/src/binutils-gdb/gdb/symfile.c:2873 - #15 0x000055969574c263 in program_space::~program_space (this=0x6120000c8a40, __in_chrg=) at /home/simark/src/binutils-gdb/gdb/progspace.c:154 - #16 0x0000559694fc086b in delete_inferior (inf=0x61700003bf80) at /home/simark/src/binutils-gdb/gdb/inferior.c:205 - #17 0x0000559694fc341f in prune_inferiors () at /home/simark/src/binutils-gdb/gdb/inferior.c:390 - #18 0x0000559695017ada in fetch_inferior_event () at /home/simark/src/binutils-gdb/gdb/infrun.c:4293 - #19 0x0000559694f629e6 in inferior_event_handler (event_type=INF_REG_EVENT) at /home/simark/src/binutils-gdb/gdb/inf-loop.c:41 - #20 0x0000559695b3b0e3 in remote_async_serial_handler (scb=0x6250001ef100, context=0x6170000380a8) at /home/simark/src/binutils-gdb/gdb/remote.c:14466 - #21 0x0000559695c59eb7 in run_async_handler_and_reschedule (scb=0x6250001ef100) at /home/simark/src/binutils-gdb/gdb/ser-base.c:138 - #22 0x0000559695c5a42a in fd_event (error=0, context=0x6250001ef100) at /home/simark/src/binutils-gdb/gdb/ser-base.c:189 - #23 0x00005596969d9ebf in handle_file_event (file_ptr=0x60700005af40, ready_mask=1) at /home/simark/src/binutils-gdb/gdbsupport/event-loop.cc:574 - #24 0x00005596969da7fa in gdb_wait_for_event (block=0) at /home/simark/src/binutils-gdb/gdbsupport/event-loop.cc:700 - #25 0x00005596969d8539 in gdb_do_one_event () at /home/simark/src/binutils-gdb/gdbsupport/event-loop.cc:212 - - If I enable "set debug infrun" just before the last continue, we see: - - (gdb) continue - Continuing. - [infrun] clear_proceed_status_thread: 965604.965604.0 - [infrun] proceed: enter - [infrun] proceed: addr=0xffffffffffffffff, signal=GDB_SIGNAL_DEFAULT - [infrun] scoped_disable_commit_resumed: reason=proceeding - [infrun] start_step_over: enter - [infrun] start_step_over: stealing global queue of threads to step, length = 0 - [infrun] operator(): step-over queue now empty - [infrun] start_step_over: exit - [infrun] resume_1: step=0, signal=GDB_SIGNAL_0, trap_expected=0, current thread [965604.965604.0] at 0x7ffff7d7ac5c - [infrun] do_target_resume: resume_ptid=965604.0.0, step=0, sig=GDB_SIGNAL_0 - [infrun] prepare_to_wait: prepare_to_wait - [infrun] reset: reason=proceeding - [infrun] maybe_set_commit_resumed_all_targets: enabling commit-resumed for target remote - [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target remote - [infrun] proceed: exit - [infrun] fetch_inferior_event: enter - [infrun] scoped_disable_commit_resumed: reason=handling event - [infrun] do_target_wait: Found 2 inferiors, starting at #1 - [infrun] random_pending_event_thread: None found. - [infrun] print_target_wait_results: target_wait (-1.0.0 [process -1], status) = - [infrun] print_target_wait_results: 965604.965604.0 [Thread 965604.965604], - [infrun] print_target_wait_results: status->kind = VFORK_DONE - [infrun] handle_inferior_event: status->kind = VFORK_DONE - [infrun] context_switch: Switching context from 0.0.0 to 965604.965604.0 - [infrun] handle_vfork_done: not waiting for a vfork-done event - [infrun] start_step_over: enter - [infrun] start_step_over: stealing global queue of threads to step, length = 0 - [infrun] operator(): step-over queue now empty - [infrun] start_step_over: exit - [infrun] resume_1: step=0, signal=GDB_SIGNAL_0, trap_expected=0, current thread [965604.965604.0] at 0x7ffff7d7ac5c - [infrun] do_target_resume: resume_ptid=965604.0.0, step=0, sig=GDB_SIGNAL_0 - [infrun] prepare_to_wait: prepare_to_wait - [infrun] reset: reason=handling event - [infrun] maybe_set_commit_resumed_all_targets: enabling commit-resumed for target remote - [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target remote - terminate called after throwing an instance of 'gdb_exception_error' - - What happens is: - - - After doing the "continue" on inferior 1, the remote target gives us - a VFORK_DONE event. The core ignores it and resumes inferior 1. - - Since prune_inferiors is now called after each handled event, in - fetch_inferior_event, it is called after we handled that VFORK_DONE - event and resumed inferior 1. - - Inferior 2 is pruned, which (see backtrace above) causes its program - space to be deleted, which clears the symtabs for that program space, - which calls the new_objfile observable and remote_new_objfile - observer (with a nullptr objfile, to indicate that the previously - loaded symbols have been discarded), which calls - remote_check_symbols. - - remote_check_symbols is the function that sends the qSymbol packet, to - let the remote side ask for symbol addresses. The problem is that the - remote target is working in all-stop / sync mode and is currently - resumed. It has sent a vCont packet to resume the target and is waiting - for a stop reply. It can't send any packets in the mean time. That - causes the exception to be thrown. - - This wasn't a problem before, when prune_inferiors was called in - normal_stop, because it was always called at a time the target was not - resumed. - - An important observation here is that the new_objfile observable is - invoked for a change in inferior 2's program space (inferior 2's program - space is the current program space). Inferior 2 isn't bound to any - process on the remote side (it has exited, that's why it's being - pruned). It doesn't make sense to try to send a qSymbol packet for a - process that doesn't exist on the remote side. remote_check_symbols - actually attempts to avoid that: - - /* 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; - - The problem here is that while inferior 2's program space is the current - program space, inferior 1 is the current inferior. So the check above - passes, since inferior has execution. We therefore try to send a - qSymbol packet for inferior 1 in reaction to a change in inferior 2's - program space, that's wrong. - - This exposes a conceptual flaw in remote_new_objfile. The "new_objfile" - event concerns a specific program space, which can concern multiple - inferiors, as inferiors can share a program space. We shouldn't - consider the current inferior at all, but instead all inferiors bound to - the affected program space. Especially since the current inferior can - be unrelated to the current program space at that point. - - To be clear, we are in this state because ~program_space sets itself as - the current program space, but there is no more inferior having that - program space to switch to, inferior 2 has already been unlinked. - - To fix this, make remote_new_objfile iterate on all inferiors bound to - the affected program space. Remove the target_has_execution check from - remote_check_symbols, replace it with an assert. All callers must - ensure that the current inferior has execution before calling it. - - Change-Id: Ica643145bcc03115248290fd310cadab8ec8371c - -2022-05-04 Jan Beulich - - Dwarf: rename yet another instance of "index" - As before, on sufficiently old glibc this conflicts with a global - identifier in the library headers. While there also zap the unusual - padding by blanks. - -2022-05-04 Martin Liska - - LTO plugin: sync header file with GCC - include/ChangeLog: - - * plugin-api.h (enum ld_plugin_tag): Sync with GCC. - -2022-05-04 Alan Modra - - PowerPC32 treatment of absolute symbols - As already done for PowerPC64, fix dynamic relocs for absolute symbols. - The patch also tidies the dynamic reloc handling code in check_relocs, - removing leftover comments and code from when check_relocs was called - as each object file was read in. - - bfd/ - * elf32-ppc.c (ppc_elf_check_relocs): Set isym and ifunc earlier. - Rearrange tests for dynamic relocs, handling absolute symbols. - (allocate_dynrelocs): Don't allocate dynamic relocs for locally - defined absolute symbols. - (ppc_elf_size_dynamic_sections): Similarly. - (ppc_elf_relocate_section): Similarly. - ld/ - * testsuite/ld-powerpc/abs32-pie.d, - * testsuite/ld-powerpc/abs32-pie.r, - * testsuite/ld-powerpc/abs32-reloc.s, - * testsuite/ld-powerpc/abs32-shared.d, - * testsuite/ld-powerpc/abs32-shared.r, - * testsuite/ld-powerpc/abs32-static.d, - * testsuite/ld-powerpc/abs32-static.r: New tests. - * testsuite/ld-powerpc/powerpc.exp: Run them. - -2022-05-04 John Baldwin - - gdbserver: Fix build after adding tls feature to arm tdesc. - -2022-05-04 GDB Administrator - - Automatic date update in version.in - -2022-05-04 John Baldwin - - NEWS: Add a note for TLS support on FreeBSD/arm and FreeBSD/Aarch64. - - Read the tpidr register from NT_ARM_TLS on Linux. - - gdbserver: Read the tpidr register from NT_ARM_TLS on Linux. - - Read the tpidr register from NT_ARM_TLS core dump notes on Linux Aarch64. - - Fetch the NT_ARM_TLS register set for native FreeBSD/Aarch64 processes. - This permits resolving TLS variables. - - Support TLS variables on FreeBSD/Aarch64. - Derive the pointer to the DTV array from the tpidr register. - - Read the tpidr register from NT_ARM_TLS core dump notes on FreeBSD/Aarch64. - - Add an aarch64-tls feature which includes the tpidr register. - - Fetch the NT_ARM_TLS register set for native FreeBSD/arm processes. - This permits resolving TLS variables. - - Support TLS variables on FreeBSD/arm. - Derive the pointer to the DTV array from the tpidruro register. - - Read the tpidruro register from NT_ARM_TLS core dump notes on FreeBSD/arm. - - Add an arm-tls feature which includes the tpidruro register from CP15. - - fbsd-nat: Add helper routines for register sets using PT_[G]SETREGSET. - FreeBSD's kernel has recently added PT_GETREGSET and PT_SETREGSET - operations to fetch a register set named by an ELF note type. These - helper routines provide helpers to check for a register set's - existence, fetch registers for a register set, and store registers to - a register set. - -2022-05-03 H.J. Lu - - ld: Regenerate aclocal.m4 with automake 1.15.1 - * aclocal.m4: Regenerate with automake 1.15.1. - -2022-05-03 Pedro Alves - - gdbserver: track current process as well as current thread - The recent commit 421490af33bf ("gdbserver/linux: Access memory even - if threads are running") caused a regression in - gdb.threads/access-mem-running-thread-exit.exp with gdbserver, which I - somehow missed. Like so: - - (gdb) print global_var - Cannot access memory at address 0x555555558010 - (gdb) FAIL: gdb.threads/access-mem-running-thread-exit.exp: non-stop: access mem (print global_var after writing, inf=2, iter=1) - - The problem starts with GDB telling GDBserver to select a thread, via - the Hg packet, which GDBserver complies with, then that thread exits, - and GDB, without knowing the thread is gone, tries to write to memory, - through the context of the previously selected Hg thread. - - GDBserver's GDB-facing memory access routines, gdb_read_memory and - gdb_write_memory, call set_desired_thread to make GDBserver re-select - the thread that GDB has selected with the Hg packet. Since the thread - is gone, set_desired_thread returns false, and the memory access - fails. - - Now, to access memory, it doesn't really matter which thread is - selected. All we should need is the target process. Even if the - thread that GDB previously selected is gone, and GDB does not yet know - about that exit, it shouldn't matter, GDBserver should still know - which process that thread belonged to. - - Fix this by making GDBserver track the current process separately, - like GDB also does. Add a new set_desired_process routine that is - similar to set_desired_thread, but just sets the current process, - leaving the current thread as NULL. Use it in the GDB-facing memory - read and write routines, to avoid failing if the selected thread is - gone, but the process is still around. - - Change-Id: I4ff97cb6f42558efbed224b30d5c71f6112d44cd - -2022-05-03 Pedro Alves - - Fix gdb.threads/access-mem-running-thread-exit.exp w/ native-extended-gdbserver - When testing gdb.threads/access-mem-running-thread-exit.exp with - --target_board=native-extended-gdbserver, we get: - - Running gdb.threads/access-mem-running-thread-exit.exp ... - FAIL: gdb.threads/access-mem-running-thread-exit.exp: non-stop: second inferior: runto: run to main - WARNING: Timed out waiting for EOF in server after monitor exit - - === gdb Summary === - - # of expected passes 3 - # of unexpected failures 1 - # of unsupported tests 1 - - The problem is that the testcase spawns a second inferior with - -no-connection, and then runto_main does "run", which fails like so: - - (gdb) run - Don't know how to run. Try "help target". - (gdb) FAIL: gdb.threads/access-mem-running-thread-exit.exp: non-stop: second inferior: runto: run to main - - That "run" above failed because native-extended-gdbserver forces "set - auto-connect-native-target off", to prevent testcases from mistakenly - running programs with the native target, which would exactly be the - case here. - - Fix this by letting the second inferior share the first inferior's - connection everywhere except on targets that do reload on run (e.g., - --target_board=native-gdbserver). - - Change-Id: Ib57105a238cbc69c57220e71261219fa55d329ed - -2022-05-03 Andrew Burgess - - gdb: add some additional thread status debug output - While working on this patch: - - https://sourceware.org/pipermail/gdb-patches/2022-January/185109.html - - I found it really useful to print the executing/resumed status of all - threads (or all threads in a particular inferior) at various - places (e.g. when a new inferior is started, when GDB attaches, etc). - - This debug was originally part of the above patch, but I wanted to - rewrite this as a separate patch and move the code into a new function - in infrun.h, which is what this patch does. - - Unless 'set debug infrun on' is in effect, then there should be no - user visible changes after this commit. - -2022-05-03 Nick Clifton - - Add a linker warning when creating potentially dangerous executable segments. Add tests, options to disabke and configure switches to choose defaults. - - Fix potential arithmetic overflow in the linker's plugin handling code. - PR 29101 - * libdep_plugin.c (get_libdeps): Check for overflow when computing - amount of memory to allocate. - -2022-05-03 Andrew Burgess - - objdump: fix styled printing of addresses - Previous work to add styled disassembler output missed a case in - objdump_print_addr, which is fixed in this commit. - -2022-05-03 Andrew Burgess - - gdb/testsuite: small cleanup in mi-break-qualified.exp - It is not necessary to pass an empty string to mi_gdb_start, passing - the empty string is equivalent to passing no arguments, which is what - we do everywhere else (that we don't need to specify an actual - argument). - - The only place we use 'mi_gdb_start ""' is in - gdb.mi/mi-break-qualified.exp, so in this commit I just replace that - with a call to 'mi_gdb_start' - just for consistency. - - There should be no change in what is tested after this commit. - -2022-05-03 Andrew Burgess - - gdb/testsuite: change mi_gdb_start to take a list of flags - After this previous commit I was thinking about the API of - mi_gdb_start. I felt that the idea of passing flags as separate - arguments and using 'args' to gather these into a list, though clever, - was not an intuitive API. - - In this commit I modify mi_gdb_start so that it expects a single - argument, which should be a list of flags. Thus, where we previously - would have said: - - mi_gdb_start separate-mi-tty separate-inferior-tty - - We would now say: - - mi_gdb_start { separate-mi-tty separate-inferior-tty } - - However, it turns out we never actually call mi_gdb_start passing two - arguments in this way at all. We do in some places do this: - - mi_gdb_start separate-inferior-tty - - But that's fine, a single string like this works equally well as a - single item list, so this will not need updating. - - There is also one place where we do this: - - eval mi_gdb_start $start_ops - - where $start_ops is a list that might contains 0, 1, or 2 items. The - eval here is used to expand the $start_ops list so mi_gdb_start sees - the list contents as separate arguments. In this case we just need to - drop the use of eval. - - I think that the new API is more intuitive, but others might - disagree, in which case I can drop this change. - - There should be no change in what is tested after this commit. - -2022-05-03 Andrew Burgess - - gdb/testsuite: fix mi-exec-run.exp with native-extended-gdbserver board - When running with the native-extended-gdbserver board, I currently see - one failure in gdb.mi/mi-exec-run.exp: - - FAIL: gdb.mi/mi-exec-run.exp: inferior-tty=separate: mi=separate: force-fail=0: breakpoint hit reported on console (timeout) - - In this test the MI interface should be started in a separate tty, - which means we should have a CLI tty and an MI tty, however, this is - not happening. Instead GDB is just started in MI mode and there is no - CLI tty. - - The test script tries to switch between the CLI an MI terminals and - look for some expected output on each, however, as there is no CLI - terminal the expected output never arrives, and the test times out. - - It turns out that this is not a GDB problem, rather, this is an issue - with argument passing within the test script. - - The proc default_mi_gdb_start expects to take a set of flags (strings) - as arguments, each of flag is expected to be a separate argument. The - default_mi_gdb_start proc collects all its arguments into a list using - the special 'args' parameter name, and then iterates over this list to - see which flags were passed. - - In mi_gdb_start, which forwards to default_mi_gdb_start, the arguments - are also gathered into the 'args' parameter list, but are then - expanded back to be separate arguments using the eval trick, i.e.: - - proc mi_gdb_start { args } { - return [eval default_mi_gdb_start $args] - } - - This ensures that when we arrive in default_mi_gdb_start each flag is - a separate argument, rather than appearing as a single list containing - all arguments. - - When using the native-extended-gdbserver board however, the file - boards/native-extended-gdbserver.exp is loaded, and this file replaces - the default mi_gdb_start with its own version. - - This new mi_gdb_start also gathers the arguments into an 'args' list, - but forgets to expand the arguments out using the eval trick. - - As a result, when using the native-extended-gdbserver board, by the - time we get to default_mi_gdb_start, we end up with the args list - containing a single item, which is a list containing all the arguments - the user passed. - - What this means is that if the user passes two arguments, then, in - default_mi_gdb_start, instead of seeing two separate arguments, we see - a single argument made by concatenating the two arguments together. - - The only place this is a problem is in the test mi-exec-run.exp, - which (as far as I can see) is the only test where we might try to - pass both arguments at the same time. Currently we think we passed - both arguments to mi_gdb_start, but mi_gdb_start behaves as if no - arguments were passed. - - This commit fixes the problem by making use of the eval trick within - the native-extended-gdbserver version of mi_gdb_start. After this, - the FAIL listed at the top of this message is resolved. - -2022-05-03 Andrew Burgess - - gdb: fix failures in gdb.mi/mi-exec-run.exp with native-extended-gdbserver - When running the gdb.mi/mi-exec-run.exp test using the - native-extended-gdbserver I see failures like this: - - FAIL: gdb.mi/mi-exec-run.exp: inferior-tty=main: mi=main: force-fail=1: run failure detected - FAIL: gdb.mi/mi-exec-run.exp: inferior-tty=main: mi=separate: force-fail=1: run failure detected - FAIL: gdb.mi/mi-exec-run.exp: inferior-tty=separate: mi=separate: force-fail=1: run failure detected - - There's a race condition here, so you might see a slightly different - set of failures, but I always see some from the 'run failure detected' - test. - - NOTE: I also see an additional test failure: - - FAIL: gdb.mi/mi-exec-run.exp: inferior-tty=separate: mi=separate: force-fail=0: breakpoint hit reported on console (timeout) - - but that is a completely different issue, and is not being addressed - in this commit. - - The problem for the 'run failure detected' test is that we end up - in gdb_expect looking for output from two spawn-ids, one from - gdbserver, and one from gdb. We're looking for one output pattern - from each spawn-id, and for the test to pass we need to see both - patterns. - - Now, if gdb exits then this is a test failure (this would indicate gdb - crashing, which is bad), so we have an eof pattern associated with - the gdb spawn-id. - - However, in this particular test we expect gdbserver to fail to - execute the binary (the test binary is set non-executable), and so we - get an error message from gdbserver (which matches the pattern), and - then gdbserver exits, this is expected. - - The problem is that after spotting the pattern from gdbserver, we - often see the eof from gdbserver before we see the pattern from gdb. - If this happens then we drop out of the gdb_expect without ever seeing - the pattern from gdb, and fail the test. - - In this commit, I place the spawn-id of gdbserver into a global - variable, and then use this global variable as the -i option within - the gdb_expect. - - Now, once we have seen the expected pattern on the gdbserver spawn-id, - the global variable is cleared. After this the gdb_expect no longer - checks the gdbserver spawn-id for additional output, and so never sees - the eof event. This leaves the gdb_expect running, which allows the - pattern from gdb to be seen, and for the test to pass. - - I now see no failures relating to 'run failure detected'. - -2022-05-03 GDB Administrator - - Automatic date update in version.in - -2022-05-02 Tom de Vries - - [gdb/testsuite] Fix gdb.cp/align.exp with gcc 12.1 / 11.3 - Starting with gcc 12.1 / gcc 11.3, for test-case gdb.cp/align.exp we run into: - ... - align.cc:29:23: error: invalid application of 'alignof' to a void type^M - 29 | unsigned a_void = alignof (void);^M - | ^~~~~~~~~~~~~~^M - ... - - Fix this by using __alignof__ instead. - - Tested on x86_64-linux, with gcc 7.5.0, gcc 12.1 and clang 12.0.1. - -2022-05-02 Aaron Merey - - gdb/debuginfod: Whitespace-only URL should disable debuginfod - Currently debuginfod is disabled when the string of server URLs - is unset or set to be the empty string (via the $DEBUGINFOD_URLS - environment variable or the 'set debuginfod urls' gdb command). - - Extend this functionality so that a whitespace-only URL also disables - debuginfod. - - Modify a testcase to verify that a whitespace-only URL disables - debuginfod. - -2022-05-02 Simon Marchi - - gdb: remove type_wanted parameter from a few functions - The type_wanted value, passed down to the create_sals_from_location - callback, is never used. Remove it. - - Change-Id: Ic363ee13f6af593a3e875ff7fe46de130cdc190c - -2022-05-02 Simon Marchi - - gnulib: update to bd11400942d6 - Update the gnulib import to fixes these issues: - - - GDB build with clang + glibc < 2.33. - - https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=d6a07b4dc21b3118727743142c678858df442853 - https://lists.gnu.org/archive/html/bug-gnulib/2022-04/msg00072.html - - With glibc < 2.33, gnulib (since relatively recently) enables a - replacement for free (see gnulib/import/m4/free.m4). In that path, - clang shows this error: - - make[2]: Entering directory '/home/smarchi/build/binutils-gdb-clang/gdbsupport' - CXX agent.o - In file included from /home/smarchi/src/binutils-gdb/gdbsupport/agent.cc:20: - In file included from /home/smarchi/src/binutils-gdb/gdbsupport/common-defs.h:95: - ../gnulib/import/string.h:636:19: error: exception specification in declaration does not match previous declaration - _GL_EXTERN_C void free (void *) throw (); - ^ - ../gnulib/import/stdlib.h:737:17: note: expanded from macro 'free' - # define free rpl_free - ^ - ../gnulib/import/stdlib.h:739:1: note: previous declaration is here - _GL_FUNCDECL_RPL (free, void, (void *ptr)); - ^ - ../gnulib/import/sys/select.h:251:23: note: expanded from macro '_GL_FUNCDECL_RPL' - _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) - ^ - :139:1: note: expanded from here - rpl_free - ^ - - The gnulib commit mentioned fixes the exception specification of `free`. - - - GDB build on RHEL 7: - - CC libgnu_a-openat-proc.o - In file included from /usr/include/string.h:633, - from ./string.h:41, - from ../../../binutils-gdb/gnulib/import/openat-proc.c:30: - ./string.h:1105:1: error: expected identifier or '(' before '__extension__' - 1105 | _GL_FUNCDECL_SYS (strndup, char *, - | ^~~~~~~~~~~~~~~~ - - https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=84863a1c4dc8cca8fb0f6f670f67779cdd2d543b - https://lists.gnu.org/archive/html/bug-gnulib/2022-04/msg00075.html - - Change-Id: Ibd51302feece6f385d0c53e0d08921b5d95e2776 - -2022-05-02 Tom Tromey - - Fix Ada catchpoint regression - The breakpoint C++-ification series introduced a regression for Ada - catchpoints. Specifically, commit 2b5ab5b8 ("Convert base breakpoints - to vtable ops") caused these to start failing. I didn't notice this - because testing Ada using a Linux distro compiler requires installing - the GNAT debuginfo, which I hadn't done. - - This patch fixes the problem. I'm checking it in. - -2022-05-02 GDB Administrator - - Automatic date update in version.in - -2022-05-01 Tom de Vries - - [gdb/testsuite] Fix gdb.multi/attach-no-multi-process.exp with check-readmore - When running test-case gdb.multi/attach-no-multi-process.exp with - check-readmore, I get: - ... - (gdb) attach 13411^M - Attaching to Remote target^M - No unwaited-for children left.^M - (gdb) Reading symbols from attach-no-multi-process...^M - Reading symbols from /lib64/libm.so.6...^M - (No debugging symbols found in /lib64/libm.so.6)^M - Reading symbols from /lib64/libc.so.6...^M - (No debugging symbols found in /lib64/libc.so.6)^M - Reading symbols from /lib64/ld-linux-x86-64.so.2...^M - (No debugging symbols found in /lib64/ld-linux-x86-64.so.2)^M - 0x00007f5df1fffc8a in clock_nanosleep@GLIBC_2.2.5 () from /lib64/libc.so.6^M - FAIL: gdb.multi/attach-no-multi-process.exp: target_non_stop=off: \ - attach to the program via remote (timeout) - ... - - The problem is that the attach output is matched using gdb_test, which uses - the '$gdb_prompt $' regexp, and this does not handle the case that '(gdb) ' is - not the last available output. - - Fix this by using a gdb_test_multiple instead with a '$gdb_prompt ' regexp, so - without the '$' anchor. - - Tested on x86_64-linux with native, check-read1 and check-readmore. - -2022-05-01 GDB Administrator - - Automatic date update in version.in - -2022-04-30 Thomas Hebb - - opcodes: don't assume ELF in riscv, csky, rl78, mep disassemblers - Currently, the get_disassembler() implementations for riscv, csky, and - rl78--and mep_print_insn() for mep--access ELF variants of union fields - without first checking that the bfd actually represents an ELF. This - causes undefined behavior and crashes when disassembling non-ELF files - (the "binary" BFD, for example). Fix that. - -2022-04-30 GDB Administrator - - Automatic date update in version.in - -2022-04-29 Tom Tromey - - Remove create_breakpoints_sal_default - create_breakpoints_sal_default is just a simple wrapper, so remove it. - - Remove allocate_bp_location - allocate_bp_location is just a small wrapper for a method call, so - inline it everywhere. - - Constify breakpoint_ops - Now that all breakpoint_ops are statically initialized, they can all - be made const. - - Remove breakpoint ops initialization - initialize_breakpoint_ops does not do much any more, so remove it in - favor of statically-initialize objects. - - Remove vtable_breakpoint_ops - There's no need to have vtable_breakpoint_ops any more, so remove it - in favor of base_breakpoint_ops. - - Remove most fields from breakpoint_ops - At this point, all implementations of breakpoints use the vtable. So, - we can now remove most function pointers from breakpoint_ops and - switch to using methods directly in the callers. Only the two "static - virtual" methods remain in breakpoint_ops. - - Remove breakpoint_ops from init_catchpoint - init_catchpoint is only ever passed a single breakpoint_ops pointer, - so remove the parameter. - - Remove breakpoint_ops from init_ada_exception_breakpoint - init_ada_exception_breakpoint is only ever passed a single - breakpoint_ops structure, so remove the parameter. - -2022-04-29 Tom Tromey - - Merge probe and ordinary tracepoints - Right now, probe tracepoints are handled by a separate ops object. - However, they differ only in a small way from ordinary tracepoints, - and furthermore can be distinguished by their event location. - - This patch merges the two cases, just as was done for breakpoints. - -2022-04-29 Tom Tromey - - Merge probe and ordinary breakpoints - Right now, probe breakpoints are handled by a separate ops object. - However, they differ only in a small way from ordinary breakpoints, - and furthermore can be distinguished by their "probe" object. - - This patch merges the two cases. This avoids having to introduce a - new bp_ constant (which can be quite subtle to do correctly) and a new - subclass. - -2022-04-29 Tom Tromey - - Remove bkpt_base_breakpoint_ops - An earlier patch removed the last use of bkpt_base_breakpoint_ops, so - remove the object entirely. - - Convert static marker tracepoints to vtable ops - This converts static marker tracepoints to use vtable_breakpoint_ops. - - Add bp_static_marker_tracepoint - Because the actual construction of a breakpoint is buried deep in - create_breakpoint, at present it's necessary to have a new bp_ - enumerator constant any time a new subclass is needed. Static marker - tracepoints are one such case, so this patch introduces - bp_static_marker_tracepoint and updates various spots to recognize it. - - Convert ranged breakpoints to vtable ops - This converts ranged breakpoints to use vtable_breakpoint_ops. This - requires introducing a new ranged_breakpoint type, but this is - relatively simple because ranged breakpoints can only be created by - break_range_command. - - Convert dprintf to vtable ops - This converts dprintf to use vtable_breakpoint_ops. - - Convert Ada catchpoints to vtable ops - This converts Ada catchpoints to use vtable_breakpoint_ops. - - Convert ordinary breakpoints to vtable ops - This converts "ordinary" breakpoint to use vtable_breakpoint_ops. - Recall that an ordinary breakpoint is both the kind normally created - by users, and also a base class used by other classes. - - Change inheritance of dprintf - The dprintf breakpoint ops is mostly a copy of bpkt_breakpoint_ops, - except it's written out explicitly -- and, importantly, there's - nothing that bpkt_breakpoint_ops overrides that dprintf does not. - This changes dprintf to simply inherit directly, and updates struct - dprintf_breakpoint to reflect the change as well. - - Convert momentary breakpoints to vtable ops - This converts momentary breakpoints to use vtable_breakpoint_ops. - - Convert internal breakpoints to vtable ops - This converts internal breakpoints to use vtable_breakpoint_ops. - - Convert break-catch-throw to vtable ops - This converts break-catch-throw.c to use vtable_breakpoint_ops. - - Convert base breakpoints to vtable ops - This converts base breakpoints to use vtable_breakpoint_ops. - -2022-04-29 Tom Tromey - - Add some new subclasses of breakpoint - This adds a few new subclasses of breakpoint. The inheritance - hierarchy is chosen to reflect what's already present in - initialize_breakpoint_ops -- it mirrors the way that the _ops - structures are filled in. - - This patch also changes new_breakpoint_from_type to create the correct - sublcass based on bptype. This is important due to the somewhat - inverted way in which create_breakpoint works; and in particular later - patches will change some of these entries. - -2022-04-29 Tom Tromey - - Convert tracepoints to vtable ops - This converts tracepoints to use vtable_breakpoint_ops. - - Convert watchpoints to vtable ops - This converts watchpoints and masked watchpoints. to use - vtable_breakpoint_ops. For masked watchpoints, a new subclass must be - introduced, and watch_command_1 is changed to create one. - - Convert break-catch-load to vtable ops - This converts break-catch-load.c to use vtable_breakpoint_ops. - - Convert break-catch-fork to vtable ops - This converts break-catch-fork.c to use vtable_breakpoint_ops. - - Convert break-catch-exec to vtable ops - This converts break-catch-exec.c to use vtable_breakpoint_ops. - - Convert break-catch-syscall to vtable ops - This converts break-catch-syscall.c to use vtable_breakpoint_ops. - - Convert break-catch-sig to use vtable ops - This converts break-catch-sig.c to use vtable_breakpoint_ops. - -2022-04-29 Tom Tromey - - Add a vtable-based breakpoint ops - This adds methods to struct breakpoint. Each method has a similar - signature to a corresponding function in breakpoint_ops, with the - exceptions of create_sals_from_location and create_breakpoints_sal, - which can't be virtual methods on breakpoint -- they are only used - during the construction of breakpoints. - - Then, this adds a new vtable_breakpoint_ops structure and populates it - with functions that simply forward a call from breakpoint_ops to the - corresponding virtual method. These are all done with lambdas, - because they are just a stepping stone -- by the end of the series, - this structure will be deleted. - -2022-04-29 Tom Tromey - - Return bool from breakpoint_ops::print_one - This changes breakpoint_ops::print_one to return bool, and updates all - the implementations and the caller. The caller is changed so that a - NULL check is no longer needed -- something that will be impossible - with a real method. - - Delete some unnecessary wrapper functions - This patch deletes a few unnecessary wrapper functions from - breakpoint.c. - - Add an assertion to clone_momentary_breakpoint - This adds an assertion to clone_momentary_breakpoint. This will - eventually be removed, but in the meantime is is useful for helping - convince oneself that momentary breakpoints will always use - momentary_breakpoint_ops. This understanding will help when cleaning - up the code later. - - Boolify print_solib_event - Change print_solib_event to accept a bool parameter and update the - callers. - - Move "catch load" to a new file - The "catch load" code is reasonably self-contained, and so this patch - moves it out of breakpoint.c and into a new file, break-catch-load.c. - One function from breakpoint.c, print_solib_event, now has to be - exposed, but this seems pretty reasonable. - -2022-04-29 Vladimir Mezentsev - - gprofng: assertion in gprofng/src/Expression.cc:139 - gprofng/ChangeLog - 2022-04-28 Vladimir Mezentsev - - PR gprofng/29102 - * src/Expression.h: Remove fixupValues. - * src/Expression.cc (Expression::copy): Fix a bug. - -2022-04-29 Tom Tromey - - De-duplicate .gdb_index - This de-duplicates variables and types in .gdb_index, making the new - index closer to what gdb generated before the new DWARF scanner - series. Spot-checking the resulting index for gdb itself, it seems - that the new scanner picks up some extra symbols not detected by the - old one. I tested both the new and old versions of gdb on both new - and old versions of the index, and startup time in all cases is - roughly the same (it's worth noting that, for gdb itself, the index no - longer provides any benefit over the DWARF scanner). So, I think this - fixes the size issue with the new index writer. - - Regression tested on x86-64 Fedora 34. - -2022-04-29 Tom Tromey - - Fix .debug_names regression with new indexer - At AdaCore, we run the internal gdb test suite in several modes, - including one using the .debug_names index. This caught a regression - caused by the new DWARF indexer. - - First, the psymtabs-based .debug_names generator was completely wrong. - However, to avoid making the rewrite series even bigger (fixing the - writer will also require rewriting the .debug_names reader), it - attempted to preserve the weirdness. - - However, this was not done properly. For example the old writer did - this: - - - case STRUCT_DOMAIN: - - return DW_TAG_structure_type; - - The new code, instead, simply preserves the actual DWARF tag -- but - this makes future lookups fail, because the .debug_names reader only - looks for DW_TAG_structure_type. - - This patch attempts to revert to the old behavior in the writer. - -2022-04-29 Simon Marchi - - gdb/infrun: make fetch_inferior_event restore thread if exited or signalled - Commit 152a1749566 ("gdb: prune inferiors at end of - fetch_inferior_event, fix intermittent failure of - gdb.threads/fork-plus-threads.exp") introduced some follow-fork-related - test failures, such as: - - info inferiors^M - Num Description Connection Executable ^M - * 1 process 634972 1 (native) /home/simark/build/binutils-gdb-one-target/gdb/testsuite/outputs/gdb.base/foll-fork/foll-fork ^M - 2 process 634975 1 (native) /home/simark/build/binutils-gdb-one-target/gdb/testsuite/outputs/gdb.base/foll-fork/foll-fork ^M - (gdb) PASS: gdb.base/foll-fork.exp: follow-fork-mode=parent: detach-on-fork=off: cmd=next 2: test_follow_fork: info inferiors - inferior 2^M - [Switching to inferior 2 [process 634975] (/home/simark/build/binutils-gdb-one-target/gdb/testsuite/outputs/gdb.base/foll-fork/foll-fork)]^M - [Switching to thread 2.1 (Thread 0x7ffff7c9a740 (LWP 634975))]^M - #0 0x00007ffff7d7abf7 in _Fork () from /usr/lib/libc.so.6^M - (gdb) PASS: gdb.base/foll-fork.exp: follow-fork-mode=parent: detach-on-fork=off: cmd=next 2: test_follow_fork: inferior 2 - continue^M - Continuing.^M - [Inferior 2 (process 634975) exited normally]^M - [Switching to Thread 0x7ffff7c9a740 (LWP 634972)]^M - (gdb) PASS: gdb.base/foll-fork.exp: follow-fork-mode=parent: detach-on-fork=off: cmd=next 2: test_follow_fork: continue until exit at continue unfollowed inferior to end - break callee^M - Breakpoint 2 at 0x555555555160: file /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/foll-fork.c, line 9.^M - (gdb) FAIL: gdb.base/foll-fork.exp: follow-fork-mode=parent: detach-on-fork=off: cmd=next 2: test_follow_fork: break callee - - What happens here is: - - - inferior 2 is selected - - we continue, leading to inferior 2's exit - - we set breakpoint, expect 2 locations, but only one location is - resolved - - Reading between the lines, we understand that inferior 2 got pruned, - when it shouldn't have been. - - The issue can be reproduced by hand with: - - $ ./gdb -q --data-directory=data-directory testsuite/outputs/gdb.base/foll-fork/foll-fork -ex "set detach-on-fork off" -ex start -ex "next 2" -ex "inferior 2" -ex "set debug infrun" - ... - Temporary breakpoint 1, main () at /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/foll-fork.c:14 - 14 int v = 5; - [New inferior 2 (process 637627)] - [Thread debugging using libthread_db enabled] - Using host libthread_db library "/usr/lib/../lib/libthread_db.so.1". - 17 if (pid == 0) /* set breakpoint here */ - [Switching to inferior 2 [process 637627] (/home/simark/build/binutils-gdb-one-target/gdb/testsuite/outputs/gdb.base/foll-fork/foll-fork)] - [Switching to thread 2.1 (Thread 0x7ffff7c9a740 (LWP 637627))] - #0 0x00007ffff7d7abf7 in _Fork () from /usr/lib/libc.so.6 - (gdb) continue - Continuing. - [infrun] clear_proceed_status_thread: 637627.637627.0 - [infrun] proceed: enter - [infrun] proceed: addr=0xffffffffffffffff, signal=GDB_SIGNAL_DEFAULT - [infrun] scoped_disable_commit_resumed: reason=proceeding - [infrun] start_step_over: enter - [infrun] start_step_over: stealing global queue of threads to step, length = 0 - [infrun] operator(): step-over queue now empty - [infrun] start_step_over: exit - [infrun] proceed: start: resuming threads, all-stop-on-top-of-non-stop - [infrun] proceed: resuming 637627.637627.0 - [infrun] resume_1: step=0, signal=GDB_SIGNAL_0, trap_expected=0, current thread [637627.637627.0] at 0x7ffff7d7abf7 - [infrun] do_target_resume: resume_ptid=637627.637627.0, step=0, sig=GDB_SIGNAL_0 - [infrun] infrun_async: enable=1 - [infrun] prepare_to_wait: prepare_to_wait - [infrun] proceed: end: resuming threads, all-stop-on-top-of-non-stop - [infrun] reset: reason=proceeding - [infrun] maybe_set_commit_resumed_all_targets: enabling commit-resumed for target native - [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target native - [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target native - [infrun] proceed: exit - [infrun] fetch_inferior_event: enter - [infrun] scoped_disable_commit_resumed: reason=handling event - [infrun] do_target_wait: Found 2 inferiors, starting at #1 - [infrun] random_pending_event_thread: None found. - [infrun] print_target_wait_results: target_wait (-1.0.0 [process -1], status) = - [infrun] print_target_wait_results: 637627.637627.0 [process 637627], - [infrun] print_target_wait_results: status->kind = EXITED, exit_status = 0 - [infrun] handle_inferior_event: status->kind = EXITED, exit_status = 0 - [Inferior 2 (process 637627) exited normally] - [infrun] stop_waiting: stop_waiting - [infrun] stop_all_threads: start: reason=presenting stop to user in all-stop, inf=-1 - [infrun] stop_all_threads: pass=0, iterations=0 - [infrun] stop_all_threads: 637624.637624.0 not executing - [infrun] stop_all_threads: pass=1, iterations=1 - [infrun] stop_all_threads: 637624.637624.0 not executing - [infrun] stop_all_threads: done - [infrun] stop_all_threads: end: reason=presenting stop to user in all-stop, inf=-1 - [Switching to Thread 0x7ffff7c9a740 (LWP 637624)] - [infrun] infrun_async: enable=0 - [infrun] reset: reason=handling event - [infrun] maybe_set_commit_resumed_all_targets: not requesting commit-resumed for target native, no resumed threads - (gdb) [infrun] fetch_inferior_event: exit - (gdb) info inferiors - Num Description Connection Executable - * 1 process 637624 1 (native) /home/simark/build/binutils-gdb-one-target/gdb/testsuite/outputs/gdb.base/foll-fork/foll-fork - (gdb) i th - Id Target Id Frame - * 1 Thread 0x7ffff7c9a740 (LWP 637624) "foll-fork" main () at /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/foll-fork.c:17 - - After handling the EXITED event for inferior 2, inferior 2 should have - stayed the current inferior, which should have prevented it from getting - pruned. When debugging, we find that when getting at the - prune_inferiors call, the current inferior is inferior 1. Further - debugging shows that prior to the call to - clean_up_just_stopped_threads_fsms, the current inferior is inferior 2, - and after, it's inferior 1. Then, back in fetch_inferior_event, the - restore_thread object is disabled, due to: - - /* If we got a TARGET_WAITKIND_NO_RESUMED event, then the - previously selected thread is gone. We have two - choices - switch to no thread selected, or restore the - previously selected thread (now exited). We chose the - later, just because that's what GDB used to do. After - this, "info threads" says "The current thread has terminated." instead of "No thread - selected.". */ - if (!non_stop - && cmd_done - && ecs->ws.kind () != TARGET_WAITKIND_NO_RESUMED) - restore_thread.dont_restore (); - - So in the end, inferior 1 stays current, and inferior 2 gets wrongfully - pruned. - - I'd say clean_up_just_stopped_threads_fsms is the culprit here. It - actually attempts to restore the event_thread to be current at the end, - after the loop (I presume the current thread on entry is always supposed - to be the event thread). But in this case, the event is of kind EXITED, - and ecs->event_thread is not set, so the current inferior isn't - restored. - - Fix that by using scoped_restore_current_thread. If there is no current - thread, scoped_restore_current_thread will still restore the current - inferior, and that's what we want. - - Random note: the thread_info object for inferior 2's thread is never - freed. It is held (by refcount) by the restore_thread object in - fetch_inferior_event, while the inferior's thread list gets cleared, in - the exit event processing. When the refcount reaches 0 (when the - restore_thread object is destroyed), there's nothing that actually - deletes the thread_info object. And I think that nothing in GDB points - to it anymore, so it leaks. I don't want to fix that in this patch, but - thought it would be good to mention it, in case somebody has an idea for - how to fix that. - - Change-Id: Ibc7df543e2c46aad5f3b9250b28c3fb5912be4e8 - -2022-04-29 Pedro Alves - - Slightly tweak and clarify target_resume's interface - The current target_resume interface is a bit odd & non-intuitive. - I've found myself explaining it a couple times the recent past, while - reviewing patches that assumed STEP/SIGNAL always applied to the - passed in PTID. It goes like this today: - - - if the passed in PTID is a thread, then the step/signal request is - for that thread. - - - otherwise, if PTID is a wildcard (all threads or all threads of - process), the step/signal request is for inferior_ptid, and PTID - indicates which set of threads run free. - - Because GDB always switches the current thread to "leader" thread - being resumed/stepped/signalled, we can simplify this a bit to: - - - step/signal are always for inferior_ptid. - - - PTID indicates the set of threads that run free. - - Still not ideal, but it's a minimal change and at least there are no - special cases this way. - - That's what this patch does. It renames the PTID parameter to - SCOPE_PTID, adds some assertions to target_resume, and tweaks - target_resume's description. In addition, it also renames PTID to - SCOPE_PTID in the remote and linux-nat targets, and simplifies their - implementation a little bit. Other targets could do the same, but - they don't have to. - - Change-Id: I02a2ec2ab3a3e9b191de1e9a84f55c17cab7daaf - -2022-04-29 GDB Administrator - - Automatic date update in version.in - -2022-04-28 Tom Tromey - - Fix libinproctrace.so build on PPC - The recent gnulib import caused a build failure of libinproctrace.so - on PPC: - - alloc.c:(.text+0x20): undefined reference to `rpl_malloc' - alloc.c:(.text+0x70): undefined reference to `rpl_realloc' - - This patch fixes the problem using the same workaround that was - previously used for free. - -2022-04-28 H.J. Lu - - x86: Properly handle function pointer reference - Update - - commit ebb191adac4ab45498dec0bfaac62f0a33537ba4 - Author: H.J. Lu - Date: Wed Feb 9 15:51:22 2022 -0800 - - x86: Disallow invalid relocation against protected symbol - - to allow function pointer reference and make sure that PLT entry isn't - used for function reference due to function pointer reference. - - bfd/ - - PR ld/29087 - * elf32-i386.c (elf_i386_scan_relocs): Don't set - pointer_equality_needed nor check non-canonical reference for - function pointer reference. - * elf64-x86-64.c (elf_x86_64_scan_relocs): Likewise. - - ld/ - - PR ld/29087 - * testsuite/ld-x86-64/x86-64.exp: Run PR ld/29087 tests. - * testsuite/ld-x86-64/protected-func-3.c: New file. - -2022-04-28 Tom Tromey - - Check OBJF_NOT_FILENAME in DWARF index code - The DWARF index code currently uses 'stat' to see if an objfile - represents a real file. However, I think it's more correct to check - OBJF_NOT_FILENAME instead. - - Regression tested on x86-64 Fedora 34. - -2022-04-28 Tom Tromey - - Remove "typedef enum ..." - I noticed a few spots in GDB that use "typedef enum". However, in C++ - this isn't as useful, as the tag is automatically entered as a - typedef. This patch removes most uses of "typedef enum" -- the - exceptions being in some nat-* code I can't compile, and - glibc_thread_db.h, which I think is more or less a copy of some C code - from elsewhere. - - Tested by rebuilding. - -2022-04-28 Andrew Burgess - - gdb: fix nullptr dereference in block::ranges() - This commit: - - commit f5cb8afdd297dd68273d98a10fbfd350dff918d8 - Date: Sun Feb 6 22:27:53 2022 -0500 - - gdb: remove BLOCK_RANGES macro - - introduces a potential nullptr dereference in block::ranges, this is - breaking most tests, e.g. gdb.base/break.exp is failing for me. - - In the above patch BLOCK_CONTIGUOUS_P is changed from this: - - #define BLOCK_CONTIGUOUS_P(bl) (BLOCK_RANGES (bl) == nullptr \ - || BLOCK_NRANGES (bl) <= 1) - - to this: - - #define BLOCK_CONTIGUOUS_P(bl) ((bl)->ranges ().size () == 0 \ - || (bl)->ranges ().size () == 1) - - So, before the commit we checked for the block ranges being nullptr, - but afterwards we just call block::ranges() in all cases. - - The problem is that block::ranges() looks like this: - - /* Return a view on this block's ranges. */ - gdb::array_view ranges () - { return gdb::make_array_view (m_ranges->range, m_ranges->nranges); } - - where m_ranges is: - - struct blockranges *m_ranges; - - And so, we see that the nullptr check has been lost, and we might end - up dereferencing a nullptr. - - My proposed fix is to move the nullptr check into block::ranges, and - return an explicit empty array_view if m_ranges is nullptr. - - After this, everything seems fine again. - -2022-04-28 Stefan Liebler - - s390: Add DT_JMPREL pointing to .rela.[i]plt with static-pie - 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. - - bfd/ - elf64-s390.c (elf_s390_size_dynamic_sections): - Enforce DT_JMPREL via htab->elf.dt_jmprel_required. - -2022-04-28 Stefan Liebler - - s390: Avoid dynamic TLS relocs in PIE - No dynamic relocs are needed for TLS defined in an executable, the - TP relative offset is known at link time. - - Fixes - FAIL: Build pr22263-1 - - bfd/ - PR ld/22263 - * elf64-s390.c (elf_s390_tls_transition): Use bfd_link_dll - instead of bfd_link_pic for TLS. - (elf_s390_check_relocs): Likewise. - (allocate_dynrelocs): Likewise. - (elf_s390_relocate_section): Likewise. - -2022-04-28 Nick Alcock - - libctf: impose an ordering on conflicting types - When two types conflict and they are not types which can have forwards - (say, two arrays of different sizes with the same name in two different - TUs) the CTF deduplicator uses a popularity contest to decide what to - do: the type cited by the most other types ends up put into the shared - dict, while the others are relegated to per-CU child dicts. - - This works well as long as one type *is* most popular -- but what if - there is a tie? If several types have the same popularity count, - we end up picking the first we run across and promoting it, and - unfortunately since we are working over a dynhash in essentially - arbitrary order, this means we promote a random one. So multiple - runs of ld with the same inputs can produce different outputs! - All the outputs are valid, but this is still undesirable. - - Adjust things to use the same strategy used to sort types on the output: - when there is a tie, always put the type that appears in a CU that - appeared earlier on the link line (and if there is somehow still a tie, - which should be impossible, pick the type with the lowest type ID). - - Add a testcase -- and since this emerged when trying out extern arrays, - check that those work as well (this requires a newer GCC, but since all - GCCs that can emit CTF at all are unreleased this is probably OK as - well). - - Fix up one testcase that has slight type ordering changes as a result - of this change. - - libctf/ChangeLog: - - * ctf-dedup.c (ctf_dedup_detect_name_ambiguity): Use - cd_output_first_gid to break ties. - - ld/ChangeLog: - - * testsuite/ld-ctf/array-conflicted-ordering.d: New test, using... - * testsuite/ld-ctf/array-char-conflicting-1.c: ... this... - * testsuite/ld-ctf/array-char-conflicting-2.c: ... and this. - * testsuite/ld-ctf/array-extern.d: New test, using... - * testsuite/ld-ctf/array-extern.c: ... this. - * testsuite/ld-ctf/conflicting-typedefs.d: Adjust for ordering - changes. - -2022-04-28 Nick Alcock - - libctf: add a comment explaining how to use ctf_*open - Specifically, tell users what to pass to those functions that accept raw - section content, since it's fairly involved and easy to get wrong. - (.dynsym / .dynstr when CTF_F_DYNSTR is set, otherwise .symtab / .strtab). - - include/ChangeLog: - - * ctf-api.h (ctf_*open): Improve comment. - -2022-04-28 Vladimir Mezentsev - - gprofng: test suite problems - gprofng/ChangeLog - 2022-04-27 Vladimir Mezentsev - - PR gprofng/29065 - * testsuite/lib/Makefile.skel: Search parent dir for libs too. - -2022-04-28 Simon Marchi - - gdb: remove BLOCKVECTOR_MAP macro - Replace with equivalent methods. - - Change-Id: I4e56c76dfc363c1447686fb29c4212ea18b4dba0 - -2022-04-28 Simon Marchi - - gdb: constify addrmap_find - addrmap_find shouldn't need to modify the addrmap, so constify the - addrmap parameter. This helps for the following patch, where getting - the map of a const blockvector will return a const addrmap. - - Change-Id: If670e425ed013724a3a77aab7961db50366dccb2 - -2022-04-28 Simon Marchi - - gdb: remove BLOCKVECTOR_BLOCK and BLOCKVECTOR_NBLOCKS macros - Replace with calls to blockvector::blocks, and the appropriate method - call on the returned array_view. - - Change-Id: I04d1f39603e4d4c21c96822421431d9a029d8ddd - -2022-04-28 Simon Marchi - - gdb: remove BLOCK_ENTRY_PC macro - Replace with equivalent method. - - Change-Id: I0e033095e7358799930775e61028b48246971a7d - -2022-04-28 Simon Marchi - - gdb: remove BLOCK_CONTIGUOUS_P macro - Replace with an equivalent method. - - Change-Id: I60fd3be7b4c2601c2a74328f635fa48ed80eb7f5 - -2022-04-28 Simon Marchi - - gdb: remove BLOCK_RANGE macro - Replace with access through the block::ranges method. - - Change-Id: I50f3ed433b997c9f354e49bc6583f540ae4b6121 - -2022-04-28 Simon Marchi - - gdb: remove BLOCK_NRANGES macro - Replace with range for loops. - - Change-Id: Icbe04f9b6f9e6ddae2e15b2409c61f7a336bc3e3 - -2022-04-28 Simon Marchi - - gdb: remove BLOCK_RANGES macro - Replace with an equivalent method on struct block. - - Change-Id: I6dcf13e9464ba8a08ade85c89e7329c300fd6c2a - -2022-04-28 Simon Marchi - - gdb: remove BLOCK_RANGE_{START,END} macros - Replace with equivalent methods on blockrange. - - Change-Id: I20fd8f624e0129782c36768291891e7582d77c74 - -2022-04-28 Simon Marchi - - gdb: remove BLOCK_NAMESPACE macro - Replace with equivalent methods. - - Change-Id: If86b8cbdfb0f52e22c929614cd53e73358bab76a - -2022-04-28 Simon Marchi - - gdb: remove BLOCK_MULTIDICT macro - Replace with equivalent methods. - - Change-Id: If9a239c511a664f2a59fecb6d1cd579881b23dc2 - -2022-04-28 Simon Marchi - - gdb: remove BLOCK_SUPERBLOCK macro - Replace with equivalent methods. - - Change-Id: I334a319909a50b5cc5570a45c38c70e10dc00630 - -2022-04-28 Simon Marchi - - gdb: remove BLOCK_FUNCTION macro - Replace with equivalent methods. - - Change-Id: I31ec00f5bf85335c8b23d306ca0fe0b84d489101 - -2022-04-28 Simon Marchi - - gdb: remove BLOCK_{START,END} macros - Replace with equivalent methods. - - Change-Id: I10a6c8a2a86462d9d4a6a6409a3f07a6bea66310 - -2022-04-28 GDB Administrator - - Automatic date update in version.in - -2022-04-27 H.J. Lu - - x86: Disable 2 tests with large memory requirement - gas/ - - * testsuite/gas/i386/i386.exp: Disable rept. - - ld/ - - * testsuite/ld-x86-64/x86-64.exp: Disable pr17618. - -2022-04-27 Pedro Alves - - Make gdb.base/parse_number.exp test all architectures - There are some subtle differences between architectures, like the size - of a "long" type, and this isn't currently accounted for in - gdb.base/parse_number.exp. - - For example, on aarch64 a long type is 8 bytes, whereas a long type is - 4 bytes for x86_64. This causes the following FAIL's: - - FAIL: gdb.base/parse_number.exp: lang=asm: ptype 0xffffffffffffffff - FAIL: gdb.base/parse_number.exp: lang=auto: ptype 0xffffffffffffffff - FAIL: gdb.base/parse_number.exp: lang=c: ptype 0xffffffffffffffff - FAIL: gdb.base/parse_number.exp: lang=c++: ptype 0xffffffffffffffff - FAIL: gdb.base/parse_number.exp: lang=fortran: p/x 0xffffffffffffffff - FAIL: gdb.base/parse_number.exp: lang=fortran: ptype 0xffffffffffffffff - FAIL: gdb.base/parse_number.exp: lang=go: ptype 0xffffffffffffffff - FAIL: gdb.base/parse_number.exp: lang=local: ptype 0xffffffffffffffff - FAIL: gdb.base/parse_number.exp: lang=minimal: ptype 0xffffffffffffffff - FAIL: gdb.base/parse_number.exp: lang=objective-c: ptype 0xffffffffffffffff - FAIL: gdb.base/parse_number.exp: lang=opencl: ptype 0xffffffffffffffff - FAIL: gdb.base/parse_number.exp: lang=pascal: ptype 0xffffffffffffffff - - There are some fortran-specific divergences as well, where 32-bit - architectures show "unsigned int" for both 32-bit and 64-bit integers - and 64-bit architectures show "unsigned int" and "unsigned long" for - 32-bit and 64-bit integers. - - There might be a bug that 32-bit fortran truncates 64-bit values to - 32-bit, given "p/x 0xffffffffffffffff" returns "0xffffffff". - - Here's what we get for aarch64: - - (gdb) ptype 0xffffffff - type = unsigned int - (gdb) ptype 0xffffffffffffffff - type = unsigned long - (gdb) p sizeof (0xffffffff) - $1 = 4 - (gdb) p sizeof (0xffffffffffffffff) - quit - $2 = 8 - (gdb) ptype 0xffffffff - type = unsigned int - (gdb) ptype 0xffffffffffffffff - type = unsigned long - - And for arm: - - (gdb) ptype 0xffffffff - type = unsigned int - (gdb) ptype 0xffffffffffffffff - quit - type = unsigned long long - (gdb) p sizeof (0xffffffff) - quit - $1 = 4 - (gdb) p sizeof (0xffffffffffffffff) - quit - $2 = 8 - (gdb) ptype 0xffffffff - type = unsigned int - (gdb) ptype 0xffffffffffffffff - type = unsigned long - - This patch... - - * Makes the testcase iterate over all architectures, thus covering all - the different combinations of types/sizes every time. - - * Adjusts the expected values and types based on the sizes of long - long, long and int. - - A particularly curious architecture is s12z, which has 32-bit long - long, and thus no way to represent 64-bit integers in C-like - languages. - - Co-Authored-By: Luis Machado - Change-Id: Ifc0ccd33e7fd3c7585112ff6bebe7d266136768b - -2022-04-27 Tom Tromey - - Fix gdbserver build for x86-64 Windows - I broke the gdbserver build on x86-64 Windows a little while back. - Previously, I could not build this configuration, but today I found - out that if I configure with: - - --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 - - using the Fedora 34 tools, it will in fact build. I'm not certain, - but maybe the gnulib update helped with this. - - This patch fixes the build. I'm checking it in. - -2022-04-27 John Baldwin - - Create pseudo sections for NT_ARM_TLS notes on FreeBSD. - bfd/ChangeLog: - - * elf.c (elfcore_grok_freebsd_note): Handle NT_ARM_TLS notes. - -2022-04-27 Christophe Lyon - - gdb/arm: Extend arm_m_addr_is_magic to support FNC_RETURN, add unwind-secure-frames command - This patch makes use of the support for several stack pointers - introduced by the previous patch to switch between them as needed - during unwinding. - - It introduces a new 'unwind-secure-frames' arm command to enable/disable - mode switching during unwinding. It is enabled by default. - - It has been tested using an STM32L5 board (with cortex-m33) and the - sample applications shipped with the STM32Cube development - environment: GTZC_TZSC_MPCBB_TrustZone in - STM32CubeL5/Projects/NUCLEO-L552ZE-Q/Examples/GTZC. - - The test consisted in setting breakpoints in various places and check - that the backtrace is correct: SecureFault_Callback (Non-secure mode), - __gnu_cmse_nonsecure_call (before and after the vpush instruction), - SecureFault_Handler (Secure mode). - - This implies that we tested only some parts of this patch (only MSP* - were used), but remaining parts seem reasonable. - -2022-04-27 Christophe Lyon - - gdb/arm: Add support for multiple stack pointers on Cortex-M - Armv8-M architecture with Security extension features four stack pointers - to handle Secure and Non-secure modes. - - This patch adds support to switch between them as needed during - unwinding, and replaces all updates of cache->prev_sp with calls to - arm_cache_set_prev_sp. - -2022-04-27 Christophe Lyon - - gdb/arm: Introduce arm_cache_init - This patch is a preparation for the rest of the series and adds two - arm_cache_init helper functions. It updates every place that updates - cache->saved_regs to call the helper instead. - - gdb/arm: Define MSP and PSP registers for M-Profile - This patch removes the hardcoded access to PSP in - arm_m_exception_cache() and relies on the definition with the XML - descriptions. - -2022-04-27 Christophe Lyon - - gdb/arm: Fix prologue analysis to support vpush - While working on adding support for Non-secure/Secure modes unwinding, - I noticed that the prologue analysis lacked support for vpush, which - is used for instance in the CMSE stub routine. - - This patch updates thumb_analyze_prologue accordingly, adding support - for vpush of D-registers. - -2022-04-27 Enze Li - - gdb/testsuite: fix FAIL in gdb.base/clear_non_user_bp.exp - Tom and Simon feedback that there is a test failing in this commit: - - commit a5c69b1e49bae4d0dcb20f324cebb310c63495c6 - Date: Sun Apr 17 15:09:46 2022 +0800 - - gdb: fix using clear command to delete non-user breakpoints(PR cli/7161) - - Then, I reproduced the same fail with Ubuntu 20.04 as Simon said, and I - fixed the nit in this patch. The root of the problem is not correctly - matching the presentation of internal breakpoints. - - In addition, as Pedro pointed out, the original testcase is not portable - in some methods, so this patch fixes this issue and some other - improvements. - - Tested on x86_64 ubuntu 20.04.4 and openSUSE Tumbleweed(VERSION_ID="20220425"). - -2022-04-27 Jan Beulich - - x86: VFPCLASSSH is Evex.LLIG - This also was mistakenly flagged as Evex.128. - -2022-04-27 Nick Clifton - - Fix potential buffer overruns when creating DLLs. - 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-27 Alan Modra - - Revert pr29072 lto test changes - Revert commit 65daf5bed6 testsuite changes in ld-plugin/. -z isn't - supported for non-ELF targets, and isn't needed since we now prune the - exec stack warning (commit 333cd559ba). - - PR 29072 - -2022-04-27 Simon Marchi - - gdb/testsuite: use with_cwd where possible - I learned about with_cwd today. I spotted a few spots that could use - it, to make the code more robust. - - Change-Id: Ia23664cb827f25e79d31948e0c006a8dc61c33e1 - -2022-04-27 GDB Administrator - - Automatic date update in version.in - -2022-04-26 Carl Love - - GDB PowerPC record test cases for ISA 2.06 and ISA 3.1 - This patch adds PowerPC specific tests to verify recording of various - instructions. The first test case checks the ISA 2.06 lxvd2x instruction. - The second test case tests several of the ISA 3.01 instructions. Specifically, - it checks the word and prefixed instructions and some of the Matrix - Multiply Assist (MMA) instructions. - - The patch has been run on both Power 10 and Power 9 to verify the ISA - 2.06 test case runs on both platforms without errors. The ISA 3.1 test - runs without errors on Power 10 and is skipped as expected on Power 9. - -2022-04-26 Carl Love - - Add recording support for the ISA 3.1 PowerPC instructions. - This patch adds support for the PowerPC ISA 3.1 instructions to the PowerPC - gdb instruction recording routines. Case statement entries are added to a - number of the existing routines for recording the 32-bit word instructions. - A few new functions were added to handle the new word instructions. The 64-bit - prefix instructions are all handled by a set of new routines. The function - ppc_process_prefix_instruction() is the primary function to handle the - prefixed instructions. It calls additional functions to handle specific - sets of prefixed instructions. These new functions are: - ppc_process_record_prefix_vsx_d_form(), - ppc_process_record_prefix_store_vsx_ds_form(), - ppc_process_record_prefix_op34(), - ppc_process_record_prefix_op33(), - ppc_process_record_prefix_op32(), - ppc_process_record_prefix_store(), - ppc_process_record_prefix_op59_XX3(), - ppc_process_record_prefix_op42(). - -2022-04-26 Tom Tromey - - Handle encoding failures in Windows thread names - Internally at AdaCore, we noticed that the new Windows thread name - code could fail. First, it might return a zero-length string, but in - gdb conventions it should return nullptr instead. Second, an encoding - failure could wind up showing replacement characters to the user; this - is confusing and not useful; it's better to recognize such errors and - simply discard the name. This patch makes both of these changes. - -2022-04-26 H.J. Lu - - i386: Pass -z noexecstack to linker tests - PR ld/29072 - * testsuite/ld-i386/i386.exp: Pass -z noexecstack to gotpc1 - and property-6. - -2022-04-26 John Baldwin - - bsd-kvm: Fix build after recent changes to path handling functions. - Convert bsd_kvm_corefile and the local filename in bsd_kvm_open to - std::string rather than simple char * pointers freed by xfree. - -2022-04-26 Simon Marchi - - gdb: make some random Python files Python 3-compatible - I noticed that these files failed to format with Black, because they use - print without parenthesis (which isn't Python 3 compatible). - - I don't know if these files are still relevant, but the change is - trivial, so here it is. - - Change-Id: I116445c2b463486016f824d32effffc915b60766 - -2022-04-26 Carl Love - - PowerPC: Update expected floating point output for gdb.arch/altivec-regs.exp and gdb.arch/vsx-regs.exp - The format for printing the floating point values was changed by commit: - - commit 56262a931b7ca8ee3ec9104bc7e9e0b40cf3d64e - Author: Tom Tromey - Date: Thu Feb 17 13:43:59 2022 -0700 - - Change how "print/x" displays floating-point value - - Currently, "print/x" will display a floating-point value by first - casting it to an integer type. This yields weird results like: - - (gdb) print/x 1.5 - $1 = 0x1 - ... - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=16242 - - The above change results in 417 regression test failures since the expected - Power vector register output no longer match. - - This patch updates the expected Altivec floating point register prints to - the hexadecimal format for both big endian and little endian systems. The - patch also fixes a formatting isue with the decimal_vector expected value - assign statements. - - The expected VSX vector_register1, vector_register1_vr, vector_register2, - vector_register2_vr variables are updated to include the new float128 entry. - Additionally, the comment in the vsx expect file about the initialization - of the vs registers is updated. - - The patch has been tested on Power 10, Power 8 LE and Power 8 BE. - -2022-04-26 John Baldwin - - gdbsupport/pathstuff.h: #include explicitly for std::array<> - This fixes build breakage using clang with libc++ on FreeBSD where - std::array<> is not yet declared when used by the path_join variadic - function template. - -2022-04-26 GDB Administrator - - Automatic date update in version.in - -2022-04-25 Tom Tromey - - Do not put linkage names into .gdb_index - This changes the .gdb_index writer to skip linkage names. This was - always done historically (though somewhat implicitly). - -2022-04-25 Nick Clifton - - Emit a note warning the user that creating an executable stack because of a missing .note.GNU-stack section is deprecated. - PR 29072 - bfd * 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. - - binutils* testsuite/lib/binutils-common.exp (prune_warnings_extra): Filter - out notes about the executable stacjk behaviour beign deprecated. - - ld * testsuite/ld-elf/pr29072.b.warn: Update to include the note - about the linker's behaviour being depreccated. - -2022-04-25 rupothar - - gdb/fortran: Support for assumed rank zero - If a variable is passed to function in FORTRAN as an argument the - variable is treated as an array with rank zero. GDB currently does - not support the case for assumed rank 0. This patch provides support - for assumed rank 0 and updates the testcase as well. - - Without patch: - Breakpoint 1, arank::sub1 (a=) at assumedrank.f90:11 - 11 PRINT *, RANK(a) - (gdb) p a - failed to resolve dynamic array rank - (gdb) p rank(a) - failed to resolve dynamic array rank - - With patch: - Breakpoint 1, arank::sub1 (a=0) at assumedrank.f90:11 - 11 PRINT *, RANK(a) - (gdb) p a - $1 = 0 - (gdb) p rank(a) - $2 = 0 - -2022-04-25 Lancelot SIX - - gdb/infrun: assert !step_over_info_valid_p in restart_threads - While working in gdb/infrun.c:restart_threads, I was wondering what are - the preconditions to call the function. It seems to me that - !step_over_info_valid_p should be a precondition (i.e. if we are doing - an inline step over breakpoint, we do not want to resume non stepping - threads as one of them might miss the breakpoint which is temporally - disabled). - - To convince myself that this is true, I have added an assertion to - enforce this, and got one regression in the testsuite: - - FAIL: gdb.base/step-over-syscall.exp: vfork: displaced=off: single step over vfork (GDB internal error) - - This call to restart_threads originates from handle_vfork_done which - does not check if a step over is active when restarting other threads: - - if (target_is_non_stop_p ()) - { - scoped_restore_current_thread restore_thread; - - insert_breakpoints (); - restart_threads (event_thread, event_thread->inf); - start_step_over (); - } - - In this patch, I propose to: - - Call start_step_over before restart_threads. If a step over is already - in progress (as it is the case in the failing testcase), - start_step_over return immediately, and there is no point in restarting - all threads just to stop them right away for a step over breakpoint. - - Only call restart_threads if no step over is in progress at this - point. - - In this patch, I also propose to keep the assertion in restart_threads - to help enforce this precondition, and state it explicitly. - - I have also checked all other places which call restart_threads, and - they all seem to check that there is no step over currently active - before doing the call. - - As for infrun-related things, I am never completely sure I did not miss - something. So as usual, all feedback and thoughts are very welcome. - - Tested on x86_64-linux-gnu. - - Change-Id: If5f5f98ec4cf9aaeaabb5e3aa88ae6ffd70d4f37 - -2022-04-25 GDB Administrator - - Automatic date update in version.in - -2022-04-24 Andrew Burgess - - gdb: move setbuf calls out of gdb_readline_no_editing_callback - After this commit: - - commit d08cbc5d3203118da5583296e49273cf82378042 - Date: Wed Dec 22 12:57:44 2021 +0000 - - gdb: unbuffer all input streams when not using readline - - Issues were reported with some MS-Windows hosts, see the thread - starting here: - - https://sourceware.org/pipermail/gdb-patches/2022-March/187004.html - - Filed in bugzilla as: PR mi/29002 - - The problem seems to be that calling setbuf on terminal file handles - is not always acceptable, see this mail for more details: - - https://sourceware.org/pipermail/gdb-patches/2022-April/187310.html - - This commit does two things, first moving the setbuf calls out of - gdb_readline_no_editing_callback so that we don't end up calling - setbuf so often. - - Then, for MS-Windows hosts, we don't call setbuf for terminals, this - appears to resolve the issues that have been reported. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29002 - -2022-04-24 GDB Administrator - - Automatic date update in version.in - -2022-04-23 GDB Administrator - - Automatic date update in version.in - -2022-04-22 Simon Marchi - - gdb: handle_no_resumed: only update thread list of event target - When running: - - $ make check TESTS="gdb.multi/multi-re-run.exp" RUNTESTFLAGS="--target_board=native-gdbserver" - - I get: - - target remote localhost:2347^M - Remote debugging using localhost:2347^M - Reading symbols from /lib64/ld-linux-x86-64.so.2...^M - Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/ld-2.31.so...^M - 0x00007ffff7fd0100 in _start () from /lib64/ld-linux-x86-64.so.2^M - (gdb) continue^M - Continuing.^M - Cannot execute this command while the target is running.^M - Use the "interrupt" command to stop the target^M - and then try again.^M - (gdb) FAIL: gdb.multi/multi-re-run.exp: re_run_inf=1: iter=1: runto: run to all_started - - The test does: - - - Connect to a remote target with inferior 2, continue and stop on the - all_started function - - Connect to a separate remote target / GDBserver instance with inferior 1, - continue and (expect to) stop on the all_started function - - The failure seen above happens when trying to continue inferior 1. - - What happens is: - - - GDB tells inferior 1's remote target to continue - - We go into fetch_inferior_event, try to get an event at random from - the targets - - do_target_wait happens to pick inferior 2's target - - That target return TARGET_WAITKIND_NO_RESUMED, which makes sense: - inferior 2 is stopped, that target has no resumed thread - - handle_no_resumed tries to update the thread list of all targets: - - for (auto *target : all_non_exited_process_targets ()) - { - switch_to_target_no_thread (target); - update_thread_list (); - } - - - When trying to update the thread list of inferior 1's target, it hits - the "Cannot execute this command while the target is running" error. - This target is working in "remote all-stop" mode, and it is currently - waiting for a stop reply, so it can't send packets to update the - thread list at this time. - - To handle the problem described in the comment in handle_no_resumed, I - don't think it is necessary to update the thread list of all targets, - but only the event target. That comment describes a kind of race - condition where some target reports a breakpoint hit for a thread and - then its last remaining resumed thread exits, so sends a "no resumed" - event. If we ended up resuming the thread that hit a breakpoint, we - want to ignore the "no resumed" and carry on. - - But I don't really see why we need to update the thread list on the - other targets. I can't really articulate this, it's more a gut feeling, - maybe I just fail to imagine the situation where this is needed. But - here is the patch anyway, so we can discuss it. The patch changes - handle_no_resumed to only update the thread list of the event target. - This fixes the test run shown above. - - The way I originally tried to fix this was to make - remote_target::update_thread_list return early if the target is - currently awaiting a stop reply, since there's no way it can update the - thread list at that time. But that felt more like papering over the - problem. I then thought that we probably shouldn't be asking the target - to update the thread list unnecessarily. - - Change-Id: Ide3df22b4f556478e155ad1c67ad4b4fe7c26a58 - -2022-04-22 Simon Marchi - - gdbserver/linux: free process_info_private and arch_process_info when failing to attach - Running - - $ ../gdbserver/gdbserver --once --attach :1234 539436 - - with ASan while /proc/sys/kernel/yama/ptrace_scope is set to 1 (prevents - attaching) shows that we fail to free some platform-specific objects - tied to the process_info (process_info_private and arch_process_info): - - Direct leak of 32 byte(s) in 1 object(s) allocated from: - #0 0x7f6b558b3fb9 in __interceptor_calloc /usr/src/debug/gcc/libsanitizer/asan/asan_malloc_linux.cpp:154 - #1 0x562eaf15d04a in xcalloc /home/simark/src/binutils-gdb/gdbserver/../gdb/alloc.c:100 - #2 0x562eaf251548 in xcnew /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/poison.h:122 - #3 0x562eaf22810c in linux_process_target::add_linux_process_no_mem_file(int, int) /home/simark/src/binutils-gdb/gdbserver/linux-low.cc:426 - #4 0x562eaf22d33f in linux_process_target::attach(unsigned long) /home/simark/src/binutils-gdb/gdbserver/linux-low.cc:1132 - #5 0x562eaf1a7222 in attach_inferior /home/simark/src/binutils-gdb/gdbserver/server.cc:308 - #6 0x562eaf1c1016 in captured_main /home/simark/src/binutils-gdb/gdbserver/server.cc:3949 - #7 0x562eaf1c1d60 in main /home/simark/src/binutils-gdb/gdbserver/server.cc:4084 - #8 0x7f6b552f630f in __libc_start_call_main (/usr/lib/libc.so.6+0x2d30f) - - Indirect leak of 56 byte(s) in 1 object(s) allocated from: - #0 0x7f6b558b3fb9 in __interceptor_calloc /usr/src/debug/gcc/libsanitizer/asan/asan_malloc_linux.cpp:154 - #1 0x562eaf15d04a in xcalloc /home/simark/src/binutils-gdb/gdbserver/../gdb/alloc.c:100 - #2 0x562eaf2a0d79 in xcnew /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/poison.h:122 - #3 0x562eaf295e2c in x86_target::low_new_process() /home/simark/src/binutils-gdb/gdbserver/linux-x86-low.cc:723 - #4 0x562eaf22819b in linux_process_target::add_linux_process_no_mem_file(int, int) /home/simark/src/binutils-gdb/gdbserver/linux-low.cc:428 - #5 0x562eaf22d33f in linux_process_target::attach(unsigned long) /home/simark/src/binutils-gdb/gdbserver/linux-low.cc:1132 - #6 0x562eaf1a7222 in attach_inferior /home/simark/src/binutils-gdb/gdbserver/server.cc:308 - #7 0x562eaf1c1016 in captured_main /home/simark/src/binutils-gdb/gdbserver/server.cc:3949 - #8 0x562eaf1c1d60 in main /home/simark/src/binutils-gdb/gdbserver/server.cc:4084 - #9 0x7f6b552f630f in __libc_start_call_main (/usr/lib/libc.so.6+0x2d30f) - - Those objects are deleted by linux_process_target::mourn, but that is - not called if we fail to attach, we only call remove_process. I - initially fixed this by making linux_process_target::attach call - linux_process_target::mourn on failure (before calling error). But this - isn't done anywhere else (including in GDB) so it would just be - confusing to do things differently here. - - Instead, add a linux_process_target::remove_linux_process helper method - (which calls remove_process), and call that instead of remove_process in - the Linux target. Move the free-ing of the extra data from the mourn - method to that new method. - - Change-Id: I277059a69d5f08087a7f3ef0b8f1792a1fcf7a85 - -2022-04-22 Andrew Burgess - - gdb: handle bracketed-paste-mode and EOF correctly - This commit replaces an earlier commit that worked around the issues - reported in bug PR gdb/28833. - - The previous commit just implemented a work around in order to avoid - the worst results of the bug, but was not a complete solution. The - full solution was considered too risky to merge close to branching GDB - 12. This improved fix has been applied after GDB 12 branched. See - this thread for more details: - - https://sourceware.org/pipermail/gdb-patches/2022-March/186391.html - - This commit replaces this earlier commit: - - commit 74a159a420d4b466cc81061c16d444568e36740c - Date: Fri Mar 11 14:44:03 2022 +0000 - - gdb: work around prompt corruption caused by bracketed-paste-mode - - Please read that commit for a full description of the bug, and why is - occurs. - - In this commit I extend GDB to use readline's rl_deprep_term_function - hook to call a new function gdb_rl_deprep_term_function. From this - new function we can now print the 'quit' message, this replaces the - old printing of 'quit' in command_line_handler. Of course, we only - print 'quit' in gdb_rl_deprep_term_function when we are handling EOF, - but thanks to the previous commit (to readline) we now know when this - is. - - There are two aspects of this commit that are worth further - discussion, the first is in the new gdb_rl_deprep_term_function - function. In here I have used a scoped_restore_tmpl to disable the - readline global variable rl_eof_found. - - The reason for this is that, in rl_deprep_terminal, readline will - print an extra '\n' character before printing the escape sequence to - leave bracketed paste mode. You might then think that in the - gdb_rl_deprep_term_function function, we could simply print "quit" and - rely on rl_deprep_terminal to print the trailing '\n'. However, - rl_deprep_terminal only prints the '\n' when bracketed paste mode is - on. If the user has turned this feature off, no '\n' is printed. - This means that in gdb_rl_deprep_term_function we need to print - "quit" when bracketed paste mode is on, and "quit\n" when bracketed - paste mode is off. - - We could absolutely do that, no problem, but given we know how - rl_deprep_terminal is implemented, it's easier (I think) to just - temporarily clear rl_eof_found, this prevents the '\n' being printed - from rl_deprep_terminal, and so in gdb_rl_deprep_term_function, we can - now always print "quit\n" and this works for all cases. - - The second issue that should be discussed is backwards compatibility - with older versions of readline. GDB can be built against the system - readline, which might be older than the version contained within GDB's - tree. If this is the case then the system readline might not contain - the fixes needed to support correctly printing the 'quit' string. - - To handle this situation I have retained the existing code in - command_line_handler for printing 'quit', however, this code is only - used now if the version of readline we are using doesn't not include - the required fixes. And so, if a user is using an older version of - readline, and they have bracketed paste mode on, then they will see - the 'quit' sting printed on the line below the prompt, like this: - - (gdb) - quit - - I think this is the best we can do when someone builds GDB against an - older version of readline. - - Using a newer version of readline, or the patched version of readline - that is in-tree, will now give a result like this in all cases: - - (gdb) quit - - Which is what we want. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28833 - -2022-04-22 Andrew Burgess - - readline: back-port changes needed to properly detect EOF - This commit is a partial back-port of this upstream readline commit: - - commit 002d31aa5f5929eb32d0e0e2e8b8d35d99e59961 - Author: Chet Ramey - Date: Thu Mar 3 11:11:47 2022 -0500 - - add rl_eof_found to public API; fix pointer aliasing problems \ - with history-search-backward; fix a display problem with \ - runs of invisible characters at the end of a physical \ - screen line - - I have only pulled in the parts of this commit that relate to the new - rl_eof_found global, and the RL_STATE_EOF state flag. These changes - are needed in order to fix PR cli/28833, and are discussed in this - thread to the bug-readline mailing list: - - https://lists.gnu.org/archive/html/bug-readline/2022-02/msg00021.html - - The above commit is not yet in any official readline release, but my - hope is that now it has been merged into the readline tree it should - be safe enough to back port this fix to GDB's tree. - - At some point in the future we will inevitably want to roll forward - the version of readline that we maintain in the binutils-gdb - repository. When that day comes the changes in this commit can be - replaced with the latest upstream readline code, as I have not changed - the meaning of this code at all from what is in upstream readline. - - This commit alone does not fix the PR cli/28833 issue, for that see - the next commit, which changes GDB itself. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28833 - -2022-04-22 Andrew Burgess - - gdb: improved EOF handling when using readline 7 - In this commit: - - commit a6b413d24ccc5d76179bab866834e11fd6fec294 - Date: Fri Mar 11 14:44:03 2022 +0000 - - gdb: work around prompt corruption caused by bracketed-paste-mode - - a change was made to GDB to work around bug PR gdb/28833. The - consequence of this work around is that, when bracketed paste mode is - enabled in readline, and GDB is quit by sending EOF, then the output - will look like this: - - (gdb) - quit - - The ideal output, which is what we get when bracketed paste mode is - off, is this: - - (gdb) quit - - The reason we need to make this change is explained in the original - commit referenced above. What isn't mentioned in the above commit, is - that the change that motivated this work around was only added in - readline 8, older versions of readline don't require the change. - - In later commits in this series I will add a fix to GDB's in-tree copy - of readline (this fix is back-ported from upstream readline), and then - I will change GDB so that, when using the (patched) in-tree readline, - we can have the ideal output in all cases. - - However, GDB can be built against the system readline. When this is - done, and the system readline is version 8, then we will still have to - use the work around (two line) style output. - - But, if GDB is built against the system readline, and the system - readline is an older version 7 readline, then there's no reason why we - can't have the ideal output, after all, readline 7 doesn't include the - change that we need to work around. - - This commit changes GDB so that, when using readline 7 we get the - ideal output in all cases. This change is trivial (a simple check - against the readline version number) so I think this should be fine to - include. - - For testing this commit, you need to configure GDB including the - '--with-system-readline' flag, and build GDB on a system that uses - readline 7, for example 'Ubuntu 18.04'. Then run the test - 'gdb.base/eof-exit.exp', you should expect everything to PASS. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28833 - -2022-04-22 Simon Marchi - - gdb: prune inferiors at end of fetch_inferior_event, fix intermittent failure of gdb.threads/fork-plus-threads.exp - This test sometimes fail like this: - - info threads^M - Id Target Id Frame ^M - 11.12 process 2270719 Couldn't get registers: No such process.^M - (gdb) FAIL: gdb.threads/fork-plus-threads.exp: detach-on-fork=off: no threads left - [Inferior 11 (process 2270719) exited normally]^M - info inferiors^M - Num Description Connection Executable ^M - * 1 /home/smarchi/build/binutils-gdb/gdb/testsuite/outputs/gdb.threads/fork-plus-threads/fork-plus-threads ^M - 11 /home/smarchi/build/binutils-gdb/gdb/testsuite/outputs/gdb.threads/fork-plus-threads/fork-plus-threads ^M - (gdb) FAIL: gdb.threads/fork-plus-threads.exp: detach-on-fork=off: only inferior 1 left (the program exited) - - I can get it to fail quite reliably by pinning it to a core: - - $ taskset -c 5 make check TESTS="gdb.threads/fork-plus-threads.exp" - - The previous attempt at fixing this was: - - https://sourceware.org/pipermail/gdb-patches/2021-October/182846.html - - What we see is part due to a possible unfortunate ordering of events - given by the kernel, and what could be considered a bug in GDB. - - The test program makes a number of forks, waits them all, then exits. - Most of the time, GDB will get and process the exit event for inferior 1 - after the exit events of all the children. But this is not guaranteed. - After the last child exits and is waited by the parent, the parent can - exit quickly, such that GDB collects from the kernel the exit events for - the parent and that child at the same time. It then chooses one event - at random, which can be the event for the parent. This will result in - the parent appearing to exit before its child. There's not much we can - do about it, so I think we have to adjust the test to cope. - - After expect has seen the "exited normally" notification for inferior 1, - it immediately does an "info thread" that it expects to come back empty. - But at this point, GDB might not have processed inferior 11's (the last - child) exit event, so it will look like there is still a thread. Of - course that thread is dead, we just don't know it yet. But that makes - the "no thread" test fail. If the test waited just a bit more for the - "exited normally" notification for inferior 11, then the list of threads - would be empty. - - So, first change, make the test collect all the "exited normally" - notifications for all inferiors before proceeding, that should ensure we - see an empty thread list. That would fix the first FAIL above. - - However, we would still have the second FAIL, as we expect inferior 11 - to not be there, it should have been deleted automatically. Inferior 11 - is normally deleted when prune_inferiors is called. That is called by - normal_stop, which is only called by fetch_inferior_event only if the - event thread completed an execution command FSM (thread_fsm). But the - FSM for the continue command completed when inferior 1 exited. At that - point inferior 11 was not prunable, as it still had a thread. When - inferior 11 exits, prune_inferiors is not called. - - I think that can be considered a GDB bug. From the user point of view, - there's no reason why in one case inferior 11 would be deleted and not - in the other case. - - This patch makes the somewhat naive change to call prune_inferiors in - fetch_inferior_event, so that it is called in this case. It is placed - at this particular point in the function so that it is called after the - user inferior / thread selection is restored. If it was called before - that, inferior 11 wouldn't be pruned, because it would still be the - current inferior. - - Change-Id: I48a15d118f30b1c72c528a9f805ed4974170484a - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=26272 - -2022-04-22 Tom Tromey - - Un-break the coff-pe-read.c build - This fixes a build breakage in my recent coff-pe-read.c change. - - I'm sorry about this. I don't understand how it happened, because I - definitely built and tested the series on Windows, and I didn't change - it before pushing. Something must have gone wrong on the Windows - build, but I don't know what. I'll investigate and and re-test to be - sure. - -2022-04-22 Tom Tromey - - More const use and alloca avoidance in coff-pe-read.c - This changes another function in coff-pe-read.c to use 'const' more, - and to avoid the use of alloca by instead using std::string. - - Use std::string in coff-pe-read.c - coff-pe-read.c uses xsnprintf and alloca, but using std::string is - better, and just as easy. In general I think alloca is something to - be avoided, and unbounded uses especially so. - - Remove a const-removing cast from coff-pe-read.c - coff-pe-read.c casts away const at one spot, but this is easily - replaced by calling bfd_get_filename directly in a couple of debugging - prints. - - Simplify BFD section iteration in coff-pe-read.c - coff-pe-read.c iterates over BFD sections using bfd_map_over_sections, - but it's much simpler to use a for-each loop. This allows for the - removal of helper functions and types. - -2022-04-22 Tom Tromey - - Fix method naming bug in new DWARF indexer - Pedro pointed out that gdb-add-index is much slower with the new DWARF - indexer. He also noticed that, in some cases, the generated - .gdb_index would have the wrong fully-qualified name for a method. - - I tracked this down to a bug in the indexer. If a type could have - methods but was marked as a declaration, the indexer was ignoring it. - However, this meant that the internal map to find the qualified name - was not updated for this container. - -2022-04-22 Christoph Muellner - - RISC-V: Add missing DECLARE_INSNs for Zicbo{m,p,z} - The recently added support for the Zicbo{m,p,z} extensions did not - include DECLARE_INSN() declarations for the instructions. - These declarations are needed by GDB's instruction detection code. - This patch adds them. - -2022-04-22 GDB Administrator - - Automatic date update in version.in - -2022-04-21 Carl Love - - Fix for gdb.base/solib-search.exp test. - The variable right_lib_flags is not being set correctly to define RIGHT. - The value RIGHT is needed to force the address of the library functions - lib1_func3 and lib2_func4 to occur at different address in the wrong and - right libraries. - - With RIGHT defined correctly, functions lib1_func3 and lib2_func4 occur - at different addresses the test runs correctly on Powerpc. - - The test needs the lib2 addresses to be different in the right and - wrong cases. That is the point of introducing function lib2_spacer - with the ifdef RIGHT compiler directive. - - On Intel, the ARRAY_SIZE of 1 versus 8192 is sufficient to get the - dynamic linker to move the addresses of the library. You can also get - the same effect on PowerPC but you must use a value much larger than - 8192. - - The key thing is that the test was not properly setting RIGHT to - defined to get the lib2_spacer function on Intel and Powerpc. - - Without the patch, we have the Intel backtrace for the bad libraries: - - backtrace - #0 break_here () at /home/ ... /gdb/testsuite/gdb.base/solib-search.c:30 - #1 0x00007ffff7fae156 in ?? () - #2 0x00007fffffffc150 in ?? () - #3 0x00007ffff7fbb156 in ?? () - #4 0x00007fffffffc160 in ?? () - #5 0x00007ffff7fae146 in ?? () - #6 0x00007fffffffc170 in ?? () - #7 0x00007ffff7fbb146 in ?? () - #8 0x00007fffffffc180 in ?? () - #9 0x0000555555555156 in main () at /home/ ... /binutils-gdb/gdb/testsuite/gdb.base/solib-search.c:23 - Backtrace stopped: previous frame inner to this frame (corrupt stack?) - (gdb) PASS: gdb.base/solib-search.exp: backtrace (with wrong libs) (data collection) - - The backtrace on Intel with the good libraries is: - - backtrace - #0 break_here () at /.../binutils-gdb/gdb/testsuite/gdb.base/solib-search.c:30 - #1 0x00007ffff7fae156 in lib2_func4 () at /.../binutils-gdb/gdb/testsuite/gdb.base/solib-search-lib2.c:49 - #2 0x00007ffff7fbb156 in lib1_func3 () at /.../gdb.base/solib-search-lib1.c:49 - #3 0x00007ffff7fae146 in lib2_func2 () at /.../testsuite/gdb.base/solib-search-lib2.c:30 - #4 0x00007ffff7fbb146 in lib1_func1 () at /.../gdb.base/solib-search-lib1.c:30 - #5 0x0000555555555156 in main () at /...solib-search.c:23 - (gdb) PASS: gdb.base/solib-search.exp: backtrace (with right libs) (data collection) - PASS: gdb.base/solib-search.exp: backtrace (with right libs) - - In one case the backtrace is correct and the other it - is wrong on Intel. This is due to the fact that the ARRAY_SIZE caused - the dynamic linker to move the library function addresses around. I - believe it has to do with the default size of the data and code - sections used by the dynamic linker. - - So without the patch the backtrace on PowerPC looks like: - - backtrace - #0 break_here () at /.../solib-search.c:30 - #1 0x00007ffff7f007f4 in lib2_func4 () at /.../solib-search-lib2.c:49 - #2 0x00007ffff7f307f4 in lib1_func3 () at /.../solib-search-lib1.c:49 - #3 0x00007ffff7f007ac in lib2_func2 () at /.../solib-search-lib2.c:30 - #4 0x00007ffff7f307ac in lib1_func1 () at /.../solib-search-lib1.c:30 - #5 0x000000001000074c in main () at /.../solib-search.c:23 - - for both the good and bad libraries. - - The patch fixes defining RIGHT in solib-search-lib1.c and solib-search- - lib2.c. Note, without the patch the lib1_spacer and lib2_spacer - functions do not show up in the object dump of the Intel or Powerpc - libraries as it should. The patch fixes that by making sure RIGHT gets - defined. - - Now with the patch the backtrace for the bad library on PowerPC looks - like: - - backtrace - #0 break_here () at /.../solib-search.c:30 - #1 0x00007ffff7f0083c in __glink_PLTresolve () from /.../solib-search-lib2.so - Backtrace stopped: frame did not save the PC - - And the backtrace for the good libraries on PowerPC looks like: - - backtrace - #0 break_here () at /.../solib-search.c:30 - #1 0x00007ffff7f0083c in lib2_func4 () at /.../solib-search-lib2.c:49 - #2 0x00007ffff7f3083c in lib1_func3 () at /.../solib-search-lib1.c:49 - #3 0x00007ffff7f007cc in lib2_func2 () at /.../solib-search-lib2.c:30 - #4 0x00007ffff7f307cc in lib1_func1 () at /.../solib-search-lib1.c:30 - #5 0x000000001000074c in main () at /.../solib-search.c:23 - (gdb) PASS: gdb.base/solib-search.exp: backtrace (with right libs) (data collection) - PASS: gdb.base/solib-search.exp: backtrace (with right libs) - - The issue then is on Power where the ARRAY_SIZE of 1 versus 8192 is not - sufficient to cause the dymanic linker to allocate the libraries at - different addresses. I don't claim to understand the specifics of how - the dynamic linker works and what the default size is for the data and - code sections are. My guess is by default PowerPC allocates a larger - data size by default, which is large enough to hold array[8192]. The - default size of the data section allocated by the dynamic linker on - Intel is not large enough to hold array[8192] thus causing the code - section on Intel to have to move when the large array is defined. - - Note on PowerPC, if you make ARRAY_SIZE big enough, then you will cause - the library addresses to occur at different addresses as the larger - data section forces the code section to a different address. That was - actually my original fix for the program until I spoke with Doug Evans - who originally wrote the test. Doug noticed that RIGHT was not getting - defined as he originally intended in the test. - - With the patch to fix the definition of RIGHT, PowerPC has a bad and a - good backtrace because the address of lib1_func3 and lib2_func4 both - move because lib1_spacer and lib2_spacer are now defined - before lib1_func3 and lib2_func4. - - Without the patch, the lib1_spacer and lib2_spacer function doesn't show - up in the binary for the correct or incorrect library on Intel or PowerPC. - With the patch, RIGHT gets defined as originally intended for the test on - both architectures and lib1_spacer and lib2_spacer function show up in the - binaries on both architectures changing the other function addresses as - intended thus causing the test work as intended on PowerPC. - -2022-04-21 Simon Marchi - - gdb/dwarf: remove line_header::header_length field - This can be a local in dwarf_decode_line_header. - - Change-Id: I2ecf4616d1a3197bd1e81ded9f999a2da9a685af - -2022-04-21 Simon Marchi - - gdb/dwarf: remove line_header::total_length field - This doesn' have to be a field, it can simply be a local variable in - dwarf_decode_line_header. Name the local variable "unit_length", since - that's what the field in called in DWARF 4 and 5. It's always easier to - follow the code with the standard on the side when we use the same - terminology. - - Change-Id: I3ad1022afd9410b193ea11b9b5437686c1e4e633 - -2022-04-21 Simon Marchi - - gdb/testsuite: fix "set temporary breakpoint" DUPLICATEs - Commit c67f4e538 ("gdb/testsuite: make gdb.ada/mi_prot.exp stop at - expected location") introduced some DUPLICATEs in MI tests using - mi_continue_to_line, for example: - - DUPLICATE: gdb.ada/mi_ref_changeable.exp: mi_continue_to_line: set temporary breakpoint - - These test names were previously differentiated by the location passed - to mi_continue_to_line. Since the location can contain a path, that - commit removed the location from the test name, in favor of a hardcoded - string "set temporary breakpoint", hence removing the differentiator. - - mi_continue_to_line receives a "test" parameter, containing a test - name. Add a "with_test_prefix" with that name, so that all tests - recorded during mi_continue_to_line have this in their name. - - mi_continue_to_line passes that "test" string to mi_get_stop_line, that - is a bit superfluous. mi_get_stop_line only uses that string in case of - failures (it doesn't record a pass if everything goes fine). Since it's - not crucial, just remove it, and adjust all callers. - - Adjust three gdb.mi/mi-var-*.exp tests to use prefixes to differentiate - the multiple calls to mi_run_inline_test (which calls - mi_continue_to_line). - - Change-Id: I511c6caa70499f8657b1cde37d71068d74d56a74 - -2022-04-21 Tom Tromey - - Always use dwarf2_initialize_objfile - Internally we noticed that some tests would fail like so on Windows: - - warning: Section .debug_aranges in [...] has duplicate debug_info_offset 0x0, ignoring .debug_aranges. - - Debugging showed that, in fact, a second CU was being created at this - offset. We tracked this down to the fact that, while the ELF reader - is careful to re-use the per-BFD data, other readers are not, and - could re-read the DWARF data multiple times. - - However, since the change to allow an objfile to have multiple "quick - symbol" implementations, there's no reason for this approach -- it's - safe and easy for all symbol readers to reuse the per-BFD data when - reading DWARF. - - This patch implements this idea, simplifying dwarf2_build_psymtabs and - making it private, and then switching to dwarf2_initialize_objfile as - the sole way to start the DWARF reader. - - Note that, while I think the call to dwarf2_build_frame_info in - machoread.c is also obsolete, I haven't attempted to remove it here. - -2022-04-21 Andrew Burgess - - gdb: fix 'remote show FOO-packet' aliases - The following behaviour was observed in GDB: - - (gdb) show remote X-packet - Support for the `p' packet is auto-detected, currently unknown. - - Note the message mentions the 'p' packet. This is a regression since - this commit: - - commit 8579fd136a614985bd27f20539c7bb7c5a51287d - Date: Mon Nov 8 14:58:46 2021 +0000 - - gdb/gdbsupport: make xstrprintf and xstrvprintf return a unique_ptr - - Before this commit the behaviour was: - - (gdb) show remote X-packet - Support for the `X' packet is auto-detected, currently unknown. - - The problem was caused by a failed attempt to ensure that some - allocated strings were deleted when GDB exits. The code in the above - commit attempted to make use of 'static' to solve this problem, - however, the solution was just wrong. - - In this new commit I instead allocate a static vector into which all - the allocated strings are stored, this ensures the strings are - released when GDB exits (which makes output from tools like valgrind - cleaner), but each string within the vector can be unique, which fixes - the regression. - -2022-04-21 Simon Marchi - - gdbsupport: add path_join function - In this review [1], Eli pointed out that we should be careful when - concatenating file names to avoid duplicated slashes. On Windows, a - double slash at the beginning of a file path has a special meaning. So - naively concatenating "/" and "foo/bar" would give "//foo/bar", which - would not give the desired results. We already have a few spots doing: - - if (first_path ends with a slash) - path = first_path + second_path - else - path = first_path + slash + second_path - - In general, I think it's nice to avoid superfluous slashes in file - paths, since they might end up visible to the user and look a bit - unprofessional. - - Introduce the path_join function that can be used to join multiple path - components together (along with unit tests). - - I initially wanted to make it possible to join two absolute paths, to - support the use case of prepending a sysroot path to a target file path, - or the prepending the debug-file-directory to a target file path. But - the code in solib_find_1 shows that it is more complex than this anyway - (for example, when the right hand side is a Windows path with a drive - letter). So I don't think we need to support that case in path_join. - That also keeps the implementation simpler. - - Change a few spots to use path_join to show how it can be used. I - believe that all the spots I changed are guarded by some checks that - ensure the right hand side operand is not an absolute path. - - Regression-tested on Ubuntu 18.04. Built-tested on Windows, and I also - ran the new unit-test there. - - [1] https://sourceware.org/pipermail/gdb-patches/2022-April/187559.html - - Change-Id: I0df889f7e3f644e045f42ff429277b732eb6c752 - -2022-04-21 Lancelot SIX - - gdb_spawn_attach_cmdline: use unsupported instead of untested - In a previous commit (b750766ac96: gdb/testsuite: Introduce and use - gdb_spawn_attach_cmdline), if gdb_spawn_attach_cmdline cannot have GDB - attach to the process because of ptrace restrictions (operation not - permitted), the proc issues UNTESTED. This should really be - UNSUPPORTED, as it is done in gdb_attach. - - This patch fixes this oversight. - - Change-Id: Ib87e33b9230f3fa7a85e06220ef4c63814b71f7d - -2022-04-21 Enze Li - - gdb/testsuite: add binary testcases to py-format-string.exp - We currently only test decimal and hexadecimal for the - gdb.Value.format_string() interface, this patch adds testcases for - binary format. - - Tested on x86_64 openSUSE Tumbleweed(VERSION_ID="20220413"). - -2022-04-21 Pedro Alves - - gdb.debuginfod/fetch_src_and_symbols.exp: Fix "notice empty URL" test - The gdb_test_multiple pattern for the "notice empty URL" test in - gdb.debuginfod/fetch_src_and_symbols.exp misses expecting the prompt. - Fix it by using -re -wrap. - - Also, by using "confirm off", the message GDB prints if Debuginfod - downloading is available doesn't contain "Enable debuginfod" any - longer. E.g.: - - ~~~ - (gdb) file testsuite/outputs/gdb.debuginfod/fetch_src_and_symbols/fetch_src_and_symbols - Reading symbols from testsuite/outputs/gdb.debuginfod/fetch_src_and_symbols/fetch_src_and_symbols... - - This GDB supports auto-downloading debuginfo from the following URLs: - - Enable debuginfod for this session? (y or [n]) - ~~~ - - ~~~ - (gdb) with confirm off -- file testsuite/outputs/gdb.debuginfod/fetch_src_and_symbols/fetch_src_and_symbols - Reading symbols from testsuite/outputs/gdb.debuginfod/fetch_src_and_symbols/fetch_src_and_symbols... - - This GDB supports auto-downloading debuginfo from the following URLs: - - <127.0.0.1:8000> - Debuginfod has been disabled. - To make this setting permanent, add 'set debuginfod enabled off' to .gdbinit. - (No debugging symbols found in testsuite/outputs/gdb.debuginfod/fetch_src_and_symbols/fetch_src_and_symbols) - (gdb) - ~~~ - - I handled that correctly in the other tests that use test_urls, but - had forgotten to update the "notice empty URL" one. - - Change-Id: I00040c83466e1494b3875574eb009c571a1504bf - -2022-04-21 Alan Modra - - prune .note.GNU-stack warning from testsuite - binutils/ - * testsuite/lib/binutils-common.exp (prune_warnings_extra): Remove - .note.GNU-stack warning. - (run_dump_test): Call prune_warnings for ld and objcopy output. - ld/ - * testsuite/ld-elf/elf.exp: Disable prune_warnings_extra temporarily - around test for absent .note.GNU-stack - * testsuite/ld-cris/globsymw2.s, - * testsuite/ld-cris/warn3.d: Modify "is not implemented" message - to avoid dejagnu prune_warnings. - - ld testsuite xcoff XPASS - * testsuite/ld-scripts/defined5.d: Don't xfail xcoff targets. - - Delete unused COFF gas macro - * config/obj-coff.h (sy_obj): Don't define. - (OBJ_SYMFIELD_TYPE): Revise comments. - -2022-04-21 GDB Administrator - - Automatic date update in version.in - -2022-04-20 Aaron Merey - - gdb/debuginfod: Prevent out_of_range exception - Trailing whitespace in the string of debuginfod URLs causes an - out_of_range exception during the printing of URLs for the first - use notice. - - To fix this, stop printing URLs when the substring to be printed - consists only of whitespace. - - Also add first use notice testcases. - - Co-Authored-By: Pedro Alves - -2022-04-20 Lancelot SIX - - gdb/testsuite: Introduce and use gdb_spawn_attach_cmdline - Following a7e6a19e87f3d719ea23c65b580a6d9bca4ccab3 "gdb: testsuite: add - new gdb_attach to check "attach" command", this commit proposes to - introduce the gdb_spawn_attach_cmdline helper and use it in - gdb.base/attach.exp. - - This helper starts GDB and adds the "--pid=$PID" argument. - - Also note that both the original and new implementation use - gdb_spawn_with_cmdline_opts, which in the end uses default_gdb_spawn. - This makes sure that we use $INTERNAL_GDBFLAGS, which by default already - contain "-iex \"set height 0\" -iex \"set width 0\"". To avoid - repetition of those arguments, gdb_spawn_attach_cmdline does not repeat - those arguments. - - To maintain a behavior similat to what gdb.base/attach.exp used to do, - gdb_spawn_attach_cmdline keeps the -quiet flag. - - Tested on x86_64-gnu-linux - - Change-Id: I1fdcdb71c86d9c5d34bb28fc86fac68bcec37358 - -2022-04-20 Tom Tromey - - Replace symbol_symtab with symbol::symtab - This turns symbol_symtab into a method on symbol. It also replaces - symbol_set_symtab with a method. - - Replace symbol_arch with symbol::arch - This turns symbol_arch into a method on symbol. - - Replace symbol_objfile with symbol::objfile - This turns symbol_objfile into a method on symbol. - - Remove symbol::aclass_index - Symbols have an aclass_index method, but this isn't needed, because - the aclass index isn't useful outside of the symbol implementation. - - Use array_view for symbol_impls - It seemed to me that using array_view for symbol_impls would give a - bit more error checking, at least when gdb is built in libstdc++ debug - mode. - - Add accessors for symbol's artificial field - For a series I'm experimenting with, it was handy to hide a symbol's - "artificial" field behind accessors. This patch is the result. - - Unify the DWARF index holders - The dwarf2_per_bfd object has a separate field for each possible kind - of index. Until an earlier patch in this series, two of these were - even derived from a common base class, but still had separate slots. - This patch unifies all the index fields using the common base class - that was introduced earlier in this series. This makes it more - obvious that only a single index can be active at a time, and also - removes some code from dwarf2_initialize_objfile. - - Add an ad hoc version check to dwarf_scanner_base - Some generic code in the DWARF reader has a special case for older - versions of .gdb_index. This patch adds an ad hoc version check - method so that these spots can work without specific knowledge of - which index is in use. - - Simplify version check in dw2_symtab_iter_next - This simplifies the index versio check in dw2_symtab_iter_next, by - passing a reference to the index object to this function. This avoids - an indirection via the per_bfd object. - - Introduce and use dwarf_scanner_base - This introduces dwarf_scanner_base, a base class for all the index - readers in the DWARF code. Then, it changes both mapped_index_base - and cooked_index_vector to derive from this new base class. - - Introduce readnow_functions - This introduces readnow_functions, a new subclass of - dwarf2_base_index_functions, and changes the DWARF reader to use it. - This lets us drop the "index is NULL" hack from the gdb index code. - - Remove some "OBJF_READNOW" code from dwarf2_debug_names_index - The dwarf2_debug_names_index code treats a NULL debug_names_table as - if it were from OBJF_READNOW. However, this trick is only done for - gdb_index, never for debug_names -- see dwarf2_initialize_objfile. - - Let mapped index classes create the quick_symbol_functions object - This changes the mapped index classes to create the - quick_symbol_functions objects. This is a step toward having a more - abstract interface to mapped indices. - - Give mapped_index_base a virtual destructor - This changes mapped_index_base to have a virtual destructor, so it can - be destroyed via its base class. - - Move mapped_index_base to new header file - This moves mapped_index_base and the helper struct name_component to a - new header file in gdb/dwarf2/. - -2022-04-20 Jan Beulich - - x86: reject all invalid SAE variants - So far an SAE-only specifier was accepted for static-rounding insns, - while SAE-only insns didn't accept static rounding specifiers. If - anything it would make sense the other way around, allowing SAE-only - insns to have the (ignored) rounding mode specified individually rather - than globally via -mevexrcig=. But for now make things match the SDM. - -2022-04-20 Alan Modra - - Re: xcoff: implement linker relaxation - * xcofflink.c (xcoff_stub_csect_name): Increase buffer size. - (xcoff_stub_get_csect_in_range, xcoff_build_one_stub): Whitespace. - (bfd_xcoff_size_stubs): Cast PRIx64 arg to required type. - Don't use freed stub_name. - - Revert "as: Reject unknown -gXXX option" testsuite - This reverts the test committed as part of 6ea673e2d6. - -2022-04-20 Cl?ment Chigot - - xcoff: implement linker relaxation - bfd/ChangeLog: - - * 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. - - ld/ChangeLog: - - * 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 - - Stubs (added in a later patch) will generate new .loader symbols, once the allocations have been done. Thus, the .loader section cannot be layout before that. - bfd/ChangeLog: - - * 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. - - include/ChangeLog: - - * coff/xcoff.h (struct xcoff_loader_info): Add ldrel_count and - libpath fields. - - ld/ChangeLog: - - * emultempl/aix.em (_after_allocation): New function. - -2022-04-20 Tom Tromey - - Use symbol_symtab accessor in compile-object-load.c - I noticed that compile-object-load.c directly references owner.symtab - of a symbol. However, I think it's better for all users to call - symbol_symtab. This patch makes this change. - -2022-04-20 Nick Clifton - - Add linker warning for when it creates an executable stack. - PR 29072 - -2022-04-20 Tom Tromey - - Micro-optimize cooked_index_entry::full_name - I noticed that cooked_index_entry::full_name can return the canonical - string when there is no parent entry. - - Regression tested on x86-64 Fedora 34. - -2022-04-20 Tiezhu Yang - - gdb: LoongArch: Implement loongarch_scan_prologue() - If can't determine prologue from the symbol table, need to examine - instructions. Implement loongarch_scan_prologue() to analyze the - function prologue from START_PC to LIMIT_PC, return the address of - the first instruction past the prologue. - -2022-04-20 GDB Administrator - - Automatic date update in version.in - -2022-04-19 H.J. Lu - - as: Reject unknown -gXXX option - * as.c (parse_args): Reject unknown -gXXX option. - * testsuite/gas/all/empty.s: New file. - * testsuite/gas/all/pr29067.d: Likewise. - * testsuite/gas/all/pr29067.err: Likewise. - * testsuite/gas/all/gas.exp: Run pr29067. - -2022-04-19 Lancelot SIX - - gdb/selftest-arch: Make register_test_foreach_arch generate arch tests lazily - The register_test_foreach_arch is used to instantiate a given selftest - for all architectures supported by GDB. It is used in many _initialize_* - functions (under initialize_all_files, called by gdb_init). - - Because the call is done during GDB's initialization, and because there - is no guaranty about the order in which all the _initialize_* functions - are executed, when register_test_foreach_arch is called, GDB is not - fully initialized. Specifically, when a particular initialize function - is executed, only the architectures registered at that point are listed - by gdbarch_printable_names. - - As a consequence, the list of selftest effectively executed depends on - the order the _initialize_* functions are called. This can be observed - with the following: - - $ ./gdb/gdb \ - -data-directory ./gdb/data-directory \ - -quiet -batch -ex "maint selftest" 2>&1 \ - | grep -E "Ran [0-9]+ unit tests" - Ran 145 unit tests, 0 failed - $ GDB_REVERSE_INIT_FUNCTIONS=1 ./gdb/gdb \ - -data-directory ./gdb/data-directory \ - -quiet -batch -ex "maint selftest" 2>&1 \ - | grep -E "Ran [0-9]+ unit tests" - Ran 82 unit tests, 0 failed - - To fix this, make register_test_foreach_arch register a lazy selftest - generator. This way when the test generator is eventually executed, all - architectures are registered and we do not have a dependency on the - order the initialize functions are executed in. - - Tested on x86_64-linux - - Change-Id: I88eefebf7d372ad672f42d3a103e89354bc8a925 - -2022-04-19 Lancelot SIX - - gdbsupport/selftest: Allow lazy registration - This patch adds a way to delay the registration of tests until the - latest possible moment. This is intended for situations where GDB needs - to be fully initialized in order to decide if a particular selftest can - be executed or not. - - This mechanism will be used in the next patch. - - Change-Id: I7f6b061f4c0a6832226c7080ab4e3a2523e1b0b0 - -2022-04-19 Lancelot SIX - - gdbsupport/selftest: Replace for_each_selftest with an iterator_range - Remove the callback-based selftests::for_each_selftest function and use - an iterator_range instead. - - Also use this iterator range in run_tests so all iterations over the - selftests are done in a consistent way. This will become useful in a - later commit. - - Change-Id: I0b3a5349a7987fbcb0071f11c394e353df986583 - -2022-04-19 Jan Beulich - - x86: don't mistake ordinary immediates for SAE / rounding control - The way SAE templates are constructed was always puzzling me (including - the need for separate templates in the first place), and expressing the - extzra attribute via Imm8 actually has a bad effect: Ordinary immediates - would also be accepted, leading to an extra byte being added after the - instruction (i.e. generating bad code). Before re-working this (in - particular to accept proper Intel syntax there), fix the immediate issue - by adding the so far missing check. - - x86: VCMPSH is Evex.LLIG - These were mistakenly flagged as Evex.128. Getting the LLIG status right - for insns allowing for SAE is a prereq for planned further work. - - x86: drop stray CheckRegSize from VFPCLASSPH - Like VFPCLASSP{S,D} it has only a single operand allowing multiple - sizes, hence there are no pairs of operands to check for consistent - size. - - x86/Intel: test non-legacy VCVT{,U}SI2SH insn forms - For an unclear reason corresponding AVX512F tests were apparently not - cloned or used as reference here, and instead the bogus legacy forms of - the insns (with the embedded rounding specifier not last) were used. - -2022-04-19 Jan Beulich - - x86: correct and simplify NOP disassembly - It's not just REX.W which is ignored with opcode 0x90. The same goes for - REX.R and REX.X as well as empty REX. None of these are forms of - "xchg %eax,%eax" (which would mean zero-extending %eax to %rax), so they - also shouldn't be disassembled this way. - - While there simplify things: A single hook function suffices, thus - making it unnecessary to keep two expressions in sync. And checking - ins->address_mode for mode_64bit also is unnecessary, as "rex" can be - non-zero only in that case anyway. - -2022-04-19 GDB Administrator - - Automatic date update in version.in - -2022-04-18 Simon Marchi - - gdb/testsuite/dwarf: don't automatically add directory and file entry for DWARF 5 - To support DWARF 5 in the DWARF assembler line tables, we currently copy - the first user-provided directory and the first user-provided files and - make them elements at indices 0 in the directory and file name tables. - That was a sufficient behavior at the time (see commit 44fda089397a - ("[gdb/testsuite] Support .debug_line v5 in dwarf assembler")), but in - the following patches, I would need to have finer grained control on - what is generated exactly. For example, I'd like to generate a DWARF 5 line - table with just a single file and a single directory. - - Get rid of this behavior, and implement what is suggested in - 44fda089397a: make include_dir return the directory index that can be - used to refer to that directory entry (based on the DWARF version), and - use it afterwards. - - Adjust dw2-lines.exp and dw2-prologue-end.exp accordingly. Their produced - DWARF5 binaries will change a bit, in that they will now have a single - directory and file, where they had two before. But it doesn't change - the expected GDB behavior. - - Change-Id: I5459b16ac9b7f28c34c9693c35c9afd2ebb3aa3b - -2022-04-18 Simon Marchi - - gdb: use gdb_tilde_expand instead of gdb_tilde_expand_up in source_script_with_search - Since this is the latest use of gdb_tilde_expand_up, remove it. - - Change-Id: I964c812ce55fe087876abf91e7a3577ad79c0425 - -2022-04-18 Simon Marchi - - gdbsupport: make gdb_realpath_keepfile return an std::string - I'm trying to switch these functions to use std::string instead of char - arrays, as much as possible. Some callers benefit from it (can avoid - doing a copy of the result), while others suffer (have to make one more - copy). - - Change-Id: I793aab17baaef8345488f4c40b9094e2695425bc - -2022-04-18 Simon Marchi - - gdbsupport: make gdb_abspath return an std::string - I'm trying to switch these functions to use std::string instead of char - arrays, as much as possible. Some callers benefit from it (can avoid - doing a copy of the result), while others suffer (have to make one more - copy). - - Change-Id: Iced49b8ee2f189744c5072a3b217aab5af17a993 - -2022-04-18 Simon Marchi - - gdb: call gdb_tilde_expand instead of gdb_tilde_expand_up in source_script_with_search - This removes a use of gdb_tilde_expand_up, which is removed later in - this series. - - Change-Id: I5887d526cea987103e4ca24514a982b0a28e992a - -2022-04-18 Tom Tromey - - Update gnulib - This updates gnulib to a relatively recent commit. Most of this was - done by the gnulib import script; the only change I made was to - update-gnulib.sh. - - Tested on x86-64 Fedora 34. I also did a mingw cross build. - -2022-04-18 Tom Tromey - - Fix C++ cast of derived class to base class - PR c++/28907 points out that casting from a derived class to a base - class fails in some situations. The problem turned out to be a - missing use of value_embedded_offset. One peculiarity here is that, - if you managed to construct a pointer-to-derived with an embedded - offset of 0, the cast would work -- for example, one of the two new - tests here passes without the patch. - - This embedded offset stuff is an endless source of bugs. I wonder if - it's possible to get rid of it somehow. - - Regression tested on x86-64 Fedora 34. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28907 - -2022-04-18 Simon Marchi - - gdb/testsuite: make gdb.ada/mi_prot.exp stop at expected location - This test attempts to run until the line marked "STOP", which is at - prot.adb:34. It first runs until the "main" symbol, then tries to place - a breakpoint by line at line 34, without specifying the source file. When looking at the logs: - - -break-insert -t 34^M - ^done,bkpt={number="2",type="breakpoint",disp="del",enabled="y",addr="0x0000555555558a6c",func="adafinal",file="/home/simark/build/binutils-gdb-one-target/gdb/testsuite/outputs/gdb.ada/mi_pro t/b~prot.adb",fullname="/home/simark/build/binutils-gdb-one-target/gdb/testsuite/outputs/gdb.ada/mi_prot/b~prot.adb",line="44",thread-groups=["i1"],times="0",original-location="/home/simark/b uild/binutils-gdb-one-target/gdb/testsuite/outputs/gdb.ada/mi_prot/b~prot.adb:34"}^M - ... continues ... - *stopped,reason="breakpoint-hit",disp="del",bkptno="2",frame={addr="0x0000555555558a6c",func="adafinal",args=[],file="/home/simark/build/binutils-gdb-one-target/gdb/testsuite/outputs/gdb.ada/ mi_prot/b~prot.adb",fullname="/home/simark/build/binutils-gdb-one-target/gdb/testsuite/outputs/gdb.ada/mi_prot/b~prot.adb",line="44",arch="i386:x86-64"},thread-id="1",stopped-threads="all",co re="8"^M - - ... we see that the breakpoint is placed in some generated file, not in - the test source file as we expect. The problem is that "b main" in Ada - does not place a breakpoint on the "Ada main", but on some symbol in a - generated source file. So when stopped at the "main" symbol, we are not - stopped in the file that contains the STOP marker at line 34. - - The test passes anyway today, so it doesn't seem to matter that we are - stopped at an unexpected location. But it starts failing with this - patch [1], because b~prot.adb:34 happens to be between two functions, so - the breakpoint doesn't resolve. - - Fix this by placing the breakpoint at "$srcfile:$line", which works - regardless of what is the current source file. - - However, this ends up introducing a path in the test name. Modify - mi_tbreak and mi_continue_to_line to avoid that. - - [1] https://sourceware.org/pipermail/gdb-patches/2022-April/187686.html - - Change-Id: I742e2a9993046dcb5e30c64fe2ad920a363baf75 - -2022-04-18 Vignesh Balasubramanian - - gdb/testsuite: add text_segment option to gdb_compile - LLVM's lld linker doesn't have the "-Ttext-segment" option, but - "--image-base" can be used instead. - - To centralize the logic of checking which option is supported, add the - text_segment option to gdb_compile. Change tests that are currently - using -Ttext-segment to use that new option instead. - - This patch fixes only compilation error, for example: - - Before: - - $ make check TESTS="gdb.base/jit-elf.exp" RUNTESTFLAGS="CC_FOR_TARGET=clang LDFLAGS_FOR_TARGET=-fuse-ld=ld" - Running /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/jit-elf.exp ... - gdb compile failed, clang-13: warning: -Xlinker -Ttext-segment=0x7000000: 'linker' input unused [-Wunused-command-line-argument] - - After: - - $ make check TESTS="gdb.base/jit-elf.exp" RUNTESTFLAGS="CC_FOR_TARGET=clang LDFLAGS_FOR_TARGET=-fuse-ld=ld" - Running /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/jit-elf.exp ... - FAIL: gdb.base/jit-elf.exp: one_jit_test-1: continue to breakpoint: break here 1 - FAIL: gdb.base/jit-elf.exp: one_jit_test-1: continue to breakpoint: break here 2 - FAIL: gdb.base/jit-elf.exp: one_jit_test-2: continue to breakpoint: break here 1 - FAIL: gdb.base/jit-elf.exp: one_jit_test-2: info function ^jit_function - FAIL: gdb.base/jit-elf.exp: one_jit_test-2: continue to breakpoint: break here 2 - FAIL: gdb.base/jit-elf.exp: attach: one_jit_test-2: continue to breakpoint: break here 1 - FAIL: gdb.base/jit-elf.exp: attach: one_jit_test-2: break here 1: attach - FAIL: gdb.base/jit-elf.exp: PIE: one_jit_test-1: continue to breakpoint: break here 1 - FAIL: gdb.base/jit-elf.exp: PIE: one_jit_test-1: continue to breakpoint: break here 2 - - === gdb Summary === - - # of expected passes 26 - # of unexpected failures 9 - - Change-Id: I3678c5c9bbfc2f80671698e28a038e6b3d14e635 - -2022-04-18 Enze Li - - gdb: fix using clear command to delete non-user breakpoints(PR cli/7161) - The clear command shouldn't delete momentary and internal breakpoints, - nor internal breakpoints created via Python's gdb.Breakpoint. - - This patch fixes this issue and adds a testcase. - - Regression tested on x86_64 openSUSE Tumbleweed(VERSION_ID="20220413"). - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7161 - -2022-04-18 GDB Administrator - - Automatic date update in version.in - -2022-04-17 GDB Administrator - - Automatic date update in version.in - -2022-04-16 Tom Tromey - - Add comments to dwarf2/abbrev-cache.h - This patch started when I noticed that the unordered_set include - wasn't needed in abbrev-cache.h. (That was probably leftover from - some earlier implementation of the class.) Then, I noticed that the - class itself was under-commented. This patch fixes both issues. - -2022-04-16 GDB Administrator - - Automatic date update in version.in - -2022-04-15 Tom Tromey - - Return void from gdb_putc - I don't think it's very useful to return the character from gdb_putc, - so this patch changes it to return void. - -2022-04-15 Tom Tromey - - Handle "set height 1" - PR cli/17151 points out that "set height 1" has pathological behavior - in gdb. What I see is that gdb will endlessly print the pagination - prompt. This patch takes a simple and expedient approach to a fix: - pretend that the height is really 2. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17151 - -2022-04-15 Tom Tromey - - Allow word wrapping even when paging is disabled - PR cli/20741 points out that when pagination is disabled, this also - disabled word wrapping. However, the manual documents that these - settings are separate -- if you intend to disable the wrapping, you - must use "set width unlimited". - - This patch fixes the bug by letting the pagination-disabled case fall - through to the code that also handles word-wrapping. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=20741 - -2022-04-15 Tom Tromey - - Implement value_print for Rust - This adds an implementation of the value_print method to Rust. As - described in PR rust/22254, this removes a bit of weird-looking output - from some "print"s -- because c_value_print is bypassed. I don't have - a test for the bug that inspired this patch, because I only know how - to reproduce it when using a relatively old Rust compiler. However, - the new "cast-printing" code in value_print is required, because - omitting this causes some existing tests to fail. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22254 - -2022-04-15 Tom Tromey - - Reimplement Rust slice printing - The current nightly Rust compiler (aka 1.61) added better DWARF - representation for unsized types. Fixing this is PR rust/21466; but - the code is actually the same as what is required to make slice - printing more useful, which is PR rust/23871. This patch implements - this. I tested this against various Rust compilers: 1.48, current - stable, current beta, and current nightly. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=21466 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=23871 - -2022-04-15 Tom Tromey - - Remove some dead code from the Rust value printer - This removes a bit of dead code from the Rust value printer. This - code wasn't always dead -- it fixed a real bug, and a test case was - added for it. However, once val_print was removed, it became - unnecessary. - -2022-04-15 Tom Tromey - - Match rustc beta versions - The rust_compiler_version proc extracts the Rust compiler version from - the "rustc --version" output. For a beta compiler, the output looks - like: - - rustc 1.60.0-beta.6 (7bccde197 2022-03-22) - - This patch slightly relaxes the regexp -- removing a space -- so that - this can be understood by this proc. - -2022-04-15 Tom de Vries - - [gdb/testsuite] Fix gdb.ada/float-bits.exp with -m32 - With test-case gdb.ada/float-bits.exp and native we get: - ... - (gdb) print 16llf#7FFFF7FF4054A56FA5B99019A5C8#^M - $9 = 5.0e+25^M - (gdb) PASS: gdb.ada/float-bits.exp: print 16llf#7FFFF7FF4054A56FA5B99019A5C8# - ... - but with target board unix/-m32 we have instead: - ... - (gdb) print 16llf#7FFFF7FF4054A56FA5B99019A5C8#^M - Cannot export value 2596145952482202326224873165792712 as 96-bits \ - unsigned integer (must be between 0 and 79228162514264337593543950335)^M - (gdb) FAIL: gdb.ada/float-bits.exp: print 16llf#7FFFF7FF4054A56FA5B99019A5C8# - ... - - Fix this by testing whether 16llf is supported by doing ptype long_long_float - which gets us either: - ... - type = <16-byte float>^M - ... - or: - ... - type = <12-byte float>^M - ... - - Tested on x86_64-linux with native and unix/-m32. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29041 - -2022-04-15 Tom Tromey - - Remove WITH_SIM define - Since score-tdep.c was removed, the WITH_SIM define is not used in - gdb. This patch removes it. - - Note that re-running autoheader shows a separate change that was - missed. I've kept it in this patch to avoid extra work. - -2022-04-15 Tom de Vries - - [gdb/testsuite] Fix gdb.go/methods.exp with check-readmore - When running test-case gdb.go/methods.exp with make check we have: - ... - (gdb) break main.T.Foo^M - Function "main.T.Foo" not defined.^M - Make breakpoint pending on future shared library load? (y or [n]) n^M - (gdb) XFAIL: gdb.go/methods.exp: gdb_breakpoint: set breakpoint at main.T.Foo - ... - but with make check-readmore the XFAIL fails to trigger: - ... - (gdb) break main.T.Foo^M - Function "main.T.Foo" not defined.^M - Make breakpoint pending on future shared library load? (y or [n]) n^M - (gdb) FAIL: gdb.go/methods.exp: gdb_breakpoint: set breakpoint at main.T.Foo - ... - - This happens because this gdb_test_multiple "maintenance print symbols" - regexp: - ... - -re "\r\n$gdb_prompt $" { - ... - matches the entire command output. - - Fix this by adding the missing ^ at the regexp start. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29064 - -2022-04-15 GDB Administrator - - Automatic date update in version.in - -2022-04-14 Pedro Alves - - gdbserver: Eliminate prepare_to_access_memory - Given: - - - The prepare_to_access_memory machinery was added for non-stop mode. - - - Only Linux supports non-stop. - - - Linux no longer needs the prepare_to_access_memory machinery. In - fact, after the previous patch, - linux_process_target::prepare_to_access_memory became a nop. - - Thus, prepare_to_access_memory can go away, simplifying core GDBserver - code. - - Change-Id: I93ac8bfe66bd61c3d1c4a0e7d419335163120ecf - -2022-04-14 Pedro Alves - - gdbserver/linux: Access memory even if threads are running - Similarly to how the native Linux target was changed - and subsequently reworked in these commits: - - 05c06f318fd9 Linux: Access memory even if threads are running - 8a89ddbda2ec Avoid /proc/pid/mem races (PR 28065) - - ... teach GDBserver to access memory even when the current thread is - running, by always accessing memory via /proc/PID/mem. - - The existing comment: - - /* Neither ptrace nor /proc/PID/mem allow accessing memory through a - running LWP. */ - - ... is incorrect for /proc/PID/mem does allow that. - - Actually, from GDB's perspective, GDBserver could already access - memory while threads were running, but at the expense of pausing all - threads for the duration of the memory access, via - prepare_to_access_memory. This new implementation does not require - pausing any thread, thus - linux_process_target::prepare_to_access_memory / - linux_process_target::done_accessing_memory become nops. A subsequent - patch will remove the whole prepare_to_access_memory infrastructure - completely. - - The GDBserver linux-low.cc implementation is simpler than GDB's - linux-nat.c's, because GDBserver always adds the unfollowed vfork/fork - children to the process list immediately when the fork/vfork event is - seen out of ptrace. I.e., there's no need to keep the file descriptor - stored on a side map, we can store it directly in the process - structure. - - Change-Id: I0abfd782ceaa4ddce8d3e5f3e2dfc5928862ef61 - -2022-04-14 Pedro Alves - - gdbserver: special case target_write_memory len==0 - The next patch in this series adds a common helper routine for both - memory reads and writes, like this: - - static int - proc_xfer_memory (CORE_ADDR memaddr, unsigned char *readbuf, - const gdb_byte *writebuf, int len) - { - gdb_assert ((readbuf == nullptr) != (writebuf == nullptr)); - ... - } - - int - linux_process_target::read_memory (CORE_ADDR memaddr, - unsigned char *myaddr, int len) - { - return proc_xfer_memory (memaddr, myaddr, nullptr, len); - } - - linux_process_target::write_memory (CORE_ADDR memaddr, - const unsigned char *myaddr, int len) - { - return proc_xfer_memory (memaddr, nullptr, myaddr, len); - } - - Surprisingly, the assertion fails. That happens because it can happen - that target_write_memory is called with LEN==0, due to this in - gdb/remote.c: - - /* Determine whether the remote target supports binary downloading. - This is accomplished by sending a no-op memory write of zero length - to the target at the specified address. (...) */ - - void - remote_target::check_binary_download (CORE_ADDR addr) - { - ... - p = rs->buf.data (); - *p++ = 'X'; - p += hexnumstr (p, (ULONGEST) addr); - *p++ = ','; - p += hexnumstr (p, (ULONGEST) 0); - *p++ = ':'; - *p = '\0'; - - In this scenario, in gdbserver's target_write_memory, the "myaddr" - argument of the_target->write_memory is passed the data() of a local - gdb::byte_vector (which is a specialized std::vector). It's valid for - std::vector::data() to return NULL when the vector is empty. - - This commit adds an early return to target_write_memory to avoid - target backends having to care about this. For good measure, do the - same on the read side, in read_inferior_memory. - - Change-Id: Iac8f04fcf99014c624ef4036bd318ca1771ad491 - -2022-04-14 Pedro Alves - - gdbserver/qXfer::threads, prepare_to_access_memory=>target_pause_all - handle_qxfer_threads_proper needs to pause all threads even if the - target can read memory when threads are running, so use - target_pause_all instead, which is what the Linux implementation of - prepare_to_access_memory uses. (Only Linux implements this hook.) - - A following patch will make the Linux backend be able to access memory - when threads are running, and thus will also make - prepare_to_access_memory do nothing, which would cause testsuite - regressions without this change. - - Change-Id: I127fec7246b7c45b60dfa7341e781606bf54b5da - -2022-04-14 Tom Tromey - - Ignore 0,0 entries in .debug_aranges - When running the internal AdaCore test suite against the new DWARF - indexer, I found one regression on RISC-V. The test in question uses - --gc-sections, and winds up with an entry in the middle of a - .debug_aranges that has both address and length of 0. In this - scenario, gdb assumes the entries are terminated and then proceeds to - reject the section because it reads a subsequent entry as if it were a - header. - - It seems to me that, because each header describes the size of each - .debug_aranges CU, it's better to simply ignore 0,0 entries and simply - read to the end. That is what this patch does. - - I've patched an existing test to provide a regression test for this. - -2022-04-14 Tom Tromey - - Use GetThreadDescription on Windows - Windows 10 introduced SetThreadDescription and GetThreadDescription, a - simpler way to set a thread's name. This changes gdb and gdbserver to - use this convention when it is available. - - This is part of PR win32/29050. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29050 - -2022-04-14 Tom Tromey - - Set the worker thread name on Windows - This patch is a bit different from the rest of the series, in that it - is a change to gdb's behavior on the host. It changes gdb's thread - pool to try to set the thread name on Windows, if SetThreadDescription - is available. - - This is part of PR win32/29050. - - This patch isn't likely to be useful to many people in the short term, - because the Windows port of the libstdc++ thread code is not upstream. - (AdaCore uses it, and sent it upstream, but it did not land, I don't - know why.) However, if that patch does ever go in, or presumably if - you build using some other C++ runtime library, then this will be - useful. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29050 - -2022-04-14 Tom Tromey - - Implement thread_name for gdbserver - This changes gdbserver to implement thread_name method. - - Share handle_ms_vc_exception with gdbserver - Currently, gdb's native Windows target implements the exception-based - approach for setting thread names, but gdbserver does not. This patch - moves handle_ms_vc_exception to the shared nat/windows-nat.c code, as - preparation for adding this support to gdbserver. - - Move target_read_string to target/target.c - This moves the two overloads of target_read_string to a new file, - target/target.c, and updates both gdb and gdbserver to build this. - - Remove the byte order parameter to target_read_string - target_read_string takes a byte order parameter, but only uses this to - check whether a given character is zero. This is readily done without - requiring the parameter, so remove it. - - Rename read_string - This renames read_string to be an overload of target_read_string. - This makes it more consistent for the eventual merger with gdbserver. - - Don't call QUIT in read_string - read_string does not need to call QUIT, because target_read_memory - already does. This change is needed to make string-reading usable by - gdbserver. - - Fix possible Cygwin build problem - I noticed that nat/windows-nat.c checks __USEWIDE, but nothing sets it - there -- I forgot to copy over the definition when making this file. - This patch tries to fix the problem. I don't have a Cygwin setup, so - I don't know whether this is sufficient, but it's probably necessary. - -2022-04-14 Lancelot SIX - Pedro Alves - - gdb/testsuite: Fix race in gdb.dwarf2/calling-convention.exp - Pedro Alves warned me that there is a race in - gdb.dwarf2/calling-convention.exp making the test sometimes fail on his - setup. This can be reliably reproduced using : - - make check-read1 TESTS="gdb.dwarf2/calling-convention.exp" - - The relevant part of the gdb.log file is: - - return 35 - Function 'foo' does not follow the target calling convention. - If you continue, setting the return value will probably lead to unpredictable behaviors. - Make foo return now? (y or n) PASS: gdb.dwarf2/calling-convention.exp: return 35 - n - Not confirmed - (gdb) FAIL: gdb.dwarf2/calling-convention.exp: finish - - The issue is that when doing the test for "return 35", the DejaGnu test - sends "n" (to tell GDB not to perform the return action) but never - consumes the "Not confirmed" acknowledgment sent by GDB. Later, when - trying to do the next test, DejaGnu tries to match the leftover output - from the "return" test. As this output is not expected, the test fails. - - Fix by using gdb_test to send the "n" answer and match the confirmation - and consume all output to the prompt. - - Also do minor adjustments to the main regex: - - Remove the leading ".*" which is not required. - - Ensure that the "?" from the question is properly escaped. - - Tested on x86_64-gnu-linux, using - - - make check TESTS="gdb.dwarf2/calling-convention.exp" - - make check-read1 TESTS="gdb.dwarf2/calling-convention.exp" - - make check-readmore TESTS="gdb.dwarf2/calling-convention.exp" - - Change-Id: I42858b13db2cbd623c5c1739de65ad423e0c0938 - -2022-04-14 Tom Tromey - - Silence -Wmaybe-uninitialized warning from target_waitstatus - Currently, one use of target_waitstatus yields a warning: - - target/waitstatus.h: In function 'void stop_all_threads()': - target/waitstatus.h:175:13: warning: 'ws.target_waitstatus::m_value' may be used uninitialized in this function [-Wmaybe-uninitialized] - 175 | m_value = other.m_value; - | ~~~~~~~~^~~~~~~~~~~~~~~ - - This patch silences the warning. I tried the "volatile member" - approach that was used for gdb::optional, but that didn't work, so - this patch simply initializes the member. - -2022-04-14 Tom Tromey - - Fix regression on Windows with WOW64 - Internally at AdaCore, we recently started testing a 64-bit gdb - debugging 32-bit processes. This failed with gdb head, but not with - gdb 11. - - The tests fail like this: - - Starting program: [...].exe - warning: Could not load shared library symbols for WOW64_IMAGE_SECTION. - Do you need "set solib-search-path" or "set sysroot"? - warning: Could not load shared library symbols for WOW64_IMAGE_SECTION. - Do you need "set solib-search-path" or "set sysroot"? - warning: Could not load shared library symbols for NOT_AN_IMAGE. - Do you need "set solib-search-path" or "set sysroot"? - warning: Could not load shared library symbols for NOT_AN_IMAGE. - Do you need "set solib-search-path" or "set sysroot"? - - After some debugging and bisecting, to my surprise the bug was - introduced by commit 183be222 ("gdb, gdbserver: make target_waitstatus - safe"). - - The problem occurs in handle_exception. Previously the code did: - - - ourstatus->kind = TARGET_WAITKIND_STOPPED; - [...] - case EXCEPTION_BREAKPOINT: - [...] - - ourstatus->kind = TARGET_WAITKIND_SPURIOUS; - [...] - /* FALLTHROUGH */ - case STATUS_WX86_BREAKPOINT: - DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_BREAKPOINT"); - - ourstatus->value.sig = GDB_SIGNAL_TRAP; - [...] - - last_sig = ourstatus->value.sig; - - However, in the new code, the fallthrough case does: - - + ourstatus->set_stopped (GDB_SIGNAL_TRAP); - - ... which changes the 'kind' in 'ourstatus' after falling through. - - This patch rearranges the 'last_sig' setting to more closely match - what was done before (this is probably not strictly needed but also - seemed harmless), and removes the fall-through in the - 'ignore_first_breakpoint' case when __x86_64__ is defined. - -2022-04-14 Tom Tromey - - Reorganize Python events documentation - This slightly reorganizes the Python events documentation. It hoists - the "ThreadEvent" text out of the list of events, where it seemed to - be misplaced. It tidies the formatting a little bit (adding some - vertical space for easier reading in info), fixes a typo, adds some - missing commas, and fixes an incorrect reference to NewInferiorEvent. - -2022-04-14 Simon Marchi - - gdb: remove move constructor and move assignment operator from cooked_index - Building with clang++-14, I see: - - CXX dwarf2/cooked-index.o - In file included from /home/smarchi/src/binutils-gdb/gdb/dwarf2/cooked-index.c:21: - /home/smarchi/src/binutils-gdb/gdb/dwarf2/cooked-index.h:172:12: error: explicitly defaulted move constructor is implicitly deleted [-Werror,-Wdefaulted-function-deleted] - explicit cooked_index (cooked_index &&other) = default; - ^ - /home/smarchi/src/binutils-gdb/gdb/dwarf2/cooked-index.h:225:16: note: move constructor of 'cooked_index' is implicitly deleted because field 'm_storage' has a deleted move constructor - auto_obstack m_storage; - ^ - /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/gdb_obstack.h:128:28: note: 'auto_obstack' has been explicitly marked deleted here - DISABLE_COPY_AND_ASSIGN (auto_obstack); - ^ - In file included from /home/smarchi/src/binutils-gdb/gdb/dwarf2/cooked-index.c:21: - /home/smarchi/src/binutils-gdb/gdb/dwarf2/cooked-index.h:174:17: error: explicitly defaulted move assignment operator is implicitly deleted [-Werror,-Wdefaulted-function-deleted] - cooked_index &operator= (cooked_index &&other) = default; - ^ - /home/smarchi/src/binutils-gdb/gdb/dwarf2/cooked-index.h:225:16: note: move assignment operator of 'cooked_index' is implicitly deleted because field 'm_storage' has a deleted move assignment operator - auto_obstack m_storage; - ^ - /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/gdb_obstack.h:128:3: note: 'operator=' has been explicitly marked deleted here - DISABLE_COPY_AND_ASSIGN (auto_obstack); - ^ - /home/smarchi/src/binutils-gdb/gdb/../include/ansidecl.h:425:8: note: expanded from macro 'DISABLE_COPY_AND_ASSIGN' - void operator= (const TYPE &) = delete - ^ - - We explicitly make cooked_index have a default move constructor and - move assignment operator. But it doesn't actually happen because - cooked_index has a field of type auto_obstack, which isn't movable. - We don't actually need cooked_index to be movable at the moment, so - remove those lines. - - Change-Id: Ifc1fe3d7d67e3ae1a14363d6c1869936fe80b0a2 - -2022-04-14 Tom Tromey - - Let std::thread check pass even without pthreads - Currently, the configure check for std::thread relies on pthreads - existing. However, this means that if std::thread is implemented for - a non-pthreads host, then the check will yield the wrong answer. This - happened in AdaCore internal builds. Here, we have this GCC patch: - - https://gcc.gnu.org/legacy-ml/gcc-patches/2019-06/msg01840.html - - ... which adds mingw support to GCC's gthreads implementation, and - also to std::thread. - - This configure change fixes this problem and enables threading for - gdb. - -2022-04-14 Tiezhu Yang - - gdb: fix build errors in gdbsupport/thread-pool.h used with old gcc - When I build gdb with gcc 8.3, there exist the following build errors, - rename the typedef to task_t to fix them. - - CXX thread-pool.o - In file included from /home/loongson/gdb.git/gdbsupport/thread-pool.cc:21: - /home/loongson/gdb.git/gdbsupport/../gdbsupport/thread-pool.h: In member function ‘std::future gdb::thread_pool::post_task(std::function&&)’: - /home/loongson/gdb.git/gdbsupport/../gdbsupport/thread-pool.h:69:44: error: declaration of ‘task’ shadows a previous local [-Werror=shadow=local] - std::packaged_task task (std::move (func)); - ^~~~ - /home/loongson/gdb.git/gdbsupport/../gdbsupport/thread-pool.h:102:39: note: shadowed declaration is here - typedef std::packaged_task task; - ^~~~ - /home/loongson/gdb.git/gdbsupport/../gdbsupport/thread-pool.h: In member function ‘std::future<_Res> gdb::thread_pool::post_task(std::function&&)’: - /home/loongson/gdb.git/gdbsupport/../gdbsupport/thread-pool.h:80:41: error: declaration of ‘task’ shadows a previous local [-Werror=shadow=local] - std::packaged_task task (std::move (func)); - ^~~~ - /home/loongson/gdb.git/gdbsupport/../gdbsupport/thread-pool.h:102:39: note: shadowed declaration is here - typedef std::packaged_task task; - ^~~~ - -2022-04-14 Tom de Vries - - [gdb/testsuite] Detect 'No MPX support' - On openSUSE Leap 15.3, mpx support has been disabled for m32, so I run into: - ... - (gdb) run ^M - Starting program: outputs/gdb.arch/i386-mpx/i386-mpx ^M - [Thread debugging using libthread_db enabled]^M - Using host libthread_db library "/lib64/libthread_db.so.1".^M - No MPX support^M - ... - and eventually into all sort of fails in this and other mpx test-cases. - - Fix this by detecting the "No MPX support" message in have_mpx. - - Tested on x86_64-linux with target boards unix and unix/-m32. - -2022-04-14 Sergei Trofimovich - - M68K: avoid quadratic slowdlow in label alignment check - Before the change tc-m68k maintained a list of seen labels. - Alignment check traversed label list to resolve symbol to label. - This caused quadratic slowdown as each symbol was checked against - each label. Worst affected files are the ones built with debugging - enabled as DWARF generates many labels. - - The change embeds auxiliary label information right into symbol using - TC_SYMFIELD_TYPE. - - Before the change test from PR 29058 did not finish in 10 minutes. After - the change it finishes in 2 seconds. - - gas/ChangeLog: - - PR 29058 - * config/tc-m68k.h (TC_SYMFIELD_TYPE): define as m68k_tc_sy. - * config/tc-m68k.c (m68k_frob_label): Use TC_SYMFIELD_TYPE to - store label information. - -2022-04-14 caiyinyu - - ld:LoongArch: Fix glibc fail: tst-audit25a/b. - bfd/ - - * elfnn-loongarch.c: Add new func elf_loongarch64_hash_symbol. - -2022-04-14 GDB Administrator - - Automatic date update in version.in - -2022-04-13 Simon Marchi - - gdb: add ATTRIBUTE_PRINTF to complaint_interceptor::issue_complaint - Fix this error when building with clang++-14: - - CXX complaints.o - /home/smarchi/src/binutils-gdb/gdb/complaints.c:130:65: error: format string is not a string literal [-Werror,-Wformat-nonliteral] - g_complaint_interceptor->m_complaints.insert (string_vprintf (fmt, args)); - ^~~ - - Change-Id: I0ef11f970510eb8638d1651fa0d5eeecd6a9d31a - -2022-04-13 Simon Marchi - - gdb: fix clang build failure in msymbol_is_mips - Building with clang++-14, I see: - - CXX mips-tdep.o - /home/smarchi/src/binutils-gdb/gdb/mips-tdep.c:453:12: error: use of bitwise '|' with boolean operands [-Werror,-Wbitwise-instead-of-logical] - return !(MSYMBOL_TARGET_FLAG_MIPS16 (msym) - ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - /home/smarchi/src/binutils-gdb/gdb/mips-tdep.h:54:2: note: expanded from macro 'MSYMBOL_TARGET_FLAG_MIPS16' - (sym)->target_flag_1 () - ^ - /home/smarchi/src/binutils-gdb/gdb/mips-tdep.c:453:12: note: cast one or both operands to int to silence this warning - /home/smarchi/src/binutils-gdb/gdb/mips-tdep.h:54:2: note: expanded from macro 'MSYMBOL_TARGET_FLAG_MIPS16' - (sym)->target_flag_1 () - ^ - - That's since commit e165fcef1e7 ("gdb: remove MSYMBOL_TARGET_FLAG_{1,2} - macros"). Fix this by using the boolean || rather than the bitwise |, - since the new methods return bool values. No change in behavior - expected. - - Change-Id: Ia82664135aa25db64c29c92f5c1141859d345bf7 - -2022-04-13 Alexander von Gluck IV - - binutils: enable PE on 32bit haiku build - * config.bfd (x86-haiku): Add i386_pei_vec as a selectable format. - -2022-04-13 Pedro Alves - - Make intrusive_list_node's next/prev private - Tromey noticed that intrusive_list_node leaves its data members - public, which seems sub-optimal. - - This commit makes intrusive_list_node's data fields private. - intrusive_list_iterator, intrusive_list_reverse_iterator, and - intrusive_list do need to access the fields, so they are made friends. - - Change-Id: Ia8b306b40344cc218d423c8dfb8355207a612ac5 - -2022-04-13 Pedro Alves - - Tidy gdb.base/parse_number.exp - Now that Ada is able to parse & print 0xffffffffffffffff (2^64-1) in - hex, move it to the else branch like most other languages. - - Change-Id: Ib305f6bb2b6b230a1190ea783b245b865821094c - -2022-04-13 Alan Modra - - ubsan: member access within null pointer of union - Add some nonsense to cover "undefined behaviour". - - * ldlang.c (section_for_dot): Avoid UB. - -2022-04-13 GDB Administrator - - Automatic date update in version.in - -2022-04-12 Tom Tromey - - Fix bug in Ada number lexing - On irc, Pedro pointed out that Ada couldn't properly handle - 0xffffffffffffffff. This used to work, but is a regression due to - some patches I wrote in the Ada lexer. This patch fixes the bug. - -2022-04-12 Simon Marchi - - gdb: fix "passing NULL to memcpy" UBsan error in dwarf2/cooked-index.c - Reading a simple file compiled with : - - $ gcc -DONE=1 -gdwarf-4 -g3 test.c - $ gcc --version - gcc (Ubuntu 9.4.0-1ubuntu1~20.04) 9.4.0 - - I get: - - Reading symbols from /tmp/cwd/a.out... - /home/smarchi/src/binutils-gdb/gdb/dwarf2/cooked-index.c:332:11: runtime error: null pointer passed as argument 2, which is declared to never be null - - It looks like even if the size is 0 (the size of the `entries` vector is - 0), we shouldn't be passing a NULL pointer to memcpy. And - `entries.data ()` returns NULL. - - Fix that by using std::vector::insert to insert the items of entries - into m_entries. I haven't checked, but it should essentially compile - down to a memcpy, since the vector elements are trivially copyiable. - - Change-Id: I75f1c901e9b522e42e89eb5936e2c70d68eb21e5 - -2022-04-12 Simon Marchi - - gdb: change subfile::line_vector to an std::vector - Change this field to an std::vector to facilitate memory management. - Since the linetable_entry array is copied into the symtab resulting from - the subfile, it is possible to change it without changing how symtab - stores the linetable entries (which would be a much larger change). - - There is a small change in buildsym_compunit::record_line to avoid - accessing a now invalid linetable_entry. Before this patch, we keep a - pointer to the last linetable entry, pop it from the vector, and then - read last->line. It works with the manually-maintained array, but since - we now use std::vector::pop_back, I am afraid that it could be flagged - as an invalid access by the various static / dynamic analysis tools to - access the linetable_entry object after popping it from the vector. - Instead, record just the line number in an optional and use it. - - There are substantial changes in xcoffread.c that simplify the code, but - I can't test them. I was hesitant to do this change because of that, - but I decided to send it anyway. I don't think that an almost dead - platform should hold back improving the code in the common parts of GDB. - - The changes in xcoffread.c are: - - - Make arrange_linetable "arrange" the linetable passed as a parameter, - instead of returning possibly a new one, possibly the same one. - - In the "Process main file's line numbers.", I'm not too sure what - happens. We get the lintable from "main_subfile", "arrange" it, but - then assign the result to the current subfile, obtained with - get_current_subfile. I assume that the current subfile is also the - main one, so now I just call arrange_linetable on the main subfile's - line table. - - Remove that weird "Useless if!!!" FIXME comment. It's been there - forever, but the "if" is still there, so I guess the "if" can stay - there. - - Change-Id: I11799006fd85189e8cf5bd3a168f8f38c2c27a80 - -2022-04-12 Simon Marchi - - gdb: use std::vector for temporary linetable_entry array in arrange_linetable - Reduce manual memory management and make the code a bit easier to read. - This helps me a bit in the following patch. - - I don't have a way to test this, it's best-effort. - - Change-Id: I64af9cd756311deabc6cd95e701dfb21234a40a5 - -2022-04-12 Simon Marchi - - gdb: change subfile::name and buildsym_compunit::m_comp_dir to strings - Change subfile::name to be a string, for easier memory management. - Change buildsym_compunit::m_comp_dir as well, since we move one in to - the other at some point in patch_subfile_names, so it's easier to do - both at the same time. There are various NULL checks for both fields - currently, replace them with empty checks, I think it ends up - equivalent. - - I can't test the change in xcoffread.c, it's best-effort. - - Change-Id: I62b5fb08b2089e096768a090627ac7617e90a016 - -2022-04-12 Simon Marchi - - gdb: allocate subfile with new - Allocate struct subfile with new, initialize its fields instead of - memset-ing it to 0. Use a unique_ptr for the window after a subfile has - been allocated but before it is linked in the buildsym_compunit's list - of subfile (and therefore owned by the buildsym_compunit. - - I can't test the change in xcoffread.c, it's best-effort. I couldn't - find where subfiles are freed in that file, I assume they were - intentionally (or not) leaked. - - Change-Id: Ib3b6877de31b7e65bc466682f08dbf5840225f24 - -2022-04-12 Simon Marchi - - gdb: use decltype instead of typeof in dwarf2/read.c - When building with -std=c++11, I get: - - CXX dwarf2/read.o - /home/smarchi/src/binutils-gdb/gdb/dwarf2/read.c: In function ‘void dwarf2_build_psymtabs_hard(dwarf2_per_objfile*)’: - /home/smarchi/src/binutils-gdb/gdb/dwarf2/read.c:7130:23: error: expected type-specifier before ‘typeof’ - 7130 | using iter_type = typeof (per_bfd->all_comp_units.begin ()); - | ^~~~~~ - - This is because typeof is a GNU extension. Use C++'s decltype keyword - instead. - - Change-Id: Ieca2e8d25e50f71dc6c615a405a972a54de3ef14 - -2022-04-12 Simon Marchi - - gdbsupport: use result_of_t instead of result_of in parallel-for.h - When building with -std=c++11, I get: - - In file included from /home/smarchi/src/binutils-gdb/gdb/unittests/parallel-for-selftests.c:22: /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/parallel-for.h:134:10: error: ‘result_of_t’ is not a member of ‘std’; did you mean ‘result_of’? - 134 | std::result_of_t - | ^~~~~~~~~~~ - | result_of - - This is because result_of_t has been introduced in C++14. Use the - equivalent result_of<...>::type instead. - - result_of and result_of_t have been removed in C++20 though, so I think - we'll need some patches eventually to make the code use invoke_result - instead, depending on the C++ version. - - Change-Id: I4817f361c0ebcdd4b32976898fc368bb302b61b9 - -2022-04-12 Tom Tromey - - Remove dwarf2_per_cu_data::v - Now that the psymtab reader has been removed, the - dwarf2_per_cu_data::v union is no longer needed. Instead, we can - simply move the members from dwarf2_per_cu_quick_data into - dwarf2_per_cu_data and remove the "quick" object entirely. - - Delete DWARF psymtab code - This removes the DWARF psymtab reader. - -2022-04-12 Tom Tromey - - Enable the new DWARF indexer - This patch finally enables the new indexer. It is left until this - point in the series to avoid any regressions; in particular, it has to - come after the changes to the DWARF index writer to avoid this - problem. - - However, if you experiment with the series, this patch can be moved - anywhere from the patch to wire in the new reader to this point. - Moving this patch around is how I got separate numbers for the - parallelization and background finalization patches. - - In the ongoing performance example, this reduces the time from the - baseline of 1.598869 to 0.903534. - -2022-04-12 Tom Tromey - - Adapt .debug_names writer to new DWARF scanner - This updates the .debug_names writer to work with the new DWARF - scanner. - -2022-04-12 Tom Tromey - - Adapt .gdb_index writer to new DWARF scanner - This updates the .gdb_index writer to work with the new DWARF scanner. - The .debug_names writer is deferred to another patch, to make review - simpler. - - This introduces a small hack to psyms_seen_size, but is - inconsequential because this function will be deleted in a subsequent - patch. - -2022-04-12 Tom Tromey - - Genericize addrmap handling in the DWARF index writer - This updates the DWARF index writing code to make the addrmap-writing - a bit more generic. Now, it can handle multiple maps, and it can work - using the maps generated by the new indexer. - - Note that the new addrmap_index_data::using_index field will be - deleted in a future patch, when the rest of the DWARF psymtab code is - removed. - -2022-04-12 Tom Tromey - - Change parameters to write_address_map - To support the removal of partial symtabs from the DWARF index writer, - this makes a small change to have write_address_map accept the address - map as a parameter, rather than assuming it always comes from the - per-BFD object. - - Change the key type in psym_index_map - In order to change the DWARF index writer to avoid partial symtabs, - this patch changes the key type in psym_index_map (and renames that - type as well). Using the dwarf2_per_cu_data as the key makes it - simpler to reuse this code with the new indexer. - - Rename write_psymtabs_to_index - We'll be removing all the psymtab code from the DWARF reader. As a - preparatory step, this renames write_psymtabs_to_index to avoid the - "psymtab" name. - -2022-04-12 Tom Tromey - - "Finalize" the DWARF index in the background - After scanning the CUs, the DWARF indexer merges all the data into a - single vector, canonicalizing C++ names as it proceeds. While not - necessarily single-threaded, this process is currently done in just - one thread, to keep memory costs lower. - - However, this work is all done without reference to any data outside - of the indexes. This patch improves the apparent performance of GDB - by moving it to the background. All uses of the index are then made - to wait for this process to complete. - - In our ongoing example, this reduces the scanning time on gdb itself - to 0.173937 (wall). Recall that before this patch, the time was - 0.668923; and psymbol reader does this in 1.598869. That is, at the - end of this series, we see about a 10x speedup. - -2022-04-12 Tom Tromey - - Parallelize DWARF indexing - This parallelizes the new DWARF indexer. The indexer's storage was - designed so that each storage object and each indexer is fully - independent. This setup makes it simple to scan different CUs - independently. - - This patch creates a new cooked index storage object per thread, and - then scans a subset of all the CUs in each such thread, using gdb's - existing thread pool. - - In the ongoing "gdb gdb" example, this patch reduces the wall time - down to 0.668923, from 0.903534. (Note that the 0.903534 is the time - for the new index -- that is, when the "enable the new index" patch is - rebased to before this one. However, in the final series, that patch - appears toward the end. Hopefully this isn't too confusing.) - -2022-04-12 Tom Tromey - - Pre-read DWARF section data - Because BFD is not thread-safe, we need to be sure that any section - data that is needed is read before trying to do any DWARF indexing in - the background. - - This patch takes a simple approach to this -- it pre-reads the - "info"-related sections. This is done for the main file, but also any - auxiliary files as well, such as the DWO file. - - This patch could be perhaps enhanced by removing some now-redundant - calls to dwarf2_section_info::read. - -2022-04-12 Tom Tromey - - Introduce thread-safe handling for complaints - This introduces a new class that can be used to make the "complaint" - code thread-safe. Instantiating the class installs a new handler that - collects complaints, and then prints them all when the object is - destroyed. - - This approach requires some locks. I couldn't think of a better way - to handle this, though, because the I/O system is not thread-safe. - - It seemed to me that only GDB developers are likely to enable - complaints, and because the complaint macro handle this case already - (before any locks are required), I reasoned that any performance - degradation that would result here would be fine. - - As an aside about complaints -- are they useful at all? I just ignore - them, myself, since mostly they seem to indicate compiler problems - that can't be solved in the GDB world anyway. I'd personally prefer - them to be in a separate tool, like a hypothetical 'dwarflint'. - -2022-04-12 Tom Tromey - - Wire in the new DWARF indexer - This wires the new DWARF indexer into the existing reader code. That - is, this patch makes the modification necessary to enable the new - indexer. It is not actually enabled by this patch -- that will be - done later. - - I did a bit of performance testing for this patch and a few others. I - copied my built gdb to /tmp, so that each test would be done on the - same executable. Then, each time, I did: - - $ ./gdb -nx - (gdb) maint time 1 - (gdb) file /tmp/gdb - - This patch is the baseline and on one machine came in at 1.598869 wall - time. - -2022-04-12 Tom Tromey - - Implement quick_symbol_functions for cooked DWARF index - This implements quick_symbol_functions for the cooked DWARF index. - This is the code that interfaces between the new index and the rest of - gdb. Cooked indexes still aren't created by anything. - - For the most part this is straightforward. It shares some concepts - with the existing DWARF indices. However, because names are stored - pre-split in the cooked index, name lookup here is necessarily - different; see expand_symtabs_matching for the gory details. - -2022-04-12 Tom Tromey - - The new DWARF indexer - This patch adds the code to index DWARF. This is just the scanner; it - reads the DWARF and constructs the index, but nothing calls it yet. - - The indexer is split into two parts: a storage object and an indexer - object. This is done to support the parallelization of this code -- a - future patch will create a single storage object per thread. - -2022-04-12 Tom Tromey - - Introduce the new DWARF index class - This patch introduces the new DWARF index class. It is called - "cooked" to contrast against a "raw" index, which is mapped from disk - without extra effort. - - Nothing constructs a cooked index yet. The essential idea here is - that index entries are created via the "add" method; then when all the - entries have been read, they are "finalize"d -- name canonicalization - is performed and the entries are added to a sorted vector. - - Entries use the DWARF name (DW_AT_name) or linkage name, not the full - name as is done for partial symbols. - - These two facets -- the short name and the deferred canonicalization - -- help improve the performance of this approach. This will become - clear in later patches, when parallelization is added. - - Some special code is needed for Ada, because GNAT only emits mangled - ("encoded", in the Ada lingo) names, and so we reconstruct the - hierarchical structure after the fact. This is also done in the - finalization phase. - - One other aspect worth noting is that the way the "main" function is - found is different in the new code. Currently gdb will notice - DW_AT_main_subprogram, but won't recognize "main" during reading -- - this is done later, via explicit symbol lookup. This is done - differently in the new code so that finalization can be done in the - background without then requiring a synchronization to look up the - symbol. - -2022-04-12 Tom Tromey - - Update skip_one_die for new abbrev properties - This updates skip_one_die to speed it up in the cases where either - sibling_offset or size_if_constant are set. - -2022-04-12 Tom Tromey - - Statically examine abbrev properties - The new DIE scanner works more or less along the lines indicated by - the text for the .debug_names section, disregarding the bugs in the - specification. - - While working on this, I noticed that whether a DIE is interesting is - a static property of the DIE's abbrev. It also turns out that many - abbrevs imply a static size for the DIE data, and additionally that - for many abbrevs, the sibling offset is stored at a constant offset - from the start of the DIE. - - This patch changes the abbrev reader to analyze each abbrev and stash - the results on the abbrev. These combine to speed up the new indexer. - If the "interesting" flag is false, GDB knows to skip the DIE - immediately. If the sibling offset is statically known, skipping can - be done without reading any attributes; and in some other cases, the - DIE can be skipped using simple arithmetic. - -2022-04-12 Tom Tromey - - Introduce DWARF abbrev cache - The replacement for the DWARF psymbol reader works in a somewhat - different way. The current reader reads and stores all the DIEs that - might be interesting. Then, if it is missing a DIE, it re-scans the - CU and reads them all. This approach is used for both intra- and - inter-CU references. - - I instrumented the partial DIE hash to see how frequently it was used: - - [ 0] -> 1538165 - [ 1] -> 4912 - [ 2] -> 96102 - [ 3] -> 175 - [ 4] -> 244 - - That is, most DIEs are never used, and some are looked up twice -- but - this is just an artifact of the implementation of - partial_die_info::fixup, which may do two lookups. - - Based on this, the new implementation doesn't try to store any DIEs, - but instead just re-scans them on demand. In order to do this, - though, it is convenient to have a cache of DWARF abbrevs. This way, - if a second CU is needed to resolve an inter-CU reference, the abbrevs - for that CU need only be computed a single time. - -2022-04-12 Tom Tromey - - Add "fullname" handling to file_and_directory - This changes the file_and_directory object to be able to compute and - cache the "fullname" in the same way that is done by other code, like - the psymtab reader. - - Specialize std::hash for gdb_exception - This adds a std::hash specialization for gdb_exception. This lets us - store these objects in a hash table, which is used later in this - series to de-duplicate the exception output from multiple threads. - - Return vector of results from parallel_for_each - This changes gdb::parallel_for_each to return a vector of the results. - However, if the passed-in function returns void, the return type - remains 'void'. This functionality is used later, to parallelize the - new indexer. - - Add batching parameter to parallel_for_each - parallel_for_each currently requires each thread to process at least - 10 elements. However, when indexing, it's fine for a thread to handle - just a single CU. This patch parameterizes this, and updates the one - user. - - Refactor build_type_psymtabs_reader - The new DWARF scanner needs to save the entire cutu_reader object, not - just parts of it. In order to make this possible, this patch - refactors build_type_psymtabs_reader. This change is done separately - because it is easy to review in isolation and it helps make the later - patches smaller. - - Add new overload of dwarf5_djb_hash - This adds a new overload of dwarf5_djb_hash. This is used in - subsequent patches. - -2022-04-12 Tom Tromey - - Add name splitting - The new DWARF index code works by keeping names pre-split. That is, - rather than storing a symbol name like "a::b::c", the names "a", "b", - and "c" will be stored separately. - - This patch introduces some helper code to split a full name into its - components. - -2022-04-12 Tom Tromey - - Let skip_one_die not skip children - This patch adds an option to skip_one_die that causes it not to skip - child DIEs. This is needed in the new scanner. - - Allow ada_decode not to decode operators - The new DWARF scanner records names as they appear in DWARF. However, - because Ada is unusual, it also decodes the Ada names to synthesize - package components for them. In order for this to work out properly, - gdb also needs a mode where ada_decode can be instructed not to decode - Ada operator names. That is what this patch implements. - - Refactor dwarf2_get_pc_bounds - This changes dwarf2_get_pc_bounds so that it does not directly access - a psymtab or psymtabs_addrmap. Instead, both the addrmap and the - desired payload are passed as parameters. This makes it suitable to - be used by the new indexer. - - Add dwarf2_per_cu_data::addresses_seen - This adds a new member to dwarf2_per_cu_data that indicates whether - addresses have been seen for this CU. This is then set by the - .debug_aranges reader. The idea here is to detect when a CU does not - have address information, so that the new indexer will know to do - extra scanning in that case. - - Fix latent bug in read_addrmap_from_aranges - Tom de Vries found a failure that we tracked down to a latent bug in - read_addrmap_from_aranges (previously create_addrmap_from_aranges). - The bug is that this code can erroneously reject .debug_aranges when - dwz is in use, due to CUs at duplicate offsets. Because aranges can't - refer to a CU coming from the dwz file, the fix is to simply skip such - CUs in the loop. - - Split create_addrmap_from_aranges - This patch splits create_addrmap_from_aranges into a wrapper function - and a worker function. The worker function is then used in a later - patch. - -2022-04-12 Tom Tromey - - Allow thread-pool.h to work without threads - thread-pool.h requires CXX_STD_THREAD in order to even be included. - However, there's no deep reason for this, and during review we found - that one patch in the new DWARF indexer series unconditionally - requires the thread pool. - - Because the thread pool already allows a task to be run in the calling - thread (for example if it is configured to have no threads in the - pool), it seemed straightforward to make this code ok to use when host - threads aren't available at all. - - This patch implements this idea. I built it on a thread-less host - (mingw, before my recent configure patch) and verified that the result - builds. - - After the thread-pool change, parallel-for.h no longer needs any - CXX_STD_THREAD checks at all, so this patch removes these as well. - -2022-04-12 Nick Clifton - - Rebase the zlib sources to the 1.2.12 release - -2022-04-12 Tom de Vries - - [gdb/testsuite] Fix gdb.base/stap-probe.exp with read1 - When running test-case gdb.base/stap-probe.exp with make target check-read1, I - run into this and similar: - ... - FAIL: gdb.base/stap-probe.exp: without semaphore, not optimized: \ - info probes stap (timeout) - ... - - Fix this by using gdb_test_lines instead of gdb_test. - - Tested on x86_64-linux. - -2022-04-12 Tom Tromey - - Add C++ "save gdb-index" test - I found a bug in the new DWARF reader series, related to the handling - of enumerator names. This bug caused a crash, so this patch adds a - regression test for this particular case. I'm checking this in. - -2022-04-12 Tom Tromey - - Remove "Ada Settings" node from the manual - A while back, I sent a patch to unify the Ada varsize-limit setting - with the more generic max-value-size: - - https://sourceware.org/pipermail/gdb-patches/2021-September/182004.html - - However, it turns out I somehow neglected to send part of the patch. - Internally, I also removed the "Ada Settings" node from the manual, as - it only documents the obsolete setting. - - This patch removes this text. - -2022-04-12 Tom Tromey - - Require GNAT debug info for some Ada tests - A few Ada tests require some debug info in the GNAT runtime. When run - without this info, these tests can't pass. This patch changes these - tests to detect this situation and stop with "untested". - -2022-04-12 Nick Clifton - - Stop strip from removing debuglink sections. - PR 28992 - * objcopy.c (is_strip_section_1): Do not delete debuglink sections - when stripping debug information. - -2022-04-12 Jan Beulich - - gas: new_logical_line{,_flags}() can return "void" - With the sole user of the return value gone, convert the return type to - void. This in turn allows simplifying another construct, by moving it - slightly later in the function. - - gas: drop .appfile and .appline - These were used originally to represent "# " constructs - inserted by (typically) compilers when pre-processing. Quite some time - ago they were replaced by .linefile though. Since the original - directives were never documented, we ought to be able to remove support - for them. As a result in a number of case function parameter aren't used - anymore and can hence be dropped. - -2022-04-12 Jan Beulich - - gas: further adjust file/line handling for .macro - Commit 7992631e8c0b ("gas/Dwarf: improve debug info generation from .irp - and alike blocks"), while dealing okay with actual assembly source files - not using .file/.line and alike outside but not inside of .macro, has - undue effects when the logical file/line pair was already overridden: - Line numbers would continuously increment while processing the expanded - macro, while the goal of the PR gas/16908 workaround is to keep the - expansion associated with the line invoking the macro. However, as soon - as enough state was overridden _inside_ the macro to cause as_where() to - no longer fall back top as_where_physical(), honor this by resuming the - bumping of the logical line number. - - Note that from_sb_is_expansion's initializer was 1 for an unknown - reason. While renaming the variable and changing its type, also change - the initializer to "expanding_none", which would have been "0" in the - original code. Originally the initializer value itself wasn't ever used - anyway (requiring sb_index != -1), as it necessarily had changed in - input_scrub_include_sb() alongside setting sb_index to other than -1. - - Strictly speaking input_scrub_insert_line() perhaps shouldn't use - expanding_none, yet none of the other enumerators fit there either. And - then strictly speaking that function probably shouldn't exist in the - first place. It's used only by tic54x. - -2022-04-12 Jan Beulich - - gas: further adjust file/line handling for .irp and alike - Commit 7992631e8c0b ("gas/Dwarf: improve debug info generation from .irp - and alike blocks"), while dealing okay with actual assembly source files - not using .file/.line and alike outside but not inside of .irp et al, - has undue effects when the logical file/line pair was already - overridden: Line numbers would continuously increment upon every - iteration, thus potentially getting far off. Furthermore it left it to - the user to actually insert .file/.line inside such constructs. Note - though that before aforementioned change things weren't pretty either: - Diagnostics (and debug info) would be associated with the directive - terminating the iteration construct, rather than with the actual lines. - - Handle this automatically by simply latching the present line and then - re-instating coordinates first thing on every iteration; note that the - file can't change from what was previously pushed on the scrubber's - state stack, and hence can be taken from there by using a new flavor of - .linefile (which is far better memory-footprint-wise than recording the - full path in the inserted directive). (This then leaves undisturbed any - file/line control occurring in the body of the construct, as these will - only be seen and processed afterwards.) - -2022-04-12 Jan Beulich - - x86: make {disp16} work similarly to {disp32} - In a few places {disp32} was handled specially when really {disp16} - wants handling just the same. - -2022-04-12 Vladimir Mezentsev - - gprofng doesn't build with gcc 5.5 - gprofng/ChangeLog - 2022-04-07 Vladimir Mezentsev - - PR gprofng/29026 - * configure.ac: Check version of bison. - * src/Makefile.am (QLParser.yy): Run bison - * src/QLParser.yy: Adapted for bison 3.04 or later. - * src/DbeSession.cc: make some params const. - * src/DbeSession.h: Likewise. - * configure: Regenerate. - * Makefile.in: Regenerate. - * src/Makefile.in: Regenerate. - * src/QLParser.tab.cc: Deleted. - * src/QLParser.tab.hh: Deleted. - * doc/Makefile.in: Regenerate. - * gp-display-html/Makefile.in: Regenerate. - * libcollector/configure: Regenerate. - -2022-04-12 GDB Administrator - - Automatic date update in version.in - -2022-04-11 John Baldwin - - i386-fbsd-nat: Remove two unused variables. - Earlier versions of the change in - 1285ce8629b37f800bf21731ee7c7a8b1b8d0233 used this variable, but not - the final version that landed. - -2022-04-11 Simon Marchi - - gdb: remove MSYMBOL_TARGET_FLAG_{1,2} macros - Replace with equivalent getter/setter macros. - - Change-Id: I1042564dd47347337374762bd64ec31b5c573ee2 - -2022-04-11 Simon Marchi - - gdb: remove minimal symbol size macros - Remove MSYMBOL_HAS_SIZE, MSYMBOL_SIZE and SET_MSYMBOL_SIZE, replace them - with equivalent methods. - - Change-Id: I6ee1cf82df37e58dff52ea6568ceb4649c7d7538 - -2022-04-11 Simon Marchi - - gdb: remove MSYMBOL_TYPE macro - Add a getter and a setter for a minimal symbol's type. Remove the - corresponding macro and adjust all callers. - - Change-Id: I89900df5ffa5687133fe1a16b2e0d4684e67a77d - -2022-04-11 Simon Marchi - - gdb: remove symbol value macros - Remove all macros related to getting and setting some symbol value: - - #define SYMBOL_VALUE(symbol) (symbol)->value.ivalue - #define SYMBOL_VALUE_ADDRESS(symbol) \ - #define SET_SYMBOL_VALUE_ADDRESS(symbol, 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 - #define MSYMBOL_VALUE(symbol) (symbol)->value.ivalue - #define MSYMBOL_VALUE_RAW_ADDRESS(symbol) ((symbol)->value.address + 0) - #define MSYMBOL_VALUE_ADDRESS(objfile, symbol) \ - #define BMSYMBOL_VALUE_ADDRESS(symbol) \ - #define SET_MSYMBOL_VALUE_ADDRESS(symbol, new_value) \ - #define MSYMBOL_VALUE_BYTES(symbol) (symbol)->value.bytes - #define MSYMBOL_BLOCK_VALUE(symbol) (symbol)->value.block - - Replace them with equivalent methods on the appropriate objects. - - Change-Id: Iafdab3b8eefc6dc2fd895aa955bf64fafc59ed50 - -2022-04-11 Nils-Christian Kempke - - gdb/doc: add section about Fortran intrinsic functions and types - The earlier version of this document had no sections about the - available Fortran intrinsic functions or the Fortran builtin types. - - I added two sections 'Fortran intrinsics' and 'Fortran types' to - document the available Fortran language features. The subsection - 'Fortran Defaults' has been integrated into the Fortran subsection. - -2022-04-11 Nils-Christian Kempke - - gdb/fortran/testsuite: add complex from integers test - When working on the files I noted that there was no actual test for a - COMPLEX built from two INTEGERS. I added that now for completion. - -2022-04-11 Nils-Christian Kempke - - gdb/fortran: rewrite intrinsic handling and add some missing overloads - The operators FLOOR, CEILING, CMPLX, LBOUND, UBOUND, and SIZE accept - (some only with Fortran 2003) the optional parameter KIND. This - parameter determines the kind of the associated return value. So far, - implementation of this kind parameter has been missing in GDB. - Additionally, the one argument overload for the CMPLX intrinsic function - was not yet available. - - This patch adds overloads for all above mentioned functions to the - Fortran intrinsics handling in GDB. - - It re-writes the intrinsic function handling section to use the helper - methods wrap_unop_intrinsic/wrap_binop_intrinsic/wrap_triop_intrinsic. - These methods define the action taken when a Fortran intrinsic function - is called with a certain amount of arguments (1/2/3). The helper methods - fortran_wrap2_kind and fortran_wrap3_kind have been added as equivalents - to the existing wrap and wrap2 methods. - - After adding more overloads to the intrinsics handling, some of the - operation names were no longer accurate. E.g. UNOP_FORTRAN_CEILING - has been renamed to FORTRAN_CEILING as it is no longer a purely unary - intrinsic function. This patch also introduces intrinsic functions with - one, two, or three arguments to the Fortran parser and the - UNOP_OR_BINOP_OR_TERNOP_INTRINSIC token has been added. - -2022-04-11 Nils-Christian Kempke - - gdb/fortran: rename f77_keywords to f_keywords - Rename f77_keywords to f_keywords since some of the introduced keywords - in the array are f90 only. - -2022-04-11 Nils-Christian Kempke - - gdb/fortran: Change GDB print for fortran default types - Currently, when asking GDB to print the type of a Fortran default type - such as INTEGER or REAL, GDB will return the default name of that type, - e.g. "integer"/"real": - - (gdb) ptype integer - type = integer - (gdb) ptype real - type = real - - For LOGICAL and COMPLEX it would return the actual underlying types - - (gdb) ptype logical - type = logical*4 - (gdb) ptype complex - type = complex*4 - - Similarly, GDB would print the default integer type for the underlying - default type: - - (gdb) ptype integer*4 - type = integer - (gdb) ptype real*4 - type = real - (gdb) ptype logical - type = logical*4 - (gdb) ptype complex*4 - type = complex*4 - - This is inconsistent and a bit confusing. Both options somehow indicate - what the internal underlying type for the default type is - but I think - the logical/complex version is a bit clearer. - - Consider again: - - (gdb) ptype integer - type = integer - - This indicates to a user that the type of "integer" is Fortran's default - integer type. Without examining "ptype integer*4" I would expect, that - any variable declared integer in the actual code would also fit into a - GDB integer. But, since we cannot adapt out internal types to the - compiler flags used at compile time of a debugged binary, this might be - wrong. Consider debugging Fortran code compiled with GNU and e.g. the - "-fdefault-integer-8" flag. In this case the gfortran default integer - would be integer*8 while GDB internally still would use a builtin_integer, - so an integer of the size of an integer*4 type. On the other hand having - GDB print - - (gdb) ptype integer - type = integer*4 - - makes this clearer. I would still be tempted to fit a variable declared - integer in the code into a GDB integer - but at least ptype would - directly tell me what is going on. Note, that when debugging a binary - compiled with "-fdefault-integer-8" a user will always see the actual - underlying type of any variable declared "integer" in the Fortran code. - So having the code - - program test - integer :: a = 5 - print *, a ! breakpt - end program test - - will, when breaking at breakpt print - - (gdb) ptype var - type = integer(kind=4) - - or - - (gdb) ptype var - type = integer(kind=8) - - depending on the compiler flag. - - This patch changes the outputs for the REAL and INTEGER default types to - actually print the internally used type over the default type name. - - The new behavior for the above examples is: - - (gdb) ptype integer - type = integer*4 - (gdb) ptype integer*4 - type = integer*4 - - Existing testcases have been adapted to reflect the new behavior. - -2022-04-11 Nils-Christian Kempke - - gdb/fortran: clean-up Fortran intrinsic types - The currently implemented intrinsic type handling for Fortran missed some - tokens and their parsing. While still not all Fortran type kinds are - implemented this patch at least makes the currently handled types - consistent. As an example for what this patch does, consider the - intrinsic type INTEGER. GDB implemented the handling of the - keywords "integer" and "integer_2" but missed "integer_4" and "integer_8" - even though their corresponding internal types were already available as - the Fortran builtin types builtin_integer and builtin_integer_s8. - Similar problems applied to LOGICAL, REAL, and COMPLEX. This patch adds - all missing tokens and their parsing. Whenever a section containing the - type handling was touched, it also was reordered to be in a more easy to - grasp order. All INTEGER/REAL/LOGICAL/COMPLEX types were grouped - together and ordered ascending in their size making a missing one more - easy to spot. - - Before this change GDB would print the following when tyring to use the - INTEGER keywords: - - (gdb) set language fortran - (gdb) ptype integer*1 - unsupported kind 1 for type integer - (gdb) ptype integer_1 - No symbol table is loaded. Use the "file" command. - (gdb) ptype integer*2 - type = integer*2 - (gdb) ptype integer_2 - type = integer*2 - (gdb) ptype integer*4 - type = integer - (gdb) ptype integer_4 - No symbol table is loaded. Use the "file" command. - (gdb) ptype integer*8 - type = integer*8 - (gdb) ptype integer_8 - No symbol table is loaded. Use the "file" command. - (gdb) ptype integer - type = integer - - With this patch all keywords are available and the GDB prints: - - (gdb) set language fortran - (gdb) ptype integer*1 - type = integer*1 - (gdb) ptype integer_1 - type = integer*1 - (gdb) ptype integer*2 - type = integer*2 - (gdb) ptype integer_2 - type = integer*2 - (gdb) ptype integer*4 - type = integer*4 - (gdb) ptype integer_4 - type = integer*4 - (gdb) ptype integer*8 - type = integer*8 - (gdb) ptype integer_8 - type = integer*8 - (gdb) ptype integer - type = integer - - The described changes have been applied to INTEGER, REAL, COMPLEX, - and LOGICAL. Existing testcases have been adapted to reflect the - new behavior. Tests for formerly missing types have been added. - -2022-04-11 Nils-Christian Kempke - - gdb/fortran: change default logical type to builtin_logical - According to the Fortran standard, logical is of the size of a - 'single numeric storage unit' (just like real and integer). For - gfortran, flang and ifx/ifort this storage unit (or the default - logical type) is of size kind 4, actually occupying 4 bytes of - storage, and so the default type for logical expressions in - Fortran should probably also be Logical*4 and not Logical*2. I - adapted GDB's behavior to be in line with - gfortran/ifort/ifx/flang. - - gdb/fortran: reformat build_fortran_types in f-lang.c - Add a few newlines after the type definitions and remove some - unnecessary linebreaks. - -2022-04-11 Nils-Christian Kempke - - gdb/fortran: fix complex type in Fortran builtin types - Before this patch things like - - (gdb) ptype complex*8 - complex*16 - (gdb) ptype complex*4 - complex*8 - - were possible in GDB, which seems confusing for a user. The reason - is a mixup in the implementation of the Fortran COMPLEX type. In - Fortran the "*X" after a type would normally (I don't think this - is language required) specify the type's size in memory. For the - COMPLEX type the kind parameters usually (at least for GNU, Intel, Flang) - specify not the size of the whole type but the size of the individual - two REALs used to form the COMPLEX. Thus, a COMPLEX*4 will usually - consist of two REAL*4s. Internally this type was represented by a - builtin_complex_s8 - but here I think the s8 actually meant the raw - size of the type. This is confusing and I renamed the types (e.g. - builting_complex_s8 became builtin_complex_s4 according to its most - common useage) and their printed names to their language equivalent. - Additionally, I added the default COMPLEX type "COMPLEX" being the same - as a COMPLEX*4 (as is normally the case) and removed the latter. I added - a few tests for this new behavior as well. - - The new behavior is - - (gdb) ptype complex*8 - complex*8 - (gdb) ptype complex*4 - complex*4 - -2022-04-11 Nils-Christian Kempke - - gdb/f-lang: remove hidden ^L characters - - gdb/f-lang: add Integer*1 to Fortran builtin types - Add builtin_integer_s1 of size TARGET_CHAR_BIT to Fortran builtin types. - -2022-04-11 Tom de Vries - - [gdb/testsuite] Fix gdb.base/annota1.exp with pie - Since commit 359efc2d894 ("[gdb/testsuite] Make gdb.base/annota1.exp more - robust") we see this fail with target board unix/-fPIE/-pie: - ... - FAIL: gdb.base/annota1.exp: run until main breakpoint (timeout) - ... - - The problem is that the commit makes the number and order of matched - annotations fixed, while between target boards unix and unix/-fPIE/-pie there - is a difference: - ... - \032\032post-prompt - Starting program: outputs/gdb.base/annota1/annota1 - - +\032\032breakpoints-invalid - + - \032\032starting - - \032\032frames-invalid - ... - - Fix this by optionally matching the additional annotation. - - Tested on x86_64-linux. - -2022-04-11 Tom de Vries - - [gdb/testsuite] Fix gdb.dwarf2/dw2-lines.exp for m32 pie - As reported in PR29043, when running test-case gdb.dwarf2/dw2-lines.exp with - target board unix/-m32/-fPIE/-pie, we run into: - ... - Breakpoint 2, 0x56555540 in bar ()^M - (gdb) PASS: gdb.dwarf2/dw2-lines.exp: cv=2: cdw=32: lv=2: ldw=32: \ - continue to breakpoint: foo \(1\) - next^M - Single stepping until exit from function bar,^M - which has no line number information.^M - 0x56555587 in main ()^M - (gdb) FAIL: gdb.dwarf2/dw2-lines.exp: cv=2: cdw=32: lv=2: ldw=32: \ - next to foo (2) - ... - - The problem is that the bar breakpoint ends up at an unexpected location - because: - - the synthetic debug info is incomplete and doesn't provide line info - for the prologue part of the function, so consequently gdb uses the i386 - port prologue skipper to get past the prologue - - the i386 port prologue skipper doesn't get past a get_pc_thunk call. - - Work around this in the test-case by breaking on bar_label instead. - - Tested on x86_64-linux with target boards unix, unix/-m32, unix/-fPIE/-pie and - unix/-m32/-fPIE/-pie. - -2022-04-11 GDB Administrator - - Automatic date update in version.in - -2022-04-10 GDB Administrator - - Automatic date update in version.in - -2022-04-09 Tom Tromey - - Remove MSYMBOL_VALUE_CHAIN - I noticed that MSYMBOL_VALUE_CHAIN is unused, so this patch removes it. - -2022-04-09 Alan Modra - - Rearrange struct bfd_section a little - For better packing on 64-bit hosts. - - * section.c (struct bfd_section): Move next and prev field earlier. - Move alignment_power later. - (BFD_FAKE_SECTION): Adjust to suit. - * bfd-in2.h: Regenerate. - -2022-04-09 Alan Modra - - Don't run pr27228 test for hppa - As the comment says, hppa doesn't support use of BFD_RELOC_* in - .reloc directives. Using xfail can result in a spurious XPASS result - as BFD_RELOC values change. - - * testsuite/gas/elf/pr27228.d: Change xfail to notarget for hppa. - -2022-04-09 Alan Modra - - Correct nds32 readelf reloc numbers - * readelf.c (is_32bit_abs_reloc, is_16bit_abs_reloc): Comment fixes. - (is_none_reloc): Correct nds32 reloc numbers. - -2022-04-09 GDB Administrator - - Automatic date update in version.in - -2022-04-08 Fangrui Song - - gas: Port "copy st_size only if unset" to aarch64 and riscv - And disable the new test gas/elf/size.s for alpha which uses its own - .set, for hppa*-*-hpux* which does not allow .size before declaration. - -2022-04-08 Vladimir Mezentsev - - gprofng: fprintf_styled_func not inizialized for disassembler - gprofng/ChangeLog - 2022-04-07 Vladimir Mezentsev - - * libcollector/unwind.c: inizialize fprintf_styled_func. - * src/Disasm.cc: Likewise. - -2022-04-08 Vladimir Mezentsev - - gprofng: zlib handling - gprofng/ChangeLog - 2022-04-06 Vladimir Mezentsev - - * configure.ac: Add AM_ZLIB. - * src/Makefile.am: Add $(ZLIBINC) and $(ZLIB). - * gprofng/src/DbeSession.h: Likewise. - * configure: Regenerate. - * Makefile.in: Regenerate. - * doc/Makefile.in: Regenerate. - * gp-display-html/Makefile.in: Regenerate. - * src/Makefile.in: Regenerate. - -2022-04-08 Pedro Alves - - gdb: Avoid undefined shifts, fix Go shifts - I noticed that a build of GDB with GCC + --enable-ubsan, testing - against GDBserver showed this GDB crash: - - (gdb) PASS: gdb.trace/trace-condition.exp: trace: 0x00abababcdcdcdcd << 46 == 0x7373400000000000: advance to trace begin - tstart - ../../src/gdb/valarith.c:1365:15: runtime error: left shift of 48320975398096333 by 46 places cannot be represented in type 'long int' - ERROR: GDB process no longer exists - GDB process exited with wait status 269549 exp9 0 1 - UNRESOLVED: gdb.trace/trace-condition.exp: trace: 0x00abababcdcdcdcd << 46 == 0x7373400000000000: start trace experiment - - The problem is that, "0x00abababcdcdcdcd << 46" is an undefined signed - left shift, because the result is not representable in the type of the - lhs, which is signed. This actually became defined in C++20, and if - you compile with "g++ -std=c++20 -Wall", you'll see that GCC no longer - warns about it, while it warns if you specify prior language versions. - - While at it, there are a couple other situations that are undefined - (and are still undefined in C++20) and result in GDB dying: shifting - by a negative ammount, or by >= than the bit size of the promoted lhs. - For the latter, GDB shifts using (U)LONGEST internally, so you have to - shift by >= 64 bits to see it: - - $ gdb --batch -q -ex "p 1 << -1" - ../../src/gdb/valarith.c:1365:15: runtime error: shift exponent -1 is negative - $ # gdb exited - - $ gdb --batch -q -ex "p 1 << 64" - ../../src/gdb/valarith.c:1365:15: runtime error: shift exponent 64 is too large for 64-bit type 'long int' - $ # gdb exited - - Also, right shifting a negative value is implementation-defined - (before C++20, after which it is defined). For this, I chose to - change nothing in GDB other than adding tests, as I don't really know - whether we need to do anything. AFAIK, most implementations do an - arithmetic right shift, and it may be we don't support any host or - target that behaves differently. Plus, this becomes defined in C++20 - exactly as arithmetic right shift. - - Compilers don't error out on such shifts, at best they warn, so I - think GDB should just continue doing the shifts anyhow too. - - Thus: - - - Adjust scalar_binop to avoid the undefined paths, either by adding - explicit result paths, or by casting the lhs of the left shift to - unsigned, as appropriate. - - For the shifts by a too-large count, I made the result be what you'd - get if you split the large count in a series of smaller shifts. - Thus: - - Left shift, positive or negative lhs: - - V << 64 - => V << 16 << 16 << 16 << 16 - => 0 - - Right shift, positive lhs: - - Vpos >> 64 - => Vpos >> 16 >> 16 >> 16 >> 16 - => 0 - - Right shift, negative lhs: - - Vneg >> 64 - => Vneg >> 16 >> 16 >> 16 >> 16 - => -1 - - This is actually Go's semantics (the compiler really emits - instructions to make it so that you get 0 or -1 if you have a - too-large shift). So for that language GDB does the shift and - nothing else. For other C-like languages where such a shift is - undefined, GDB warns in addition to performing the shift. - - For shift by a negative count, for Go, this is a hard error. For - other languages, since their compilers only warn, I made GDB warn - too. The semantics I chose (we're free to pick them since this is - undefined behavior) is as-if you had shifted by the count cast to - unsigned, thus as if you had shifted by a too-large count, thus the - same as the previous scenario illustrated above. - - Examples: - - (gdb) set language go - (gdb) p 1 << 100 - $1 = 0 - (gdb) p -1 << 100 - $2 = 0 - (gdb) p 1 >> 100 - $3 = 0 - (gdb) p -1 >> 100 - $4 = -1 - (gdb) p -2 >> 100 - $5 = -1 - (gdb) p 1 << -1 - left shift count is negative - - (gdb) set language c - (gdb) p -2 >> 100 - warning: right shift count >= width of type - $6 = -1 - (gdb) p -2 << 100 - warning: left shift count >= width of type - $7 = 0 - (gdb) p 1 << -1 - warning: left shift count is negative - $8 = 0 - (gdb) p -1 >> -1 - warning: right shift count is negative - $9 = -1 - - - The warnings' texts are the same as what GCC prints. - - - Add comprehensive tests in a new gdb.base/bitshift.exp testcase, so - that we exercise all these scenarios. - - Change-Id: I8bcd5fa02de3114b7ababc03e65702d86ec8d45d - -2022-04-08 Pedro Alves - - Fix undefined behavior in the Fortran, Go and Pascal number parsers - This commit ports these two fixes to the C parser: - - commit ebf13736b42af47c9907b5157c8e80c78dbe00e1 - CommitDate: Thu Sep 4 21:46:28 2014 +0100 - - parse_number("0") reads uninitialized memory - - commit 20562150d8a894bc91657c843ee88c508188e32e - CommitDate: Wed Oct 3 15:19:06 2018 -0600 - - Avoid undefined behavior in parse_number - - ... to the Fortran, Go, and Fortran number parsers, fixing the same - problems there. - - Also add a new testcase that exercises printing 0xffffffffffffffff - (max 64-bit) in all languages, which crashes a GDB built with UBsan - without the fix. - - I moved get_set_option_choices out of all-architectures.exp.tcl to - common code to be able to extract all the supported languages. I did - a tweak to it to generalize it a bit -- you now have to pass down the - "set" part of the command as well. This is so that the proc can be - used with "maintenance set" commands as well in future. - - Change-Id: I8e8f2fdc1e8407f63d923c26fd55d98148b9e16a - -2022-04-08 Nick Clifton - - Debug info for function in Windows PE binary on wrong instruction - PR 29038 - * coffgen.c (coff_find_nearest_line_with_names): Fix typo - retrieving saved bias. - -2022-04-08 Simon Marchi - - Pass PKG_CONFIG_PATH down from top-level Makefile - [Sending to binutils, gdb-patches and gcc-patches, since it touches the - top-level Makefile/configure] - - I have my debuginfod library installed in a non-standard location - (/opt/debuginfod), which requires me to set - PKG_CONFIG_PATH=/opt/debuginfod/lib/pkg-config. If I just set it during - configure: - - $ PKG_CONFIG_PATH=/opt/debuginfod/lib/pkg-config ./configure --with-debuginfod - $ make - - or - - $ ./configure --with-debuginfod PKG_CONFIG_PATH=/opt/debuginfod/lib/pkg-config - $ make - - Then PKG_CONFIG_PATH is only present (and ignored) during the top-level - configure. When running make (which runs gdb's and binutils' - configure), PKG_CONFIG_PATH is not set, which results in their configure - script not finding the library: - - checking for libdebuginfod >= 0.179... no - configure: error: "--with-debuginfod was given, but libdebuginfod is missing or unusable." - - Change the top-level configure/Makefile system to capture the value - passed when configuring the top-level and pass it down to - subdirectories (similar to CFLAGS, LDFLAGS, etc). - - I don't know much about the top-level build system, so I really don't - know if I did this correctly. The changes are: - - - Use AC_SUBST(PKG_CONFIG_PATH) in configure.ac, so that - @PKG_CONFIG_PATH@ gets replaced with the actual PKG_CONFIG_PATH value - in config files (i.e. Makefile) - - Add a PKG_CONFIG_PATH Makefile variable in Makefile.tpl, initialized - to @PKG_CONFIG_PATH@ - - Add PKG_CONFIG_PATH to HOST_EXPORTS in Makefile.tpl, which are the - variables set when running the sub-configures - - I initially added PKG_CONFIG_PATH to flags_to_pass, in Makefile.def, but - I don't think it's needed. AFAIU, this defines the flags to pass down - when calling "make" in subdirectories. We only need PKG_CONFIG_PATH to - be passed down during configure. After that, it's captured in - gdb/config.status, so even if a "make" causes a re-configure later - (because gdb/configure has changed, for example), the PKG_CONFIG_PATH - value will be remembered. - - ChangeLog: - - * 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. - - Change-Id: I91138dfca41c43b05e53e445f62e4b27882536bf - -2022-04-08 Simon Marchi - - gdb/testsuite: use nopie in gdb.dwarf2/dw2-inline-param.exp - I see this failure: - - (gdb) run ^M - Starting program: /home/smarchi/build/binutils-gdb/gdb/testsuite/outputs/gdb.dwarf2/dw2-inline-param/dw2-inline-param ^M - Warning:^M - Cannot insert breakpoint 1.^M - Cannot access memory at address 0x113b^M - ^M - (gdb) FAIL: gdb.dwarf2/dw2-inline-param.exp: runto: run to *0x113b - - The test loads the binary in GDB, grabs the address of a symbol, strips - the binary, reloads it in GDB, runs the program, and then tries to place - a breakpoint at that address. The problem is that the binary is built - as position independent, so the address GDB grabs in the first place - isn't where the code ends up after running. - - Fix this by linking the binary as non-position-independent. The - alternative would be to compute the relocated address where to place the - breakpoint, but that's not very straightforward, unfortunately. - - I was confused for a while, I was trying to load the binary in GDB - manually to get the symbol address, but GDB was telling me the symbol - could not be found. Meanwhile, it clearly worked in gdb.log. The thing - is that GDB strips the binary in-place, so we don't have access to the - intermediary binary with symbols. Change the test to output the - stripped binary to a separate file instead. - - Change-Id: I66c56293df71b1ff49cf748d6784bd0e935211ba - -2022-04-08 Alan Modra - - gdb maintainer commit rights - Formalise what ought to be obvious. The top level of the binutils-gdb - repository isn't owned by binutils. - - * MAINTAINERS: Spelling fix. GDB global maintainer rights. - -2022-04-08 Bernhard Heckel - Nils-Christian Kempke - - gdb/fortran: print fortran extended types with ptype - Add the print of the base-class of an extended type to the output of - ptype. This requires the Fortran compiler to emit DW_AT_inheritance - for the extended type. - -2022-04-08 Bernhard Heckel - Nils-Christian Kempke - - gdb/fortran: add support for accessing fields of extended types - Fortran 2003 supports type extension. This patch allows access - to inherited members by using their fully qualified name as described - in the Fortran standard. - - In doing so the patch also fixes a bug in GDB when trying to access the - members of a base class in a derived class via the derived class' base - class member. - - This patch fixes PR22497 and PR26373 on GDB side. - - Using the example Fortran program from PR22497 - - program mvce - implicit none - - type :: my_type - integer :: my_int - end type my_type - - type, extends(my_type) :: extended_type - end type extended_type - - type(my_type) :: foo - type(extended_type) :: bar - - foo%my_int = 0 - bar%my_int = 1 - - print*, foo, bar - - end program mvce - - and running this with GDB and setting a BP at 17: - - Before: - (gdb) p bar%my_type - A syntax error in expression, near `my_type'. - (gdb) p bar%my_int - There is no member named my_int. - (gdb) p bar%my_type%my_int - A syntax error in expression, near `my_type%my_int'. - (gdb) p bar - $1 = ( my_type = ( my_int = 1 ) ) - - After: - (gdb) p bar%my_type - $1 = ( my_int = 1 ) - (gdb) p bar%my_int - $2 = 1 # this line requires DW_TAG_inheritance to work - (gdb) p bar%my_type%my_int - $3 = 1 - (gdb) p bar - $4 = ( my_type = ( my_int = 1 ) ) - - In the above example "p bar%my_int" requires the compiler to emit - information about the inheritance relationship between extended_type - and my_type which gfortran and flang currently do not de. The - respective issue gcc/49475 has been put as kfail. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=26373 - https://sourceware.org/bugzilla/show_bug.cgi?id=22497 - -2022-04-08 Nils-Christian Kempke - - gdb: add Nils-Christian Kempke to gdb/MAINTAINERS - -2022-04-08 Simon Marchi - - gdb: change file_file_name to return an std::string - Straightforward change, return an std::string instead of a - gdb::unique_xmalloc_ptr. No behavior change expected. - - Change-Id: Ia5e94c94221c35f978bb1b7bdffbff7209e0520e - -2022-04-08 GDB Administrator - - Automatic date update in version.in - -2022-04-07 Andrew Burgess - - gdb/fortran: fix fetching assumed rank array content - Commit: - - commit df7a7bdd9766adebc6b117c31bc617d81c1efd43 - Date: Thu Mar 17 18:56:23 2022 +0000 - - gdb: add support for Fortran's ASSUMED RANK arrays - - Added support for Fortran assumed rank arrays. Unfortunately, this - commit contained a bug that means though GDB can correctly calculate - the rank of an assumed rank array, GDB can't fetch the contents of an - assumed rank array. - - The history of this patch can be seen on the mailing list here: - - https://sourceware.org/pipermail/gdb-patches/2022-January/185306.html - - The patches that were finally committed can be found here: - - https://sourceware.org/pipermail/gdb-patches/2022-March/186906.html - - The original patches did support fetching the array contents, it was - only the later series that introduced the regression. - - The problem is that when calculating the array rank the result is a - count of the number of ranks, i.e. this is a 1 based result, 1, 2, 3, - etc. - - In contrast, when computing the details of any particular rank the - value passed to the DWARF expression evaluator should be a 0 based - rank offset, i.e. a 0 based number, 0, 1, 2, etc. - - In the patches that were originally merged, this was not the case, and - we were passing the 1 based rank number to the expression evaluator, - e.g. passing 1 when we should pass 0, 2 when we should pass 1, etc. - As a result the DWARF expression evaluator was reading the - wrong (undefined) memory, and returning garbage results. - - In this commit I have extended the test case to cover checking the - array contents, I've then ensured we make use of the correct rank - value, and extended some comments, and added or adjusted some asserts - as appropriate. - -2022-04-07 Simon Marchi - - gdb/testsuite: add "macros" option to gdb_compile - Make gdb_compile handle a new "macros" option, which makes it pass the - appropriate flag to make the compiler include macro information in the - debug info. This will help simplify tests using macros, reduce - redundant code, and make it easier to add support for a new compiler. - - Right now it only handles clang specially (using -fdebug-macro) and - falls back to -g3 otherwise (which works for gcc). Other compilers can - be added as needed. - - There are some tests that are currently skipped if the compiler is nor - gcc nor clang. After this patch, the tests will attempt to run (the -g3 - fall back will be used). That gives a chance to people using other - compilers to notice something is wrong and maybe add support for their - compiler. If it is needed to support a compiler that doesn't have a way - to include macro information, then we can always introduce a - "skip_macro_tests" that can be used to skip over them. - - Change-Id: I50cd6ab1bfbb478c1005486408e214b551364c9b - -2022-04-07 Simon Marchi - - gdb: remove subfile::buildsym_compunit field - It is only set, never used. - - Change-Id: Ia46ed2f9da243b0ccfc4588c1b57be2a0f3939de - -2022-04-07 Tom de Vries - - [gdb/testsuite] Make gdb.base/annota1.exp more robust - On openSUSE Tumbleweed I run into: - ... - FAIL: gdb.base/annota1.exp: run until main breakpoint (timeout) - ... - - The problem is that the libthread_db message occurs at a location where it's - not expected: - ... - Starting program: outputs/gdb.base/annota1/annota1 ^M - ^M - ^Z^Zstarting^M - ^M - ^Z^Zframes-invalid^M - [Thread debugging using libthread_db enabled]^M - Using host libthread_db library "/lib64/libthread_db.so.1".^M - ^M - ^Z^Zbreakpoints-invalid^M - ^M - ... - - Fix this by making the matching more robust: - - rewrite the regexp such that each annotation is on a single line, - starting with \r\n\032\032 and ending with \r\n - - add a regexp variable optional_re, that matches all possible optional - output, and use it as a separator in the first part of the regexp - - Tested on x86_64-linux. - -2022-04-07 Simon Marchi - - gdb/testsuite/dwarf: simplify line number program syntax - By calling `uplevel $body` in the program proc (a pattern we use at many - places), we can get rid of curly braces around each line number program - directive. That seems like a nice small improvement to me. - - Change-Id: Ib327edcbffbd4c23a08614adee56c12ea25ebc0b - -2022-04-07 Simon Marchi - - gdb/testsuite/dwarf: remove two unused variables - These variables seem to be unused, remove them. - - Change-Id: I7d613d9d35735930ee78b2c348943c73a702afbb - -2022-04-07 Simon Marchi - - gdb: remove symtab::pspace - Same idea as previous patch, but for symtab::pspace. - - Change-Id: I1023abe622bea75ef648c6a97a01b53775d4104d - -2022-04-07 Simon Marchi - - gdb: remove symtab::objfile - Same idea as previous patch, but for symtab::objfile. I find - it clearer without this wrapper, as it shows that the objfile is - common to all symtabs of a given compunit. Otherwise, you could think - that each symtab (of a given compunit) can have a specific objfile. - - Change-Id: Ifc0dbc7ec31a06eefa2787c921196949d5a6fcc6 - -2022-04-07 Simon Marchi - - gdb: remove symtab::blockvector - symtab::blockvector is a wrapper around compunit_symtab::blockvector. - It is a bit misleadnig, as it gives the impression that a symtab has a - blockvector. Remove it, change all users to fetch the blockvector - through the compunit instead. - - Change-Id: Ibd062cd7926112a60d52899dff9224591cbdeebf - -2022-04-07 Simon Marchi - - gdb: remove symtab::dirname - I think the symtab::dirname method is bogus, or at least very - misleading. It makes you think that it returns the directory that was - used to find that symtab's file during compilation (i.e. the directory - the file refers to in the DWARF line header file table), or the - directory part of the symtab's filename maybe. In fact, it returns the - compilation unit's directory, which is the CWD of the compiler, at - compilation time. At least for DWARF, if the symtab's filename is - relative, it will be relative to that directory. But if the symtab's - filename is absolute, then the directory returned by symtab::dirname has - nothing to do with the symtab's filename. - - Remove symtab::dirname to avoid this confusion, change all users to - fetch the same information through the compunit. At least, it will be - clear that this is a compunit property, not a symtab property. - - Change-Id: I2894c3bf3789d7359a676db3c58be2c10763f5f0 - -2022-04-07 Simon Marchi - - gdb/testsuite: make gdb_breakpoint and runto take a linespec - Change gdb_breakpoint to accept a linespec, not just a function. In - fact, no behavior changes are necessary, this only changes the parameter - name and documentation. Change runto as well, since the two are so - close (runto forwards all its arguments to gdb_breakpoint). - - I wrote this for a downstrean GDB port, but thought it could be - useful upstream, eventually, even though not callers take advantage of - it yet. - - Change-Id: I08175fd444d5a60df90fd9985e1b5dfd87c027cc - -2022-04-07 Andrew Burgess - - gdb: update comments throughout reggroups.{c,h} files - This commit updates the comments in the gdb/reggroups.{c,h} files. - Fill in some missing comments, correct a few comments that were not - clear, and where we had comments duplicated between .c and .h files, - update the .c to reference the .h. - - No user visible changes after this commit. - -2022-04-07 Andrew Burgess - - gdb: move struct reggroup into reggroups.h header - Move 'struct reggroup' into the reggroups.h header. Remove the - reggroup_name and reggroup_type accessor functions, and just use the - name/type member functions within 'struct reggroup', update all uses - of these removed functions. - - There should be no user visible changes after this commit. - -2022-04-07 Andrew Burgess - - gdb: convert reggroup to a C++ class with constructor, etc - Convert the 'struct reggroup' into a real class, with a constructor - and getter methods. - - There should be no user visible changes after this commit. - -2022-04-07 Andrew Burgess - - gdb: make the pre-defined register groups const - Convert the 7 global, pre-defined, register groups const, and fix the - fall out (a minor tweak required in riscv-tdep.c). - - There should be no user visible changes after this commit. - -2022-04-07 Andrew Burgess - - gdb: more 'const' in gdb/reggroups.{c,h} - Convert the reggroup_new and reggroup_gdbarch_new functions to return - a 'const regggroup *', and fix up all the fallout. - - There should be no user visible changes after this commit. - -2022-04-07 Andrew Burgess - - gdb: remove reggroup_next and reggroup_prev - Add a new function gdbarch_reggroups that returns a reference to a - vector containing all the reggroups for an architecture. - - Make use of this function throughout GDB instead of the existing - reggroup_next and reggroup_prev functions. - - Finally, delete the reggroup_next and reggroup_prev functions. - - Most of these changes are pretty straight forward, using range based - for loops instead of the old style look using reggroup_next. There - are two places where the changes are less straight forward. - - In gdb/python/py-registers.c, the register group iterator needed to - change slightly. As the iterator is tightly coupled to the gdbarch, I - just fetch the register group vector from the gdbarch when needed, and - use an index counter to find the next item from the vector when - needed. - - In gdb/tui/tui-regs.c the tui_reg_next and tui_reg_prev functions are - just wrappers around reggroup_next and reggroup_prev respectively. - I've just inlined the logic of the old functions into the tui - functions. As the tui function had its own special twist (wrap around - behaviour) I think this is OK. - - There should be no user visible changes after this commit. - -2022-04-07 Andrew Burgess - - gdb: convert reggroups to use a std::vector - Replace manual linked list with a std::vector. This commit doesn't - change the reggroup_next and reggroup_prev API, but that will change - in a later commit. - - This commit is focused on the minimal changes needed to manage the - reggroups using a std::vector, without changing the API exposed by the - reggroup.c file. - - There should be no user visible changes after this commit. - -2022-04-07 Andrew Burgess - - gdb: always add the default register groups - There's a set of 7 default register groups. If we don't add any - gdbarch specific register groups during gdbarch initialisation, then - when we iterate over the register groups using reggroup_next and - reggroup_prev we will make use of these 7 default groups. See the use - of default_groups in gdb/reggroups.c for details on this. - - However, if the gdbarch adds its own groups during gdbarch - initialisation, then these groups will be used in preference to the - default groups. - - A problem arises though if the particular architecture makes use of - the target description mechanism. If the default target - description(s) (i.e. those internal to GDB that are used when the user - doesn't provide their own) don't mention any additional register - groups then the default register groups will be used. - - But if the target description does mention additional groups then the - default groups are not used, and instead, the groups from the target - description are used. - - The problem with this is that what usually happens is that the target - description will mention additional groups, e.g. groups for special - registers. Most architectures that use target descriptions work - around this by adding all (or most) of the default register groups in - all cases. See i386_add_reggroups, aarch64_add_reggroups, - riscv_add_reggroups, xtensa_add_reggroups, and others. - - In this patch, my suggestion is that we should just add the default - register groups for every architecture, always. This change is in - gdb/reggroups.c. - - All the remaining changes are me updating the various architectures to - not add the default groups themselves. - - So, where will this change be visible to the user? I think the - following commands will possibly change: - - * info registers / info all-registers: - - The user can provide a register group to these commands. For example, - on csky, we previously never added the 'vector' group. Now, as a - default group, this will be available, but (presumably) will not - contain any registers. I don't think this is necessarily a bad - thing, there's something to be said for having some consistent - defaults available. There are other architectures that didn't add - all 7 of the defaults, which will now have gained additional groups. - - * maint print reggroups - - This prints the set of all available groups. As a maintenance - command I'm less concerned with the output changing here. - Obviously, for the architectures that didn't previously add all the - defaults, this list just got bigger. - - * maint print register-groups - - This prints all the registers, and the groups they are in. If the - defaults were not previously being added then a register (obviously) - can't appear in one of the default groups. Now the groups are - available then registers might be in more groups than previously. - However, this is again a maintenance command, so I'm less concerned - about this changing. - -2022-04-07 Andrew Burgess - - gdb/tui: fix 'tui reg next/prev' command when data window is hidden - Start GDB like: - - $ gdb -q executable - (gdb) start - (gdb) layout src - ... tui windows are now displayed ... - (gdb) tui reg next - - At this point the data (register) window should be displayed, but will - contain the message 'Register Values Unavailable', and at the console - you'll see the message "unknown register group 'next'". - - The same happens with 'tui reg prev' (but the error message is - slightly different). - - At this point you can continue to use 'tui reg next' and/or 'tui reg - prev' and you'll keep getting the error message. - - The problem is that when the data (register) window is first - displayed, it's current register group is nullptr. As a consequence - tui_reg_next and tui_reg_prev (tui/tui-regs.c) will always just return - nullptr, which triggers an error in tui_reg_command. - - In this commit I change tui_reg_next and tui_reg_prev so that they - instead return the first and last register group respectively if the - current register group is nullptr. - - So, after this, using 'tui reg next' will (in the above case) show the - first register group, while 'tui reg prev' will display the last - register group. - -2022-04-07 Andrew Burgess - - gdb/tui: avoid theoretical bug with 'tui reg' command - While looking at the 'tui reg' command as part of another patch, I - spotted a theoretical bug. - - The 'tui reg' command takes the name of a register group, but also - handles partial register group matches, though the partial match has to - be unique. The current command logic goes: - - With the code as currently written, if a target description named a - register group either 'prev' or 'next' then GDB would see this as an - ambiguous register name, and refuse to switch groups. - - Naming a register group 'prev' or 'next' seems pretty unlikely, but, - by adding a single else block we can prevent this problem. - - Now, if there's a 'prev' or 'next' register group, the user will not - be able to select the group directly, the 'prev' and 'next' names will - always iterate through the available groups instead. But at least the - user could select their groups by iteration, rather than direct - selection. - -2022-04-07 Andrew Burgess - - gdb: have reggroup_find return a const - Update reggroup_find to return a const reggroup *. - - There are other function in gdb/reggroup.{c,h} files that could - benefit from returning const, these will be updated in later commits. - - There should be no user visible changes after this commit. - -2022-04-07 Andrew Burgess - - gdb: use 'const reggroup *' in python/py-registers.c file - Convert uses of 'struct reggroup *' in python/py-registers.c to be - 'const'. - - There should be no user visible changes after this commit. - -2022-04-07 Andrew Burgess - - gdb: switch to using 'const reggroup *' in tui-regs.{c,h} - Make uses of 'reggroup *' const throughout tui-regs.{c,h}. - - There should be no user visible changes after this commit. - -2022-04-07 Andrew Burgess - - gdb: make gdbarch_register_reggroup_p take a const reggroup * - Change gdbarch_register_reggroup_p to take a 'const struct reggroup *' - argument. This requires a change to the gdb/gdbarch-components.py - script, regeneration of gdbarch.{c,h}, and then updates to all the - architectures that implement this method. - - There should be no user visible changes after this commit. - -2022-04-07 Andrew Burgess - - gdb: add some const in gdb/reggroups.c - This commit makes the 'struct reggroup *' argument const for the - following functions: - - reggroup_next - reggroup_prev - reggroup_name - reggroup_type - - There are other places that could benefit from const in the - reggroup.{c,h} files, but these will be changing in further commits. - - There should be no user visible changes after this commit. - -2022-04-07 Andrew Burgess - - gdb: don't try to use readline before it's initialized - While working on a different patch, I triggered an assertion from the - initialize_current_architecture code, specifically from one of - the *_gdbarch_init functions in a *-tdep.c file. This exposes a - couple of issues with GDB. - - This is easy enough to reproduce by adding 'gdb_assert (false)' into a - suitable function. For example, I added a line into i386_gdbarch_init - and can see the following issue. - - I start GDB and immediately hit the assert, the output is as you'd - expect, except for the very last line: - - $ ./gdb/gdb --data-directory ./gdb/data-directory/ - ../../src.dev-1/gdb/i386-tdep.c:8455: internal-error: i386_gdbarch_init: Assertion `false' failed. - A problem internal to GDB has been detected, - further debugging may prove unreliable. - ----- Backtrace ----- - ... snip ... - --------------------- - ../../src.dev-1/gdb/i386-tdep.c:8455: internal-error: i386_gdbarch_init: Assertion `false' failed. - A problem internal to GDB has been detected, - further debugging may prove unreliable. - Quit this debugging session? (y or n) ../../src.dev-1/gdb/ser-event.c:212:16: runtime error: member access within null pointer of type 'struct serial' - - Something goes wrong when we try to query the user. Note, I - configured GDB with --enable-ubsan, I suspect that without this the - above "error" would actually just be a crash. - - The backtrace from ser-event.c:212 looks like this: - - (gdb) bt 10 - #0 serial_event_clear (event=0x675c020) at ../../src/gdb/ser-event.c:212 - #1 0x0000000000769456 in invoke_async_signal_handlers () at ../../src/gdb/async-event.c:211 - #2 0x000000000295049b in gdb_do_one_event () at ../../src/gdbsupport/event-loop.cc:194 - #3 0x0000000001f015f8 in gdb_readline_wrapper ( - prompt=0x67135c0 "../../src/gdb/i386-tdep.c:8455: internal-error: i386_gdbarch_init: Assertion `false' failed.\nA problem internal to GDB has been detected,\nfurther debugging may prove unreliable.\nQuit this debugg"...) - at ../../src/gdb/top.c:1141 - #4 0x0000000002118b64 in defaulted_query(const char *, char, typedef __va_list_tag __va_list_tag *) ( - ctlstr=0x2e4eb68 "%s\nQuit this debugging session? ", defchar=0 '\000', args=0x7fffffffa6e0) - at ../../src/gdb/utils.c:934 - #5 0x0000000002118f72 in query (ctlstr=0x2e4eb68 "%s\nQuit this debugging session? ") - at ../../src/gdb/utils.c:1026 - #6 0x00000000021170f6 in internal_vproblem(internal_problem *, const char *, int, const char *, typedef __va_list_tag __va_list_tag *) (problem=0x6107bc0 , file=0x2b976c8 "../../src/gdb/i386-tdep.c", - line=8455, fmt=0x2b96d7f "%s: Assertion `%s' failed.", ap=0x7fffffffa8e8) at ../../src/gdb/utils.c:417 - #7 0x00000000021175a0 in internal_verror (file=0x2b976c8 "../../src/gdb/i386-tdep.c", line=8455, - fmt=0x2b96d7f "%s: Assertion `%s' failed.", ap=0x7fffffffa8e8) at ../../src/gdb/utils.c:485 - #8 0x00000000029503b3 in internal_error (file=0x2b976c8 "../../src/gdb/i386-tdep.c", line=8455, - fmt=0x2b96d7f "%s: Assertion `%s' failed.") at ../../src/gdbsupport/errors.cc:55 - #9 0x000000000122d5b6 in i386_gdbarch_init (info=..., arches=0x0) at ../../src/gdb/i386-tdep.c:8455 - (More stack frames follow...) - - It turns out that the problem is that the async event handler - mechanism has been invoked, but this has not yet been initialized. - - If we look at gdb_init (in gdb/top.c) we can indeed see the call to - gdb_init_signals is after the call to initialize_current_architecture. - - If I reorder the calls, moving gdb_init_signals earlier, then the - initial error is resolved, however, things are still broken. I now - see the same "Quit this debugging session? (y or n)" prompt, but when - I provide an answer and press return GDB immediately crashes. - - So what's going on now? The next problem is that the call_readline - field within the current_ui structure is not initialized, and this - callback is invoked to process the reply I entered. - - The problem is that call_readline is setup as a result of calling - set_top_level_interpreter, which is called from captured_main_1. - Unfortunately, set_top_level_interpreter is called after gdb_init is - called. - - I wondered how to solve this problem for a while, however, I don't - know if there's an easy "just reorder some lines" solution here. - Looking through captured_main_1 there seems to be a bunch of - dependencies between printing various things, parsing config files, - and setting up the interpreter. I'm sure there is a solution hiding - in there somewhere.... I'm just not sure I want to spend any longer - looking for it. - - So. - - I propose a simpler solution, more of a hack/work-around. In utils.c - we already have a function filtered_printing_initialized, this is - checked in a few places within internal_vproblem. In some of these - cases the call gates whether or not GDB will query the user. - - My proposal is to add a new readline_initialized function, which - checks if the current_ui has had readline initialized yet. If this is - not the case then we should not attempt to query the user. - - After this change GDB prints the error message, the backtrace, and - then aborts (including dumping core). This actually seems pretty sane - as, if GDB has not yet made it through the initialization then it - doesn't make much sense to allow the user to say "no, I don't want to - quit the debug session" (I think). - -2022-04-07 Luis Machado - - Recognize the NT_ARM_SYSTEM_CALL register set - Update binutils to recognize the NT_ARM_SYSTEM_CALL set that is dumped by - Linux to core files. - -2022-04-07 Mark Harmstone - - Add support for COFF secidx relocations - bfd * 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. - - gas * 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. - - include * coff/i386.h: Define R_SECTION. - * coff/x86_64.h: Likewise. - - ld * 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-04-07 Jan Beulich - - gas/Dwarf: record functions - To help tools like addr2line looking up function names, in particular - when dealing with e.g. PE/COFF binaries (linked from ELF objects), where - there's no ELF symbol table to fall back to, emit minimalistic - information for functions marked as such and having their size - specified. - - Notes regarding the restriction to (pure) ELF: - - I realize this is a layering violation; I don't see how to deal with - that in a better way. - - S_GET_SIZE(), when OBJ_MAYBE_ELF is defined, looks wrong: Unlike - S_SET_SIZE() it does not check whether the hook is NULL. - - symbol_get_obj(), when OBJ_MAYBE_ELF is defined, looks unusable, as - its return type can only ever be one object format's type (and this - may then not be ELF's). - - The new testcases are limited to x86 because I wanted to include the - case where function size can't be determined yet at the time Dwarf2 info - is generated. As .nops gains support by further targets, they could also - be added here then (with, as necessary, expecations suitably relaxed to - cover for insn size differences). - -2022-04-07 Jan Beulich - - Arm64: arrange for line number emission for .inst - Just like insns encoded the more conventional way these should have line - number info associated with them. - - Arm32: arrange for line number emission for .inst - Just like insns encoded the more conventional way these should have line - number info associated with them. - - RISC-V: add testcase to check line number emission for .insn - Since no such test looks to exist, derive one from insn.s. - -2022-04-07 Andreas Krebbel - - IBM zSystems: Add support for z16 as CPU name. - So far z16 was identified as arch14. After the machine has been - announced we can now add the real name. - - gas/ChangeLog: - - * 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. - - opcodes/ChangeLog: - - * s390-mkopc.c (main): Enable z16 as CPU string in the opcode - table. - -2022-04-07 GDB Administrator - - Automatic date update in version.in - -2022-04-06 Youling Tang - - gdb: mips: Fix the handling of complex type of function return value - $ objdump -d outputs/gdb.base/varargs/varargs - 00000001200012e8 : - ... - 1200013b8: c7c10000 lwc1 $f1,0(s8) - 1200013bc: c7c00004 lwc1 $f0,4(s8) - 1200013c0: 46000886 mov.s $f2,$f1 - 1200013c4: 46000046 mov.s $f1,$f0 - 1200013c8: 46001006 mov.s $f0,$f2 - 1200013cc: 46000886 mov.s $f2,$f1 - 1200013d0: 03c0e825 move sp,s8 - 1200013d4: dfbe0038 ld s8,56(sp) - 1200013d8: 67bd0080 daddiu sp,sp,128 - 1200013dc: 03e00008 jr ra - 1200013e0: 00000000 nop - - From the above disassembly, we can see that when the return value of the - function is a complex type and len <= 2 * MIPS64_REGSIZE, the return value - will be passed through $f0 and $f2, so fix the corresponding processing - in mips_n32n64_return_value(). - - $ make check RUNTESTFLAGS='GDB=../gdb gdb.base/varargs.exp --outdir=test' - - Before applying the patch: - FAIL: gdb.base/varargs.exp: print find_max_float_real(4, fc1, fc2, fc3, fc4) - FAIL: gdb.base/varargs.exp: print find_max_double_real(4, dc1, dc2, dc3, dc4) - - # of expected passes 9 - # of unexpected failures 2 - - After applying the patch: - # of expected passes 11 - - This also fixes: - FAIL: gdb.base/callfuncs.exp: call inferior func with struct - returns float _Complex - - Co-Authored-By: Maciej W. Rozycki - -2022-04-06 Tom Tromey - - Use new and delete in jit.c - This changes jit.c to use new and delete, rather than XCNEW. This - simplifies the code a little. This was useful for another patch I'm - working on, and I thought it would make sense to send it separately. - - Regression tested on x86-64 Fedora 34. - -2022-04-06 Simon Marchi - - gdb: don't copy entirely optimized out values in value_copy - Bug 28980 shows that trying to value_copy an entirely optimized out - value causes an internal error. The original bug report involves MI and - some Python pretty printer, and is quite difficult to reproduce, but - another easy way to reproduce (that is believed to be equivalent) was - proposed: - - $ ./gdb -q -nx --data-directory=data-directory -ex "py print(gdb.Value(gdb.Value(5).type.optimized_out()))" - /home/smarchi/src/binutils-gdb/gdb/value.c:1731: internal-error: value_copy: Assertion `arg->contents != nullptr' failed. - - This is caused by 5f8ab46bc691 ("gdb: constify parameter of - value_copy"). It added an assertion that the contents buffer is - allocated if the value is not lazy: - - if (!value_lazy (val)) - { - gdb_assert (arg->contents != nullptr); - - This was based on the comment on value::contents, which suggest that - this is the case: - - /* Actual contents of the value. Target byte-order. NULL or not - valid if lazy is nonzero. */ - gdb::unique_xmalloc_ptr contents; - - However, it turns out that it can also be nullptr also if the value is - entirely optimized out, for example on exit of - allocate_optimized_out_value. That function creates a lazy value, marks - the entire value as optimized out, and then clears the lazy flag. But - contents remains nullptr. - - This wasn't a problem for value_copy before, because it was calling - value_contents_all_raw on the input value, which caused contents to be - allocated before doing the copy. This means that the input value to - value_copy did not have its contents allocated on entry, but had it - allocated on exit. The result value had it allocated on exit. And that - we copied bytes for an entirely optimized out value (i.e. meaningless - bytes). - - From here I see two choices: - - 1. respect the documented invariant that contents is nullptr only and - only if the value is lazy, which means making - allocate_optimized_out_value allocate contents - 2. extend the cases where contents can be nullptr to also include - values that are entirely optimized out (note that you could still - have some entirely optimized out values that do have contents - allocated, it depends on how they were created) and adjust - value_copy accordingly - - Choice #1 is safe, but less efficient: it's not very useful to allocate - a buffer for an entirely optimized out value. It's even a bit less - efficient than what we had initially, because values coming out of - allocate_optimized_out_value would now always get their contents - allocated. - - Choice #2 would be more efficient than what we had before: giving an - optimized out value without allocated contents to value_copy would - result in an optimized out value without allocated contents (and the - input value would still be without allocated contents on exit). But - it's more risky, since it's difficult to ensure that all users of the - contents (through the various_contents* accessors) are all fine with - that new invariant. - - In this patch, I opt for choice #2, since I think it is a better - direction than choice #1. #1 would be a pessimization, and if we go - this way, I doubt that it will ever be revisited, it will just stay that - way forever. - - Add a selftest to test this. I initially started to write it as a - Python test (since the reproducer is in Python), but a selftest is more - straightforward. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28980 - Change-Id: I6e2f5c0ea804fafa041fcc4345d47064b5900ed7 - -2022-04-06 Jeff Law - - Fix for v850e divq instruction - This is the last of the correctness fixes I've been carrying around for the - v850. - - Like the other recent fixes, this is another case where we haven't been as - careful as we should WRT host vs target types. For the divq instruction - both operands are 32 bit types. Yet in the simulator code we convert them - from unsigned int to signed long by assignment. So 0xfffffffb (aka -5) - turns into 4294967291 and naturally that changes the result of our division. - - The fix is simple, insert a cast to int32_t to force interpretation as a - signed value. - - Testcase for the simulator is included. It has a trivial dependency on the - bins patch. - -2022-04-06 Jeff Law - - Fix "bins" simulation for v850e3v5 - I've been carrying this for a few years. One test in the GCC testsuite is - failing due to a bug in the handling of the v850e3v5 instruction "bins". - - When the "bins" instruction specifies a 32bit bitfield size, the simulator - exhibits undefined behavior by trying to shift a 32 bit quantity by 32 bits. - In the case of a 32 bit shift, we know what the resultant mask should be. So - we can just set it. - - That seemed better than using 1UL for the constant (on a 32bit host unsigned - long might still just be 32 bits) or needlessly forcing everything to - long long types. - - Thankfully the case where this shows up is only bins , 0, 32, - which would normally be encoded as a simple move. - - * testsuite/v850/allinsns.exp: Add v850e3v5. - * testsuite/v850/bins.cgs: New test. - * v850/simops.c (v850_bins): Avoid undefined behavior on left shift. - -2022-04-06 Tiezhu Yang - - gdb: LoongArch: prepend tramp frame unwinder for signal - Implement the "init" method of struct tramp_frame to prepend tramp - frame unwinder for signal on LoongArch. - - With this patch, the following failed testcases can be fixed: - - FAIL: gdb.base/annota1.exp: backtrace @ signal handler (timeout) - FAIL: gdb.base/annota3.exp: backtrace @ signal handler (pattern 2) - -2022-04-06 Andrew Burgess - - gdb: make interp_add static - Since this commit: - - commit 8322445e0584be846f5873b9aab257dc9fbda05d - Date: Tue Jun 21 01:11:45 2016 +0100 - - Introduce interpreter factories - - Interpreters should be registered with GDB, not by calling interp_add, - but with a call to interp_factory_register. I've checked the insight - source, and it too has moved over to using interp_factory_register. - - In this commit I make interp_add static within interps.c. - - There should be no user visible change after this commit. - -2022-04-06 Nick Clifton - - Add code to display the contents of .debug_loclists sections which contain offset entry tables. - 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-06 Luis Machado - - Enable ARMv8.1-m PACBTI support - This set of changes enable support for the ARMv8.1-m PACBTI extensions [1]. - - The goal of the PACBTI extensions is similar in scope to that of a-profile - PAC/BTI (aarch64 only), but the underlying implementation is different. - - One important difference is that the pointer authentication code is stored - in a separate register, thus we don't need to mask/unmask the return address - from a function in order to produce a correct backtrace. - - The patch introduces the following modifications: - - - Extend the prologue analyser for 32-bit ARM to handle some instructions - from ARMv8.1-m PACBTI: pac, aut, pacg, autg and bti. Also keep track of - return address signing/authentication instructions. - - - Adds code to identify object file attributes that indicate the presence of - ARMv8.1-m PACBTI (Tag_PAC_extension, Tag_BTI_extension, Tag_PACRET_use and - Tag_BTI_use). - - - Adds support for DWARF pseudo-register RA_AUTH_CODE, as described in the - aadwarf32 [2]. - - - Extends the dwarf unwinder to track the value of RA_AUTH_CODE. - - - Decorates backtraces with the "[PAC]" identifier when a frame has signed - the return address. - - - Makes GDB aware of a new XML feature "org.gnu.gdb.arm.m-profile-pacbti". This - feature is not included as an XML file on GDB's side because it is only - supported for bare metal targets. - - - Additional documentation. - - [1] https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/armv8-1-m-pointer-authentication-and-branch-target-identification-extension - [2] https://github.com/ARM-software/abi-aa/blob/main/aadwarf32/aadwarf32.rst - -2022-04-06 Andrew Burgess - - gdb: move gdb_disassembly_flag into a new disasm-flags.h file - While working on the disassembler I was getting frustrated. Every - time I touched disasm.h it seemed like every file in GDB would need to - be rebuilt. Surely the disassembler can't be required by that many - parts of GDB, right? - - Turns out that disasm.h is included in target.h, so pretty much every - file was being rebuilt! - - The only thing from disasm.h that target.h needed is the - gdb_disassembly_flag enum, as this is part of the target_ops api. - - In this commit I move gdb_disassembly_flag into its own file. This is - then included in target.h and disasm.h, after which, the number of - files that depend on disasm.h is much reduced. - - I also audited all the other includes of disasm.h and found that the - includes in mep-tdep.c and python/py-registers.c are no longer needed, - so I've removed these. - - Now, after changing disasm.h, GDB rebuilds much quicker. - - There should be no user visible changes after this commit. - -2022-04-06 GDB Administrator - - Automatic date update in version.in - -2022-04-05 Tom Tromey - - Introduce wrapped_file - Simon pointed out that timestamped_file probably needed to implement a - few more methods. This patch introduces a new file-wrapping file that - forwards most of its calls, making it simpler to implement new such - files. It also converts timestamped_file and pager_file to use it. - - Regression tested on x86-64 Fedora 34. - -2022-04-05 Tom Tromey - - Don't call init_thread_list in windows-nat.c - I don't think there's any need to call init_thread_list in - windows-nat.c. This patch removes it. I tested this using the - internal AdaCore test suite on Windows, which FWIW does include some - multi-threaded inferiors. - -2022-04-05 Simon Marchi - - gdb/testsuite: fix intermittent failure in gdb.base/vfork-follow-parent.exp - Tom de Vries reported some failures in this test: - - continue - Continuing. - [New inferior 2 (process 14967)] - - Thread 1.1 "vfork-follow-pa" hit Breakpoint 2, break_parent () at /home/vries/gdb_versions/devel/src/gdb/testsuite/gdb.base/vfork-follow-parent.c:23 - 23 } - (gdb) FAIL: gdb.base/vfork-follow-parent.exp: resolution_method=schedule-multiple: continue to end of inferior 2 - inferior 1 - [Switching to inferior 1 [process 14961] (/home/vries/gdb_versions/devel/build/gdb/testsuite/outputs/gdb.base/vfork-follow-parent/vfork-follow-parent)] - [Switching to thread 1.1 (process 14961)] - #0 break_parent () at /home/vries/gdb_versions/devel/src/gdb/testsuite/gdb.base/vfork-follow-parent.c:23 - 23 } - (gdb) PASS: gdb.base/vfork-follow-parent.exp: resolution_method=schedule-multiple: inferior 1 - continue - Continuing. - [Inferior 2 (process 14967) exited normally] - (gdb) FAIL: gdb.base/vfork-follow-parent.exp: resolution_method=schedule-multiple: continue to break_parent (the program exited) - - Here, we continue both the vfork parent and child, since - schedule-multiple is on. The child exits, which un-freezes the parent - and makes an exit event available to GDB. We expect GDB to consume this - exit event and present it to the user. Here, we see that GDB shows the - parent hitting a breakpoint before showing the child exit. - - Because of the vfork, we know that chronologically, the child exiting - must have happend before the parent hitting a breakpoint. However, - scheduling being what it is, it is possible for the parent to un-freeze - and exit quickly, such that when GDB pulls events out of the kernel, - exit events for both processes are available. And then, GDB may chose - at random to return the one for the parent first. This is what I - imagine what causes the failure shown above. - - We could change the test to expect both possible outcomes, but I wanted - to avoid complicating the .exp file that way. Instead, add a variable - that the parent loops on that we set only after we confirmed the exit of - the child. That should ensure that the order is always the same. - - Note that I wasn't able to reproduce the failure, so I can't tell if - this fix really fixes the problem. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29021 - Change-Id: Ibc8e527e0e00dac54b22021fe4d9d8ab0f3b28ad - -2022-04-05 Simon Marchi - - gdb/testsuite: fix intermittent failures in gdb.mi/mi-cmd-user-context.exp - I got failures like this once on a CI: - - frame^M - &"frame\n"^M - ~"#0 child_sub_function () at /home/jenkins/workspace/binutils-gdb_master_build/arch/amd64/target_board/unix/src/binutils-gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c:33\n"^M - ~"33\t dummy = !dummy; /* thread loop line */\n"^M - ^done^M - (gdb) ^M - FAIL: gdb.mi/mi-cmd-user-context.exp: frame 1 (unexpected output) - - The problem is that the test expects the following regexp: - - ".*#0 0x.*" - - And that typically works, when the output of the frame command looks - like: - - #0 0x00005555555551bb in child_sub_function () at ... - - Note the lack of hexadecimal address in the failing case. Whether or - not the hexadecimal address is printed (roughly) depends on whether the - current PC is at the beginning of a line. So depending on where thread - 2 was when GDB stopped it (after thread 1 hit its breakpoint), we can - get either output. Adjust the regexps to not expect an hexadecimal - prefix (0x) but a function name instead (either child_sub_function or - child_function). That one is always printed, and is also a good check - that we are in the frame we expect. - - Note that for test "frame 5", we are showing a pthread frame (on my - system), so the function name is internal to pthread, not something we - can rely on. In that case, it's almost certain that we are not at the - beginning of a line, or that we don't have debug info, so I think it's - fine to expect the hex prefix. - - And for test "frame 6", it's ok to _not_ expect a hex prefix (what the - test currently does), since we are showing thread 1, which has hit a - breakpoint placed at the beginning of a line. - - When testing this, Tom de Vries pointed out that the current test code - doesn't ensure that the child threads are in child_sub_function when - they are stopped. If the scheduler chooses so, it is possible for the - child threads to be still in the pthread_barrier_wait or child_function - functions when they get stopped. So that would be another racy failure - waiting to happen. - - The only way I can think of to ensure the child threads are in the - child_sub_function function when they get stopped is to synchronize the - threads using some variables instead of pthread_barrier_wait. So, - replace the barrier with an array of flags (one per child thread). Each - child thread flips its flag in child_sub_function to allow the main - thread to make progress and eventually hit the breakpoint. - - I copied user-selected-context-sync.c to a new mi-cmd-user-context.c and - made modifications to that, to avoid interfering with - user-selected-context-sync.exp. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29025 - Change-Id: I919673bbf9927158beb0e8b7e9e980b8d65eca90 - -2022-04-05 Luis Machado - - Fix qRcmd error code parsing - Someone at IRC spotted a bug in qRcmd handling. This looks like an oversight - or it is that way for historical reasons. - - The code in gdb/remote.c:remote_target::rcmd uses isdigit instead of - isxdigit. One could argue that we are expecting decimal numbers, but further - below we use fromhex (). - - Update the function to use isxdigit instead and also update the documentation. - - I see there are lots of other cases of undocumented number format for error - messages, mostly described as NN instead of nn. For now I'll just update - this particular function. - -2022-04-05 Simon Marchi - - gdb: resume ongoing step after handling fork or vfork - The test introduced by this patch would fail in this configuration, with - the native-gdbserver or native-extended-gdbserver boards: - - FAIL: gdb.threads/next-fork-other-thread.exp: fork_func=fork: target-non-stop=auto: non-stop=off: displaced-stepping=auto: i=2: next to for loop - - The problem is that the step operation is forgotten when handling the - fork/vfork. With "debug infrun" and "debug remote", it looks like this - (some lines omitted for brevity). We do the next: - - [infrun] proceed: enter - [infrun] proceed: addr=0xffffffffffffffff, signal=GDB_SIGNAL_DEFAULT - [infrun] resume_1: step=1, signal=GDB_SIGNAL_0, trap_expected=0, current thread [4154304.4154304.0] at 0x5555555553bf - [infrun] do_target_resume: resume_ptid=4154304.0.0, step=1, sig=GDB_SIGNAL_0 - [remote] Sending packet: $vCont;r5555555553bf,5555555553c4:p3f63c0.3f63c0;c:p3f63c0.-1#cd - [infrun] proceed: exit - - We then handle a fork event: - - [infrun] fetch_inferior_event: enter - [remote] wait: enter - [remote] Packet received: T05fork:p3f63ee.3f63ee;06:0100000000000000;07:b08e59f6ff7f0000;10:bf60e8f7ff7f0000;thread:p3f63c0.3f63c6;core:17; - [remote] wait: exit - [infrun] print_target_wait_results: target_wait (-1.0.0 [process -1], status) = - [infrun] print_target_wait_results: 4154304.4154310.0 [Thread 4154304.4154310], - [infrun] print_target_wait_results: status->kind = FORKED, child_ptid = 4154350.4154350.0 - [infrun] handle_inferior_event: status->kind = FORKED, child_ptid = 4154350.4154350.0 - [remote] Sending packet: $D;3f63ee#4b - [infrun] resume_1: step=0, signal=GDB_SIGNAL_0, trap_expected=0, current thread [4154304.4154310.0] at 0x7ffff7e860bf - [infrun] do_target_resume: resume_ptid=4154304.0.0, step=0, sig=GDB_SIGNAL_0 - [remote] Sending packet: $vCont;c:p3f63c0.-1#73 - [infrun] fetch_inferior_event: exit - - In the first snippet, we resume the stepping thread with the range-stepping (r) - vCont command. But after handling the fork (detaching the fork child), we - resumed the whole process freely. The stepping thread, which was paused by - GDBserver while reporting the fork event, was therefore resumed freely, instead - of confined to the addresses of the stepped line. Note that since this - is a "next", it could be that we have entered a function, installed a - step-resume breakpoint, and it's ok to continue freely the stepping - thread, but that's not the case here. The two snippets shown above were - next to each other in the logs. - - For the fork case, we can resume stepping right after handling the - event. - - However, for the vfork case, where we are waiting for the - external child process to exec or exit, we only resume the thread that - called vfork, and keep the others stopped (see patch "gdb: fix handling of - vfork by multi-threaded program" prior in this series). So we can't - resume the stepping thread right now. Instead, do it after handling the - vfork-done event. - - Change-Id: I92539c970397ce880110e039fe92b87480f816bd - -2022-04-05 Simon Marchi - - gdb/remote: remove_new_fork_children don't access target_waitstatus::child_ptid if kind == TARGET_WAITKIND_THREAD_EXITED - Following the previous patch, running - gdb.threads/forking-threads-plus-breakpoints.exp continuously eventually - gives me an internal error. - - gdb/target/waitstatus.h:372: internal-error: child_ptid: Assertion `m_kind == TARGET_WAITKIND_FORKED || m_kind == TARGET_WAITKIND_VFORKED' failed.^M - FAIL: gdb.threads/forking-threads-plus-breakpoint.exp: cond_bp_target=0: detach_on_fork=on: displaced=off: inferior 1 exited (GDB internal error) - - The backtrace is: - - 0x55925b679c85 internal_error(char const*, int, char const*, ...) - /home/simark/src/binutils-gdb/gdbsupport/errors.cc:55 - 0x559258deadd2 target_waitstatus::child_ptid() const - /home/simark/src/binutils-gdb/gdb/target/waitstatus.h:372 - 0x55925a7cbac9 remote_target::remove_new_fork_children(threads_listing_context*) - /home/simark/src/binutils-gdb/gdb/remote.c:7311 - 0x55925a79dfdb remote_target::update_thread_list() - /home/simark/src/binutils-gdb/gdb/remote.c:3981 - 0x55925ad79b83 target_update_thread_list() - /home/simark/src/binutils-gdb/gdb/target.c:3793 - 0x55925addbb15 update_thread_list() - /home/simark/src/binutils-gdb/gdb/thread.c:2031 - 0x559259d64838 stop_all_threads(char const*, inferior*) - /home/simark/src/binutils-gdb/gdb/infrun.c:5104 - 0x559259d88b45 keep_going_pass_signal - /home/simark/src/binutils-gdb/gdb/infrun.c:8215 - 0x559259d8951b keep_going - /home/simark/src/binutils-gdb/gdb/infrun.c:8251 - 0x559259d78835 process_event_stop_test - /home/simark/src/binutils-gdb/gdb/infrun.c:6858 - 0x559259d750e9 handle_signal_stop - /home/simark/src/binutils-gdb/gdb/infrun.c:6580 - 0x559259d6c07b handle_inferior_event - /home/simark/src/binutils-gdb/gdb/infrun.c:5832 - 0x559259d57db8 fetch_inferior_event() - /home/simark/src/binutils-gdb/gdb/infrun.c:4222 - - Indeed, the code accesses target_waitstatus::child_ptid when the kind - is TARGET_WAITKIND_THREAD_EXITED, which is not right. A - TARGET_WAITKIND_THREAD_EXITED event does not have a child_ptid value - associated, it has an exit status, which we are not interested in. The - intent is to remove from the thread list the thread that has exited. - Its ptid is found in the stop reply event, get it from there. - - Change-Id: Icb298cbb80b8779fdf0c660dde9a5314d5591535 - -2022-04-05 Simon Marchi - - gdbserver: report correct status in thread stop race condition - The test introduced by the following patch would sometimes fail in this - configuration: - - FAIL: gdb.threads/next-fork-other-thread.exp: fork_func=vfork: target-non-stop=on: non-stop=off: displaced-stepping=auto: i=14: next to for loop - - The test has multiple threads constantly forking or vforking while the - main thread keep doing "next"s. - - (After writing the commit message, I realized this also fixes a similar - failure in gdb.threads/forking-threads-plus-breakpoint.exp with the - native-gdbserver and native-extended-gdbserver boards.) - - As stop_all_threads is called, because the main thread finished its - "next", it inevitably happens at some point that we ask the remote - target to stop a thread and wait() reports that this thread stopped with - a fork or vfork event, instead of the SIGSTOP we sent to try to stop it. - - While running this test, I attached to GDBserver and stopped at - linux-low.cc:3626. We can see that the status pulled from the kernel - for 2742805 is indeed a vfork event: - - (gdb) p/x w - $3 = 0x2057f - (gdb) p WIFSTOPPED(w) - $4 = true - (gdb) p WSTOPSIG(w) - $5 = 5 - (gdb) p/x (w >> 8) & (PTRACE_EVENT_VFORK << 8) - $6 = 0x200 - - However, the statement at line 3626 overrides that: - - ourstatus->set_stopped (gdb_signal_from_host (WSTOPSIG (w))); - - OURSTATUS becomes "stopped by a SIGTRAP". The information about the - fork or vfork is lost. - - It's then all downhill from there, stop_all_threads eventually asks for - a thread list update. That thread list includes the child of that - forgotten fork or vfork, the remote target goes "oh cool, a new process, - let's attach to it!", when in fact that vfork child's destiny was to be - detached. - - My reverse-engineered understanding of the code around there is that the - if/else between lines 3562 and 3583 (in the original code) makes sure - OURSTATUS is always initialized (not "ignore"). Either the details are - already in event_child->waitstatus (in the case of fork/vfork, for - example), in which case we just copy event_child->waitstatus to - ourstatus. Or, if the event is a plain "stopped by a signal" or a - syscall event, OURSTATUS is set to "stopped", but without a signal - number. Lines 3601 to 3629 (in the original code) serve to fill in that - last bit of information. - - The problem is that when `w` holds the vfork status, the code wrongfully - takes this branch, because WSTOPSIG(w) returns SIGTRAP: - - else if (current_thread->last_resume_kind == resume_stop - && WSTOPSIG (w) != SIGSTOP) - - The intent of this branch is, for example, when we sent SIGSTOP to try - to stop a thread, but wait() reports that it stopped with another signal - (that it must have received from somewhere else simultaneously), say - SIGWINCH. In that case, we want to report the SIGWINCH. But in our - fork/vfork case, we don't want to take this branch, as the thread didn't - really stop because it received a signal. For the non "stopped by a - signal" and non "syscall signal" cases, we would ideally skip over all - that snippet that fills in the signal or syscall number. - - The fix I propose is to move this snipppet of the else branch of the - if/else above. In addition to moving the code, the last two "else if" - branches: - - 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))); - - are changed into a single else: - - else - ourstatus->set_stopped (gdb_signal_from_host (WSTOPSIG (w))); - - This is the default path we take if: - - - W is not a syscall status - - W does not represent a SIGSTOP that have sent to stop the thread and - therefore want to suppress it - - Change-Id: If2dc1f0537a549c293f7fa3c53efd00e3e194e79 - -2022-04-05 Simon Marchi - - gdb: fix handling of vfork by multi-threaded program (follow-fork-mode=parent, detach-on-fork=on) - There is a problem with how GDB handles a vfork happening in a - multi-threaded program. This problem was reported to me by somebody not - using vfork directly, but using system(3) in a multi-threaded program, - which may be implemented using vfork. - - This patch only deals about the follow-fork-mode=parent, - detach-on-fork=on case, because it would be too much to chew at once to - fix the bugs in the other cases as well (I tried). - - The problem - ----------- - - When a program vforks, the parent thread is suspended by the kernel - until the child process exits or execs. Specifically, in a - multi-threaded program, only the thread that called vfork is suspended, - other threads keep running freely. This is documented in the vfork(2) - man page ("Caveats" section). - - Let's suppose GDB is handling a vfork and the user's desire is to detach - from the child. Before detaching the child, GDB must remove the software - breakpoints inserted in the shared parent/child address space, in case - there's a breakpoint in the path the child is going to take before - exec'ing or exit'ing (unlikely, but possible). Otherwise the child could - hit a breakpoint instruction while running outside the control of GDB, - which would make it crash. GDB must also avoid re-inserting breakpoints - in the parent as long as it didn't receive the "vfork done" event (that - is, when the child has exited or execed): since the address space is - shared with the child, that would re-insert breakpoints in the child - process also. So what GDB does is: - - 1. Receive "vfork" event for the parent - 2. Remove breakpoints from the (shared) address space and set - program_space::breakpoints_not_allowed to avoid re-inserting them - 3. Detach from the child thread - 4. Resume the parent - 5. Wait for and receive "vfork done" event for the parent - 6. Clean program_space::breakpoints_not_allowed and re-insert - breakpoints - 7. Resume the parent - - Resuming the parent at step 4 is necessary in order for the kernel to - report the "vfork done" event. The kernel won't report a ptrace event - for a thread that is ptrace-stopped. But the theory behind this is that - between steps 4 and 5, the parent won't actually do any progress even - though it is ptrace-resumed, because the kernel keeps it suspended, - waiting for the child to exec or exit. So it doesn't matter for that - thread if breakpoints are not inserted. - - The problem is when the program is multi-threaded. In step 4, GDB - resumes all threads of the parent. The thread that did the vfork stays - suspended by the kernel, so that's fine. But other threads are running - freely while breakpoints are removed, which is a problem because they - could miss a breakpoint that they should have hit. - - The problem is present with all-stop and non-stop targets. The only - difference is that with an all-stop targets, the other threads are - stopped by the target when it reports the vfork event and are resumed by - the target when GDB resumes the parent. With a non-stop target, the - other threads are simply never stopped. - - The fix - ------- - - There many combinations of settings to consider (all-stop/non-stop, - target-non-stop on/off, follow-fork-mode parent/child, detach-on-fork - on/off, schedule-multiple on/off), but for this patch I restrict the - scope to follow-fork-mode=parent, detach-on-fork=on. That's the - "default" case, where we detach the child and keep debugging the - parent. I tried to fix them all, but it's just too much to do at once. - The code paths and behaviors for when we don't detach the child are - completely different. - - The guiding principle for this patch is that all threads of the vforking - inferior should be stopped as long as breakpoints are removed. This is - similar to handling in-line step-overs, in a way. - - For non-stop targets (the default on Linux native), this is what - happens: - - - In follow_fork, we call stop_all_threads to stop all threads of the - inferior - - In follow_fork_inferior, we record the vfork parent thread in - inferior::thread_waiting_for_vfork_done - - Back in handle_inferior_event, we call keep_going, which resumes only - the event thread (this is already the case, with a non-stop target). - This is the thread that will be waiting for vfork-done. - - When we get the vfork-done event, we go in the (new) handle_vfork_done - function to restart the previously stopped threads. - - In the same scenario, but with an all-stop target: - - - In follow_fork, no need to stop all threads of the inferior, the - target has stopped all threads of all its inferiors before returning - the event. - - In follow_fork_inferior, we record the vfork parent thread in - inferior::thread_waiting_for_vfork_done. - - Back in handle_inferior_event, we also call keep_going. However, we - only want to resume the event thread here, not all inferior threads. - In internal_resume_ptid (called by resume_1), we therefore now check - whether one of the inferiors we are about to resume has - thread_waiting_for_vfork_done set. If so, we only resume that - thread. - - Note that when resuming multiple inferiors, one vforking and one not - non-vforking, we could resume the vforking thread from the vforking - inferior plus all threads from the non-vforking inferior. However, - this is not implemented, it would require more work. - - When we get the vfork-done event, the existing call to keep_going - naturally resumes all threads. - - Testing-wise, add a test that tries to make the main thread hit a - breakpoint while a secondary thread calls vfork. Without the fix, the - main thread keeps going while breakpoints are removed, resulting in a - missed breakpoint and the program exiting. - - Change-Id: I20eb78e17ca91f93c19c2b89a7e12c382ee814a1 - -2022-04-05 Simon Marchi - - gdb/infrun: add logging statement to do_target_resume - This helped me, it shows which ptid we actually call target_resume with. - - Change-Id: I2dfd771e83df8c25f39371a13e3e91dc7882b73d - -2022-04-05 Simon Marchi - - gdb/infrun: add inferior parameters to stop_all_threads and restart_threads - A following patch will want to stop all threads of a given inferior (as - opposed to all threads of all inferiors) while handling a vfork, and - restart them after. To help with this, add inferior parameters to - stop_all_threads and restart_threads. This is done as a separate patch - to make sure this doesn't cause regressions on its own, and to keep the - following patches more concise. - - No visible changes are expected here, since all calls sites pass - nullptr, which should keep the existing behavior. - - Change-Id: I4d9ba886ce842042075b4e346cfa64bbe2580dbf - -2022-04-05 Simon Marchi - - gdb: replace inferior::waiting_for_vfork_done with inferior::thread_waiting_for_vfork_done - The inferior::waiting_for_vfork_done flag indicates that some thread in - that inferior is waiting for a vfork-done event. Subsequent patches - will need to know which thread precisely is waiting for that event. - - Replace the boolean flag (waiting_for_vfork_done) with a thread_info - pointer (thread_waiting_for_vfork_done). - - I think there is a latent buglet in that waiting_for_vfork_done is - currently not reset on inferior exec or exit. I could imagine that if a - thread in the parent process calls exec or exit while another thread of - the parent process is waiting for its vfork child to exec or exit, we - could end up with inferior::waiting_for_vfork_done without a thread - actually waiting for a vfork-done event anymore. And since that flag is - checked in resume_1, things could misbehave there. - - Since the new field points to a thread_info object, and those are - destroyed on exec or exit, it could be worse now since we could try to - access freed memory, if thread_waiting_for_vfork_done were to point to a - stale thread_info. To avoid this, clear the field in - infrun_inferior_exit and infrun_inferior_execd. - - Change-Id: I31b847278613a49ba03fc4915f74d9ceb228fdce - -2022-04-05 Simon Marchi - - gdb: make timestamped_file implement write_async_safe - Trying to use "set debug linux-nat 1", I get an internal error: - - /home/smarchi/src/binutils-gdb/gdb/ui-file.h:70: internal-error: write_async_safe: write_async_safe - - The problem is that timestamped_file doesn't implement write_async_safe, - which linux-nat's sigchld_handler uses. Implement it. - - Change-Id: I830981010c6119f13ae673605ed015cced0f5ee8 - -2022-04-05 GDB Administrator - - Automatic date update in version.in - -2022-04-04 Andrew Burgess - - gdb/testsuite: fix timeout in server-pipe.exp test - I noticed that the gdb.server/server-pipe.exp test would sometimes - timeout when my machine was more heavily loaded. Turns out the test - is reading all the shared libraries over GDB's remote protocol, which - can be slow. - - We avoid this in other tests by setting the sysroot in GDBFLAGS, - something which is missing from the gdb.server/server-pipe.exp test. - - Fix the timeouts by setting sysroot in GDBFLAGS, after this the shared - libraries are no longer copied over the remote protocol, and I no - longer see the test timeout. - -2022-04-04 John Baldwin - - Handle TLS variable lookups when using separate debug files. - Commit df22c1e5d53c38f38bce6072bb46de240f9e0e2b handled the case that - a separate debug file was passed as the objfile for a shared library - to svr4_fetch_objfile_link_map. However, a separate debug file can - also be passed for TLS variables in the main executable. In addition, - frv_fetch_objfile_link_map also expects to be passed the original - objfile rather than a separate debug file, so pull the code to resolve - a separate debug file to the main objfile up into - target_translate_tls_address. - -2022-04-04 Lancelot SIX - - gdb: Add maint set ignore-prologue-end-flag - The previous patch added support for the DWARF prologue-end flag in line - table. This flag can be used by DWARF producers to indicate where to - place breakpoints past a function prologue. However, this takes - precedence over prologue analyzers. So if we have to debug a program - with erroneous debug information, the overall debugging experience will - be degraded. - - This commit proposes to add a maintenance command to instruct GDB to - ignore the prologue_end flag. - - Tested on x86_64-gnu-linux. - - Change-Id: Idda6d1b96ba887f4af555b43d9923261b9cc6f82 - -2022-04-04 Lancelot SIX - - gdb: Add support for DW_LNS_set_prologue_end in line-table - Add support for DW_LNS_set_prologue_end when building line-tables. This - attribute can be set by the compiler to indicate that an instruction is - an adequate place to set a breakpoint just after the prologue of a - function. - - The compiler might set multiple prologue_end, but considering how - current skip_prologue_using_sal works, this commit modifies it to accept - the first instruction with this marker (if any) to be the place where a - breakpoint should be placed to be at the end of the prologue. - - The need for this support came from a problematic usecase generated by - hipcc (i.e. clang). The problem is as follows: There's a function - (lets call it foo) which covers PC from 0xa800 to 0xa950. The body of - foo begins with a call to an inlined function, covering from 0xa800 to - 0xa94c. The issue is that when placing a breakpoint at 'foo', GDB - inserts the breakpoint at 0xa818. The 0x18 offset is what GDB thinks is - foo's first address past the prologue. - - Later, when hitting the breakpoint, GDB reports the stop within the - inlined function because the PC falls in its range while the user - expects to stop in FOO. - - Looking at the line-table for this location, we have: - - INDEX LINE ADDRESS IS-STMT - [...] - 14 293 0x000000000000a66c Y - 15 END 0x000000000000a6e0 Y - 16 287 0x000000000000a800 Y - 17 END 0x000000000000a818 Y - 18 287 0x000000000000a824 Y - [...] - - For comparison, let's look at llvm-dwarfdump's output for this CU: - - Address Line Column File ISA Discriminator Flags - ------------------ ------ ------ ------ --- ------------- ------------- - [...] - 0x000000000000a66c 293 12 2 0 0 is_stmt - 0x000000000000a6e0 96 43 82 0 0 is_stmt - 0x000000000000a6f8 102 18 82 0 0 is_stmt - 0x000000000000a70c 102 24 82 0 0 - 0x000000000000a710 102 18 82 0 0 - 0x000000000000a72c 101 16 82 0 0 is_stmt - 0x000000000000a73c 2915 50 83 0 0 is_stmt - 0x000000000000a74c 110 1 1 0 0 is_stmt - 0x000000000000a750 110 1 1 0 0 is_stmt end_sequence - 0x000000000000a800 107 0 1 0 0 is_stmt - 0x000000000000a800 287 12 2 0 0 is_stmt prologue_end - 0x000000000000a818 114 59 81 0 0 is_stmt - 0x000000000000a824 287 12 2 0 0 is_stmt - 0x000000000000a828 100 58 82 0 0 is_stmt - [...] - - The main difference we are interested in here is that llvm-dwarfdump's - output tells us that 0xa800 is an adequate place to place a breakpoint - past a function prologue. Since we know that foo covers from 0xa800 to - 0xa94c, 0xa800 is the address at which the breakpoint should be placed - if the user wants to break in foo. - - This commit proposes to add support for the prologue_end flag in the - line-program processing. - - The processing of this prologue_end flag is made in skip_prologue_sal, - before it calls gdbarch_skip_prologue_noexcept. The intent is that if - the compiler gave information on where the prologue ends, we should use - this information and not try to rely on architecture dependent logic to - guess it. - - The testsuite have been executed using this patch on GNU/Linux x86_64. - Testcases have been compiled with both gcc/g++ (verison 9.4.0) and - clang/clang++ (version 10.0.0) since at the time of writing GCC does not - set the prologue_end marker. Tests done with GCC 11.2.0 (not over the - entire testsuite) show that it does not emit this flag either. - - No regression have been observed with GCC or Clang. Note that when - using Clang, this patch fixes a failure in - gdb.opt/inline-small-func.exp. - - Change-Id: I720449a8a9b2e1fb45b54c6095d3b1e9da9152f8 - -2022-04-04 Lancelot SIX - - gdb/buildsym: Line record use a record flag - Currently when recording a line entry (with - buildsym_compunit::record_line), a boolean argument argument is used to - indicate that the is_stmt flag should be set for this particular record. - As a later commit will add support for new flags, instead of adding a - parameter to record_line for each possible flag, transform the current - is_stmt parameter into a enum flag. This flags parameter will allow - greater flexibility in future commits. - - This enum flags type is not propagated into the linetable_entry type as - this would require a lot of changes across the codebase for no practical - gain (it currently uses a bitfield where each interesting flag only - occupy 1 bit in the structure). - - Tested on x86_64-linux, no regression observed. - - Change-Id: I5d061fa67bdb34918742505ff983d37453839d6a - -2022-04-04 Simon Marchi - - gdb: make timestamped_file implement can_emit_style_escape - In our AMDGPU downstream port, we use styling in some logging output. - We noticed it stopped working after the gdb_printf changes. Making - timestamped_file implement can_emit_style_escape (returning the value of - the stream it wraps) fixes it. To show that it works, modify some - logging statements in auto-load.c to output style filenames. You can - see it in action by setting "set debug auto-load 1" and running a - program. We can incrementally add styling to other debug statements - throughout GDB, as needed. - - Change-Id: I78a2fd1e078f80f2263251cf6bc53b3a9de9c17a - -2022-04-04 Simon Marchi - - gdb: remove assertion in psymbol_functions::expand_symtabs_matching - psymtab_to_symtab is documented as possibly returning nullptr, if the - primary symtab of the partial symtab has no symbols. However, - psymbol_functions::expand_symtabs_matching asserts that the result of - psymtab_to_symtab as non-nullptr. - - I caught this assert by trying the CTF symbol reader on a library I - built with -gctf: - - $ ./gdb --data-directory=data-directory /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0 - ... - Reading symbols from /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0... - (gdb) maintenance expand-symtabs - /home/simark/src/binutils-gdb/gdb/psymtab.c:1142: internal-error: expand_symtabs_matching: Assertion `symtab != nullptr' failed. - - The "symtab" in question is: - - $ readelf --ctf=.ctf /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0 - ... - CTF archive member: /home/simark/src/babeltrace/src/lib/graph/component-descriptor-set.c: - - Header: - Magic number: 0xdff2 - Version: 4 (CTF_VERSION_3) - Flags: 0xe (CTF_F_NEWFUNCINFO, CTF_F_IDXSORTED, CTF_F_DYNSTR) - Parent name: .ctf - Compilation unit name: /home/simark/src/babeltrace/src/lib/graph/component-descriptor-set.c - Type section: 0x0 -- 0x13 (0x14 bytes) - String section: 0x14 -- 0x5f (0x4c bytes) - - Labels: - - Data objects: - - Function objects: - - Variables: - - Types: - 0x80000001: (kind 5) bt_bool (*) (const bt_value *) (aligned at 0x8) - - Strings: - 0x0: - 0x1: .ctf - 0x6: /home/simark/src/babeltrace/src/lib/graph/component-descriptor-set.c - - It contains a single type, and it is skipped by ctf_add_type_cb, because - an identical type was already seen earlier in this objfile. As a - result, no compunit_symtab is created. - - Change psymbol_functions::expand_symtabs_matching to expect that - psymtab_to_symtab can return nullptr. - - Another possibility would be to make the CTF symbol reader always create - a compunit_symtab, even if there are no symbols in it (like the DWARF - parser does), but so far I don't see any advantage in doing so. - - Change-Id: Ic43c38202c838a5eb87630ed1fd61d33528164f4 - -2022-04-04 Andrew Burgess - - sim: fixes for libopcodes styled disassembler - In commit: - - commit 60a3da00bd5407f07d64dff82a4dae98230dfaac - Date: Sat Jan 22 11:38:18 2022 +0000 - - objdump/opcodes: add syntax highlighting to disassembler output - - I broke several sim/ targets by forgetting to update their uses of the - libopcodes disassembler to take account of the new styled printing. - - These should all be fixed by this commit. - - I've not tried to add actual styled output to the simulator traces, - instead, the styled print routines just ignore the style and print the - output unstyled. - -2022-04-04 Tom Tromey - - Remove some globals from nat/windows-nat.c - nat/windows-nat.c has a number of globals that it uses to communicate - with its clients (gdb and gdbserver). However, if we ever want the - Windows ports to be multi-inferior, globals won't work. - - This patch takes a step toward that by moving most nat/windows-nat.c - globals into a new struct windows_process_info. Many functions are - converted to be methods on this object. - - A couple of globals remain, as they are needed to truly be global due - to the way that the Windows debugging APIs work. - - The clients still have a global for the current process. That is, - this patch is a step toward the end goal, but doesn't implement the - goal itself. - -2022-04-04 Tom Tromey - - Remove windows_thread_info destructor - windows_thread_info declares and defines a destructor, but this - doesn't need to be explicit. - - Use unique_ptr in the Windows thread list - windows-nat.c uses some manual memory management when manipulating the - thread_list global. Changing this to use unique_ptr simplifies the - code, in particular windows_init_thread_list. (Note that, while I - think the the call to init_thread_list in there is wrong, I haven't - removed it in this patch.) - - Use auto_obstack in windows-nat.c - One spot in windows-nat.c can use auto_obstack, removing some manual - memory management. - -2022-04-04 Tom Tromey - - Simplify windows-nat.c solib handling - Currently windows-nat.c uses struct so_list to record its local idea - of which shared libraries have been loaded. However, many fields in - this are not needed, and furthermore I found this quite confusing at - first -- Windows actually uses solib-target and so the use of so_list - here is weird. - - This patch simplifies this code by changing it to use a std::vector - and a new type that holds exactly what's needed for the Windows code. - -2022-04-04 Pedro Alves - - Avoid undefined behavior in gdbscm_make_breakpoint - Running gdb.guile/scm-breakpoint.exp against an --enable-ubsan build, - we see: - - UNRESOLVED: gdb.guile/scm-breakpoint.exp: test_watchpoints: create a breakpoint with an invalid type number - ... - guile (define wp2 (make-breakpoint "result" #:wp-class WP_WRITE #:type 999)) - ../../src/gdb/guile/scm-breakpoint.c:377:11: runtime error: load of value 999, which is not a valid value for type 'bptype' - ERROR: GDB process no longer exists - - Fix this by parsing the user/guile input as plain int, and cast to - internal type only after we know we have a number that would be valid. - - Change-Id: I03578d07db00be01b610a8f5ce72e5521aea6a4b - -2022-04-04 Tom Tromey - - Add context-sensitive field name completion to Ada parser - This updates the Ada expression parser to implement context-sensitive - field name completion. This is PR ada/28727. - - This is somewhat complicated due to some choices in the Ada lexer -- - it chooses to represent a sequence of "."-separated identifiers as a - single token, so the parser must partially recreate the completer's - logic to find the completion word boundaries. - - Despite the minor warts in this patch, though, it is a decent - improvement. It's possible that the DWARF reader rewrite will help - fix the package completion problem pointed out in this patch as well. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28727 - -2022-04-04 Tom Tromey - - Consolidate single-char tokens in ada-lex.l - There are two rules in ada-lex.l that match single-character tokens. - This merges them. - - Also, this removes '.' from the list of such tokens. '.' is not used - in any production in ada-exp.y, and removing it here helps the - subsequent completion patches. - -2022-04-04 Tom Tromey - - Remove the Ada DOT_ALL token - The Ada parser has a DOT_ALL token to represent ".all", and another - token to represent other "." forms. However, for - completion it is a bit more convenient to unify these cases, so this - patch removes DOT_ALL. - - Refactor ada-lex.l:processId - processId in ada-lex.l is a bit funny -- it uses an "if" and a - "switch", and a nested loop. This patch cleans it up a bit, changing - it to use a boolean flag and a simpler "if". - - Implement completion for Ada attributes - This adds a completer for Ada attributes. Some work in the lexer is - required in order to match end-of-input correctly, as flex does not - have a general-purpose way of doing this. (The approach taken here is - recommended in the flex manual.) - -2022-04-04 Tom Tromey - - Refactor expression completion - This refactors the gdb expression completion code to make it easier to - add more types of completers. - - In the old approach, just two kinds of completers were supported: - field names for some sub-expression, or tag names (like "enum - something"). The data for each kind was combined in single structure, - "expr_completion_state", and handled explicitly by - complete_expression. - - In the new approach, the parser state just holds an object that is - responsible for implementing completion. This way, new completion - types can be added by subclassing this base object. - - The structop completer is moved into structop_base_operation, and new - objects are defined for use by the completion code. This moves much - of the logic of expression completion out of completer.c as well. - -2022-04-04 Tom Tromey - - Enable "set debug parser" for Ada - I noticed that "set debug parser 1" did not affect Ada parsing. This - patch fixes the problem. - - Because this is rarely useful, and pretty much only for maintainers, I - didn't write a test case. - -2022-04-04 Tom Tromey - - Fix bug in Ada attributes lexing - The Ada lexer allows whitespace between the apostrophe and the - attribute text, but processAttribute does not handle this. This patch - fixes the problem and introduces a regression test. - - Remove null sentinel from 'attributes' - In a subsequent patch, it's handy if the 'attributes' array in - ada-lex.l does not have a NULL sentinel at the end. In C++, this is - easy to avoid. - - Handle ghost entities in symbol lookup - Normally, SPARK ghost entities are removed from the executable. - However, with -gnata, they will be preserved. In this situation, it's - handy to be able to inspect them. This patch allows this by removing - the "___ghost_" prefix in the appropriate places. - -2022-04-04 Simon Marchi - - gdb: rename start_symtab/end_symtab to start_compunit_symtab/end_compunit_symtab - It's a bit confusing because we have both "compunit_symtab" and "symtab" - types, and many methods and functions containing "start_symtab" or - "end_symtab", which actually deal with compunit_symtabs. I believe this - comes from the time before compunit_symtab was introduced, where - symtab did the job of both. - - Rename everything I found containing start_symtab or end_symtab to use - start_compunit_symtab or end_compunit_symtab. - - Change-Id: If3849b156f6433640173085ad479b6a0b085ade2 - -2022-04-04 Simon Marchi - - gdb: remove some unused buildsym-legacy functions - Pretty much self-explanatory. - - Change-Id: I5b658d017cd891ecdd1df61075eacb0f44316935 - -2022-04-04 Fangrui Song - - gas: copy st_size only if unset - For - ``` - .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 - - .size foo2, 1 - foo2: - ``` - - bar1's size is 2 while bar2, bar3, bar4's is 1. The behavior of bar1 makes sense - (generally directives on the new symbol should win) and is relied upon by glibc - stdio-common/errlist.c: - - ``` - .hidden _sys_errlist_internal - .globl _sys_errlist_internal - .type _sys_errlist_internal, @object - .size _sys_errlist_internal, 1072 - _sys_errlist_internal: - - .globl __GLIBC_2_1_sys_errlist - .set __GLIBC_2_1_sys_errlist, _sys_errlist_internal - .type __GLIBC_2_1_sys_errlist, %object - .size __GLIBC_2_1_sys_errlist, 125 * (64 / 8) - - // glibc expects that .size __GLIBC_2_1_sys_errlist, 125 * (64 / 8) wins. - ``` - - The behavior of bar2/bar3/bar4 seems brittle. To avoid the reordering of the two - code blocks which will result in the bar3 situation, glibc compiles errlist.c - with gcc -fno-toplevel-reorder (previously -fno-unit-at-a-time). - - To fix the inconsistency and improve robustness, make bar2/bar3/bar4 match bar1, - removing the directive order sensitivity. - - There is a pity that `.size dest, 0` is indistinguishable from the case where - dest is unset, but the compromise seems fine. - - PR gas/29012 - * config/obj-elf.c (elf_copy_symbol_attributes): don't copy if src's size - has been set. - * testsuite/gas/elf/elf.exp: New test. - * testsuite/gas/elf/size.d: New file. - * testsuite/gas/elf/size.s: Likewise. - -2022-04-04 Andrew Burgess - - gdb: remove use of vfprintf_filtered - Commit: - - commit 60a3da00bd5407f07d64dff82a4dae98230dfaac - Date: Sat Jan 22 11:38:18 2022 +0000 - - objdump/opcodes: add syntax highlighting to disassembler output - - Introduced a new use of vfprintf_filtered, which has been deprecated. - This commit replaces this with gdb_vprintf instead. - -2022-04-04 Andrew Burgess - - opcodes/i386: partially implement disassembler style support - This commit adds partial support for disassembler styling in the i386 - disassembler. - - The i386 disassembler collects the instruction arguments into an array - of strings, and then loops over the array printing the arguments out - later on. The problem is that by the time we print the arguments out - it's not obvious what the type of each argument is. - - Obviously this can be fixed, but I'd like to not do that as part of - this commit, rather, I'd prefer to keep this commit as small as - possible to get the basic infrastructure in place, then we can improve - on this, to add additional styling, in later commits. - - For now then, I think this commit should correctly style mnemonics, - some immediates, and comments. Everything else will be printed as - plain text, which will include most instruction arguments, unless the - argument is printed as a symbol, by calling the print_address_func - callback. - - Ignoring colours, there should be no other user visible changes in the - output of the disassembler in either objdump or gdb. - - opcodes/ChangeLog: - - * disassembler.c (disassemble_init_for_target): Set - created_styled_output for i386 based targets. - * i386-dis.c: Changed throughout to use fprintf_styled_func - instead of fprintf_func. - -2022-04-04 Andrew Burgess - - opcodes/riscv: implement style support in the disassembler - Update the RISC-V disassembler to supply style information. This - allows objdump to apply syntax highlighting to the disassembler - output (when the appropriate command line flag is used). - - Ignoring colours, there should be no other user visible changes in the - output of the disassembler in either objdump or gdb. - - opcodes/ChangeLog: - - * disassembler.c (disassemble_init_for_target): Set - created_styled_output for riscv. - * riscv-dis.c: Changed throughout to use fprintf_styled_func - instead of fprintf_func. - -2022-04-04 Andrew Burgess - - objdump/opcodes: add syntax highlighting to disassembler output - This commit adds the _option_ of having disassembler output syntax - highlighted in objdump. This option is _off_ by default. The new - command line options are: - - --disassembler-color=off # The default. - --disassembler-color=color - --disassembler-color=extended-color - - I have implemented two colour modes, using the same option names as we - use of --visualize-jumps, a basic 8-color mode ("color"), and an - extended 8bit color mode ("extended-color"). - - The syntax highlighting requires that each targets disassembler be - updated; each time the disassembler produces some output we now pass - through an additional parameter indicating what style should be - applied to the text. - - As updating all target disassemblers is a large task, the old API is - maintained. And so, a user of the disassembler (i.e. objdump, gdb) - must provide two functions, the current non-styled print function, and - a new, styled print function. - - I don't currently have a plan for converting every single target - disassembler, my hope is that interested folk will update the - disassemblers they are interested in. But it is possible some might - never get updated. - - In this initial series I intend to convert the RISC-V disassembler - completely, and also do a partial conversion of the x86 disassembler. - Hopefully having the x86 disassembler at least partial converted will - allow more people to try this out easily and provide feedback. - - In this commit I have focused on objdump. The changes to GDB at this - point are the bare minimum required to get things compiling, GDB makes - no use of the styling information to provide any colors, that will - come later, if this commit is accepted. - - This first commit in the series doesn't convert any target - disassemblers at all (the next two commits will update some targets), - so after this commit, the only color you will see in the disassembler - output, is that produced from objdump itself, e.g. from - objdump_print_addr_with_sym, where we print an address and a symbol - name, these are now printed with styling information, and so will have - colors applied (if the option is on). - - Finally, my ability to pick "good" colors is ... well, terrible. I'm - in no way committed to the colors I've picked here, so I encourage - people to suggest new colors, or wait for this commit to land, and - then patch the choice of colors. - - I do have an idea about using possibly an environment variable to - allow the objdump colors to be customised, but I haven't done anything - like that in this commit, the color choices are just fixed in the code - for now. - - binutils/ChangeLog: - - * NEWS: Mention new feature. - * doc/binutils.texi (objdump): Describe --disassembler-color - option. - * objdump.c (disassembler_color): New global. - (disassembler_extended_color): Likewise. - (disassembler_in_comment): Likewise. - (usage): Mention --disassembler-color option. - (long_options): Add --disassembler-color option. - (objdump_print_value): Use fprintf_styled_func instead of - fprintf_func. - (objdump_print_symname): Likewise. - (objdump_print_addr_with_sym): Likewise. - (objdump_color_for_disassembler_style): New function. - (objdump_styled_sprintf): New function. - (fprintf_styled): New function. - (disassemble_jumps): Use disassemble_set_printf, and reset - disassembler_in_comment. - (null_styled_print): New function. - (disassemble_bytes): Use disassemble_set_printf, and reset - disassembler_in_comment. - (disassemble_data): Update init_disassemble_info call. - (main): Handle --disassembler-color option. - - include/ChangeLog: - - * dis-asm.h (enum disassembler_style): New enum. - (struct disassemble_info): Add fprintf_styled_func field, and - created_styled_output field. - (disassemble_set_printf): Declare. - (init_disassemble_info): Add additional parameter. - (INIT_DISASSEMBLE_INFO): Add additional parameter. - - opcodes/ChangeLog: - - * dis-init.c (init_disassemble_info): Take extra parameter, - initialize the new fprintf_styled_func and created_styled_output - fields. - * disassembler.c (disassemble_set_printf): New function definition. - -2022-04-04 Tom Tromey - - Remove more Python 2 code - I found another more place that still had a workaround for Python 2. - This patch removes it. - -2022-04-04 Tom de Vries - - [gdb/testsuite] Fix KPASS in gdb.ada/arrayptr.exp - On openSUSE Leap 15.3 I run into: - ... - KPASS: gdb.ada/arrayptr.exp: scenario=minimal: print pa_ptr.all \ - (PRMS minimal encodings) - KPASS: gdb.ada/arrayptr.exp: scenario=minimal: print pa_ptr(3) \ - (PRMS minimal encodings) - KPASS: gdb.ada/arrayptr.exp: scenario=minimal: print pa_ptr.all(3) \ - (PRMS minimal encodings) - ... - - The test-case KFAILs some tests. However, the analysis in the corresponding - PR talks of a compiler problem, so it should use XFAILs instead. - - The KFAILs are setup for pre-gcc-12, but apparantly the fix has been - backported to system compiler 7.5.0, hence the KPASS. - - Fix this by: - - using an XFAIL instead of a KFAIL - - matching the specific gdb output that corresponds to the XFAILs - (reproduced on Fedora 34). - - Tested on x86_64-linux, specifically openSUSE Leap 15.3 and Fedora 34. - -2022-04-04 GDB Administrator - - Automatic date update in version.in - -2022-04-03 rupothar - - gdb: add support for Fortran's ASSUMED RANK arrays - This patch adds a new dynamic property DYN_PROP_RANK, this property is - read from the DW_AT_rank attribute and stored within the type just - like other dynamic properties. - - As arrays with dynamic ranks make use of a single - DW_TAG_generic_subrange to represent all ranks of the array, support - for this tag has been added to dwarf2/read.c. - - The final piece of this puzzle is to add support in gdbtypes.c so that - we can resolve an array type with dynamic rank. To do this the - existing resolve_dynamic_array_or_string function is split into two, - there's a new resolve_dynamic_array_or_string_1 core that is - responsible for resolving each rank of the array, while the now outer - resolve_dynamic_array_or_string is responsible for figuring out the - array rank (which might require resolving a dynamic property) and then - calling the inner core. - - The resolve_dynamic_range function now takes a rank, which is passed - on to the dwarf expression evaluator. This rank will only be used in - the case where the array itself has dynamic rank, but we now pass the - rank in all cases, this should be harmless if the rank is not needed. - - The only small nit is that resolve_dynamic_type_internal actually - handles resolving dynamic ranges itself, which now obviously requires - us to pass a rank value. But what rank value to use? In the end I - just passed '1' through here as a sane default, my thinking is that if - we are in resolve_dynamic_type_internal to resolve a range, then the - range isn't part of an array with dynamic rank, and so the range - should actually be using the rank value at all. - - An alternative approach would be to make the rank value a - gdb::optional, however, this ends up adding a bunch of complexity to - the code (e.g. having to conditionally build the array to pass to - dwarf2_evaluate_property, and handling the 'rank - 1' in - resolve_dynamic_array_or_string_1) so I haven't done that, but could, - if people think that would be a better approach. - - Finally, support for assumed rank arrays was only fixed very recently - in gcc, so you'll need the latest gcc in order to run the tests for - this. - - Here's an example test program: - - PROGRAM arank - REAL :: a1(10) - CALL sub1(a1) - - CONTAINS - - SUBROUTINE sub1(a) - REAL :: a(..) - PRINT *, RANK(a) - END SUBROUTINE sub1 - END PROGRAM arank - - Compiler Version: - gcc (GCC) 12.0.0 20211122 (experimental) - - Compilation command: - gfortran assumedrank.f90 -gdwarf-5 -o assumedrank - - Without Patch: - - gdb -q assumedrank - Reading symbols from assumedrank... - (gdb) break sub1 - Breakpoint 1 at 0x4006ff: file assumedrank.f90, line 10. - (gdb) run - Starting program: /home/rupesh/STAGING-BUILD-2787/bin/assumedrank - - Breakpoint 1, arank::sub1 (a=) at assumedrank.f90:10 - 10 PRINT *, RANK(a) - (gdb) print RANK(a) - 'a' has unknown type; cast it to its declared type - - With patch: - - gdb -q assumedrank - Reading symbols from assumedrank... - (gdb) break sub1 - Breakpoint 1 at 0x4006ff: file assumedrank.f90, line 10. - (gdb) run - Starting program: /home/rupesh/STAGING-BUILD-2787/bin/assumedrank - - Breakpoint 1, arank::sub1 (a=...) at assumedrank.f90:10 - 10 PRINT *, RANK(a) - (gdb) print RANK(a) - $1 = 1 - (gdb) ptype a - type = real(kind=4) (10) - (gdb) - - Co-Authored-By: Andrew Burgess - -2022-04-03 Andrew Burgess - - gdb/dwarf: pass an array of values to the dwarf evaluator - When we need to evaluate a DWARF expression in order to resolve some - dynamic property of a type we call the dwarf2_evaluate_property - function, which is declared in gdb/dwarf/loc.h and defined in - gdb/dwarf/loc.c. - - Currently, this function takes (amongst other things) an argument of - type property_addr_info called addr_stack and a boolean called - push_initial_value. When push_initial_value then the top value of - addr_stack is pushed onto the dwarf expression evaluation stack before - the expression is evaluated. - - So far this has worked fine, as the only two cases we needed to handle - are the case the DWARF expression doesn't require the object - address (what the top of addr_stack represents), and the case where - the DWARF expression does require the address. - - In the next commit this is going to change. As we add support for - Fortran assumed rank arrays, we need to start resolving the dynamic - properties of arrays. To do this, we need to push the array rank onto - the dwarf expression evaluation stack before the expression is - evaluated. - - This commit is a refactoring commit aimed at making it easier to - support Fortran assumed rank arrays. Instead of passing a boolean, - and using this to decide if we should push the object address or not, - we instead pass an array (view) of values that should be pushed to the - dwarf expression evaluation stack. - - In the couple of places where we previously passed push_initial_value - as true (mostly this was defaulting to false), we now have to pass the - address from the addr_stack as an item in the array view. - - In the next commit, when we want to handle passing the array rank, - this will easily be supported too. - - There should be no user visible changes after this commit. - -2022-04-03 Andrew Burgess - - gdb: small simplification in dwarf2_locexpr_baton_eval - While examining the dwarf expression evaluator, I noticed that in - dwarf2_locexpr_baton_eval, whenever push_initial_value is true, the - addr_stack will never be nullptr. - - This allows for a small cleanup, replacing an if/then/else with an - assertion. - - There should be no user visible changes after this commit. - -2022-04-03 Andrew Burgess - - gdb/testsuite: resolve some duplicate test names in gdb.base - This commit resolves all the duplicate test names that I see in the - script: - - gdb.base/attach-pie-misread.exp - - The duplicate names all come from a second call to - build_executable_own_libs, so in this commit I've places the second - call inside a with_test_prefix block. - - While I was making this change I've also modified the value being - passed as the testname for the second build_executable_own_libs call. - Previously we used ${test}, however, I think this was likely a - mistake, the 'test' variable is setup for the previous test. I - suspect that ${testfile} is a better choice - especially now we have a - testname prefix. - - As the testname is only used (after various calls) from within - build_executable_from_specs should the build fail, I don't think this - change really makes much difference though. - - There should be no change in what is tested after this commit. - -2022-04-03 Andrew Burgess - - gdb/testsuite: resolve a duplicate test name in a gdb.mi test - Solve two duplicate test names in the test script: - - gdb.mi/mi-catch-cpp-exceptions.exp - - by moving the call to restart_for_test inside the with_test_prefix - block. There should be no difference in what is tested after this - commit. - -2022-04-03 Andrew Burgess - - gdb/Makefile.in: move ALLDEPFILES earlier in Makefile.in - If I do 'make tags' in the gdb build directory, the tags target does - complete, but I see these warnings: - - ../../src/gdb/arm.c: No such file or directory - ../../src/gdb/arm-get-next-pcs.c: No such file or directory - ../../src/gdb/arm-linux.c: No such file or directory - - The reason for this is the ordering of build rules and make variables - in gdb/Makefile.in, specifically, the placement of the tags related - rules, and the ALLDEPFILES variable. The ordering is like this: - - TAGFILES_NO_SRCDIR = .... $(ALLDEPFILES) .... - - TAGS: $(TAGFILES_NO_SRCDIR) .... - # Recipe uses $(TAGFILES_NO_SRCDIR) - - tags: TAGS - - ALLDEPFILES = ..... - - When the TAGS rule is parsed TAGFILES_NO_SRCDIR is expanded, which - then expands ALLDEPFILES, which, at that point in the Makefile is - undefined, and so expands to the empty string. As a result TAGS does - not depend on any file listed in ALLDEPFILES. - - However, when the TAGS recipe is invoked ALLDEPFILES is now defined. - As a result, all the files in ALLDEPFILES are passed to the etags - program. - - The ALLDEPFILES references three files, arm.c, arm-get-next-pcs.c, and - arm-linux.c, which are actually in the gdb/arch/ directory, but, in - ALLDEPFILES these files don't include the arch/ prefix. As a result, - the etags program ends up looking for these files in the wrong - location. - - As ALLDEPFILES is only used by the TAGS rule, this mistake was not - previously noticed (the TAGS rule itself was broken until a recent - commit). - - In this commit I make two changes, first, I move ALLDEPFILES to be - defined before TAGFILES_NO_SRCDIR, this means that the TAGS rule will - depend on all the files in ALLDEPFILES. With this change the TAGS - rule now breaks complaining that there's no rule to build the 3 files - mentioned above. - - Next, I have added all *.c files in gdb/arch/ to ALLDEPFILES, - including their arch/ prefix, and removed the incorrect (missing arch/ - prefix) references. - - With these two changes the TAGS (or tags if you prefer) target now - builds without any errors or warnings. - -2022-04-03 Reuben Thomas - - gdb/Makefile.in: fix 'make tags' build target - The gdb_select.h file was moved to the gdbsupport directory long ago, - but a reference was accident left in gdb/Makefile.in (in the - HFILES_NO_SRCDIR variable), this commit removes that reference. - - Before this commit, if I use 'make tags' here's what I see: - - $ make tags - make: *** No rule to make target 'gdb_select.h', needed by 'TAGS'. Stop. - - After this commit 'make tags' completes, but I still see these - warnings: - - ../../src/gdb/arm.c: No such file or directory - ../../src/gdb/arm-get-next-pcs.c: No such file or directory - ../../src/gdb/arm-linux.c: No such file or directory - - These are caused by a separate issue, and will be addressed in the - next commit. - -2022-04-03 Andrew Burgess - - gdb/Makefile.in: remove SOURCES variable - The SOURCES variable was added to gdb/Makefile.in as part of commit: - - commit fb40c20903110ed8af9701ce7c2635abd3770d52 - Date: Wed Feb 23 00:25:43 2000 +0000 - - Add mi/ and testsuite/gdb.mi/ subdirectories. - - But as far as I can tell was not used at the time it was added, and is - not used today. - - Lets remove it. - -2022-04-03 Andrew Burgess - - gdb/tui: fair split of delta after a resize - Currently, in master gdb, when a tui window is changed in size, the - screen delta is mostly just added to the next available window. We - do take care to respect the min/max size, but in most cases, these - limits are just "the terminal size", and so, we end up placing the - whole delta on the next window. - - Consider these steps in an 80 column, 24 line terminal: - - (gdb) tui enable - (gdb) layout src - (gdb) layout split - (gdb) info win - Name Lines Columns Focus - src 8 80 (has focus) - asm 8 80 - status 1 80 - cmd 8 80 - (gdb) winheight cmd +2 - (gdb) info win - Name Lines Columns Focus - src 6 80 (has focus) - asm 8 80 - status 1 80 - cmd 10 80 - - Notice that initially, the windows were balanced, 8 lines each for the - major windows. Then, when the cmd window was adjusted, the extra two - lines were given to the asm window. - - I think it would be nicer if the delta was spread more evenly over the - available windows. In the example above, after the adjustment the - layout now looks like: - - (gdb) info win - Name Lines Columns Focus - src 7 80 (has focus) - asm 7 80 - status 1 80 - cmd 10 80 - - This is achieved within tui_layout_split::set_size, by just handing - out the delta in increments of 1 to each window (except for the window - the user adjusted), until there's no more delta left. Of course, we - continue to respect the min/max window sizes. - -2022-04-03 Andrew Burgess - - gdb/tui: relax restrictions on window max height and width - This commit removes some arbitrary adjustments made in - tui_cmd_window::max_height, tui_win_info::max_height, and - tui_win_info::max_width. - - These member functions all subtract some constant from the theoretical - maximum height or width. I've looked back through the history a - little and can see no real reason why these adjustments should be - needed, with these adjustments removed all the existing tui tests - still pass. - - However, retaining these restrictions causes some bugs, consider: - - (gdb) tui new-layout hsrc {-horizontal src 1 cmd 1} 1 - - When this layout is selected with current master, gdb will leave a 4 - line gap at the bottom of the terminal. - - The problem is that the maximum height is restricted, for the cmd - window, to 4 less than the terminal height. - - By removing this restriction gdb is able to size the windows to the - complete terminal height, and the layout is done correctly. - - This 4 line restriction is also what prevents this layout from working - correctly: - - (gdb) tui new-layout conly cmd 1 - - Previously, this layout would present a cmd window only, but there - would be a 4 line gap at the bottom of the terminal. This issue was - mentioned in an earlier commit in this series (when a different bug - was fixed), but with this commit, the above layout now correctly fills - the terminal. The associated test is updated. - - After removing the adjustment in tui_cmd_window::max_height, the - implementation is now the same as the implementation in the parent - class tui_win_info, so I've completely removed the max_height call - from tui_cmd_window. - -2022-04-03 Andrew Burgess - - gdb/testsuite: some additional tests in gdb.tui/scroll.exp - This commit just adds an extra check of the src window size prior to - sending all the commands to gdb. We also set the cmd window height to - its existing height, this (obviously) shouldn't change the window - layout, which we check. - - My main motivation was adding the initial window layout check, the - winheight and recheck are just extras. All of these test pass both - before and after this commit. - -2022-04-03 Andrew Burgess - - gdb/tui: support placing the cmd window into a horizontal layout - This commit allows the user to place the cmd window within horizontal - tui layouts. Consider this set of steps, carried out in an 80 columns - by 24 lines terminal, using current master gdb: - - (gdb) tui new-layout hsrc { -horizontal src 1 cmd 1 } 1 status 1 - (gdb) tui layout hsrc - - What you end up with is a full width cmd window with the status bar - beneath. Where's the src window gone? We then try: - - (gdb) info win - Name Lines Columns Focus - src 23 3 (has focus) - cmd 23 80 - status 1 80 - (gdb) - - Something weird has gone on, gdb has overlapped the cmd window with - the src window. If we trigger the src window to redraw is content, - for example, 'list main', then we see corruption in the cmd window as - the src window overwrites it. - - So, what's going on? - - The problem is some code in tui_layout_split::apply, in tui-layout.c. - Within 'Step 1', there is a loop that calculates the min/max window - sizes for all windows within a tui_layout_split. However, there's a - special case for the cmd window. - - This special case is trying to have the cmd window retain its current - size when a layout is re-applied, or a new layout is applied. This - makes sense, consider moving from the 'src' layout to the 'asm' - layout, this looks something like this (status window removed): - - .-------. .-------. - | src | | asm | - |-------| ====> |-------| - | cmd | | cmd | - '-------' '-------' - - If the user has gone to the effort of adjusting the cmd window size, - then, the thinking goes, we shouldn't reset the cmd window size when - switching layouts like this. - - The problem though, is that when we do a switch more like this: - - .-----------. .-----------. - | src | | | | - |-----------| ====> | asm | cmd | - | cmd | | | | - '-----------' '-----------' - - Now retaining the cmd window width makes no sense; the new layout has - a completely different placement for the cmd window, instead of sizing - by height, we're now sizing by width. The existing code doesn't - understand this though, and tried to retain the full width for the cmd - window. - - To solve this problem, I propose we introduce the idea of a layout - "fingerprint". The fingerprint tries to capture, in an abstract way, - where the cmd window lives within the layout. - - Only when two layouts have the same fingerprint will we attempt to - retain the cmd window size. - - The fingerprint for a layout is represented as a string, the string is - a series of 'V' or 'H' characters, ending with a single 'C' - character. The series of 'V' and 'H' characters represent the - vertical or horizontal layouts that must be passed through to find the - cmd window. - - Here are a few examples: - - # This layout is equivalent to the builtin 'src' layout. - # Fingerprint: VC - tui new-layout example1 src 2 status 0 cmd 1 - - # This layout is equivalent to the builtin 'split' layout. - # Fingerprint: VC - tui new-layout example2 src 1 asm 1 status 0 cmd 1 - - # This is the same layout that was given at the top. - # Fingerprint: VHC - tui new-layout hsrc { -horizontal src 1 cmd 1 } 1 status 1 - - And so, when switching between example1 and example2, gdb knows that - the cmd window is, basically, in the same sort of position within the - layout, and will retain the cmd window size. - - In contrast, when switching to the hsrc layout, gdb understands that - the position of the cmd window is different, and does not try to - retain the cmd window size. - -2022-04-03 Andrew Burgess - - gdb/tui: allow cmd window to change size in tui_layout_split::apply - When we switch layouts we call the tui_layout_split::apply member - function to reapply the layout, and recalculate all the window sizes. - - One special case is the cmd window, which we try to keep at its - existing size. - - However, in some cases it is not appropriate to keep the cmd window at - its existing size. I will describe two such cases here, in one, we - want the cmd window to reduce in size, and in the other, we want the - cmd window to grow in size. - - Try these steps in a 80 columns, by 24 lines terminal: - - (gdb) tui enable - (gdb) layout src - (gdb) winheight cmd 20 - (gdb) layout split - - You should see that the status window is missing from the new layout, - and that the cmd window has been placed over the border of the asm - window. The 'info win' output is: - - (gdb) info win - Name Lines Columns Focus - src 3 80 (has focus) - asm 3 80 - status 1 80 - cmd 20 80 - - Notice that gdb has assigned 27 lines of screen space, even with the - border overlap between the src and asm windows, this is still 2 lines - too many. - - The problem here is that after switching layouts, gdb has forced the - cmd window to retain its 20 line height. Really, we want the cmd - window to reduce in height so that the src and asm windows can occupy - their minimum required space. - - This commit allows this (details on how are below). After this - commit, in the above situation, we now see the status window displayed - correctly, and the 'info win' output is: - - (gdb) info win - Name Lines Columns Focus - src 3 80 (has focus) - asm 3 80 - status 1 80 - cmd 18 80 - - The cmd window has been reduced in size by 2 lines so that everything - can fit on the screen. - - The second example is one which was discussed in a recent commit, - consider this case (still in the 80 column, 24 line terminal): - - (gdb) tui enable - (gdb) tui new-layout conly cmd 1 - (gdb) layout conly - (gdb) info win - Name Lines Columns Focus - cmd 8 80 (has focus) - (gdb) - - This layout only contains a cmd window, which we would expect to - occupy the entire terminal. But instead, the cmd window only occupies - the first 8 lines, and the rest of the terminal is unused! - - The reason is, again, that the cmd window is keeping its previous - size (8 lines). - - After this commit things are slightly different, the 'info win' output - is now: - - (gdb) info win - Name Lines Columns Focus - cmd 20 80 (has focus) - - Which is a little better, but why only 20 lines? Turns out there's - yet another bug hitting this case. That bug will be addressed in a - later commit, so, for now, we're accepting the 20 lines. - - What this commit does is modify the phase of tui_layout_split::apply - that handles any left over space. Usually, in "Step 2", each - sub-layout has a size calculated. As the size is an integer, then, - when all sizes are calculated we may have some space left over. - - This extra space is then distributed between all the windows fairly - until all the space is used up. - - When we consider windows minimum size, or fixed size windows, then it - is possible that we might try to use more space than is available, - this was our first example above. The same code that added extra - space to the windows, can also be used to reclaim space (in the over - allocation case) to allow all windows to fit. - - The problem then is the cmd window, which we often force to a fixed - size. Inside the loop that handles the allocation of excess space, if - we find that we have tried every window, and still have space either - left to give, or we need to claim back more space, then, if the cmd - window was changed to a fixed size, we can change the cmd window back - to a non-fixed-size window, and proceed to either give, or take space - from the cmd window as needed. - -2022-04-03 Andrew Burgess - - gdb/tui: fairer distribution of excess space during apply - When applying layouts gdb computes the size of each window (or rather, - each sub-layout within a layout) using integer arithmetic. As this - rounds down the results, then, when all sub-layouts are sized, there - is the possibility that we have some space left over. - - Currently, this space is just assigned to an arbitrary sub-layout. - - This can result in some unbalanced results. Consider this set of - steps with current master: - - (gdb) tui enable - (gdb) layout regs - (gdb) info win - Name Lines Columns Focus - regs 7 80 - src 9 80 (has focus) - status 1 80 - cmd 8 80 - - Notice the weird split between the src and regs windows, the original - layout specification has these windows given equal weight. The - problem is that, with rounding, both the regs and src windows are - initially sized to 7, the extra 2 lines are then arbitrarily added to - the src window. - - In this commit, rather than add all the extra space to one single - window, I instead hand out the extra space 1 line at a time, looping - over all the sub-layouts. We take care to respect the min/max sizes, - and so, we now get this result: - - (gdb) tui enable - (gdb) layout regs - (gdb) info win - Name Lines Columns Focus - regs 8 80 - src 8 80 (has focus) - status 1 80 - cmd 8 80 - - This looks more natural to me. - - This is obviously a change in behaviour, and so, lots of the existing - tests need to be updated to take this into account. None of the - changes are huge, it's just a line or two (or column for width) moved - between windows. - -2022-04-03 Andrew Burgess - - gdb/tui: avoid fp exception when applying layouts - Consider: - - (gdb) tui enable - (gdb) layout src - (gdb) tui new-layout conly cmd 1 - (gdb) layout conly - - After this, with current master, gdb crashes with a floating-point - exception. - - The problem is that in tui_layout_split::apply, when we switch from - 'src' to 'conly', we will try to retain the cmd window height. As - such, the cmd window will become a fixed size window, which decreases - the available_size, but doesn't count towards the total_weight. - - As the cmd window is the only window, the total_weight stays at zero, - and, when we move into step 2, where we attempt to size the windows, - we perform a divide by zero, and crash. - - After this commit we avoid the divide by zero, and just directly set - the window size based on the fixed size. - - There is still a problem after this commit, when the conly layout is - selected the cmd window retains its original height, which will only - be part of the terminal. The rest of the terminal is left unused. - This issue will be addressed in a later commit, this commit is just - about the floating-point exception. - -2022-04-03 Andrew Burgess - - gdb/tui/testsuite: refactor new-layout.exp test - This commit changes the gdb.tui/new-layout.exp test to make use of a - list of test descriptions, and a loop to check each description in - turn. There's no change to what is actually tested after this commit. - - In future commits I plan to add additional tests to this file, and - this will be easier now that all I have to do is add a new test - description to the list. - -2022-04-03 Andrew Burgess - - gdb/tui: add left_boxed_p and right_boxed_p member functions - When I initially saw this code in tui_layout_split::apply, I assumed - that this must be a bug: - - /* 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 ()) - ... - - After all, the apply might be laying out a horizontal layout, right? - So checking bottom_boxed_p and top_boxed_p is clearly wrong. - - Well, it turns on, that due to the implementations of these things, - bottom_boxed_p is equivalent to an imagined right_boxed_p, and - top_boxed_p is equivalent to an imagined left_boxed_p. - - In this commit I've renamed both top_boxed_p and bottom_boxed_p to - first_edge_has_border_p and last_edge_has_border_p respectively, and - extended the comments in tui_layout_base to mention that these methods - handle both horizontal and vertical layouts. - - Now, hopefully, the code shouldn't look like it only applies for - vertical layouts. - - There should be no user visible changes after this commit. - -2022-04-03 Andrew Burgess - - gdb/tui: add a tui debugging flag - This commit adds 'set debug tui on|off' and 'show debug tui'. This - commit adds the control variable, and the printing macros in - tui/tui.h. I've then added some uses of these in tui.c and - tui-layout.c. - - To help produce more useful debug output in tui-layout.c, I've added - some helper member functions in the class tui_layout_split, and also - moved the size_info struct out of tui_layout_split::apply into the - tui_layout_split class. - - If tui debug is not turned on, then there should be no user visible - changes after this commit. - - One thing to note is that, due to the way that the tui terminal is - often cleared, the only way I've found this useful is when I do: - - (gdb) tui enable - (gdb) set logging file /path/to/file - (gdb) set logging debugredirect on - (gdb) set logging enable on - - Additionally, gdb has some quirks when it comes to setting up logging - redirect and switching interpreters. Thus, the above only really - works if the logging is enabled after the tui is enabled, and disabled - again before the tui is disabled. - - Enabling logging and switching interpreters can cause undefined - results, including crashes. This is an existing bug in gdb[1], and - has nothing directly to do with tui debug, but it is worth mentioning - here I think. - - [1] https://sourceware.org/bugzilla/show_bug.cgi?id=28948 - -2022-04-03 Andrew Burgess - - gdb/tui: add new 'tui window width' command and 'winwidth' alias - This commit adds a new command 'tui window width', and an alias - 'winwidth'. This command is equivalent to the old 'winheight' - command (which was recently renamed 'tui window height'). - - Even though I recently moved the old tui commands under the tui - namespace, and I would strongly encourage all new tui commands to be - added as 'tui ....' only (users can create their own top-level aliases - if they want), I'm breaking that suggestion here, and adding a - 'winwidth' alias. - - Given that we already have 'winheight' and have done for years, it - just didn't seem right to no have the matching 'winwidth'. - - You might notice in the test that the window resizing doesn't quite - work right. I setup a horizontal layout, then grow and shrink the - windows. At the end of the test the windows should be back to their - original size... - - ... they are not. This isn't my fault, honest! GDB's window resizing - is a little ... temperamental, and is prone to getting things slightly - wrong during resizes, off by 1 type things. This is true for height - resizing, as well as the new width resizing. - - Later patches in this series will rework the resizing algorithm, which - should improve things in this area. For now, I'm happy that the width - resizing is as good as the height resizing, given the existing quirks. - - For the docs side I include a paragraph that explains how multiple - windows are required before the width can be adjusted. For - completeness, I've added the same paragraph to the winheight - description. With the predefined layouts this extra paragraph is not - really needed for winheight, as there are always multiple windows on - the screen. However, with custom layouts, this might not be true, so - adding the paragraph seems like a good idea. - - As for the changes in gdb itself, I've mostly just taken the existing - height adjustment code, changed the name to make it generic 'size' - adjustment, and added a boolean flag to indicate if we are adjusting - the width or the height. - -2022-04-03 Andrew Burgess - - gdb/tui: rename tui_layout_split:set_weights_from_heights - In a following commit I'm going to add the ability to change the width - of a tui window (when in a horizontal layout). As a result, some of - the places where we currently hard-code references to height need to - be changed to handle either height, or width, based on whether we are - in a vertical, or horizontal layout. - - This commit renames set_weights_from_heights to - set_weights_from_sizes, and makes the function use either the height, - or width as appropriate. - - Currently, the only place that we call this function is from the - tui_layout_split::set_height function, in a part of the code we will - only reach for vertical layouts, so the new code is not actually being - used, but, this small change will help make later patches smaller, so - I'm proposing this as a stand alone change. - - There should be no user visible changes after this commit. - -2022-04-03 Andrew Burgess - - gdb/tui: rename tui_layout_base::adjust_size to ::set_height - Rename tui_layout_base::adjust_size to tui_layout_base::set_height, - the new name more accurately reflects what this member function does, - and makes it easier for a later commit to add a new - tui_layout_base::set_width member function. - - There should be no user visible changes after this commit. - -2022-04-03 Andrew Burgess - - gdb: move some commands into the tui namespace - There are a lot of tui related commands that live in the top-level - command name space, e.g. layout, focus, refresh, winheight. - - Having them at the top level means less typing for the user, which is - good, but, I think, makes command discovery harder. - - In this commit, I propose moving all of the above mentioned commands - into the tui namespace, so 'layout' becomes 'tui layout', etc. But I - will then add aliases so that the old commands will still work, - e.g. I'll make 'layout' an alias for 'tui layout'. - - The benefit I see in this work is that tui related commands can be - more easily discovered by typing 'tui ' and then tab-completing. Also - the "official" command is now a tui-sub-command, this is visible in, - for example, the help output, e.g.: - - (gdb) help layout - tui layout, layout - Change the layout of windows. - Usage: tui layout prev | next | LAYOUT-NAME - - List of tui layout subcommands: - - tui layout asm -- Apply the "asm" layout. - tui layout next -- Apply the next TUI layout. - tui layout prev -- Apply the previous TUI layout. - tui layout regs -- Apply the TUI register layout. - tui layout split -- Apply the "split" layout. - tui layout src -- Apply the "src" layout. - - Which I think is a good thing, it makes it clearer that this is a tui - command. - - I've added a NEWS entry and updated the docs to mention the new and - old command names, with the new name being mentioned first. - -2022-04-03 Simon Marchi - - gdb: fix gdb_print -> gdb_printf typo - This caused a build failure with !CXX_STD_THREAD. - - Change-Id: I30f0c89c43a76f85c0db34809192644fa64a9d18 - -2022-04-03 Alan Modra - - Move microblaze relax info to target specific data - Target specific data shouldn't be put in struct bfd_section. - - * section.c (struct bfd_section): Delete relax and relax_count. - (BFD_FAKE_SECTION): Adjust to suit. - (struct relax_table): Move to.. - * elf32-microblaze.c (struct relax_table): ..here. - (struct _microblaze_elf_section_data): New. - (microblaze_elf_section_data): Define. - (microblaze_elf_new_section_hook): New function. - (bfd_elf32_new_section_hook): Define. - (calc_fixup): Return a size_t. Adjust to suit new location of - relax and relax_count. - (microblaze_elf_relax_section): Adjust to suit new location of - relax and relax_count. Make some variables size_t. - * bfd-in2.h: Regenerate. - -2022-04-03 Alan Modra - - Revert commit 240d6706c6a2 - PR 28592 - PR 15994 - PR 15935 - * dwarf2.c (lookup_address_in_line_info_table): Return bool rather - than a range. - (comp_unit_find_nearest_line): Likewise. Return true if function - info found without line info. - (_bfd_dwarf2_find_nearest_line): Revert range handling code. - - Regen bfd po/SRC-POTFILES.in - -2022-04-03 GDB Administrator - - Automatic date update in version.in - -2022-04-02 Tiezhu Yang - - gdb: rename floatformats_ia64_quad to floatformats_ieee_quad - It is better to rename floatformats_ia64_quad to floatformats_ieee_quad - to reflect the reality, and then we can clean up the related code. - - As Tom Tromey said [1]: - - These files are maintained in gcc and then imported into the - binutils-gdb repository, so any changes to them will have to - be proposed there first. - - the related changes have been merged into gcc master now [2], it is time - to do it for gdb. - - [1] https://sourceware.org/pipermail/gdb-patches/2022-March/186569.html - [2] https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=b2dff6b2d9d6 - -2022-04-02 GDB Administrator - - Automatic date update in version.in - -2022-04-01 John Baldwin - - Remove unused variable. - -2022-04-01 Aaron Merey - - gdb/debuginfod-support.c: Always display debuginfod errors - Errors encountered when downloading files from debuginfod servers - are not displayed if debuginfod verbosity is set to 0 (via - 'set debuginfod verbose 0'). - - Tom recommended that these errors always be displayed, regardless - of the verbosity setting [1]. Fix this. - - [1] https://sourceware.org/pipermail/gdb-patches/2022-March/186350.html - -2022-04-01 John Baldwin - - Use I386_GSBASE_REGNUM in i386fbsd_get_thread_local_address. - 32-bit x86 arches always the I386_*BASE_REGNUM values. Only code that - needs to support both 64-bit and 32-bit arches needs to use - tdep->fsbase_regnum to compute a segment base register number. - - FreeBSD/x86: Read segment base registers from NT_X86_SEGBASES. - FreeBSD kernels recently grew a new register core dump note containing - the base addresses of the %fs and %gs segments (corresponding to the - %fsbase and %gsbase registers). Parse this note to permit inspecting - TLS variables in core dumps. Native processes already supported TLS - via older ptrace() operations. - -2022-04-01 John Baldwin - - Use pseudosections for NT_FREEBSD_X86_SEGBASES core dump notes. - This includes adding pseudosections when reading a core dump as well - as support for writing out a core dump note from a pseudosection. - - bfd/ChangeLog: - - * 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 - - Recognize FreeBSD core dump note for x86 segment base registers. - This core dump note contains the value of the base address of the %fs - and %gs segments for both i386 and amd64 core dumps. It is primarily - useful in resolving the address of TLS variables in core dumps. - - binutils/ChangeLog: - - * readelf.c (get_freebsd_elfcore_note_type): Handle - NT_FREEBSD_X86_SEGBASES. - - include/ChangeLog: - - * elf/common.h (NT_FREEBSD_X86_SEGBASES): Define. - -2022-04-01 John Baldwin - - elfcore_grok_freebsd_note: Remove checks of note->namesz. - This function is only called if the note name is "FreeBSD", so - checking the name size is unnecessary. - - bfd/ChangeLog: - - * elf.c (elfcore_grok_freebsd_note): Remove checks for namesz. - -2022-04-01 Andrew Burgess - - gdb/testing/tui: add new _csi_{L,S,T} - This patch was original part of this series: - - https://sourceware.org/pipermail/gdb-patches/2022-March/186429.html - https://sourceware.org/pipermail/gdb-patches/2022-March/186433.html - - I've pulled this out as it might be useful ahead of the bigger series - being merged. - - This commit adds: - - _csi_L - insert line - _csi_S - pan down - _csi_T - pan up - -2022-04-01 H.J. Lu - - x86: Remove bfd_arch_l1om and bfd_arch_k1om - Remove bfd_arch_l1om and bfd_arch_k1om since L1OM/K1OM support has been - removed from gas, ld and opcodes. - - bfd/ - - * Makefile.am (ALL_MACHINES): Remove cpu-l1om.lo and cpu-k1om.lo. - (ALL_MACHINES_CFILES): Remove cpu-l1om.c and cpu-k1om.c. - * archures.c (bfd_mach_l1om): Removed. - (bfd_mach_l1om_intel_syntax): Likewise. - (bfd_mach_k1om): Likewise. - (bfd_mach_k1om_intel_syntax): Likewise. - (bfd_k1om_arch): Likewise. - (bfd_l1om_arch): Likewise. - (bfd_archures_list): Remove bfd_k1om_arch and bfd_l1om_arch - references. - * config.bfd (targ_selvecs): Remove l1om_elf64_vec. - l1om_elf64_fbsd_vec, k1om_elf64_vec and k1om_elf64_fbsd_vec. - (targ_archs): Remove bfd_l1om_arch and bfd_k1om_arch. - * configure.ac (k1om_elf64_vec): Removed. - (k1om_elf64_fbsd_vec): Likewise. - (l1om_elf64_vec): Likewise. - (l1om_elf64_fbsd_vec): Likewise. - * cpu-k1om.c: Removed. - * cpu-l1om.c: Likewise. - * elf64-x86-64.c (elf64_l1om_elf_object_p): Removed. - (elf64_k1om_elf_object_p): Likewise. - (l1om_elf64_vec): Removed. - (l1om_elf64_fbsd_vec): Likewise. - (k1om_elf64_vec): Likewise. - (k1om_elf64_fbsd_vec): Likewise. - (ELF_TARGET_OS): Undefine. - * targets.c (_bfd_target_vector): Remove k1om_elf64_vec, - k1om_elf64_fbsd_vec, l1om_elf64_vec and l1om_elf64_fbsd_vec. - * Makefile.in: Regenerate. - * bfd-in2.h: Likewise. - * configure: Likewise. - - opcodes/ - - * configure.ac: Remove bfd_arch_l1om/bfd_arch_k1om references. - * disassemble.c (disassembler): Likewise. - * configure: Regenerate. - -2022-04-01 Simon Marchi - - gdb/ctf: pass partial symtab's filename to buildsym_compunit - I noticed that the CTF symbol reader passes the objfile's name to all - buildsym_compunit instances it creates. The result is that all - compunit_symtabs created have the same name, that of the objfile: - - { objfile /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0 ((struct objfile *) 0x613000005d00) - { ((struct compunit_symtab *) 0x621000286760) - debugformat ctf - producer (null) - name libbabeltrace2.so.0.0.0 - dirname (null) - blockvector ((struct blockvector *) 0x6210003911d0) - user ((struct compunit_symtab *) (null)) - { symtab /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0 ((struct symtab *) 0x6210003911f0) - fullname (null) - linetable ((struct linetable *) 0x0) - } - } - { ((struct compunit_symtab *) 0x621000275c10) - debugformat ctf - producer (null) - name libbabeltrace2.so.0.0.0 - dirname (null) - blockvector ((struct blockvector *) 0x621000286710) - user ((struct compunit_symtab *) (null)) - { symtab /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0 ((struct symtab *) 0x621000286730) - fullname (null) - linetable ((struct linetable *) 0x0) - } - } - - Notice the two "name libbabeltrace2.so.0.0.0". - - Change it to pass the partial_symtab's filename instead. The output - becomes: - - { objfile /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0 ((struct objfile *) 0x613000005d00) - { ((struct compunit_symtab *) 0x621000295610) - debugformat ctf - producer (null) - name libbabeltrace2.so.0.0.0 - dirname (null) - blockvector ((struct blockvector *) 0x6210003a15d0) - user ((struct compunit_symtab *) (null)) - { symtab /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0 ((struct symtab *) 0x6210003a15f0) - fullname (null) - linetable ((struct linetable *) 0x0) - } - } - { ((struct compunit_symtab *) 0x621000288700) - debugformat ctf - producer (null) - name current-thread.c - dirname (null) - blockvector ((struct blockvector *) 0x6210002955c0) - user ((struct compunit_symtab *) (null)) - { symtab /home/simark/src/babeltrace/src/lib/current-thread.c ((struct symtab *) 0x6210002955e0) - fullname (null) - linetable ((struct linetable *) 0x0) - } - } - - Note that the first compunit_symtab still has libbabeltrace2.so.0.0.0 as - its name. This is because the CTF symbol reader really creates a - partial symtab named like this. It appears to be because the debug info - contains information that has been factored out of all CUs and is at the - "top-level" of the objfile, outside any real CU. So it creates a - partial symtab and an artificial CU that's named after the objfile. - - Change-Id: I576316bab2a3668adf87b4e6cebda900a8159b1b - -2022-04-01 Simon Marchi - - gdb: print compunit_symtab name in "maint info symtabs" - I think it would make sense to print a compunit_symtab's name in "maint - info symtabs". If you are looking for a given CU in the list, that's - probably the field you will be looking at. As the doc of - compunit_symtab::name says, it is not meant to be a reliable file name, - it is for debugging purposes (and "maint info symtabs" exists for - debugging purposes). - - Sample output with the new field: - - (gdb) maintenance info symtabs - { objfile /home/simark/build/binutils-gdb-one-target/gdb/a.out ((struct objfile *) 0x613000005d00) - { ((struct compunit_symtab *) 0x621000131630) - debugformat DWARF 5 - producer GNU C17 11.2.0 -mtune=generic -march=x86-64 -g3 -O0 - name test.c - dirname /home/simark/build/binutils-gdb-one-target/gdb - blockvector ((struct blockvector *) 0x621000131d10) - user ((struct compunit_symtab *) (null)) - { symtab test.c ((struct symtab *) 0x6210001316b0) - fullname (null) - linetable ((struct linetable *) 0x621000131d40) - } - { symtab /home/simark/build/binutils-gdb-one-target/gdb/test.h ((struct symtab *) 0x6210001316e0) - fullname (null) - linetable ((struct linetable *) 0x0) - } - { symtab /usr/include/stdc-predef.h ((struct symtab *) 0x621000131710) - fullname (null) - linetable ((struct linetable *) 0x0) - } - } - { ((struct compunit_symtab *) 0x6210001170a0) - debugformat DWARF 5 - producer GNU C17 11.2.0 -mtune=generic -march=x86-64 -g3 -O0 - name foo.c - dirname /home/simark/build/binutils-gdb-one-target/gdb - blockvector ((struct blockvector *) 0x621000131580) - user ((struct compunit_symtab *) (null)) - { symtab foo.c ((struct symtab *) 0x621000117120) - fullname (null) - linetable ((struct linetable *) 0x6210001315b0) - } - { symtab /usr/include/stdc-predef.h ((struct symtab *) 0x621000117150) - fullname (null) - linetable ((struct linetable *) 0x0) - } - } - } - - Change-Id: I17b87adfac2f6551cb5bda30d59f6c6882789211 - -2022-04-01 Simon Marchi - - gdb/ctf: don't create a buildsym_compunit when building partial symbols - I am trying to do some changes to buildsym_compunit, so I am auditing - the current uses. Something seems odd with this use of - buildsym_compunit (that this patch removes). - - A buildsym_compunit is normally used when building a compunit_symtab. - That is, when expanding a partial symtab into a full compunit symtab. - In ctfread.c, a buildsym_compunit is created in ctf_start_archive, which - is only used when creating partial symtabs. At this moment, I don't - see how that's useful. ctf_start_archive creates a new - buildsym_compunit and starts a subfile. But that buildsym_compunit is - never used again. It's just overriden in ctf_start_symtab, which means - we leak the old buildsym_compunit, I suppose. - - Remove ctf_start_archive completely. Add an assert in - ctf_start_symtab to verify that we are not overwriting an existing - buildsym_compunit (meaning we'd leak the existing one). This assert - triggers without the other part of the fix. When doing: - - $ ./gdb --data-directory=data-directory /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0 - ... - (gdb) maintenance expand-symtabs - /home/simark/src/binutils-gdb/gdb/ctfread.c:1255: internal-error: ctf_start_symtab: Assertion `!ccp->builder' failed. - - Change-Id: I666d146454a019f08e7305f3a1c4a974d27b4592 - -2022-04-01 Tom Tromey - - Style URLs in GDB output - I noticed that GDB will display URLs in a few spots. This changes - them to be styled. Originally I thought I'd introduce a new "url" - style, but there aren't many places to use this, so I just reused - filename styling instead. This patch also changes the debuginfod URL - list to be printed one URL per line. I think this is probably a bit - easier to read. - -2022-04-01 GDB Administrator - - Automatic date update in version.in - -2022-03-31 Simon Marchi - - gdb: initialize ctf_context::builder in create_partial_symtab - I built a random project with -gctf, in order to test the CTF support in - GDB. With my ASan/UBSan/etc-enabled build of GDB, I get: - - $ ./gdb --data-directory=data-directory /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0 - ... - Reading symbols from /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0... - /home/simark/src/binutils-gdb/gdb/ctfread.c:1545:31: runtime error: member call on misaligned address 0xbebebebebebebebe for type 'struct buildsym_compunit', which requires 8 byte alignment - 0xbebebebebebebebe: note: pointer points here - - The 0xbebebebebebebebe value is a sign that the ctf_context::builder - field is uninitialized. The problem probably goes under the radar if - the field happens to be zero-initialized, because ctf_start_archive - contains this code: - - if (ccx->builder == nullptr) - { - ccx->builder = new buildsym_compunit (of, - of->original_name, nullptr, language_c, 0); - - If the field was zero-initialized (by chance), this will create a new - buildsym_compunit. But if the field was purposely filled with random - bytes by one of the sanitizers, we won't create a buildsym_compunit here - and we'll continue with ccx->builder equal to 0xbebebebebebebebe. - - Fix this the easy way by initializing ccx->builder where the other - ctf_context fields are initialized (yeah, this code could be made nicer - C++, but I am going for the obvious fix here). - - With this patch, this passes cleanly on my system: - - $ make check TESTS="gdb.ctf/*.exp" RUNTESTFLAGS="CC_FOR_TARGET=/opt/gcc/git/bin/gcc" - # of expected passes 40 - - ... where /opt/gcc/git/bin/gcc is a gcc with CTF support, given my - system gcc does not have it. - - Change-Id: Idea1b0cf3e3708b72ecb16b1b60222439160f9b9 - -2022-03-31 Tom Tromey - - Remove dbx mode - This patch removes gdb's dbx mode. Regression tested on x86-64 Fedora - 34. - -2022-03-31 H.J. Lu - - gdb: Consolidate 32bit-pkeys.xml and 64bit-pkeys.xml - 1. Since 32bit-pkeys.xml and 64bit-pkeys.xml are identical, consolidate - them into a single keys.xml. - 2. Enable PKU for x32 to fix: - - $ gdbserver :123456 x32-program - ... - .../gdbserver/regcache.cc:255: A problem internal to GDBserver has been detected - . - Unknown register pkru requested - - on Tiger Lake. - -2022-03-31 Simon Marchi - - gdb/linux-nat: remove check based on current_inferior in linux_handle_extended_wait - The check removed by this patch, using current_inferior, looks wrong. - When debugging multiple inferiors with the Linux native target and - linux_handle_extended_wait is called, there's no guarantee about which - is the current inferior. The vfork-done event we receive could be for - any inferior. If the vfork-done event is for a non-current inferior, we - end up wrongfully ignoring it. As a result, the core never processes a - TARGET_WAITKIND_VFORK_DONE event, program_space::breakpoints_not_allowed - is never cleared, and breakpoints are never reinserted. However, - because the Linux native target decided to ignore the event, it resumed - the thread - while breakpoints out. And that's bad. - - The proposed fix is to remove this check. Always report vfork-done - events and let infrun's logic decide if it should be ignored. We don't - save much cycles by filtering the event here. - - Add a test that replicates the situation described above. See comments - in the test for more details. - - Change-Id: Ibe33c1716c3602e847be6c2093120696f2286fbf - -2022-03-31 Simon Marchi - - gdbserver/linux: set lwp !stopped when failing to resume - I see some failures, at least in gdb.multi/multi-re-run.exp and - gdb.threads/interrupted-hand-call.exp. Running `stress -C $(nproc)` at - the same time as the test makes those tests relatively frequent. - - Let's take gdb.multi/multi-re-run.exp as an example. The failure looks - like this, an unexpected "no resumed": - - continue - Continuing. - No unwaited-for children left. - (gdb) FAIL: gdb.multi/multi-re-run.exp: re_run_inf=2: iter=1: continue until exit - - The situation is: - - - Inferior 1 is stopped somewhere, it won't really play a role here. - - Inferior 2 has 2 threads, both stopped. - - We resume inferior 2, the leader thread is expected to exit, making - the process exit. - - From GDB's perspective, a failing run looks like this: - - [infrun] fetch_inferior_event: enter - [infrun] scoped_disable_commit_resumed: reason=handling event - [infrun] do_target_wait: Found 2 inferiors, starting at #1 - [infrun] random_pending_event_thread: None found. - [remote] wait: enter - [remote] Packet received: T0506:20dcffffff7f0000;07:20dcffffff7f0000;10:9551555555550000;thread:pae4cd.ae4cd;core:e; - [remote] wait: exit - [infrun] print_target_wait_results: target_wait (-1.0.0 [process -1], status) = - [infrun] print_target_wait_results: 713933.713933.0 [Thread 713933.713933], - [infrun] print_target_wait_results: status->kind = STOPPED, sig = GDB_SIGNAL_TRAP - [infrun] handle_inferior_event: status->kind = STOPPED, sig = GDB_SIGNAL_TRAP - [infrun] clear_step_over_info: clearing step over info - [infrun] context_switch: Switching context from 0.0.0 to 713933.713933.0 - [infrun] handle_signal_stop: stop_pc=0x555555555195 - [infrun] start_step_over: enter - [infrun] start_step_over: stealing global queue of threads to step, length = 0 - [infrun] operator(): step-over queue now empty - [infrun] start_step_over: exit - [infrun] process_event_stop_test: no stepping, continue - [remote] Sending packet: $Z0,555555555194,1#8e - [remote] Packet received: OK - [infrun] resume_1: step=0, signal=GDB_SIGNAL_0, trap_expected=0, current thread [713933.713933.0] at 0x555555555195 - [remote] Sending packet: $QPassSignals:e;10;14;17;1a;1b;1c;21;24;25;2c;4c;97;#0a - [remote] Packet received: OK - [remote] Sending packet: $vCont;c:pae4cd.-1#9f - [infrun] prepare_to_wait: prepare_to_wait - [infrun] reset: reason=handling event - [infrun] maybe_set_commit_resumed_all_targets: enabling commit-resumed for target extended-remote - [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target extended-remote - [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target extended-remote - [infrun] fetch_inferior_event: exit - [infrun] fetch_inferior_event: enter - [infrun] scoped_disable_commit_resumed: reason=handling event - [infrun] do_target_wait: Found 2 inferiors, starting at #0 - [infrun] random_pending_event_thread: None found. - [remote] wait: enter - [remote] Packet received: N - [remote] wait: exit - [infrun] print_target_wait_results: target_wait (-1.0.0 [process -1], status) = - [infrun] print_target_wait_results: -1.0.0 [process -1], - [infrun] print_target_wait_results: status->kind = NO_RESUMED - [infrun] handle_inferior_event: status->kind = NO_RESUMED - [remote] Sending packet: $Hgp0.0#ad - [remote] Packet received: OK - [remote] Sending packet: $qXfer:threads:read::0,1000#92 - [remote] Packet received: l\n\n\n\n\n - [infrun] stop_waiting: stop_waiting - [remote] Sending packet: $qXfer:threads:read::0,1000#92 - [remote] Packet received: l\n\n\n\n\n - [infrun] infrun_async: enable=0 - [infrun] reset: reason=handling event - [infrun] maybe_set_commit_resumed_all_targets: enabling commit-resumed for target extended-remote - [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target extended-remote - [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target extended-remote - [infrun] fetch_inferior_event: exit - - We can see that we resume the inferior with vCont;c, but got NO_RESUMED. - When the test passes, we get an EXITED status to indicate the process - has exited. - - From GDBserver's point of view, it looks like this. The logs contain - some logging I added and that are part of this patch. - - [remote] getpkt: getpkt ("vCont;c:pae4cf.-1"); [no ack sent] - [threads] resume: enter - [threads] thread_needs_step_over: Need step over [LWP 713931]? Ignoring, should remain stopped - [threads] thread_needs_step_over: Need step over [LWP 713932]? Ignoring, should remain stopped - [threads] get_pc: pc is 0x555555555195 - [threads] thread_needs_step_over: Need step over [LWP 713935]? No, no breakpoint found at 0x555555555195 - [threads] get_pc: pc is 0x7ffff7d35a95 - [threads] thread_needs_step_over: Need step over [LWP 713936]? No, no breakpoint found at 0x7ffff7d35a95 - [threads] resume: Resuming, no pending status or step over needed - [threads] resume_one_thread: resuming LWP 713935 - [threads] proceed_one_lwp: lwp 713935 - [threads] resume_one_lwp_throw: continue from pc 0x555555555195 - [threads] resume_one_lwp_throw: Resuming lwp 713935 (continue, signal 0, stop not expected) - [threads] resume_one_lwp_throw: NOW ptid=713935.713935.0 stopped=0 resumed=0 - [threads] resume_one_thread: resuming LWP 713936 - [threads] proceed_one_lwp: lwp 713936 - [threads] resume_one_lwp_throw: continue from pc 0x7ffff7d35a95 - [threads] resume_one_lwp_throw: Resuming lwp 713936 (continue, signal 0, stop not expected) - [threads] resume_one_lwp_throw: ptrace errno = 3 (No such process) - [threads] resume: exit - [threads] wait_1: enter - [threads] wait_1: [] - [threads] wait_for_event_filtered: waitpid(-1, ...) returned 0, ERRNO-OK - [threads] resume_stopped_resumed_lwps: resuming stopped-resumed LWP LWP 713935.713936 at 7ffff7d35a95: step=0 - [threads] resume_one_lwp_throw: continue from pc 0x7ffff7d35a95 - [threads] resume_one_lwp_throw: Resuming lwp 713936 (continue, signal 0, stop not expected) - [threads] resume_one_lwp_throw: ptrace errno = 3 (No such process) - [threads] operator(): check_zombie_leaders: leader_pid=713931, leader_lp!=NULL=1, num_lwps=2, zombie=0 - [threads] operator(): check_zombie_leaders: leader_pid=713935, leader_lp!=NULL=1, num_lwps=2, zombie=1 - [threads] operator(): Thread group leader 713935 zombie (it exited, or another thread execd). - [threads] delete_lwp: deleting 713935 - [threads] wait_for_event_filtered: exit (no unwaited-for LWP) - sigchld_handler - [threads] wait_1: ret = null_ptid, TARGET_WAITKIND_NO_RESUMED - [threads] wait_1: exit - - What happens is: - - - We resume the leader (713935) successfully. - - The leader exits. - - We resume the secondary thread (713936), we get ESRCH. This is - expected this the leader has exited. - - resume_one_lwp_throw throws, it's caught by resume_one_lwp. - - resume_one_lwp checks with check_ptrace_stopped_lwp_gone that the - failure can be explained by the LWP becoming zombie, and swallows the - error. - - Note that this means that the secondary lwp still has stopped==1. - - wait_1 is called, probably because linux_process_target::resume marks - the async pipe at the end. - - The exit event isn't ready yet, probably because the machine is under - load, so waitpid returns nothing. - - check_zombie_leaders detects that the leader is zombie and deletes - - We try to find a resumed (non-stopped) LWP to get an event from, - there's none since the leader (that was resumed) is now deleted, and - the secondary thread is still marked stopped. - wait_for_event_filtered returns -1, causing wait_1 to return - NO_RESUMED. - - What I notice here is that there is some kind of race between the - availability of the process' exit notification and the call to wait_1 - that results from marking the async pipe at the end of resume. - - I think what we want from this wait_1 invocation is to keep waiting, as - we will eventually get thread exit notifications for both of our - threads. - - The fix I came up with is to mark the secondary thread as !stopped (or - resumed) when we fail to resume it. This makes wait_1 see that there is - at least one resume lwp, so it won't return NO_RESUMED. I think this - makes sense to consider it resumed, because we are going to receive an - exit event for it. Here's the GDBserver logs with the fix applied: - - [threads] resume: enter - [threads] thread_needs_step_over: Need step over [LWP 724595]? Ignoring, should remain stopped - [threads] thread_needs_step_over: Need step over [LWP 724596]? Ignoring, should remain stopped - [threads] get_pc: pc is 0x555555555195 - [threads] thread_needs_step_over: Need step over [LWP 724597]? No, no breakpoint found at 0x555555555195 - [threads] get_pc: pc is 0x7ffff7d35a95 - [threads] thread_needs_step_over: Need step over [LWP 724598]? No, no breakpoint found at 0x7ffff7d35a95 - [threads] resume: Resuming, no pending status or step over needed - [threads] resume_one_thread: resuming LWP 724597 - [threads] proceed_one_lwp: lwp 724597 - [threads] resume_one_lwp_throw: continue from pc 0x555555555195 - [threads] resume_one_lwp_throw: Resuming lwp 724597 (continue, signal 0, stop not expected) - [threads] resume_one_lwp_throw: NOW ptid=724597.724597.0 stopped=0 resumed=0 - [threads] resume_one_thread: resuming LWP 724598 - [threads] proceed_one_lwp: lwp 724598 - [threads] resume_one_lwp_throw: continue from pc 0x7ffff7d35a95 - [threads] resume_one_lwp_throw: Resuming lwp 724598 (continue, signal 0, stop not expected) - [threads] resume_one_lwp_throw: ptrace errno = 3 (No such process) - [threads] resume: exit - [threads] wait_1: enter - [threads] wait_1: [] - sigchld_handler - [threads] wait_for_event_filtered: waitpid(-1, ...) returned 0, ERRNO-OK - [threads] operator(): check_zombie_leaders: leader_pid=724595, leader_lp!=NULL=1, num_lwps=2, zombie=0 - [threads] operator(): check_zombie_leaders: leader_pid=724597, leader_lp!=NULL=1, num_lwps=2, zombie=1 - [threads] operator(): Thread group leader 724597 zombie (it exited, or another thread execd). - [threads] delete_lwp: deleting 724597 - [threads] wait_for_event_filtered: sigsuspend'ing - sigchld_handler - [threads] wait_for_event_filtered: waitpid(-1, ...) returned 724598, ERRNO-OK - [threads] wait_for_event_filtered: waitpid 724598 received 0 (exited) - [threads] filter_event: 724598 exited - [threads] wait_for_event_filtered: waitpid(-1, ...) returned 724597, ERRNO-OK - [threads] wait_for_event_filtered: waitpid 724597 received 0 (exited) - [threads] wait_for_event_filtered: waitpid(-1, ...) returned 0, ERRNO-OK - sigchld_handler - [threads] wait_1: ret = LWP 724597.724598, exited with retcode 0 - [threads] wait_1: exit - - Change-Id: Idf0bdb4cb0313f1b49e4864071650cc83fb3c100 - -2022-03-31 Simon Marchi - - gdb/testsuite/tui: implement _csi_P proc - Since commit 3cd522938792 ("Change the pager to a ui_file"), I see these - errors when running gdb.tui/scroll.exp: - - ERROR: invalid command name "_csi_P" - while executing - "::gdb_tcl_unknown _csi_P 2" - ("uplevel" body line 1) - invoked from within - "uplevel 1 ::gdb_tcl_unknown $args" - (procedure "::unknown" line 5) - invoked from within - "_csi_P 2" - ("eval" body line 1) - invoked from within - "eval _csi_$cmd $params" - - It looks like GDB is emitting a CSI that it did not emit before, the - "Delete character" one: - - https://vt100.net/docs/vt510-rm/DCH.html - - Implement it. - - Co-Authored-By: Andrew Burgess - Change-Id: I5bf86b6104d51b0623a26a69df83d1ca9a4851b7 - -2022-03-31 Simon Marchi - - gdb: fix use of fprintf_filtered in top.c - A race condition in how patches were pushed causes this build failure: - - CXX top.o - /home/simark/src/binutils-gdb/gdb/top.c: In function ‘void print_gdb_configuration(ui_file*)’: - /home/simark/src/binutils-gdb/gdb/top.c:1622:3: error: ‘fprintf_filtered’ was not declared in this scope; did you mean ‘printf_unfiltered’? - 1622 | fprintf_filtered (stream, _("\ - | ^~~~~~~~~~~~~~~~ - - fprintf_filtered has been removed, gdb_printf must be used now. Fix - this. - - Change-Id: I6a172ba0d53dab2e7cc43ed0ed2696c82925245b - -2022-03-31 Richard Sandiford - - aarch64: Relax check for RNG system registers - FEAT_RNG is an optional Armv8.5-A extension, but it can be backported - to earlier architectures as well. GAS previously made the RNG registers - conditional on having both armv8.5-a and +rng, but only +rng should be - required. - - This seems to be the only feature that was handled like this. - - opcodes/ - * aarch64-opc.c (SR_RNG): Don't require V8_5. - - gas/ - * testsuite/gas/aarch64/rng-1.s, testsuite/gas/aarch64/rng-1.d: New - test. - -2022-03-31 Eli Zaretskii - - * gdb/top.c (print_gdb_configuration): Announce --enable-threading. - This includes the reporting of --enable/disable-threading as part of - the GDB configuration description. - -2022-03-31 Simon Marchi - - gdb/infrun: add reason parameter to stop_all_threads - Add a "reason" parameter, only used to show in debug messages what is - the reason for stopping all threads. This helped me understand the - debug logs while adding some new uses of stop_all_threads, so I am - proposing to merge it. - - Change-Id: I66c8c335ebf41836a7bc3d5fe1db92c195f65e55 - -2022-03-31 Simon Marchi - - gdb/testsuite: update copyright years in gdb.base/vfork-follow-parent.* - I forgot to do this before pushing the previous commit. - - Change-Id: Ia343f702e8357d0fd109e9ddd778973e91862805 - -2022-03-31 Simon Marchi - - gdb: test vfork + follow-fork-mode=parent + detach-on-fork=off - The particular behavior we have when using that combination of settings - doesn't seem tested at all (at least, I don't find it if I grep for "Can - not resume the parent process"). Add a simple test for that. - - Change-Id: Ib9454a615abba661b42f1b15056df73ed1bcd4c5 - -2022-03-31 Nick Clifton - - Accept the + character as part of filenames for MRI scripts. - -2022-03-31 Rainer Orth - - Fix procfs.c compilation - procfs.c doesn't compile on Solaris: - - /vol/src/gnu/gdb/hg/master/local/gdb/procfs.c: In member function ‘virtual bool procfs_target::info_proc(const char*, info_proc_what)’: - /vol/src/gnu/gdb/hg/master/local/gdb/procfs.c:3302:3: error: ‘gdb_argv’ was not declared in this scope - 3302 | gdb_argv built_argv (args); - | ^~~~~~~~ - /vol/src/gnu/gdb/hg/master/local/gdb/procfs.c:3303:20: error: ‘built_argv’ was not declared in this scope; did you mean ‘buildargv’? - 3303 | for (char *arg : built_argv) - | ^~~~~~~~~~ - | buildargv - - Fixed by including "gdbsupport/buildargv.h". - - Tested on amd64-pc-solaris2.11, sparcv9-sun-solaris2.11. - -2022-03-31 GDB Administrator - - Automatic date update in version.in - -2022-03-30 Simon Marchi - - gdb/testsuite: add tests for Term - While trying to review Andrew's patch here [1], I thought I spotted a - bug in the handling of a CSI, but I had no way to know for sure. So I - thought it would be useful to have unit tests for the handling of - control characters and control sequences of our toy terminal - implementation. It might help avoid chasing bugs in the GDB TUI when in - reality it's a problem with the testsuite's terminal implementation. - - Add the gdb.tui/tuiterm.exp file to do that. All currently supported - control sequences and characters are tested, except _csi_m (the one that - handles colors and stuff). _csi_m should probably be tested too, but it - will require more work. - - Fix a few issues that the tests spotted: - - - backspace: according to [3] (table 4-1), a backspace when the cursor - is at the beginning of a line should have no effect. Our - implementation did wrap to the end of the previous line. Change our - implementation to match the doc (and the test). - - insert character: this control sequence is supposed to insert blank - characters, shifting all the rest of the line right. The current - implementation moves N characters right, but it overwrites the - characters on the right instead of shifting them. It also doesn't - insert blank characters at the cursor. - - Cursor down, forward, next line: off-by-one error when reaching the - end of the display. - - erase in display, line: off-by-one errors. - - vertical line position absolute: allowed setting the cursor outside - the display, when it should clamp it to the display size. - - I found that this web page [2] gave some good clues on the expected - behavior of some control characters or sequences that some other pages - didn't. - - [1] https://sourceware.org/pipermail/gdb-patches/2022-March/186433.html - [2] https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences - [3] https://vt100.net/docs/vt510-rm/chapter4.html#S4.3.3 - - Change-Id: Iab4141fdcfb7459d1b7c45cc63bd1fcb50a78d5d - -2022-03-30 Tom Tromey - - Only allow QUIT on the main thread - Pedro pointed out that gdb worker threads should not react to quits. - While I don't think that the new DWARF reader can call QUIT from a - worker thread (and I don't think the existing minsym threading code - can either), it seems safest to address this before checking in the - new code. This patch arranges for the QUIT macro to only work on the - main thread. - -2022-03-30 Tom Tromey - - Use gdb_printf and gdb_vprintf in more places - Luis pointed out that I missed a spot in the gdb_printf conversion -- - namely aarch64-nat.c. While looking at this, I found another spot in - darwin-nat.c that I also missed. I can't build either of these, but I - think this patch should fix the problems. - - Consolidate definition of current_directory - I noticed that both gdbserver and gdb define current_directory. - However, as it is referenced by gdbsupport, it seemed better to define - it there as well. This patch also moves the declaration to - pathstuff.h. Tested by rebuilding. - -2022-03-30 Tom Tromey - - Decode "dynamic" interface types in Ada - In Ada, if a class implements an interface and has a dynamic - superclass, then the "offset to top" -- the offset that says how to - turn a pointer to the interface into a pointer to the whole object -- - is stored in the object itself. This patch changes GDB to understand - this. - - Because this only touches Ada code, and because Joel already reviewed - it internally, I am checking it in. - -2022-03-30 Jeff Law - - Fix for MUL instruction on the v850 - * sim/v850/simops.c (Multiply64): Properly test if we need to - negate either of the operands. - - * sim/testsuite/v850/mul.cgs: New test. - -2022-03-30 GDB Administrator - - Automatic date update in version.in - -2022-03-29 Tom Tromey - - Remove two unused hooks - I noticed that a couple of deprecated hooks aren't ever called, so - they can't really be used by Insight. This patch removes them - entirely. I checked the Insight sources, and these aren't mentioned - there, either. - -2022-03-29 Tom Tromey - - Remove unnecessary calls to wrap_here and gdb_flush - Various spots in gdb currently know about the wrap buffer, and so are - careful to call wrap_here to be certain that all output has been - flushed. - - Now that the pager is just an ordinary stream, this isn't needed, and - a simple call to gdb_flush is enough. - - Similarly, there are places where gdb prints to gdb_stderr, but first - flushes gdb_stdout. stderr_file already flushes gdb_stdout, so these - aren't needed. - -2022-03-29 Tom Tromey - - Minor comment updates in utils.h - This patch updates some comments in utils.h to more closely reflect - the new reality. - - Remove vfprintf_styled - Nothing calls vfprintf_styled any more, so remove it. - - Remove ui_out_flag::unfiltered_output - There is no longer any need for ui_out_flag::unfiltered_output -- - nothing ever sets this flag. This used to be needed to make the - _unfiltered output work, but now only printf_unfiltered can be used, - and it uses the puts_unfiltered method. This patch removes the flag - and the dead code. - - Rename fprintf_symbol_filtered - fprintf_symbol_filtered is misnamed, because whether filtering happens - is now up to the stream. This renames it to fprintf_symbol, which - isn't a great name (the first "f" doesn't mean much and the second one - is truly meaningless here), but "print_symbol" was already taken. - - Rename puts_filtered_tabular - puts_filtered_tabular is now misnamed, because whether filtering - happens is now up to the stream. So, rename it. (This function is - pretty weird, and should probably be rewritten to avoid using the - chars_printed global, and moved into objc-lang.c. However, I haven't - done so.) - - Rename print_spaces_filtered - print_spaces_filtered is now misnamed, because whether filtering - happens is up to the stream. So, rename it. - - Unify gdb printf functions - Now that filtered and unfiltered output can be treated identically, we - can unify the printf family of functions. This is done under the name - "gdb_printf". Most of this patch was written by script. - - Unify gdb putc functions - Now that filtered and unfiltered output can be treated identically, we - can unify the putc family of functions. This is done under the name - "gdb_putc". Most of this patch was written by script. - - Unify gdb puts functions - Now that filtered and unfiltered output can be treated identically, we - can unify the puts family of functions. This is done under the name - "gdb_puts". Most of this patch was written by script. - - Unify vprintf functions - Now that filtered and unfiltered output can be treated identically, we - can unify the vprintf family of functions: vprintf_filtered, - vprintf_unfiltered, vfprintf_filtered and vfprintf_unfiltered. (For - the gdb_stdout variants, recall that only printf_unfiltered gets truly - unfiltered output at this point.) This removes one such function and - renames the remaining two to "gdb_vprintf". All callers are updated. - Much of this patch was written by script. - - Remove fputs_styled_unfiltered - fputs_styled_unfiltered is only called from cli_ui_out, so remove it. - This area will be further simplified in future patches. - -2022-03-29 Tom Tromey - - Change the pager to a ui_file - This rewrites the output pager as a ui_file implementation. - - A new header is introduced to declare the pager class. The - implementation remains in utils.c for the time being, because there - are some static globals there that must be used by this code. (This - could be cleaned up at some future date.) - - I went through all the text output in gdb to ensure that this change - should be ok. There are a few cases: - - * Any existing call to printf_unfiltered is required to be avoid the - pager. This is ensured directly in the implementation. - - * All remaining calls to the f*_unfiltered functions -- the ones that - take an explicit ui_file -- either send to an unfiltered stream - (e.g., gdb_stderr), which is obviously ok; or conditionally send to - gdb_stdout - - I investigated all such calls by searching for: - - grep -e '\bf[a-z0-9_]*_unfiltered' *.[chyl] */*.[ch] | grep -v gdb_stdlog | grep -v gdb_stderr - - This yields a number of candidates to check. - - * The breakpoint _print_recreate family, and - save_trace_state_variables. These are used for "save" commands - and so are fine. - - * Things printing to a temporary stream. Obviously ok. - - * Disassembly selftests. - - * print_gdb_help - this is non-obvious, but ok because paging isn't - yet enabled at this point during startup. - - * serial.c - doens't use gdb_stdout - - * The code in compile/. This is all printing to a file. - - * DWARF DIE dumping - doesn't reference gdb_stdout. - - * Calls to the _filtered form -- these are all clearly ok, because if - they are using gdb_stdout, then filtering will still apply; and if - not, then filtering never applied and still will not. - - Therefore, at this point, there is no longer any distinction between - all the other _filtered and _unfiltered calls, and they can be - unified. - - In this patch, take special note of the vfprintf_maybe_filtered and - ui_file::vprintf change. This is one instance of the above idea, - erasing the distinction between filtered and unfiltered -- in this - part of the change, the "unfiltered_output" flag is never passe to - cli_ui_out. Subsequent patches will go much further in this - direction. - - Also note the can_emit_style_escape changes in ui-file.c. Checking - against gdb_stdout or gdb_stderr was always a bit of a hack; and now - it is no longer needed, because this is decision can be more fully - delegated to the particular ui_file implementation. - - ui_file::can_page is removed, because this patch removed the only call - to it. - - I think this is the main part of fixing PR cli/7234. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7234 - -2022-03-29 Tom Tromey - - Remove vfprintf_styled_no_gdbfmt - This removes vfprintf_styled_no_gdbfmt, inlining it at the sole point - of call. - - Add style-escape methods to ui_file - This adds emit_style_escape and reset_style methods to ui_file. These - aren't used yet, but they will be once the pager is converted to be a - ui_file subclass. - - Add puts_unfiltered method to ui_file - When the pager is rewritten as a ui_file, gdb will still need a way to - bypass the filtering. After examining a few approaches, I chose this - patch, which adds a puts_unfiltered method to ui_file. For most - implementations of ui_file, this will just delegate to puts. This - patch also switches printf_unfiltered to use the new method. - - Only have one API for unfiltered output - At the end of this series, the use of unfiltered output will be very - restricted -- only places that definitely need it will use it. To - this end, I thought it would be good to reduce the number of - _unfiltered APIs that are exposed. This patch changes gdb so that - only printf_unfiltered exists. (After this patch, the f* variants - still exist as well, but those will be removed later.) - -2022-03-29 Tom Tromey - - Remove some uses of printf_unfiltered - A number of spots call printf_unfiltered only because they are in code - that should not be interrupted by the pager. However, I believe these - cases are all handled by infrun's blanket ban on paging, and so can be - converted to the default (_filtered) API. - - After this patch, I think all the remaining _unfiltered calls are ones - that really ought to be. A few -- namely in complete_command -- could - be replaced by a scoped assignment to pagination_enabled, but for the - remainder, the code seems simple enough like this. - -2022-03-29 Tom Tromey - - Use unfiltered output in annotate.c - It seems to me that annotations should not be filtered. While it - might be weird for an annotation-based UI to use the pager, it's not, - I think, out of the question. This patch makes this change. - -2022-03-29 Tankut Baris Aktemur - Aleksandar Paunovic - - gdb/remote: use current_inferior in read_ptid if multi-process not supported - When parsing the ptid out of a reply package, if the multi-process - extensions are not supported, use current_inferior's pid as the pid of - the reported thread, instead of inferior_ptid. This is needed because - the inferior_ptid may be null_ptid although a legit context exists, - due to a prior context switch via switch_to_inferior_no_thread. - - Below is a scenario that illustrates what could go wrong. First, - setup a multi-target scenario. This is needed, because in a - multi-target setting, the inferior_ptid is cleared out before waiting - on targets. The second inferior below sits on top of a remote target. - Multi-process packets are disabled. - - $ # First, spawn a process with PID 26253 to attach to later. - $ gdb-up a.out - Reading symbols from a.out... - (gdb) maint set target-non-stop on - (gdb) set remote multiprocess-feature-packet off - (gdb) start - ... - (gdb) add-inferior -no-connection - [New inferior 2] - Added inferior 2 - (gdb) inferior 2 - [Switching to inferior 2 [] ()] - (gdb) target extended-remote | gdbserver --multi - - Remote debugging using | gdbserver --multi - - Remote debugging using stdio - (gdb) attach 26253 - Attaching to Remote target - Attached; pid = 26253 - [New Thread 26253] - [New inferior 3] - Reading /tmp/a.out from remote target... - ... - [New Thread 26253] - ... - Reading /usr/local/lib/debug/....debug from remote target... - >>> GDB seems to hang here. - - After attaching to a process and reading some library files, GDB - seems to hang. One interesting thing to note is that - - [New Thread 26253] - - appears twice. We also see - - [New inferior 3] - - Running the same scenario with "debug infrun on" reveals more details. - - ... - (gdb) attach 26253 - [infrun] scoped_disable_commit_resumed: reason=attaching - Attaching to Remote target - Attached; pid = 26253 - [New Thread 26253] - [infrun] infrun_async: enable=1 - [infrun] attach_command: immediately after attach: - [infrun] attach_command: thread 26253.26253.0, executing = 1, resumed = 0, state = RUNNING - [infrun] clear_proceed_status_thread: 26253.26253.0 - [infrun] reset: reason=attaching - [infrun] maybe_set_commit_resumed_all_targets: not requesting commit-resumed for target native, no resumed threads - [infrun] maybe_set_commit_resumed_all_targets: enabling commit-resumed for target extended-remote - [infrun] fetch_inferior_event: enter - [infrun] scoped_disable_commit_resumed: reason=handling event - [infrun] do_target_wait: Found 2 inferiors, starting at #1 - [infrun] random_pending_event_thread: None found. - [infrun] print_target_wait_results: target_wait (-1.0.0 [Thread 0], status) = - [infrun] print_target_wait_results: 26253.26253.0 [Thread 26253], - [infrun] print_target_wait_results: status->kind = STOPPED, sig = GDB_SIGNAL_0 - [infrun] handle_inferior_event: status->kind = STOPPED, sig = GDB_SIGNAL_0 - [infrun] start_step_over: enter - [infrun] start_step_over: stealing global queue of threads to step, length = 0 - [infrun] operator(): step-over queue now empty - [infrun] start_step_over: exit - [infrun] context_switch: Switching context from 0.0.0 to 26253.26253.0 - [infrun] handle_signal_stop: stop_pc=0x7f849d8cf151 - [infrun] stop_waiting: stop_waiting - [infrun] stop_all_threads: starting - [infrun] stop_all_threads: pass=0, iterations=0 - [New inferior 3] - Reading /tmp/a.out from remote target... - warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead. - Reading /tmp/a.out from remote target... - Reading symbols from target:/tmp/a.out... - [New Thread 26253] - [infrun] stop_all_threads: 4723.4723.0 not executing - [infrun] stop_all_threads: 26253.26253.0 not executing - [infrun] stop_all_threads: 42000.26253.0 executing, need stop - [infrun] print_target_wait_results: target_wait (-1.0.0 [Thread 0], status) = - [infrun] print_target_wait_results: -1.0.0 [Thread 0], - [infrun] print_target_wait_results: status->kind = IGNORE - [infrun] print_target_wait_results: target_wait (-1.0.0 [Thread 0], status) = - [infrun] print_target_wait_results: -1.0.0 [Thread 0], - [infrun] print_target_wait_results: status->kind = IGNORE - - GDB tried to stop Thread 42000.26253.0, which does not exist, and we - are waiting for a stop event that will never happen. The PID in - '42000.26253.0', namely 42000, is the PID of magic_null_ptid. - It comes from gdb/remote.c:read_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, - then since there's no way to know the pid of the reported - threads, use the magic number. */ - if (inferior_ptid == null_ptid) - pid = magic_null_ptid.pid (); - else - pid = inferior_ptid.pid (); - - if (obuf) - *obuf = pp; - return ptid_t (pid, tid); - - Because multi-process was turned off, GDB did not parse an explicitly - specified PID. Furthermore, inferior_ptid == null_ptid, and - eventually GDB picked the PID from magic_null_ptid. - - If target-non-stop is not turned on at the beginning, the same bug - reveals itself as a duplicated thread as shown below. - - # Same setup as above, without 'maint set target-non-stop on'. - ... - (gdb) attach 26253 - Attaching to Remote target - Attached; pid = 26253 - [New inferior 3] - ... - [New Thread 26253] - ... - (gdb) info threads - Id Target Id Frame - 1.1 process 13517 "a.out" main () at test.c:3 - * 2.1 Thread 26253 "a.out" 0x00007f12750c5151 in read () from target:/lib/x86_64-linux-gnu/libc.so.6 - 3.1 Thread 26253 "a.out" Remote 'g' packet reply is too long (expected 560 bytes, got 2496 bytes): 00feffffffffffff000a3a75127f000051510c75127f0000000400000000000060d24ef6af5500000000000000000000680d000000000000b85b31e3fc7f0000c0283a75127f000000e55b75127f000010d04ef6af550000460200000000000060c73975127f0000a0d23975127f0000000a3a75127f0000000000000000000051510c75127f000046020000330000002b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f03000000000000ffff0000000000000000000000000000000000000000000080143a75127f000080143a75127f000040143a75127f000040143a75127f00007d0000007e0000007f00000080000000300c3a75127f0000300c3a75127f00000e000000000000000e0000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0400000004000000040000000400000020143a75127f000020143a75127f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000801f0000000000000000000000e55b75127f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - (gdb) - - Fix the problem by preferring current_inferior()'s pid instead of - magic_null_ptid. - - Regression-tested on X86-64 Linux. - -2022-03-29 Andrew Burgess - - gdb/testsuite: fix test failure when building against readline v7 - The test added in the commit: - - commit a6b413d24ccc5d76179bab866834e11fd6fec294 - Date: Fri Mar 11 14:44:03 2022 +0000 - - gdb: work around prompt corruption caused by bracketed-paste-mode - - Was not written with readline 7 in mind, only readline 8+. Between - readline 7 and 8 the escape sequence used to disable bracketed paste - mode changed, an additional '\r' character was added to the end. In - fact, it was the addition of this '\r' character that triggered the - issue for which the above commit is part of the solution. - - Anyway, the test tries to spot the case where the output from GDB is - not perfect, but does have the above work around applied. However, - the pattern in the test assumes that the problematic '\r' will be - present, and this is only true for readline 8+. With readline 7 the - test was failing. - - In this commit I generalise the pattern a little so that the test will - still KFAIL with readline 7. - - It's a little unfortunate that the test is KFAILing with readline 7, - as without the problematic '\r' there's actually no reason that GDB - couldn't "do the right thing" in this case, in which case, the test - would PASS, but that would require changes within GDB itself. - - My preference then is that initially we patch the test to get it - KFAILing, then in a separate commit I can modify GDB so that it can - PASS with readline 7. - -2022-03-29 Andrew Burgess - - gdb/testsuite: fix copy & paste error in gdb.python/py-format-address.exp - The test gdb.python/py-format-address.exp, added in commit: - - commit 25209e2c6979c3838e14e099f0333609810db280 - Date: Sat Oct 23 09:59:25 2021 +0100 - - gdb/python: add gdb.format_address function - - included 3 copy & paste errors where the wrong address was used in the - expected output patterns. - - The test compiles two almost identical test binaries (one function - changes its name, that's the only difference), two inferiors are - created, each inferior using one of the test binaries. - - We then take the address of the name changing function in both - inferiors ('foo' in inferior 1 and 'bar' in inferior 2) and the tests - are carried out using these addresses. - - What we're checking for is that symbols 'foo' and 'bar' show up in the - correct inferior, and that (as this test is for a Python API feature), - the user can have one inferior selected, but ask about the other - inferior, and see the correct symbol in the result. - - The hope is that the two binaries will be laid out identically by the - compiler, and that 'foo' and 'bar' will be at the same address. This - is fine, unless the executable is compiled as PIE (position - independent executable), in which case there is a problem. - - The problem is that though inferior 1 is set running, the inferior 2 - never is. If the executables are compiled as PIE, then the address in - the inferior 2 will not have been resolved, while the address in the - inferior 1 will have been, and so the two addresses we use in the - tests will be different. - - This issue was reported here: - - https://sourceware.org/pipermail/gdb-patches/2022-March/186911.html - - The first part of the fix is to use the correct address variable in - the expected output patterns, with this change the tests pass even - when the executables are compiled as PIE. - - A second part of this fix is to pass the 'nopie' option when we - compile the tests, this should ensure that the address obtained in - inferior 2 is the same as the address from inferior 1, which makes the - test more useful. - -2022-03-29 Andrew Burgess - - gdb/mi: fix use after free of frame_info causing spurious notifications - In commit: - - commit a2757c4ed693cef4ecc4dcdcb2518353eb6b3c3f - Date: Wed Mar 16 15:08:22 2022 +0000 - - gdb/mi: consistently notify user when GDB/MI client uses -thread-select - - Changes were made to GDB to address some inconsistencies in when - notifications are sent from a MI terminal to a CLI terminal (when - multiple terminals are in use, see new-ui command). - - Unfortunately, in order to track when the currently selected frame has - changed, that commit grabs a frame_info pointer before and after an MI - command has executed, and compares the pointers to see if the frame - has changed. - - This is not safe. - - If the frame cache is deleted for any reason then the frame_info - pointer captured before the command started, is no longer valid, and - any comparisons based on that pointer are undefined. - - This was leading to random test failures for some folk, see: - - https://sourceware.org/pipermail/gdb-patches/2022-March/186867.html - - This commit changes GDB so we no longer hold frame_info pointers, but - instead store the frame_id and frame_level, this is safe even when the - frame cache is flushed. - -2022-03-29 Jan Beulich - - bfd/Dwarf2: gas doesn't mangle names - Include the language identifier emitted by gas in the set of ones where - no mangled names are expected. Even if there could be "hand-mangled" - names, gas doesn't emit DW_AT_linkage_name in the first place. - - bfd/Dwarf2: make find-nearest-line returned function name consistent - Prior to entering the enclosing "else if()" the earlier associated if() - checks function->is_linkage and, if set, uses function->name. The - comment in patch context precedes (and explains) the setting - function->is_linkage. Yet with the flag set, we should then also return - the function name, just like said earlier if() would do when we came - here a 2nd time for the same "addr". And indeed passing the same address - twice on addr2line's command line would resolve the function for the 2nd - instance, but not for the 1st (if this code path is taken). (This, - obviously, is particularly relevant when there's no ELF symbol table in - the first place, like would be the case - naturally - in PE/COFF - binaries, for example.) - - gas/Dwarf: special-case .linefile only for macros - Restrict the PR gas/16908 workaround to just macros, matching the - original intention as well as the comment there. For constructs like - .irp or .rept the reasoning doesn't apply, as there's no separate - "invocation" point which may be of interest to record (for, as said - there, short macros). - -2022-03-29 Jan Beulich - - RISC-V: correct FCVT.Q.L[U] - While the spec isn't explicit about this, it pointing out the similarity - with the D extension ought to extend to the ignoring of a meaningless - rounding mode: "Note FCVT.D.W[U] always produces an exact result and is - unaffected by rounding mode." Hence the chosen encodings also ought to - match. - - Note that to avoid breaking existing code the forms with a 3rd operand - are not removed, which means there continues to be a difference to - FCVT.D.W[U]. - -2022-03-29 Mike Frysinger - - sim: add arch/.gdbinit stub scripts - Make it easy to load the common gdbinit script even when running in - the arch/ subdir instead of the top-level sim dir. - -2022-03-29 Alan Modra - - asan: heap buffer overflow in pa_chk_field_selector - The buffer overflow showed up running the gas "all macro" test. - - PR 29005 - * config/tc-hppa.c (pa_chk_field_selector): Don't read past end - of line. - -2022-03-29 GDB Administrator - - Automatic date update in version.in - -2022-03-28 Tom Tromey - - Add Rust parser check for end of expression - I noticed that "print 5," passed in Rust -- the parser wasn't checking - that the entire input was used. This patch fixes the problem. This - in turn pointed out another bug in the parser, namely that it didn't - lex the next token after handling a string token. This is also fixed - here. - -2022-03-28 Tom Tromey - - Switch gdb_stdlog to use timestamped_file - Currently, timestamps for logging are done by looking for the use of - gdb_stdlog in vfprintf_unfiltered. This seems potentially buggy, in - that during logging or other redirects (like execute_fn_to_ui_file) we - might have gdb_stdout==gdb_stdlog and so, conceivably, wind up with - timestamps in a log when they were not desired. - - It seems better, instead, for timestamps to be a property of the - ui_file itself. - - This patch changes gdb to use the new timestamped_file for gdb_stdlog - where appropriate, and removes the special case from - vfprintf_unfiltered. - - Note that this may somewhat change the output in some cases -- in - particular, when going through execute_fn_to_ui_file (or the _string - variant), timestamps won't be emitted. This could be fixed in those - functions, but it wasn't clear to me whether this is really desirable. - - Note also that this changes the TUI to send gdb_stdlog to gdb_stderr. - I imagine that the previous use of gdb_stdout here was inadvertent. - (And in any case it probably doesn't matter.) - -2022-03-28 Tom Tromey - - Add new timestamped_file class - This adds a "timestamped_file" subclass of ui_file. This class adds a - timestamp to its output when appropriate. That is, it follows the - rule already used in vfprintf_unfiltered of adding a timestamp at most - once per write. - - The new class is not yet used. - -2022-03-28 Tom Tromey - - Use unique_ptr in CLI logging code - This changes the CLI logging code to avoid manual memory management - (to the extent possible) by using unique_ptr in a couple of spots. - This will come in handy in a later patch. - -2022-03-28 Tom Tromey - - Simplify the CLI set_logging logic - The CLI's set_logging logic seemed unnecessarily complicated to me. - This patch simplifies it, with an eye toward changing it to use RAII - objects in a subsequent patch. - - I did not touch the corresponding MI code. That code seems incorrect - (nothing ever uses raw_stdlog, and nothing ever sets - saved_raw_stdlog). I didn't attempt to fix this, because I question - whether this is even useful for MI. - -2022-03-28 Tom Tromey - - Handle multiple addresses in call_site_target - A large customer program has a function that is partitioned into hot - and cold parts. A variable in a callee of this function is described - using DW_OP_GNU_entry_value, but gdb gets confused when trying to find - the caller. I tracked this down to dwarf2_get_pc_bounds interpreting - the function's changes so that the returned low PC is the "wrong" - function. - - Intead, when processing DW_TAG_call_site, the low PC of each range in - DW_AT_ranges should be preserved in the call_site_target. This fixes - the variable lookup in the test case I have. - - I didn't write a standalone test for this as it seemed excessively - complicated. - -2022-03-28 Tom Tromey - - Change call_site_target to iterate over addresses - In order to handle the case where a call site target might refer to - multiple addresses, we change the code to use a callback style. Any - spot using call_site_target::address now passes in a callback function - that may be called multiple times. - -2022-03-28 Tom Tromey - - Change call_site_find_chain_1 to work recursively - call_site_find_chain_1 has a comment claiming that recursive calls - would be too expensive. However, I doubt this is so expensive; and - furthermore the explicit state management approach here is difficult - both to understand and to modify. This patch changes this code to use - explicit recursion, so that a subsequent patch can generalize this - code without undue trauma. - - Additionally, I think this patch detects a latent bug in the recursion - code. (It's hard for me to be completely certain.) The bug is that - when a new target_call_site is entered, the code does: - - 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; - } - } - - Here, if entering the target_call_site fails, then any tail_call_next - elements in this call site are not visited. However, if this code - does happen to enter a call site, then the tail_call_next elements - will be visited during backtracking. This applies when doing the - backtracking as well -- it will only continue through a given chain as - long as each element in the chain can successfully be visited. - - I'd appreciate some review of this. If this behavior is intentional, - it can be added to the new implementation. - -2022-03-28 Tom Tromey - - Constify chain_candidate - While investigating this bug, I wasn't sure if chain_candidate might - update 'chain'. I changed it to accept a const reference, making it - clear that it cannot. This simplifies the code a tiny bit as well. - - Make call_site_target members private - This makes the data members of call_site_target 'private'. This lets - us remove most of its public API. call_site_to_target_addr is changed - to be a method of this type. This is a preparatory refactoring for - the fix at the end of this series. - - Change call_site_target to use custom type and enum - call_site_target reuses field_loc_kind and field_location. However, - it has never used the full range of the field_loc_kind enum. In a - subsequent patch, I plan to add a new 'kind' here, so it seemed best - to avoid this reuse and instead introduce new types here. - -2022-03-28 GDB Administrator - - Automatic date update in version.in - -2022-03-27 GDB Administrator - - Automatic date update in version.in - -2022-03-26 Tom Tromey - - Remove an unused declaration from value.h - value.h has a declaration of value_print_array_elements that is - incorrect. In C, this would have been an error, but in C++ this is a - declaration of an overload that is neither defined nor used. This - patch removes the declaration. - -2022-03-26 GDB Administrator - - Automatic date update in version.in - -2022-03-25 Nick Alcock - - libtool.m4: fix the NM="/nm/over/here -B/option/with/path" case - My previous nm patch handled all cases but one -- if the user set NM in - the environment to a path which contained an option, libtool's nm - detection tries to run nm against a copy of nm with the options in it: - e.g. if NM was set to "nm --blargle", and nm was found in /usr/bin, the - test would try to run "/usr/bin/nm --blargle /usr/bin/nm --blargle". - This is unlikely to be desirable: in this case we should run - "/usr/bin/nm --blargle /usr/bin/nm". - - Furthermore, as part of this nm has to detect when the passed-in $NM - contains a path, and in that case avoid doing a path search itself. - This too was thrown off if an option contained something that looked - like a path, e.g. NM="nm -B../prev-gcc"; libtool then tries to run - "nm -B../prev-gcc nm" which rarely works well (and indeed it looks - to see whether that nm exists, finds it doesn't, and wrongly concludes - that nm -p or whatever does not work). - - Fix all of these by clipping all options (defined as everything - including and after the first " -") before deciding whether nm - contains a path (but not using the clipped value for anything else), - and then removing all options from the path-modified nm before - looking to see whether that nm existed. - - NM=my-nm now does a path search and runs e.g. - /usr/bin/my-nm -B /usr/bin/my-nm - - NM=/usr/bin/my-nm now avoids a path search and runs e.g. - /usr/bin/my-nm -B /usr/bin/my-nm - - NM="my-nm -p../wombat" now does a path search and runs e.g. - /usr/bin/my-nm -p../wombat -B /usr/bin/my-nm - - NM="../prev-binutils/new-nm -B../prev-gcc" now avoids a path search: - ../prev-binutils/my-nm -B../prev-gcc -B ../prev-binutils/my-nm - - This seems to be all combinations, including those used by GCC bootstrap - (which, before this commit, fails to bootstrap when configured - --with-build-config=bootstrap-lto, because the lto plugin is now using - --export-symbols-regex, which requires libtool to find a working nm, - while also using -B../prev-gcc to point at the lto plugin associated - with the GCC just built.) - - Regenerate all affected configure scripts. - - * libtool.m4 (LT_PATH_NM): Handle user-specified NM with - options, including options containing paths. - -2022-03-25 Alan Modra - - Re: gas/Dwarf: improve debug info generation from .irp and alike blocks - am33_2.0-linux is a mn10300 target. - - * testsuite/gas/elf/dwarf-5-irp.d: xfail am33. - -2022-03-25 GDB Administrator - - Automatic date update in version.in - -2022-03-24 Aaron Merey - - Remove download size from debuginfod progress messages if unavailable - Currently debuginfod progress update messages include the size of - each download: - - Downloading 7.5 MB separate debug info for /lib/libxyz.so.0 - - This value originates from the Content-Length HTTP header of the - transfer. However this header is not guaranteed to be present for - each download. This can happen when debuginfod servers compress files - on-the-fly at the time of transfer. In this case gdb wrongly prints - "-0.00 MB" as the size. - - This patch removes download sizes from progress messages when they are - not available. It also removes usage of the progress bar until - a more thorough reworking of progress updating is implemented. [1] - - [1] https://sourceware.org/pipermail/gdb-patches/2022-February/185798.html - -2022-03-24 Reuben Thomas - - sim: fix a comment typo in sim-load.c - Fix a typo where the documentation refers to a function parameter by the - wrong name. - - Change-Id: I99494efe62cd4aa76fb78a0bd5da438d35740ebe - -2022-03-24 Reuben Thomas - - sim: fix “alligned” typos - Change-Id: Ifd574e38524dd4f1cf0fc003e0c5c7499abc84a0 - -2022-03-24 Jan Beulich - - x86: mention dropped L1OM/K1OM support in ld/ as well - This amends e961c696dcb2 ("x86: drop L1OM/K1OM support from ld"). Also - remove the marker that I mistakenly added in c085ab00c7b2 ("x86: drop - L1OM/K1OM support from gas"). - -2022-03-24 Simon Marchi - - gdb/testsuite: remove gdb.python/pretty-print-call-by-hand.exp - This test was added without a corresponding fix, with some setup_kfails. - However, it results in UNRESOLVED results when GDB is built with ASan. - - ERROR: GDB process no longer exists - GDB process exited with wait status 1946871 exp7 0 1 - UNRESOLVED: gdb.python/pretty-print-call-by-hand.exp: frame print: backtrace test (PRMS gdb/28856) - - Remove the test from the tree, I'll attach it to the Bugzilla bug - instead [1]. - - [1] https://sourceware.org/bugzilla/show_bug.cgi?id=28856 - - Change-Id: Id95d8949fb8742874bd12aeac758aa4d7564d678 - -2022-03-24 Jan Beulich - - x86: drop L1OM/K1OM support from ld - This was only rudimentary support anyway; none of the sub-architecture - specific insns were ever supported. - - x86: drop L1OM special case from disassembler - There wasn't any real support anyway: None of the sub-architecture - specific insns were ever supported. - -2022-03-24 Jan Beulich - - MAINTAINERS: add myself - I much appreciate Nick offering this role to me. Nevertheless there's - still a lot for me to learn here. - - At this occasion also update my email address in the pre-existing, much - more narrow entry. - -2022-03-24 GDB Administrator - - Automatic date update in version.in - -2022-03-23 Andrew Burgess - - gdb/testsuite: address test failures in gdb.mi/mi-multi-commands.exp - The gdb.mi/mi-multi-commands.exp test was added in commit: - - commit d08cbc5d3203118da5583296e49273cf82378042 - Date: Wed Dec 22 12:57:44 2021 +0000 - - gdb: unbuffer all input streams when not using readline - - And then tweaked in commit: - - commit 144459531dd68a1287905079aaa131b777a8cc82 - Date: Mon Feb 7 20:35:58 2022 +0000 - - gdb/testsuite: relax pattern in new gdb.mi/mi-multi-commands.exp test - - The second of these commits was intended to address periodic test - failures that I was seeing, and this change did fix some problems, - but, unfortunately, introduced other issues. - - The problem is that the test relies on sending two commands to GDB in - a single write. As the characters that make these two commands arrive - they are echoed to GDB's console. However, there is a race between - how quickly the characters are echoed and how quickly GDB decides to - act on the incoming commands. - - Usually, both commands are echoed in full before GDB acts on the first - command, but sometimes this is not the case, and GDB can execute the - first command before both commands are fully echoed to the console. - In this case, the output of the first command will be mixed in with - the echoing of the second command. - - This mixing of the command echoing and the first command output is - what was causing failures in the original version of the test. - - The second commit relaxed the expected output pattern a little, but - was still susceptible to failures, so this commit further relaxes the - pattern. - - Now, we look for the first command output with no regard to what is - before, or after the command. Then we look for the first mi prompt to - indicate that the first command has completed. - - I believe that this change should make the test more stable than it - was before. - -2022-03-23 Nick Alcock - - libctf: add LIBCTF_WRITE_FOREIGN_ENDIAN debugging option - libctf has always handled endianness differences by detecting - foreign-endian CTF dicts on the input and endian-flipping them: dicts - are always written in native endianness. This makes endian-awareness - very low overhead, but it means that the foreign-endian code paths - almost never get routinely tested, since "make check" usually reads in - dicts ld has just written out: only a few corrupted-CTF tests are - actually in fixed endianness, and even they only test the foreign- - endian code paths when you run make check on a big-endian machine. - (And the fix is surely not to add more .s-based tests like that, because - they are a nightmare to maintain compared to the C-code-based ones.) - - To improve on this, add a new environment variable, - LIBCTF_WRITE_FOREIGN_ENDIAN, which causes libctf to unconditionally - endian-flip at ctf_write time, so the output is always in the wrong - endianness. This then tests the foreign-endian read paths properly - at open time. - - Make this easier by restructuring the writeout code in ctf-serialize.c, - which duplicates the maybe-gzip-and-write-out code three times (once - for ctf_write_mem, with thresholding, and once each for - ctf_compress_write and ctf_write just so those can avoid thresholding - and/or compression). Instead, have the latter two call the former - with thresholds of 0 or (size_t) -1, respectively. - - The endian-flipping code itself gains a bit of complexity, because - one single endian-flipper (flip_types) was assuming the input to be - in foreign-endian form and assuming it could pull things out of the - input once they had been flipped and make sense of them. At the - cost of a few lines of duplicated initializations, teach it to - read before flipping if we're flipping to foreign-endianness instead - of away from it. - - libctf/ - * ctf-impl.h (ctf_flip_header): No longer static. - (ctf_flip): Likewise. - * ctf-open.c (flip_header): Rename to... - (ctf_flip_header): ... this, now it is not private to one file. - (flip_ctf): Rename... - (ctf_flip): ... this too. Add FOREIGN_ENDIAN arg. - (flip_types): Likewise. Use it. - (ctf_bufopen_internal): Adjust calls. - * ctf-serialize.c (ctf_write_mem): Add flip_endian path via - a newly-allocated bounce buffer. - (ctf_compress_write): Move below ctf_write_mem and reimplement - in terms of it. - (ctf_write): Likewise. - (ctf_gzwrite): Note that this obscure writeout function does not - support endian-flipping. - -2022-03-23 Nick Alcock - - libctf, ld: diagnose corrupted CTF header cth_strlen - The last section in a CTF dict is the string table, at an offset - represented by the cth_stroff header field. Its length is recorded in - the next field, cth_strlen, and the two added together are taken as the - size of the CTF dict. Upon opening a dict, we check that none of the - header offsets exceed this size, and we check when uncompressing a - compressed dict that the result of the uncompression is the same length: - but CTF dicts need not be compressed, and short ones are not. - Uncompressed dicts just use the ctf_size without checking it. This - field is thankfully almost unused: it is mostly used when reserializing - a dict, which can't be done to dicts read off disk since they're - read-only. - - However, when opening an uncompressed foreign-endian dict we have to - copy it out of the mmaped region it is stored in so we can endian- - swap it, and we use ctf_size when doing that. When the cth_strlen is - corrupt, this can overrun. - - Fix this by checking the ctf_size in all uncompressed cases, just as we - already do in the compressed case. Add a new test. - - This came to light because various corrupted-CTF raw-asm tests had an - incorrect cth_strlen: fix all of them so they produce the expected - error again. - - libctf/ - PR libctf/28933 - * ctf-open.c (ctf_bufopen_internal): Always check uncompressed - CTF dict sizes against the section size in case the cth_strlen is - corrupt. - - ld/ - PR libctf/28933 - * testsuite/ld-ctf/diag-strlen-invalid.*: New test, - derived from diag-cttname-invalid.s. - * testsuite/ld-ctf/diag-cttname-invalid.s: Fix incorrect cth_strlen. - * testsuite/ld-ctf/diag-cttname-null.s: Likewise. - * testsuite/ld-ctf/diag-cuname.s: Likewise. - * testsuite/ld-ctf/diag-parlabel.s: Likewise. - * testsuite/ld-ctf/diag-parname.s: Likewise. - -2022-03-23 Nick Alcock - - include, libctf, ld: extend variable section to contain functions too - The CTF variable section is an optional (usually-not-present) section in - the CTF dict which contains name -> type mappings corresponding to data - symbols that are present in the linker input but not in the output - symbol table: the idea is that programs that use their own symbol- - resolution mechanisms can use this section to look up the types of - symbols they have found using their own mechanism. - - Because these removed symbols (mostly static variables, functions, etc) - all have names that are unlikely to appear in the ELF symtab and because - very few programs have their own symbol-resolution mechanisms, a special - linker flag (--ctf-variables) is needed to emit this section. - - Historically, we emitted only removed data symbols into the variable - section. This seemed to make sense at the time, but in hindsight it - really doesn't: functions are symbols too, and a C program can look them - up just like any other type. So extend the variable section so that it - contains all static function symbols too (if it is emitted at all), with - types of kind CTF_K_FUNCTION. - - This is a little fiddly. We relied on compiler assistance for data - symbols: the compiler simply emits all data symbols twice, once into the - symtypetab as an indexed symbol and once into the variable section. - - Rather than wait for a suitably adjusted compiler that does the same for - function symbols, we can pluck unreported function symbols out of the - symtab and add them to the variable section ourselves. While we're at - it, we do the same with data symbols: this is redundant right now - because the compiler does it, but it costs very little time and lets the - compiler drop this kludge and save a little space in .o files. - - include/ - * ctf.h: Mention the new things we can see in the variable - section. - - ld/ - * testsuite/ld-ctf/data-func-conflicted-vars.d: New test. - - libctf/ - * ctf-link.c (ctf_link_deduplicating_variables): Duplicate - symbols into the variable section too. - * ctf-serialize.c (symtypetab_delete_nonstatic_vars): Rename - to... - (symtypetab_delete_nonstatics): ... this. Check the funchash - when pruning redundant variables. - (ctf_symtypetab_sect_sizes): Adjust accordingly. - * NEWS: Describe this change. - -2022-03-23 Nick Alcock - - ld, testsuite: improve CTF-availability test - The test for -gctf support in the compiler is used to determine when to - run the ld-ctf tests and most of those in libctf. Unfortunately, - because it uses check_compiler_available and compile_one_cc, it will - fail whenever the compiler emits anything on stderr, even if it - actually does support CTF perfectly well. - - So, instead, ask the compiler to emit assembler output and grep it for - references to ".ctf": this is highly unlikely to be present if the - compiler does not support CTF. (This will need adjusting when CTF grows - support for non-ELF platforms that don't dot-prepend their section - names, but right now the linker doesn't link CTF on any such platforms - in any case.) - - With this in place we can do things like run all the libctf tests under - leak sanitizers etc even if those spray warnings on simple CTF - compilations, rather than being blocked from doing so just when we would - most like to. - - ld/ - * testsuite/lib/ld-lib.exp (check_ctf_available): detect CTF - even if a CTF-capable compiler emits warnings. - -2022-03-23 Simon Marchi - - gdb/python: remove Python 2/3 compatibility macros - New in this version: - - - Rebase on master, fix a few more issues that appeared. - - python-internal.h contains a number of macros that helped make the code - work with both Python 2 and 3. Remove them and adjust the code to use - the Python 3 functions. - - Change-Id: I99a3d80067fb2d65de4f69f6473ba6ffd16efb2d - -2022-03-23 Simon Marchi - - gdb/python: remove Python 2 support - New in this version: - - - Add a PY_MAJOR_VERSION check in configure.ac / AC_TRY_LIBPYTHON. If - the user passes --with-python=python2, this will cause a configure - failure saying that GDB only supports Python 3. - - Support for Python 2 is a maintenance burden for any patches touching - Python support. Among others, the differences between Python 2 and 3 - string and integer types are subtle. It requires a lot of effort and - thinking to get something that behaves correctly on both. And that's if - the author and reviewer of the patch even remember to test with Python - 2. - - See this thread for an example: - - https://sourceware.org/pipermail/gdb-patches/2021-December/184260.html - - So, remove Python 2 support. Update the documentation to state that GDB - can be built against Python 3 (as opposed to Python 2 or 3). - - Update all the spots that use: - - - sys.version_info - - IS_PY3K - - PY_MAJOR_VERSION - - gdb_py_is_py3k - - ... to only keep the Python 3 portions and drop the use of some - now-removed compatibility macros. - - I did not update the configure script more than just removing the - explicit references to Python 2. We could maybe do more there, like - check the Python version and reject it if that version is not - supported. Otherwise (with this patch), things will only fail at - compile time, so it won't really be clear to the user that they are - trying to use an unsupported Python version. But I'm a bit lost in the - configure code that checks for Python, so I kept that for later. - - Change-Id: I75b0f79c148afbe3c07ac664cfa9cade052c0c62 - -2022-03-23 Jan Beulich - - x86: reject relocations involving registers - To prevent fatal or even internal errors, add a simple check to - i386_validate_fix(), rejecting relocations when their target symbol is - an equate of a register (or resolved to reg_section for any other - reason). - - x86: improve resolution of register equates - Allow transitive (or recursive) equates to work in addition to direct - ones. The only requirements are that - - the equate being straight of a register, i.e. no expressions involved - (albeit I'm afraid something like "%eax + 0" will be viewed as %eax), - - at the point of use there's no forward ref left which cannot be - resolved, yet. - - Revert "PR28977 tc-i386.c internal error in parse_register" - This reverts commit 5fac3f02edacfca458f7eeaaaa33a87e26e0e332, - which was superceeded / replaced by 4faaa10f3fab. - -2022-03-23 Jan Beulich - - x86: don't attempt to resolve equates and alike from i386_parse_name() - PR gas/28977 - - Perhaps right from its introduction in 4d1bb7955a8b it was wrong for - i386_parse_name() to call parse_register(). This being a hook from the - expression parser, it shouldn't be resolving e.g. equated symbols. - That's relevant only for all other callers of parse_register(). - - To compensate, in Intel syntax mode check_register() needs calling; - perhaps not doing so was an oversight right when the function was - introduced. This is necessary in particular to force EVEX encoding when - VRex registers are used (but of course also to reject bad uses of - registers, i.e. fully matching what parse_register() needs it for). - -2022-03-23 Luis Machado - - Update the list of recognized m-profile TAG_CPU_ARCH_* - Check 3 additional variants previously not recognized: - - - TAG_CPU_ARCH_V7E_M - - TAG_CPU_ARCH_V8M_BASE - - TAG_CPU_ARCH_V8M_MAIN - -2022-03-23 Jan Beulich - - gas/Dwarf5: re-use file 0 line string table entry when faking file 0 - No need to emit the same string a 2nd time for file 1 in this case. - - gas/Dwarf5: adjust .debug_line file 0 checking - First of all when a table entry has a NULL filename, the two inner if()s - are better done the other way around: The 2nd doesn't depend on what the - first does. This then renders redundant half of the conditions of the - other if() and clarifies that subsequently only entry 0 is dealt with - (indicating that part of the comment was wrong). Finally for there to be - a usable name in slot 1, files_in_use needs to be larger than 1 and slot - 1's (rather than slot 0's) name needs to be non-NULL. - -2022-03-23 Jan Beulich - - gas/Dwarf5: drop dead code - Commit 3417bfca676f ("GAS: DWARF-5: Ensure that the 0'th entry in the - directory table contains the current... ") added a "dwarf_level < 5" - check to out_dir_and_file_list(). This rendered dead that branch of the - construct, due to the enclosing if()'s "DWARF2_LINE_VERSION >= 5". - Delete that code as well as the corresponding part of the comment. - - While there also drop a redundant "dirs != NULL": "dirs" will always be - non-NULL when dirs_in_use is not zero. - -2022-03-23 Jan Beulich - - gas/Dwarf: improve debug info generation from .irp and alike blocks - Tying the bumping of the logical line number to reading from the - original source file looks wrong: Upon finishing of the processing of an - sb the original values will be restored anyway. Yet without bumping the - line counter uses of .line inside e.g. an .irp construct won't have the - intended effect: Such uses may be necessary to ensure proper debug info - is emitted in particular when switching sections inside the .irp body, - as dwarf2_gen_line_info() would bail without doing anything when it - finds the line number unchanged from what it saw last. - -2022-03-23 Jan Beulich - - ELF32: don't silently truncate relocation addends - At least x86-64's x32 sub-mode and RISC-V's 32-bit mode calculate - addends as 64-bit values, but store them in signed 32-bit fields when - generating the file without encountering any earlier error. When the - relocated field is a 64-bit one, the value resulting after processing - the relocation record when linking (or the latest when loading) may - thus be wrong due to the truncation. - - With the code change in place, one x32 testcase actually triggers the - new diagnostic. That one case of too large a (negative) addend is being - adjusted alongside the addition of a new testcase to actually trigger - the new error. (Note that due to internal BFD behavior the relocation in - .data doesn't get processed anymore after the errors in .text.) - - Note that in principle it is possible to express 64-bit relocations in - ELF32, but this would require .rel relocations, i.e. with the addend - stored in the 64-bit field being relocated. But I guess it would be a - lot of effort for little gain to actually support this. - -2022-03-23 Jan Beulich - - gas: retain whitespace between strings - Macro arguments may be separated by commas or just whitespace. Macro - arguments may also be quoted (where one level of quotes is removed in - the course of determining the values for the respective formal - parameters). Furthermore this quote removal knows _two_ somewhat odd - escaping mechanisms: One, apparently in existence forever, is that a - pair of quotes counts as the escaping of a quote, with the pair being - transformed to a single quote in the course of quote removal. The other - (introduced by c06ae4f232e6) looks more usual on the surface in that it - deals with \" sequences, but it _retains_ the escaping \. Hence only the - former mechanism is suitable when the value to be used by the macro body - is to contain a quote. Yet this results in ambiguity of what "a""b" is - intended to mean; elsewhere (e.g. for .ascii) it represents two - successive string literals. However, in any event is the above different - from "a" "b": I don't think this can be viewed the same as "a""b" when - processing macro arguments. - - Change the scrubber to retain such whitespace, by making the processing - of strings more similar to that of symbols. And indeed this appears to - make sense when taking into account that for quite a while gas has been - supporting quoted symbol names. - - Taking a more general view, however, the change doesn't go quite far - enough. There are further cases where significant whitespace is removed - by the scrubber. The new testcase enumerates a few in its ".if 0" - section. I'm afraid the only way that I see to deal with this would be - to significantly simplify the scrubber, such that it wouldn't do much - more than collapse sequences of unquoted whitespace into a single blank. - To be honest problems in this area aren't really surprising when seeing - that there's hardly any checking of .macro use throughout the testsuite - (and in particular in the [relatively] generic tests under all/). - -2022-03-23 Vladimir Mezentsev - - Only .so files are used in libcollector. Remove the other files. - * libcollector/Makefile.am (install-data-local): Remove the *.la - and *.a libraries. - * libcollector/Makefile.in: Regenerate. - -2022-03-23 Tiezhu Yang - - gdb: testsuite: use gdb_attach to fix jit-elf.exp - If /proc/sys/kernel/yama/ptrace_scope is 1, when execute the following - command without superuser: - - make check-gdb TESTS="gdb.base/jit-elf.exp" - - we can see the following messages in gdb/testsuite/gdb.log: - - (gdb) attach 1650108 - Attaching to program: /home/yangtiezhu/build/gdb/testsuite/outputs/gdb.base/jit-elf/jit-elf-main, process 1650108 - ptrace: Operation not permitted. - (gdb) FAIL: gdb.base/jit-elf.exp: attach: one_jit_test-2: break here 1: attach - - use gdb_attach to fix the above issue, at the same time, the clean_reattach - proc should return a value to indicate whether it worked, and the callers - should return early as well on failure. - -2022-03-23 Tiezhu Yang - - gdb: testsuite: use gdb_attach to fix attach-pie-noexec.exp - If /proc/sys/kernel/yama/ptrace_scope is 1, when execute the following - command without superuser: - - make check-gdb TESTS="gdb.base/attach-pie-noexec.exp" - - we can see the following messages in gdb/testsuite/gdb.log: - - (gdb) attach 6500 - Attaching to process 6500 - ptrace: Operation not permitted. - (gdb) PASS: gdb.base/attach-pie-noexec.exp: attach - - It is obviously wrong, the expected result should be UNSUPPORTED in such - a case. - - With this patch, we can see "Operation not permitted" in the log info, - and then we can do the following processes to test: - (1) set ptrace_scope as 0 - $ echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope - $ make check-gdb TESTS="gdb.base/attach-pie-noexec.exp" - (2) use sudo - $ sudo make check-gdb TESTS="gdb.base/attach-pie-noexec.exp" - -2022-03-23 Tiezhu Yang - - gdb: testsuite: add new gdb_attach to check "attach" command - This commit adds new gdb_attach to centralize the failure checking of - "attach" command. Return 0 if attach failed, otherwise return 1. - -2022-03-23 Tiezhu Yang - - gdb: testsuite: remove attach test from can_spawn_for_attach - As Pedro Alves said, caching procs should not issue pass/fail [1], - this commit removes attach test from can_spawn_for_attach, at the - same time, use "verbose -log" instead of "unsupported" to get a - trace about why a test run doesn't support spawning for attach. - - [1] https://sourceware.org/pipermail/gdb-patches/2022-March/186311.html - -2022-03-23 GDB Administrator - - Automatic date update in version.in - -2022-03-22 John Baldwin - - Add support for hardware breakpoints/watchpoints on FreeBSD/Aarch64. - This shares aarch64-nat.c and nat/aarch64-hw-point.c with the Linux - native target. Since FreeBSD writes all of the debug registers in one - ptrace op, use an unordered_set<> to track the "dirty" state for - threads rather than bitmasks of modified registers. - - fbsd-nat: Add a low_prepare_to_resume virtual method. - This method can be overridden by architecture-specific targets to - perform additional work before a thread is resumed. - -2022-03-22 John Baldwin - - fbsd-nat: Add a low_delete_thread virtual method. - This method can be overridden by architecture-specific targets to - perform additional work when a thread is deleted. - - Note that this method is only invoked on systems supporting LWP - events, but the pending use case (aarch64 debug registers) is not - supported on older kernels that do not support LWP events. - -2022-03-22 John Baldwin - - fbsd-nat: Add helper routine to fetch siginfo_t for a ptid. - -2022-03-22 John Baldwin - - aarch64: Add an aarch64_nat_target mixin class. - This class includes platform-independent target methods for hardware - breakpoints and watchpoints using routines from - nat/aarch64-hw-point.c. - - stopped_data_address is not platform-independent since the FAR - register holding the address for a breakpoint hit must be fetched in a - platform-specific manner. However, aarch64_stopped_data_address is - provided as a helper routine which performs platform-independent - validation given the value of the FAR register. - - For tracking the per-process debug register mirror state, use an - unordered_map indexed by pid as recently adopted in x86-nat.c rather - than a manual linked-list. - -2022-03-22 John Baldwin - - nat: Split out platform-independent aarch64 debug register support. - Move non-Linux-specific support for hardware break/watchpoints from - nat/aarch64-linux-hw-point.c to nat/aarch64-hw-point.c. Changes - beyond a simple split of the code are: - - - aarch64_linux_region_ok_for_watchpoint and - aarch64_linux_any_set_debug_regs_state renamed to drop linux_ as - they are not platform specific. - - - Platforms must implement the aarch64_notify_debug_reg_change - function which is invoked from the platform-independent code when a - debug register changes for a given debug register state. This does - not use the indirection of a 'low' structure as is done for x86. - - - The handling for kernel_supports_any_contiguous_range is not - pristine. For non-Linux it is simply defined to true. Some uses of - this could perhaps be implemented as new 'low' routines for the - various places that check it instead? - - - Pass down ptid into aarch64_handle_breakpoint and - aarch64_handle_watchpoint rather than using current_lwp_ptid which - is only defined on Linux. In addition, pass the ptid on to - aarch64_notify_debug_reg_change instead of the unused state - argument. - -2022-03-22 John Baldwin - - x86-fbsd-nat: Copy debug register state on fork. - Use the FreeBSD native target low_new_fork hook to copy the - per-process debug state from the parent to the child on fork. - - fbsd-nat: Add a low_new_fork virtual method. - This method can be overridden by architecture-specific targets to - perform additional work when a new child process is forked. - -2022-03-22 John Baldwin - - Add an x86_fbsd_nat_target mixin class for FreeBSD x86 native targets. - This class implements debug register support common between the i386 - and amd64 native targets. - - While here, remove #ifdef's for HAVE_PT_GETDBREGS in FreeBSD-specific - code. The ptrace request has been present on FreeBSD x86 - architectures since 4.0 (released in March 2000). The last FreeBSD - release without this support is 3.5 released in June 2000. - -2022-03-22 John Baldwin - - x86-nat: Add x86_lookup_debug_reg_state. - This function returns nullptr if debug register state does not yet - exist for a given process rather than creating new state. - - x86-nat: Use an unordered_map to store per-pid debug reg state. - This replaces a manual linked list which used O(n) lookup and removal. - - Remove USE_SIGTRAP_SIGINFO condition for FreeBSD/x86 debug regs support. - For BSD x86 targets, stopped_by_hw_breakpoint doesn't check siginfo_t - but inspects the DR6 register directly via PT_GETDBREGS. - -2022-03-22 Tom Tromey - - Remove two unused variables - I found a couple of spots that declare a symtab_and_line but don't - actually use it. I think this probably isn't detected as unused - because it has a constructor. - -2022-03-22 Steiner H Gunderson - - Fix return code in _bfd_dwarf2_find_nearest_line(). - * 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-22 Andrew Burgess - - gdb/python: add gdb.format_address function - Add a new function, gdb.format_address, which is a wrapper around - GDB's print_address function. - - This method takes an address, and returns a string with the format: - - ADDRESS - - Where, ADDRESS is the original address, formatted as hexadecimal, - SYMBOL is a symbol with an address lower than ADDRESS, and OFFSET is - the offset from SYMBOL to ADDRESS in decimal. - - If there's no SYMBOL suitably close to ADDRESS then the - part is not included. - - This is useful if a user wants to write a Python script that - pretty-prints addresses, the user no longer needs to do manual symbol - lookup, or worry about correctly formatting addresses. - - Additionally, there are some settings that effect how GDB picks - SYMBOL, and whether the file name and line number should be included - with the SYMBOL name, the gdb.format_address function ensures that the - users Python script also benefits from these settings. - - The gdb.format_address by default selects SYMBOL from the current - inferiors program space, and address is formatted using the - architecture for the current inferior. However, a user can also - explicitly pass a program space and architecture like this: - - gdb.format_address(ADDRESS, PROGRAM_SPACE, ARCHITECTURE) - - In order to format an address for a different inferior. - - Notes on the implementation: - - In py-arch.c I extended arch_object_to_gdbarch to add an assertion for - the type of the PyObject being worked on. Prior to this commit all - uses of arch_object_to_gdbarch were guaranteed to pass this function a - gdb.Architecture object, but, with this commit, this might not be the - case. - - So, with this commit I've made it a requirement that the PyObject be a - gdb.Architecture, and this is checked with the assert. And in order - that callers from other files can check if they have a - gdb.Architecture object, I've added the new function - gdbpy_is_architecture. - - In py-progspace.c I've added two new function, the first - progspace_object_to_program_space, converts a PyObject of type - gdb.Progspace to the associated program_space pointer, and - gdbpy_is_progspace checks if a PyObject is a gdb.Progspace or not. - -2022-03-22 Luis Machado - - Fix some stale header names from dwarf files - Some of these references were not updated when they were moved to a separate - directory. - -2022-03-22 Vladimir Mezentsev - - Install gprofng libraries under $(pkglibdir) - gprofng/ChangeLog - 2022-03-21 Vladimir Mezentsev - - PR gprofng/28972 - * gprofng/libcollector/Makefile.am: Rename lib_LTLIBRARIES to - pkglib_LTLIBRARIES. Add install-data-local. - * gprofng/src/Makefile.am: Likewise. - * gprofng/src/envsets.cc (putenv_libcollector_ld_misc): New location of - the gprofng libraries. - * gprofng/configure.ac: Removed an unused GPROFNG_LIBDIR. - * gprofng/Makefile.am: Removed an unused GPROFNG_LIBDIR. Add - install-data-local. - * gprofng/configure: Regenerate. - * gprofng/Makefile.in: Likewise. - * gprofng/doc/Makefile.in: Likewise. - * gprofng/gp-display-htmllibcollector/Makefile.in: Likewise. - * gprofng/libcollector/Makefile.in: Likewise. - * gprofng/src/Makefile.in: Likewise. - -2022-03-22 GDB Administrator - - Automatic date update in version.in - -2022-03-21 Roland McGrath - - gdb: Add missing #include in solib.h - The gdb_bfd_ref_ptr type is used in solib.h declarations. - -2022-03-21 Aaron Merey - - PR gdb/27570: missing support for debuginfod in core_target::build_file_mappings - Add debuginfod support to core_target::build_file_mappings and - locate_exec_from_corefile_build_id to enable the downloading of - missing executables and shared libraries referenced in core files. - - Also add debuginfod support to solib_map_sections so that previously - downloaded shared libraries can be retrieved from the local debuginfod - cache. - - When core file shared libraries are found locally, verify that their - build-ids match the corresponding build-ids found in the core file. - If there is a mismatch, attempt to query debuginfod for the correct - build and print a warning if unsuccessful: - - warning: Build-id of /lib64/libc.so.6 does not match core file. - - Also disable debuginfod when gcore invokes gdb. Debuginfo is not - needed for core file generation so debuginfod queries will slow down - gcore unnecessarily. - -2022-03-21 Aaron Merey - - gdb: Add soname to build-id mapping for core files - Since commit aa2d5a422 gdb has been able to read executable and shared - library build-ids within core files. - - Expand this functionality so that each core file bfd maintains a map of - soname to build-id for each shared library referenced in the core file. - - This feature may be used to verify that gdb has found the correct shared - libraries for core files and to facilitate downloading shared libaries via - debuginfod. - -2022-03-21 Pedro Alves - - Watchpoint followed by catchpoint misreports watchpoint (PR gdb/28621) - If GDB reports a watchpoint hit, and then the next event is not - TARGET_WAITKIND_STOPPED, but instead some event for which there's a - catchpoint, such that GDB calls bpstat_stop_status, GDB mistakenly - thinks the watchpoint triggered. Vis, using foll-fork.c: - - (gdb) awatch v - Hardware access (read/write) watchpoint 2: v - (gdb) catch fork - Catchpoint 3 (fork) - (gdb) c - Continuing. - - Hardware access (read/write) watchpoint 2: v - - Old value = 0 - New value = 5 - main () at gdb.base/foll-fork.c:16 - 16 pid = fork (); - (gdb) - Continuing. - - Hardware access (read/write) watchpoint 2: v <<<< - <<<< these lines are spurious - Value = 5 <<<< - - Catchpoint 3 (forked process 1712369), arch_fork (ctid=0x7ffff7fa4810) at arch-fork.h:49 - 49 arch-fork.h: No such file or directory. - (gdb) - - The problem is that when we handle the fork event, nothing called - watchpoints_triggered before calling bpstat_stop_status. Thus, each - watchpoint's watchpoint_triggered field was still set to - watch_triggered_yes from the previous (real) watchpoint stop. - watchpoint_triggered is only current called in the handle_signal_stop - path, when handling TARGET_WAITKIND_STOPPED. - - This fixes it by adding watchpoint_triggered calls in the other events - paths that call bpstat_stop_status. But instead of adding them - explicitly, it adds a new function bpstat_stop_status_nowatch that - wraps bpstat_stop_status and calls watchpoint_triggered, and then - replaces most calls to bpstat_stop_status with calls to - bpstat_stop_status_nowatch. - - This required constifying watchpoints_triggered. - - New test included, which fails without the fix. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28621 - - Change-Id: I282b38c2eee428d25319af3bc842f9feafed461c - -2022-03-21 Pedro Alves - - gdbserver: Fixup previous patch - The previous prepare_resume_reply change missed updating the 'buf' - reference that overwrites the 'T', so if 'buf' was advanced, we'd - still overwrite the wrong character. This fixes it. - - Change-Id: Ia8ce433366b85af4e268c1c49e7b447da3130a4d - -2022-03-21 Pedro Alves - - gdbserver: Fix incorrect assertion - While playing with adding a new event kind, I noticed that - prepare_resume_reply TARGET_WAITKIND_FORKED, etc. advance 'buf', so if - we force-disable the T packet, we'd fail the *buf == 'T' assertion. - - Fix it by tweaking the assertion to always look at the beginning of - the buffer. - - Change-Id: I8c38e32353db115edcde418b3b1e8ba12343c22b - -2022-03-21 Simon Marchi - - gdb: re-generate config.in - I'm getting this diff when running `autoreconf -vf`. - - Change-Id: Id5f009d0f0481935c1ee9df5332cb4bf45fbd32d - -2022-03-21 Andrew Burgess - - gdb/x86: handle stap probe arguments in xmm registers - On x86 machines with xmm register, and with recent versions of - systemtap (and gcc?), it can occur that stap probe arguments will be - placed into xmm registers. - - I notice this happening on a current Fedora Rawhide install with the - following package versions installed: - - $ rpm -q glibc systemtap gcc - glibc-2.35.9000-10.fc37.x86_64 - systemtap-4.7~pre16468670g9f253544-1.fc37.x86_64 - gcc-12.0.1-0.12.fc37.x86_64 - - If I check the probe data in libc, I see this: - - $ readelf -n /lib64/libc.so.6 - ... - stapsdt 0x0000004d NT_STAPSDT (SystemTap probe descriptors) - Provider: libc - Name: pthread_start - Location: 0x0000000000090ac3, Base: 0x00000000001c65c4, Semaphore: 0x0000000000000000 - Arguments: 8@%xmm1 8@1600(%rbx) 8@1608(%rbx) - stapsdt 0x00000050 NT_STAPSDT (SystemTap probe descriptors) - Provider: libc - Name: pthread_create - Location: 0x00000000000912f1, Base: 0x00000000001c65c4, Semaphore: 0x0000000000000000 - Arguments: 8@%xmm1 8@%r13 8@8(%rsp) 8@16(%rsp) - ... - - Notice that for both of these probes, the first argument is a uint64_t - stored in the xmm1 register. - - Unfortunately, if I try to use this probe within GDB, then I can't - view the first argument. Here's an example session: - - $ gdb $(which gdb) - (gdb) start - ... - (gdb) info probes stap libc pthread_create - ... - (gdb) break *0x00007ffff729e2f1 # Use address of probe. - (gdb) continue - ... - (gdb) p $_probe_arg0 - Invalid cast. - - What's going wrong? If I re-run my session, but this time use 'set - debug stap-expression 1', this is what I see: - - (gdb) set debug stap-expression 1 - (gdb) p $_probe_arg0 - Operation: UNOP_CAST - Operation: OP_REGISTER - String: xmm1 - Type: uint64_t - Operation: UNOP_CAST - Operation: OP_REGISTER - String: r13 - Type: uint64_t - Operation: UNOP_CAST - Operation: UNOP_IND - Operation: UNOP_CAST - Operation: BINOP_ADD - Operation: OP_LONG - Type: long - Constant: 0x0000000000000008 - Operation: OP_REGISTER - String: rsp - Type: uint64_t * - Type: uint64_t - Operation: UNOP_CAST - Operation: UNOP_IND - Operation: UNOP_CAST - Operation: BINOP_ADD - Operation: OP_LONG - Type: long - Constant: 0x0000000000000010 - Operation: OP_REGISTER - String: rsp - Type: uint64_t * - Type: uint64_t - Invalid cast. - (gdb) - - The important bit is this: - - Operation: UNOP_CAST - Operation: OP_REGISTER - String: xmm1 - Type: uint64_t - - Which is where we cast the xmm1 register to uint64_t. And the final - piece of the puzzle is: - - (gdb) ptype $xmm1 - type = union vec128 { - v8bf16 v8_bfloat16; - v4f v4_float; - v2d v2_double; - v16i8 v16_int8; - v8i16 v8_int16; - v4i32 v4_int32; - v2i64 v2_int64; - uint128_t uint128; - } - - So, we are attempting to cast a union type to a scalar type, which is - not supporting in C/C++, and as a consequence GDB's expression - evaluator throws an error when we attempt to do this. - - The first approach I considered for solving this problem was to try - and make use of gdbarch_stap_adjust_register. We already have a - gdbarch method (gdbarch_stap_adjust_register) that allows us to tweak - the name of the register that we access. Currently only x86 - architectures use this to transform things like ax to eax in some - cases. - - I wondered, what if we change gdbarch_stap_adjust_register to do more - than just change the register names? What if this method instead - became gdbarch_stap_read_register. This new method would return a - operation_up, and would take the register name, and the type we are - trying to read from the register, and return the operation that - actually reads the register. - - The default implementation of this method would just use - user_reg_map_name_to_regnum, and then create a register_operation, - like we already do in stap_parse_register_operand. But, for x86 - architectures this method would fist possibly adjust the register - name, then do the default action to read the register. Finally, for - x86 this method would spot when we were accessing an xmm register, - and, based on the type being pulled from the register, would extract - the correct field from the union. - - The benefit of this approach is that it would work with the expression - types that GDB currently supports. The draw back would be that this - approach would not be very generic. We'd need code to handle each - sub-field size with an xmm register. If other architectures started - using vector registers for probe arguments, those architectures would - have to create their own gdbarch_stap_read_register method. And - finally, the type of the xmm registers comes from the type defined in - the target description, there's a risk that GDB might end up - hard-coding the names of type sub-fields, then if a target uses a - different target description, with different field names for xmm - registers, the stap probes would stop working. - - And so, based on all the above draw backs, I rejected this first - approach. - - My second plan involves adding a new expression type to GDB called - unop_extract_operation. This new expression takes a value and a type, - during evaluation the value contents are fetched, and then a new value - is extracted from the value contents (based on type). This is similar - to the following C expression: - - result_value = *((output_type *) &input_value); - - Obviously we can't actually build this expression in this case, as the - input_value is in a register, but hopefully the above makes it clearer - what I'm trying to do. - - The benefit of the new expression approach is that this code can be - shared across all architectures, and it doesn't care about sub-field - names within the union type. - - The draw-backs that I see are potential future problems if arguments - are not stored within the least significant bytes of the register. - However if/when that becomes an issue we can adapt the - gdbarch_stap_read_register approach to allow architectures to control - how a value is extracted. - - For testing, I've extended the existing gdb.base/stap-probe.exp test - to include a function that tries to force an argument into an xmm - register. Obviously, that will only work on a x86 target, so I've - guarded the new function with an appropriate GCC define. In the exp - script we use readelf to check if the probe exists, and is using the - xmm register. - - If the probe doesn't exist then the associated tests are skipped. - - If the probe exists, put isn't using the xmm register (which will - depend on systemtap/gcc versions), then again, the tests are skipped. - - Otherwise, we can run the test. I think the cost of running readelf - is pretty low, so I don't feel too bad making all the non-xmm targets - running this step. - - I found that on a Fedora 35 install, with these packages installed, I - was able to run this test and have the probe argument be placed in an - xmm register: - - $ rpm -q systemtap gcc glibc - systemtap-4.6-4.fc35.x86_64 - gcc-11.2.1-9.fc35.x86_64 - glibc-2.34-7.fc35.x86_64 - - Finally, as this patch adds a new operation type, then I need to - consider how to generate an agent expression for the new operation - type. - - I have kicked the can down the road a bit on this. In the function - stap_parse_register_operand, I only create a unop_extract_operation in - the case where the register type is non-scalar, this means that in - most cases I don't need to worry about generating an agent expression - at all. - - In the xmm register case, when an unop_extract_operation will be - created, I have sketched out how the agent expression could be - handled, however, this code is currently not reached. When we try to - generate the agent expression to place the xmm register on the stack, - GDB hits this error: - - (gdb) trace -probe-stap test:xmmreg - Tracepoint 1 at 0x401166 - (gdb) actions - Enter actions for tracepoint 1, one per line. - End with a line saying just "end". - >collect $_probe_arg0 - Value not scalar: cannot be an rvalue. - - This is because GDB doesn't currently support placing non-scalar types - on the agent expression evaluation stack. Solving this is clearly - related to the original problem, but feels a bit like a second - problem. I'd like to get feedback on whether my approach to solving - the original problem is acceptable or not before I start looking at - how to handle xmm registers within agent expressions. - -2022-03-21 Steiner H Gunderson - - Reduce O(n2) performance overhead when parsing DWARF unit information. - 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-21 Jan Beulich - - x86: don't suppress overflow diagnostics in x32 mode - Unlike in 64-bit mode, where values wrap at the 64-bit boundary anyway, - there's no wrapping at the 32-bit boundary here, and hence overflow - detection shouldn't be suppressed just because rela relocations are - going to be used. - - The extra check against NO_RELOC is actually a result of an ilp32 test - otherwise failing. But thinking about it, reporting overflows for - not-really-relocations (typically because of earlier errors) makes - little sense in general. Perhaps this should even be extended to non- - 64-bit modes. - -2022-03-21 Simon Marchi - - gdb/testsuite: reformat gdb.python/pretty-print-call-by-hand.py - Run black on the file. - - Change-Id: Ifb576137fb7158a0227173f61c1202f0695b3685 - -2022-03-21 Bruno Larsen - - [gdb/testsuite] test a function call by hand from pretty printer - The test case added here is testing the bug gdb/28856, where calling a - function by hand from a pretty printer makes GDB crash. There are 6 - mechanisms to trigger this crash in the current test, using the commands - backtrace, up, down, finish, step and continue. Since the failure happens - because of use-after-free (more details below) the tests will always - have a chance of passing through sheer luck, but anecdotally they seem - to fail all of the time. - - The reason GDB is crashing is a use-after-free problem. The above - mentioned functions save a pointer to the current frame's information, - then calls the pretty printer, and uses the saved pointer for different - reasons, depending on the function. The issue happens because - call_function_by_hand needs to reset the obstack to get the current - frame, invalidating the saved pointer. - -2022-03-21 Pedro Alves - - gdb/testsuite: Installed-GDB testing & data-directory - In testsuite/README, we suggest that you can run the testsuite against - some other GDB binary by using: - - make check RUNTESTFLAGS=GDB=/usr/bin/gdb - - However, that example isn't fully correct, because with that command - line, the testsuite will still pass - - -data-directory=[pwd]/../data-directory - - to /usr/bin/gdb, like e.g.: - - ... - builtin_spawn /usr/bin/gdb -nw -nx -data-directory /home/pedro/gdb/build/gdb/testsuite/../data-directory -iex set height 0 -iex set width 0 - ... - - while if you're testing an installed GDB (the system GDB being the - most usual scenario), then you should normally let it use its own - configured directory, not the just-built GDB's data directory. - - This commit improves the status quo with the following two changes: - - - if the user specifies GDB on the command line, then by default, - don't start GDB with the -data-directory command line option. - I.e., let the tested GDB use its own configured data directory. - - - let the user override the data directory, via a new - GDB_DATA_DIRECTORY global. This replaces the existing - BUILD_DATA_DIRECTORY variable in testsuite/lib/gdb.exp, which - wasn't overridable, and was a bit misnamed for the new purpose. - - So after this, the following commands I believe behave intuitively: - - # Test the non-installed GDB in some build dir: - - make check \ - RUNTESTFLAGS="GDB=/path/to/other/build/gdb \ - GDB_DATA_DIRECTORY=/path/to/other/build/gdb/data-directory" - - # Test the GDB installed in some prefix: - - make check \ - RUNTESTFLAGS="GDB=/opt/gdb/bin/gdb" - - # Test the built GDB with some alternative data directory, e.g., the - system GDB's data directory: - - make check \ - RUNTESTFLAGS="GDB_DATA_DIRECTORY=/usr/share/gdb" - - Change-Id: Icdc21c85219155d9564a9900961997e6624b78fb - -2022-03-21 Nick Clifton - - z80 assembler: Fix new unexpected overflow warning in v2.37 - 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-03-21 Andreas Schwab - - Add support for readline 8.2 - In readline 8.2 the type of rl_completer_word_break_characters changed to - include const. - -2022-03-21 GDB Administrator - - Automatic date update in version.in - -2022-03-20 Andreas Schwab - - RISC-V: Fix misplaced @end table - Move the csr-check and arch items inside the table for the .option directive. - -2022-03-20 Alan Modra - - PR28979, internal error in demand_empty_rest_of_line - The change in read_a_source_file prevents the particular testcase in - the PR from triggering the assertion in demand_empty_rest_of_line. - I've also removed the assertion. Nothing much goes wrong with gas if - something else triggers it, so it's not worthy of an abort. - - I've also changed my previous patch to ignore_rest_of_line to allow - that function to increment input_line_pointer past buffer_limit, like - demand_empty_rest_of_line: The two functions ought to behave the - same in that respect. Finally, demand_empty_rest_of_line gets a - little hardening to prevent accesses past buffer_limit plus one. - - PR 28979 - * read.c (read_a_source_file): Calculate known size for sbuf - rather than calling strlen. - (demand_empty_rest_of_line): Remove "know" check. Expand comment. - Don't dereference input_line_pointer when past buffer_limit. - (ignore_rest_of_line): Allow input_line_pointer to increment to - buffer_limit plus one. Expand comment. - -2022-03-20 Joel Brobecker - - Update gdb/NEWS after GDB 12 branch creation. - This commit a new section for the next release branch, and renames - the section of the current branch, now that it has been cut. - -2022-03-20 Joel Brobecker - - Bump version to 13.0.50.DATE-git. - Now that the GDB 12 branch has been created, - this commit bumps the version number in gdb/version.in to - 13.0.50.DATE-git - - For the record, the GDB 12 branch was created - from commit 2be64de603f8b3ae359d2d3fbf5db0e79869f32b. - - Also, as a result of the version bump, the following changes - have been made in gdb/testsuite: - - * gdb.base/default.exp: Change $_gdb_major to 13. - -2022-03-20 liuzhensong - - ld:LoongArch: Add test cases to adapt to LoongArch32 and LoongArch64 - ld/testsuite/ld-loongarch-elf - - * ld-loongarch-elf.exp: Test LoongArch32 and LoongArch64 testcases respectively. - * jmp_op.d: Fix bug in test LoongArch32. - * disas-jirl-32.d: New test case for LoongArch32. - * disas-jirl-32.s: New test case for LoongArch32. - * disas-jirl.d: Skip test case LoongArch32. - * macro_op_32.d: New test case for LoongArch32. - * macro_op_32.s: New test case for LoongArch32. - * macro_op.d: Skip test case LoongArch32. - -2022-03-20 liuzhensong - - gas:LoongArch: Fix "make check" pr21884 fail in LoongArch32. - gas/config/ - * tc-loongarch.c: Add function to select target mach. - * tc-loongarch.h: Define macro TARGET_MACH. - - ld: loongarch: Skip unsupport test cases. - ld/testsuite/ld-elf/ - * eh5.d Skip loongarch64 target. - * pr21884.d Skip loongarch* targets. - * pr26936.d Skip loongarch* targets. - -2022-03-20 liuzhensong - - LoongArch: Fix LD check fails. - Some test cases about ifunc. - - bfd/ - * elfnn-loongarch.c - * elfxx-loongarch.h - - === ld Summary === - of expected passes 1430 - of expected failures 11 - of untested testcases 1 - of unsupported tests 154 - -2022-03-20 liuzhensong - - LoongArch: Update ABI eflag in elf header. - Update LoongArch ABI eflag in elf header. - ilp32s 0x5 - ilp32f 0x6 - ilp32d 0x7 - lp64s 0x1 - lp64f 0x2 - lp64d 0x3 - - bfd/ - * elfnn-loongarch.c Check object flags while ld. - - gas/ - * tc-loongarch.c Write eflag to elf header. - - include/elf - * loongarch.h Define ABI number. - -2022-03-20 liuzhensong - - gas:LoongArch: Fix wrong line number in .debug_line - The dwarf2_emit_insn() can create debuginfo of line. But it is called - too late in append_fixp_and_insn. It causes extra offs when debuginfo - of line sets address. - - gas/config/ - * tc-loongarch.c - -2022-03-20 liuzhensong - - gas:LoongArch: Fix segment error in compilation due to too long symbol name. - Change "char buffer[8192];" into "char *buffer = - (char *) malloc(1000 + 6 * len_str);" in function - loongarch_expand_macro_with_format_map. - - gas/ - * config/tc-loongarch.c - - include/ - * opcode/loongarch.h - - opcodes/ - * loongarch-coder.c - -2022-03-20 liuzhensong - - LoongArch: Use functions instead of magic numbers. - Replace the magic numbers in gas(tc-loongarch.c) and - bfd(elfnn-loongarch.c) with the functions defined in - the howto table(elfxx-loongarch.c). - - gas/ - * config/tc-loongarch.c: use functions. - - bfd/ - * elfnn-loongarch.c: use functions. - * elfxx-loongarch.c: define functions. - * elfxx-loongarch.h - -2022-03-20 liuzhensong - - ubsan: loongarch : signed integer shift overflow. - opcodes/ - * loongarch-coder.c : - int32_t ret = 0; - ret <<= sizeof (ret) * 8 - len; - ret >>= sizeof (ret) * 8 - len; - ... - Avoid ubsan warning. - -2022-03-20 GDB Administrator - - Automatic date update in version.in - -2022-03-19 Simon Marchi - - gdb/python: remove gdb._mi_commands dict - The motivation for this patch is the fact that py-micmd.c doesn't build - with Python 2, due to PyDict_GetItemWithError being a Python 3-only - function: - - CXX python/py-micmd.o - /home/smarchi/src/binutils-gdb/gdb/python/py-micmd.c: In function ‘int micmdpy_uninstall_command(micmdpy_object*)’: - /home/smarchi/src/binutils-gdb/gdb/python/py-micmd.c:430:20: error: ‘PyDict_GetItemWithError’ was not declared in this scope; did you mean ‘PyDict_GetItemString’? - 430 | PyObject *curr = PyDict_GetItemWithError (mi_cmd_dict.get (), - | ^~~~~~~~~~~~~~~~~~~~~~~ - | PyDict_GetItemString - - A first solution to fix this would be to try to replace - PyDict_GetItemWithError equivalent Python 2 code. But I looked at why - we are doing this in the first place: it is to maintain the - `gdb._mi_commands` Python dictionary that we use as a `name -> - gdb.MICommand object` map. Since the `gdb._mi_commands` dictionary is - never actually used in Python, it seems like a lot of trouble to use a - Python object for this. - - My first idea was to replace it with a C++ map - (std::unordered_map>). While - implementing this, I realized we don't really need this map at all. The - mi_command_py objects registered in the main MI command table can own - their backing micmdpy_object (that's a gdb.MICommand, but seen from the - C++ code). To know whether an mi_command is an mi_command_py, we can - use a dynamic cast. Since there's one less data structure to maintain, - there are less chances of messing things up. - - - Change mi_command_py::m_pyobj to a gdbpy_ref, the mi_command_py is - now what keeps the MICommand alive. - - Set micmdpy_object::mi_command in the constructor of mi_command_py. - If mi_command_py manages setting/clearing that field in - swap_python_object, I think it makes sense that it also takes care of - setting it initially. - - Move a bunch of checks from micmdpy_install_command to - swap_python_object, and make them gdb_asserts. - - In micmdpy_install_command, start by doing an mi_cmd_lookup. This is - needed to know whether there's a Python MI command already registered - with that name. But we can already tell if there's a non-Python - command registered with that name. Return an error if that happens, - rather than waiting for insert_mi_cmd_entry to fail. Change the - error message to "name is already in use" rather than "may already be - in use", since it's more precise. - - I asked Andrew about the original intent of using a Python dictionary - object to hold the command objects. The reason was to make sure the - objects get destroyed when the Python runtime gets finalized, not later. - Holding the objects in global C++ data structures and not doing anything - more means that the held Python objects will be decref'd after the - Python interpreter has been finalized. That's not desirable. I tried - it and it indeed segfaults. - - Handle this by adding a gdbpy_finalize_micommands function called in - finalize_python. This is the mirror of gdbpy_initialize_micommands - called in do_start_initialization. In there, delete all Python MI - commands. I think it makes sense to do it this way: if it was somehow - possible to unload Python support from GDB in the middle of a session - we'd want to unregister any Python MI command. Otherwise, these MI - commands would be backed with a stale PyObject or simply nothing. - - Delete tests that were related to `gdb._mi_commands`. - - Co-Authored-By: Andrew Burgess - Change-Id: I060d5ebc7a096c67487998a8a4ca1e8e56f12cd3 - -2022-03-19 GDB Administrator - - Automatic date update in version.in - -2022-03-18 Pedro Alves - - Fix crash with stepi, no debug info, and "set debug infrun 1" - A stepi in a function without debug info with "set debug infrun 1" - crashes GDB since commit c8353d682f69 (gdb/infrun: some extra infrun - debug print statements), due to a reference to - "tp->current_symtab->filename" when tp->current_symtab is null. - - This commit adds the missing null check. The output in this case - becomes: - - [infrun] set_step_info: symtab = , line = 0, step_frame_id = {stack=0x7fffffffd980,code=0x0000000000456c30,!special}, step_stack_frame_id = {stack=0x7fffffffd980,code=0x0000000000456c30,!special} - - Change-Id: I5171a9d222bc7e15b9dba2feaba7d55c7acd99f8 - -2022-03-18 Tom Tromey - - Implement gdbarch_stack_frame_destroyed_p for aarch64 - The internal AdaCore testsuite has a test that checks that an - out-of-scope watchpoint is deleted. This fails on some aarch64 - configurations, reporting an extra stop: - - (gdb) continue - Continuing. - - Thread 3 hit Watchpoint 2: result - - Old value = 64 - New value = 0 - 0x0000000040021648 in pck.get_val (seed=0, off_by_one=false) at [...]/pck.adb:13 - 13 end Get_Val; - - I believe what is happening here is that the variable is stored at: - - DW_AT_location : 2 byte block: 91 7c (DW_OP_fbreg: -4) - - and the extra stop is reported just before a return, when the ldp - instruction is executed: - - 0x0000000040021644 <+204>: ldp x29, x30, [sp], #48 - 0x0000000040021648 <+208>: ret - - This instruction modifies the frame base calculation, and so the test - picks up whatever memory is pointed to in the callee frame. - - Implementing the gdbarch hook gdbarch_stack_frame_destroyed_p fixes - this problem. - - As usual with this sort of patch, it has passed internal testing, but - I don't have a good way to try it with dejagnu. So, I don't know - whether some existing test covers this. I suspect there must be one, - but it's also worth noting that this test passes for aarch64 in some - configurations -- I don't know what causes one to fail and another to - succeed. - -2022-03-18 Nick Clifton - - Fix Build issues due to patch "gprofng: a new GNU profiler" - Find and fix more places where clock_gettime() and CLOCK_MONOTONIC_RAW are used. - -2022-03-18 Simon Marchi - - gdb: run black to format some Python files - Seems like some leftovers from previous commits. - - Change-Id: I7155ccdf7a4fef83bcb3d60320252c3628efdb83 - -2022-03-18 Viorel Preoteasa - - Fix ld-arm bug in encoding of blx calls jumping from thumb to arm instructions - PR 28924 - * elf32-arm.c (THM_MAX_FWD_BRANCH_OFFSET): Fix definition. - (THM2_MAX_FWD_BRANCH_OFFSET): Likewise. - -2022-03-18 Jan Beulich - - x86: also fold remaining multi-vector-size shift insns - By slightly relaxing the checking in operand_type_register_match() we - can fold the vector shift insns with an XMM source as well. While - strictly speaking an overlap in just one size (see the code comment) is - not enough (both operands could have multiple sizes with just a single - common one), this is good enough for all templates we have, or which - could sensibly / usefully appear (within the scope of the present - operand matching model). - - Tightening this a little would be possible, but would require broadcast - related information to be passed into the function. - -2022-03-18 Jan Beulich - - x86: drop stray CheckRegSize from VEXTRACT{F,I}32X4 - They have only a single operand allowing multiple sizes, hence there are - no pairs of operands to check for consistent size. - - x86: fold certain AVX2 templates into their AVX counterparts - Like for AVX512VL we can make the handling of operand sizes a little - more flexible to allow reducing the number of templates we have. - -2022-03-18 Tsukasa OI - - RISC-V: Cache management instructions - This commit adds 'Zicbom' / 'Zicboz' instructions. - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_multi_subset_supports): Add handling for - new instruction classes. - - include/ChangeLog: - - * opcode/riscv-opc.h (MATCH_CBO_CLEAN, MASK_CBO_CLEAN, - MATCH_CBO_FLUSH, MASK_CBO_FLUSH, MATCH_CBO_INVAL, - MASK_CBO_INVAL, MATCH_CBO_ZERO, MASK_CBO_ZERO): New macros. - * opcode/riscv.h (enum riscv_insn_class): Add new instruction - classes INSN_CLASS_ZICBOM and INSN_CLASS_ZICBOZ. - - opcodes/ChangeLog: - - * riscv-opc.c (riscv_opcodes): Add cache-block management - instructions. - -2022-03-18 Tsukasa OI - - RISC-V: Prefetch hint instructions and operand set - This commit adds 'Zicbop' hint instructions. - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_multi_subset_supports): Add handling for - new instruction class. - - gas/ChangeLog: - - * config/tc-riscv.c (riscv_ip): Add handling for new operand - type 'f' (32-byte aligned pseudo S-type immediate for prefetch - hints). - (validate_riscv_insn): Likewise. - - include/ChangeLog: - - * opcode/riscv-opc.h (MATCH_PREFETCH_I, MASK_PREFETCH_I, - MATCH_PREFETCH_R, MASK_PREFETCH_R, MATCH_PREFETCH_W, - MASK_PREFETCH_W): New macros. - * opcode/riscv.h (enum riscv_insn_class): Add new instruction - class INSN_CLASS_ZICBOP. - - opcodes/ChangeLog: - - * riscv-dis.c (print_insn_args): Add handling for new operand - type. - * riscv-opc.c (riscv_opcodes): Add prefetch hint instructions. - -2022-03-18 Alan Modra - - PR28977 tc-i386.c internal error in parse_register - PR 28977 - * config/tc-i386.c (parse_register): Handle X_op not O_register - as for a non-reg_section symbol. Simplify array bounds check. - -2022-03-18 Alan Modra - - Tidy gas current_frame before exit - Releases some obstack memory on an error path. - - * cond.c (cond_finish_check): Call cond_exit_macro. - -2022-03-18 Alan Modra - - ubsan: logical_input_line signed integer overflow - To avoid a completely useless fuzzing ubsan "bug" report, I decided to - make logical_input_line unsigned. - - * input-scrub.c (logical_input_line): Make unsigned. - (struct input_save): Here too. - (input_scrub_reinit, input_scrub_close, bump_line_counters), - (as_where): Adjust to suit. - -2022-03-18 GDB Administrator - - Automatic date update in version.in - -2022-03-17 H.J. Lu - - gprofng: Skip jsynprog with a broken javac - On CET enabled Linux/x86-64 machines, one can get - - $ javac simple.java - Error: dl failure on line 894 - Error: failed /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-6.fc35.x86_64/jre/lib/amd64/server/libjvm.so, because /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-6.fc35.x86_64/jre/lib/amd64/server/libjvm.so: rebuild shared object with SHSTK support enabled - - Set GPROFNG_BROKEN_JAVAC to "yes" only with a broken javac and skip the - jsynprog test with a broken javac. - - PR gprofng/28965 - * Makefile.am (GPROFNG_BROKEN_JAVAC): New. - (check-DEJAGNU): Pass GPROFNG_BROKEN_JAVAC to runtest. - * configure.ac (GPROFNG_BROKEN_JAVAC): New AC_SUBST. Set to yes - with a broken javac. - * Makefile.in: Regenerate. - * configure: Likewise. - * testsuite/gprofng.display/display.exp: Skip jsynprog with a - broken javac. - -2022-03-17 John Baldwin - - Remove fall throughs in core_target::xfer_partial. - The cases for TARGET_OBJECT_LIBRARIES and TARGET_OBJECT_LIBRARIES_AIX - can try to fetch different data objects (such as - TARGET_OBJECT_SIGNAL_INFO) if gdbarch methods for the requested data - aren't present. Return with TARGET_XFER_E_IO if the gdbarch method - isn't present instead. - -2022-03-17 Pedro Alves - - gdb: Remove support for S+core - GCC removed support for score back in 2014 already. Back then, we - basically agreed about removing it from GDB too, but it ended up being - forgotten. See: - - https://sourceware.org/pipermail/gdb/2014-October/044643.html - - Following through this time around. - - Change-Id: I5b25a1ff7bce7b150d6f90f4c34047fae4b1f8b4 - -2022-03-17 Tom Tromey - - Add another test for Ada Wide_Wide_String - In an earlier patch, I had written that I wanted to add this test: - - ptype Wide_Wide_String'("literal") - - ... but that it failed with the distro GNAT. Further investigation - showed that it could be made to work by adding a function using - Wide_Wide_String to the program -- this caused the type to end up in - the debug info. - - This patch adds the test. I'm checking this in. - -2022-03-17 Alan Modra - - ubsan: Null dereference in parse_module - * vms-alpha.c (parse_module): Sanity check that DST__K_RTNBEG - has set module->func_table for DST__K_RTNEND. Check return - of bfd_zalloc. - -2022-03-17 Alan Modra - - asan: Buffer overflow in evax_bfd_print_dst - With "name" a char*, the length at name[0] might be negative, escaping - buffer limit checks. - - * vms-alpha.c (evax_bfd_print_dst): Make name an unsigned char*. - (evax_bfd_print_emh): Likewise. - -2022-03-17 Alan Modra - - asan: Buffer overflow in som_set_reloc_info - * som.c (som_set_reloc_info): Add symcount parameter. Don't - access symbols past symcount. Don't access fixup past end_fixups. - (som_slurp_reloc_table): Adjust som_set_reloc_info calls. - -2022-03-17 Alan Modra - - asan: use of uninitialized value in buffer_and_nest - More occurences of the same as commit d12b8d620c6a. - - * macro.c (buffer_and_nest): Sanity check length in buffer - before calling strncasecmp. - -2022-03-17 Alan Modra - - gprofng configure target tests - ${target} in configure.ac should be the canonical target, so that for - example, someone configuring with --target=x86_64-linux will match - x86_64-*-linux*. - - * configure.ac: Invoke AC_CANONICAL_TARGET. - * libcollector/configure.ac: Likewise. - * Makefile.in: Regenerate. - * configure: Regenerate. - * doc/Makefile.in: Regenerate. - * gp-display-html/Makefile.in: Regenerate. - * libcollector/Makefile.in: Regenerate. - * libcollector/configure: Regenerate. - * src/Makefile.in: Regenerate. - -2022-03-17 Alan Modra - - Re: asan: buffer overflow in peXXigen.c - In the process of fixing a buffer overflow in commit fe69d4fcf0194a, - I managed to introduce a fairly obvious NULL pointer dereference.. - - * peXXigen.c (_bfd_XX_bfd_copy_private_bfd_data_common): Don't - segfault on not finding section. Wrap overlong lines. - -2022-03-17 Alan Modra - - asan: buffer overflows after calling ignore_rest_of_line - operand() is not a place that should be calling ignore_rest_of_line. - ignore_rest_of_line shouldn't increment input_line_pointer if already - at buffer limit. - - * expr.c (operand): Don't call ignore_rest_of_line. - * read.c (s_mri_common): Likewise. - (ignore_rest_of_line): Don't increment input_line_pointer if - already at buffer_limit. - -2022-03-17 Alan Modra - - Re: bfd: add AMDGCN architecture - * po/SRC-POTFILES.in: Regenerate. - -2022-03-17 Jan Beulich - - x86: don't accept base architectures as extensions - The -march= intentions are quite clear: A base architecture may be - followed by any number of extensions. Accepting a base architecture in - place of an extension will at best result in confusion, as the first of - the two (or more) items specified simply would not take effect, due to - being overridden by the later one(s). - -2022-03-17 Jan Beulich - - x86: never set i386_cpu_flags' "unused" field - Setting this field risks cpu_flags_all_zero() mistakenly returning - "false" when the object passed in was e.g. the result of ANDing together - two objects which had the bit set, or ANDNing together an object with - the field set and one with the field clear. - - While there also avoid setting CpuNo64: Like Cpu64 this is driven - differently anyway and hence shouldn't be set anywhere by default. - - Note that the moving of the two items in i386-gen.c's cpu_flags[] is - only for documentation purposes (and slight reducing of overhead), as - the fields are sorted anyway upon program start. - -2022-03-17 Jan Beulich - - x86: unify CPU flag on/off processing - There's no need for the arbitrary special "unknown" token: Simply - recognize the leading ~ and process everything else the same, merely - recording whether to set individual fields to 1 or 0. - - While there exclude CpuIAMCU from CPU_UNKNOWN_FLAGS - CPU_IAMCU_FLAGS - override cpu_arch_flags anyway when -march=iamcu is passed, and there's - no reason to have the stray flag set even if no insn actually is keyed - to it. - -2022-03-17 Jan Beulich - - x86: add another IAMCU testcase - Now that {L,K}1OM support is gone, and with it the brokenness in - check_cpu_arch_compatible(), put in place a test making sure that only - extensions can be enabled via .arch for IAMCU, and that the base - architecture cannot be changed. - - x86: drop L1OM/K1OM support from gas - This was only rudimentary support anyway; none of the sub-architecture - specific insns were ever supported. - - x86: assorted IAMCU CPU checking fixes - The checks done by check_cpu_arch_compatible() were halfway sensible - only at the time where only L1OM support was there. The purpose, - however, has always been to prevent bad uses of .arch (turning off the - base CPU "feature" flag) while at the same time permitting extensions to - be enabled / disabled. In order to achieve this (and to prevent - regressions when L1OM and K1OM support are removed) - - set CpuIAMCU in CPU_IAMCU_FLAGS, - - adjust the IAMCU check in the function itself (the other two similarly - broken checks aren't adjusted as they're slated to be removed anyway), - - avoid calling the function for extentions (which would never have the - base "feature" flag set), - - add a new testcase actually exercising ".arch iamcu" (which would also - regress with the planned removal). - -2022-03-17 GDB Administrator - - Automatic date update in version.in - -2022-03-16 Andrew Burgess - - gdb: work around prompt corruption caused by bracketed-paste-mode - In this commit: - - commit b4f26d541aa7224b70d363932e816e6e1a857633 - Date: Tue Mar 2 13:42:37 2021 -0700 - - Import GNU Readline 8.1 - - We imported readline 8.1 into GDB. As a consequence bug PR cli/28833 - was reported. This bug spotted that, when the user terminated GDB by - sending EOF (usually bound to Ctrl+d), the last prompt would become - corrupted. Here's what happens, the user is sat at a prompt like - this: - - (gdb) - - And then the user sends EOF (Ctrl+d), we now see this: - - quit) - ... gdb terminates, and we return to the shell ... - - Notice the 'quit' was printed over the prompt. - - This problem is a result of readline 8.1 enabling bracketed paste mode - by default. This problem is present in readline 8.0 too, but in that - version of readline bracketed paste mode is off by default, so a user - will not see the bug unless they specifically enable the feature. - - Bracketed paste mode is available in readline 7.0 too, but the bug - is not present in this version of readline, see below for why. - - What causes this problem is how readline disables bracketed paste - mode. Bracketed paste mode is a terminal feature that is enabled and - disabled by readline emitting a specific escape sequence. The problem - for GDB is that the escape sequence to disable bracketed paste mode - includes a '\r' character at the end, see this thread for more - details: - - https://lists.gnu.org/archive/html/bug-bash/2018-01/msg00097.html - - The change to add the '\r' character to the escape sequence used to - disable bracketed paste mode was introduced between readline 7.0 and - readline 8.0, this is why the bug would not occur when using older - versions of readline (note: I don't know if its even possible to build - GDB using readline 7.0. That really isn't important, I'm just - documenting the history of this issue). - - So, the escape sequence to disable bracketed paste mode is emitted - from the readline function rl_deprep_terminal, this is called after - the user has entered a complete command and pressed return, or, if the - user sends EOF. - - However, these two cases are slightly different. In the first case, - when the user has entered a command and pressed return, the cursor - will have moved to the next, empty, line, before readline emits the - escape sequence to leave bracketed paste mode. The final '\r' - character moves the cursor back to the beginning of this empty line, - which is harmless. - - For the EOF case though, this is not what happens. Instead, the - escape sequence to leave bracketed paste mode is emitted on the same - line as the prompt. The final '\r' moves the cursor back to the start - of the prompt line. This leaves us ready to override the prompt. - - It is worth noting, that this is not the intended behaviour of - readline, in rl_deprep_terminal, readline should emit a '\n' character - when EOF is seen. However, due to a bug in readline this does not - happen (the _rl_eof_found flag is never set). This is the first - readline bug that effects GDB. - - GDB prints the 'quit' message from command_line_handler (in - event-top.c), this function is called (indirectly) from readline to - process the complete command line, but also in the EOF case (in which - case the command line is set to nullptr). As this is part of the - callback to process a complete command, this is called after readline - has disabled bracketed paste mode (by calling rl_deprep_terminal). - - And so, when bracketed paste mode is in use, rl_deprep_terminal leaves - the cursor at the start of the prompt line (in the EOF case), and - command_line_handler then prints 'quit', which overwrites the prompt. - - The solution to this problem is to print the 'quit' message earlier, - before rl_deprep_terminal is called. This is easy to do by using the - rl_deprep_term_function hook. It is this hook that usually calls - rl_deprep_terminal, however, if we replace this with a new function, - we can print the 'quit' string, and then call rl_deprep_terminal - ourselves. This allows the 'quit' to be printed before - rl_deprep_terminal is called. - - The problem here is that there is no way in rl_deprep_terminal to know - if readline is processing EOF or not, and as a result, we don't know - when we should print 'quit'. This is the second readline bug that - effects GDB. - - Both of these readline issues are discussed in this thread: - - https://lists.gnu.org/archive/html/bug-readline/2022-02/msg00021.html - - The result of that thread was that readline was patched to address - both of these issues. - - Now it should be easy to backport the readline fix to GDB's in tree - copy of readline, and then change GDB to make use of these fixes to - correctly print the 'quit' string. - - However, we are just about to branch GDB 12, and there is concern from - some that changing readline this close to a new release is a risky - idea, see this thread: - - https://sourceware.org/pipermail/gdb-patches/2022-March/186391.html - - So, this commit doesn't change readline at all. Instead, this commit - is the smallest possible GDB change in order to avoid the prompt - corruption. - - In this commit I change GDB to print the 'quit' string on the line - after the prompt, but only when bracketed paste mode is on. This - avoids the overwriting issue, the user sees this: - - (gdb) - quit - ... gdb terminates, and returns to the shell ... - - This isn't ideal, but is better than the existing behaviour. After - GDB 12 has branched, we can backport the readline fix, and apply a - real fix to GDB. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28833 - -2022-03-16 Fangrui Song - - objcopy --weaken-symbol: apply to STB_GNU_UNIQUE symbols - 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 Tom Tromey - - Reimplement array concatenation for Ada and D - This started as a patch to implement string concatenation for Ada. - However, while working on this, I looked at how this code could - possibly be called. It turns out there are only two users of - concat_operation: Ada and D. So, in addition to implementing this for - Ada, this patch rewrites value_concat, removing the odd "concatenate - or repeat" semantics, which were completely unused. As Ada and D both - seem to represent strings using TYPE_CODE_ARRAY, this removes the - TYPE_CODE_STRING code from there as well. - - Remove eval_op_concat - eval_op_concat has code to search for an operator overload of - BINOP_CONCAT. However, the operator overloading code is specific to - C++, which does not have this operator. And, - binop_types_user_defined_p rejects this case right at the start, and - value_x_binop does not handle this case. I think this code has been - dead for a very long time. This patch removes it and hoists the - remaining call into concatenation::evaluate, removing eval_op_concat - entirely. - -2022-03-16 Tom Tromey - - Ada support for wide strings - This adds some basic support for Wide_String and Wide_Wide_String to - the Ada expression evaluator. In particular, a string literal may be - converted to a wide or wide-wide string depending on context. - - The patch updates an existing test case. Note that another test, - namely something like: - - ptype Wide_Wide_String'("literal") - - ... would be nice to add, but when tested against a distro GNAT, this - did not work (probably due to lack of debuginfo); so, I haven't - included it here. - -2022-03-16 Tom Tromey - - Remove eval_op_string - eval_op_string is only used in a single place -- the implementation of - string_operation. This patch turns it into the - string_operation::evaluate method, removing a bit of extraneous code. - -2022-03-16 Carl Love - - Powerpc fix for gdb.base/ending-run.exp - The last two tests in gdb.base/ending-run.exp case fail on Powerpc when the - system does not have the needed glibc debug-info files loaded. In this - case, gdb is not able to determine where execution stopped. This behavior - looks as follows for the test case: - - The next to the last test does a next command when the program is stopped - at the closing bracket for main. The message printed is: - - 0x00007ffff7d01524 in ?? () from /lib/powerpc64le-linux-gnu/libc.so.6 - - which fails to match any of the test_multiple options. - - The test then does another next command. On Powerpc, the - message printed it: - - Cannot find bounds of current function - - The test fails as the output does not match any of the options for the - gdb_test_multiple. - - I checked the behavior on Powerpc to see if this is typical. - I ran gdb on the following simple program as shown below. - - #include - int - main(void) - { - printf("Hello, world!\n"); - return 0; - } - - gdb ./hello_world - - - Type "apropos word" to search for commands related to "word"... - Reading symbols from ./hello_world... - (No debugging symbols found in ./hello_world) - (gdb) break main - Breakpoint 1 at 0x818 - (gdb) r - - Starting program: /home/carll/hello_world - [Thread debugging using libthread_db enabled] - Using host libthread_db library "/lib/powerpc64le-linux-gnu/libthread_db.so.1". - - Breakpoint 1, 0x0000000100000818 in main () - (gdb) n - Single stepping until exit from function main, - which has no line number information. - Hello, world! - 0x00007ffff7d01524 in ?? () from /lib/powerpc64le-linux-gnu/libc.so.6 - (gdb) n - Cannot find bounds of current function - - So it would seem that the messages seen from the test case are - "normal" output for Powerpc when the debug-info is not available. - - The following patch adds the output from Powerpc as an option - to the gdb_test_multiple statement, identifying the output as the expected - output on Powerpc without the needed debug-info files installed. - - The patch has been tested on a Power 10 system and an Intel - 64-bit system. No additional regression failures were seen on - either platform. - -2022-03-16 Martin Storsj? - - dlltool: Use the output name as basis for deterministic temp prefixes - PR 28885 - * dlltool.c (main): use imp_name rather than dll_name when - generating a temporary file name. - -2022-03-16 Jan Vrany - Andrew Burgess - - gdb/mi: consistently notify user when GDB/MI client uses -thread-select - GDB notifies users about user selected thread changes somewhat - inconsistently as mentioned on gdb-patches mailing list here: - - https://sourceware.org/pipermail/gdb-patches/2022-February/185989.html - - Consider GDB debugging a multi-threaded inferior with both CLI and GDB/MI - interfaces connected to separate terminals. - - Assuming inferior is stopped and thread 1 is selected, when a thread - 2 is selected using '-thread-select 2' command on GDB/MI terminal: - - -thread-select 2 - ^done,new-thread-id="2",frame={level="0",addr="0x00005555555551cd",func="child_sub_function",args=[],file="/home/jv/Projects/gdb/users_jv_patches/gdb/testsuite/gdb.mi/user-selected-context-sync.c",fullname="/home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c",line="30",arch="i386:x86-64"} - (gdb) - - and on CLI terminal we get the notification (as expected): - - [Switching to thread 2 (Thread 0x7ffff7daa640 (LWP 389659))] - #0 child_sub_function () at /home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c:30 - 30 volatile int dummy = 0; - - However, now that thread 2 is selected, if thread 1 is selected - using 'thread-select --thread 1 1' command on GDB/MI terminal - terminal: - - -thread-select --thread 1 1 - ^done,new-thread-id="1",frame={level="0",addr="0x0000555555555294",func="main",args=[],file="/home/jv/Projects/gdb/users_jv_patches/gdb/testsuite/gdb.mi/user-selected-context-sync.c",fullname="/home/jv/Projects/gdb/users_jv_patches/gdb/testsuite/gdb.mi/user-selected-context-sync.c",line="66",arch="i386:x86-64"} - (gdb) - - but no notification is printed on CLI terminal, despite the fact - that user selected thread has changed. - - The problem is that when `-thread-select --thread 1 1` is executed - then thread is switched to thread 1 before mi_cmd_thread_select () is - called, therefore the condition "inferior_ptid != previous_ptid" - there does not hold. - - To address this problem, we have to move notification logic up to - mi_cmd_execute () where --thread option is processed and notify - user selected contents observers there if context changes. - - However, this in itself breaks GDB/MI because it would cause context - notification to be sent on MI channel. This is because by the time - we notify, MI notification suppression is already restored (done in - mi_command::invoke(). Therefore we had to lift notification suppression - logic also up to mi_cmd_execute (). This change in made distinction - between mi_command::invoke() and mi_command::do_invoke() unnecessary - as all mi_command::invoke() did (after the change) was to call - do_invoke(). So this patches removes do_invoke() and moves the command - execution logic directly to invoke(). - - With this change, all gdb.mi tests pass, tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=20631 - -2022-03-16 H.J. Lu - - gprofng: Use symver attribute if available - Use symver attribute if available, instead of asm statement, to support - LTO build. - - PR gprof/28962 - * libcollector/dispatcher.c (timer_create@@GLIBC_2.3.3): Use - SYMVER_ATTRIBUTE. - (timer_create@GLIBC_2.2): Likewise. - (timer_create@GLIBC_2.2.5): Likewise. - (pthread_create@@GLIBC_2.1): Likewise. - (pthread_create@GLIBC_2.0): Likewise. - * libcollector/iotrace.c (open64@@GLIBC_2.2): Likewise. - (open64@GLIBC_2.1): Likewise. - (fopen@@GLIBC_2.1): Likewise. - (fopen@GLIBC_2.0): Likewise. - (fclose@@GLIBC_2.1): Likewise. - (fclose@GLIBC_2.0): Likewise. - (fdopen@@GLIBC_2.1): Likewise. - (fdopen@GLIBC_2.0): Likewise. - (pread@@GLIBC_2.2): Likewise. - (pread@GLIBC_2.1): Likewise. - (pwrite@@GLIBC_2.2): Likewise. - (pwrite@GLIBC_2.1): Likewise. - (pwrite64@@GLIBC_2.2): Likewise. - (pwrite64@GLIBC_2.1): Likewise. - (fgetpos@@GLIBC_2.2): Likewise. - (fgetpos@GLIBC_2.0): Likewise. - (fgetpos64@@GLIBC_2.2): Likewise. - (fgetpos64@GLIBC_2.1): Likewise. - (fsetpos@@GLIBC_2.2): Likewise. - (fsetpos@GLIBC_2.0): Likewise. - (fsetpos64@@GLIBC_2.2): Likewise. - (fsetpos64@GLIBC_2.1): Likewise. - * libcollector/linetrace.c (posix_spawn@@GLIBC_2.15): Likewise. - (posix_spawn@GLIBC_2.2): Likewise. - (posix_spawn@GLIBC_2.2.5): Likewise. - (posix_spawnp@@GLIBC_2.15): Likewise. - (posix_spawnp@GLIBC_2.2): Likewise. - (posix_spawnp@GLIBC_2.2.5): Likewise. - (popen@@GLIBC_2.1): Likewise. - (popen@GLIBC_2.0): Likewise. - (_popen@@GLIBC_2.1): Likewise. - (_popen@GLIBC_2.0): Likewise. - * libcollector/mmaptrace.c (dlopen@@GLIBC_2.1): Likewise. - (dlopen@GLIBC_2.0): Likewise. - * libcollector/synctrace.c (pthread_cond_wait@@GLIBC_2.3.2): - Likewise. - (pthread_cond_wait@GLIBC_2.0): Likewise. - (pthread_cond_wait@GLIBC_2.2.5): Likewise. - (pthread_cond_wait@GLIBC_2.2): Likewise. - (pthread_cond_timedwait@@GLIBC_2.3.2): Likewise. - (pthread_cond_timedwait@GLIBC_2.0): Likewise. - (pthread_cond_timedwait@GLIBC_2.2.5): Likewise. - (pthread_cond_timedwait@GLIBC_2.2): Likewise. - (sem_wait@@GLIBC_2.1): Likewise. - (sem_wait@GLIBC_2.0): Likewise. - * src/collector_module.h (SYMVER_ATTRIBUTE): New. - -2022-03-16 H.J. Lu - - gprofng: Don't hardcode -Wno-format-truncation/-Wno-switch - Use -Wno-format-truncation and -Wno-switch only if they are supported. - - PR gprof/28969 - * configure.ac (GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS): New - AC_SUBST for -Wno-format-truncation. - (GPROFNG_NO_SWITCH_CFLAGS): New AC_SUBST for -Wno-switch. - * Makefile.in: Regenerate. - * configure: Likewise. - * src/Makefile.am (AM_CFLAGS): Replace -Wno-format-truncation - and -Wno-switch with GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS and - GPROFNG_NO_SWITCH_CFLAGS. - * src/Makefile.in: Regenerate. - -2022-03-16 H.J. Lu - - gprofng: Don't hardcode -Wno-nonnull-compare - Use -Wno-nonnull-compare only if it is supported. - - PR gprof/28969 - * libcollector/Makefile.am (AM_CFLAGS): Replace - -Wno-nonnull-compare with GPROFNG_NO_NONNULL_COMPARE_CFLAGS. - * libcollector/configure.ac (GPROFNG_NO_NONNULL_COMPARE_CFLAGS): - New AC_SUBST for -Wno-nonnull-compare. - * libcollector/Makefile.in: Regenerate. - * libcollector/aclocal.m4: Likewise. - * libcollector/configure: Likewise. - -2022-03-16 H.J. Lu - - gprofng: Define ATTRIBUTE_FALLTHROUGH - Define ATTRIBUTE_FALLTHROUGH to __attribute__ ((fallthrough)) only for - GCC 7 or above. - - PR gprof/28969 - * common/gp-defs.h (ATTRIBUTE_FALLTHROUGH): New. - * src/gp-collect-app.cc (collect::check_args): Replace - /* FALLTHROUGH */ with ATTRIBUTE_FALLTHROUGH. - -2022-03-16 Simon Marchi - - binutils/readelf: handle AMDGPU relocation types - Make readelf recognize AMDGPU relocation types, as documented here: - - https://llvm.org/docs/AMDGPUUsage.html#amdgpu-relocation-records - - The user-visible change looks like: - - -000000000004 000400000001 unrecognized: 1 0000000000000000 SCRATCH_RSRC_DWORD0 - -00000000000c 000500000001 unrecognized: 1 0000000000000000 SCRATCH_RSRC_DWORD1 - -000000000014 000600000007 unrecognized: 7 0000000000000000 global_var0 - -00000000001c 000700000008 unrecognized: 8 0000000000000000 global_var1 - -000000000024 000800000009 unrecognized: 9 0000000000000000 global_var2 - -00000000002c 00090000000a unrecognized: a 0000000000000000 global_var3 - -000000000034 000a0000000b unrecognized: b 0000000000000000 global_var4 - +000000000004 000400000001 R_AMDGPU_ABS32_LO 0000000000000000 SCRATCH_RSRC_DWORD0 - +00000000000c 000500000001 R_AMDGPU_ABS32_LO 0000000000000000 SCRATCH_RSRC_DWORD1 - +000000000014 000600000007 R_AMDGPU_GOTPCREL 0000000000000000 global_var0 - +00000000001c 000700000008 R_AMDGPU_GOTPCREL 0000000000000000 global_var1 - +000000000024 000800000009 R_AMDGPU_GOTPCREL 0000000000000000 global_var2 - +00000000002c 00090000000a R_AMDGPU_REL32_LO 0000000000000000 global_var3 - +000000000034 000a0000000b R_AMDGPU_REL32_HI 0000000000000000 global_var4 - - binutils/ChangeLog: - - * readelf.c (dump_relocations): Handle EM_AMDGPU. - - include/ChangeLog: - - * elf/amdgpu.h: Add relocation values. - - Change-Id: I2ed4589f4cd37ea11ad2e0cb38d4b682271e1334 - -2022-03-16 Simon Marchi - - binutils/readelf: build against msgpack, dump NT_AMDGPU_METADATA note contents - The AMDGPU HSA OS ABI (code object v3 and above) defines the - NT_AMDGPU_METADATA ELF note [1]. The content is a msgpack object - describing, among other things, the kernels present in the code object - and how to call them. - - I think it would be useful for readelf to be able to display the content - of those notes. msgpack is a structured format, a bit like JSON, except - not text-based. It is therefore possible to dump the contents in - human-readable form without knowledge of the specific layout of the - note. - - Add configury to binutils to optionally check for the msgpack C library - [2]. Add There is a new --with{,out}-msgpack configure flag, and the actual - library lookup is done using pkg-config. - - If msgpack support is enabled, dumping a NT_AMDGPU_METADATA note looks - like: - - $ readelf --notes amdgpu-code-object - Displaying notes found in: .note - Owner Data size Description - AMDGPU 0x0000040d NT_AMDGPU_METADATA (code object metadata) - { - "amdhsa.kernels": [ - { - ".args": [ - { - ".address_space": "global", - ".name": "out.coerce", - ".offset": 0, - ".size": 8, - ".value_kind": "global_buffer", - }, - - - If msgpack support is disabled, dump the contents as hex, as is done - with notes that are not handled in a special way. This allows one to - decode the contents manually (maybe using a command-line msgpack - decoder) if really needed. - - [1] https://llvm.org/docs/AMDGPUUsage.html#code-object-metadata - [2] https://github.com/msgpack/msgpack-c/tree/c_master - - binutils/ChangeLog: - - * 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. - - Change-Id: Ia60a654e620bc32dfdb1bccd845594e2af328b84 - -2022-03-16 Simon Marchi - - binutils/readelf: handle NT_AMDGPU_METADATA note name - Handle the NT_AMDGPU_METADATA note, which is described here: - - https://llvm.org/docs/AMDGPUUsage.html#code-object-v3-note-records - - As of this patch, just print out the name, not the contents, which is in - the msgpack format. - - binutils/ChangeLog: - - * readelf.c (get_amdgpu_elf_note_type): New. - (process_note): Handle "AMDGPU" notes. - - include/ChangeLog: - - * elf/amdgcn.h (NT_AMDGPU_METADATA): New. - - Change-Id: Id2dba2e2aeaa55ef7464fb35aee9c7d5f96ddb23 - -2022-03-16 Simon Marchi - - binutils/readelf: decode AMDGPU-specific e_flags - Decode and print the AMDGPU-specific fields of e_flags, as documented - here: - - https://llvm.org/docs/AMDGPUUsage.html#header - - That is: - - - The specific GPU model - - Whether the xnack and sramecc features are enabled - - The result looks like: - - - Flags: 0x52f - + Flags: 0x52f, gfx906, xnack any, sramecc any - - The flags for the "HSA" OS ABI are properly versioned and documented on - that page. But the NONE, PAL and MESA3D OS ABIs are not well documented - nor versioned. Taking a peek at the LLVM source code, we see that they - encode their flags the same way as HSA v3. For example, for PAL: - - https://github.com/llvm/llvm-project/blob/c8b614cd74a92d85936aed5ac7c642af75ffdc29/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp#L601 - - So for those other OS ABIs, we read them the same as HSA v3. - - binutils/ChangeLog: - - * readelf.c: Include elf/amdgcn.h. - (decode_AMDGPU_machine_flags): New. - (get_machine_flags): Handle flags for EM_AMDGPU machine type. - - include/ChangeLog: - - * elf/amdgcn.h: Add EF_AMDGPU_MACH_AMDGCN_* and - EF_AMDGPU_FEATURE_* defines. - - Change-Id: Ib5b94df7cae0719a22cf4e4fd0629330e9485c12 - -2022-03-16 Simon Marchi - - binutils/readelf: handle AMDGPU OS ABIs - When the machine is EM_AMDGPU, handle the various OS ABIs described - here: - - https://llvm.org/docs/AMDGPUUsage.html#header - - For a binary with the HSA OS ABI, the change looks like: - - - OS/ABI: - + OS/ABI: AMD HSA - - binutils/ChangeLog: - - * readelf.c (get_osabi_name): Handle EM_AMDGPU OS ABIs. - - include/ChangeLog: - - * elf/common.h (ELFOSABI_AMDGPU_PAL, ELFOSABI_AMDGPU_MESA3D): - New. - - Change-Id: I383590c390f7dc2fe0f902f50038735626d71863 - -2022-03-16 Simon Marchi - - opcodes: handle bfd_amdgcn_arch in configure script - There isn't an actual opcodes implementation for the AMDGCN arch (yet), - this is just the bare minimum to get - - $ ./configure --target=amdgcn-hsa-amdhsa --disable-gas - $ make all-binutils - - working later in this series. - - opcodes/ChangeLog: - - * configure.ac: Handle bfd_amdgcn_arch. - * configure: Re-generate. - - Change-Id: Ib7d7c5533a803ed8b2a293e9275f667ed781ce79 - -2022-03-16 Simon Marchi - - bfd: add AMDGCN architecture - Add support for the AMDGCN architecture to BFD. - - This is the bare minimum to get - - $ ./configure --target=amdgcn-hsa-amdhsa --disable-gas - $ make all-binutils - - working later in this series. - - The specific AMDGCN models added here are a bit arbitrary, based on - what we intend to initially support in GDB. This list will need to be - updated in the future anyway. The complete up-to-date list of existing - AMDGPU models can be found here: - - https://llvm.org/docs/AMDGPUUsage.html#processors - - The ELF format for this architecture is documented here: - - https://llvm.org/docs/AMDGPUUsage.html#elf-code-object - - The flags for the "HSA" OS ABI are properly versioned and documented on - that page. But the NONE, PAL and MESA3D OS ABIs are not well documented - nor versioned. Taking a peek at the LLVM source code, we see that they - encode their flags the same way as HSA v3. For example, for PAL: - - https://github.com/llvm/llvm-project/blob/c8b614cd74a92d85936aed5ac7c642af75ffdc29/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp#L601 - - So at least, we know that all AMDGPU objects (of which AMDGCN objects - are a subset of) at the time of writing encode the specific GPU model in - the EF_AMDGPU_MACH field of e_flags. - - bfd/ChangeLog: - - * 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. - - include/ChangeLog: - - * elf/amdgpu.h: New. - * elf/common.h (ELFOSABI_AMDGPU_HSA): Add. - - Change-Id: I969f7b14960797e88891c308749a6e341eece5b2 - -2022-03-16 Nick Clifton - - Updated Serbian (for binutils/) and Russian (for gprof/) translations - -2022-03-16 Pedro Alves - - Make gdb.fortran/{array-slices,lbound-ubound} work against gdbserver - gdb.fortran/array-slices.exp and gdb.fortran/lbound-ubound.exp were - recently disabled unless testing with the native target, because they - rely on inferior I/O. However, when testing against gdbserver using - the native-gdbserver/native-extended-gdbserver boards, we do have - access to inferior I/O. - - The right way to check whether the board can do I/O, is via checking - the gdb,noinferiorio board variable. Switch to using that. - - And then, tweak the testcases to expect output to appear in - inferior_spawn_id, instead of gdb_spawn_id. When testing against the - native target, inferior_spawn_id is the same as gdb_spawn_id. When - testing against gdbserver, it maps to gdbserver_spawn_id. - - This exposed a buglet in gdb.fortran/array-slices.f90's show_1d - subroutine -- it was missing printing newline at the end of the - "Expected GDB Output" text, leading to a test timeout. All other - subroutines end with advance=yes, except this one. Fix it by using - advance=yes here too. - - Change-Id: I4640729f334431cfc24b0917e7d3977b677c6ca5 - -2022-03-16 GDB Administrator - - Automatic date update in version.in - -2022-03-15 Alan Modra - - Delete PowerPC macro insn support - Let's hope this stays dead, but it's here as a patch separate from - those that removed use of powerpc_macros just in case it needs to be - resurrected. - - include/ - * opcode/ppc.h (struct powerpc_macro): Delete declaration. - (powerpc_macros, powerpc_num_macros): Likewise.. - opcodes/ - * ppc-opc.c (powerpc_macros, powerpc_num_macros): Delete. - gas/ - * config/tc-ppc.c (ppc_macro): Delete function. - (ppc_macro_hash): Delete. - (ppc_setup_opcodes, md_assemble): Delete macro support. - -2022-03-15 Alan Modra - - PowerPC SPE/SPE2 aliases in powerpc_macros - * ppc-opc.c (powerpc_macros): Move "evsadd", "evssub", "evsabs", - "evsnabs", "evsneg", "evsmul", "evsdiv", "evscmpgt", "evsgmplt", - "evsgmpeq", "evscfui", "evscfsi", "evscfuf", "evscfsf", "evsctui", - "evsctsi", "evsctuf", "evsctsf", "evsctuiz", "evsctsiz", - "evststgt", "evststlt", "evststeq".. - (powerpc_opcodes): ..to here. - (powerpc_macros): Move "evdotphsssi", "evdotphsssia", "evdotpwsssi", - and "evdotpwsssia".. - (spe2_opcodes): ..to here. - -2022-03-15 Alan Modra - - PowerPC VLE extended instructions in powerpc_macros - This moves VLE insn out of the macro table. "e_slwi" and "e_srwi" - already exist in vle_opcodes as distinct instructions rather than - encodings of e_rlwinm. - - opcodes/ - * ppc-opc.c (vle_opcodes): Typo fix e_rlwinm operand. - Add "e_inslwi", "e_insrwi", "e_rotlwi", "e_rotrwi", "e_clrlwi", - "e_clrrwi", "e_extlwi", "e_extrwi", and "e_clrlslwi". - (powerpc_macros): Delete same. Delete "e_slwi" and "e_srwi" too. - gas/ - * testsuite/gas/ppc/vle-simple-5.d: Update. - -2022-03-15 Alan Modra - - PowerPC32 extended instructions in powerpc_macros - As for PowerPC64, move instructions to the main opcode table. - - opcodes/ - * ppc-opc.c (insert_crwn, extract_crwn, insert_elwn, extract_elwn), - (insert_erwn, extract_erwn, insert_erwb, extract_erwb), - (insert_cslwn, extract_cslwb, insert_ilwb, extract_ilwn), - (insert_irwb, extract_irwn, insert_rrwn, extract_rrwn), - (insert_slwn, extract_slwn, insert_srwn, extract_srwn): New functions. - (CRWn, ELWn, ERWn, ERWb, CSLWb, CSLWn, ILWn, ILWb, IRWn, IRWb), - (RRWn, SLWn, SRWn): Define and add powerpc_operands entries. - (MMB_MASK, MME_MASK, MSHMB_MASK): Define. - (powerpc_opcodes): Add "inslwi", "insrwi", "rotrwi", "clrrwi", - "slwi", "srwi", "extlwi", "extrwi", "sli", "sri" and corresponding - record (ie. dot suffix) forms. - (powerpc_macros): Delete same. - gas/ - * testsuite/gas/ppc/476.d: Update. - * testsuite/gas/ppc/simpshft.d: Update. - -2022-03-15 Alan Modra - - PowerPC64 extended instructions in powerpc_macros - The extended instructions implemented in powerpc_macros aren't used by - the disassembler. That means instructions like "sldi r3,r3,2" appear - in disassembly as "rldicr r3,r3,2,61", which is annoying since many - other extended instructions are shown. - - Note that some of the instructions moved out of the macro table to the - opcode table won't appear in disassembly, because they are aliases - rather than a subset of the underlying raw instruction. If enabled, - rotrdi, extrdi, extldi, clrlsldi, and insrdi would replace all - occurrences of rotldi, rldicl, rldicr, rldic and rldimi. (Or many - occurrences in the case of clrlsldi if n <= b was added to the extract - functions.) - - The patch also fixes a small bug in opcode sanity checking. - - include/ - * opcode/ppc.h (PPC_OPSHIFT_SH6): Define. - opcodes/ - * ppc-opc.c (insert_erdn, extract_erdn, insert_eldn, extract_eldn), - (insert_crdn, extract_crdn, insert_rrdn, extract_rrdn), - (insert_sldn, extract_sldn, insert_srdn, extract_srdn), - (insert_erdb, extract_erdb, insert_csldn, extract_csldb), - (insert_irdb, extract_irdn): New functions. - (ELDn, ERDn, ERDn, RRDn, SRDn, ERDb, CSLDn, CSLDb, IRDn, IRDb): - Define and add associated powerpc_operands entries. - (powerpc_opcodes): Add "rotrdi", "srdi", "extrdi", "clrrdi", - "sldi", "extldi", "clrlsldi", "insrdi" and corresponding record - (ie. dot suffix) forms. - (powerpc_macros): Delete same from here. - gas/ - * config/tc-ppc.c (insn_validate): Don't modify value passed - to operand->insert for PPC_OPERAND_PLUS1 when calculating mask. - Handle PPC_OPSHIFT_SH6. - * testsuite/gas/ppc/prefix-reloc.d: Update. - * testsuite/gas/ppc/simpshft.d: Update. - ld/ - * testsuite/ld-powerpc/elfv2so.d: Update. - * testsuite/ld-powerpc/notoc.d: Update. - * testsuite/ld-powerpc/notoc3.d: Update. - * testsuite/ld-powerpc/tlsdesc2.d: Update. - * testsuite/ld-powerpc/tlsget.d: Update. - * testsuite/ld-powerpc/tlsget2.d: Update. - * testsuite/ld-powerpc/tlsopt5.d: Update. - * testsuite/ld-powerpc/tlsopt6.d: Update. - -2022-03-15 Tom Tromey - - Do not capture updated 'pc' in add_local_symbols - Simon pointed out that commit 13835d88 ("Use function view when - iterating over block symbols") caused a regression. The bug is that - the new closure captures 'pc' by reference, but later code updates - this variable -- but the earlier code did not update the callback - structure with the new value. - - This patch restores the old behavior by using a new varible name in an - inner scope. - -2022-03-15 Jose E. Marchesi - - gprofng: avoid using `fallthrough' attributes - gprofng didn't build with gcc 6.3 due to the usage of __attribute__ - ((fallthrough)). This patch uses /* FALLTHROUGH */ instead. - - 2022-03-15 Jose E. Marchesi - - * gprofng/src/gp-collect-app.cc (collect::check_args): Use - fallthrough comment instead of attribute. - -2022-03-15 Tom Tromey - - Fix bug in dwarf-mode.el - I noticed that, occasionally, dwarf-mode would think that the objdump - subprocess was still running after it had clearly exited. I managed - to reliably reproduce this today and learned that a process sentinel - is not guaranteed to be run with the current buffer set to the process - buffer. This patch fixes the problem. - - I've bumped the version number of dwarf-mode.el to make it easier to - install for users who already have an earlier one installed. - - I'm checking this in. - - 2022-03-15 Tom Tromey - - * dwarf-mode.el: Now 1.7. - (dwarf--sentinel): Switch to the process buffer. - -2022-03-15 Andrew Burgess - - gdb/testsuite: rename a proc and fix a typo - Rename a proc in gdb.mi/user-selected-context-sync.exp, I think the - old name was most likely a typo. The old name - match_re_or_ensure_not_output seems (to me) to imply we're in some way - checking that the regexp was not output. But that's not what we are - doing, we're checking either for the regexp, or for no output, hence - the new name match_re_or_ensure_no_output. - - Additionally, I found a definite typo in one of the comments that I've - also fixed. - - I also updated some test names. These tests (probably due to copy & - paste errors) has 'on MI' on their name, when they were actually - checking CLI output. For these test I changed the name to use 'on - CLI'. - - There should be no change in what is tested after this commit. - -2022-03-15 Nick Clifton - - gprofng: Add a configure test for clock_gettime and a use of the test in getthrtime.c - -2022-03-15 H.J. Lu - - gprofng: Don't generate gprofng.info in source - Add info-in-builddir to AUTOMAKE_OPTIONS. - - PR gprof/28967 - * doc/Makefile.am (AUTOMAKE_OPTIONS): Add info-in-builddir. - * doc/Makefile.in: Regenerate. - -2022-03-15 Tiezhu Yang - - gdb: LoongArch: fix failed testcases in gdb.base/align-c.exp - When execute the following command on LoongArch: - - make check-gdb TESTS="gdb.base/align-c.exp" - - there exist some failed testcases: - - ... - FAIL: gdb.base/align-c.exp: print _Alignof(struct align_pair_long_double_x_float) - FAIL: gdb.base/align-c.exp: print _Alignof(struct align_pair_long_double_x_double) - FAIL: gdb.base/align-c.exp: print _Alignof(struct align_pair_long_double_x_long_double) - ... - - According to LoongArch ELF ABI specification [1], set the target data types - of floating-point to fix the above failed testcases. - - [1] https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html - -2022-03-15 GDB Administrator - - Automatic date update in version.in - -2022-03-14 Andrew Burgess - - gdb/python/mi: create MI commands using python - This commit allows a user to create custom MI commands using Python - similarly to what is possible for Python CLI commands. - - A new subclass of mi_command is defined for Python MI commands, - mi_command_py. A new file, gdb/python/py-micmd.c contains the logic - for Python MI commands. - - This commit is based on work linked too from this mailing list thread: - - https://sourceware.org/pipermail/gdb/2021-November/049774.html - - Which has also been previously posted to the mailing list here: - - https://sourceware.org/pipermail/gdb-patches/2019-May/158010.html - - And was recently reposted here: - - https://sourceware.org/pipermail/gdb-patches/2022-January/185190.html - - The version in this patch takes some core code from the previously - posted patches, but also has some significant differences, especially - after the feedback given here: - - https://sourceware.org/pipermail/gdb-patches/2022-February/185767.html - - A new MI command can be implemented in Python like this: - - class echo_args(gdb.MICommand): - def invoke(self, args): - return { 'args': args } - - echo_args("-echo-args") - - The 'args' parameter (to the invoke method) is a list - containing (almost) all command line arguments passed to the MI - command (--thread and --frame are handled before the Python code is - called, and removed from the args list). This list can be empty if - the MI command was passed no arguments. - - When used within gdb the above command produced output like this: - - (gdb) - -echo-args a b c - ^done,args=["a","b","c"] - (gdb) - - The 'invoke' method of the new command must return a dictionary. The - keys of this dictionary are then used as the field names in the mi - command output (e.g. 'args' in the above). - - The values of the result returned by invoke can be dictionaries, - lists, iterators, or an object that can be converted to a string. - These are processed recursively to create the mi output. And so, this - is valid: - - class new_command(gdb.MICommand): - def invoke(self,args): - return { 'result_one': { 'abc': 123, 'def': 'Hello' }, - 'result_two': [ { 'a': 1, 'b': 2 }, - { 'c': 3, 'd': 4 } ] } - - Which produces output like: - - (gdb) - -new-command - ^done,result_one={abc="123",def="Hello"},result_two=[{a="1",b="2"},{c="3",d="4"}] - (gdb) - - I have required that the fields names used in mi result output must - match the regexp: "^[a-zA-Z][-_a-zA-Z0-9]*$" (without the quotes). - This restriction was never written down anywhere before, but seems - sensible to me, and we can always loosen this rule later if it proves - to be a problem. Much harder to try and add a restriction later, once - people are already using the API. - - What follows are some details about how this implementation differs - from the original patch that was posted to the mailing list. - - In this patch, I have changed how the lifetime of the Python - gdb.MICommand objects is managed. In the original patch, these object - were kept alive by an owned reference within the mi_command_py object. - As such, the Python object would not be deleted until the - mi_command_py object itself was deleted. - - This caused a problem, the mi_command_py were held in the global mi - command table (in mi/mi-cmds.c), which, as a global, was not cleared - until program shutdown. By this point the Python interpreter has - already been shutdown. Attempting to delete the mi_command_py object - at this point was causing GDB to try and invoke Python code after - finalising the Python interpreter, and we would crash. - - To work around this problem, the original patch added code in - python/python.c that would search the mi command table, and delete the - mi_command_py objects before the Python environment was finalised. - - In contrast, in this patch, I have added a new global dictionary to - the gdb module, gdb._mi_commands. We already have several such global - data stores related to pretty printers, and frame unwinders. - - The MICommand objects are placed into the new gdb.mi_commands - dictionary, and it is this reference that keeps the objects alive. - When GDB's Python interpreter is shut down gdb._mi_commands is deleted, - and any MICommand objects within it are deleted at this point. - - This change avoids having to make the mi_cmd_table global, and walk - over it from within GDB's python related code. - - This patch handles command redefinition entirely within GDB's python - code, though this does impose one small restriction which is not - present in the original code (detailed below), I don't think this is a - big issue. However, the original patch relied on being able to - finish executing the mi_command::do_invoke member function after the - mi_command object had been deleted. Though continuing to execute a - member function after an object is deleted is well defined, it is - also (IMHO) risky, its too easy for someone to later add a use of the - object without realising that the object might sometimes, have been - deleted. The new patch avoids this issue. - - The one restriction that is added to avoid this, is that an MICommand - object can't be reinitialised with a different command name, so: - - (gdb) python cmd = MyMICommand("-abc") - (gdb) python cmd.__init__("-def") - can't reinitialize object with a different command name - - This feels like a pretty weird edge case, and I'm happy to live with - this restriction. - - I have also changed how the memory is managed for the command name. - In the most recently posted patch series, the command name is moved - into a subclass of mi_command, the python mi_command_py, which - inherits from mi_command is then free to use a smart pointer to manage - the memory for the name. - - In this patch, I leave the mi_command class unchanged, and instead - hold the memory for the name within the Python object, as the lifetime - of the Python object always exceeds the c++ object stored in the - mi_cmd_table. This adds a little more complexity in py-micmd.c, but - leaves the mi_command class nice and simple. - - Next, this patch adds some extra functionality, there's a - MICommand.name read-only attribute containing the name of the command, - and a read-write MICommand.installed attribute that can be used to - install (make the command available for use) and uninstall (remove the - command from the mi_cmd_table so it can't be used) the command. This - attribute will be automatically updated if a second command replaces - an earlier command. - - This patch adds additional error handling, and makes more use the - gdbpy_handle_exception function. - - Co-Authored-By: Jan Vrany - -2022-03-14 Andrew Burgess - - gdb/gdbarch: compare some fields against 0 verify_gdbarch - After the previous commit, which removes the predicate function - gdbarch_register_type_p, I noticed that the gdbarch->register_type - field was not checked at in the verify_gdbarch function. - - More than not being checked, the field wasn't mentioned at all. - - I find this strange, I would expect that every field would at least be - mentioned - we already generate comments for some fields saying that - this field is _not_ being checked, so the fact that this field isn't - being checked looks (to me), like this field is somehow slipping - through the cracks. - - The comment at the top of gdbarch-components.py tries to explain how - the validation is done. I didn't understand this comment completely, - but, I think this final sentence: - - "Otherwise, the check is done against 0 (really NULL for function - pointers, but same idea)." - - Means that, if non of the other cases apply, then the field should be - checked against 0, with 0 indicating that the field is invalid (was - not set by the tdep code). However, this is clearly not being done. - - Looking in gdbarch.py at the code to generate verify_gdbarch we do - find that there is a case that is not handled, the case where the - 'invalid' field is set true True, but non of the other cases apply. - - In this commit I propose two changes: - - 1. Handle the case where the 'invalid' field of a property is set to - True, this should perform a check for the field of gdbarch still - being set to 0, and - - 2. If the if/else series that generates verify_gdbarch doesn't handle - a property then we should raise an exception. This means that if a - property is added which isn't handled, we should no longer silently - ignore it. - - After doing this, I re-generated the gdbarch files and saw that the - following gdbarch fields now had new validation checks: - - register_type - believe_pcc_promotion - register_to_value - value_to_register - frame_red_zone_size - displaced_step_restore_all_in_ptid - solib_symbols_extension - - Looking at how these are currently set in the various -tdep.c files, I - believe the only one of these that is required to be set for all - architectures is the register_type field. - - And so, for all of the other fields, I've changed the property - definition on gdbarch-components.py, setting the 'invalid' field to - False. - - Now, after re-generation, the register_type field is checked against - 0, thus an architecture that doesn't set_gdbarch_register_type will - now fail during validation. For all the other fields we skip the - validation, in which case, it is find for an architecture to not set - this field. - - My expectation is that there should be no user visible changes after - this commit. Certainly for all fields except register_type, all I've - really done is cause some extra comments to be generated, so I think - that's clearly fine. - - For the register_type field, my claim is that any architecture that - didn't provide this would fail when creating its register cache, and I - couldn't spot an architecture that doesn't provide this hook. As - such, I think this change should be fine too. - -2022-03-14 Andrew Burgess - - gdb/gdbarch: remove the predicate function for gdbarch_register_type - I don't believe that the gdbarch_register_type_p predicate is called - anywhere in GDB, and the gdbarch_register_type function is called - without checking the gdbarch_register_type_p predicate function - everywhere it is used, for example in - init_regcache_descr (regcache.c). - - My claim is that the gdbarch_register_type function is required for - every architecture, and GDB will not work if this function is not - supplied. - - And so, in this commit, I remove the 'predicate=True' from - gdbarch-components.py for the 'register_type' field, and regenerate - the gdbarch files. - - There should be no user visible changes after this commit. - -2022-03-14 Patrick Monnerat - - Replace deprecated_target_wait_hook by observers - Commit b60cea7 (Make target_wait options use enum flags) broke - deprecated_target_wait_hook usage: there's a commit comment telling - this hook has not been converted. - - Rather than trying to mend it, this patch replaces the hook by two - target_wait observers: - - target_pre_wait (ptid_t ptid) - target_post_wait (ptid_t event_ptid) - - Upon target_wait entry, target_pre_wait is notified with the ptid - passed to target_wait. Upon exit, target_post_wait is notified with - the event ptid returned by target_wait. Should an exception occur, - event_ptid is null_ptid. - - This change benefits to Insight (out-of-tree): there's no real use of the - late hook in gdb itself. - -2022-03-14 Tom Tromey - - Correctly print subrange types in generic_value_print - I noticed that generic_value_print assumes that a subrange type is - always a subrange of an integer type. However, this isn't necessarily - the case. In Ada, for example, one has subranges of character and - enumeration types. - - This code isn't often exercised, I think, because languages with real - subrange types tend to implement their own printers. However, it - still seemed worth fixing. - -2022-03-14 Luis Machado - - [aarch64/arm] Properly extract the return value returned in memory - When running gdb.cp/non-trivial-retval.exp, the following shows up for - both aarch64-linux and armhf-linux: - - Breakpoint 3, f1 (i1=23, i2=100) at src/gdb/testsuite/gdb.cp/non-trivial-retval.cc:35 - 35 A a; - (gdb) finish - Run till exit from #0 f1 (i1=23, i2=100) at src/gdb/testsuite/gdb.cp/non-trivial-retval.cc:35 - main () at /src/gdb/testsuite/gdb.cp/non-trivial-retval.cc:163 - 163 B b = f2 (i1, i2); - Value returned is $6 = {a = -11952} - (gdb) - - The return value should be {a = 123} instead. This happens because the - backends don't extract the return value from the correct location. GDB should - fetch a pointer to the memory location from X8 for aarch64 and r0 for armhf. - - With the patch, gdb.cp/non-trivial-retval.exp has full passes on - aarch64-linux and armhf-linux on Ubuntu 20.04/18.04. - - The problem only shows up with the "finish" command. The "call" command - works correctly and displays the correct return value. - - This is also related to PR gdb/28681 - (https://sourceware.org/bugzilla/show_bug.cgi?id=28681) and fixes FAIL's in - gdb.ada/mi_var_array.exp. - - A new testcase is provided, and it exercises GDB's ability to "finish" a - function that returns a large struct (> 16 bytes) and display the - contents of this struct correctly. This has always been incorrect for - these backends, but no testcase exercised this particular scenario. - -2022-03-14 GDB Administrator - - Automatic date update in version.in - -2022-03-13 Alan Modra - - PR28959, obdump doesn't disassemble mftb instruction - Without a -M cpu option given, powerpc objdump defaults currently to - -Mpower10 but -Many is also given. Commit 1ff6a3b8e562 regressed - -Many disassembly of instructions that are encoded differently - depending on cpu, such as mftb which has pre- and post-power4 - encodings. - - PR 28959 - * ppc-dis.c (lookup_powerpc): Revert 2021-05-28 change. Instead - only look at deprecated PPC_OPCODE_RAW bit when -Many. - -2022-03-13 GDB Administrator - - Automatic date update in version.in - -2022-03-12 Tom Tromey - - Relax regexp in gdb.rust/unsized.exp - With nightly rustc, gdb.rust/unsized.exp fails: - - (gdb) ptype *us - Structure has no component named operator*. - - rustc changed to emit a bit more debug info for unsized types. - Because the original test is just to make sure that ptype of an - unsized array looks right, this patch relaxes the regexp and changes - the expression. I think this keeps the original test meaning, but - also works with nightly. I also tested stable and 1.48. - -2022-03-12 GDB Administrator - - Automatic date update in version.in - -2022-03-11 Tom Tromey - - Avoid crash with cross-linux core file - An internal test case creates a core file using gcore, then restarts - gdb with that core. When run with a cross-linux gdb (in this case, - x86-64 host with ppc64-linux target), the test fails: - - | (gdb) core core - | [New LWP 18437] - | warning: `/lib64/libc.so.6': Shared library architecture unknown is not compatible with target architecture powerpc:common64. - | warning: Could not load shared library symbols for /lib64/ld64.so.1. - | Do you need "set solib-search-path" or "set sysroot"? - | ../../src/gdb/gdbarch.c:3388: internal-error: int gdbarch_elf_make_msymbol_special_p(gdbarch*): Assertion `gdbarch != NULL' failed. - | A problem internal to GDB has been detected, - | further debugging may prove unreliable. - | Quit this debugging session? (y or n) y - - What's happening here is that the core file lists some shared - libraries. These aren't available via the solib search path, and so - gdb finds the local (x86-64) libraries. This is not ideal, but on the - other hand, it is what was asked for -- while the test does set - solib-search-path, it does not set the sysroot. - - But, because gdb isn't configured to handle these libraries, it - crashes. - - It seems to me that it's better to avoid the crash by having - solib_bfd_open fail in the case where a library is incompatible. That - is what this patch does. Now it looks like: - - | [New LWP 15488] - | Error while mapping shared library sections: - | `/lib64/libc.so.6': Shared library architecture unknown is not compatible with target architecture powerpc:common64. - - ... and does not crash gdb. - - I don't have a good setup for testing this using dejagnu, so I don't - know whether an existing gdb test covers this scenario. - -2022-03-11 Andrew Burgess - - gdb/testsuite: remove duplicates from gdb.base/stap-probe.exp - Remove the duplicate test names from gdb.base/stap-probe.exp, this is - done by actually passing a unique test name in a couple of - places (rather than using the command as the test name), and in - another couple of places, a test has a duplicate name due to a cut & - paste error, which I've fixed. - - There's no change in what is actually being tested after this commit. - -2022-03-11 Vladimir Mezentsev - - gprofng: a new GNU profiler - top-level - * Makefile.def: Add gprofng module. - * configure.ac: Add --enable-gprofng option. - * src-release.sh: Add gprofng. - * Makefile.in: Regenerate. - * configure: Regenerate. - * gprofng: New directory. - - binutils - * MAINTAINERS: Add gprofng maintainer. - * README-how-to-make-a-release: Add gprofng. - - include. - * collectorAPI.h: New file. - * libcollector.h: New file. - * libfcollector.h: New file. - -2022-03-11 GDB Administrator - - Automatic date update in version.in - -2022-03-10 Aaron Merey - - gdb/auto-load: Remove repeating "auto-load" from debug message - Remove "auto-load:" from a format string passed to auto_load_debug_printf. - It is unnecessary since this function will prefix the string with "[auto-load]" - when printing it. - -2022-03-10 Tom Tromey - - Change how "print/x" displays floating-point value - Currently, "print/x" will display a floating-point value by first - casting it to an integer type. This yields weird results like: - - (gdb) print/x 1.5 - $1 = 0x1 - - This has confused users multiple times -- see PR gdb/16242, where - there are several dups. I've also seen some confusion from this - internally at AdaCore. - - The manual says: - - 'x' - Regard the bits of the value as an integer, and print the integer - in hexadecimal. - - ... which seems more useful. So, perhaps what happened is that this - was incorrectly implemented (or maybe correctly implemented and then - regressed, as there don't seem to be any tests). - - This patch fixes the bug. - - There was a previous discussion where we agreed to preserve the old - behavior: - - https://sourceware.org/legacy-ml/gdb-patches/2017-06/msg00314.html - - However, I think it makes more sense to follow the manual. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=16242 - -2022-03-10 Tom Tromey - - Simplify the ui-out progress API - I noticed that 'progress' is a method on ui-out, but it seems to me - that it would be better if the only API were via the progress_meter - class. This patch makes this change, changing progress to be a method - on the meter itself. - -2022-03-10 Andrew Burgess - - gdb/gdbarch: fix typo in gdbarch-components.py - Fixes a minor typo, in a comment, in the gdbarch-components.py script. - - There should be no user visible changes after this commit. - -2022-03-10 Lancelot SIX - - Process exit status is leader exit status testcase - This adds a multi-threaded testcase that has all threads in the - process exit with a different exit code, and ensures that GDB reports - the thread group leader's exit status as the whole-process exit - status. Before this set of patches, this would randomly report the - exit code of some other thread, and thus fail. - - Tested on Linux-x86_64, native and gdbserver. - - Co-Authored-By: Pedro Alves - Change-Id: I30cba2ff4576fb01b5169cc72667f3268d919557 - -2022-03-10 Pedro Alves - - Re-add zombie leader on exit, gdbserver/linux - Same as the previous patch, but for GDBserver. - - In summary, the current zombie leader detection code in linux-low.cc - has a race -- if a multi-threaded inferior exits just before - check_zombie_leaders finds that the leader is now zombie via checking - /proc/PID/status, check_zombie_leaders deletes the leader, assuming we - won't get an event for that exit (which we won't in some scenarios, - but not in this one), which is a false-positive scenario, where the - whole process is simply exiting. Later when we see the last LWP in - our list exit, we report that LWP's exit status as exit code, even - though for the (real) parent process, the exit code that counts is the - child's leader thread's exit code. - - Like for GDB, the solution here is to: - - - only report whole-process exit events for the leader. - - re-add the leader back to the LWP list when we finally see it - exit. - - Change-Id: Id2d7bbb51a415534e1294fff1d555b7ecaa87f1d - -2022-03-10 Pedro Alves - - Re-add zombie leader on exit, gdb/linux - The current zombie leader detection code in linux-nat.c has a race -- - if a multi-threaded inferior exits just before check_zombie_leaders - finds that the leader is now zombie via checking /proc/PID/status, - check_zombie_leaders deletes the leader, assuming we won't get an - event for that exit (which we won't in some scenarios, but not in this - one). That might seem mostly harmless, but it has some downsides: - - - later when we continue pulling events out of the kernel, we will - collect the exit event of the non-leader threads, and once we see - the last lwp in our list exit, we return _that_ lwp's exit code as - whole-process exit code to infrun, instead of the leader's exit - code. - - - this can cause a hang in stop_all_threads in infrun.c. Say there - are 2 threads in the process. stop_all_threads stops each of those - threads, and then waits for two stop or exit events, one for each - thread. If the whole process exits, and check_zombie_leaders hits - the false-positive case, linux-nat.c will only return one event to - GDB (the whole-process exit returned when we see the last thread, - the non-leader thread, exit), making stop_all_threads hang forever - waiting for a second event that will never come. - - However, in this false-positive scenario, where the whole process is - exiting, as opposed to just the leader (with pthread_exit(), for - example), we _will_ get an exit event shortly for the leader, after we - collect the exit event of all the other non-leader threads. Or put - another way, we _always_ get an event for the leader after we see it - become zombie. - - I tried a number of approaches to fix this: - - #1 - My first thought to address the race was to make GDB always - report the whole-process exit status for the leader thread, not for - whatever is the last lwp in the list. We _always_ get a final exit - (or exec) event for the leader, and when the race triggers, we're not - collecting it. - - #2 - My second thought was to try to plug the race in the first place. - - I thought of making GDB call waitpid/WNOHANG for all non-leader - threads immediately when the zombie leader is detected, assuming there - would be an exit event pending for each of them waiting to be - collected. Turns out that that doesn't work -- you can see the leader - become zombie _before_ the kernel kills all other threads. Waitpid in - that small time window returns 0, indicating no-event. Thankfully we - hit that race window all the time, which avoided trading one race for - another. Looking at the non-leader thread's status in /proc doesn't - help either, the threads are still in running state for a bit, for the - same reason. - - #3 - My next attempt, which seemed promising, was to synchronously - stop and wait for the stop for each of the non-leader threads. For - the scenario in question, this will collect all the exit statuses of - the non-leader threads. Then, if we are left with only the zombie - leader in the lwp list, it means we either have a normal while-process - exit or an exec, in which case we should not delete the leader. If - _only_ the leader exited, like in gdb.threads/leader-exit.exp, then - after pausing threads, we will still have at least one live non-leader - thread in the list, and so we delete the leader lwp. I got this - working and polished, and it was only after staring at the kernel code - to convince myself that this would really work (and it would, for the - scenario I considered), that I realized I had failed to account for - one scenario -- if any non-leader thread is _already_ stopped when - some thread triggers a group exit, like e.g., if you have some threads - stopped and then resume just one thread with scheduler-locking or - non-stop, and that thread exits the process. I also played with - PTRACE_EVENT_EXIT, see if it would help in any way to plug the race, - and I couldn't find a way that it would result in any practical - difference compared to looking at /proc/PID/status, with respect to - having a race. - - So I concluded that there's no way to plug the race, we just have to - deal with it. Which means, going back to approach #1. That is the - approach taken by this patch. - - Change-Id: I6309fd4727da8c67951f9cea557724b77e8ee979 - -2022-03-10 Pedro Alves - - gdbserver: Reindent check_zombie_leaders - This fixes the indentation of - linux_process_target::check_zombie_leaders, which will help with - keeping its comments in sync with the gdb/linux-nat.c counterpart. - - Change-Id: I37332343bd80423d934249e3de2d04feefad1891 - -2022-03-10 Pedro Alves - - gdbserver: Reorganize linux_process_target::filter_event - Reorganize linux-low.cc:linux_process_target::filter_event such that - all the handling for events for LWPs not in the LWP list is together. - This helps make a following patch clearer. The comments and debug - messages have also been tweaked to have them synchronized with the GDB - counterpart. - - Change-Id: If9019635f63a846607cfda44b454b4254a404019 - -2022-03-10 Pedro Alves - - gdb: Reorganize linux_nat_filter_event - Reorganize linux-nat.c:linux_nat_filter_event such that all the - handling for events for LWPs not in the LWP list is together. This - helps make a following patch clearer. The comments and debug messages - have also been tweaked - the end goal is to have them synchronized - with the gdbserver counterpart. - - Change-Id: I8586d8dcd76d8bd3795145e3056fc660e3b2cd22 - -2022-03-10 Pedro Alves - - Fix gdb.threads/current-lwp-dead.exp race - If we make GDB report the process EXIT event for the leader thread, as - will be done in a latter patch of this series, then - gdb.threads/current-lwp-dead.exp starts failing: - - (gdb) break fn_return - Breakpoint 2 at 0x5555555551b5: file /home/pedro/rocm/gdb/build/gdb/testsuite/../../../src/gdb/testsuite/gdb.threads/current-lwp-dead.c, line 45. - (gdb) continue - Continuing. - [New LWP 2138466] - [Inferior 1 (process 2138459) exited normally] - (gdb) FAIL: gdb.threads/current-lwp-dead.exp: continue to breakpoint: fn_return (the program exited) - - The inferior exit reported is actually correct. The main thread has - indeed exited, and that's the thread that has the right exit code to - report to the user, as that's the exit code that is reported to the - program's parent. In this case, GDB managed to collect the exit code - for the leader thread before reaping the other thread, because in - reality, the testcase isn't creating standard threads, it is using raw - clone, and the new clones are put in their own thread group. - - Fix it by making the main "thread" not exit until the scenario we're - exercising plays out. Also, run the program to completion for - completeness. - - The original program really wanted the leader thread to exit before - the fn_return function was reached -- it was important that the - current thread as pointed by inferior_ptid was gone when infrun got - the breakpoint event. I've tweaked the testcase to ensure that that - condition is still held, though it is no longer the main thread that - exits. This required a bit of synchronization between the threads, - which required using CLONE_VM unconditionally. The #ifdef guards were - added as a fix for - https://sourceware.org/bugzilla/show_bug.cgi?id=11214, though I don't - think they were necessary because the program is not using TLS. If it - turns out they were necessary, we can link the testcase with "-z now" - instead, which was mentioned as an alternative workaround in that - Bugzilla. - - Change-Id: I7be2f0da4c2fe8f80a60bdde5e6c623d8bd5a0aa - -2022-03-10 Pedro Alves - - Fix gdb.threads/clone-new-thread-event.exp race - If we make GDB report the process EXIT event for the leader thread, - instead of whatever is the last thread in the LWP list, as will be - done in a latter patch of this series, then - gdb.threads/current-lwp-dead.exp starts failing: - - (gdb) FAIL: gdb.threads/clone-new-thread-event.exp: catch SIGUSR1 (the program exited) - - This is a testcase race -- the main thread does not wait for the - spawned clone "thread" to finish before exiting, so the main program - may exit before the second thread is scheduled and reports its - SIGUSR1. With the change to make GDB report the EXIT for the leader, - the race is 100% reproducible by adding a sleep(), like so: - - --- c/gdb/testsuite/gdb.threads/clone-new-thread-event.c - +++ w/gdb/testsuite/gdb.threads/clone-new-thread-event.c - @@ -51,6 +51,7 @@ local_gettid (void) - static int - fn (void *unused) - { - + sleep (1); - tkill (local_gettid (), SIGUSR1); - return 0; - } - - Resulting in: - - Breakpoint 1, main (argc=1, argv=0x7fffffffd418) at gdb.threads/clone-new-thread-event.c:65 - 65 stack = malloc (STACK_SIZE); - (gdb) continue - Continuing. - [New LWP 3715562] - [Inferior 1 (process 3715555) exited normally] - (gdb) FAIL: gdb.threads/clone-new-thread-event.exp: catch SIGUSR1 (the program exited) - - That inferior exit reported is actually correct. The main thread has - indeed exited, and that's the thread that has the right exit code to - report to the user, as that's the exit code that is reported to the - program's parent. In this case, GDB managed to collect the exit code - for the leader thread before reaping the other thread, because in - reality, the testcase isn't creating standard threads, it is using raw - clone, and the new clones are put in their own thread group. - - Fix it by making the main thread wait for the child to exit. Also, - run the program to completion for completeness. - - Change-Id: I315cd3dc2b9e860395dcab9658341ea868d7a6bf - -2022-03-10 Pedro Alves - - Fix gdbserver/linux target_waitstatus logging assert - Turning on debug output in gdbserver leads to an assertion failure if - gdbserver reports a non-signal event: - - [threads] wait_1: LWP 3273770: extended event with waitstatus status->kind = EXECD, execd_pathname = gdb.threads/non-ldr-exc-1/non-ldr-exc-1 - [threads] wait_1: Hit a non-gdbserver trap event. - ../../src/gdbserver/../gdb/target/waitstatus.h:365: A problem internal to GDBserver has been detected. - sig: Assertion `m_kind == TARGET_WAITKIND_STOPPED || m_kind == TARGET_WAITKIND_SIGNALLED' failed. - - Fix it in the obvious way, using target_waitstatus::to_string(), - resulting in, for example: - - [threads] wait_1: ret = LWP 1542412.1542412, status->kind = STOPPED, sig = GDB_SIGNAL_TRAP - - Change-Id: Ia4832f9b4fa39f4af67fcaf21fd4d909a285a645 - -2022-03-10 Nick Clifton - - Add option to objdump/readelf to disable access to debuginfod servers. - * 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. - -2022-03-10 Alan Modra - - Re: ld: Add a before_plugin_all_symbols_read hook - * testsuite/ld-plugin/pr28849.d: Adjust for powerpc64 function - descriptors. - -2022-03-10 H.J. Lu - - ld: Add a before_plugin_all_symbols_read hook - Add a before_plugin_all_symbols_read hook to load symbol references from - DT_NEEDED entries, included from --copy-dt-needed-entries, before reading - plugin symbols to properly resolve plugin symbol references. - - bfd/ - - PR ld/28849 - * elf-bfd.h (elf_link_hash_table): Add handling_dt_needed. - * elflink.c (_bfd_elf_merge_symbol): Don't set non_ir_ref_dynamic - before plugin 'all symbols read' hook is called. - - ld/ - - PR ld/28849 - * ldelf.c (ldelf_handle_dt_needed): New function. - (ldelf_before_plugin_all_symbols_read): Likewise. - (ldelf_after_open): Call ldelf_handle_dt_needed. - * ldelf.h (ldelf_before_plugin_all_symbols_read): New. - * ldemul.c (ldemul_before_plugin_all_symbols_read): Likewise. - * ldemul.h (ldemul_before_plugin_all_symbols_read): Likewise. - (ld_emulation_xfer_struct): Add before_plugin_all_symbols_read. - * ldlang.c (lang_process): Call - ldemul_before_plugin_all_symbols_read before calling - plugin_call_all_symbols_read. - * emultempl/elf.em - (gld${EMULATION_NAME}_before_plugin_all_symbols_read): New. - (LDEMUL_BEFORE_PLUGIN_ALL_SYMBOLS_READ): New. - * emultempl/emulation.em (ld_${EMULATION_NAME}_emulation): - Initialize the before_plugin_all_symbols_read field. - * testsuite/ld-plugin/lto.exp: Run PR ld/28849 tests. - * testsuite/ld-plugin/pr28849.d: New file. - * testsuite/ld-plugin/pr28849a.c: Likewise. - * testsuite/ld-plugin/pr28849b.c: Likewise. - -2022-03-10 GDB Administrator - - Automatic date update in version.in - -2022-03-09 Hans-Peter Nilsson - - toplevel: Makefile.def: Make configure-sim depend on all-readline - Without this, a "make all-sim" without the equivalent of - libreadline-dev installed on the build system, won't - properly pick up the in-tree readline build, and you'll see: - - mkdir -p -- ./sim - Configuring in ./sim - configure: creating cache ./config.cache - checking build system type... x86_64-pc-linux-gnu - checking host system type... x86_64-pc-linux-gnu - checking target system type... cris-axis-elf - checking for x86_64-pc-linux-gnu-gcc... gcc - checking whether the C compiler works... yes - ... - checking for library containing tgetent... -ltermcap - checking for readline in -lreadline... no - configure: error: the required "readline" library is missing - make[1]: *** [Makefile:11188: configure-sim] Error 1 - make[1]: Leaving directory '/home/hp/sim/b' - - The sim dependency on readline is apparently (nominally) - valid as there's a readline call in sim/erc32/sis.c. - - 2022-02-21 Hans-Peter Nilsson - - * Makefile.def (dependencies): Make configure-sim depend on - all-readline. - -2022-03-09 Maciej W. Rozycki - - GDB/testsuite: Fix a "displayed" typo in gdb.base/default.exp - Fix a typo, s/dislayed/displayed/ in default.exp at the top level. - - GDB/testsuite: Remove a stray backslash from gdb.base/settings.exp - Remove a stray trailing backslash from `test-integer' in settings.exp. - It is harmless as only white space follows in the next line before the - closing brace, so it merely swallows the newline character, but it may - look confusing to the reader. - -2022-03-09 Christina Schimpe (tiny change) - - * gdb/doc/gdb.texinfo (Requirements): Fix a typo. - -2022-03-09 Alan Modra - - Constant fold view increment expressions - The idea here is to replace expressions like v + 1 + 1 + 1 with v + 3. - - * dwarf2dbg.c (set_or_check_view): Remove useless assertion. - Resolve multiple view increments. - * testsuite/gas/elf/dwarf2-18.d: Don't xfail mep. - -2022-03-09 Alan Modra - - Reduce duplicated symbol_clone_if_forward_ref work - * symbol.c (struct symbol_flags): Add forward_resolved. - (symbol_entry_find): Update needle initialisation. - (symbol_clone_if_forward_ref): Do no work when forward_resolved - is already set. Set forward_resolved. - -2022-03-09 Aaron Merey - - gdb: Try searching for auto-load script using .gnu_debuglink - If an auto-load script cannot be found and objfile is a separate - debuginfo whose filename does not match the name found in the parent - file's .gnu_debuglink section, then repeat the search using the - parent's filename where the last component is replaced with the - .gnu_debuglink name. - - For example if the parent's filename is "/usr/lib/libxyz.so" and the - name in its .gnu_debuglink section is "libxyz.so.debug", then - if no auto-load script is otherwise found the search will be - repeated with the filename "/usr/lib/libxyz.so.debug". - - This helps gdb locate auto-load scripts when debuginfo files do not have - the expected filename, such as when they are aquired from debuginfod. - -2022-03-09 GDB Administrator - - Automatic date update in version.in - -2022-03-08 Aaron Merey - - PR gdb/27876 - debuginfod-downloaded source files don't pass proper fullname across mi / (gdb)info source - Source files downloaded from debuginfod currently use their original DWARF - filename as their "fullname". This causes a mismatch between the fullname - and the actual location of the source file in the debuginfod client cache. - - MI consumers such as VSCode will fail to open debuginfod-downloaded - source files due to this. Also 'info source' will fail to include the - true paths of these files. - - To fix this, use the debuginfod cache path as the fullname for debuginfod- - downloaded source files. - -2022-03-08 Jan Vrany - - gdb/mi: preserve user selected thread and frame when invoking MI commands - Fix for PR gdb/20684. When invoking MI commands with --thread and/or - --frame, the user selected thread and frame was not preserved: - - (gdb) - info thread - &"info thread\n" - ~" Id Target Id Frame \n" - ~"* 1 Thread 0x7ffff7c30740 (LWP 19302) \"user-selected-c\" main () at /home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c:60\n" - ~" 2 Thread 0x7ffff7c2f700 (LWP 19306) \"user-selected-c\" child_sub_function () at /home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c:30\n" - ~" 3 Thread 0x7ffff742e700 (LWP 19307) \"user-selected-c\" child_sub_function () at /home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c:30\n" - ^done - (gdb) - info frame - &"info frame\n" - ~"Stack level 0, frame at 0x7fffffffdf90:\n" - ~" rip = 0x555555555207 in main (/home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c:60); saved rip = 0x7ffff7c5709b\n" - ~" source language c.\n" - ~" Arglist at 0x7fffffffdf80, args: \n" - ~" Locals at 0x7fffffffdf80, Previous frame's sp is 0x7fffffffdf90\n" - ~" Saved registers:\n " - ~" rbp at 0x7fffffffdf80, rip at 0x7fffffffdf88\n" - ^done - (gdb) - -stack-info-depth --thread 3 - ^done,depth="4" - (gdb) - info thread - &"info thread\n" - ~" Id Target Id Frame \n" - ~" 1 Thread 0x7ffff7c30740 (LWP 19302) \"user-selected-c\" main () at /home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c:60\n" - ~" 2 Thread 0x7ffff7c2f700 (LWP 19306) \"user-selected-c\" child_sub_function () at /home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c:30\n" - ~"* 3 Thread 0x7ffff742e700 (LWP 19307) \"user-selected-c\" child_sub_function () at /home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c:30\n" - ^done - (gdb) - info frame - &"info frame\n" - ~"Stack level 0, frame at 0x7ffff742dee0:\n" - ~" rip = 0x555555555169 in child_sub_function (/home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c:30); saved rip = 0x555555555188\n" - ~" called by frame at 0x7ffff742df00\n" - ~" source language c.\n" - ~" Arglist at 0x7ffff742ded0, args: \n" - ~" Locals at 0x7ffff742ded0, Previous frame's sp is 0x7ffff742dee0\n" - ~" Saved registers:\n " - ~" rbp at 0x7ffff742ded0, rip at 0x7ffff742ded8\n" - ^done - (gdb) - - This caused problems for frontends that provide access to CLI because UI - may silently change the context for CLI commands (as demonstrated above). - - This commit fixes the problem by restoring thread and frame in - mi_cmd_execute (). With this change, there are only two GDB/MI commands - that can change user selected context: -thread-select and -stack-select-frame. - This allows us to remove all and rather complicated logic of notifying - about user selected context change from mi_execute_command (), leaving it - to these two commands themselves to notify. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=20684 - -2022-03-08 Andrew Burgess - - gdb: announce upcoming removal of Python 2 support from gdb - As has been discussed here: - - https://sourceware.org/pipermail/gdb-patches/2022-January/184910.html - - Python 2 support will be removed from GDB after GDB 12 has branched. - This commit places an entry in the NEWS file to inform users of this - decision. - -2022-03-08 GDB Administrator - - Automatic date update in version.in - -2022-03-07 Andrew Burgess - - gdb/testsuite: add new test for comparing char types in Python - There's an interesting property of the 'char' type in C and C++, the - three types 'char', 'unsigned char', and 'signed char', are all - considered distinct. - - In contrast, and 'int' is signed by default, and so 'int' and 'signed - int' are considered the same type. - - This commit adds a test to ensure that this edge case is visible to a - user from Python. - - It is worth noting that for any particular compiler implementation (or - the flags a compiler was invoked with), a 'char' will be either signed - or unsigned; it has to be one or the other, and a user can access this - information by using the Type.is_signed property. However, for - something like function overload resolution, the 'char' type is - considered distinct from the signed and unsigned variants. - - There's no change to GDB with this commit, this is just adding a new - test to guard some existing functionality. - -2022-03-07 Andrew Burgess - - gdb/python: add Type.is_signed property - Add a new read-only property, Type.is_signed, which is True for signed - types, and False otherwise. - - This property should only be read on types for which Type.is_scalar is - true, attempting to read this property for non-scalar types will raise - a ValueError. - - I chose 'is_signed' rather than 'is_unsigned' in order to match the - existing Architecture.integer_type method, which takes a 'signed' - parameter. As far as I could find, that was the only existing - signed/unsigned selector in the Python API, so it seemed reasonable to - stay consistent. - -2022-03-07 Andrew Burgess - - gdb/python: add Type.is_scalar property - Add a new read-only property which is True for scalar types, - otherwise, it's False. - -2022-03-07 Andrew Burgess - - gdb/mi: add --no-connection to MI -add-inferior command - Following on from the previous commit, where the -add-inferior command - now uses the same connection as the current inferior, this commit adds - a --no-connection option to -add-inferior. - - This new option matches the existing option of the same name for the - CLI version of add-inferior; the new inferior is created with no - connection. - - I've added a new 'connection' field to the MI output of -add-inferior, - which includes the connection number and short name. I haven't - included the longer description field, this is the MI after all. My - expectation would be that if the frontend wanted to display all the - connection details then this would be looked up from 'info - connection' (or the MI equivalent if/when such a command is added). - - The existing -add-inferior tests are updated, as are the docs. - -2022-03-07 Umair Sair - - gdb/mi: fix regression in mi -add-inferior command - Prior to the multi-target support commit: - - commit 5b6d1e4fa4fc6827c7b3f0e99ff120dfa14d65d2 - Date: Fri Jan 10 20:06:08 2020 +0000 - - Multi-target support - - When a new inferior was added using the MI -add-inferior command, the - new inferior would be using the same target as all the other - inferiors. This makes sense, GDB only supported a single target stack - at a time. - - After the above commit, each inferior has its own target stack. - - To maintain backward compatibility, for the CLI add-inferior command, - when a new inferior is added the above commit has the new inferior - inherit a copy of the target stack from the current inferior. - - Unfortunately, this same backward compatibility is missing for the MI. - - This commit fixes this oversight. - - Now, when the -add-inferior MI command is used, the new inferior will - inherit a copy of the target stack from the current inferior. - -2022-03-07 Tom Tromey - - Deprecate dbx mode - GDB has a dbx emulation mode that adds a few aliases and helper - commands. This mode is barely documented and is very superficial - besides. I suspect it is rarely used, and I would like to propose - deprecating it for GDB 12, and then removing it in GDB 13. - -2022-03-07 Pedro Alves - - Remove unnecessary inferior lookup in infrun:handle_one - infrun.c:handle_one calls find_inferior_ptid unnecessarily, since we - already have a thread pointer handy, and the thread has a pointer to - the inferior. This commit removes the unnecessary lookup. - - Change-Id: I2ae18601dd75346c6c91068e9a4f9a6484fb3339 - -2022-03-07 Tom Tromey - - Fix bug in ada_print_floating - ada_print_floating rewrites a floating-point string representation to - conform to Ada syntax. However, if you managed to get a floating - point error, you might see: - - (gdb) print whatever - $2 = - - What's happening here is that ada_print_floating doesn't recognize - this error case, and proceeds to modify the error text. - - This patch fixes this problem. - -2022-03-07 Tom Tromey - - Implement real literal extension for Ada - Sometimes it is convenient to be able to specify the exact bits of a - floating-point literal. For example, you may want to set a - floating-point register to a denormalized value, or to a particular - NaN. - - In C, you can do this by combining the "{}" cast with an array - literal, like: - - (gdb) p {double}{0x576488BDD2AE9FFE} - $1 = 9.8765449999999996e+112 - - This patch adds a somewhat similar idea to Ada. It extends the lexer - to allow "l" and "f" suffixes in a based literal. The "f" indicates a - floating-point literal, and the "l"s control the size of the - floating-point type. - - Note that this differs from Ada's based real literals. I believe - those can also be used to control the bits of a floating-point value, - but they are a bit more cumbersome to use (simplest is binary but - that's also very lengthy). Also, these aren't implemented in GDB. - - I chose not to allow this extension to work with based integer - literals with exponents. That didn't seem very useful. - -2022-03-07 Tom Tromey - - Fix Ada integer literals with exponents - While working on another patch, I noticed that Ada integer literals - with exponents did not work. For example, with one form you get an - error: - - (gdb) print 8e2 - Invalid digit `e' in based literal - - And with another form you get an incorrect value: - - (gdb) print 16#8#e2 - $2 = 8 - - This patch fixes the bugs and adds tests. - -2022-03-07 Tom Tromey - - Fix gdb.ada/arrayptr.exp results - PR ada/28115 points out that gdb.ada/arrayptr.exp works with GNAT 12, - but fails with minimal encodings in earlier versions. - - This patch updates the test to try to report the results correctly. I - tried this with the Fedora 34 system gcc (GCC 11) and with a GCC 12 - built from git trunk sometime relatively recently. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28115 - -2022-03-07 Tom Tromey - - Handle non-ASCII identifiers in Ada - Ada allows non-ASCII identifiers, and GNAT supports several such - encodings. This patch adds the corresponding support to gdb. - - GNAT encodes non-ASCII characters using special symbol names. - - For character sets like Latin-1, where all characters are a single - byte, it uses a "U" followed by the hex for the character. So, for - example, thorn would be encoded as "Ufe" (0xFE being lower case - thorn). - - For wider characters, despite what the manual says (it claims - Shift-JIS and EUC can be used), in practice recent versions only - support Unicode. Here, characters in the base plane are represented - using "Wxxxx" and characters outside the base plane using - "WWxxxxxxxx". - - GNAT has some further quirks here. Ada is case-insensitive, and GNAT - emits symbols that have been case-folded. For characters in ASCII, - and for all characters in non-Unicode character sets, lower case is - used. For Unicode, however, characters that fit in a single byte are - converted to lower case, but all others are converted to upper case. - - Furthermore, there is a bug in GNAT where two symbols that differ only - in the case of "Y WITH DIAERESIS" (and potentially others, I did not - check exhaustively) can be used in one program. I chose to omit - handling this case from gdb, on the theory that it is hard to figure - out the logic, and anyway if the bug is ever fixed, we'll regret - having a heuristic. - - This patch introduces a new "ada source-charset" setting. It defaults - to Latin-1, as that is GNAT's default. This setting controls how "U" - characters are decoded -- W/WW are always handled as UTF-32. - - The ada_tag_name_from_tsd change is needed because this function will - read memory from the inferior and interpret it -- and this caused an - encoding failure on PPC when running a test that tries to read - uninitialized memory. - - This patch implements its own UTF-32-based case folder. This avoids - host platform quirks, and is relatively simple. A short Python - program to generate the case-folding table is included. It simply - relies on whatever version of Unicode is used by the host Python, - which seems basically acceptable. - - Test cases for UTF-8, Latin-1, and Latin-3 are included. This - exercises most of the new code paths, aside from Y WITH DIAERESIS as - noted above. - -2022-03-07 Tom Tromey - - Define HOST_UTF32 in charset.h - rust-parse.c has a #define for the host-specific UTF-32 charset name. - A later patch needs the same thing, so this patch moves the definition - to charset.h for easier reuse. - -2022-03-07 Tom Tromey - - Let phex and phex_nz handle sizeof_l==1 - Currently, neither phex nor phex_nz handle sizeof_l==1 -- they let - this case fall through to the default case. However, a subsequent - patch in this series needs this case to work correctly. - - I looked at all calls to these functions that pass a 1 for the - sizeof_l parameter. The only such case seems to be correct with this - change. - -2022-03-07 Tom Tromey - - Don't pre-size result string in ada_decode - Currently, ada_decode pre-sizes the output string, filling it with 'X' - characters. However, it's a bit simpler and more flexible to let - std::string do the work here, and simply append characters to the - string as we go. This turns out to be useful for a subsequent patch. - - Simplify a regular expression in ada-lex.l - ada-lex.l uses "%option case-insensitive", so there is no need for - regular expressions to match upper case. - -2022-03-07 GDB Administrator - - Automatic date update in version.in - -2022-03-06 Maciej W. Rozycki - - MIPS/opcodes: Fix alias annotation for branch instructions - Correct issues with INSN2_ALIAS annotation for branch instructions: - - - regular MIPS BEQZ/L and BNEZ/L assembly instructions are idioms for - BEQ/L and BNE/L respectively with the `rs' operand equal to $0, - - - microMIPS 32-bit BEQZ and BNEZ assembly instructions are idioms for - BEQ and BNE respectively with the `rt' operand equal to $0, - - - regular MIPS BAL assembly instruction is an idiom for architecture - levels of up to the MIPSr5 ISA and a machine instruction on its own - from the MIPSr6 ISA up. - - Add missing annotation to BEQZ/L and BNEZ/L accordingly then and add a - new entry for BAL for the MIPSr6 ISA, correcting a disassembly bug: - - $ mips-linux-gnu-objdump -m mips:isa64r6 -M no-aliases -d bal.o - - bal.o: file format elf32-tradlittlemips - - Disassembly of section .text: - - 00000000 : - 0: 04110000 0x4110000 - ... - $ - - Add test cases accordingly. - - Parts for regular MIPS BEQZ/L and BNEZ/L instructions from Sagar Patel. - - 2022-03-06 Maciej W. Rozycki - - binutils/ - * 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-06 Sagar Patel - Maciej W. Rozycki - - opcodes/ - * 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-03-06 Tom Tromey - - Use function view when iterating over block symbols - This changes iterate_over_block_local_vars and - iterate_over_block_arg_vars to take a gdb::function_view rather than a - function pointer and a user-data. In one spot, this allows us to - remove a helper structure and helper function. In another spot, this - looked more complicated, so I changed the helper function to be an - "operator()" -- also a simplification, just not as big. - -2022-03-06 Tom Tromey - - Simplify hppa-tdep.c use of objfile_key - I happened to notice a couple of unnecessary casts in hppa-tdep.c, and - then I saw that the use of objfile_key could be simplified -- removing - some code and using the default deleter rather than noop_deleter. - - Tested by rebuilding. Let me know what you think. - -2022-03-06 Simon Marchi - - gdb: constify parameter of value_copy - In a following patch, I have a const value I want to copy using a - value_copy. However, value_copy takes a non-const source value, at the - moment. Change the paramter to be const, - - If the source value is not lazy, we currently call - value_contents_all_raw, which calls allocate_value_contents, to get a - view on the contents. They both take a non-const value, that's a - problem. My first attempt at solving it was to add a const version of - value_contents_all_raw, make allocate_value_contents take a const value, - and either: - - - make value::contents mutable - - make allocate_value_contents cast away the const - - The idea being that allocating the value contents buffer does modify the - value at the bit level, but logically that doesn't change its state. - - That was getting a bit complicated, so what I ended up doing is make - value_copy not call value_contents_all_raw. We know at this point that - the value is not lazy, so value::contents must have been allocate - already. - - Change-Id: I3741ab362bce14315f712ec24064ccc17e3578d4 - -2022-03-06 Simon Marchi - - gdb: remove internalvar_funcs::destroy - No kind of internal var uses it remove it. This makes the transition to - using a variant easier, since we don't need to think about where this - should be called (in a destructor or not), if it can throw, etc. - - Change-Id: Iebbc867d1ce6716480450d9790410d6684cbe4dd - -2022-03-06 GDB Administrator - - Automatic date update in version.in - -2022-03-05 GDB Administrator - - Automatic date update in version.in - -2022-03-04 Tom Tromey - - Mark vDSO as not a file - The vDSO objfile is not a real file, so mark it as such. I noticed - this because, when playing with debuginfod, I saw: - - Downloading 0.01 MB separate debug info for /tmp/system-supplied DSO at 0x7ffff7fc9000 - - That "/tmp" is wrong -- it's just gdb's cwd. This patch corrects the - problem, resulting in: - - Downloading 0.01 MB separate debug info for system-supplied DSO at 0x7ffff7fc9000 - - Regression tested on x86-64 Fedora 34. - -2022-03-04 Simon Marchi - - binutils/readelf: fix indentation in process_dynamic_section - Clangd shows a warning about misleading indentation in this file, fix - it. - - binutils/ChangeLog: - - * readelf.c (process_dynamic_section): Fix indentation. - - Change-Id: I43a7f4f4c75dd080af614222b980526f5debf297 - -2022-03-04 Christina Schimpe - - gdb: Use a typedef's scoped type name to identify local typedefs - GDB prints the wrong type for typedefs in case there is another typedef - available for the same raw type (gdb/16040). The reason is that the - current hashmap based substitution mechanism always compares the target - type of a typedef and not its scoped name. - - The original output of GDB for a program like - - ~~~~ - 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; } - }; - - int main() - { - TypedefHolder th; - return 0; - } - ~~~~ - - is - ~~~~ - - (gdb) b 27 - Breakpoint 1 at 0x1131: file TypedefHolder.cc, line 27. - (gdb) r - Starting program: /tmp/typedefholder - - Breakpoint 1, main () at TypedefHolder.cc:27 - 27 return 0; - (gdb) ptype th - type = class TypedefHolder { - public: - class_double a; - class_double b; - class_double c; - private: - class_double d; - - class_double method1(class_double); - class_double method2(class_double); - - typedef double class_double; - } - ~~~~ - - Basically all attributes of a class which have the raw type "double" are - substituted by "class_double". - - With the patch the output is the following - - ~~~~ - type = class TypedefHolder { - public: - double a; - ns::scoped_double b; - global_double c; - private: - class_double d; - - double method1(ns::scoped_double); - double method2(global_double); - - typedef double class_double; - } - ~~~~ - -2022-03-04 Jan Beulich - - RISC-V: make .insn actually work for 64-bit insns - Presently in this case, due to an undefined behavior shift, at least - with x86 cross builds I'm observing: - - Error: value conflicts with instruction length `8,0x0000003f' - - Eliminate the UB and extend the respective testcase. - -2022-03-04 Jan Beulich - - x86: drop redundant x86-64-code16-2 test - The code16-2 test is already meaningless enough as a gas test, identical - to this one, and is run uniformly for all ELF targets anyway. - -2022-03-04 GDB Administrator - - Automatic date update in version.in - -2022-03-03 Roland McGrath - - Fix typo in last change. - -2022-03-03 Roland McGrath - - Avoid conflict with gnulib open/close macros. - On some systems, the gnulib configuration will decide to define open - and/or close as macros to replace the POSIX C functions. This - interferes with using those names in C++ class or namespace scopes. - - gdbsupport/ - * event-pipe.cc (event_pipe::open): Renamed to ... - (event_pipe::open_pipe): ... this. - (event_pipe::close): Renamed to ... - (event_pipe::close_pipe): ... this. - * event-pipe.h (class event_pipe): Updated. - gdb/ - * inf-ptrace.h (async_file_open, async_file_close): Updated. - gdbserver/ - * gdbserver/linux-low.cc (linux_process_target::async): Likewise. - -2022-03-03 Alan Modra - - Adjust ld ctf test for 32-bit targets - powerpc-linux, and I suspect other 32-bit targets, report "aligned at - 0x4" for this test. - - * testsuite/ld-ctf/nonrepresentable.d: Accept any alignment. - -2022-03-03 Luis Machado - - Update my e-mail address in the MAINTAINERS file - Update the information accordingly. - -2022-03-03 Tiezhu Yang - - gdb: testsuite: fix failed testcases in gdb.base/gdb-caching-proc.exp - When execute the following command: - - make check-gdb TESTS="gdb.base/gdb-caching-proc.exp" - - we can see there exist some failed testcases: - - FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 0: can spawn for attach (got interactive prompt) - FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 1: can spawn for attach (got interactive prompt) - FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 2: can spawn for attach (got interactive prompt) - FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 3: can spawn for attach (got interactive prompt) - FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 4: can spawn for attach (got interactive prompt) - FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 5: can spawn for attach (got interactive prompt) - FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 6: can spawn for attach (got interactive prompt) - FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 7: can spawn for attach (got interactive prompt) - FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 8: can spawn for attach (got interactive prompt) - FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 9: can spawn for attach (got interactive prompt) - - here are the detailed messages in gdb/testsuite/gdb.log: - - attach 873776 - A program is being debugged already. Kill it? (y or n) n - Not killed. - (gdb) FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 0: can spawn for attach (got interactive prompt) - - so handle the case "A program is being debugged already. Kill it" in - can_spawn_for_attach to fix the failed testcases. - -2022-03-03 Alan Modra - - comment typo fix - -2022-03-03 Alan Modra - - PowerPC64 DT_RELR relative reloc addresses - Section addresses can change between ppc64_elf_size_stubs and - ppc64_elf_build_stubs due to .eh_frame editing. The idea of stashing - r_offset final addresses calculated in ppc64_elf_size_stubs for use by - ppc64_elf_build_stubs was never a good idea. Instead, we need to keep - section/offset pairs. - - * elf64-ppc.c (struct ppc_link_hash_table): Delete relr_addr. - Add relr section/offset array. - (append_relr_off): Rewrite. Update all callers. - (sort_relr): New function. - (ppc64_elf_size_stubs): Adjust to suit new relative reloc stash. - (ppc64_elf_build_stubs): Likewise. - -2022-03-03 GDB Administrator - - Automatic date update in version.in - -2022-03-02 John Baldwin - - configure: Stop checking for PT_GETXMMREGS. - This request is present on all modern *BSD/i386 systems (those - released since mid-2006), and the *BSD/i386 targets now assume it is - present unconditionally. - - i386-bsd-nat: Assume PT_GETXMMREGS is present. - NetBSD has included PT_GETXMMREGS since 1.6 released in September - 2002. OpenBSD has included PT_GETXMMREGS since 3.8 released in - November 2005. - - i386-fbsd-nat: Assume PT_GETXMMREGS is present. - PT_GETXMMREGS was first added in FreeBSD 6.0 released in November 2005. - The last FreeBSD release without support was 5.5 released in May 2006. - -2022-03-02 John Baldwin - - fbsd-tdep: Implement the vsyscall_range gdbarch hook. - FreeBSD recently added a real vDSO in its shared page for the amd64 - architecture. The vDSO is mapped at the address given by the - AT_KPRELOAD ELF auxiliary vector entry. To find the end of the - mapping range, parse the list of virtual map entries used by 'info - proc mappings' either from the NT_PROCSTAT_VMMAP core dump note, or - via the kinfo_getvmmap function for native targets (fetched from the - native target as the TARGET_OBJECT_FREEBSD_VMMAP object). - - This silences warnings on recent FreeBSD/amd64 kernels due to not - finding symbols for the vdso: - - warning: Could not load shared library symbols for [vdso]. - Do you need "set solib-search-path" or "set sysroot"? - -2022-03-02 Tom Tromey - - Rewrite make-target-delegates in Python - I think gdb is probably better off having fewer languages involved - when generating code. 'sh' is unavoidable for build-time generation, - but for other things, let's use Python. - - This rewrites make-target-delegates in Python. I've stuck pretty - closely to the original code in this rewrite, so it may look slightly - weird from a Python perspective. - - The only output difference is that a copyright header is now - generated, using the code introduced in the previous patch. - - make-target-delegates.py is simpler to invoke, as it knows the correct - input file to scan and it creates the output file itself. - -2022-03-02 Tom Tromey - - Move copyright code from gdbarch.py to new file - This moves the copyright code from gdbarch.py to a new Python source - file, gdbcopyright.py. The function in this file will find the - copyright dates by scanning the calling script. This will be reused - in a future patch. - - This involved minor changes to the output of gdbarch.py. Also, I've - updated copyright.py to remove the reference to gdbarch.sh. We don't - need to mention gdbarch.py there, either. - -2022-03-02 GDB Administrator - - Automatic date update in version.in - -2022-03-01 Tom Tromey - - Some "distclean" fixes in gdb - PR build/12440 points out that "make distclean" is broken in gdb. - Most of the breakage comes from other projects in the tree, but we can - fix some of the issues, which is what this patch does. - - Note that the yacc output files, like c-exp.c, are left alone. In a - source distribution, these are included in the tarball, and if the - user builds in-tree, we would not want to remove them. - - While that seems a bit obscure, it seems to me that "distclean" is - only really useful for in-tree builds anyway -- out-of-tree I simply - delete the entire build directory and start over. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=12440 - -2022-03-01 Tom Tromey - - Fix typo in the "alias" example - PR cli/17332, filed around 8 years ago, points out a typo in the docs - -- in one example, the command and its output are obviously out of - sync. This patch fixes it. I'm checking this in as obvious. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17332 - -2022-03-01 Nick Clifton - - Fix a typo in the previous delta to bfdio.c. - PR 25713 - * bfdio.c (_bfd_real_fopen): Fix typo. - -2022-03-01 Alan Modra - - Revert "Check thin archive element file size against archive header" - This reverts commit 48e3e6aec8a4f37d00ea6c0da3ab45e76490e3db. - - PR 28929 - * archive.c (_bfd_get_elt_at_filepos): Don't check thin archive - element file size. - -2022-03-01 Nick Clifton - - Fix linker tests to compile with gcc-12. - 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. - - Prevent an assertion from being triggered when linking an ARM object file with incorrectly set build attributes. - PR 28848 - PR 28859 - * 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-03-01 Tiezhu Yang - - gdb: testsuite: fix wrong expected result in attach-pie-noexec.exp - If /proc/sys/kernel/yama/ptrace_scope is 1, when execute the test case - gdb.base/attach-pie-noexec.exp without superuser, the gdb.log shows the - following info: - - (gdb) attach 6500 - Attaching to process 6500 - ptrace: Operation not permitted. - (gdb) PASS: gdb.base/attach-pie-noexec.exp: attach - - It is obviously wrong, the expected result should be UNSUPPORTED in such - a case. - - It is better to make can_spawn_for_attach to return false for this case. - It would have to setup a small test program, compile it to exec, spawn it - and try to attach to it. - - With this patch, we can see "Operation not permitted" in the log info, - and then we can do the following processes to test: - (1) set ptrace_scope as 0 - $ echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope - $ make check-gdb TESTS="gdb.base/attach-pie-noexec.exp" - (2) use sudo - $ sudo make check-gdb TESTS="gdb.base/attach-pie-noexec.exp" - - Additionally, handle the other cases when test with RUNTESTFLAGS= - "--target_board=native-extended-gdbserver". - -2022-03-01 Tiezhu Yang - - gdb: testsuite: print explicit test result in can_spawn_for_attach - In the current code, there is no test result when execute the following - commands: - - $ make check-gdb TESTS="gdb.base/attach-pie-noexec.exp" RUNTESTFLAGS="--target_board=remote-gdbserver-on-localhost" - $ make check-gdb TESTS="gdb.base/attach-pie-noexec.exp" RUNTESTFLAGS="--target_board=native-gdbserver" - - It is better to print explicit test result in can_spawn_for_attach. - -2022-03-01 Tiezhu Yang - - gdb: add Tiezhu Yang as LoongArch maintainer - The patch series "gdb: Add basic support for LoongArch" has been - merged into master, list Tiezhu Yang as LoongArch maintainer. - -2022-03-01 GDB Administrator - - Automatic date update in version.in - -2022-02-28 Keith Seitz - - Fix "spawn id XYZ not open" errors in gdb.mi/mi-exec-run.exp - Running mi-exec-run.exp on native-extended-gdbserver/-m{32,64} - causes several Tcl errors to appear. For example, - - (gdb) - ERROR: : spawn id exp20 not open - while executing - "expect { - -i exp11 -timeout 10 - -i "$inferior_spawn_id" - -re ".*Cannot exec.*Permission denied" { - set saw_perm_error 1 - verbose -log "saw..." - ("uplevel" body line 1) - invoked from within - "uplevel $body" NONE : spawn id exp20 not open - UNRESOLVED: gdb.mi/mi-exec-run.exp: inferior-tty=separate: mi=separate: force-fail=1: run failure detected (eof) - - This is happening because of the way this test is implemented: - - while {1} { - gdb_expect { - -i "$inferior_spawn_id" - -re ".*Cannot exec.*Permission denied" { - set saw_perm_error 1 - verbose -log "saw mi error" - } - -i "$gdb_spawn_id" - -re "\\^error,msg=\"During startup program exited with code 127" { - set saw_mi_error 1 - verbose -log "saw mi error" - } - # and so on - } - } - - The first time this loop is executed, `inferior_spawn_id' is valid. When the - first branch of the expect statement is reached, gdbserver has exited, closing - the spawn_id. Since we haven't seen the gdb-side error yet, the loop is executed - again. The first branch now refers to a non-existent spawn_id, leading to the error. - - This can be fixed by using exp_continue to loop in expect instead of looping around - expect, which is the approach I have used[1]. Note I've had to update the expected - message for the "During startup..." error message when running with gdbserver. - - One other small change I've made is to add a log entry which spills the values of - the two variables, saw_mi_error and saw_perm_error (and updated the log output - for the later). This should make the log output clearer about why the test failed. - - With this patch installed, all the ERRORs disappear, leaving previously masked - FAILs (which I have not attempted to fix). - - [1] Anyone know why this test doesn't simply use gdb_test_multiple? I can only - assume that it was intentionally written this way, and I've modified the code with - that assumption. I have tested a version using gdb_test_multiple, and that appears - to work fine, too, if that is preferred. [It still employs exp_continue to fix the - spawn_id errors.] - -2022-02-28 Tom Tromey - - Add more filename styling - I found a few spots where filename styling ought to be applied, but is - not. - -2022-02-28 Tom Tromey - - Fix maybe-uninitialized warning in py-infthread.c - I got this warning from py-infthread.c using the Fedora 34 system GCC: - - ../../binutils-gdb/gdb/python/py-infthread.c:102:30: warning: ‘extra_info’ may be used uninitialized in this function [-Wmaybe-uninitialized] - - I think this happens because GDB_PY_HANDLE_EXCEPTION expands to an - 'if' whose condition is always true -- but GCC can't know this. This - patch avoids the warning by adding a harmless initialization. - -2022-02-28 Tom Tromey - - Handle multi-byte bracket sequences in Ada lexer - As noted in an earlier patch, the Ada lexer does not handle multi-byte - bracket sequences. This patch adds support for these for character - literals. gdb does not generally seem to handle the Ada wide string - types, so for the time being these continue to be excluded -- but an - explicit error is added to make this more clear. - -2022-02-28 Tom Tromey - - Handle 'QWW' encoding case in Ada enums - In Ada, an enum can contain character literals. GNAT encodes these - values in a special way. For example, the Unicode character U+0178 - would be represented as 'QW0178' in the DWARF: - - <3><112f>: Abbrev Number: 2 (DW_TAG_enumerator) - <1130> DW_AT_name : (indirect string, offset: 0x19ff): QW0178 - <1134> DW_AT_const_value : 2 - - gdb handles this reasonably well, but failed to handle the 'QWW' - encoding, which is used for characters outside the base plane. - - Also, while working on this, I noticed that gdb will print the decimal - value for an enum character constant: - - (gdb) print Char_X - $2 = 1 'x' - - This is a nice feature, IMO, because in this situation the 'x' enum - constant does not have its usual decimal value -- it has the value - that's assigned based on the enumeration type. - - However, gdb did not do this when it decided to print the constant - using the bracket notation: - - (gdb) print Char_Thorn - $3 = ["de"] - - This patch changes gdb to print the decimal value here as well, and to - put the bracket notation in single quotes -- otherwise gdb will be - printing something that it can't then read. Now it looks like: - - (gdb) print Char_Thorn - $3 = 4 '["de"]' - - Note that gdb can't read longer bracket notations, like the other ones - printed in this test case: - - (gdb) print Char_King - $4 = 3 '["01fa00"]' - - While I think this is a bug, I plan to fix it separately. - - Finally, in the new test case, the copyright dates are chosen this way - because this all started as a copy of an existing test. - -2022-02-28 Andrew Burgess - - gdb/python: Add gdb.InferiorThread.details attribute - This adds a new read-only attribute gdb.InferiorThread.details, this - attribute contains a string, the results of target_extra_thread_info - for the thread, or None, if target_extra_thread_info returns nullptr. - - As the string returned by target_extra_thread_info is unstructured, - this attribute is only really useful for echoing straight through to - the user, but, if a user wants to write a command that displays the - same, or a similar 'Thread Id' to the one seen in 'info threads', then - they need access to this string. - - Given that the string produced by target_extra_thread_info varies by - target, there's only minimal testing of this attribute, I check that - the attribute can be accessed, and that the return value is either - None, or a string. - -2022-02-28 Keith Seitz - - Error when gdb_is_target_1 is called without running gdb instance - This is a snafu that I encountered while implementing the previous - patch, which attempted to use gdb_is_target_native. This proc and - gdb_is_target_remote both rely on gdb_is_target_1, which actually - cannot be called without gdb already running. - - This patch adds appropriate warning comments to these procs and - causes gdb_is_target_1 to issue a Tcl error if it is called without a - gdb instance already running. This should prevent unwitting callers - from using this at the wrong time. - -2022-02-28 Keith Seitz - - Fix gdb.fortran "failed to extract expected results" errors - When running the gdb.fortran tests array-slices.exp and lbound-ubound.exp, - the test suite throws several ERRORs on native-gdbserver/-m{32,64}, - and native-extended-gdbsever/-m{32,64}: - - [on native-extended-gdbserver/-m64] - Running /home/keiths/work/gdb/branches/testsuite-errors/linux/gdb/testsuite/../../../src/gdb/testsuite/gdb.fortran/array-slices.exp ... - ERROR: failed to extract expected results - ERROR: failed to extract expected results - Running /home/keiths/work/gdb/branches/testsuite-errors/linux/gdb/testsuite/../../../src/gdb/testsuite/gdb.fortran/lbound-ubound.exp ... - ERROR: failed to extract expected results for lbound - - This occurs because the tests require inferior I/O which we do not have - access to while using these targets. - - This patch skips these tests when running on non-native targets. - -2022-02-28 Torbj?rn Svensson - - Further correct the handling of long pathnames on Windows hosts. - PR 25713 - * bfdio.c (_bfd_real_fopen): Fix handling of parhs longer than 260 - characters on Windows hosts. - -2022-02-28 Nick Clifton - - Clarify the wording of the error message when an obsolete configuration is encountered. - PR 28886 - * config.bfd: Update error message for obsolete configurations. - -2022-02-28 GDB Administrator - - Automatic date update in version.in - -2022-02-27 GDB Administrator - - Automatic date update in version.in - -2022-02-26 Kevin Buettner - - Handle recursive internal problem in gdb_internal_error_resync - I came across this problem when testing gdb.base/gdb-sigterm.exp - on a machine with a pre-release version of glib-2.34 installed: - - A problem internal to GDB has been detected, - further debugging may prove unreliable. - Quit this debugging session? (y or n) Recursive internal problem. - FAIL: gdb.base/gdb-sigterm.exp: expect eof #0 (GDB internal error) - Resyncing due to internal error. - ERROR: : spawn id exp11 not open - while executing - "expect { - -i exp11 -timeout 10 - -re "Quit this debugging session\\? \\(y or n\\) $" { - send_gdb "n\n" answer - incr count - } - -re "Create..." - ("uplevel" body line 1) - invoked from within - "uplevel $body" NONE : spawn id exp11 not open - ERROR: Could not resync from internal error (timeout) - gdb.base/gdb-sigterm.exp: expect eof #0: stepped 9 times - UNRESOLVED: gdb.base/gdb-sigterm.exp: 50 SIGTERM passes - - I don't have a problem with the latter ERROR nor the UNRESOLVED - messages. However the first ERROR regarding the exp11 spawn id - not being open is not especially useful. - - This commit handles the "Recursive internal problem" case, avoiding - the problematic ERROR shown above. - - With this commit in place, the log messages look like this instead: - - A problem internal to GDB has been detected, - further debugging may prove unreliable. - Quit this debugging session? (y or n) Recursive internal problem. - FAIL: gdb.base/gdb-sigterm.exp: expect eof #15 (GDB internal error) - Resyncing due to internal error. - ERROR: Could not resync from internal error (recursive internal problem) - gdb.base/gdb-sigterm.exp: expect eof #15: stepped 12 times - UNRESOLVED: gdb.base/gdb-sigterm.exp: 50 SIGTERM passes - - gdb/testsuite/ChangeLog: - - * lib/gdb.exp (gdb_internal_error_resync): Handle "Recursive - internal problem". - -2022-02-26 GDB Administrator - - Automatic date update in version.in - -2022-02-25 Aaron Merey - - gdb-add-index: disable debuginfod - gdb-add-index may trigger debuginfod's first-use notice. The notice - is misleading in this case. It instructs the user to modify .gdbinit - in order to permanently enable/disable debuginfod but gdb-add-index - invokes gdb with -nx which ignores .gdbinit. - - Additionally debuginfod is not needed for gdb-add-index since the - symbol file is given as an argument and should already be present - locally. - - Fix this by disabling debuginfod when gdb-add-index invokes gdb. - -2022-02-25 Andrew Burgess - - gdb: add operator+= and operator+ overload for std::string - This commit adds operator+= and operator+ overloads for adding - gdb::unique_xmalloc_ptr to a std::string. I could only find 3 - places in GDB where this was useful right now, and these all make use - of operator+=. - - I've also added a self test for gdb::unique_xmalloc_ptr, which - makes use of both operator+= and operator+, so they are both getting - used/tested. - - There should be no user visible changes after this commit, except when - running 'maint selftest', where the new self test is visible. - -2022-02-25 Tom Tromey - - Print MI prompt on interrupted command - Joel noticed that if the remote dies unexpectedly during a command -- - you can simulate this by using "continue" and then killing gdbserver - -- then the CLI will print a new prompt, but MI will not. Later, we - found out that this was also filed in bugzilla as PR mi/23820. - - The output looks something like this: - - | (gdb) - | cont - | &"cont\n" - | ~"Continuing.\n" - | ^running - | *running,thread-id="all" - | (gdb) - | [... some output from GDB during program startup...] - | =thread-exited,id="1",group-id="i1" - | =thread-group-exited,id="i1" - | &"Remote connection closed\n" - - Now, what about that "(gdb)" in the middle? - - That prompt comes from this questionable code in - mi-interp.c:mi_on_resume_1: - - /* This is what gdb used to do historically -- printing prompt - 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); - - ... which seems like something to remove. But maybe the intent here - is that this prompt is sufficient, and MI clients must be ready to - handle output coming after a prompt. On the other hand, if this code - *is* removed, then nothing would print a prompt in this scenario. - - Anyway, the CLI and the TUI handle emitting the prompt here by hooking - into gdb::observers::command_error, but MI doesn't install an observer - here. - - This patch adds the missing observer and arranges to show the MI - prompt. Regression tested on x86-64 Fedora 34. - - It seems like this area could be improved a bit, by having - start_event_loop call the prompt-displaying code directly, rather than - indirecting through an observer. However, I haven't done this. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=23820 - -2022-02-25 Andrew Burgess - Tom Tromey - - gdb/testsuite: fix list.exp test cases - PR testsuite/7142 -- old enough to have been converted from Gnats -- - points out that test_list_filename_and_function in gdb.base/list.exp - has "fails" that are unmatched with passes. This patch cleans this up - a little. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7142 - -2022-02-25 Tsukasa OI - - RISC-V: Remove a loop in the ISA parser - Since commit e601909a3287bf541c6a7d82214bb387d2c76d82 ("RISC-V: Support - to parse the multi-letter prefix in the architecture string.") changed - so that all prefixed extensions are parsed in single - riscv_parse_prefixed_ext call, a "while" loop on riscv_parse_subset - is no longer required. - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_parse_subset): Remove unnecessary loop. - -2022-02-25 Tsukasa OI - - RISC-V: Fix mask for some fcvt instructions - This commit fixes incorrect uses of mask values in 'fcvt' instruction - family. - - opcodes/ChangeLog: - - * riscv-opc.c (riscv_opcodes): Fix incorrect uses of mask values - in 'fcvt' instruction family. - -2022-02-25 Keith Seitz - - Support template lookups in strncmp_iw_with_mode - This patch adds support for wild template parameter list matches, similar - to how ABI tags or function overloads are now handled. - - With this patch, users will be able to "gloss over" the details of matching - template parameter lists. This is accomplished by adding (yet more) logic - to strncmp_iw_with_mode to skip parameter lists if none is explicitly given - by the user. - - Here's a simple example using gdb.linespec/cpls-ops.exp: - - Before - ------ - (gdb) ptype test_op_call - type = struct test_op_call { - public: - void operator()(void); - void operator()(int); - void operator()(long); - void operator()(int *); - } - (gdb) b test_op_call::operator() - Breakpoint 1 at 0x400583: test_op_call::operator(). (3 locations) - (gdb) i b - Num Type Disp Enb Address What - 1 breakpoint keep y - 1.1 y 0x400583 in test_op_call::operator()(int) - at cpls-ops.cc:43 - 1.2 y 0x40058e in test_op_call::operator()() - at cpls-ops.cc:47 - 1.3 y 0x40059e in test_op_call::operator()(long) - at cpls-ops.cc:51 - - The breakpoint at test_op_call::operator() was never set. - - After - ----- - (gdb) b test_op_call::operator() - Breakpoint 1 at 0x400583: test_op_call::operator(). (4 locations) - (gdb) i b - Num Type Disp Enb Address What - 1 breakpoint keep y - 1.1 y 0x400583 in test_op_call::operator()(int) - at cpls-ops.cc:43 - 1.2 y 0x40058e in test_op_call::operator()() - at cpls-ops.cc:47 - 1.3 y 0x40059e in test_op_call::operator()(long) - at cpls-ops.cc:51 - 1.4 y 0x4008d0 in test_op_call::operator()(int*) - at cpls-ops.cc:57 - - Similar to how scope lookups work, passing "-qualified" to the break command - will cause a literal lookup of the symbol. In the example immediately above, - this will cause GDB to only find the three non-template functions. - -2022-02-25 Keith Seitz - - Unit tests for strncmp_iw_with_mode - This patch attempts to make a start at adding unit tests for - strncmp_iw_with_mode. While there is quite a bit of testing - of this function in other tests, these are currently end-to-end - tests. - - This patch attempts to cover the basics of string matching, white - space, C++ ABI tags, and several other topics. However, one area - that is ostensibly missing is testing the `match_for_lcd' feature. - This is otherwise tested as part of our end-to-end DejaGNU-based - testing. - -2022-02-25 Keith Seitz - - Move find_toplevel_char to cp-support.[ch] - find_toplevel_char is being used more and more outside of linespec.c, so - this patch moves it into cp-support.[ch]. - -2022-02-25 GDB Administrator - - Automatic date update in version.in - -2022-02-24 Tom Tromey - Andrew Burgess - - Fix crash in Fortran code - PR fortran/28801 points out a gdb crash that can be provoked by - certain Fortran code. The bug is that f77_get_upperbound assumes the - property is either a constant or undefined, but in this case it is - PROP_LOCEXPR. - - This patch fixes the crash by making this function (and the - lower-bound one as well) do the correct check before calling - 'const_val'. - - Thanks to Andrew for writing the test case. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28801 - -2022-02-24 John Baldwin - - Revert "do_target_wait_1: Clear TARGET_WNOHANG if the target isn't async." - Commit 14b3360508b1 ("do_target_wait_1: Clear - TARGET_WNOHANG if the target isn't async.") broke some multi-target - tests, such as gdb.multi/multi-target-info-inferiors.exp. The symptom - is that execution just hangs at some point. What happens is: - - 1. One remote inferior is started, and now sits stopped at a breakpoint. - It is not "async" at this point (but it "can async"). - - 2. We run a native inferior, the event loop gets woken up by the native - target's fd. - - 3. In do_target_wait, we randomly choose an inferior to call target_wait - on first, it happens to be the remote inferior. - - 4. Because the target is currently not "async", we clear - TARGET_WNOHANG, resulting in synchronous wait. We therefore block - here: - - #0 0x00007fe9540dbb4d in select () from /usr/lib/libc.so.6 - #1 0x000055fc7e821da7 in gdb_select (n=15, readfds=0x7ffdb77c1fb0, writefds=0x0, exceptfds=0x7ffdb77c2050, timeout=0x7ffdb77c1f90) at /home/simark/src/binutils-gdb/gdb/posix-hdep.c:31 - #2 0x000055fc7ddef905 in interruptible_select (n=15, readfds=0x7ffdb77c1fb0, writefds=0x0, exceptfds=0x7ffdb77c2050, timeout=0x7ffdb77c1f90) at /home/simark/src/binutils-gdb/gdb/event-top.c:1134 - #3 0x000055fc7eda58e4 in ser_base_wait_for (scb=0x6250002e4100, timeout=1) at /home/simark/src/binutils-gdb/gdb/ser-base.c:240 - #4 0x000055fc7eda66ba in do_ser_base_readchar (scb=0x6250002e4100, timeout=-1) at /home/simark/src/binutils-gdb/gdb/ser-base.c:365 - #5 0x000055fc7eda6ff6 in generic_readchar (scb=0x6250002e4100, timeout=-1, do_readchar=0x55fc7eda663c ) at /home/simark/src/binutils-gdb/gdb/ser-base.c:444 - #6 0x000055fc7eda718a in ser_base_readchar (scb=0x6250002e4100, timeout=-1) at /home/simark/src/binutils-gdb/gdb/ser-base.c:471 - #7 0x000055fc7edb1ecd in serial_readchar (scb=0x6250002e4100, timeout=-1) at /home/simark/src/binutils-gdb/gdb/serial.c:393 - #8 0x000055fc7ec48b8f in remote_target::readchar (this=0x617000038780, timeout=-1) at /home/simark/src/binutils-gdb/gdb/remote.c:9446 - #9 0x000055fc7ec4da82 in remote_target::getpkt_or_notif_sane_1 (this=0x617000038780, buf=0x6170000387a8, forever=1, expecting_notif=1, is_notif=0x7ffdb77c24f0) at /home/simark/src/binutils-gdb/gdb/remote.c:9928 - #10 0x000055fc7ec4f045 in remote_target::getpkt_or_notif_sane (this=0x617000038780, buf=0x6170000387a8, forever=1, is_notif=0x7ffdb77c24f0) at /home/simark/src/binutils-gdb/gdb/remote.c:10037 - #11 0x000055fc7ec354d4 in remote_target::wait_ns (this=0x617000038780, ptid=..., status=0x7ffdb77c33c8, options=...) at /home/simark/src/binutils-gdb/gdb/remote.c:8147 - #12 0x000055fc7ec38aa1 in remote_target::wait (this=0x617000038780, ptid=..., status=0x7ffdb77c33c8, options=...) at /home/simark/src/binutils-gdb/gdb/remote.c:8337 - #13 0x000055fc7f1409ce in target_wait (ptid=..., status=0x7ffdb77c33c8, options=...) at /home/simark/src/binutils-gdb/gdb/target.c:2612 - #14 0x000055fc7e19da98 in do_target_wait_1 (inf=0x617000038080, ptid=..., status=0x7ffdb77c33c8, options=...) at /home/simark/src/binutils-gdb/gdb/infrun.c:3636 - #15 0x000055fc7e19e26b in operator() (__closure=0x7ffdb77c2f90, inf=0x617000038080) at /home/simark/src/binutils-gdb/gdb/infrun.c:3697 - #16 0x000055fc7e19f0c4 in do_target_wait (ecs=0x7ffdb77c33a0, options=...) at /home/simark/src/binutils-gdb/gdb/infrun.c:3716 - #17 0x000055fc7e1a31f7 in fetch_inferior_event () at /home/simark/src/binutils-gdb/gdb/infrun.c:4061 - - Before the aforementioned commit, we would not have cleared - TARGET_WNOHANG, the remote target's wait would have returned nothing, - and we would have consumed the native target's event. - - After applying this revert, the testsuite state looks as good as before - for me on Ubuntu 20.04 amd64. - - Change-Id: Ic17a1642935cabcc16c25cb6899d52e12c2f5c3f - -2022-02-24 Andrew Burgess - - gdb: use a range based for loop when iterating over an array - Make use of a range based for loop to iterate over a static global - array, removing the need to have a null entry at the end of the - array. - - There should be no user visible changes after this commit. - -2022-02-24 Dominique Quatravaux - Louis-He <1726110778@qq.com> - Philippe Blain - - gdb/darwin: skip over WIFSTOPPED wait4 status - On modern Darwin's, there appears to be a new circumstance in which a - MACH_NOTIFY_DEAD_NAME message can be received, and which was not - previously accounted for: to signal the WIFSTOPPED condition in the - debuggee. In that case the debuggee is not dead yet (and in fact, - counting it as dead would cause a zombie leak - A process in such a - state reparents to PID 1, but cannot be killed). - - - Read and ignore such messages (counting on the next exception message - to let us know of the inferior's new state again) - - Refactor logging so as to clearly distinguish between the - MACH_NOTIFY_DEAD_NAME cases (WIFEXITED, WIFSTOPPED, signal, or - something else), and warn in the last case - - Change-Id: Ie86904a894e9bd154e6b674b1bfbfbaee7fde3e1 - -2022-02-24 Simon Marchi - - gdb/linux-tdep: move "Perms" column right - Commit 29ef4c0699e1 ("gdb/linux-tdep.c: Add Perms to the 'info proc - mappings' output") has broken test gdb.base/info-proc.exp on Linux, - because it changes the output of "info proc mappings" in a way that the - test does not expect (my bad for not testing before pushing). - - I looked at how FreeBSD handles this, since I remembered it did show - permission flags. It looks like this: - - Start Addr End Addr Size Offset Flags File - 0x200000 0x243000 0x43000 0x0 r-- CN-- /usr/local/bin/tmux - - (I think that `Flags` and the flags not being aligned is not - intentional) - - The test passes on FreeBSD, because the test looks for four hex numbers - in a row and ignores the rest: - - ".*Mapped address spaces:.*${hex}${ws}${hex}${ws}${hex}${ws}${hex}.*" - - I suggest fixing it on Linux by moving the flags column to the same - place as in the FreeBSD output. It makes things a bit more consistent - between OSes, and we don't have to touch the test. - - At the same time, make use of the actual length of the permission's - string to specify the number of characters to print. - - Before this patch, the output looks like: - - Start Addr End Addr Perms Size Offset objfile - 0x55dd4b544000 0x55dd4b546000 r--p 0x2000 0x0 /usr/bin/sleep - - and after, it looks like: - - Start Addr End Addr Size Offset Perms objfile - 0x5622ae662000 0x5622ae664000 0x2000 0x0 r--p /usr/bin/sleep - - Change-Id: If0fc167b010b25f97a3c54e2f491df4973ccde8f - -2022-02-24 Simon Marchi - - gdb/linux-tdep: make read_mapping return a structure - Change read_mapping to return a structure instead of taking many output - parameters. Change the string + length output parameters (permissions - and device) to be gdb::string_view, since that's what string_view is - for (a non-NULL terminated view on a string). No changes in behavior - expected. - - Change-Id: I86e627d84d3dda8c9b835592b0f4de8d90d12112 - -2022-02-24 GDB Administrator - - Automatic date update in version.in - -2022-02-23 Tom Tromey - - Fix bug in C++ overload resolution - PR c++/28901 points out a bug in C++ overload resolution. When - comparing two overloads, one might be better than the other for - certain parameters -- but, if that one also has some invalid - conversion, then it should never be considered the better choice. - Instead, a valid-but-not-apparently-quite-as-good overload should be - preferred. - - This patch fixes this problem by changing how overload comparisons are - done. I don't believe it should affect any currently valid overload - resolution; nor should it affect resolutions where all the choices are - equally invalid. - -2022-02-23 Dominik 'Disconnect3d' Czarnota - - gdb/linux-tdep.c: Add Perms to the 'info proc mappings' output - Fixes #28914 and so it adds a 'Perms' (permissions) column to the - 'info proc mappings' command output. This will allow users to know - the memory pages permissions right away from GDB instead of having - to fetch them from the /proc/$pid/maps file (which is also what GDB - does internally, but it just did not print that column). - - Below I am also showing how an example output looks like before and - after this commit in case someone wonders. - - On i386 targets - before this commit: - ``` - (gdb) info proc mappings - process 3461464 - Mapped address spaces: - - Start Addr End Addr Size Offset objfile - 0x56555000 0x56556000 0x1000 0x0 /home/dc/src/binutils-gdb/build/a.out - 0x56556000 0x56557000 0x1000 0x1000 /home/dc/src/binutils-gdb/build/a.out - 0x56557000 0x56558000 0x1000 0x2000 /home/dc/src/binutils-gdb/build/a.out - 0x56558000 0x5655a000 0x2000 0x2000 /home/dc/src/binutils-gdb/build/a.out - 0xf7fc4000 0xf7fc8000 0x4000 0x0 [vvar] - 0xf7fc8000 0xf7fca000 0x2000 0x0 [vdso] - 0xf7fca000 0xf7fcb000 0x1000 0x0 /usr/lib/i386-linux-gnu/ld-2.33.so - 0xf7fcb000 0xf7fee000 0x23000 0x1000 /usr/lib/i386-linux-gnu/ld-2.33.so - 0xf7fee000 0xf7ffb000 0xd000 0x24000 /usr/lib/i386-linux-gnu/ld-2.33.so - 0xf7ffb000 0xf7ffe000 0x3000 0x30000 /usr/lib/i386-linux-gnu/ld-2.33.so - 0xfffdc000 0xffffe000 0x22000 0x0 [stack] - (gdb) - ``` - - On i386 targets - after this commit: - ``` - (gdb) info proc mappings - process 3461464 - Mapped address spaces: - - Start Addr End Addr Perms Size Offset objfile - 0x56555000 0x56556000 r--p 0x1000 0x0 /home/dc/src/binutils-gdb/build/a.out - 0x56556000 0x56557000 r-xp 0x1000 0x1000 /home/dc/src/binutils-gdb/build/a.out - 0x56557000 0x56558000 r--p 0x1000 0x2000 /home/dc/src/binutils-gdb/build/a.out - 0x56558000 0x5655a000 rw-p 0x2000 0x2000 /home/dc/src/binutils-gdb/build/a.out - 0xf7fc4000 0xf7fc8000 r--p 0x4000 0x0 [vvar] - 0xf7fc8000 0xf7fca000 r-xp 0x2000 0x0 [vdso] - 0xf7fca000 0xf7fcb000 r--p 0x1000 0x0 /usr/lib/i386-linux-gnu/ld-2.33.so - 0xf7fcb000 0xf7fee000 r-xp 0x23000 0x1000 /usr/lib/i386-linux-gnu/ld-2.33.so - 0xf7fee000 0xf7ffb000 r--p 0xd000 0x24000 /usr/lib/i386-linux-gnu/ld-2.33.so - 0xf7ffb000 0xf7ffe000 rw-p 0x3000 0x30000 /usr/lib/i386-linux-gnu/ld-2.33.so - 0xfffdc000 0xffffe000 rw-p 0x22000 0x0 [stack] - (gdb) - ``` - - On amd64 targets - after this commit: - ``` - (gdb) info proc mappings - process 3461869 - Mapped address spaces: - - Start Addr End Addr Perms Size Offset objfile - 0x555555554000 0x555555555000 r--p 0x1000 0x0 /home/dc/src/binutils-gdb/build/a.out - 0x555555555000 0x555555556000 r-xp 0x1000 0x1000 /home/dc/src/binutils-gdb/build/a.out - 0x555555556000 0x555555557000 r--p 0x1000 0x2000 /home/dc/src/binutils-gdb/build/a.out - 0x555555557000 0x555555559000 rw-p 0x2000 0x2000 /home/dc/src/binutils-gdb/build/a.out - 0x7ffff7fc3000 0x7ffff7fc7000 r--p 0x4000 0x0 [vvar] - 0x7ffff7fc7000 0x7ffff7fc9000 r-xp 0x2000 0x0 [vdso] - 0x7ffff7fc9000 0x7ffff7fca000 r--p 0x1000 0x0 /usr/lib/x86_64-linux-gnu/ld-2.33.so - 0x7ffff7fca000 0x7ffff7ff1000 r-xp 0x27000 0x1000 /usr/lib/x86_64-linux-gnu/ld-2.33.so - 0x7ffff7ff1000 0x7ffff7ffb000 r--p 0xa000 0x28000 /usr/lib/x86_64-linux-gnu/ld-2.33.so - 0x7ffff7ffb000 0x7ffff7fff000 rw-p 0x4000 0x31000 /usr/lib/x86_64-linux-gnu/ld-2.33.so - 0x7ffffffdd000 0x7ffffffff000 rw-p 0x22000 0x0 [stack] - 0xffffffffff600000 0xffffffffff601000 --xp 0x1000 0x0 [vsyscall] - (gdb) - ``` - - Change-Id: I4991f6cc758cd532eae3ae98c29d22e7bd9d9c36 - -2022-02-23 Patrick O'Neill - - RISC-V: PR28733, add missing extension info to 'unrecognized opcode' error - Currently we report errors as "unrecognized opcode `fence.i'" when the - opcode isn't part of the selected extensions. - This patch expands that error message to include the missing extension - information. For example, now the error message would be "unrecognized - opcode `fence.i', extension `zifencei' required". - If the opcode is not a part of any extension, the error message reverts - to "unrecognized opcode `'". - - - bfd/ - pr 28733 - * elfxx-riscv.c (riscv_multi_subset_supports_ext): New function, - used to return the extension string for each INSN_CLASS_*. - * elfxx-riscv.h: Added extern riscv_multi_subset_supports_ext. - gas/ - pr 28733 - * config/tc-riscv.c (struct riscv_ip_error): New structure, - contains information about errors that occur within the riscv_ip. - (riscv_ip): Use struct riscv_ip_error to report more detailed errors. - * testsuite/gas/riscv/c-fld-fsd-fail.l: Updated. - * testsuite/gas/riscv/march-imply-i2p1-01.: Likewise. - -2022-02-23 Patrick O'Neill - - RISC-V: PR28733, add missing extension info to 'invalid CSR' error - Currently we report errors as "invalid CSR 'fscr' for the current ISA" - when the instruction isn't valid. - - This patch expands that error message to include the missing extension - information. For example, now the error message would be "invalid CSR - 'fscr' for the current ISA, CSR 'fscr' needs 'f' extension". - - - gas/ - pr 28733 - * config/tc-riscv.c (riscv_csr_address): Report more details - when the CSR is invalid. - * testsuite/gas/riscv/csr-version-1p10.l: Updated detailed errors. - * testsuite/gas/riscv/csr-version-1p11.l: Likewise. - * testsuite/gas/riscv/csr-version-1p12.l: Likewise. - * testsuite/gas/riscv/csr-version-1p9p1.l: Likewise. - -2022-02-23 Alan Modra - - binutils 2.38 vs. ppc32 linux kernel - Commit b25f942e18d6 made .machine more strict. Weaken it again. - - * config/tc-ppc.c (ppc_machine): Treat an early .machine specially, - keeping sticky options to work around gcc bugs. - -2022-02-23 Nelson Chu - - RISC-V: Updated CSRs to privileged spec v1.12 and debug spec v1.0. - * Removed N extension CSRs, - ustatus, uie, utvec, uscratch, uepc, ucause, utval and uip. - - * Removed two supervisor CSRs, - sedeleg and sideleg. - - * Changed debug CSR address of scontext from 0x7aa to 0x5a8. We cannot support - different versions of debug specs for now, so only supporting the latest one is - the only way to move forward. - - * Added debug CSRs, - mscontext (0x7aa), mcontrol6 (0x7a1, tdata1) and tmexttrigger ((0x7a1, tdata1). - - * Regarded hcontext as a debug CSR. - - include/ - * opcode/riscv-opc.h: Updated CSRs to privileged spec v1.12 and - debug spec v1.0. - gas/ - * testsuite/gas/riscv/csr.s: Updated CSRs to privileged spec v1.12 - and debug spec v1.0. - * testsuite/gas/riscv/csr-dw-regnums.d: Likewise. - * testsuite/gas/riscv/csr-version-1p10.d: Likewise. - * testsuite/gas/riscv/csr-version-1p10.l: Likewise. - * testsuite/gas/riscv/csr-version-1p11.d: Likewise. - * testsuite/gas/riscv/csr-version-1p11.l: Likewise. - * testsuite/gas/riscv/csr-version-1p12.d: Likewise. - * testsuite/gas/riscv/csr-version-1p12.l: Likewise. - * testsuite/gas/riscv/csr-version-1p9p1.d: Likewise. - * testsuite/gas/riscv/csr-version-1p9p1.l: Likewise. - * testsuite/gas/riscv/csr-dw-regnums.d: Likewise. - * testsuite/gas/riscv/csr-dw-regnums.s: Likewise. - -2022-02-23 Tsukasa OI - - RISC-V: Add Privileged Architecture 1.12 CSRs - This commit adds, - - * Most of CSRs as listed in the Privileged Architecture, - version 1.12 (except scontext and mscontext). - - * Testcases for most CSRs added on the Privileged - Architecture, version 1.12 (except moved "scontext" and - new "mscontext"). - - include/ChangeLog: - - * opcode/riscv-opc.h (CSR_SENVCFG, CSR_MCONFIGPTR, CSR_MENVCFG, - CSR_MSTATUSH, CSR_MENVCFGH, CSR_MTINST, CSR_MTVAL2, CSR_MSECCFG, - CSR_MSECCFGH, CSR_PMPCFG4, CSR_PMPCFG5, CSR_PMPCFG6, - CSR_PMPCFG7, CSR_PMPCFG8, CSR_PMPCFG9, CSR_PMPCFG10, - CSR_PMPCFG11, CSR_PMPCFG12, CSR_PMPCFG13, CSR_PMPCFG14, - CSR_PMPCFG15, CSR_PMPADDR16, CSR_PMPADDR17, CSR_PMPADDR18, - CSR_PMPADDR19, CSR_PMPADDR20, CSR_PMPADDR21, CSR_PMPADDR22, - CSR_PMPADDR23, CSR_PMPADDR24, CSR_PMPADDR25, CSR_PMPADDR26, - CSR_PMPADDR27, CSR_PMPADDR28, CSR_PMPADDR29, CSR_PMPADDR30, - CSR_PMPADDR31, CSR_PMPADDR32, CSR_PMPADDR33, CSR_PMPADDR34, - CSR_PMPADDR35, CSR_PMPADDR36, CSR_PMPADDR37, CSR_PMPADDR38, - CSR_PMPADDR39, CSR_PMPADDR40, CSR_PMPADDR41, CSR_PMPADDR42, - CSR_PMPADDR43, CSR_PMPADDR44, CSR_PMPADDR45, CSR_PMPADDR46, - CSR_PMPADDR47, CSR_PMPADDR48, CSR_PMPADDR49, CSR_PMPADDR50, - CSR_PMPADDR51, CSR_PMPADDR52, CSR_PMPADDR53, CSR_PMPADDR54, - CSR_PMPADDR55, CSR_PMPADDR56, CSR_PMPADDR57, CSR_PMPADDR58, - CSR_PMPADDR59, CSR_PMPADDR60, CSR_PMPADDR61, CSR_PMPADDR62, - CSR_PMPADDR63): New CSR macros. - - gas/ChangeLog: - - * testsuite/gas/riscv/csr-dw-regnums.s: Add new CSRs. - * testsuite/gas/riscv/csr-dw-regnums.d: Likewise. - * testsuite/gas/riscv/csr.s: Add new CSRs. - * testsuite/gas/riscv/csr-version-1p9p1.d: Likewise. - * testsuite/gas/riscv/csr-version-1p9p1.l: Likewise. - * testsuite/gas/riscv/csr-version-1p10.d: Likewise. - * testsuite/gas/riscv/csr-version-1p10.l: Likewise. - * testsuite/gas/riscv/csr-version-1p11.d: Likewise. - * testsuite/gas/riscv/csr-version-1p11.l: Likewise. - * testsuite/gas/riscv/csr-version-1p12.d: Likewise. - * testsuite/gas/riscv/csr-version-1p12.l: Likewise. - -2022-02-23 Tsukasa OI - - RISC-V: Reorganize testcases for CFI directives - This commit reorganizes and adds some CSRs to csr-dw-regnums.[sd] to - make it test the same CSRs as csr.s. - - gas/ChangeLog: - - * testsuite/gas/riscv/csr-dw-regnums.s: Reorganize and add - defined CSRs tested in csr.s. - * testsuite/gas/riscv/csr-dw-regnums.d: Likewise. - -2022-02-23 GDB Administrator - - Automatic date update in version.in - -2022-02-22 John Baldwin - - NEWS: Note that the FreeBSD async target supports async mode. - -2022-02-22 John Baldwin - - inf-ptrace: Add an event_pipe to be used for async mode in subclasses. - Subclasses of inf_ptrace_target have to opt-in to using the event_pipe - by implementing the can_async_p and async methods. For subclasses - which do this, inf_ptrace_target provides is_async_p, async_wait_fd - and closes the pipe in the close target method. - - inf_ptrace_target also provides wrapper routines around the event pipe - (async_file_open, async_file_close, async_file_flush, and - async_file_mark) for use in target methods such as async. - inf_ptrace_target also exports a static async_file_mark_if_open - function which can be used in SIGCHLD signal handlers. - -2022-02-22 John Baldwin - - Enable async mode in the target in attach_cmd. - If the attach target supports async mode, enable it after the - attach target's ::attach method returns. - - fbsd-nat: Return nullptr rather than failing ::thread_name. - ptrace on FreeBSD cannot be used against running processes and instead - fails with EBUSY. This meant that 'info threads' would fail if any of - the threads were running (for example when using schedule-multiple=on - in gdb.base/fork-running-state.exp). Instead of throwing errors, just - return nullptr as no thread name is better than causing info threads to - fail completely. - -2022-02-22 John Baldwin - - fbsd-nat: Various cleanups to the ::resume entry debug message. - Move the message from 'show debug fbsd-lwp' to 'show debug fbsd-nat' - since it is helpful for debugging async target support and not just - LWP support. - - Use target_pid_to_str to format the ptid and log the step and signo - arguments. - -2022-02-22 John Baldwin - - fbsd-nat: Include ptrace operation in error messages. - -2022-02-22 John Baldwin - - fbsd-nat: Implement async target support. - This is a fairly simple version of async target support. - - Synchronous mode still uses blocking waitpid() calls in - inf_ptrace::wait() unlike the Linux native target which always uses - WNOHANG and uses sigsuspend() for synchronous operation. - - Asynchronous mode registers an event pipe with the core as a file - handle and writes to the pipe when SIGCHLD is raised. TARGET_WNOHANG - is handled by inf_ptrace::wait(). - -2022-02-22 John Baldwin - - inf-ptrace: Support async targets in inf_ptrace_target::wait. - - Handle TARGET_WNOHANG by passing WNOHANG to waitpid and returning - TARGET_WAITKIND_IGNORE if there are no events to report. - - - Handle a race in async mode where SIGCHLD might signal the event - pipe for an event that has already been reported. If the event was - the exit of the last child process, waitpid() will fail with ECHILD - rather than returning a pid of 0. For this case, return - TARGET_WAITKIND_NO_RESUMED. - -2022-02-22 John Baldwin - - inf-ptrace: Return an IGNORE event if waitpid() fails. - Previously this returned a TARGET_WAITKIND_SIGNALLED event for - inferior_ptid. However, inferior_ptid is invalid during ::wait() - methods after the multi-target changes, so this was triggering an - assertion further up the stack. - - do_target_wait_1: Clear TARGET_WNOHANG if the target isn't async. - Previously, TARGET_WNOHANG was cleared if a target supported async - mode even if async mode wasn't currently enabled. This change only - permits TARGET_WNOHANG if async mode is enabled. - -2022-02-22 John Baldwin - - Don't enable async mode at the end of target ::resume methods. - Now that target_resume always enables async mode after target::resume - returns, these calls are redundant. - - The other place that target resume methods are invoked outside of - target_resume are as the beneath target in record_full_wait_1. In - this case, async mode should already be enabled when supported by the - target before the resume method is invoked due to the following: - - In general, targets which support async mode run as async until - ::wait returns TARGET_WAITKIND_NO_RESUMED to indicate that there are - no unwaited for children (either they have exited or are stopped). - When that occurs, the loop in wait_one disables async mode. Later - if a stopped child is resumed, async mode is re-enabled in - do_target_resume before waiting for the next event. - - In the case of record_full_wait_1, this function is invoked from the - ::wait target method when fetching an event. If the underlying - target supports async mode, then an earlier call to do_target_resume - to resume the child reporting an event in the loop in - record_full_wait_1 would have already enabled async mode before - ::wait was invoked. In addition, nothing in the code executed in - the loop in record_full_wait_1 disables async mode. Async mode is - only disabled higher in the call stack in wait_one after ::wait - returns. - - It is also true that async mode can be disabled by an - INF_EXEC_COMPLETE event passed to inferior_event_handle, but all of - the places that invoke that are in the gdb core which is "above" a - target ::wait method. - - Note that there is an earlier call to enable async mode in - linux_nat_target::resume. That call also marks the async event pipe - to report an existing event after enabling async mode, so it needs to - stay. - -2022-02-22 John Baldwin - - Enable async mode on supported targets in target_resume. - Enabling async mode above the target layer removes duplicate code in - ::resume methods of async-capable targets. Commit 5b6d1e4fa4f - ("Multi-target support") enabled async mode in do_target_resume after - target_resume returns which is a step in this direction. However, - other callers of target_resume such as target_continue do not enable - async mode. Rather than enabling async mode in each of the callers - after target_resume returns, enable async mode at the end of - target_resume. - - gdbserver linux-low: Convert linux_event_pipe to the event_pipe class. - Use event_pipe from gdbsupport in place of the existing file - descriptor array. - - gdb linux-nat: Convert linux_nat_event_pipe to the event_pipe class. - Use event_pipe from gdbsupport in place of the existing file - descriptor array. - -2022-02-22 John Baldwin - - gdbsupport: Add an event-pipe class. - This pulls out the implementation of an event pipe used to implement - target async support in both linux-low.cc (gdbserver) and linux-nat.c - (gdb). - - This will be used to replace the existing event pipe in linux-low.cc - and linux-nat.c in future commits. - - Co-Authored-By: Lancelot SIX - -2022-02-22 Ruslan Kabatsayev - - gdb: fix detection of compilation and linking flags for source-highlight - Currently there are two problems with the detection of - source-highlight via pkg-config in GDB's configure script: - - 1. The LDFLAGS variable is used to pass the 'pkg-config --libs' output - to AC_LINK_IFELSE, which results in the "-L/some/path - -lsource-highlight" preceding the conftest.cpp, which can result in a - failure to find symbols referenced in conftest.cpp, if the linker is - using --as-needed by default. - - 2. The CFLAGS variable is used to pass the 'pkg-config --cflags' - output to AC_LINK_IFELSE. However, as the current language is C++, - AC_LINK_IFELSE will actuall use CXXFLAGS, not CFLAGS, so any flags - returned from pkg-config will not be seen. - - This patch fixes both of these mistakes, allowing GDB to correctly - configure and build using source-highlight installed into a custom - prefix, e.g. ~/opt/gdb-git (because the system version of - source-highlight is too old). - -2022-02-22 Philippe Blain - - gdb/testsuite/README: point to default value of INTERNAL_GDBFLAGS - The INTERNAL_GDBFLAGS runtest variable was updated in 55c3ad88013 - ([gdb/testsuite] Prevent pagination in GDB_INTERNALFLAGS, 2020-10-26) to - disable pagination, and in aae1c79a03a (PR python/12227..., 2010-12-07) - to point to the data directory, but its default value mentioned in the - testsuite's README was not kept up to date. - - To avoid it getting out of sync even more, point the reader to the - definition of the variable in lib/gdb.exp, and move the explanation of - the different flags there. Also adjust the example in the README - so it follows the flags added in 55c3ad88013. - - Change-Id: I3533608a7d6ae5198af09c7dc7743bde24c19ed7 - -2022-02-22 Kito Cheng - - RISC-V: Maintain a string to hold the canonical order - Using dummy entry in riscv_supported_std_ext cause confusing and wrongly - support `b` and `k` extensions. - - bfd/ - * elfxx-riscv.c (riscv_supported_std_ext): Drop unsupported - extensions. - (riscv_ext_canonical_order): New. - (riscv_init_ext_order): Use riscv_ext_canonical_order rather - than riscv_supported_std_ext to compute canonical order. - - V2 Changes: - - - Use `*ext` rather than `*ext != NULL` for checking is reach end of - string. - -2022-02-22 GDB Administrator - - Automatic date update in version.in - -2022-02-21 Alan Modra - - Re: ld: Support customized output section type - "DO NOT EDIT!" says the comment at the top of bfd-in2.h. Move the new - type field where it belongs. - - PR ld/28841 - * section.c (struct bfd_section): Add type. Formatting. - (BFD_FAKE_SECTION): Formatting. - * bfd-in2.h: Regenerate. - -2022-02-21 Mike Frysinger - - sim: gdbinit: hoist setup to common code - This was left in subdirs because of the dynamic cgen usage. However, - we can move this breakpoint call to runtime and let gdb detect whether - the symbol exists. - -2022-02-21 Andrew Burgess - - gdb/testsuite: relax pattern in new gdb.mi/mi-multi-commands.exp test - I saw some failures in the test gdb.mi/mi-multi-commands.exp that I - added recently. This test was added in commit: - - commit d08cbc5d3203118da5583296e49273cf82378042 - Date: Wed Dec 22 12:57:44 2021 +0000 - - gdb: unbuffer all input streams when not using readline - - The failures I see only occurred when my machine was very heavily - loaded. - - In this test I send multiple commands from dejagnu to gdb with a - single send_gdb call. In a well behaving world what I want to happen - is that the gdb console sees both commands arrive and echos the text - of those commands. Then gdb starts processing the first command, - prints the result, and then processes the second command, and prints - the result. - - However, what I saw in my loaded environment was that only after - sending the two commands, only the first command was echoed to gdb's - terminal. Then gdb started processing the first command, and started - to write the output. Now, mixed in with the first command output, the - second command was echoed to gdb's terminal. Finally, gdb would - finish printing the first command output, and would read and handle - the second command. - - This mixing of command echoing with the first command output was - causing the test matching patterns to fail. - - In this commit I change the command I use in the test from a CLI - command to an MI command, this reduces the number of lines of output - that come from the test, CLI commands sent through the MI interpreter - are echoed back like this: - - (gdb) - set $a = "FIRST COMMAND" - &"set $a = \"FIRST COMMAND\"\n" - ^done - (gdb) - - While this is not the case for true MI command: - - (gdb) - -data-evaluate-expression $a - ^done,value="\"FIRST COMMAND\"" - (gdb) - - Less output makes for simpler patterns to match against. - - Next, when sending two command to gdb I was previously trying to spot - the output of the first command followed by the prompt with nothing - between. This is not really needed, for the first command I can look - for just the ^done,value="\"FIRST COMMAND\"" string, then I can start - looking for the output of the second command. - - So long as the second pattern matches up to the gdb prompt, then I can - be sure than nothing is left over in the expect buffer to muck up - later matches. - - As to see the second command output gdb must have read in the second - command, the second command output never suffers from the corruption - that the first command output does. - - Since making this change, I've not seen a failure in this test. - -2022-02-21 Andrew Burgess - - gdb: avoid nullptr access in dbxread.c from read_dbx_symtab - This fixes a GDB crash reported in bug pr/28900, related to reading in - some stabs debug information. - - In this commit my goal is to stop GDB crashing. I am not trying to - ensure that GDB makes the best possible use of the available stabs - debug information. At this point I consider stabs a legacy debug - format, with only limited support in GDB. - - So, the problem appears to be that, when reading in the stabs data, we - need to find a N_SO entry, this is the entry that defines the start of - a compilation unit (or at least the location of a corresponding source - file). - - It is while handling an N_SO that GDB creates a psymtab to hold the - incoming debug information (symbols, etc). - - The problem we hit in the bug is that we encounter some symbol - information (an N_PC entry) outside of an N_SO entry - that is we find - some symbol information that is not associated with any source file. - - We already have some protection for this case, look (in - read_dbx_symtab) at the handling of N_PC entries of type 'F' and 'f', - if we have no psymtab (the pst variable is nullptr) then we issue a - complaint. However, for whatever reason, in both 'f' and 'F' - handling, there is one place where we assume that the pst - variable (the psymtab) is not nullptr. This is a mistake. - - In this commit, I guard these two locations (in 'f' and 'F' handling) - so we no longer assume pst is not nullptr. - - While I was at it, I audited all the other uses of pst in - read_dbx_symtab, and in every potentially dangerous case I added a - nullptr check, and issue a suitable complaint if pst is found to be - nullptr. - - It might well be true that we could/should do something smarter if we - see a debug symbol outside of an N_SO entry, and if anyone wanted to - do that work, they're welcome too. But this commit is just about - preventing the nullptr access, and the subsequent GDB crash. - - I don't have any tests for this change, I have no idea how to generate - weird stabs data for testing. The original binary from the bug report - now loads just fine without GDB crashing. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28900 - -2022-02-21 Andrew Burgess - - gdb: make use of std::string in dbxread.c and xcoffread.c - While taking a look through dbxread.c I spotted a couple of places - where making use of std::string would remove the need for manual - memory allocation and memcpy. - - During review Simon pointed out that the same code exists in - xcoffread.c, so I've applied the same fix there too. - - There should be no user visible changes after this commit. - -2022-02-21 GDB Administrator - - Automatic date update in version.in - -2022-02-20 Lancelot SIX - - gdb: Only paginate for filtered output in fputs_maybe_filtered - A have had situation where a unfiltered output (done using - fputs_unfiltered) ended up triggering pagination. The backtrace for this was: - - ... - #24 0x000055839377ee4e in check_async_event_handlers () at ../../gdb/async-event.c:335 - #25 0x0000558394b67b57 in gdb_do_one_event () at ../../gdbsupport/event-loop.cc:216 - #26 0x0000558394587454 in gdb_readline_wrapper (prompt=0x7ffd907712d0 "--Type for more, q to quit, c to continue without paging--") at ../../gdb/top.c:1148 - #27 0x0000558394707270 in prompt_for_continue () at ../../gdb/utils.c:1438 - #28 0x00005583947088b3 in fputs_maybe_filtered (linebuffer=0x60c0000f4000 " [...quite big message...]", stream=0x60300028e9d0, filter=0) at ../../gdb/utils.c:1752 - #29 0x0000558394708e57 in fputs_unfiltered (linebuffer=0x60c0000f4000 " [...quite big message...]", stream=0x60300028e9d0) at ../../gdb/utils.c:1811 - ... - - This comes from what appears to be a oversight in fputs_maybe_filtered. This - function has a FILTER parameter which if true makes the function pause after - every screenful (i.e. triggers pagination). - - The filter parameter is correctly used to guard the first place where - prompt_for_continue. There is a second place in the function which can call - prompt_for_continue, but is currently unguarded. I believe that this is an - oversight, this patch fixes that. - - Tested on Linux-x86_64, no regression observed. - - Change-Id: Iad8ffd50a87cf20077500878e2564b5a7dc81ece - -2022-02-20 GDB Administrator - - Automatic date update in version.in - -2022-02-19 Dominique Quatravaux - - gdb/darwin: remove not-so-harmless spurious call to `wait4` - As seen in https://sourceware.org/bugzilla/show_bug.cgi?id=24069 this - code will typically wait4() a second time on the same process that was - already wait4()'d a few lines above. While this used to be - harmless/idempotent (when we assumed that the process already exited), - this now causes a deadlock in the WIFSTOPPED case. - - The early (~2019) history of bug #24069 cautiously suggests to use - WNOHANG instead of outright deleting the call. However, tests on the - current version of Darwin (Big Sur) demonstrate that gdb runs just fine - without a redundant call to wait4(), as would be expected. - Notwithstanding the debatable value of conserving bug compatibility with - an OS release that is more than a decade old, there is scant evidence of - what that double-wait4() was supposed to achieve in the first place - A - cursory investigation with `git blame` pinpoints commits bb00b29d7802 - and a80b95ba67e2 from the 2008-2009 era, but fails to answer the - "why" question conclusively. - - Co-Authored-By: Philippe Blain - Change-Id: Id4e4415d66d6ff6b3552b60d761693f17015e4a0 - -2022-02-19 GDB Administrator - - Automatic date update in version.in - -2022-02-18 Tom Tromey - - Add constructor to bound_minimal_symbol - This adds a constructor to bound_minimal_symbol, to avoid a build - failure with clang that Simon pointed out. - - I also took the opportunity to remove some redundant initializations, - and to change one use of push_back to emplace_back, as suggested by - Simon. - -2022-02-18 Roland McGrath - - Fix typo in ld.texi - ld/ - * ld.texi (Output Section Type): Fix typo in @code syntax. - -2022-02-18 Simon Marchi - - gdb: remove newlines from some linux_nat_debug_printf calls - Change-Id: I80328fab7096221356864b5a4fb30858b48d2c10 - -2022-02-18 GDB Administrator - - Automatic date update in version.in - -2022-02-17 Nick Clifton - - Updated Serbian translations for the bfd, gold, ld and opcodes directories - -2022-02-17 GDB Administrator - - Automatic date update in version.in - -2022-02-16 Fangrui Song - - ld: Support customized output section type - bfd/ - 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. - - ld/ - PR ld/28841 - * ld.texi: Document new output section type. - * ldlex.l: Add new token TYPE. - * ldgram.y: Handle 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-16 Andrew Burgess - - gdb/tui: add a missing white space character - Just adds a missing space. There should be no user visible changes - after this commit. - - gdb: convert callback_handler_installed from int to bool - Simple int to bool conversion on callback_handler_installed in - event-top.c. There should be no user visible changes after this - commit. - -2022-02-16 Alan Modra - - gas local label and dollar label handling - Much of the gas source and older BFD source use "long" for function - parameters and variables, when other types would be more appropriate. - This patch fixes one of those cases. Dollar labels and numeric local - labels do not need large numbers. Small positive itegers are usually - all that is required. Due to allowing longs, it was possible for - fb_label_name and dollar_label_name to overflow their buffers. - - * symbols.c: Delete unnecessary forward declarations. - (dollar_labels, dollar_label_instances): Use unsigned int. - (dollar_label_defined, dollar_label_instance): Likewise. - (define_dollar_label): Likewise. - (fb_low_counter, fb_labels, fb_label_instances): Likewise. - (fb_label_instance_inc, fb_label_instance): Likewise. - (fb_label_count, fb_label_max): Make them size_t. - (dollar_label_name, fb_label_name): Rewrite using sprintf. - * symbols.h (dollar_label_defined): Update prototype. - (define_dollar_label, dollar_label_name): Likewise. - (fb_label_instance_inc, fb_label_name): Likewise. - * config/bfin-lex.l (yylex): Remove unnecessary casts. - * expr.c (integer_constant): Likewise. - * read.c (read_a_source_file): Limit numeric label range to int. - -2022-02-16 Alan Modra - - ubsan: s_app_line integer overflow - There are quite a few ubsan warnings in gas. This one disappears with - a code tidy. - - * read.c (s_app_line): Rename 'l' to 'linenum'. Avoid ubsan - warning. - -2022-02-16 Alan Modra - - pe_ILF_make_a_symbol_reloc segfault - pei-aarch64-little apparently lacks support for BFD_RELOC_RVA. - - * peicode.h (pe_ILF_make_a_symbol_reloc): Don't segfault on - NULL howto. - -2022-02-16 Alan Modra - - What to do when sh_addralign isn't a power of two - BFD generally doesn't handle anything but a power of two section - alignment, and ELF sh_addralign is required to be an integral power of - two (or zero) by the ELF spec. Of course this is ignored by fuzzers, - and because bfd_log2 rounds up, we can end up with alignment_power - being 32 on a 32-bit object or 64 on a 64-bit object. That then - triggers ubsan warnings in places like bfd_update_compression_header - where we want to convert from alignment_power back to an alignment. - I suppose we could reject object files that have non-compliant - sh_addralign, but I think it's also reasonable to use the greatest - power of two divisor of sh_addralign, ie. the rightmost 1 bit. - - * elf.c (_bfd_elf_make_section_from_shdr): Use greatest power - of two divisor of sh_addralign. - (_bfd_elf_assign_file_position_for_section): Likewise. - (assign_file_positions_for_non_load_sections): Likewise. - -2022-02-16 Alan Modra - - asan: buffer overflow in vms-alpha.c - * vms-alpha.c (evax_bfd_print_dst): Sanity check another place - printing strings. - - asan : use of uninitialized value in buffer_and_nest - * macro.c (buffer_and_nest): Don't read past end of string buffer. - - asan: buffer overflow in peXXigen.c - * peXXigen.c (_bfd_XX_bfd_copy_private_bfd_data_common): Properly - sanity check DataDirectory[PE_DEBUG_DATA].Size. - -2022-02-16 Hans-Peter Nilsson - - sim/common: Improve sim_dump_memory head comment - As requested by Mike. - - * sim-memopt.c: Improve head comment. - -2022-02-16 Hans-Peter Nilsson - - sim/testsuite/cris/c/stat3.c: Fix formatting nit - * c/stat3.c (main): Fix formatting nit. - -2022-02-16 Mike Frysinger - - sim: testsuite: cleanup the istarget * logic - Now that the multitarget testing has settled, clean up the cases where - istarget * is used. This ends up being mostly style unindenting. - -2022-02-16 GDB Administrator - - Automatic date update in version.in - -2022-02-15 H.J. Lu - - i386: Update I386_NEED_DYNAMIC_RELOC_TYPE_P for DT_TEXTREL - Update I386_NEED_DYNAMIC_RELOC_TYPE_P to allow R_386_TLS_IE for relocation - in read-only section. - - bfd/ - - PR ld/28894 - * elfxx-x86.h (I386_NEED_DYNAMIC_RELOC_TYPE_P): Allow - R_386_TLS_IE. - - ld/ - PR ld/28894 - * testsuite/ld-i386/i386.exp: Run pr28894. - * testsuite/ld-i386/pr28894.d: New file. - * testsuite/ld-i386/pr28894.s: Likewise. - -2022-02-15 Hans-Peter Nilsson - - sim/testsuite: Default global_cc_os and global_cc_works properly - There was an omission on 3e6dc39ed7a8 "sim/testsuite: Set - global_cc_os also when no compiler is found"; global_cc_os - wasn't set for other than the primary target, which means - that the "unguarded" use of global_cc_os in - testsuite/cris/c/c.exp caused the dreaded "ERROR: can't read - "global_cc_os": no such variable" when e.g. configuring for - pru-elf and doing "make check-sim". Better initializing - both variables at the top to default values, rather than - adding another single 'set global_cc_os ""', to reduce the - risk of not setting them properly if or when that - if-statement-chain is made longer. - - sim/testsuite: - * lib/sim-defs.exp (sim_init_toolchain): Default - global_cc_os and global_cc_works properly, before if-chain. - -2022-02-15 H.J. Lu - - x86: Add has_sib to struct instr_info - Add has_sib to struct instr_info and use SIB info only if ins->has_sib - is true. - - PR binutils/28892 - * i386-dis.c (instr_info): Add has_sib. - (get_sib): Set has_sib. - (OP_E_memory): Replace havesib with ins->has_sib. - (OP_VEX): Use ins->sib.index only if ins->has_sib is true. - -2022-02-15 Lancelot SIX - - gdb: Respect the DW_CC_nocall attribute - It is possible for a compiler to optimize a function in a such ways that - the function does not follow the calling convention of the target. In - such situation, the compiler can use the DW_AT_calling_convention - attribute with the value DW_CC_nocall to tell the debugger that it is - unsafe to call the function. The DWARF5 standard states, in 3.3.1.1: - - > If the value of the calling convention attribute is the constant - > DW_CC_nocall, the subroutine does not obey standard calling - > conventions, and it may not be safe for the debugger to call this - > subroutine. - - Non standard calling convention can affect GDB's assumptions in multiple - ways, including how arguments are passed to the function, how values are - returned, and so on. For this reason, it is unsafe for GDB to try to do - the following operations on a function with marked with DW_CC_nocall: - - - call / print an expression requiring the function to be evaluated, - - inspect the value a function returns using the 'finish' command, - - force the value returned by a function using the 'return' command. - - This patch ensures that if a command which relies on GDB's knowledge of - the target's calling convention is used on a function marked nocall, GDB - prints an appropriate message to the user and does not proceed with the - operation which is unreliable. - - Note that it is still possible for someone to use a vendor specific - value for the DW_AT_calling_convention attribute for example to indicate - the use of an alternative calling convention. This commit does not - prevent this, and target dependent code can be adjusted if one wanted to - support multiple calling conventions. - - Tested on x86_64-Linux, with no regression observed. - - Change-Id: I72970dae68234cb83edbc0cf71aa3d6002a4a540 - -2022-02-15 Lancelot SIX - Simon Marchi - - gdb: add a symbol* argument to get_return_value - Add an argument to the get_return_value function to indicate the symbol - of the function the debuggee is returning from. This will be used by - the following patch. - - Since the function return type can be deduced from the symbol remove the - value_type argument which becomes redundant. - - No user visible change after this patch. - - Tested on x86_64-linux. - - Change-Id: Idf1279f1f7199f5022738a6679e0fa63fbd22edc - -2022-02-15 H.J. Lu - - x86-64: Use MAXPAGESIZE for the relro segment alignment - Adjust x86-64 linker tests after reverting - - commit 31b4d3a16f200bf04db8439a63b72bba7af4e1be - Author: Alan Modra - Date: Thu Feb 3 08:57:47 2022 +1030 - - PR28824, relro security issues, x86 keep COMMONPAGESIZE relro - - to use MAXPAGESIZE for the end of the relro segment alignment, like other - ELF targets. - - * testsuite/ld-x86-64/plt-main-bnd.dd: Updated. - * testsuite/ld-x86-64/plt-main-ibt-x32.dd: Likewise. - * testsuite/ld-x86-64/plt-main-ibt.dd: Likewise. - * testsuite/ld-x86-64/pr14207.d: Likewise. - * testsuite/ld-x86-64/pr18176.d: Likewise. - * testsuite/ld-x86-64/pr20830a-now.d: Likewise. - * testsuite/ld-x86-64/pr20830a.d: Likewise. - * testsuite/ld-x86-64/pr20830b-now.d: Likewise. - * testsuite/ld-x86-64/pr20830b.d: Likewise. - * testsuite/ld-x86-64/pr21038a-now.d: Likewise. - * testsuite/ld-x86-64/pr21038a.d: Likewise. - * testsuite/ld-x86-64/pr21038b-now.d: Likewise. - * testsuite/ld-x86-64/pr21038b.d: Likewise. - * testsuite/ld-x86-64/pr21038c-now.d: Likewise. - * testsuite/ld-x86-64/pr21038c.d: Likewise. - -2022-02-15 H.J. Lu - - Revert "PR28824, relro security issues, x86 keep COMMONPAGESIZE relro" - This reverts commit 31b4d3a16f200bf04db8439a63b72bba7af4e1be. - -2022-02-15 GDB Administrator - - Automatic date update in version.in - -2022-02-14 Hans-Peter Nilsson - - sim/testsuite/cris: If failing compilation, mark C tests as errors - ...when we know we have a working compiler. This will reduce - the risk of faulty edits by exposing them rather than hiding - them as "unresolved". It also harmonizes behavior with that of - run_sim_test. - - * c/c.exp: Mark C tests failing compilation test errors. - -2022-02-14 Hans-Peter Nilsson - - sim/testsuite/cris: Remove faulty use of basename in C tests - Calls to basename were added here as part of commit - e1e1ae6e9b5e "sim: testsuite: fix objdir handling", but that - commit missed adding "#include " or the equivalent - GNU extension, see basename(3). Fixing that shows a logical - error in the change to openpf1.c; the non-/-prefixed - code-path was changed instead of the "/"-prefixed code-path, - which is the one executed after that commit. - - For "newlib" these tests failed linking after that commit. - Recent newlib has the (asm-renamed) GNU-extension-variant of - basename, but we're better off not using it at all. - - Unfortunately, compilation failures for C tests run by the - machinery in c.exp are currently just marked "unresolved", - in contrast to C and assembler tests run by calling - run_sim_test. - - The interaction of calling with the full program-path vs. - use of --sysroot exposes a consistency problem: when - --sysroot is used, argv[0] isn't the path by which the - program can find itself. It's undecided whether argv[0] for - the program running in the simulator should be edited - (related to the naked argument to the simulator before - passing on to the simulated program) to remove a leading - --sysroot. Either way, such a change would be out of scope - for this commit. - - * c/stat3.c (mybasename): New macro. Use it instead of basename. - * c/openpf1.c: Correct basename-related change and update related - comment. - -2022-02-14 Hans-Peter Nilsson - - sim: Add sim_dump_memory for debugging - Intended to be called from the debugger tool. - - sim/common: - * sim-memopt.c (sim_dump_memory): New function. - -2022-02-14 Hans-Peter Nilsson - - sim: Fix use of out-of-tree assembler and linker when testing - With commit 7a259895bb2d "sim: testsuite: expand arch specific - toolchain settings", trying to use out-of-tree ld and as at test-time - broke for the "primary target", like when testing a release-tarball. - - Subsequent to that commit, all assembler tests without in-tree-built - tools FAIL, getting errors when trying to call - $(abs_builddir)/../gas/as-new. But, that isn't the actual culprint; - it's actually it's its immediate predecessor, commit 8996c21067373 - "sim: testsuite: setup per-port toolchain settings for multitarget - build", which hardcodes in-tree-paths to those tools instead of - considering e.g. $(_FOR_TARGET), the preferred overridable variable - for single-target builds, as set up by the toplevel Makefile. - - This commit calls GCC_TARGET_TOOL (a deceptive name; gcc-specific - features aren't used) from toplev/config/acx.m4, somewhat like calls - in toplev/configure.ac but without the NCN_STRICT_CHECK_TARGET_TOOLS - step, for each X to find a value for $(_FOR_TARGET). N.B.: in-tree - tools still override any ${target}-${tool} found in $PATH, i.e. only - previously broken builds are affected. - - The variables $(_FOR_TARGET) are usually overridden by the toplevel - Makefile to the same value or better, but has to be set here too, as - automake "wants" Makefiles to be self-contained (you get an error - pointing out that the variable may be empty). If it hadn't been for - that, SIM_AC_CHECK_TOOLCHAIN_FOR_PRIMARY_TARGET would not be needed. - This detail should only (positively) affect users invoking "make - check" in sim/ instead of "make check-sim" (or "make check") at the - toplevel. Now the output from "configure" matches the target tools - actually used by sim at test-time, for the "primary target". - - Using $(CC) for "example-" targets CC_FOR_TARGET is not changed, as - that appears to be a deliberate special-case. - - Note that all tools still have to be installed and present in - $PATH at configure-time to be properly used at test-time. - - sim: - * m4/sim_ac_toolchain.m4 (SIM_AC_CHECK_TOOLCHAIN_FOR_PRIMARY_TARGET): - New defun. - (SIM_TOOLCHAIN_VARS): Call it using AC_REQUIRE, and use variables - AS_FOR_TARGET, LD_FOR_TARGET and CC_FOR_TARGET instead of hard-coded - values. - * Makefile.in, configure: Regenerate. - -2022-02-14 Hans-Peter Nilsson - - sim cris: Unbreak --disable-sim-hardware builds - With --disable-sim-hardware (--enable-sim-hardware=no), - whose default was changed to --enable-sim-hardware(=yes) in - commit 34cf51120683, building for cris-elf fails as - sim_hw_parse then doesn't exist. - - A cris-elf simulator configured for --enable-sim-hardware - (or the default after to the mentioned commit) runs about - 2.5x slower than one configured --disable-sim-hardware. - A further 2-5% performance regression was not investigated. - - When sim_hw_parse doesn't exist, --cris-900000xx can't be - supported. The best action here is to remove it completely, - so its absence can be identified through --help, but - avoiding littering the code with "#if WITH_HW". - - sim/cris: - * sim-if.c (cris_options) [WITH_HW]: Conditionalize - support of option --cris-900000xx. - (sim_open) [WITH_HW]: Conditionalize sim_hw_parse - call. - -2022-02-14 Hans-Peter Nilsson - - sim/testsuite/cris: As applicable, require simoption --cris-900000xx - Apply the new run_sim_test option "require" as in "#require - simoption --cris-900000xx" for all tests using that option. - This allows a clean test-suite-run for a build with - --disable-sim-hardware, where that option is not supported, - by skipping those tests as "untested". - - sim/testsuite/cris: - * asm/io1.ms, asm/io2.ms, asm/io3.ms, asm/io6.ms, - asm/io7.ms: Call "#require: simoption --cris-900000xx". - -2022-02-14 Hans-Peter Nilsson - - sim/testsuite: Support "requires: simoption <--name-of-option>" - Simulator features can be present or not, typically - depending on different-valued configure options, like - --enable-sim-hardware[=off|=on]. To avoid failures in - test-suite-runs when testing such configurations, a new - predicate is needed, as neither "target", "progos" nor - "mach" fits cleanly. - - The immediate need was to check for presence of a simulator - option, but rather than a specialized "requires-simoption:" - predicate I thought I'd handle the general (parametrized) - need, so here's a generic predicate machinery and a (first) - predicate to use together with it; checking whether a - particular option is supported, by looking at "run --help" - output. This was inspired by the check_effective_target_ - machinery in the gcc test-suite. - - Multiple "requires: " form a list of - predicates (with parameters), to be used as a conjunction. - - sim/testsuite: - * lib/sim-defs.exp (sim_check_requires_simoption): New function. - (run_sim_test): Support "requires: ". - -2022-02-14 Hans-Peter Nilsson - - sim/testsuite/cris/hw/rv-n-cris/irq1.ms: Disable due to randomness - For reasons that remain largely to be investigated (besides - the apparent lack of synchronization between two processes), - this test fails randomly, with two different sets of common - outputs. Curiously, that doesn't happen for the other - similar tests. There's a comment that mentions this, though - that doesn't make it a sustainable part of a test-suite. - (Known-blinking tests should be disabled until fixed.) - - sim/testsuite/cris: - * hw/rv-n-cris/irq1.ms: Disable by use of a never-matched - "progos" value. - -2022-02-14 Hans-Peter Nilsson - - sim/testsuite/cris/c: Use -sim3 but only for newlib targets - Commit a39487c6685f "sim: cris: use -sim with C tests for cris-elf - targets" caused " -sim" to be appended to CFLAGS_FOR_TARGET for - cris*-*-elf, where testing had until then relied on - "RUNTESTFLAGS=--target_board=cris-sim" being passed when running "make - check-sim", adding the right options. While "-sim" happens to work, - the baseboard-file cris-sim.exp uses "-sim3" so for consistency use - that instead. - - Then commit b42f20d2ac72 "sim: testsuite: drop most specific istarget - checks" caused " -sim" to be appended for *all* targets, which just - doesn't work. For example, for crisv32-linux-gnu, that's not a - recognized option and will cause a dejagnu error and further testing - in c.exp will be aborted. - - While cris-sim.exp appends "-static" for *-linux-gnu, further changes - in the test-suite have caused "linux"-specific tests to break, so that - part will be tended to separately. - - But, save and restore CFLAGS_FOR_TARGET around the modification and - use where needed, to not have the CRIS-specific modification affect a - continuing test-run (possibly for other targets). - - sim/testsuite/cris: - * c/c.exp (CFLAGS_FOR_TARGET): Replace appended option " -sim" - with " -sim3", but do it conditionally for newlib targets. Save - and restore CFLAGS_FOR_TARGET in saved_CFLAGS_FOR_TARGET such - that it doesn't affect the value of CFLAGS_FOR_TARGET outside - c.exp. - -2022-02-14 Hans-Peter Nilsson - - sim/testsuite: Set global_cc_os also when no compiler is found - If we don't set this variable, it doesn't exist, and using "#progos:" - in an assembler-file will cause an error rather than just skipping the - test, viz: - - Running /src/sim/testsuite/cris/hw/rv-n-cris/rvc.exp ... - ERROR: tcl error sourcing /src/sim/testsuite/cris/hw/rv-n-cris/rvc.exp. - ERROR: can't read "global_cc_os": no such variable - while executing - "if { $opts(progos) != "" && $opts(progos) != $global_cc_os } { - untested $subdir/$name - return - }" - (procedure "run_sim_test" line 102) - - Neither the commit introducing progos, nor the top comment - in run_sim_test, mentions progos as intended only for C - tests, or that its use must be gated on $global_cc_works != - 0, so (not) setting it in the no-working-compiler path seems - just overlooked. - - Allowing it to be used for assembler tests makes it usable - for e.g. an always-false predicate and in expressions in - .exp files without gating on $global_cc_works != 0. - - With this patch, global_cc_os is set to "", just as for "unknown OS". - - sim/testsuite: - * lib/sim-defs.exp (sim_init_toolchain): Set global_cc_os also when - no working target C compiler is found. - -2022-02-14 Hans-Peter Nilsson - - sim/testsuite/cris: Assembler testcase for PRIx32 usage bug - Several C test-cases exposed the bug, but let's have one for - people who test using just the assembler and linker. - - * asm/endmem1.ms: New test. - -2022-02-14 Hans-Peter Nilsson - - sim cris: Correct PRIu32 to PRIx32 - In 5ee0bc23a68f "sim: clean up bfd_vma printing" there was - an additional introduction of PRIx32 and PRIu32 but just in - sim/cris/sim-if.c. One type of bug was fixed in commit - d16ce6e4d581 "sim: cris: fix memory setup typos" but one - remained; the PRIu32 usage is wrong, as hex output is - desired; note the 0x prefix. - - Without this fix, you'll see output like: - memory map 0:0x4000..0x5fff (8192 bytes) overlaps 0:0x0..0x16383 (91012 bytes) - program stopped with signal 6 (Aborted). - for some C programs, like some of the ones in the sim/cris/c - testsuite from where the example is taken (freopen2.c). - - The bug behavior was with memory allocation. With an - attempt to allocate memory using the brk syscall such that - the room up to the next 8192-byte "page boundary" wasn't - sufficient, the simulator memory allocation machinery horked - on a consistency error when trying to allocate a memory - block to raise the "end of the data segment": there was - already memory allocated at that address. - - Unfortunately, none of the programs in sim/cris/asm exposed - this bug at the time, but an assembler test-case is - committed after this fix. - - sim/cris: - * sim-if.c (sim_open): Correct PRIu32 to PRIx32. - -2022-02-14 Sergei Trofimovich - - microblaze: fix fsqrt collicion to build on glibc-2.35 - * microblaze-opcm.h: Renamed 'fsqrt' to 'microblaze_fsqrt'. - * microblaze-opc.h: Follow 'fsqrt' rename. - -2022-02-14 Tom Tromey - - Remove LA_PRINT_STRING - This removes the LA_PRINT_STRING macro, in favor of using ordinary - method calls. - - Remove LA_PRINT_CHAR - This removes the LA_PRINT_CHAR macro, in favor of using ordinary - method calls. - - Remove LA_PRINT_TYPE - This removes the LA_PRINT_TYPE macro, in favor of using ordinary - method calls. - -2022-02-14 Andrew Burgess - - gdb/python: move styling support to gdb.styling - This commit moves the two Python functions that are used for styling - into a new module, gdb.styling, there's then a small update in - python.c so GDB can find the functions in their new location. - - The motivation for this change is purely to try and reduce the clutter - in the top-level gdb module, and encapsulate related functions into - modules. I did ponder documenting these functions as part of the - Python API, however, doing so would effectively "fix" the API, and I'm - still wondering if there's improvements that could be made, also, the - colorize function is only called in some cases now that GDB prefers - libsource-highlight, so it's not entirely sure how this would work as - part of a user facing API. - - Still, despite these functions never having been part of a documented - API, it is possible that a user out there has overridden these to, in - some way, customize how GDB performs styling. Moving the function as - I propose in this patch could break things for that user, however, - fixing this breakage is trivial, and, as these functions were never - documented, I don't think we should be obliged to not break user code - that relies on them. - -2022-02-14 Andrew Burgess - - gdb: use python to colorize disassembler output - This commit adds styling support to the disassembler output, as such - two new commands are added to GDB: - - set style disassembler enabled on|off - show style disassembler enabled - - In this commit I make use of the Python Pygments package to provide - the styling. I did investigate making use of libsource-highlight, - however, I found the highlighting results to be inferior to those of - Pygments; only some mnemonics were highlighted, and highlighting of - register names such as r9d and r8d (on x86-64) was incorrect. - - To enable disassembler highlighting via Pygments, I've added a new - extension language hook, which is then implemented for Python. This - hook is very similar to the existing hook for source code - colorization. - - One possibly odd choice I made with the new hook is to pass a - gdb.Architecture through, even though this is currently unused. The - reason this argument is not used is that, currently, styling is - performed identically for all architectures. - - However, even though the Python function used to perform styling of - disassembly output is not part of any documented API, I don't want - to close the door on a user overriding this function to provide - architecture specific styling. To do this, the user would inevitably - require access to the gdb.Architecture, and so I decided to add this - field now. - - The styling is applied within gdb_disassembler::print_insn, to achieve - this, gdb_disassembler now writes its output into a temporary buffer, - styling is then applied to the contents of this buffer. Finally the - gdb_disassembler buffer is copied out to its final destination stream. - - There's a new test to check that the disassembler output includes some - escape sequences, though I don't check for specific colours; the - precise colors will depend on which instructions are in the - disassembler output, and, I guess, how pygments is configured. - - The only negative change with this commit is how we currently style - addresses in GDB. - - Currently, when the disassembler wants to print an address, we call - back into GDB, and GDB prints the address value using the `address` - styling, and the symbol name using `function` styling. After this - commit, if pygments is used, then all disassembler styling is done - through pygments, and this include the address and symbol name parts - of the disassembler output. - - I don't know how much of an issue this will be for people. There's - already some precedent for this in GDB when we look at source styling. - For example, function names in styled source listings are not styled - using the `function` style, but instead, either GNU Source Highlight, - or pygments gets to decide how the function name should be styled. - - If the Python pygments library is not present then GDB will continue - to behave as it always has, the disassembler output is mostly - unstyled, but the address and symbols are styled using the `address` - and `function` styles, as they are today. - - However, if the user does `set style disassembler enabled off`, then - all disassembler styling is switched off. This obviously covers the - use of pygments, but also includes the minimal styling done by GDB - when pygments is not available. - -2022-02-14 H.J. Lu - - ld: Keep indirect symbol from IR if referenced from shared object - Don't change indirect symbol defined in IR to undefined if it is - referenced from shared object. - - bfd/ - - PR ld/28879 - * elflink.c (_bfd_elf_merge_symbol): Don't change indirect - symbol defined in IR to undefined if it is referenced from - shared object. - - ld/ - - PR ld/28879 - * testsuite/ld-plugin/lto.exp: Run PR ld/28879 tests. - * testsuite/ld-plugin/pr28879a.cc: New file. - * testsuite/ld-plugin/pr28879b.cc: Likewise. - -2022-02-14 GDB Administrator - - Automatic date update in version.in - -2022-02-13 Alan Modra - - PR28882, build failure with gcc-4.2 due to use of 0b literals - PR 28882 - * elf/loongarch.h: Replace binary literals with hex. - -2022-02-13 Alan Modra - - Don't pass around expld.dataseg pointer - The better to see any code that accesses expld.dataseg. - - * ldexp.c (fold_segment_end): Remove seg parameter. Adjust calls. - (fold_segment_align, fold_segment_relro_end): Likewise. - * ldlang.c (lang_size_segment): Likewise. - (lang_size_relro_segment_1, lang_find_relro_sections_1): Likewise. - -2022-02-13 Alan Modra - - Remove bfd ELF_RELROPAGESIZE - Now that ld properly aligns the end of the relro segment, the hack to - make relro work on powerpc can disappear. - - bfd/ - * bfd.c (bfd_emul_get_commonpagesize): Remove relro param. - Don't return bed->relropagesize. - * elf-bfd.h (struct elf_backend_data): Remove relropagesize. - * elfxx-target.h (ELF_RELROPAGESIZE): Remove. - * elf32-ppc.c (ELF_RELROPAGESIZE): Don't define. - * elf64-ppc.c: Likewise. - * bfd-in2.h: Regenerate. - ld/ - * ldemul.c (after_parse_default): Adjust - bfd_emul_get_commonpagesize call. - -2022-02-13 Alan Modra - - PR28824, relro security issues, x86 keep COMMONPAGESIZE relro - x86 treats MAXPAGESIZE as a memory optimisation parameter, actual - hardware paging is always COMMPAGESIZE of 4k. Use COMMONPAGESIZE for - the end of the relro segment alignment. - - The previous patch regresses pr18176, increasing the testcase file - size from 322208 to 2099872 bytes. Fixing this on x86 will require - introducing a gap after the end of the relro segment (of up to - relropagesize-1 bytes). - - PR 28824 - PR 18176 - * ld.h (ld_config_type): Add relro_use_commonpagesize field. - * ldexp.c (fold_segment_align): Set relropagesize depending on - relro_use_commonpagesize. - * emultempl/elf-x86.em (elf_x86_create_output_section_statements): - Set relro_use_commonpagesize. - * testsuite/ld-x86-64/pr18176.d: xfail. - -2022-02-13 Alan Modra - - PR28824, relro security issues - Background - ========== - There are constraints on layout of binaries to meet demand paging and - memory protection requirements. Demand paged binaries must have file - offset mod pagesize equal to vma mod pagesize. Memory protection - (executable, read, write status) can only change at page boundaries. - The linker's MAXPAGESIZE variable gives the page size for these layout - constraints. - - In a typical basic executable with two memory segments, text (RE) and - data (RW), the data segment must start on a different page to the - last text segment page. For example, with 64k pages and a small - executable of 48k text and 1k data, the text segment might start at - address 0x10000 and data at 0x20000 for a total of two 64k memory - pages. Demand paging would require the image on disk to be 64k+1k - in size. We can do better than that. If the data segment instead - starts at 0x2c000 (the end of the text segment plus one 64k page) then - there are still only two memory pages, but the disk image is now - smaller, 48k+1k in size. This is why the linker normally starts the - data segment at the end of the text segment plus one page. That - simple heuristic isn't ideal in all cases. Changing our simple - example to one with 64k-1 text size, following that heuristic would - result in data starting at 0x2ffff. Now we have two 64k memory data - pages for a data segment of 1k! If the data segment instead started - at 0x30000 we'd get a single data segment page at the cost of 1 byte - extra in the disk image, which is likely a good trade-off. So the - linker does adjust the simple heuristic. Just how much disk image - size increase is allowed is controlled by the linker's COMMONPAGESIZE - variable. - - A PT_GNU_RELRO segment overlays the initial part of the data segment, - saying that those pages should be made read-only after relocation by - the dynamic loader. Page granularity for memory protection means that - the end of the relro segment must be at a page boundary. - - The problem - =========== - Unfortunately most targets currently only align the end of the relro - segment to COMMONPAGESIZE. That results in only partial relro - protection if an executable is running with MAXPAGESIZE pages, since - any part of the relro segment past the last MAXPAGESIZE boundary can't - be made read-only without also affecting sections past the end of the - relro segment. I believe this problem arose because x86 always runs - with 4k (COMMPAGESIZE) memory pages, and therefore using a larger - MAXPAGESIZE on x86 is for reasons other than the demand paging and - memory page protection boundary requirements. - - The solution - ============ - Always end the relro segment on a MAXPAGESIZE boundary, except for - x86. Note that the relro segment, comprising of sections at the start - of the data segment, is sized according to how those sections are laid - out. That means the start of the relro segment is fixed relative to - its end. Which also means the start of the data segment must be at a - fixed address mod MAXPAGESIZE. So for relro the linker can't play - games with the start of the data segment to save disk space. At - least, not without introducing gaps between the relro sections. In - fact, because the linker was starting layout using its simple - heuristic of starting the data segment at the end of the text segment - plus one page, it was sometimes introducing page gaps for no reason. - See pr28743. - - PR 28824 - PR 28734 - * ldexp.c (fold_segment_align): When relro, don't adjust up by - offset within page. Set relropagesize. - (fold_segment_relro_end): Align to relropagesize. - * ldexp.h (seg_align_type): Rename pagesize to commonpagesize. - Add relropagesize. Comment. - * ldlang.c (lang_size_segment): Adjust to suit field renaming. - (lang_size_relro_segment_1): Align relro_end using relropagesize. - -2022-02-13 GDB Administrator - - Automatic date update in version.in - -2022-02-12 GDB Administrator - - Automatic date update in version.in - -2022-02-11 H.J. Lu - - x86: Disallow invalid relocation against protected symbol - I am checking this into master and will backport it to 2.38 branch. - - H.J - ---- - On x86, GCC 12 supports -mno-direct-extern-access to enable canonical - reference to protected function and disable copy relocation. With - -mno-direct-extern-access, the canonical protected function symbols must - be accessed via canonical reference and the protected data symbols in - shared libraries are non-copyable. Under glibc 2.35, non-canonical - reference to the canonical protected function will get the run-time error: - - ./y: internal_f: ./libfoo.so: non-canonical reference to canonical protected function - - and copy relocations against the non-copyable protected symbols will get - the run-time error: - - ./x: internal_i: ./libfoo.so: copy relocation against non-copyable protected symbol - - Update x86 linker to disallow non-canonical reference to the canonical - protected function: - - ld: plt.o: non-canonical reference to canonical protected function `internal_f' in libfoo.so - ld: failed to set dynamic section sizes: bad value - - and copy relocation against the non-copyable protected symbol: - - ld: main.o: copy relocation against non-copyable protected symbol `internal_i' in libfoo.so - - at link-time. - - bfd/ - - PR ld/28875 - * elf-properties.c (_bfd_elf_parse_gnu_properties): Don't skip - shared libraries for GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS. - * elf32-i386.c (elf_i386_scan_relocs): Disallow non-canonical - reference to canonical protected function. - * elf64-x86-64.c (elf_x86_64_scan_relocs): Likewise. - * elfxx-x86.c (elf_x86_allocate_dynrelocs): Don't allow copy - relocation against non-copyable protected symbol. - - ld/ - - PR ld/28875 - * testsuite/ld-i386/i386.exp: Check non-canonical reference to - canonical protected function and check copy relocation against - non-copyable protected symbol. - * testsuite/ld-i386/pr21997-1.err: New file. - * testsuite/ld-i386/pr28875.err: Likewise. - * testsuite/ld-i386/pr28875a.c: Likewise. - * testsuite/ld-i386/pr28875b.c: Likewise. - * testsuite/ld-x86-64/pr21997-1a.err: Updated. - * testsuite/ld-x86-64/pr21997-1b.err: Likewise. - * testsuite/ld-x86-64/pr28875-data.err: New file. - * testsuite/ld-x86-64/pr28875-func.err: Likewise. - * testsuite/ld-x86-64/x86-64.exp: Check non-canonical reference - to canonical protected function and check copy relocation against - non-copyable protected symbol. - -2022-02-11 Tom Tromey - - Add initializers to bound_minimal_symbol - This adds initializers to bound_minimal_symbol, allowing for the - removal of some calls to memset. - -2022-02-11 Bhuvanendra Kumar N - - gdb/fortran: support ptype and print commands for namelist variables - Gfortran supports namelists (a Fortran feature); it emits - DW_TAG_namelist and DW_TAG_namelist_item dies. But gdb does not - process these dies and does not support 'print' or 'ptype' commands on - namelist variables. - - An attempt to print namelist variables results in gdb bailing out with - the error message as shown below. - - (gdb) print nml - No symbol "nml" in current context. - - This commit is to make the print and ptype commands work for namelist - variables and its items. Sample output of these commands is shared - below, with fixed gdb. - - (gdb) ptype nml - type = Type nml - integer(kind=4) :: a - integer(kind=4) :: b - End Type nml - (gdb) print nml - $1 = ( a = 10, b = 20 ) - -2022-02-11 Bruno Larsen - - gdb: fix until behavior with trailing !is_stmt lines - When using the command "until", it is expected that GDB will exit a - loop if the current instruction is the last one related to that loop. - However, if there were trailing non-statement instructions, "until" - would just behave as "next". This was noticeable in clang-compiled - code, but might happen with gcc-compiled as well. PR gdb/17315 relates - to this problem, as running gdb.base/watchpoint.exp with clang - would fail for this reason. - - To better understand this issue, consider the following source code, - with line numbers marked on the left: - - 10: for (i = 0; i < 10; ++i) - 11: loop_body (); - 12: other_stuff (); - - If we transform this to pseudo-assembler, and generate a line table, - we could end up with something like this: - - 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 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 (at 0x110) 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 to exit the loop. - - The fix proposed in this patch, is that, when the user issues the - 'until' command, and GDB sets up the initial stepping range, GDB will - check subsequent SALs (symtab_and_lines) 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 extended 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 patch also adds a test case that can be run with gcc to test that - this functionality is not broken in the future. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17315 - -2022-02-11 Richard Sandiford - - gas/doc: Fix "a true results" typo - -2022-02-11 Jan Vrany - - gdb: extend the information printed by 'maint info jit' - This commit updates the output of 'maint info jit' to print not just - the jit_code_entry address, but also the symfile address, and the - symfile size. - - The new information could be obtained by looking into target memory at - the contents of the jit_code_entry, but, by storing this information - within gdb at the time the jit object is loaded, it is now possible to - check if the jit_code_entry has been modified in target memory behind - gdb's back. - - Additionally, the symfile address is the same address that is now used - in the objfile names after commit 4a620b7e. - - One test that relies on the output of 'maint info jit' was updated to - allow for the new output format. - -2022-02-11 Michael Forney - - bfd: Remove return with expression in void function - * bfd.c (bfd_set_gp_value): Remove return with expression - in void function. - -2022-02-11 Tiezhu Yang - - gdb: LoongArch: Add Makefile, configure and NEWS - This commit adds Makefile, configure and NEWS for LoongArch. - - gdb: LoongArch: Add initial native Linux support - This commit adds initial native Linux support for LoongArch. - - gdb: LoongArch: Add initial Linux target support - This commit adds initial Linux target support for LoongArch. - - gdb: LoongArch: Add initial baremetal support - This commit adds initial baremetal support for LoongArch. - - gdb: LoongArch: Add initial target description support - This commit adds initial target description support for LoongArch. - -2022-02-11 Mike Frysinger - - libctf: delete unused libctf_TEXINFOS - It's not clear what this was meant for, but it's not used by anything, - and the info pages still generate fine without it. - -2022-02-11 Simon Marchi - - gdb/linux: remove ptrace support check for exec, fork, vfork, vforkdone, clone, sysgood - I think it's safe to remove checking support for these ptrace features, - they have all been added in what is now ancient times (around the - beginning of Linux 2.6). This allows removing a bit of complexity in - linux-nat.c and nat/linux-ptrace.c. - - It also allows saving one extra fork every time we start debugging on - Linux: linux_check_ptrace_features forks a child process to test if some - ptrace features are supported. That child process forks a grand-child, - to test whether ptrace reports an event for the fork by the child. This - is no longer needed, if we assume the kernel supports reporting forks. - - PTRACE_O_TRACEVFORKDONE was introduced in Linux in this change, in 2003: - - https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git/commit/?id=45c1a159b85b3b30afd26a77b4be312226bba416 - - PTRACE_O_TRACESYSGOOD was supported at least as of this change, in 2002: - - https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git/commit/?id=acc7088569c8eef04eeed0eff51d23bb5bcff964 - - PTRACE_O_TRACEFORK, PTRACE_O_TRACEVFORK, PTRACE_O_TRACEEXEC and - PTRACE_O_TRACECLONE were introduced in this change, in 2002: - - https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git/commit/?id=a0691b116f6a4473f0fa264210ab9b95771a2b46 - - Change-Id: Iffb906549a89cc6b619427f976ec044706ab1e8d - -2022-02-11 GDB Administrator - - Automatic date update in version.in - -2022-02-10 Andrew Burgess - - gdb/infrun: some extra infrun debug print statements - While reviewing a different patch I wanted to know more about what was - going on during GDB's stepping. I added some extra infrun debug print - calls, and I thought these might be useful to others. - -2022-02-10 GDB Administrator - - Automatic date update in version.in - -2022-02-09 Nick Clifton - - Update the obsolete list and how-to-make-a-release documentation now that the 2.38 release is out. - -2022-02-09 Alan Modra - - PR28763, SIGSEGV during processing of program headers via readelf - PR 28763 - * readelf.c (process_file_header): Discard any cached program - headers if there is an extension field for e_phnum in first - section header. - -2022-02-09 Alan Modra - - Work around gcc-4 warnings in elf64-ppc.c - elf64-ppc.c: In function 'ppc64_elf_size_dynamic_sections': - elf64-ppc.c:10309:45: error: value computed is not used [-Werror=unused-value] - ++lgot_ents, ++lgot_masks, isym != NULL && isym++) - - It is of course a silly warning, fixed in later versions of gcc. I - wrote "isym != NULL && isym++" rather than the simpler "isym++" to - stop sanitisers complaining about incrementing a NULL pointer. isym - is of course unused in any code path where it might start off as - NULL. Sometimes you can't win. So don't try to be clever in reading - local symbols only when needed. 99 times out of 100 they will be - cached anyway. - - * elf64-ppc.c (ppc64_elf_size_dynamic_sections): Avoid annoying - warnings by always reading local syms. - (ppc64_elf_layout_multitoc): Likewise. - -2022-02-09 Peilin Ye - - Test --only-keep-debug on ELF relocatables - Add a test for commit 7c4643efe7be, which fixed --only-keep-debug for ELF - relocatables. - - * testsuite/binutils-all/objcopy.exp - (keep_debug_symbols_for_elf_relocatable): New test. - -2022-02-09 GDB Administrator - - Automatic date update in version.in - -2022-02-08 Palmer Dabbelt - - RISC-V: Stop reporting warnings for mismatched extension versions - The extension version checking logic is really just too complicated to - encode into the linker, trying to do so causes more harm than good. - This removes the checks and the associated tests, leaving the logic to - keep the largest version of each extension linked into the target. - - bfd/ - - * elfnn-riscv.c (riscv_version_mismatch): Rename to - riscv_update_subset_version, and stop reporting warnings on - version mismatches. - (riscv_merge_std_ext): Adjust calls to riscv_version_mismatch. - (riscv_merge_multi_letter_ext): Likewise. - - ld/ - * testsuite/ld-riscv-elf/attr-merge-arch-failed-01.d: Remove - * testsuite/ld-riscv-elf/attr-merge-arch-failed-01a.s: Likewise - * testsuite/ld-riscv-elf/attr-merge-arch-failed-01b.s: Likewise - * testsuite/ld-riscv-elf/attr-merge-arch-failed-02.d: Likewise - * testsuite/ld-riscv-elf/attr-merge-arch-failed-02a.s: Likewise - * testsuite/ld-riscv-elf/attr-merge-arch-failed-02b.s: Likewise - * testsuite/ld-riscv-elf/attr-merge-arch-failed-02c.s: Likewise - * testsuite/ld-riscv-elf/attr-merge-arch-failed-02d.s: Likewise - * testsuite/ld-riscv-elf/attr-merge-user-ext-01.d: New test. - * testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i21_m2p0.s: - Likewise. - * testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i21_m2p1.s: - Likewise. - * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Remove obselete - attr-merge-arch-failed-{01,02}, replace with - attr-merge-user-ext-01. - -2022-02-08 Alan Modra - - PR28862, heap-buffer-overflow in parse_stab_string - I have no info on the format of a "SUNPRO C++ Namespace" stab, so am - relying on the previous code being correct in parsing these stabs. - Just don't allow NULs anywhere in the stab. - - PR 28862 - * stabs.c (parse_stab_string): Don't overrun buffer when parsing - 'Y' stab. - -2022-02-08 Alan Modra - - Re: elf: Check symbol version without any symbols - * testsuite/ld-elf/pr24718-1.d: Don't xfail for hppa64. - -2022-02-08 Andrew Burgess - - gdb: remove tailing newlines from index_cache_debug calls - I noticed that most of the calls to index_cache_debug include a - trailing newline. As the new debug mechanism already adds a newline, - that means all of these debug calls result in a blank line being - printed, which I think is a mistake. - - Remove all the trailing newlines. - - I also reformatted one of the index_cache_debug where a string will - now fit onto a single line. - - Unless 'set debug index-cache on' is used, there should be no visible - change in output after this commit. - -2022-02-08 H.J. Lu - - i386: Allow GOT32 relocations against ABS symbols - GOT32 relocations are allowed since absolute value + addend is stored in - the GOT slot. - - Tested on glibc 2.35 build with GCC 11.2 and -Os. - - bfd/ - - PR ld/28870 - * elfxx-x86.c (_bfd_elf_x86_valid_reloc_p): Also allow GOT32 - relocations. - - ld/ - - PR ld/28870 - * testsuite/ld-i386/i386.exp: Run pr28870. - * testsuite/ld-i386/pr28870.d: New file. - * testsuite/ld-i386/pr28870.s: Likewise. - -2022-02-08 GDB Administrator - - Automatic date update in version.in - -2022-02-07 Andrew Burgess - - gdb/python: allow Value.format_string to return styled output - Add a new argument to the gdb.Value.format_string method, 'styling'. - This argument is False by default. - - When this argument is True, then the returned string can contain output - styling escape sequences. - - When this argument is False, then the returned string will not contain - any styling escape sequences. - - If the returned string is going to be printed to the user, then it is - often nice to retain the GDB styling. - - For the testing, we need to adjust the TERM environment variable, as - we do for all the styling tests. I'm now running all of the C tests - in gdb.python/py-format-string.exp in an environment where styling - could be generated, but only my new test should actually produce - styled output, hopefully this will catch the case where a bug might - cause format_string to always produce styled output. - -2022-02-07 Lancelot SIX - - gdb: make thread_info::m_thread_fsm a std::unique_ptr - While working on function calls, I realized that the thread_fsm member - of struct thread_info is a raw pointer to a resource it owns. This - commit changes the type of the thread_fsm member to a std::unique_ptr in - order to signify this ownership relationship and slightly ease resource - management (no need to manually call delete). - - To ensure consistent use, the field is made a private member - (m_thread_fsm). The setter method (set_thread_fsm) can then check - that it is incorrect to associate a FSM to a thread_info object if - another one is already in place. This is ensured by an assertion. - - The function run_inferior_call takes an argument as a pointer to a - call_thread_fsm and installs it in it in a thread_info instance. Also - change this function's signature to accept a unique_ptr in order to - signify that the ownership of the call_thread_fsm is transferred during - the call. - - No user visible change expected after this commit. - - Tested on x86_64-linux with no regression observed. - - Change-Id: Ia1224f72a4afa247801ce6650ce82f90224a9ae8 - -2022-02-07 Andrew Burgess - - gdb: unbuffer all input streams when not using readline - This commit should fix PR gdb/28711. What's actually going on is - pretty involved, and there's still a bit of the story that I don't - understand completely, however, from my observed results, I think that - the change I propose making here (or something very similar) is going - to be needed. - - The original bug report involves using eclipse to drive gdb using mi - commands. A separate tty is spun off in which to send gdb the mi - commands, this tty is created using the new-ui command. - - The behaviour observed is that, given a particular set of mi commands - being sent to gdb, we sometimes see an ESPIPE error from a lseek - call, which ultimately results in gdb terminating. - - The problems all originate from gdb_readline_no_editing_callback in - gdb/event-top.c, where we can (sometimes) perform calls to fgetc, and - allow glibc to perform buffering on the FILE object being used. - - I say sometime, because, gdb_readline_no_editing_callback already - includes a call to disable the glibc buffering, but this is only done - if the input stream is not a tty. In our case the input stream is a - tty, so the buffering is left in place. - - The first step to understanding why this problem occurs is to - understand that eclipse sends multiple commands to gdb very quickly - without waiting for and answer to each command, eclipse plans to - collect all of the command results after sending all the commands to - gdb. In fact, eclipse sends the commands to gdb that they appear to - arrive in the gdb process as a single block of data. When reproducing - this issue within the testsuite I find it necessary to send multiple - commands using a single write call. - - The next bit of the story gets a little involved, and this is where my - understanding is not complete. I can describe the behaviour that I - observe, and (for me at least) I'm happy that what I'm seeing, if a - little strange, is consistent. In order to fully understand what's - going on I think I would likely need to dive into kernel code, which - currently seems unnecessary given that I'm happy with the solution I'm - proposing. - - The following description all relates to input from a tty in which I'm - not using readline. I see the same problems either when using a - new-ui tty, or with gdb's standard, non-readline, mi tty. - - Here's what I observe happening when I send multiple commands to gdb - using a single write, if I send gdb this: - - command_1\ncommand_2\ncommand_3 - - then gdb's event loop will wake up (from its select) as it sees there - is input available. We call into gdb_readline_no_editing_callback, - where we call fgetc, glibc will do a single big read, and get back - just: - - command_1\n - - that is, despite there being multiple lines of input available, I - consistently get just a single line. From glibc a single character is - returned from the fgetc call, and within gdb we accumulate characters, - one at a time, into our own buffer. Eventually gdb sees the '\n' - character, and dispatches the whole 'command_1' into gdb's command - handler, which processes the command and prints the result. We then - return to gdb_readline_no_editing_callback, which in turn returns to - gdb's event loop where we re-enter the select. - - Inside the select we immediately see that there is more input waiting - on the input stream, drop out of the select, and call back into - gdb_readline_no_editing_callback. In this function we again call - fgetc where glibc performs another big read. This time glibc gets: - - command_2\n - - that is, we once again get just a single line, despite there being a - third line available. Just like the first command we copy the whole - string, character by character into gdb's buffer, then handle the - command. After handling the command we go to the event loop, enter, - and then exit the select, and call back to the function - gdb_readline_no_editing_callback. - - In gdb_readline_no_editing_callback we again call fgetc, this time - glibc gets the string: - - command_3\n - - like before, we copy this to gdb's buffer and handle the command, then - we return to the event loop. At this point the select blocks while we - wait for more input to arrive. - - The important bit of this is that someone, somewhere is, it appears, - taking care to split the incoming write into lines. - - My next experiment is to try something like: - - this_is_a_very_long_command\nshort_command\n - - However, I actually make 'this_is_a_very_long_command' very long, as - in many hundreds of characters long. One way to do this is: - - echo xxxxxx.....xxxxx - - and just adding more and more 'x' characters as needed. What I'm - aiming for is to have the first command be longer than glibc's - internal read buffer, which, on my machine, is 1024 characters. - - However, for this discussion, lets imagine that glibc's buffer is just - 8 characters (we can create just this situation by adding a suitable - setbuf call into gdb_readline_no_editing_callback). - - Now, if I send gdb this data: - - abcdefghij\nkl\n - - The first read from glibc will get 'abcdefgh', that is a full 8 - character buffer. Once gdb has copied these to its buffer we call - fgetc again, and now glibc will get 'ij\n', that is, just like before, - multiple lines are split at the '\n' character. The full command, - which is now in gdb's buffer can be handled 'abcdefghij', after which - we go (via the event loop) back to gdb_readline_no_editing_callback. - Now we call fgetc, and glibc will get 'kl\n', which is then handled in - the normal way. - - So far, so good. However, there is, apparently, one edge case where - the above rules don't apply. - - If the '\n' character is the first character read from the kernel, - then the incoming lines are not split up. So, given glibc's 8 - character buffer, if I send gdb this: - - abcdefgh\nkl\n - - that is the first command is 8 characters plus a newline, then, on the - first read (from within glibc) we get 'abcdefgh' in a single buffer. - As there's no newline gdb calls fgetc again, and glibc does another - large read, now we get: - - \nkl\n - - which doesn't follow the above pattern - the lines are not split into - separate buffers! - - So, gdb reads the first character from glibc using fgetc, this is the - newline. Now gdb has a complete command, and so the command is - handled. We then return to the event loop and enter the select. - - The problem is that, as far as the kernel is concerned, there is no - more input pending, it's all been read into glibc's buffer, and so the - select doesn't return. The second command is basically stuck in - glibc's buffer. - - If I send another command to gdb, or even just send an empty - command (a lone newline) then the select returns, we call into - gdb_readline_no_editing_callback, and now gdb sees the second - command. - - OK, so the above is interesting, but it doesn't explain the ESPIPE - error. - - Well, that's a slightly different, but related issue. The ESPIPE - case will _only_ show up when using new-ui to create the separate tty - for mi commands, and is a consequence of this commit: - - commit afe09f0b6311a4dd1a7e2dc6491550bb228734f8 - Date: Thu Jul 18 17:20:04 2019 +0100 - - Fix for using named pipes on Windows - - Prior to this commit, the new-ui command would open the tty three - times, once each for stdin, stderr, and stdout. After this commit we - open the tty just once and reuse the FILE object for all three roles. - - Consider the problem case, where glibc has (unexpectedly) read the - second command into its internal buffer. When we handle the first - command we usually end up having to write something to the mi output - stream. - - After the above commit the same FILE object represents both the input - and output streams, so, when gdb tries to write to the FILE object, - glibc spots that there is input pending within the input buffer, and - so assumes that we have read ahead of where we should be in the input - file. To correct for this glibc tries to do an lseek call to - reposition the file offset of the output stream prior to writing to - it. However, as the output stream is a tty, and seeking is not - supported on a tty, this lseek call fails, this results in the ESPIPE, - which ultimately causes gdb to terminate. - - So, now we understand why the ESPIPE triggers (which was what caused - the gdb crash in the original bug report), and we also understand that - sometime gdb will not handle the second command in a timely - fashion (if the first command is just the wrong length). So, what to - do about all this? - - We could revert the commit mentioned above (and implement its - functionality another way). This would certainly resolve the ESPIPE - issue, the buffered input would now only be on the input stream, the - output stream would have no buffered input, and so glibc would never - try to lseek, and so we'd never get the ESPIPE error. - - However, this only solves one of the two problems. We would still - suffer from the problem where, if the first command is just the wrong - length, the second command will not (immediately) get handled. - - The only solution I can see to this problem is to unbuffer the input - stream. If glibc is not buffering the input, but instead, we read - incoming data character by character from the kernel, then everything - will be fine. As soon as we see the newline at the end of the first - command we will handle the first command. As glibc will have no - buffered input it will not be tempted to lseek, so no ESPIPE error. - When we go have to the event loop there will be more data pending in - the kernel, so the select will immediately return, and the second - command will be processed. - - I'm tempted to suggest that we should move the unbuffering of the - input stream out of gdb_readline_no_editing_callback and do it - somewhere earlier, more like when we create the input streams. - However, I've not done that in this commit for a couple of reasons: - - 1. By keeping the unbuffering in gdb_readline_no_editing_callback - I'm making the smallest possible change that fixes the bug. Moving - the unbuffering somewhere better can be done as a refactor later, if - that 's felt to be important, - - 2. I don't think making repeated calls to unbuffer the input will - have that much performance impact. We only make the unbuffer call - once per call to gdb_readline_no_editing_callback, and, if the input - stream is already unbuffered we'll return pretty quickly, so I don't - see this as being massively costly, - - 3. Tom is currently doing lots of gdb stream management changes and - I want to minimise the chances we'll conflict. - - So, this commit just changes gdb_readline_no_editing_callback to - always unbuffer the input stream. - - The test for this issue sends two commands in a loop, with the first - command growing bigger each time around the loop. I actually make the - first command bigger by just adding whitespace to the front, as gdb - still has to read the complete command (including whitespace) via - glibc, so this is enough to trigger the bug. - - The original bug was reported when using a virtual machine, and in - this situation we see this in the strace output: - - read(9, "70-var-info-path-expression var1.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 1024) = 64 - read(9, "\n71-var-info-path-expression var1.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n", 1024) = 67 - - I'm not completely sure what's going on here, but it appears that the - kernel on the virtual machine is delivering the input to glibc slower - than I see on my real hardware; glibc asks for 1024 bytes, but only - gets 64 bytes the first time. In the second read we see the problem - case, the first character is the newline, but then the entire second - command is included. - - If I run this exact example on my real hardware then the first command - would not be truncated at 64 bytes, instead, I'd expect to see the - newline included in the first read, with the second command split into - a second read. - - So, for testing, I check cases where the first command is just a few - characters (starting at 8 character), all the way up to 2048 - characters. Hopefully, this should mean we hit the problem case for - most machine setups. - - The only last question relates to commit afe09f0b6311a4d that I - mentioned earlier. That commit was intended to provide support for - Microsoft named pipes: - - https://docs.microsoft.com/en-us/windows/win32/ipc/named-pipes - - I know next to nothing about this topic beyond a brief scan of the - above link, but I think these windows named pipe are closer in - behaviour to unix sockets than to unix named fifos. - - I am a little nervous that, after the above commit, we now use the - same FILE for in, err, and out streams. In contrast, in a vanilla C - program, I would expect different FILE objects for each stream. - - Still, I'm reluctant to revert the above commit (and provide the same - functionality a different way) without a specific bug to point at, - and, now that the streams are unbuffered, I expect a lot of the read - and write calls are going straight to the kernel with minimal glibc - involvement, so maybe it doesn't really matter. Anyway, I haven't - touched the above patch, but it is something to keep in mind when - working in this area. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28711 - -2022-02-07 Andrew Burgess - - gdb/disasm: combine the no printing disassembler setup code - We have three places in gdb where we initialise a disassembler that - will not print anything (used for figuring out the length of - instructions, or collecting other information from the disassembler). - - Each of these places has its own stub function to act as a print like - callback, the stub function is identical in each case, and just does - nothing. - - In this commit I create a new function to initialise a disassembler - that doesn't print anything, and have all three locations use this new - function. There's now only one non-printing stub function. - - There should be no user visible changes after this commit. - -2022-02-07 Tankut Baris Aktemur - - gdb: add the 'set/show suppress-cli-notifications' command - GDB already has a flag to suppress printing notification events, such - as thread and inferior context switches, on the CLI. This is used - internally when executing commands. Make the flag available to the - user via a new command. This is expected to be useful in scripts. - - For instance, suppose that when Inferior 1 gets to a certain state, - you want to add and set up a new inferior using the commands below, - but you also want to have a reduced/clean output. - - define do-setup - printf "Setting up Inferior 2...\n" - add-inferior -exec a.out - inferior 2 - break file.c:3 - run - inferior 1 - printf "Done\n" - end - - Currently, GDB prints - - (gdb) do-setup - Setting up Inferior 2... - [New inferior 2] - Added inferior 2 on connection 1 (native) - [Switching to inferior 2 [] (/tmp/a.out)] - Breakpoint 2 at 0x1155: file file.c, line 3. - - Thread 2.1 "a.out" hit Breakpoint 2, main () at file.c:3 - 3 return 0; - [Switching to inferior 1 [process 7670] (/tmp/test)] - [Switching to thread 1.1 (process 7670)] - #0 main () at test.c:2 - 2 int a = 1; - Done - - GDB's Python API make it possible to capture and return GDB's output, - but this does not work for all the streams. In particular, CLI - notification events are not captured: - - (gdb) python gdb.execute("do-setup", False, True) - [Switching to inferior 2 [] (/tmp/a.out)] - - Thread 2.1 "a.out" hit Breakpoint 2, main () at file.c:3 - 3 return 0; - [Switching to inferior 1 [process 8263] (/tmp/test)] - [Switching to thread 1.1 (process 8263)] - #0 main () at test.c:2 - 2 int a = 1; - - You can use the new "set suppress-cli-notifications" command to - suppress the output: - - (gdb) set suppress-cli-notifications on - (gdb) do-setup - Setting up Inferior 2... - [New inferior 2] - Added inferior 2 on connection 1 (native) - Breakpoint 2 at 0x1155: file file.c, line 3. - Done - -2022-02-07 Tankut Baris Aktemur - - gdb/cli: add a 'normal_stop' option to 'cli_suppress_notification' - Extend the 'cli_suppress_notification' struct with a new field, - 'normal_stop', that can be used for checking if printing normal stop - events on the CLI should be suppressed. - - This patch only introduces the flag. The subsequent patch adds a user - command to turn the flag off/on. - -2022-02-07 Tankut Baris Aktemur - - gdb/cli: convert cli_suppress_notification from int to bool - Convert the suppress_notification flag for the CLI from int to bool. - -2022-02-07 Alan Modra - - Revert "elf: Remove the 1-page gap before the RELRO segment" - This reverts commit 2f83249c13d86065b4c7cdb198ea871017b4bba1. - - PR ld/28743 - * ldlang.c (lang_size_relro_segment_1): Revert 2022-01-10 changes. - * testsuite/ld-i386/pr20830.d: Likewise. - * testsuite/ld-s390/gotreloc_64-relro-1.dd: Likewise. - * testsuite/ld-x86-64/pr14207.d: Likewise. - * testsuite/ld-x86-64/pr18176.d: Likewise. - * testsuite/ld-x86-64/pr20830a-now.d: Likewise. - * testsuite/ld-x86-64/pr20830a.d: Likewise. - * testsuite/ld-x86-64/pr20830b-now.d: Likewise. - * testsuite/ld-x86-64/pr20830b.d: Likewise. - * testsuite/ld-x86-64/pr21038a-now.d: Likewise. - * testsuite/ld-x86-64/pr21038a.d: Likewise. - * testsuite/ld-x86-64/pr21038b-now.d: Likewise. - * testsuite/ld-x86-64/pr21038c-now.d: Likewise. - * testsuite/ld-x86-64/pr21038c.d: Likewise. - -2022-02-07 Alan Modra - - Revert "ld: Rewrite lang_size_relro_segment_1" - This reverts commit c804c6f98d342c3d46f73d7a7ec6229d5ab1c9f3. - - PR ld/28743 - PR ld/28819 - * ldlang.c (lang_size_relro_segment_1): Revert 2022-01-14 change. - * testsuite/ld-x86-64/pr28743-1.d: Likewise. - * testsuite/ld-x86-64/pr28743-1.s: Likewise. - * testsuite/ld-x86-64/x86-64.exp: Likewise. - -2022-02-07 GDB Administrator - - Automatic date update in version.in - -2022-02-06 Alan Modra - - A more elegant pr28827-1 testcase - Use .irpc macros in pr28827-1.s - - * testsuite/ld-powerpc/pr28827-1.s: Make the testcase more - elegant. Comment. - -2022-02-06 Tom Tromey - - Merge do_val_print and common_val_print - The only caller of do_val_print just does a small bit of work before - the call. This patch merges the two functions, and removes an - unnecessary local variable, making gdb a bit simpler. - -2022-02-06 Simon Marchi - - gdb: remove SYMBOL_LINE macro - Add a getter and a setter for a symbol's line. Remove the corresponding macro - and adjust all callers. - - Change-Id: I229f2b8fcf938c07975f641361313a8761fad9a5 - -2022-02-06 Simon Marchi - - gdb: remove SYMBOL_TYPE macro - Add a getter and a setter for a symbol's type. Remove the corresponding - macro and adjust all callers. - - Change-Id: Ie1a137744c5bfe1df4d4f9ae5541c5299577c8de - -2022-02-06 Simon Marchi - - gdb: remote SYMBOL_IS_CPLUS_TEMPLATE_FUNCTION macro - Add a getter for a whether a symbol is a C++ template function. Remove - the corresponding macro and adjust all callers. - - Change-Id: I89abc2802a952b77b0e0eb73a25c2306cb8e8bcc - -2022-02-06 Simon Marchi - - gdb: remove SYMBOL_INLINED macro - Add a getter and a setter for whether a symbol is inlined. Remove the - corresponding macro and adjust all callers. - - Change-Id: I934468da3b5a32dd6b161a6f252a6b1b94737279 - -2022-02-06 Simon Marchi - - gdb: remove SYMBOL_IS_ARGUMENT macro - Add a getter and a setter for whether a symbol is an argument. Remove - the corresponding macro and adjust all callers. - - Change-Id: I71b4f0465f3dfd2ed8b9e140bd3f7d5eb8d9ee81 - -2022-02-06 Simon Marchi - - gdb: remove SYMBOL_OBJFILE_OWNED macro - Add a getter and a setter for whether a symbol is objfile owned. Remove - the corresponding macro and adjust all callers. - - Change-Id: Ib7ef3718d65553ae924ca04c3fd478b0f4f3147c - -2022-02-06 Simon Marchi - - gdb: remove SYMBOL_DOMAIN macro - Add a getter and a setter for a symbol's domain. Remove the - corresponding macro and adjust all callers. - - Change-Id: I54465b50ac89739c663859a726aef8cdc6e4b8f3 - -2022-02-06 Simon Marchi - - gdb: remove SYMBOL_CLASS macro, add getter - Change-Id: I83211d5a47efc0564386e5b5ea4a29c00b1fd46a - -2022-02-06 Simon Marchi - - gdb: remove SYMBOL_IMPL macro, add method - Add a getter for a symbol's "impl". Remove the corresponding macro and - adjust all callers. - - Change-Id: Ibe26ed442f0f99a0f5cddafca30bd96ec7fb9fa8 - -2022-02-06 Simon Marchi - - gdb: remove SYMBOL_ACLASS_INDEX macro, add getter/setter - Add a getter and a setter for a symbol's aclass index. Remove the - corresponding macro and adjust all callers. - - Change-Id: Ie8c8d732624cfadb714aba5ddafa3d29409b3d39 - -2022-02-06 Simon Marchi - - gdb: remove SYMBOL_MATCHES_SEARCH_NAME - It seems like this macro is not needed at all anymore, it just wraps the - function of the same name with the same arguments. - - Change-Id: I3c342ac8d89c27af5aee1a819dc32cc6396fd41b - -2022-02-06 Simon Marchi - - gdb: remove SYMTAB_DIRNAME macro - Remove the macro, replace with an equivalent method. - - Change-Id: I46ec36b91bb734331138eb9cd086b2db01635aed - -2022-02-06 Simon Marchi - - gdb: remove SYMTAB_PSPACE macro - Remove the macro, replace with an equivalent method. - - Change-Id: Icccc20e7e8ae03ac4dac1c7514c25a12a9a0ac69 - -2022-02-06 Simon Marchi - - gdb: remove SYMTAB_OBJFILE macro - Remove the macro, replace with an equivalent method. - - Change-Id: I8f9ecd290ad28502e53c1ceca5006ba78bf042eb - -2022-02-06 Simon Marchi - - gdb: remove SYMTAB_BLOCKVECTOR macro - Remove the macro, replace with an equivalent method. - - Change-Id: Id6fe2a79c04bcd6c69ccaefb7a69bc06a476288c - -2022-02-06 Simon Marchi - - gdb: remove SYMTAB_LANGUAGE macro, add getter/setter - Add a getter and a setter for a symtab's language. Remove the - corresponding macro and adjust all callers. - - Change-Id: I9f4d840b11c19f80f39bac1bce020fdd1739e11f - -2022-02-06 Simon Marchi - - gdb: remove SYMTAB_LINETABLE macro, add getter/setter - Add a getter and a setter for a symtab's linetable. Remove the - corresponding macro and adjust all callers. - - Change-Id: I159183fc0ccd8e18ab937b3c2f09ef2244ec6e9c - -2022-02-06 Simon Marchi - - gdb: remove SYMTAB_COMPUNIT macro, add getter/setter - Add a getter and a setter for a symtab's compunit_symtab. Remove the - corresponding macro and adjust all callers. - - For brevity, I chose the name "compunit" instead of "compunit_symtab" - the the field, getter and setter names. Since we are already in symtab - context, the _symtab suffix seems redundant. - - Change-Id: I4b9b731c96e3594f7733e75af1e3d01bc0e4fe92 - -2022-02-06 Simon Marchi - - gdb: remove COMPUNIT_MACRO_TABLE macro, add getter/setter - Add a getter and a setter for a compunit_symtab's macro table. Remove the - corresponding macro and adjust all callers. - - Change-Id: I00615ea72d5ac43d9a865e941cb2de0a979c173a - -2022-02-06 Simon Marchi - - gdb: remove COMPUNIT_EPILOGUE_UNWIND_VALID macro, add getter/setter - Add a getter and a setter for a compunit_symtab's epilogue unwind valid flag. - Remove the corresponding macro and adjust all callers. - - Change-Id: If3b68629d987767da9be7041a95d96dc34367a9a - -2022-02-06 Simon Marchi - - gdb: remove COMPUNIT_LOCATIONS_VALID macro, add getter/setter - Add a getter and a setter for a compunit_symtab's locations valid flag. - Remove the corresponding macro and adjust all callers. - - Change-Id: I3e3cfba926ce62993d5b61814331bb3244afad01 - -2022-02-06 Simon Marchi - - gdb: remove COMPUNIT_BLOCK_LINE_SECTION macro, add getter/setter - Add a getter and a setter for a compunit_symtab's block line section. Remove - the corresponding macro and adjust all callers. - - Change-Id: I3eb1a323388ad55eae8bfa45f5bc4a08dc3df455 - -2022-02-06 Simon Marchi - - gdb: remove COMPUNIT_BLOCKVECTOR macro, add getter/setter - Add a getter and a setter for a compunit_symtab's blockvector. Remove - the corresponding macro and adjust all callers. - - Change-Id: I99484c6619dcbbea7c5d89c72aa660316ca62f64 - -2022-02-06 Simon Marchi - - gdb: remove COMPUNIT_DIRNAME macro, add getter/setter - Add a getter and a setter for a compunit_symtab's dirname. Remove the - corresponding macro and adjust all callers. - - Change-Id: If2f39b295fd26822586485e04a8b8b5aa5cc9b2e - -2022-02-06 Simon Marchi - - gdb: remove COMPUNIT_PRODUCER macro, add getter/setter - Add a getter and a setter for a compunit_symtab's producer. Remove the - corresponding macro and adjust all callers. - - Change-Id: Ia1d6d8a0e247a08a21af23819d71e49b37d8931b - -2022-02-06 Simon Marchi - - gdb: remove COMPUNIT_DEBUGFORMAT macro, add getter/setter - Add a getter and a setter for a compunit_symtab's debugformat. Remove - the corresponding macro and adjust all callers. - - Change-Id: I1667b02d5322346f8e23abd9f8a584afbcd75975 - -2022-02-06 Simon Marchi - - gdb: remove COMPUNIT_FILETABS macro - I think that most remaining uses of COMPUNIT_FILETABS intend to get the - primary filetab of the compunit_symtab specifically (and not to iterate - over all filetabs, for example, those cases would use compunit_filetabs, - which has been converted to compunit_symtab::filetabs), so replace mosts - uses with compunit_symtab::primary_filetab. - - In jit.c, function finalize_symtab, we can save the symtab object - returned by allocate_symtab and use it, it makes things simpler. - - Change-Id: I4e51d6d4b40759de8768b61292e5e13c8eae2e38 - -2022-02-06 Simon Marchi - - gdb: move compunit_filetabs to compunit_symtab::filetabs - Make compunit_filetabs, used to iterate a compunit_symtab's filetabs, a - method of compunit_symtab. The name filetabs conflicts with the current - name of the field. Rename the field to m_filetabs, since at this point - nothing outside of compunit_symtab uses it, so we should treat it as - private (even though it's not actually private). Rename the - last_filetab field to m_last_filetab as well (it's only used on - compunit_symtab::add_filetab). - - Adjust the COMPUNIT_FILETABS macro to keep its current behavior of - returning the first filetab. - - Change-Id: I537b553a44451c52d24b18ee1bfa47e23747cfc3 - -2022-02-06 Simon Marchi - - gdb: add compunit_symtab::set_primary_filetab method - Add a method to set the primary filetab of the CU. This is currently - done in buildsym_compunit::end_symtab_with_blockvector. - - Change-Id: I16c51a6b90a4cb4c0c5f183b0f2e12bc64b6fd74 - -2022-02-06 Simon Marchi - - gdb: add compunit_symtab::add_filetab method - Add a method to append a filetab/symtab to a compunit_symtab. There is - a single place where this is done currently, in allocate_symtab. - - Change-Id: Ie86c6e34d175728173d1cffdce44acd6cff6c31d - -2022-02-06 Simon Marchi - - gdb: rename compunit_primary_filetab to compunit_symtab::primary_filetab - Make compunit_primary_filetab a method of compunit_symtab. - - Change-Id: Iee3c4f7e36d579bf763c5bba146e5e10d6766768 - -2022-02-06 Simon Marchi - - gdb: remove COMPUNIT_OBJFILE macro - Remove the macro, update all users to use the getter directly. - - Change-Id: I3f0fd6f4455d1c4ebd5da73b561eb18a979ef1f6 - -2022-02-06 Simon Marchi - - gdb: add getter/setter for compunit_symtab::objfile - Rename the field to m_objfile, and add a getter and a setter. Update - all users. - - Change-Id: If7e2f763ee3e70570140d9af9261b1b056253317 - -2022-02-06 Tom Tromey - - Allow non-ASCII characters in Rust identifiers - Rust 1.53 (quite a while ago now) ungated the support for non-ASCII - identifiers. This didn't work in gdb. This is PR rust/20166. - - This patch fixes the problem by allowing non-ASCII characters to be - considered as identifier components. It seemed simplest to just pass - them through -- doing any extra checking didn't seem worthwhile. - - The new test also verifies that such characters are allowed in strings - and character literals as well. The latter also required a bit of - work in the lexer. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=20166 - -2022-02-06 Tom Tromey - - Fix Rust parser bug with function fields - In Rust, 'obj.f()' is a method call -- but '(obj.f)()' is a call of a - function-valued field 'f' in 'obj'. The Rust parser in gdb currently - gets this wrong. This is PR rust/24082. - - The expression and Rust parser rewrites made this simple to fix -- - simply wrapping a parenthesized expression in a new operation handles - it. This patch has a slight hack because I didn't want to introduce a - new exp_opcode enumeration constant just for this. IMO this doesn't - matter, since we should work toward removing dependencies on these - opcodes anyway; but let me know what you think of this. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=24082 - -2022-02-06 H.J. Lu - - ld: Add emultempl/emulation.em - Add emultempl/emulation.em to define ld_${EMULATION_NAME}_emulation so - that new emulation hooks can be added easily. - - * emultempl/aix.em (LDEMUL_AFTER_OPEN): New. - (LDEMUL_SET_OUTPUT_ARCH): Likewise. - (LDEMUL_CHOOSE_TARGET): Likewise. - (LDEMUL_BEFORE_ALLOCATION): Likewise. - (LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS): Likewise. - (LDEMUL_OPEN_DYNAMIC_ARCHIVE): Likewise. - (LDEMUL_PARSE_ARGS): Likewise. - (LDEMUL_ADD_OPTIONS): Likewise. - (LDEMUL_HANDLE_OPTION): Likewise. - (LDEMUL_UNRECOGNIZED_FILE): Likewise. - (LDEMUL_PRINT_SYMBOL): Likewise. - (ld_${EMULATION_NAME}_emulation): Removed. - Source ${srcdir}/emultempl/emulation.em. - * emultempl/beos.em (gld_${EMULATION_NAME}_before_parse): - Renamed to ... - (gld${EMULATION_NAME}_before_parse): This. - (gld_${EMULATION_NAME}_set_symbols): Renamed to ... - (gld${EMULATION_NAME}_set_symbols): This. - (gld_${EMULATION_NAME}_after_open): Renamed to ... - (gld${EMULATION_NAME}_after_open): This. - (gld_${EMULATION_NAME}_before_allocation): Renamed to ... - (gld${EMULATION_NAME}_before_allocation): This. - (gld_${EMULATION_NAME}_get_script): Renamed to ... - (gld${EMULATION_NAME}_get_script): This. - (LDEMUL_AFTER_OPEN): New. - (LDEMUL_BEFORE_ALLOCATION): Likewise. - (LDEMUL_PLACE_ORPHAN): Likewise. - (LDEMUL_SET_SYMBOLS): Likewise. - (LDEMUL_ADD_OPTIONS): Likewise. - (LDEMUL_HANDLE_OPTION): Likewise. - (ld_${EMULATION_NAME}_emulation): Removed. - Source ${srcdir}/emultempl/emulation.em. - * emultempl/elf.em (LDEMUL_AFTER_PARSE): New. - (LDEMUL_AFTER_OPEN): Likewise. - (LDEMUL_BEFORE_PLACE_ORPHANS): Likewise. - (LDEMUL_AFTER_ALLOCATION): Likewise. - (LDEMUL_SET_OUTPUT_ARCH): Likewise. - (LDEMUL_BEFORE_ALLOCATION): Likewise. - (LDEMUL_OPEN_DYNAMIC_ARCHIVE): Likewise. - (LDEMUL_PLACE_ORPHAN): Likewise. - (LDEMUL_ADD_OPTIONS): Likewise. - (LDEMUL_HANDLE_OPTION): Likewise. - (LDEMUL_LIST_OPTIONS): Likewise. - (LDEMUL_UNRECOGNIZED_FILE): Likewise. - (ld_${EMULATION_NAME}_emulation): Removed. - Source ${srcdir}/emultempl/emulation.em. - * emultempl/emulation.em: New file. - * emultempl/generic.em (ld_${EMULATION_NAME}_emulation): Removed. - Source ${srcdir}/emultempl/emulation.em. - * emultempl/msp430.em (LDEMUL_AFTER_OPEN): New. - (LDEMUL_AFTER_ALLOCATION): Likewise. - (LDEMUL_PLACE_ORPHAN): Likewise. - (LDEMUL_FINISH): Likewise. - (LDEMUL_ADD_OPTIONS): Likewise. - (LDEMUL_HANDLE_OPTION): Likewise. - (LDEMUL_LIST_OPTIONS): Likewise. - (ld_${EMULATION_NAME}_emulation): Removed. - Source ${srcdir}/emultempl/emulation.em. - * emultempl/pe.em (gld_${EMULATION_NAME}_before_parse): Renamed - to ... - (gld${EMULATION_NAME}_before_parse): This. - (gld_${EMULATION_NAME}_list_options): Renamed to ... - (gld${EMULATION_NAME}_list_options): This. - (gld_${EMULATION_NAME}_set_symbols): Renamed to ... - (gld${EMULATION_NAME}_set_symbols): This. - (gld_${EMULATION_NAME}_after_parse): Renamed to ... - (gld${EMULATION_NAME}_after_parse): This. - (gld_${EMULATION_NAME}_after_open): Renamed to ... - (gld${EMULATION_NAME}_after_open): This. - (gld_${EMULATION_NAME}_before_allocation): Renamed to ... - (gld${EMULATION_NAME}_before_allocation): This. - (gld_${EMULATION_NAME}_unrecognized_file): Renamed to ... - (gld${EMULATION_NAME}_unrecognized_file): This. - (gld_${EMULATION_NAME}_recognized_file): Renamed to ... - (gld${EMULATION_NAME}_recognized_file): This. - (gld_${EMULATION_NAME}_finish): Renamed to ... - (gld${EMULATION_NAME}_finish): This. - (gld_${EMULATION_NAME}_place_orphan): Renamed to ... - (gld${EMULATION_NAME}_place_orphan): This. - (gld_${EMULATION_NAME}_open_dynamic_archive): Renamed to ... - (gld${EMULATION_NAME}_open_dynamic_archive): This. - (gld_${EMULATION_NAME}_find_potential_libraries): Renamed to ... - (gld${EMULATION_NAME}_find_potential_libraries): This. - (gld_${EMULATION_NAME}_get_script): Renamed to ... - (gld${EMULATION_NAME}_get_script): This. - (LDEMUL_AFTER_PARSE): New. - (LDEMUL_AFTER_OPEN): Likewise. - (LDEMUL_BEFORE_ALLOCATION): Likewise. - (LDEMUL_FINISH=): Likewise. - (LDEMUL_OPEN_DYNAMIC_ARCHIVE): Likewise. - (LDEMUL_PLACE_ORPHAN): Likewise. - (LDEMUL_SET_SYMBOLS): Likewise. - (LDEMUL_ADD_OPTIONS): Likewise. - (LDEMUL_HANDLE_OPTION): Likewise. - (LDEMUL_UNRECOGNIZED_FILE): Likewise. - (LDEMUL_LIST_OPTIONS): Likewise. - (LDEMUL_RECOGNIZED_FILE): Likewise. - (LDEMUL_FIND_POTENTIAL_LIBRARIES): Likewise. - (ld_${EMULATION_NAME}_emulation): Removed. - Source ${srcdir}/emultempl/emulation.em. - * emultempl/pep.em (gld_${EMULATION_NAME}_before_parse): Renamed - to ... - (gld${EMULATION_NAME}_before_parse): This. - (gld_${EMULATION_NAME}_list_options): Renamed to ... - (gld${EMULATION_NAME}_list_options): This. - (gld_${EMULATION_NAME}_set_symbols): Renamed to ... - (gld${EMULATION_NAME}_set_symbols): This. - (gld_${EMULATION_NAME}_after_parse): Renamed to ... - (gld${EMULATION_NAME}_after_parse): This. - (gld_${EMULATION_NAME}_after_open): Renamed to ... - (gld${EMULATION_NAME}_after_open): This. - (gld_${EMULATION_NAME}_before_allocation): Renamed to ... - (gld${EMULATION_NAME}_before_allocation): This. - (gld_${EMULATION_NAME}_unrecognized_file): Renamed to ... - (gld${EMULATION_NAME}_unrecognized_file): This. - (gld_${EMULATION_NAME}_recognized_file): Renamed to ... - (gld${EMULATION_NAME}_recognized_file): This. - (gld_${EMULATION_NAME}_finish): Renamed to ... - (gld${EMULATION_NAME}_finish): This. - (gld_${EMULATION_NAME}_place_orphan): Renamed to ... - (gld${EMULATION_NAME}_place_orphan): This. - (gld_${EMULATION_NAME}_open_dynamic_archive): Renamed to ... - (gld${EMULATION_NAME}_open_dynamic_archive): This. - (gld_${EMULATION_NAME}_find_potential_libraries): Renamed to ... - (gld${EMULATION_NAME}_find_potential_libraries): This. - (gld_${EMULATION_NAME}_get_script): Renamed to ... - (gld${EMULATION_NAME}_get_script): This. - (LDEMUL_AFTER_PARSE): New. - (LDEMUL_AFTER_OPEN): Likewise. - (LDEMUL_BEFORE_ALLOCATION): Likewise. - (LDEMUL_FINISH=): Likewise. - (LDEMUL_OPEN_DYNAMIC_ARCHIVE): Likewise. - (LDEMUL_PLACE_ORPHAN): Likewise. - (LDEMUL_SET_SYMBOLS): Likewise. - (LDEMUL_ADD_OPTIONS): Likewise. - (LDEMUL_HANDLE_OPTION): Likewise. - (LDEMUL_UNRECOGNIZED_FILE): Likewise. - (LDEMUL_LIST_OPTIONS): Likewise. - (LDEMUL_RECOGNIZED_FILE): Likewise. - (LDEMUL_FIND_POTENTIAL_LIBRARIES): Likewise. - (ld_${EMULATION_NAME}_emulation): Removed. - Source ${srcdir}/emultempl/emulation.em. - * emultempl/ticoff.em (gld_${EMULATION_NAME}_list_options): - Renamed to ... - (gld${EMULATION_NAME}_list_options): This. - (gld_${EMULATION_NAME}_before_parse): Renamed to ... - (gld_${EMULATION_NAME}_get_script): Renamed to ... - (gld${EMULATION_NAME}_get_script): This. - (LDEMUL_ADD_OPTIONS): New. - (LDEMUL_HANDLE_OPTION): Likewise. - (LDEMUL_LIST_OPTIONS): Likewise. - (ld_${EMULATION_NAME}_emulation): Removed. - Source ${srcdir}/emultempl/emulation.em. - * emultempl/vanilla.em (LDEMUL_BEFORE_PARSE): New. - (LDEMUL_SET_OUTPUT_ARCH): Likewise. - (LDEMUL_GET_SCRIPT): Likewise. - (EMULATION_NAME): Likewise. - (OUTPUT_FORMAT): Likewise. - (ld_vanilla_emulation): Removed. - Source ${srcdir}/emultempl/emulation.em. - -2022-02-06 Andrew Burgess - - gdb/doc: update docs for 'info win' and 'winheight' commands - This started by noticing that the docs for 'winheight' are out of - date, the docs currently give a specific list of possible window - names. However, now that windows can be implemented in Python, it is - not possible to list all possible names. - - I now link the user to a mechanism by which they can discover the - valid names for themselves at run time (by using 'info win'). That, - and the fact that gdb provides tab-completion of the name at the - command line, feels good enough. - - Finally, I noticed that the docs for 'win info' don't explicitly say - that the name of the window is given in the output. This could - probably have been inferred, but given I'm now linking to this as a - mechanism to find the window name, I'd prefer to mention that the name - can be found in the output. - -2022-02-06 Andrew Burgess - - gdb/tui: add window width information to 'info win' output - Now that we support horizontal window placement in the tui, it makes - sense to have 'info win' include the width, as well as the height, of - the currently visible windows. - - That's what this commit does. Example output is now: - - (gdb) info win - Name Lines Columns Focus - src 12 40 (has focus) - asm 12 41 - status 1 80 - cmd 11 80 - - I've added a NEWS entry, but the documentation was already suitably - vague, it just says that 'info win' displays the size of the visible - windows, so I don't think anything needs to be added there. - - I've also added some tests, as far as I could find, the 'info win' - command was previously untested. - -2022-02-06 GDB Administrator - - Automatic date update in version.in - -2022-02-05 H.J. Lu - - x86: Skip undefined symbol when finishing DT_RELR - Don't abort for undefined symbol when finishing DT_RELR. Instead, skip - undefined symbol. Undefined symbol will be reported by relocate_section. - - * elfxx-x86.c (elf_x86_size_or_finish_relative_reloc): Skip - undefined symbol in finishing phase. - -2022-02-05 Alan Modra - - Tweak assembler invocation for pr28827-1 test - PR 28827 - * testsuite/ld-powerpc/pr28827-1.d: Pass -a64 to gas. - -2022-02-05 Alan Modra - - PR28827 testcase - This testcase triggers a stub sizing error with the patches applied - for PR28743 (commit 2f83249c13d8 and c804c6f98d34). - - PR 28827 - * testsuite/ld-powerpc/pr28827-1.s, - * testsuite/ld-powerpc/pr28827-1.d: New test. - * testsuite/ld-powerpc/powerpc.exp: Run it. - -2022-02-05 Alan Modra - - Enable "size" as a dumpprog in ld - binutils/ - * testsuite/lib/binutils-common.exp (run_dump_test): Reference - global SIZE and SIZEFLAGS. - ld/ - * testsuite/config/default.exp: Define SIZE and SIZEFLAGS. - -2022-02-05 Alan Modra - - Detect .eh_frame_hdr earlier for SIZEOF_HEADERS - Current code detects the need for PT_GNU_EH_FRAME using a field set by - _bfd_elf_discard_section_eh_frame_hdr, which is called fairly late in - the linking process. Use the elf hash table eh_info instead, which is - set up earlier by size_dynamic_sections. - - * elf-bfd.h (struct output_elf_obj_tdata): Delete eh_frame_hdr. - (elf_eh_frame_hdr): Don't define. - (_bfd_elf_discard_section_eh_frame_hdr): Update prototype. - * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame_hdr): Delete - abfd parameter. Don't set elf_eh_frame_hdr. - * elf.c (elf_eh_frame_hdr): New function. - (get_program_header_size): Adjust elf_eh_frame_hdr call. - (_bfd_elf_map_sections_to_segments): Likewise. - -2022-02-05 Faraz Shahbazker - - sim: mips: Add simulator support for mips32r6/mips64r6 - 2022-02-01 Ali Lown - Andrew Bennett - Dragan Mladjenovic - Faraz Shahbazker - - sim/common/ChangeLog: - * sim-bits.h (EXTEND9, EXTEND18 ,EXTEND19, EXTEND21, - EXTEND26): New macros. - - sim/mips/ChangeLog: - * Makefile.in (IGEN_INCLUDE): Add mips3264r6.igen. - * configure: Regenerate. - * configure.ac: Support mipsisa32r6 and mipsisa64r6. - (sim_engine_run): Pick simulator model from processor specified - in e_flags. - * cp1.c (value_fpr): Handle fmt_dc32. - (fp_unary, fp_binary): Zero initialize locals. - (update_fcsr, fp_classify, fp_rint, fp_r6_cmp, inner_fmac, - fp_fmac, fp_min, fp_max, fp_mina, fp_maxa, fp_fmadd, fp_fmsub): - New functions. - (sim_fpu_class_mips_mapping): New. - * cp1.h (fcsr_ABS2008_mask, fcsr_ABS2008_shift): New define. - * interp.c (MIPSR6_P): New. - (load_word): Allow unaligned memory access for MIPSR6. - * micromips.igen (sc, scd): Adapt to new do_sc* helper signature. - * mips.igen: Add *r6 models. - (signal_if_cti, forbiddenslot32): New helpers. - (delayslot32): Use signal_if_cti. - (do_sc, do_scd); Add store_ll_bit parameter. - (sc, scd): Adapt to previous change. - (nal, beq, bal): New definitions for *r6. - (sll): Split nop and ssnop cases into ... - (nop, ssnop): New definitions. - (loadstore_ea): Use the 32-bit compatibility adressing. - (cache): Split logic into ... - (do_cache): New helper. - (check_fpu): Select IEEE 754-2008 mode for R6. - (not_word_value, unpredictable, check_mt_hilo, check_mf_hilo, - check_multi_hilo, check_div_hilo, check_u64, do_dmfc1b, add, - li, addu, and, andi, bgez, bgtz, blez, bltz, bne, break, dadd, - daddiu, daddu, dror, dror32, drorv, dsll, dsll32, dsllv, dsra, - dsra32, dsrav, dsrl, dsrl32, dsub, dsubu, j, jal, jalr, - jalr.hb, lb, lbu, ld, lh, lhu, lui, lw, lwu, nor, or, ori, ror, - rorv, sb, sd, sh, sll, sllv, slt, slti, sltiu, sltu, sra, srav, - srl, srlv, sub, subu, sw, sync, syscall, teq, tge, tgeu, tlt, - tltu, tne, xor, xori, check_fmt_p, do_load_double, - do_store_double, abs.FMT, add.FMT, ceil.l.FMT, ceil.w.FMT, - cfc1, ctc1, cvt.d.FMT, cvt.l.FMT, cvt.w.FMT, div.FMT, dfmc1, - dmtc1, floor.l.FMT, floor.w.FMT, ldc1, lwc1, mfc1, mov.FMT, - mtc1, mul.FMT, recip.FMT, round.l.FMT, round.w.FMT, rsqrt.FMT, - sdc1, sqrt.FMT, sub.FMT, swc1, trunc.l.FMT, trunc.w.FMT, bc0f, - bc0fl, bc0t, bc0tl, dmfc0, dmtc0, eret, mfc0, mtc0, cop, tlbp, - tlbr, tlbwi, tlbwr): Enable on *r6 models. - * mips3264r2.igen (dext, dextm, dextu, di, dins, dinsm, dinsu, - dsbh, dshd, ei, ext, mfhc1, mthc1, ins, seb, seh, synci, rdhwr, - wsbh): Likewise. - * mips3264r6.igen: New file. - * sim-main.h (FP_formats): Add fmt_dc32. - (FORBIDDEN_SLOT): New macros. - (simFORBIDDENSLOT, FP_R6CMP_*, FP_R6CLASS_*): New defines. - (fp_r6_cmp, fp_classify, fp_rint, fp_min, fp_max, fp_mina, - fp_maxa, fp_fmadd, fp_fmsub): New declarations. - (R6Compare, Classify, RoundToIntegralExact, Min, Max, MinA, - MaxA, FusedMultiplyAdd, FusedMultiplySub): New macros. Wrapping - previous declarations. - - sim/testsuite/mips/ChangeLog: - * basic.exp: Add r6-*.s tests. - (run_r6_removed_test): New function. - (run_endian_tests): New function. - * hilo-hazard-3.s: Skip for mips*r6. - * r2-fpu.s: New test. - * r6-64.s: New test. - * r6-branch.s: New test. - * r6-forbidden.s: New test. - * r6-fpu.s: New test. - * r6-llsc-dp.s: New test. - * r6-llsc-wp.s: New test. - * r6-removed.csv: New test. - * r6-removed.s: New test. - * r6.s: New test. - * utils-r6.inc: New inc. - -2022-02-05 Faraz Shahbazker - - sim: Add partial support for IEEE 754-2008 - 2022-02-01 Faraz Shahbazker - - sim/common/ChangeLog: - * sim-fpu.c (sim_fpu_minmax_nan): New. - (sim_fpu_max): Add variant behaviour for IEEE 754-2008. - (sim_fpu_min): Likewise. - (sim_fpu_is_un, sim_fpu_is_or): New. - (sim_fpu_un, sim_fpu_or): New. - (sim_fpu_is_ieee754_2008, sim_fpu_is_ieee754_1985): New. - (sim_fpu_set_mode): New. - (sim_fpu_classify): New. - * sim-fpu.h (sim_fpu_minmax_nan): New declaration. - (sim_fpu_un, sim_fpu_or): New declarations. - (sim_fpu_is_un, sim_fpu_is_or): New declarations. - (sim_fpu_mode): New enum. - [sim_fpu_state](current_mode): New field. - (sim_fpu_current_mode): New define. - (sim_fpu_is_ieee754_2008): New declaration. - (sim_fpu_is_ieee754_1985): New declaration. - (sim_fpu_set_mode): New declaration. - (sim_fpu_classify): New declaration. - -2022-02-05 Faraz Shahbazker - - sim: Factor out NaN handling in floating point operations - 2022-02-01 Faraz Shahbazker - - sim/common/ChangeLog: - * sim-fpu.c (sim_fpu_op_nan): New. - (sim_fpu_add): Factor out NaN operand handling with - a call to sim_fpu_op_nan. - (sim_fpu_sub, sim_fpu_mul, sim_fpu_div): Likewise. - (sim_fpu_rem, sim_fpu_max, sim_fpu_min): Likewise. - * sim-fpu.h (sim_fpu_op_nan): New declaration. - -2022-02-05 Faraz Shahbazker - - sim: Allow toggling of quiet NaN-bit semantics - IEEE754-1985 specifies the top bit of the mantissa as an indicator - of signalling vs. quiet NaN, but does not define the precise semantics. - Most architectures treat this bit as indicating quiet NaN, but legacy - (pre-R6) MIPS goes the other way and treats it as signalling NaN. - - This used to be controlled by a macro that was only defined for MIPS. - This patch replaces the macro with a variable to track the current - semantics of the NaN bit and allows differentiation between older - (pre-R6) and and newer MIPS cores. - - 2022-02-01 Faraz Shahbazker - - sim/common/ChangeLog: - * sim-fpu.c (_sim_fpu): New. - (pack_fpu, unpack_fpu): Allow reversal of quiet NaN semantics. - * sim-fpu.h (sim_fpu_state): New struct. - (_sim_fpu): New extern. - (sim_fpu_quiet_nan_inverted): New define. - - sim/mips/ChangeLog: - * cp1.h (fcsr_NAN2008_mask, fcsr_NAN2008_shift): New. - * mips.igen (check_fpu): Select default quiet NaN mode - for legacy MIPS. - * sim-main.h (SIM_QUIET_NAN_NEGATED): Remove. - -2022-02-05 GDB Administrator - - Automatic date update in version.in - -2022-02-04 H.J. Lu - - ld: Remove emultempl/armcoff.em - Remove emultempl/armcoff.em which has been unused after - - commit 2ac93be706418f3b2aebeb22159a328023faed52 - Author: Alan Modra - Date: Mon Apr 16 20:33:36 2018 +0930 - - Remove arm-aout and arm-coff support - - This also removes arm-netbsd (not arm-netbsdelf!), arm-openbsd, and - arm-riscix. Those targets weren't on the obsolete list but they are - all aout, and it doesn't make all that much sense to remove arm-aout - without removing them too. - - * emultempl/armcoff.em: Removed. - -2022-02-04 Simon Marchi - - gdb: include jit_code_entry::symfile_addr value in names of objfiles created by jit reader API - This commit includes the JIT object's symfile address in the names of - objfiles created by JIT reader API (e.g., << JIT compiled code at - 0x7ffd8a0c77a0 >>). This allows one to at least differentiate one from - another. - - The address is the one that the debugged program has put in - jit_code_entry::symfile_addr, and that the JIT reader's read function - receives. As we can see in gdb.base/jit-reader-host.c and - gdb.base/jit-reader.c, that may not be the actual value of where the - JIT-ed code is. But it is a value chosen by the author of the JIT - engine and the JIT reader, so including this value in the objfile name - may help them correlate the JIT objfiles created by with their logs / - data structures. - - To access this field, we need to pass down a reference to the - jit_code_entry. So make jit_dbg_reader_data a structure (instead of an - alias for a CORE_ADDR) that includes the address of the code entry in - the inferior's address space (the previous meaning of - jit_dbg_reader_data) plus a reference to the jit_code_entry as read into - GDB's address space. And while at it, pass down the gdbarch, so that we - don't have to call target_gdbarch. - - Co-Authored-By: Jan Vrany - Change-Id: Ib26c4d1bd8de503d651aff89ad2e500cb312afa5 - -2022-02-04 Tom Tromey - - Improve Ada unchecked union type printing - Currently, "ptype" of an Ada unchecked union may show a - compiler-generated wrapper structure in its output. It's more - Ada-like to elide this structure, which is what this patch implements. - It turned out to be simplest to reuse a part of print_variant_clauses - for this. - - As this is Ada-specific, and Joel already reviewed it internally, I am - going to check it in. - -2022-02-04 Tom Tromey - - Remove host_hex_value - I noticed that host_hex_value is redundant, because gdbsupport already - has fromhex. This patch removes the former in favor of the latter. - - Regression tested on x86-64 Fedora 34. - -2022-02-04 Andi Kleen - - Support symbol+offset lookup in addr2line - The Linux kernel usually ouputs symbol+offset instead of plain code - addresses these days, to avoid leaking ASLR secrets and to handle - dynamically loaded modules. - - Converting those with addr2line is somewhat involved: it requires - looking up the symbol first using nm and then manually compute the - offset, and then pass it to addr2line. - - This patch implements the necessary steps directly in addr2line, - by looking up the symbol (with demangling if needed) and computing - the offset. - - It's possible that a symbol is ambigious with a hex number. In this - case it uses the symbol lookup if the string contains a +. When it isn't - ambigious the + is optional. - -2022-02-04 GDB Administrator - - Automatic date update in version.in - -2022-02-03 Cary Coutant - - Rename EM_56800V4 to EM_56800EF. - include/elf: - * common.h: Rename EM_56800V4 to EM_56800EF. - -2022-02-03 H.J. Lu - - x86: Update X86_64_GOT_TYPE_P to cover more GOT relocations - Add R_X86_64_GOT32, R_X86_64_GOT64, R_X86_64_GOTPCREL64 and - R_X86_64_GOTPLT64 to X86_64_GOT_TYPE_P to cover more GOT relocations. - - PR ld/28858 - * elfxx-x86.h (X86_64_GOT_TYPE_P): Add R_X86_64_GOT32, - R_X86_64_GOT64, R_X86_64_GOTPCREL64 and R_X86_64_GOTPLT64. - -2022-02-03 Cary Coutant - - Add new e_machine values. - include/elf: - * common.h: Add EM_U16_U8CORE, EM_TACHYUM, EM_56800V4. - -2022-02-03 Tankut Baris Aktemur - - testsuite: fix failure in gdb.threads/killed-outside.exp - Starting with commit - - commit 1da5d0e664e362857153af8682321a89ebafb7f6 - Date: Tue Jan 4 08:02:24 2022 -0700 - - Change how Python architecture and language are handled - - we see a failure in gdb.threads/killed-outside.exp: - - ... - Executing on target: kill -9 16622 (timeout = 300) - builtin_spawn -ignore SIGHUP kill -9 16622 - continue - Continuing. - Couldn't get registers: No such process. - (gdb) [Thread 0x7ffff77c2700 (LWP 16626) exited] - - Program terminated with signal SIGKILL, Killed. - The program no longer exists. - FAIL: gdb.threads/killed-outside.exp: prompt after first continue (timeout) - - This is not a regression but a failure due to a change in GDB's - output. Prior to the aforementioned commit, GDB has been printing the - "Couldn't get registers: No such process." message twice. The second - one came from - - (top-gdb) bt - #0 amd64_linux_nat_target::fetch_registers (this=0x555557f31440 , regcache=0x555558805ce0, regnum=16) at /gdb-up/gdb/amd64-linux-nat.c:225 - #1 0x000055555640ac5f in target_ops::fetch_registers (this=0x555557d636d0 , arg0=0x555558805ce0, arg1=16) at /gdb-up/gdb/target-delegates.c:502 - #2 0x000055555641a647 in target_fetch_registers (regcache=0x555558805ce0, regno=16) at /gdb-up/gdb/target.c:3945 - #3 0x0000555556278e68 in regcache::raw_update (this=0x555558805ce0, regnum=16) at /gdb-up/gdb/regcache.c:587 - #4 0x0000555556278f14 in readable_regcache::raw_read (this=0x555558805ce0, regnum=16, buf=0x555558881950 "") at /gdb-up/gdb/regcache.c:601 - #5 0x00005555562792aa in readable_regcache::cooked_read (this=0x555558805ce0, regnum=16, buf=0x555558881950 "") at /gdb-up/gdb/regcache.c:690 - #6 0x000055555627965e in readable_regcache::cooked_read_value (this=0x555558805ce0, regnum=16) at /gdb-up/gdb/regcache.c:748 - #7 0x0000555556352a37 in sentinel_frame_prev_register (this_frame=0x555558181090, this_prologue_cache=0x5555581810a8, regnum=16) at /gdb-up/gdb/sentinel-frame.c:53 - #8 0x0000555555fa4773 in frame_unwind_register_value (next_frame=0x555558181090, regnum=16) at /gdb-up/gdb/frame.c:1235 - #9 0x0000555555fa420d in frame_register_unwind (next_frame=0x555558181090, regnum=16, optimizedp=0x7fffffffd570, unavailablep=0x7fffffffd574, lvalp=0x7fffffffd57c, addrp=0x7fffffffd580, - realnump=0x7fffffffd578, bufferp=0x7fffffffd5b0 "") at /gdb-up/gdb/frame.c:1143 - #10 0x0000555555fa455f in frame_unwind_register (next_frame=0x555558181090, regnum=16, buf=0x7fffffffd5b0 "") at /gdb-up/gdb/frame.c:1199 - #11 0x00005555560178e2 in i386_unwind_pc (gdbarch=0x5555587c4a70, next_frame=0x555558181090) at /gdb-up/gdb/i386-tdep.c:1972 - #12 0x0000555555cd2b9d in gdbarch_unwind_pc (gdbarch=0x5555587c4a70, next_frame=0x555558181090) at /gdb-up/gdb/gdbarch.c:3007 - #13 0x0000555555fa3a5b in frame_unwind_pc (this_frame=0x555558181090) at /gdb-up/gdb/frame.c:948 - #14 0x0000555555fa7621 in get_frame_pc (frame=0x555558181160) at /gdb-up/gdb/frame.c:2572 - #15 0x0000555555fa7706 in get_frame_address_in_block (this_frame=0x555558181160) at /gdb-up/gdb/frame.c:2602 - #16 0x0000555555fa77d0 in get_frame_address_in_block_if_available (this_frame=0x555558181160, pc=0x7fffffffd708) at /gdb-up/gdb/frame.c:2665 - #17 0x0000555555fa5f8d in select_frame (fi=0x555558181160) at /gdb-up/gdb/frame.c:1890 - #18 0x0000555555fa5bab in lookup_selected_frame (a_frame_id=..., frame_level=-1) at /gdb-up/gdb/frame.c:1720 - #19 0x0000555555fa5e47 in get_selected_frame (message=0x0) at /gdb-up/gdb/frame.c:1810 - #20 0x0000555555cc9c6e in get_current_arch () at /gdb-up/gdb/arch-utils.c:848 - #21 0x000055555625b239 in gdbpy_before_prompt_hook (extlang=0x555557451f20 , current_gdb_prompt=0x555557f4d890 "(gdb) ") - at /gdb-up/gdb/python/python.c:1063 - #22 0x0000555555f7cfbb in ext_lang_before_prompt (current_gdb_prompt=0x555557f4d890 "(gdb) ") at /gdb-up/gdb/extension.c:922 - #23 0x0000555555f7d442 in std::_Function_handler::_M_invoke(std::_Any_data const&, char const*&&) (__functor=..., - __args#0=@0x7fffffffd900: 0x555557f4d890 "(gdb) ") at /usr/include/c++/7/bits/std_function.h:316 - #24 0x0000555555f752dd in std::function::operator()(char const*) const (this=0x55555817d838, __args#0=0x555557f4d890 "(gdb) ") - at /usr/include/c++/7/bits/std_function.h:706 - #25 0x0000555555f75100 in gdb::observers::observable::notify (this=0x555557f49060 , args#0=0x555557f4d890 "(gdb) ") - at /gdb-up/gdb/../gdbsupport/observable.h:150 - #26 0x0000555555f736dc in top_level_prompt () at /gdb-up/gdb/event-top.c:444 - #27 0x0000555555f735ba in display_gdb_prompt (new_prompt=0x0) at /gdb-up/gdb/event-top.c:411 - #28 0x00005555564611a7 in tui_on_command_error () at /gdb-up/gdb/tui/tui-interp.c:205 - #29 0x0000555555c2173f in std::_Function_handler::_M_invoke(std::_Any_data const&) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316 - #30 0x0000555555e10c20 in std::function::operator()() const (this=0x5555580f9028) at /usr/include/c++/7/bits/std_function.h:706 - #31 0x0000555555e10973 in gdb::observers::observable<>::notify() const (this=0x555557f48d20 ) at /gdb-up/gdb/../gdbsupport/observable.h:150 - #32 0x00005555560e9b3f in start_event_loop () at /gdb-up/gdb/main.c:438 - #33 0x00005555560e9bcc in captured_command_loop () at /gdb-up/gdb/main.c:481 - #34 0x00005555560eb616 in captured_main (data=0x7fffffffddd0) at /gdb-up/gdb/main.c:1348 - #35 0x00005555560eb67c in gdb_main (args=0x7fffffffddd0) at /gdb-up/gdb/main.c:1363 - #36 0x0000555555c1b6b3 in main (argc=12, argv=0x7fffffffded8) at /gdb-up/gdb/gdb.c:32 - - Commit 1da5d0e664 eliminated the call to 'get_current_arch' - in 'gdbpy_before_prompt_hook'. Hence, the second instance of - "Couldn't get registers: No such process." does not appear anymore. - - Fix the failure by updating the regular expression in the test. - -2022-02-03 Alan Modra - - PowerPC64 treatment of absolute symbols - Supporting -static-pie on PowerPC64 requires the linker to properly - treat SHN_ABS symbols for cases like glibc's _nl_current_LC_CTYPE_used - absolute symbol. I've been slow to fix the linker on powerpc because - there is some chance that this will break some shared libraries or - PIEs. - - bfd/ - * elf64-ppc.c (ppc64_elf_check_relocs): Consolidate local sym - handling code. Don't count dyn relocs against non-dynamic - absolute symbols. - (dec_dynrel_count): Adjust to suit. - (ppc64_elf_edit_toc): Don't remove entries for absolute symbols - when pic. - (allocate_got): Don't allocate space for got relocs against - non-dynamic absolute syms. - (ppc64_elf_layout_multitoc): Likewise. - (got_and_plt_relr): Likewise. - (ppc64_elf_size_dynamic_sections): Likewise for local got. - (got_and_plt_relr_for_local_syms): Likewise. - (ppc64_elf_size_stubs): Don't allocate space for relr either. - (ppc64_elf_relocate_section): Don't write relocs against non-dynamic - absolute symbols. Don't optimise got and toc code sequences - loading absolute symbol entries. - ld/ - * testsuite/ld-powerpc/abs-reloc.s, - * testsuite/ld-powerpc/abs-static.d, - * testsuite/ld-powerpc/abs-static.r, - * testsuite/ld-powerpc/abs-pie.d, - * testsuite/ld-powerpc/abs-pie.r, - * testsuite/ld-powerpc/abs-shared.d, - * testsuite/ld-powerpc/abs-shared.r, - * testsuite/ld-powerpc/abs-pie-relr.d, - * testsuite/ld-powerpc/abs-pie-relr.r, - * testsuite/ld-powerpc/abs-shared-relr.d, - * testsuite/ld-powerpc/abs-shared-relr.r: New tests. - * testsuite/ld-powerpc/powerpc.exp: Run them. - -2022-02-03 GDB Administrator - - Automatic date update in version.in - -2022-02-02 Nick Clifton - - Stop the BFD library complaining about compressed dwarf debug string sections being too big. - PR 28834 - * dwarf2.c (read_section): Change the heuristic that checks for - overlarge dwarf debug info sections. - -2022-02-02 Andrew Burgess - - gdb: fix formatting for help set/show extended-prompt - The formatting of the help text for 'help set extended-prompt' and - 'help show extended-prompt' is a little off. - - Here's the offending snippet: - - Substitutions are applied to VALUE to compute the real prompt. - - The currently defined substitutions are: - \[ Begins a sequence of non-printing characters. - \\ A backslash. - \] Ends a sequence of non-printing characters. - \e The ESC character. - - Notice that the line for '\[' is indented more that the others. - - Turns out this is due to how we build this help text, something which - is done in Python. We extended a classes __doc__ string with some - dynamically generated text. - - The classes doc string looks like this: - - """Set the extended prompt. - - Usage: set extended-prompt VALUE - - Substitutions are applied to VALUE to compute the real prompt. - - The currently defined substitutions are: - """ - - Notice the closing """ are in a line of their own, and include some - white space just before. It's this extra white space that's causing - the problem. - - Fix the formatting issue by moving the """ to the end of the previous - line. I then add the extra newline in at the point where the doc - string is merged with the dynamically generated text. - - Now everything lines up correctly. - -2022-02-02 Andrew Burgess - - gdb: test to check one aspect of the linespec parsing code - While working on the fix for PR cli/28665 (see previous couple of - commits), I was playing with making a change in the linespec parsing - code. Specifically, I was thinking about whether the spec_string for - LINESPEC_LOCATION locations should ever be nullptr. - - I made a change to prevent the spec_string from ever being nullptr, - tested gdb, and saw no regressions. - - However, as part of this work I was reviewing how the breakpoint code - handles this case (spec_string being nullptr), and spotted that in - parse_breakpoint_sals the nullptr case is specifically handled, so - changing this should have caused a regression. But I didn't see one. - - So, this commit adds a comment in location.c mentioning that the - nullptr case is (a) not an oversight, and (b) is required. Then I add - a new test to gdb.base/break.exp that ensures a change in this area - will cause a regression. - - This test passes on current gdb, but with my modified (and broken) - gdb, the test would fail. - -2022-02-02 Andrew Burgess - - gdb: handle calls to edit command passing only a linespec condition - While working on the previous commit to fix PR cli/28665, I noticed - that the 'edit' command would suffer from the same problem. That is, - something like: - - (gdb) edit task 123 - - would cause GDB to break. For a full explanation of what's going on - here, see the commit message for the previous commit. - - As with the previous commit, this issue can be prevented by detecting, - and throwing, a junk at the end of the line error earlier, before - calling decode_line_1. - - So, that's what this commit does. I've also added some tests for this - issue. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28665 - -2022-02-02 Andrew Burgess - - gdb: handle calls to list command passing only a linespec condition - In PR cli/28665, it was reported that GDB would crash when given a - command like: - - (gdb) list task 123 - - The problem here is that in cli/cli-cmd.c:list_command, the string - 'task 123' is passed to string_to_event_location in find a location - specification. However, this location parsing understands about - breakpoint conditions, and so, will stop parsing when it sees - something that looks like a condition, in this case, the 'task 123' - looks like a breakpoint condition. - - As a result, the location we get back from string_to_event_location - has no actual location specification attached to it. The actual call - path is: - - list_command - string_to_event_location - string_to_event_location_basic - new_linespec_location - - In new_linespec_location we call linespec_lex_to_end, which looks at - 'task 123' and decides that there's nothing there that describes a - location. As such, in new_linespec_location, the spec_string field of - the location is left as nullptr. - - Back in list_command we then call decode_line_1, which calls - event_location_to_sals, which calls parse_linespec, which takes the - spec_string we found earlier, and tries to converts this into a list - of sals. - - However, parse_linespec is not intended to be passed a nullptr, for - example, calling is_ada_operator will try to access through the - nullptr, causing undefined behaviour. But there are other cases - within parse_linespec which don't expect to see a nullptr. - - When looking at how to fix this issue, I first considered having - linespec_lex_to_end detect the problem. That function understands - when the first thing in the linespec is a condition keyword, and so, - could throw an error saying something like: "no linespec before - condition keyword", however, this is not going to work, at least, not - without additional changes to GDB, it is valid to place a breakpoint - like: - - (gdb) break task 123 - - This will place a breakpoint at the current location with the - condition 'task 123', and changing linespec_lex_to_end breaks this - behaviour. - - So, next, I considered what would happen if I added a condition to an - otherwise valid list command, this is what I see: - - (gdb) list file.c:1 task 123 - Junk at end of line specification. - (gdb) - - So, then I wondered, could we just pull the "Junk" detection forward, - so that we throw the error earlier, before we call decode_line_1? - - It turns out that yes we can. Well, sort of. - - It is simpler, I think, to add a separate check into the list_command - function, after calling string_to_event_location, but before calling - decode_line_1. We know when we call string_to_event_location that the - string in question is not empty, so, after calling - string_to_event_location, if non of the string has been consumed, then - the content of the string must be junk - it clearly doesn't look like - a location specification. - - I've reused the same "Junk at end of line specification." error for - consistency, and added a few tests to cover this issue. - - While the first version of this patch was on the mailing list, a - second bug PR gdb/28797 was raised. This was for a very similar - issue, but this time the problem command was: - - (gdb) list ,, - - Here the list command understands about the first comma, list can have - two arguments separated by a comma, and the first argument can be - missing. So we end up trying to parse the second command "," as a - linespec. - - However, in linespec_lex_to_end, we will stop parsing a linespec at a - comma, so, in the above case we end up with an empty linespec (between - the two commas), and, like above, this results in the spec_string - being nullptr. - - As with the previous case, I've resolved this issue by adding an extra - check for junk at the end of the line - after parsing (or failing to - parse) the nothing between the two commas, we still have the "," left - at the end of the list command line - when we see this we can throw - the same "junk at the end of the line" error, and all is good. - - I've added tests for this case too. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28665 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28797 - -2022-02-02 Andrew Burgess - - gdb/testsuite: move linespec test into gdb.linespec/ directory - The gdb.base/linespecs.exp test should really live in the gdb.linespec - directory, so lets move it there. - - As we already have gdb.linespec/linespec.exp, I've renamed the test to - gdb.linespec/errors.exp, as this better reflects what the test is - actually checking. - - Finally, the test script doesn't have its own source file, it was - reusing a random other source file, gdb.base/memattr.c. Now the tests - script is in gdb.linespec/, I've updated the test to use a different - source file from that directory. - -2022-02-02 Andrew Burgess - - gdb: add empty string check in parse_linespec - If parse_linespec (linespec.c) is passed ARG as an empty string then - we end up calling `strchr (linespec_quote_characters, '\0')`, which - will return a pointer to the '\0' at the end of - linespec_quote_characters. This then results in GDB calling - skip_quote_char with `ARG + 1`, which is undefined behaviour (as ARG - only contained a single character, the '\0'). - - Fix this by checking for the first character of ARG being '\0' before - the call to strchr. - - I have additionally added an assertion that ARG can't itself be - nullptr, as calling is_ada_operator with nullptr can end up calling - 'startswith' on the nullptr, which is undefined behaviour. - - Finally, I moved the declaration of TOKEN into the body of - parse_linespec, to where TOKEN is defined. - - This patch came about while I was working on fixes for PR cli/28665 - and PR gdb/28797. The actual fixes for these two issues will be in a - later commit in this series, but, with this patch in place, both of - the above bugs would hit the new assertion rather than accessing - invalid memory and crashing. The '\0' check is not currently ever - hit, but just makes the code a little safer. - - Because this patch only changes the nature of the failure for the - above two bugs, there's no tests here. A later commit will fix the - above two issues, at which point I'll add some tests. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28665 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28797 - -2022-02-02 Andrew Burgess - - gdb: update the comment on string_to_event_location - The comment on string_to_event_location is (I believe) out of date. - This commit fixes the two issues I see: - - 1. This function can't return NULL any more. The implementation - calls string_to_explicit_location which can return NULL, but if this - is the case we then call string_to_event_location_basic, which I - don't believe can ever return NULL. - - 2. I've removed the mention that the returned string is malloc'd, - though this is true, now that we return a managed pointer, I believe - the source of the memory allocation is irrelevant, and so, shouldn't - be discussed in the header comment. - - There should be no user visible changes after this commit. - -2022-02-02 Nick Clifton - - Updated French translation for the ld/ and gold/ sub-directories - -2022-02-02 Stafford Horne - - or1k: Avoid R_OR1K_GOT16 signed overflow by using special howto - Previously when fixing PR 21464 we masked out upper bits of the - relocation value in order to avoid overflow complaints when acceptable. - It turns out this does not work when the relocation value ends up being - signed. - - To fix this this patch introduces a special howto with - complain_on_overflow set to complain_overflow_dont. This is used in - place of the normal R_OR1K_GOT16 howto when we detect R_OR1K_GOT_AHI16 - relocations. - - bfd/ChangeLog: - - 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-02-02 GDB Administrator - - Automatic date update in version.in - -2022-02-01 Tom Tromey - - Fix flex rule in gdb - Currently, if flex fails, it will leave the resulting .c file in the - tree. This will cause a cascade of errors, and requires the manual - deletion of the .c file in order to recreate the problem. - - It's better for the rule to fail such that the .c file is not updated. - This way, 'make' will fail the same way every time -- which is much - handier for debugging syntax errors. - - This fix just updates the Makefile rule to follow the way that the - "yacc" rule already works. - -2022-02-01 Markus Metzger - - gdb, btrace: improve error messages - When trying to use 'record btrace' on a system that does not support it, - the error message isn't as clear as it could be. See - https://sourceware.org/pipermail/gdb/2022-January/049870.html. - - Improve the error message in a few cases. - - Reported-by: Simon Sobisch - -2022-02-01 Jan Vrany - - gdb/python: fix gdb.Objfile.__repr__ () for dynamically compiled code - While experimenting with JIT reader API I realized that calling repr () - on objfile created by JIT reader crashes GDB. - - The problem was that objfpy_repr () called objfile_filename () which - returned NULL, causing PyString_FromFormat () to crash. - - This commit fixes this problem by using objfile_name () instead of - objfile_filename (). This also makes consistent with the value of gdb.Objfile.filename variable. - -2022-02-01 Samuel Thibault - - hurd: Fix RPC prototypes - The last updates of MIG introduced qualifying strings and arrays with - const as appropriate. We thus have to update the protypes in gdb too. - - Change-Id: I3f72aac1dfa6e58d1394d5776b822d7c8f2409df - -2022-02-01 Samuel Thibault - - hurd: Fix RPC link names - The RPC stub code expects to be calling a C function, not a C++ - function. - - Change-Id: Idd7549fc118f2addc7fb4975667a011cacacc03f - -2022-02-01 GDB Administrator - - Automatic date update in version.in - -2022-01-31 H.J. Lu - - elf: Check symbol version without any symbols - VER_FLG_WEAK doesn't indicate that all symbol references of the symbol - version have STB_WEAK. VER_FLG_WEAK indicates a weak symbol version - definition with no symbols associated with it. It is used to verify - the existence of a particular implementation without any symbol references - to the weak symbol version. - - PR ld/24718 - * testsuite/ld-elf/pr24718-1.d: New file. - * testsuite/ld-elf/pr24718-1.s: Likewise. - * testsuite/ld-elf/pr24718-1.t: Likewise. - -2022-01-31 H.J. Lu - - Load debug section only when dumping debug sections - Don't load debug sections if we aren't dumping any debug sections. - - PR binutils/28843 - * objdump.c (dump_any_debugging): New. - (load_debug_section): Return false if dump_any_debugging isn't - set. - (main): Set dump_any_debugging when dumping any debug sections. - * readelf (dump_any_debugging): New. - (parse_args): Set dump_any_debugging when dumping any debug - sections. - (load_debug_section): Return false if dump_any_debugging isn't - set. - -2022-01-31 Simon Marchi - - gdb: fix some clang-tidy readability-misleading-indentation warnings - I have warnings like these showing in my editor all the time, so I - thought I'd run clang-tidy with this diagnostic on all the files (that I - can compile) and fix them. - - There is still one warning, in utils.c, but that's because some code - is mixed up with preprocessor macros (#ifdef TUI), so I think there no - good solution there. - - Change-Id: I345175fc7dd865318f0fbe61ac026c88c3b6a96b - -2022-01-31 Nils-Christian Kempke - - gdb, testsuite, fortran: adapt info symbol expected output for intel compilers - Info symbol is expected to print the symbol table name of a symbol, since - symbol lookup happens via the minimal symbol table. This name - corresponds 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. - An example taken from the modified nested-funcs-2.exp would be - - ~~~~ - $ objdump -t ./outputs/gdb.fortran/nested-funcs-2/nested-funcs-2 | grep \ - increment - 00000000000014ab l F .text 0000000000000095 increment.3883 - 000000000000141c l F .text 000000000000008f increment_program_global.3881 - ~~~~ - - This mangled name gets recognized by the Ada demangler/decoder and decoded as - Ada to XXXX (setting the symbol language to Ada). This leads to output - of XXXX over XXXX.NUMBER for info symbol on gfortran symbols. - - For ifort and ifx the generated linkage names have the form - SCOPEA_SCOPEB_XXXX_ which are not recognized by the Ada decoder (or any - other demangler for that matter) and thus printed as is. - The respective objdump in the above case looks like - - ~~~~ - $ objdump -t ./outputs/gdb.fortran/nested-funcs-2/nested-funcs-2 | grep \ - increment - 0000000000403a44 l F .text 0000000000000074 contains_keyword_IP_increment_ - 0000000000403ab8 l F .text 0000000000000070 - contains_keyword_IP_increment_program_global_ - ~~~~ - - In the unmodified testcase this results in 'fails' when ran with the intel - compilers: - - ~~~~ - >> make check RUNTESTFLAGS="gdb.fortran/nested-funcs-2.exp \ - GDBFLAGS='$GDBFLAGS' CC_FOR_TARGET='icpc' F90_FOR_TARGET='ifort'" - - ... - - === gdb Summary === - - \# of expected passes 80 - \# of unexpected failures 14 - ~~~~ - - Note that there is no Fortran mangling standard. We keep the gfortran - behavior as is and modify the test to reflect ifx and ifort mangled - names which fixes above fails. - -2022-01-31 Nick Clifton - - Import patch from mainline GCC to fix an infinite recusion in the Rust demangler. - 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-31 Alan Modra - - Re: PR28827, assertion building LLVM 9 on powerpc64le-linux-gnu - In trying to find a testcase for PR28827, I managed to hit a linker - error in bfd_set_section_contents with a .branch_lt input section - being too large for the output .branch_lt. - - bfd/ - PR 28827 - * elf64-ppc.c (ppc64_elf_size_stubs): Set section size to - maxsize past STUB_SHRINK_ITER before laying out. Remove now - unnecessary conditional setting of maxsize at start of loop. - ld/ - * testsuite/ld-powerpc/pr28827-2.d, - * testsuite/ld-powerpc/pr28827-2.lnk, - * testsuite/ld-powerpc/pr28827-2.s: New test. - * testsuite/ld-powerpc/powerpc.exp: Run it. - -2022-01-31 Tom Tromey - - Remove unused variables in fbsd-tdep.c files - i386-fbsd-tdep.c and amd64-fbsd-tdep.c failed to build on my x86-64 - Fedora 34 machine, using the system gcc, after a recent patch. These - two files now have unused variables, which provokes a warning in this - configuration. - - I'm checking in this patch to remove the unused variables. - -2022-01-31 GDB Administrator - - Automatic date update in version.in - -2022-01-30 GDB Administrator - - Automatic date update in version.in - -2022-01-29 Alan Modra - - Re: PR28827, assertion building LLVM 9 on powerpc64le-linux-gnu - The previous patch wasn't quite correct. The size and padding depends - on offset used in the current iteration, and if we're fudging the - offset past STUB_SHRINK_ITER then we'd better use that offset. We - can't have plt_stub_pad using stub_sec->size as the offset. - - PR 28827 - * elf64-ppc.c (plt_stub_pad): Add stub_off param. - (ppc_size_one_stub): Set up stub_offset to value used in this - iteration before sizing the stub. Adjust plt_stub_pad calls. - -2022-01-29 Alan Modra - - objcopy --only-keep-debug - From: Peilin Ye - objcopy's --only-keep-debug option has been broken for ELF files since - commit 8c803a2dd7d3. - - 1. binutils/objcopy.c:setup_section() marks non-debug sections as - SHT_NOBITS, then calls bfd_copy_private_section_data(); - 2. If ISEC and OSEC share the same section flags, - bfd/elf.c:_bfd_elf_init_private_section_data() restores OSEC's - section type back to ISEC's section type, effectively undoing - "make_nobits". - - * objcopy.c (setup_section): Act on make_nobits after calling - bfd_copy_private_section_data. - -2022-01-29 GDB Administrator - - Automatic date update in version.in - -2022-01-28 John Baldwin - - gdb: fix ppc-sysv-tdep.c build on 32-bit platforms - The previous code triggered the following error on an i386 host: - - /git/gdb/gdb/ppc-sysv-tdep.c:1764:34: error: non-constant-expression cannot be narrowed from type 'ULONGEST' (aka 'unsigned long long') to 'size_t' (aka 'unsigned int') in initializer list [-Wc++11-narrowing] - unscaled.read ({writebuf, TYPE_LENGTH (valtype)}, - ^~~~~~~~~~~~~~~~~~~~~ - /git/gdb/gdb/gdbtypes.h:2043:31: note: expanded from macro 'TYPE_LENGTH' - ^~~~~~~~~~~~~~~~~~ - /git/gdb/gdb/ppc-sysv-tdep.c:1764:34: note: insert an explicit cast to silence this issue - unscaled.read ({writebuf, TYPE_LENGTH (valtype)}, - ^~~~~~~~~~~~~~~~~~~~~ - static_cast( ) - /git/gdb/gdb/gdbtypes.h:2043:31: note: expanded from macro 'TYPE_LENGTH' - ^~~~~~~~~~~~~~~~~~ - 1 error generated. - - Fix this by using gdb::make_array_view. - -2022-01-28 John Baldwin - - FreeBSD x86 nat: Use register maps for GP register sets. - Rather than using the x86-specific register offset tables, use - register maps to describe the layout of the general purpose registers - fetched via PT_GETREGS. The sole user-visible difference is that - FreeBSD/amd64 will now report additional segment registers ($ds, $es, - $fs, and $gs) for both 32-bit and 64-bit processes. - - As part of these changes, the FreeBSD x86 native targets no longer use - amd64-bsd-nat.c or i386-bsd-nat.c. Remove FreeBSD-specific register - handling (for $fs_base, $gs_base, and XSAVE state) from these files. - Similarly, remove the global x86bsd_xsave_len from x86-bsd-nat.c. The - FreeBSD x86 native targets use a static xsave_len instead. - - While here, rework the probing of PT_GETXMMREGS on FreeBSD/i386. - Probe the ptrace op once in the target read_description method and - cache the result for the future similar to the way the status of XSAVE - support is probed in the read_description method. In addition, return - the proper xcr0 mask (X87-only) for old kernels or systems without - either XSAVE or XMM support. - -2022-01-28 John Baldwin - - fbsd-nat: Return a bool from fetch_register_set and store_register_set. - Change these helper functions to return true if they did any work. - -2022-01-28 John Baldwin - - FreeBSD x86: Use tramp-frame for signal frames. - Use a register map to describe the registers in mcontext_t as part of - the signal frame as is done on several other FreeBSD arches. This - permits fetching the fsbase and gsbase register values from the signal - frame for both amd64 and i386 and permits fetching additional segment - registers stored as 16-bit values on amd64. - - While signal frames on FreeBSD do contain floating point/XSAVE state, - these unwinders do not attempt to supply those registers. The - existing x86 signal frame uwinders do not support these registers, and - the only existing functions which handle FSAVE/FXSAVE/XSAVE state all - work with regcaches. In the future these unwinders could create a - tempory regcache, collect floating point registers, and then supply - values out of the regcache into the trad-frame. - -2022-01-28 John Baldwin - - Use register maps for gp regsets on FreeBSD/x86 core dumps. - In particular, this permits reporting the value of the $ds, $es, $fs, - and $gs segment registers from amd64 core dumps since they are stored - as 16-bit values rather than the 32-bit size assumed by i386_gregset. - -2022-01-28 John Baldwin - - regcache: Zero-extend small registers described by a register map. - When registers are supplied via regcache_supply_register from a - register block described by a register map, registers may be stored in - slots smaller than GDB's native register size (e.g. x86 segment - registers are 16 bits, but the GDB registers for those are 32-bits). - regcache_collect_regset is careful to zero-extend slots larger than a - register size, but regcache_supply_regset just used - regcache::raw_supply_part and did not initialize the upper bytes of a - register value. - - trad_frame_set_reg_regmap assumes these semantics (zero-extending - short registers). Upcoming patches also require these semantics for - handling x86 segment register values stored in 16-bit slots on - FreeBSD. Note that architecturally x86 segment registers are 16 bits, - but the x86 gdb architectures treat these registers as 32 bits. - -2022-01-28 John Baldwin - - FreeBSD x86: Remove fallback for detecting signal trampolines by address. - A few FreeBSD releases did not include the page holding the signal - code in core dumps. As a workaround, a sysctl was used to fetch the - default location of the signal code instead. The youngest affected - FreeBSD release is 10.1 released in November 2014 and EOLed in - December 2016. The fallback only works for native processes and would - require a separate unwinder once the FreeBSD arches are converted to - use tramp_frame for signal frames. - - Remove support for pre-5.0 FreeBSD/i386 signal trampolines. - The last relevant release (FreeBSD 4.11) was released in January of - 2005. - - Remove vestigal FreeBSD/i386 3.x support. - This was orphaned when a.out support was removed as the FreeBSD/i386 - ELF support always used the register layouts from 4.0+. - -2022-01-28 Bruno Larsen - - Add Bruno Larsen to gdb/MAINTAINERS - -2022-01-28 Enze Li - - gdb/build: Fix Wpessimizing-move in clang build - When building with clang, I run into an error: - - ... - tui/tui-disasm.c:138:25: error: moving a temporary object prevents copy - elision [-Werror,-Wpessimizing-move] - tal.addr_string = std::move (gdb_dis_out.release ()); - ^ - tui/tui-disasm.c:138:25: note: remove std::move call here - tal.addr_string = std::move (gdb_dis_out.release ()); - ^~~~~~~~~~~ ~ - ... - - The error above is caused by the recent commit 5d10a2041eb8 ("gdb: add - string_file::release method"). - - Fix this by removing std::move. - - Build on x86_64-linux with clang 13.0.0. - -2022-01-28 Simon Marchi - - Add top-level .editorconfig file - Add a .editorconfig [1] file. This helps configure editors - automatically with the right whitespace settings. It will help me, - since I need to juggle with different whitespace settings for different - projects. But I think it can also help newcomers get things right from - the start. - - Some editors have native support for reading these files, while others - require a plug-in [2]. And if you don't want to use it, then this file - doesn't change anything to your life. - - I added rules for the kinds of files I edit most often, but more can be - added later. I assumed that the rules were the same for GDB and the - other projects, but if that's not the case, we can always put - .editorconfig files in project subdirectories to override settings. - - [1] https://editorconfig.org/ - [2] https://editorconfig.org/#download - - Change-Id: Ifda136d13877fafcf0d137fec8501f6a34e1367b - -2022-01-28 Nick Clifton - - Updated French translation for the gas sub-directory. - -2022-01-28 Alan Modra - - Set __ehdr_start rel_from_abs earlier - This is just a tidy, making the __ehdr_start symbol flag tweaks all in - one place. - - * ldelf.c (ldelf_before_allocation): Don't set rel_from_abs - for __ehdr_start. - * ldlang.c (lang_symbol_tweaks): Set it here instead. - -2022-01-28 Alan Modra - - PowerPC64 handling of @tocbase - * elf64-ppc.c (ppc64_elf_relocate_section): Warn if the symbol - on R_PPC64_TOC isn't local. - -2022-01-28 Alan Modra - - Update PowerPC64 symtocbase test - Using a symbol other than .TOC. with @tocbase is an extension to the - ABI. It is never valid to use a symbol without a definition in the - binary, and symbols on these expressions cannot be overridden. Make - this explicit by using ".hidden" in the testcase. - - * testsuite/ld-powerpc/symtocbase-1.s: Align data. Make function - entry symbol hidden. - * testsuite/ld-powerpc/symtocbase-2.s: Likewise. - * testsuite/ld-powerpc/symtocbase.d: Adjust expected output. - -2022-01-28 Alan Modra - - PR28827, assertion building LLVM 9 on powerpc64le-linux-gnu - The assertion is this one in ppc_build_one_stub - BFD_ASSERT (stub_entry->stub_offset >= stub_entry->group->stub_sec->size); - It is checking that a stub doesn't overwrite the tail of a previous - stub, so not something trivial. - - Normally, stub sizing iterates until no stubs are added, detected by - no change in stub section size. Iteration also continues if no stubs - are added but one or more stubs increases in size, which also can be - detected by a change in stub section size. But there is a - pathological case where stub section sizing decreases one iteration - then increases the next. To handle that situation, stub sizing also - stops at more than STUB_SHRINK_ITER (20) iterations when calculated - stub section size is smaller. The previous larger size is kept for - the actual layout (so that building the stubs, which behaves like - another iteration of stub sizing, will see the stub section sizes - shrink). The problem with that stopping condition is that it assumes - that stub sizing is only affected by addresses external to the stub - sections, which isn't always true. - - This patch fixes that by also keeping larger individual stub_offset - addresses past STUB_SHRINK_ITER. It also catches a further - pathological case where one stub shrinks and another expands in such a - way that no stub section size change is seen. - - PR 28827 - * elf64-ppc.c (struct ppc_link_hash_table): Add stub_changed. - (STUB_SHRINK_ITER): Move earlier in file. - (ppc_size_one_stub): Detect any change in stub_offset. Keep - larger one if past STUB_SHRINK_ITER. - (ppc64_elf_size_stubs): Iterate on stub_changed too. - -2022-01-28 Alan Modra - - PR28826 x86_64 ld segfaults building xen - Fallout from commit e86fc4a5bc37 - - PR 28826 - * coffgen.c (coff_write_alien_symbol): Init dummy to zeros. - -2022-01-28 Alan Modra - - PR28753, buffer overflow in read_section_stabs_debugging_info - PR 28753 - * rddbg.c (read_section_stabs_debugging_info): Don't read past - end of section when concatentating stab strings. - -2022-01-28 GDB Administrator - - Automatic date update in version.in - -2022-01-27 Simon Marchi - - gdb: work around negative DW_AT_data_member_location GCC 11 bug - g++ 11.1.0 has a bug where it will emit a negative - DW_AT_data_member_location in some cases: - - $ cat test.cpp - #include - - int - main() - { - std::unique_ptr ptr; - } - $ g++ -g test.cpp - $ llvm-dwarfdump -F a.out - ... - 0x00000964: DW_TAG_member - DW_AT_name [DW_FORM_strp] ("_M_head_impl") - DW_AT_decl_file [DW_FORM_data1] ("/usr/include/c++/11.1.0/tuple") - DW_AT_decl_line [DW_FORM_data1] (125) - DW_AT_decl_column [DW_FORM_data1] (0x27) - DW_AT_type [DW_FORM_ref4] (0x0000067a "default_delete") - DW_AT_data_member_location [DW_FORM_sdata] (-1) - ... - - This leads to a GDB crash (when built with ASan, otherwise probably - garbage results), since it tries to read just before (to the left, in - ASan speak) of the value's buffer: - - ==888645==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6020000c52af at pc 0x7f711b239f4b bp 0x7fff356bd470 sp 0x7fff356bcc18 - READ of size 1 at 0x6020000c52af thread T0 - #0 0x7f711b239f4a in __interceptor_memcpy /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:827 - #1 0x555c4977efa1 in value_contents_copy_raw /home/simark/src/binutils-gdb/gdb/value.c:1347 - #2 0x555c497909cd in value_primitive_field(value*, long, int, type*) /home/simark/src/binutils-gdb/gdb/value.c:3126 - #3 0x555c478f2eaa in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:333 - #4 0x555c478f63b2 in cp_print_value /home/simark/src/binutils-gdb/gdb/cp-valprint.c:513 - #5 0x555c478f02ca in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:161 - #6 0x555c478f63b2 in cp_print_value /home/simark/src/binutils-gdb/gdb/cp-valprint.c:513 - #7 0x555c478f02ca in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:161 - #8 0x555c478f63b2 in cp_print_value /home/simark/src/binutils-gdb/gdb/cp-valprint.c:513 - #9 0x555c478f02ca in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:161 - #10 0x555c4760d45f in c_value_print_struct /home/simark/src/binutils-gdb/gdb/c-valprint.c:383 - #11 0x555c4760df4c in c_value_print_inner(value*, ui_file*, int, value_print_options const*) /home/simark/src/binutils-gdb/gdb/c-valprint.c:438 - #12 0x555c483ff9a7 in language_defn::value_print_inner(value*, ui_file*, int, value_print_options const*) const /home/simark/src/binutils-gdb/gdb/language.c:632 - #13 0x555c49758b68 in do_val_print /home/simark/src/binutils-gdb/gdb/valprint.c:1048 - #14 0x555c49759b17 in common_val_print(value*, ui_file*, int, value_print_options const*, language_defn const*) /home/simark/src/binutils-gdb/gdb/valprint.c:1151 - #15 0x555c478f2fcb in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:335 - #16 0x555c478f63b2 in cp_print_value /home/simark/src/binutils-gdb/gdb/cp-valprint.c:513 - #17 0x555c478f02ca in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:161 - #18 0x555c4760d45f in c_value_print_struct /home/simark/src/binutils-gdb/gdb/c-valprint.c:383 - #19 0x555c4760df4c in c_value_print_inner(value*, ui_file*, int, value_print_options const*) /home/simark/src/binutils-gdb/gdb/c-valprint.c:438 - #20 0x555c483ff9a7 in language_defn::value_print_inner(value*, ui_file*, int, value_print_options const*) const /home/simark/src/binutils-gdb/gdb/language.c:632 - #21 0x555c49758b68 in do_val_print /home/simark/src/binutils-gdb/gdb/valprint.c:1048 - #22 0x555c49759b17 in common_val_print(value*, ui_file*, int, value_print_options const*, language_defn const*) /home/simark/src/binutils-gdb/gdb/valprint.c:1151 - #23 0x555c478f2fcb in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:335 - #24 0x555c4760d45f in c_value_print_struct /home/simark/src/binutils-gdb/gdb/c-valprint.c:383 - #25 0x555c4760df4c in c_value_print_inner(value*, ui_file*, int, value_print_options const*) /home/simark/src/binutils-gdb/gdb/c-valprint.c:438 - #26 0x555c483ff9a7 in language_defn::value_print_inner(value*, ui_file*, int, value_print_options const*) const /home/simark/src/binutils-gdb/gdb/language.c:632 - #27 0x555c49758b68 in do_val_print /home/simark/src/binutils-gdb/gdb/valprint.c:1048 - #28 0x555c49759b17 in common_val_print(value*, ui_file*, int, value_print_options const*, language_defn const*) /home/simark/src/binutils-gdb/gdb/valprint.c:1151 - #29 0x555c4760f04c in c_value_print(value*, ui_file*, value_print_options const*) /home/simark/src/binutils-gdb/gdb/c-valprint.c:587 - #30 0x555c483ff954 in language_defn::value_print(value*, ui_file*, value_print_options const*) const /home/simark/src/binutils-gdb/gdb/language.c:614 - #31 0x555c49759f61 in value_print(value*, ui_file*, value_print_options const*) /home/simark/src/binutils-gdb/gdb/valprint.c:1189 - #32 0x555c48950f70 in print_formatted /home/simark/src/binutils-gdb/gdb/printcmd.c:337 - #33 0x555c48958eda in print_value(value*, value_print_options const&) /home/simark/src/binutils-gdb/gdb/printcmd.c:1258 - #34 0x555c48959891 in print_command_1 /home/simark/src/binutils-gdb/gdb/printcmd.c:1367 - #35 0x555c4895a3df in print_command /home/simark/src/binutils-gdb/gdb/printcmd.c:1458 - #36 0x555c4767f974 in do_simple_func /home/simark/src/binutils-gdb/gdb/cli/cli-decode.c:97 - #37 0x555c47692e25 in cmd_func(cmd_list_element*, char const*, int) /home/simark/src/binutils-gdb/gdb/cli/cli-decode.c:2475 - #38 0x555c4936107e in execute_command(char const*, int) /home/simark/src/binutils-gdb/gdb/top.c:670 - #39 0x555c485f1bff in catch_command_errors /home/simark/src/binutils-gdb/gdb/main.c:523 - #40 0x555c485f249c in execute_cmdargs /home/simark/src/binutils-gdb/gdb/main.c:618 - #41 0x555c485f6677 in captured_main_1 /home/simark/src/binutils-gdb/gdb/main.c:1317 - #42 0x555c485f6c83 in captured_main /home/simark/src/binutils-gdb/gdb/main.c:1338 - #43 0x555c485f6d65 in gdb_main(captured_main_args*) /home/simark/src/binutils-gdb/gdb/main.c:1363 - #44 0x555c46e41ba8 in main /home/simark/src/binutils-gdb/gdb/gdb.c:32 - #45 0x7f71198bcb24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24) - #46 0x555c46e4197d in _start (/home/simark/build/binutils-gdb-one-target/gdb/gdb+0x77f197d) - - 0x6020000c52af is located 1 bytes to the left of 8-byte region [0x6020000c52b0,0x6020000c52b8) - allocated by thread T0 here: - #0 0x7f711b2b7459 in __interceptor_calloc /build/gcc/src/gcc/libsanitizer/asan/asan_malloc_linux.cpp:154 - #1 0x555c470acdc9 in xcalloc /home/simark/src/binutils-gdb/gdb/alloc.c:100 - #2 0x555c49b775cd in xzalloc(unsigned long) /home/simark/src/binutils-gdb/gdbsupport/common-utils.cc:29 - #3 0x555c4977bdeb in allocate_value_contents /home/simark/src/binutils-gdb/gdb/value.c:1029 - #4 0x555c4977be25 in allocate_value(type*) /home/simark/src/binutils-gdb/gdb/value.c:1040 - #5 0x555c4979030d in value_primitive_field(value*, long, int, type*) /home/simark/src/binutils-gdb/gdb/value.c:3092 - #6 0x555c478f6280 in cp_print_value /home/simark/src/binutils-gdb/gdb/cp-valprint.c:501 - #7 0x555c478f02ca in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:161 - #8 0x555c478f63b2 in cp_print_value /home/simark/src/binutils-gdb/gdb/cp-valprint.c:513 - #9 0x555c478f02ca in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:161 - #10 0x555c478f63b2 in cp_print_value /home/simark/src/binutils-gdb/gdb/cp-valprint.c:513 - #11 0x555c478f02ca in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:161 - #12 0x555c4760d45f in c_value_print_struct /home/simark/src/binutils-gdb/gdb/c-valprint.c:383 - #13 0x555c4760df4c in c_value_print_inner(value*, ui_file*, int, value_print_options const*) /home/simark/src/binutils-gdb/gdb/c-valprint.c:438 - #14 0x555c483ff9a7 in language_defn::value_print_inner(value*, ui_file*, int, value_print_options const*) const /home/simark/src/binutils-gdb/gdb/language.c:632 - #15 0x555c49758b68 in do_val_print /home/simark/src/binutils-gdb/gdb/valprint.c:1048 - #16 0x555c49759b17 in common_val_print(value*, ui_file*, int, value_print_options const*, language_defn const*) /home/simark/src/binutils-gdb/gdb/valprint.c:1151 - #17 0x555c478f2fcb in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:335 - #18 0x555c478f63b2 in cp_print_value /home/simark/src/binutils-gdb/gdb/cp-valprint.c:513 - #19 0x555c478f02ca in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:161 - #20 0x555c4760d45f in c_value_print_struct /home/simark/src/binutils-gdb/gdb/c-valprint.c:383 - #21 0x555c4760df4c in c_value_print_inner(value*, ui_file*, int, value_print_options const*) /home/simark/src/binutils-gdb/gdb/c-valprint.c:438 - #22 0x555c483ff9a7 in language_defn::value_print_inner(value*, ui_file*, int, value_print_options const*) const /home/simark/src/binutils-gdb/gdb/language.c:632 - #23 0x555c49758b68 in do_val_print /home/simark/src/binutils-gdb/gdb/valprint.c:1048 - #24 0x555c49759b17 in common_val_print(value*, ui_file*, int, value_print_options const*, language_defn const*) /home/simark/src/binutils-gdb/gdb/valprint.c:1151 - #25 0x555c478f2fcb in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:335 - #26 0x555c4760d45f in c_value_print_struct /home/simark/src/binutils-gdb/gdb/c-valprint.c:383 - #27 0x555c4760df4c in c_value_print_inner(value*, ui_file*, int, value_print_options const*) /home/simark/src/binutils-gdb/gdb/c-valprint.c:438 - #28 0x555c483ff9a7 in language_defn::value_print_inner(value*, ui_file*, int, value_print_options const*) const /home/simark/src/binutils-gdb/gdb/language.c:632 - #29 0x555c49758b68 in do_val_print /home/simark/src/binutils-gdb/gdb/valprint.c:1048 - - Since there are some binaries with this in the wild, I think it would be - useful for GDB to work around this. I did the obvious simple thing, if - the DW_AT_data_member_location's value is -1, replace it with 0. I - added a producer check to only apply this fixup for GCC 11. The idea is - that if some other compiler ever uses a DW_AT_data_member_location value - of -1 by mistake, we don't know (before analyzing the bug at least) if - they did mean 0 or some other value. So I wouldn't want to apply the - fixup in that case. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28063 - Change-Id: Ieef3459b0b9bbce8bdad838ba83b4b64e7269d42 - -2022-01-27 Kevin Buettner - - Fix GDB internal error by using text (instead of data) section offset - Fedora Rawhide is now using gcc-12.0. As part of updating to the - gcc-12.0 package set, Rawhide is also now using a version of libgcc_s - which lacks a .data section. This causes gdb to fail in the following - fashion while debugging a program (such as gdb) which uses libgcc_s: - - (top-gdb) run - Starting program: rawhide-master/bld/gdb/gdb - ... - objfiles.h:467: internal-error: sect_index_data not initialized - A problem internal to GDB has been detected, - further debugging may prove unreliable. - ... - - I snipped the backtrace from the above output. Instead, here's a - portion of a backtrace obtained using GDB's backtrace command. - (Obviously, in order to obtain it, I used a GDB which has been patched - with this commit.) - - #0 internal_error ( - file=0xc6a508 "gdb/objfiles.h", line=467, - fmt=0xc6a4e8 "sect_index_data not initialized") - at gdbsupport/errors.cc:51 - #1 0x00000000005f9651 in objfile::data_section_offset (this=0x4fa48f0) - at gdb/objfiles.h:467 - #2 0x000000000097c5f8 in relocate_address (address=0x17244, objfile=0x4fa48f0) - at gdb/stap-probe.c:1333 - #3 0x000000000097c630 in stap_probe::get_relocated_address (this=0xa1a17a0, - objfile=0x4fa48f0) - at gdb/stap-probe.c:1341 - #4 0x00000000004d7025 in create_exception_master_breakpoint_probe ( - objfile=0x4fa48f0) - at gdb/breakpoint.c:3505 - #5 0x00000000004d7426 in create_exception_master_breakpoint () - at gdb/breakpoint.c:3575 - #6 0x00000000004efcc1 in breakpoint_re_set () - at gdb/breakpoint.c:13407 - #7 0x0000000000956998 in solib_add (pattern=0x0, from_tty=0, readsyms=1) - at gdb/solib.c:1001 - #8 0x00000000009576a8 in handle_solib_event () - at gdb/solib.c:1269 - ... - - The function 'relocate_address' in gdb/stap-probe.c attempts to do - its "relocation" by using objfile->data_section_offset(). That - method, data_section_offset() is defined as follows in objfiles.h: - - CORE_ADDR data_section_offset () const - { - return section_offsets[SECT_OFF_DATA (this)]; - } - - The internal error occurs when the SECT_OFF_DATA macro finds that the - 'sect_index_data' field is -1: - - #define SECT_OFF_DATA(objfile) \ - ((objfile->sect_index_data == -1) \ - ? (internal_error (__FILE__, __LINE__, \ - _("sect_index_data not initialized")), -1) \ - : objfile->sect_index_data) - - relocate_address() is obtaining the section offset in order to compute - a relocated address. For some ABIs, such as the System V ABI, the - section offsets will all be the same. So for those ABIs, it doesn't - matter which offset is used. However, other ABIs, such as the FDPIC - ABI, will have different offsets for the various sections. Thus, for - those ABIs, it is vital that this and other relocation code use the - correct offset. - - In stap_probe::get_relocated_address, the address to which to add the - offset (thus forming the relocated address) is obtained via - this->get_address (); get_address is a getter for m_address in - probe.h. It's documented/defined as follows (also in probe.h): - - /* The address where the probe is inserted, relative to - SECT_OFF_TEXT. */ - CORE_ADDR m_address; - - (Thanks to Tom Tromey for this observation.) - - So, based on this, the current use of data_section_offset / - SECT_OFF_DATA is wrong. This relocation code should have been using - text_section_offset / SECT_OFF_TEXT all along. That being the - case, I've adjusted the stap-probe.c relocation code accordingly. - - Searching the sources turned up one other use of data_section_offset, - in gdb/dtrace-probe.c, so I've updated that code as well. The same - reasoning presented above applies to this case too. - - Summary: - - * gdb/dtrace-probe.c (dtrace_probe::get_relocated_address): - Use method text_section_offset instead of data_section_offset. - * gdb/stap-probe.c (relocate_address): Likewise. - -2022-01-27 Markus Metzger - - gdb, remote, btrace: move switch_to_thread call right before xfer call - In remote_target::remote_btrace_maybe_reopen, we switch to the currently - iterated thread in order to set inferior_ptid for a subsequent xfer. - - Move the switch_to_thread call directly before the target_read_stralloc - call to clarify why we need to switch threads. - -2022-01-27 Markus Metzger - - gdb, gdbserver: update thread identifier in enable_btrace target method - The enable_btrace target method takes a ptid_t to identify the thread on - which tracing shall be enabled. - - Change this to thread_info * to avoid translating back and forth between - the two. This will be used in a subsequent patch. - -2022-01-27 Markus Metzger - - gdb, btrace: switch threads in remote_btrace_maybe_reopen() - In remote_btrace_maybe_reopen() we iterate over threads and use - set_general_thread() to set the thread from which to transfer the btrace - configuration. - - This sets the remote general thread but does not affect inferior_ptid. On - the xfer request later on, remote_target::xfer_partial() again sets the - remote general thread to inferior_ptid, overwriting what - remote_btrace_maybe_reopen() had done. - - In one case, this led to inferior_ptid being null_ptid when we tried to - enable tracing on a newly created thread inside a newly created process - during attach. - - This, in turn, led to find_inferior_pid() asserting when we iterated over - threads in record_btrace_is_replaying(), which was called from - record_btrace_target::xfer_partial() when reading the btrace configuration - of the new thread to check whether it was already being recorded. - - The bug was exposed by - - 0618ae41497 gdb: optimize all_matching_threads_iterator - - and found by - - FAIL: gdb.btrace/enable-new-thread.exp: ... (GDB internal error) - - Use switch_to_thread() in remote_btrace_maybe_reopen(). - -2022-01-27 Markus Metzger - - gdb, btrace: rename record_btrace_enable_warn() - We use record_btrace_enable_warn() as the new-thread observer callback. - It is not used in other contexts. - - Rename it to record_btrace_on_new_thread() to make its role more clear. - -2022-01-27 Nick Clifton - - Updated Swedish translation for the binutils subdirectory - -2022-01-27 GDB Administrator - - Automatic date update in version.in - -2022-01-26 Andrew Burgess - - gdb/python: handle non utf-8 characters when source highlighting - This commit adds support for source files that contain non utf-8 - characters when performing source styling using the Python pygments - package. This does not change the behaviour of GDB when the GNU - Source Highlight library is used. - - For the following problem description, assume that either GDB is built - without GNU Source Highlight support, of that this has been disabled - using 'maintenance set gnu-source-highlight enabled off'. - - The initial problem reported was that a source file containing non - utf-8 characters would cause GDB to print a Python exception, and then - display the source without styling, e.g.: - - Python Exception : 'utf-8' codec can't decode byte 0xc0 in position 142: invalid start byte - /* Source code here, without styling... */ - - Further, as the user steps through different source files, each time - the problematic source file was evicted from the source cache, and - then later reloaded, the exception would be printed again. - - Finally, this problem is only present when using Python 3, this issue - is not present for Python 2. - - What makes this especially frustrating is that GDB can clearly print - the source file contents, they're right there... If we disable - styling completely, or make use of the GNU Source Highlight library, - then everything is fine. So why is there an error when we try to - apply styling using Python? - - The problem is the use of PyString_FromString (which is an alias for - PyUnicode_FromString in Python 3), this function converts a C string - into a either a Unicode object (Py3) or a str object (Py2). For - Python 2 there is no unicode encoding performed during this function - call, but for Python 3 the input is assumed to be a uft-8 encoding - string for the purpose of the conversion. And here of course, is the - problem, if the source file contains non utf-8 characters, then it - should not be treated as utf-8, but that's what we do, and that's why - we get an error. - - My first thought when looking at this was to spot when the - PyString_FromString call failed with a UnicodeDecodeError and silently - ignore the error. This would mean that GDB would print the source - without styling, but would also avoid the annoying exception message. - - However, I also make use of `pygmentize`, a command line wrapper - around the Python pygments module, which I use to apply syntax - highlighting in the output of `less`. And this command line wrapper - is quite happy to syntax highlight my source file that contains non - utf-8 characters, so it feels like the problem should be solvable. - - It turns out that inside the pygments module there is already support - for guessing the encoding of the incoming file content, if the - incoming content is not already a Unicode string. This is what - happens for Python 2 where the incoming content is of `str` type. - - We could try and make GDB smarter when it comes to converting C - strings into Python Unicode objects; this would probably require us to - just try a couple of different encoding schemes rather than just - giving up after utf-8. - - However, I figure, why bother? The pygments module already does this - for us, and the colorize API is not part of the documented external - API of GDB. So, why not just change the colorize API, instead of the - content being a Unicode string (for Python 3), lets just make the - content be a bytes object. The pygments module can then take - responsibility for guessing the encoding. - - So, currently, the colorize API receives a unicode object, and returns - a unicode object. I propose that the colorize API receive a bytes - object, and return a bytes object. - -2022-01-26 Tom Tromey - - Remove global wrap_here function - This removes the global wrap_here function, so that future calls - cannot be introduced. Instead, all callers must use the method on the - appropriate ui_file. - - This temporarily moves the implementation of this method to utils.c. - This will change once the remaining patches to untangle the pager have - been written. - -2022-01-26 Tom Tromey - - Always call the wrap_here method - This changes all existing calls to wrap_here to call the method on the - appropriate ui_file instead. The choice of ui_file is determined by - context. - -2022-01-26 Tom Tromey - - Add ui_file::wrap_here - Right now, wrap_here is a global function. In the long run, we'd like - output streams to be relatively self-contained objects, and having a - global function like this is counter to that goal. Also, existing - code freely mixes writes to some parameterized stream with calls to - wrap_here -- but wrap_here only really affects gdb_stdout, so this is - also incoherent. - - This step is a patch toward making wrap_here more sane. It adds a - wrap_here method to ui_file and changes ui_out implementations to use - it. - -2022-01-26 Tom Tromey - - Convert wrap_here to use integer parameter - I think it only really makes sense to call wrap_here with an argument - consisting solely of spaces. Given this, it seemed better to me that - the argument be an int, rather than a string. This patch is the - result. Much of it was written by a script. - -2022-01-26 Andrew Burgess - - gdb/python: improve the auto help text for gdb.Parameter - This commit attempts to improve the help text that is generated for - gdb.Parameter objects when the user fails to provide their own - documentation. - - Documentation for a gdb.Parameter is currently pulled from two - sources: the class documentation string, and the set_doc/show_doc - class attributes. Thus, a fully documented parameter might look like - this: - - class Param_All (gdb.Parameter): - """This is the class documentation string.""" - - show_doc = "Show the state of this parameter" - set_doc = "Set the state of this parameter" - - def get_set_string (self): - val = "on" - if (self.value == False): - val = "off" - return "Test Parameter has been set to " + val - - def __init__ (self, name): - super (Param_All, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN) - self._value = True - - Param_All ('param-all') - - Then in GDB we see this: - - (gdb) help set param-all - Set the state of this parameter - This is the class documentation string. - - Which is fine. But, if the user skips both of the documentation parts - like this: - - class Param_None (gdb.Parameter): - - def get_set_string (self): - val = "on" - if (self.value == False): - val = "off" - return "Test Parameter has been set to " + val - - def __init__ (self, name): - super (Param_None, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN) - self._value = True - - Param_None ('param-none') - - Now in GDB we see this: - - (gdb) help set param-none - This command is not documented. - This command is not documented. - - That's not great, the duplicated text looks a bit weird. If we drop - different parts we get different results. Here's what we get if the - user drops the set_doc and show_doc attributes: - - (gdb) help set param-doc - This command is not documented. - This is the class documentation string. - - That kind of sucks, we say it's undocumented, then proceed to print - the documentation. Finally, if we drop the class documentation but - keep the set_doc and show_doc: - - (gdb) help set param-set-show - Set the state of this parameter - This command is not documented. - - That seems OK. - - So, I think there's room for improvement. - - With this patch, for the four cases above we now see this: - - # All values provided by the user, no change in this case: - (gdb) help set param-all - Set the state of this parameter - This is the class documentation string. - - # Nothing provided by the user, the first string is now different: - (gdb) help set param-none - Set the current value of 'param-none'. - This command is not documented. - - # Only the class documentation is provided, the first string is - # changed as in the previous case: - (gdb) help set param-doc - Set the current value of 'param-doc'. - This is the class documentation string. - - # Only the set_doc and show_doc are provided, this case is unchanged - # from before the patch: - (gdb) help set param-set-show - Set the state of this parameter - This command is not documented. - - The one place where this change might be considered a negative is when - dealing with prefix commands. If we create a prefix command but don't - supply the set_doc / show_doc strings, then this is what we saw before - my patch: - - (gdb) python Param_None ('print param-none') - (gdb) help set print - set print, set pr, set p - Generic command for setting how things print. - - List of set print subcommands: - - ... snip ... - set print param-none -- This command is not documented. - ... snip ... - - And after my patch: - - (gdb) python Param_None ('print param-none') - (gdb) help set print - set print, set pr, set p - Generic command for setting how things print. - - List of set print subcommands: - - ... snip ... - set print param-none -- Set the current value of 'print param-none'. - ... snip ... - - This seems slightly less helpful than before, but I don't think its - terrible. - - Additionally, I've changed what we print when the get_show_string - method is not provided in Python. - - Back when gdb.Parameter was first added to GDB, we didn't provide a - show function when registering the internal command object within - GDB. As a result, GDB would make use of its "magic" mangling of the - show_doc string to create a sentence that would display the current - value (see deprecated_show_value_hack in cli/cli-setshow.c). - - However, when we added support for the get_show_string method to - gdb.Parameter, there was an attempt to maintain backward compatibility - by displaying the show_doc string with the current value appended, see - get_show_value in py-param.c. Unfortunately, this isn't anywhere - close to what deprecated_show_value_hack does, and the results are - pretty poor, for example, this is GDB before my patch: - - (gdb) show param-none - This command is not documented. off - - I think we can all agree that this is pretty bad. - - After my patch, we how show this: - - (gdb) show param-none - The current value of 'param-none' is "off". - - Which at least is a real sentence, even if it's not very informative. - - This patch does change the way that the Python API behaves slightly, - but only in the cases when the user has missed providing GDB with some - information. In most cases I think the new behaviour is a lot better, - there's the one case (noted above) which is a bit iffy, but I think is - still OK. - - I've updated the existing gdb.python/py-parameter.exp test to cover - the modified behaviour. - - Finally, I've updated the documentation to (I hope) make it clearer - how the various bits of help text come together. - -2022-01-26 Andrew Burgess - - gdb/python: add gdb.history_count function - Add a new function gdb.history_count to the Python api, this function - returns an integer, the number of items in GDB's value history. - - This is useful if you want to pull items from the history by their - absolute number, for example, if you wanted to show a complete history - list. Previously we could figure out how many items are in the - history list by trying to fetch the items, and then catching the - exception when the item is not available, but having this function - seems nicer. - -2022-01-26 Tom Tromey - - Remove unused declaration - This removes an unused declaration from top.h. This type is not - defined anywhere. - -2022-01-26 Simon Marchi - - gdb: convert maintenance target-async and target-non-stop settings to callbacks - This simplifies things a bit, as we don't need two variables and think - about reverting target_async_permitted_1 and target_non_stop_enabled_1 - values if we can't change the setting. - - Change-Id: I36acab045dacf02ae1988486cfdb27c1dff309f6 - -2022-01-26 Keith Seitz - - Reference array of structs instead of first member during memcpy - aarch64-tdep.c defines the following macro: - - #define MEM_ALLOC(MEMS, LENGTH, RECORD_BUF) \ - do \ - { \ - unsigned int mem_len = LENGTH; \ - if (mem_len) \ - { \ - MEMS = XNEWVEC (struct aarch64_mem_r, mem_len); \ - memcpy(&MEMS->len, &RECORD_BUF[0], \ - sizeof(struct aarch64_mem_r) * LENGTH); \ - } \ - } \ - while (0) - - This is simlpy allocating a new array and copying it. However, for - the destination address, it is actually copying into the first member - of the first element of the array (`&MEMS->len"). This elicits a - warning with GCC 12: - - ../../binutils-gdb/gdb/aarch64-tdep.c: In function ‘int aarch64_process_record(gdbarch*, regcache*, CORE_ADDR)’: - ../../binutils-gdb/gdb/aarch64-tdep.c:3711:23: error: writing 16 bytes into a region of size 8 [-Werror=stringop-overflow=] - 3711 | memcpy(&MEMS->len, &RECORD_BUF[0], \ - | ^ - ../../binutils-gdb/gdb/aarch64-tdep.c:4394:3: note: in expansion of macro ‘MEM_ALLOC’ - 4394 | MEM_ALLOC (aarch64_insn_r->aarch64_mems, aarch64_insn_r->mem_rec_count, - | ^~~~~~~~~ - ../../binutils-gdb/gdb/aarch64-tdep.c:3721:12: note: destination object ‘aarch64_mem_r::len’ of size 8 - 3721 | uint64_t len; /* Record length. */ - | ^~~ - - The simple fix is to reference the array, `MEMS' as the destination of the copy. - - Tested by rebuilding. - - - # Please enter the commit message for your changes. Lines starting - # with '#' will be kept; you may remove them yourself if you want to. - # An empty message aborts the commit. - # - # Date: Tue Jan 25 08:28:32 2022 -0800 - # - # On branch master - # Your branch is ahead of 'origin/master' by 1 commit. - # (use "git push" to publish your local commits) - # - # Changes to be committed: - # modified: aarch64-tdep.c - # - -2022-01-26 Simon Marchi - - gdb: add string_file::release method - A common pattern for string_file is to want to move out the internal - string buffer, because it is the result of the computation that we want - to return. It is the reason why string_file::string returns a non-const - reference, as explained in the comment. I think it would make sense to - have a dedicated method for that instead and make string_file::string - return a const reference. - - This allows removing the explicit std::move in the typical case. Note - that compile_program::compute was missing a move, meaning that the - resulting string was copied. With the new version, it's not possible to - forget to move. - - Change-Id: Ieaefa35b73daa7930b2f3a26988b6e3b4121bb79 - -2022-01-26 Tom Tromey - - Add a way to temporarily set a gdb parameter from Python - It's sometimes useful to temporarily set some gdb parameter from - Python. Now that the 'endian' crash is fixed, and now that the - current language is no longer captured by the Python layer, it seems - reasonable to add a helper function for this situation. - - This adds a new gdb.with_parameter function. This creates a context - manager which temporarily sets some parameter to a specified value. - The old value is restored when the context is exited. This is most - useful with the Python "with" statement: - - with gdb.with_parameter('language', 'ada'): - ... do Ada stuff - - This also adds a simple function to set a parameter, - gdb.set_parameter, as suggested by Andrew. - - This is PR python/10790. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=10790 - -2022-01-26 Tom Tromey - - Fix another crash with gdb parameters in Python - While looking into the language-capturing issue, I found another way - to crash gdb using parameters from Python: - - (gdb) python print(gdb.parameter('endian')) - - (This is related to PR python/12188, though this patch isn't going to - fix what that bug is really about.) - - The problem here is that the global variable that underlies the - "endian" parameter is initialized to NULL. However, that's not a - valid value for an "enum" set/show parameter. - - My understanding is that, in gdb, an "enum" parameter's underlying - variable must have a value that is "==" (not just strcmp-equal) to one - of the values coming from the enum array. This invariant is relied on - in various places. - - I started this patch by fixing the problem with "endian". Then I - added some assertions to add_setshow_enum_cmd to try to catch other - problems of the same type. - - This patch fixes all the problems that I found. I also looked at all - the calls to add_setshow_enum_cmd to ensure that they were all - included in the gdb I tested. I think they are: there are no calls in - nat-* files, or in remote-sim.c; and I was trying a build with all - targets, Python, and Guile enabled. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=12188 - -2022-01-26 Tom Tromey - - Change how Python architecture and language are handled - Currently, gdb's Python layer captures the current architecture and - language when "entering" Python code. This has some undesirable - effects, and so this series changes how this is handled. - - First, there is code like this: - - gdbpy_enter enter_py (python_gdbarch, python_language); - - This is incorrect, because both of these are NULL when not otherwise - assigned. This can cause crashes in some cases -- I've added one to - the test suite. (Note that this crasher is just an example, other - ones along the same lines are possible.) - - Second, when the language is captured in this way, it means that - Python code cannot affect the current language for its own purposes. - It's reasonable to want to write code like this: - - gdb.execute('set language mumble') - ... stuff using the current language - gdb.execute('set language previous-value') - - However, this won't actually work, because the language is captured on - entry. I've added a test to show this as well. - - This patch changes gdb to try to avoid capturing the current values. - The Python concept of the current gdbarch is only set in those few - cases where a non-default value is computed or needed; and the - language is not captured at all -- instead, in the cases where it's - required, the current language is temporarily changed. - -2022-01-26 H.J. Lu - - bfd: Make bfd.stamp depend on source bfd.texi - Make bfd.stamp depend on source bfd.texi to avoid regenerating - doc/bfd.info for each make run. - - PR binutils/28807 - * Makefile.in: Regenerate. - * doc/local.mk (%D%/bfd.stamp): Depend on $(srcdir)/%D%/bfd.texi. - -2022-01-26 H.J. Lu - - ld: Rewrite lang_size_relro_segment_1 - 1. Compute the desired PT_GNU_RELRO segment base and find the maximum - section alignment of sections starting from the PT_GNU_RELRO segment. - 2. Find the first preceding load section. - 3. Don't add the 1-page gap between the first preceding load section and - the relro segment if the maximum page size >= the maximum section - alignment. Align the PT_GNU_RELRO segment first. Subtract the maximum - page size if therer is still a 1-page gap. - - PR ld/28743 - PR ld/28819 - * ldlang.c (lang_size_relro_segment_1): Rewrite. - * testsuite/ld-x86-64/pr28743-1.d: New file. - * testsuite/ld-x86-64/pr28743-1.s: Likewise. - * testsuite/ld-x86-64/x86-64.exp: Run pr28743-1. - -2022-01-26 Lancelot SIX - - gdb/testsuite: Ensure constant test name in gdb.base/break-interp.exp - When running the testsuite, I have lines similar to the following in the - gdb.sum file: - - ~~~ - PASS: gdb.base/break-interp.exp: ldprelink=NO: ldsepdebug=NO: first backtrace: p /x 0x7f283d2f0fd1 - ... - PASS: gdb.base/break-interp.exp: ldprelink=NO: ldsepdebug=NO: binprelink=NO: binsepdebug=NO: binpie=NO: INNER: first backtrace: p /x 0x7f00de0317a5 - ... - ~~~ - - The address part of the command might change between execution of the - test, which adds noise to a diff between two .sum files. - - This patch changes to test name to "p /x $pc" in order to have constant - test name. - - Tested on x86_64-Linux. - - Change-Id: I973c1237a084dd6d424276443cbf0920533c9a21 - -2022-01-26 GDB Administrator - - Automatic date update in version.in - -2022-01-25 Tom Tromey - - Always print the "host libthread-db" message to stdout - linux-thread-db.c has a bit of unusual code that unconditionally - prints a message, but decides whether to print to gdb_stdout or - gdb_stdlog based on a debug flag. It seems better to me to simply - always print this; and this is the only spot in gdb where we - conditionally pass gdb_stdout to one of the f*_unfiltered functions. - -2022-01-25 Tom Tromey - - Reduce explicit use of gdb_stdout - In an earlier version of the pager rewrite series, it was important to - audit unfiltered output calls to see which were truly necessary. - - This is no longer necessary, but it still seems like a decent cleanup - to change calls to avoid explicitly passing gdb_stdout. That is, - rather than using something like fprintf_unfiltered with gdb_stdout, - the code ought to use plain printf_unfiltered instead. - - This patch makes this change. I went ahead and converted all the - _filtered calls I could find, as well, for the same clarity. - -2022-01-25 Tom Tromey - - Sent timing stats to gdb_stdlog - This changes the time / space / symtab per-command statistics code to - send its output to gdb_stdlog rather than gdb_stdout. This seems - slightly more correct to me. - - Send some error output to gdb_stderr - This changes some code to send some error messages to gdb_stderr - rather than gdb_stdout. - -2022-01-25 Klaus Ziegler - - Fix a probem building the binutils on SPARC/amd64 - PR 28816 - * elf/common.h (AT_SUN_HWCAP): Make definition conditional. - -2022-01-25 H.J. Lu - - bfd: Regenerate Makefile.in - * Makefile.in: Regenerate. - -2022-01-25 Mike Frysinger - - gold: drop old cygnus install hack - The gold subdir doesn't actually have a manual, so this hack doesn't - do anything. Plus the automake cygnus option was removed years ago - by Simon in d0ac1c44885daf68f631befa37e ("Bump to autoconf 2.69 and - automake 1.15.1"). So delete it here. - - gas: drop old cygnus install hack - This was needed when gas was using the automake cygnus option, but - this was removed years ago by Simon in d0ac1c44885daf68f631befa37e - ("Bump to autoconf 2.69 and automake 1.15.1"). So delete it here. - The info pages are already & still installed by default w/out it. - -2022-01-25 GDB Administrator - - Automatic date update in version.in - -2022-01-24 H.J. Lu - - bfd: Update doc/local.mk - PR binutils/28807 - * Makefile.in: Regenerate. - * doc/local.mk (AM_MAKEINFOFLAGS): Add -I "$(srcdir)/%D%" -I %D%. - (TEXI2DVI): New. - (%D%/bfd.texi): Removed. - (doc/bfd/index.html): Remove -I$(srcdir). Replace bfd.texi with - %D%/bfd.texi. - -2022-01-24 Roland McGrath - - bfd/doc: Fix racy build failure from missing mkdir - bfd/ - * doc/local.mk (%D%/bfdver.texi): Add mkdir command. - -2022-01-24 Martin Sebor - - Fix a proble building the libiberty library with gcc-12. - PR 28779 - * regex.c: Suppress -Wuse-after-free. - -2022-01-24 Andrew Burgess - - gdb/doc: improve description for Window.click on Python TUI windows - The description of the Window.click method doesn't mention where the - coordinates are anchored (it's the top left corner). - - This minor tweak just mentions this point. - -2022-01-24 Nick Clifton - - Update Bulgarian, French, Romaniam and Ukranian translation for some of the sub-directories - -2022-01-24 GDB Administrator - - Automatic date update in version.in - -2022-01-23 Tom Tromey - - Simplify some Rust expression-evaluation code - A few Rust operations do a bit of work in their 'evaluate' functions - and then call another function -- but are also the only caller. This - patch simplifies this code by removing the extra layer. - - Tested on x86-64 Fedora 34. I'm checking this in. - -2022-01-23 H.J. Lu - - bfd: Partially revert commit 0e3839bde6f - Partially revert - - commit 0e3839bde6f93e1e3eefce815be3636e3d81054d - Author: H.J. Lu - Date: Sun Jan 23 07:29:27 2022 -0800 - - bfd: Properly install library and header files - - PR binutils/28807 - * Makefile.am: Revert bfdlib_LTLIBRARIES and bfdinclude_HEADERS - changes. - * Makefile.in: Regenerate. - -2022-01-23 H.J. Lu - - bfd: Properly install library and header files - Rename bfdlib_LTLIBRARIES and bfdinclude_HEADERS to lib_LTLIBRARIES and - include_HEADERS to fix the missing installed library and header files in - bfd caused by - - commit bd32be01c997f686ab0b53f0640eaa0aeb61fbd3 - Author: Mike Frysinger - Date: Fri Dec 3 00:23:20 2021 -0500 - - bfd: merge doc subdir up a level - - PR binutils/28807 - * Makefile.am (bfdlib_LTLIBRARIES): Renamed to ... - (lib_LTLIBRARIES): This. - (bfdinclude_HEADERS): Renamed to ... - (include_HEADERS): This. - * Makefile.in: Regenerate. - * doc/local.mk (install): Removed. - -2022-01-23 H.J. Lu - - Regenerate Makefile.in files with automake 1.15.1 - Regenerate Makefile.in files with the unmodified automake 1.15.1 to - remove - - runstatedir = @runstatedir@ - - bfd/ - - * Makefile.in: Regenerate. - - binutils/ - - * Makefile.in: Regenerate. - - gas/ - - * Makefile.in: Regenerate. - - gold/ - - * Makefile.in: Regenerate. - * testsuite/Makefile.in: Likewise. - - gprof/ - - * Makefile.in: Regenerate. - - ld/ - - * Makefile.in: Regenerate. - - opcodes/ - - * Makefile.in: Regenerate. - -2022-01-23 H.J. Lu - - Regenerate configure files with autoconf 2.69 - Regenerate configure files with the unmodified autoconf 2.69 to remove - - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] - - bfd/ - - * configure: Regenerate. - - binutils/ - - * configure: Regenerate. - - gas/ - - * configure: Regenerate. - - gold/ - - * configure: Regenerate. - - gprof/ - - * configure: Regenerate. - - ld/ - - * configure: Regenerate. - - opcodes/ - - * configure: Regenerate. - -2022-01-23 GDB Administrator - - Automatic date update in version.in - -2022-01-22 Mike Frysinger - - bfd: merge doc subdir up a level - This avoids a recursive make into the doc subdir and speeds up the - build slightly. It also allows for more parallelism. - - bfd: rename core.texi to corefile.texi - This is a generated file name from a correspondingly named C file. - Rename it to avoid unique build rules since there's no difference - to the generated manual. - - bfd: replace doc header generation with pattern rules - This unifies boilerplate rules for most files with pattern rules. - -2022-01-22 Martin Storsj? - - Allow inferring tmp_prefix from the dll name from a def file. - -2022-01-22 Alexander von Gluck IV - - Adjust default page sizes for haiku arm. - * configure.tgt (arm-haiku): Fix typo. - * emulparams/armelf_haiku.su (MAXPAGESIZE): Use the default value. - (COMMONPAGESIZE): Likewise. - -2022-01-22 Nick Clifton - - Update release makeing script with new release numbers - - Change version number to 2.38.50 and regenerate files - - Add markers for 2.38 branch - -2022-01-22 Lifang Xia - - RISC-V: create new frag after alignment. - PR 28793: - - The alignment may be removed in linker. We need to create new frag after - alignment to prevent the assembler from computing static offsets. - - gas/ - * config/tc-riscv.c (riscv_frag_align_code): Create new frag. - -2022-01-22 GDB Administrator - - Automatic date update in version.in - -2022-01-21 Simon Marchi - - gdb: include gdbsupport/buildargv.h in ser-mingw.c - Fixes: - - CXX ser-mingw.o - /home/simark/src/binutils-gdb/gdb/ser-mingw.c: In function ‘int pipe_windows_open(serial*, const char*)’: - /home/simark/src/binutils-gdb/gdb/ser-mingw.c:870:3: error: ‘gdb_argv’ was not declared in this scope - 870 | gdb_argv argv (name); - | ^~~~~~~~ - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28802 - Change-Id: I7f3e8ec5f9ca8582d587545fdf6b69901259f199 - -2022-01-21 Nick Clifton - - Updated Serbian translation for the ld sub-directory - -2022-01-21 Andrew Burgess - - gdb/doc: fill in two missing @r - I noticed two places in the docs where we appear to be missing @r. - makeinfo seems to do the correct things despite these being - missing (at least, I couldn't see any difference in the pdf or info - output), but it doesn't hurt to have the @r in place. - -2022-01-21 Mike Frysinger - - drop old unused stamp-h.in file - This was needed by ancient versions of automake, but that hasn't been - the case since at least automake-1.5, so punt this from the tree. - -2022-01-21 Simon Marchi - - gdbsupport/gdb_regex.cc: replace defs.h include with common-defs.h - This was forgotten when gdb_regex was moved from gdb to gdbsupport. - - Change-Id: I73b446f71861cabbf7afdb7408ef9d59fa64b804 - -2022-01-21 GDB Administrator - - Automatic date update in version.in - -2022-01-20 Tom Tromey - - Avoid bad breakpoints with --gc-sections - We found a case where --gc-sections can cause gdb to set an invalid - breakpoint. In the included test case, gdb will set a breakpoint with - two locations, one of which is 0x0. - - The code in lnp_state_machine::check_line_address is intended to - filter out this sort of problem, but in this case, the entire CU is - empty, causing unrelocated_lowpc==0x0 -- which circumvents the check. - - It seems to me that if a CU is empty like this, then it is ok to - simply ignore the line table, as there won't be any locations anyway. - -2022-01-20 GDB Administrator - - Automatic date update in version.in - -2022-01-19 Maciej W. Rozycki - - Add `set print array-indexes' tests for C/C++ arrays - Add `set print array-indexes' tests for C/C++ arrays, complementing one - for Fortran arrays. - -2022-01-19 Maciej W. Rozycki - - Respect `set print array-indexes' with Fortran arrays - Add `set print array-indexes' handling for Fortran arrays. Currently - the setting is ignored and indices are never shown. - - Keep track of the most recent index handled so that any outstanding - repeated elements printed when the limit set by `set print elements' is - hit have the correct index shown. - - Output now looks like: - - (gdb) set print array-indexes on - (gdb) print array_1d - $1 = ((-2) = 1, (-1) = 1, (0) = 1, (1) = 1, (2) = 1) - (gdb) set print repeats 4 - (gdb) set print elements 12 - (gdb) print array_2d - $2 = ((-2) = ((-2) = 2, ) (-1) = ((-2) = 2, ) (0) = ((-2) = 2, (-1) = 2, ...) ...) - (gdb) - - for a 5-element vector and a 5 by 5 array filled with the value of 2. - -2022-01-19 Maciej W. Rozycki - - Add `set print repeats' tests for C/C++ arrays - Add `set print repeats' tests for C/C++ arrays, complementing one for - Fortran arrays and covering the different interpretation of the `set - print elements' setting in particular where the per-dimension count of - the elements handled is matched against the trigger rather than the - total element count as with Fortran arrays. - -2022-01-19 Maciej W. Rozycki - - Respect `set print repeats' with Fortran arrays - Implement `set print repeats' handling for Fortran arrays. Currently - the setting is ignored and always treated as if no limit was set. - - Unlike the generic array walker implemented decades ago the Fortran one - is a proper C++ class. Rather than trying to mimic the old walker then, - which turned out a bit of a challenge where interacting with the `set - print elements' setting, write it entirely from scratch, by adding an - extra specialization handler method for processing dimensions other than - the innermost one and letting the specialization class call the `walk_1' - method from the handler as it sees fit. This way repeats can be tracked - and the next inner dimension recursed into as a need arises only, or - unconditionally in the base class. - - Keep track of the dimension number being handled in the class rather as - a parameter to the walker so that it does not have to be passed across - by the specialization class. - - Use per-dimension element count tracking, needed to terminate processing - early when the limit set by `set print elements' is hit. This requires - extra care too where the limit triggers exactly where another element - that is a subarray begins. In that case rather than recursing we need - to terminate processing or lone `(...)' would be printed. Additionally - if the skipped element is the last one in the current dimension we need - to print `...' by hand, because `continue_walking' won't print it at the - upper level, because it can see the last element has already been taken - care of. - - Preserve the existing semantics of `set print elements' where the total - count of the elements handled is matched against the trigger level which - is unlike with the C/C++ array printer where the per-dimension element - count is used instead. - - Output now looks like: - - (gdb) set print repeats 4 - (gdb) print array_2d - $1 = ((2, ) ) - (gdb) set print elements 12 - (gdb) print array_2d - $2 = ((2, ) (2, ) (2, 2, ...) ...) - (gdb) - - for a 5 by 5 array filled with the value of 2. - - Amend existing test cases accordingly that rely on the current incorrect - behavior and explicitly request that there be no limit for printing - repeated elements there. - - Add suitable test cases as well covering sliced arrays in particular. - - Co-Authored-By: Andrew Burgess - -2022-01-19 John Baldwin - - fbsd-nat: Add include for gdb_argv. - -2022-01-19 Alan Modra - - PowerPC64 DT_RELR ELFv1 - More fun with R_PPC64_NONE found in .opd. Fixed by the - allocate_dynrelocs and ppc64_elf_size_dynamic_sections changes, and - since we are doing ifunc, opd and SYMBOL_REFERENCES_LOCAL tests later, - don't duplicate that work in check_relocs. - - * elf64-ppc.c (ppc64_elf_check_relocs): Remove opd and ifunc - conditions for rel_count. - (dec_dynrel_count): Likewise. - (allocate_dynrelocs): Test for opd and ifunc when allocating - relative relocs. - (ppc64_elf_size_dynamic_sections): Likewise. - -2022-01-19 Alan Modra - - PowerPC64 DT_RELR local PLT - Similarly to the local GOT case. - - * elf64-ppc.c (ppc64_elf_size_dynamic_sections): Don't allocate - space for PLT relocs against local syms when enable_dt_relr. - -2022-01-19 Alan Modra - - PowerPC64 DT_RELR local GOT - Fixes another case where we end up with superfluous R_PPC64_NONE. - - * elf64-ppc.c (ppc64_elf_size_dynamic_sections): Don't allocate - space for GOT relocs against non-TLS local syms when enable_dt_relr. - (ppc64_elf_layout_multitoc): Likewise. - -2022-01-19 GDB Administrator - - Automatic date update in version.in - -2022-01-18 Alan Modra - - Re: PowerPC64 DT_RELR - HJ: "There are 238 R_PPC64_NONEs in libc.so.6 alone." - Indeed, let's make them go away. I had the SYMBOL_REFERENCES_LOCAL - test in the wrong place. check_relocs is too early to know whether a - symbol is dynamic in a shared library. Lots of glibc symbols are made - local by version script, but that doesn't happen until - size_dynamic_sections. - - * elf64-ppc.c (ppc64_elf_check_relocs): Don't count relative relocs - here depending on SYMBOL_REFERENCES_LOCAL. - (dec_dynrel_count): Likewise. - (allocate_dynrelocs): Do so here instead. - -2022-01-18 Tom Tromey - - Fix the remote-sim.c build - My earlier patch to move gdb_argv broke the remote-sim.c build. This - patch fixes the bug. I'm checking it in. - -2022-01-18 Simon Marchi - - gdbserver: introduce remote_debug_printf - Add remote_debug_printf, and use it for all debug messages controlled by - remote_debug. - - Change remote_debug to be a bool, which is trivial in this case. - - Change-Id: I90de13cb892faec3830047b571661822b126d6e8 - -2022-01-18 Simon Marchi - - gdbserver: introduce threads_debug_printf, THREADS_SCOPED_DEBUG_ENTER_EXIT - Add the threads_debug_printf and THREADS_SCOPED_DEBUG_ENTER_EXIT, which - use the logging infrastructure from gdbsupport/common-debug.h. Replace - all debug_print uses that are predicated by debug_threads with - threads_dethreads_debug_printf. Replace uses of the debug_enter and - debug_exit macros with THREADS_SCOPED_DEBUG_ENTER_EXIT, which serves - essentially the same purpose, but allows showing what comes between the - enter and the exit in an indented form. - - Note that "threads" debug is currently used for a bit of everything in - GDBserver, not only threads related stuff. It should ideally be cleaned - up and separated logically as is done in GDB, but that's out of the - scope of this patch. - - Change-Id: I2d4546464462cb4c16f7f1168c5cec5a89f2289a - -2022-01-18 Simon Marchi - - gdbserver: turn debug_threads into a boolean - debug_threads is always used as a boolean. Except in ax.cc and - tracepoint.cc. These files have their own macros that use - debug_threads, and have a concept of verbosity level. But they both - have a single level, so it's just a boolean in the end. - - Remove this concept of level. If we ever want to re-introduce it, I - think it will be better implemented in a more common location. - - Change debug_threads to bool and adjust some users that were treating it - as an int. - - Change-Id: I137f596eaf763a08c977dd74417969cedfee9ecf - -2022-01-18 Tom Tromey - - Simplify Ada catchpoints - All the Ada catchpoints use the same breakpoint_ops contents, because - the catchpoint itself records its kind. This patch simplifies the - code by removing the redundant ops structures. - - Move "catch exec" to a new file - The "catch exec" code is reasonably self-contained, and so this patch - moves it out of breakpoint.c (the second largest source file in gdb) - and into a new file, break-catch-exec.c. - - Move "catch fork" to a new file - The "catch fork" code is reasonably self-contained, and so this patch - moves it out of breakpoint.c (the second largest source file in gdb) - and into a new file, break-catch-fork.c. - - Unify "catch fork" and "catch vfork" - I noticed that "catch fork" and "catch vfork" are nearly identical. - This patch simplifies the code by unifying these two cases. - - Move gdb_regex to gdbsupport - This moves the gdb_regex convenience class to gdbsupport. - - Introduce gdb-hashtab module in gdbsupport - gdb has some extensions and helpers for working with the libiberty - hash table. This patch consolidates these and moves them to - gdbsupport. - - Move gdb obstack code to gdbsupport - This moves the gdb-specific obstack code -- both extensions like - obconcat and obstack_strdup, and things like auto_obstack -- to - gdbsupport. - - Move gdb_argv to gdbsupport - This moves the gdb_argv class to a new header in gdbsupport. - - Simplify event_location_probe - event_location_probe currently stores two strings, but really only - needs one. This patch simplifies it and removes some unnecessary - copies as well. - - Use std::string in event_location - This changes event_location to use std::string, removing some manual - memory management, and an unnecessary string copy. - - Split event_location into subclasses - event_location uses the old C-style discriminated union approach. - However, it's better to use subclassing, as this makes the code - clearer and removes some chances for error. This also enables future - cleanups to avoid manual memory management and copies. - - Remove EL_* macros from location.c - This patch removes the old-style EL_* macros from location.c. This - cleans up the code by itself, IMO, but also enables further cleanups - in subsequent patches. - - Boolify explicit_to_string_internal - This changes explicit_to_string_internal to use 'bool' rather than - 'int'. - - Remove a use of xfree in location.c - This small cleanup removes a use of xfree from location.c, by - switching to unique_xmalloc_ptr. One function is only used in - location.c, so it is made static. And, another function is changed to - avoid a copy. - -2022-01-18 Simon Marchi - - gdb: use ptid_t::to_string instead of target_pid_to_str in debug statements - Same idea as 0fab79556484 ("gdb: use ptid_t::to_string in infrun debug - messages"), but throughout GDB. - - Change-Id: I62ba36eaef29935316d7187b9b13d7b88491acc1 - -2022-01-18 Andrew Burgess - - gdb: preserve `|` in connection details string - Consider this GDB session: - - $ gdb -q - (gdb) target remote | gdbserver - ~/tmp/hello.x - Remote debugging using | gdbserver - ~/tmp/hello.x - ... snip ... - (gdb) info connections - Num What Description - * 1 remote gdbserver - ~/tmp/hello.x Remote target using gdb-specific protocol - (gdb) python conn = gdb.selected_inferior().connection - (gdb) python print(conn.details) - gdbserver - ~/tmp/hello.x - (gdb) - - I think there are two things wrong here, first in the "What" column of - the 'info connections' output, I think the text should be: - - remote | gdbserver - ~/tmp/hello.x - - to correctly show the user how the connection was established. And in - a similar fashion, I think that the `details` string of the - gdb.TargetConnection object should be: - - | gdbserver - ~/tmp/hello.x - - This commit makes this change. Currently the '|' is detected and - removed in gdb/serial.c. The string passed to the pipe_ops - structure (from gdb/ser-pipe.c), doesn't then, contain the `|`, this - is instead implied by the fact that it is a pipes based implementation - of the serial_ops interface. - - After this commit we still detect the `|` in gdb/serial.c, but we now - store the full string (including the `|`) in the serial::name member - variable. - - For pipe based serial connections, this name is only used for - displaying the two fields I mention above, and in pipe_open (from - gdb/ser-pipe.c), and in pipe_open, we now know to skip over the `|`. - - The benefit I see from this change is that GDB's output now more - accurately reflects the commands used to start a target, thus making - it easier for a user to understand what is going on. - -2022-01-18 Tiezhu Yang - - gdb: testsuite: print explicit test result for gdb.base/dfp-test.exp - In the current code, if decimal floating point is not supported for - this target, there is no binary file dfp-test, and also there is no - test result after execute the following commands: - - $ make check-gdb TESTS="gdb.base/dfp-test.exp" - $ grep error gdb/testsuite/gdb.log - /home/loongson/gdb.git/gdb/testsuite/gdb.base/dfp-test.c:39:1: error: decimal floating point not supported for this target - [...] - $ cat gdb/testsuite/gdb.sum - [...] - Running target unix - Running /home/loongson/gdb.git/gdb/testsuite/gdb.base/dfp-test.exp ... - - === gdb Summary === - [...] - - With this patch: - - $ make check-gdb TESTS="gdb.base/dfp-test.exp" - $ cat gdb/testsuite/gdb.sum - [...] - Running target unix - Running /home/loongson/gdb.git/gdb/testsuite/gdb.base/dfp-test.exp ... - UNSUPPORTED: gdb.base/dfp-test.exp: decimal floating point not supported for this target. - - === gdb Summary === - - # of unsupported tests 1 - [...] - -2022-01-18 Simon Marchi - - bfd/elf64-ppc.c: fix clang -Wbitwise-instead-of-logical warning in ppc64_elf_check_init_fini - I see this error with clang-14: - - CC elf64-ppc.lo - /home/smarchi/src/binutils-gdb/bfd/elf64-ppc.c:13131:11: error: use of bitwise '&' with boolean operands [-Werror,-Wbitwise-instead-of-logical] - return (check_pasted_section (info, ".init") - ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - Fix by replacing & with &&. But given that the check_pasted_section - function has side-effects and we want to make sure both calls are made, - assign to temporary variables before evaluating the `&&`. - - Change-Id: I849e1b2401bea5f4d8ef3ab9af99ba9e3ef42490 - -2022-01-18 Alan Modra - - PR28029, debuginfod tests - binutils/NEWS says of the change in --process-links semantics: - If other debug section display options are also enabled (eg - --debug-dump=info) then the contents of matching sections in both the main - file and the separate debuginfo file *will* be displayed. This is because in - most cases the debug section will only be present in one of the files. - - Implying that debug info is dumped without --process-links. Indeed - that appears to be the case for readelf. This does the same for - objdump. - - PR 28029 - * objdump.c (dump_bfd): Do not exit early when !is_mainfile - && !processlinks, instead just exclude non-debug output. - (dump_dwarf): Add is_mainfile parameter and pass to - dump_dwarf_section. - (dump_dwarf_section): Only display debug sections when - !is_mainfile and !process_links. - -2022-01-18 Alan Modra - - Check thin archive element file size against archive header - Makes it a little less likely for someone to break their thin archives. - - * archive.c (_bfd_get_elt_at_filepos): Check thin archive - element file size. - -2022-01-18 Alan Modra - - lang_size_relro_segment tidy - This function has seen too many minimal change style edits. - No functional changes in this patch. - - * ldlang.c (lang_size_relro_segment): Tidy. - -2022-01-18 Alan Modra - - PowerPC64 DT_RELR - PowerPC64 takes a more traditional approach to DT_RELR than x86. Count - relative relocs in check_relocs, allocate space for them and output in - the usual places but not doing so when enable_dt_relr. DT_RELR is - sized in the existing ppc stub relaxation machinery, run via the - linker's ldemul_after_allocation hook. DT_RELR is output in the same - function that writes ppc stubs, run via ldemul_finish. - - This support should be considered experimental. - - bfd/ - * elf64-ppc.c (struct ppc_local_dyn_relocs): Renamed from - ppc_dyn_relocs. Add rel_count field. Update uses. - (struct ppc_dyn_relocs): New. Replace all uses of elf_dyn_relocs. - (struct ppc_link_hash_table): Add relr_alloc, relr_count and - relr_addr. - (ppc64_elf_copy_indirect_symbol): Merge rel_count. - (ppc64_elf_check_relocs): Init rel_count for global and local syms. - (dec_dynrel_count): Change r_info param to reloc pointer. Update - all callers. Handle decrementing rel_count. - (allocate_got): Don't allocate space for relative relocs when - enable_dt_relr. - (allocate_dynrelocs): Likewise. - (ppc64_elf_size_dynamic_sections): Likewise. Handle srelrdyn. - (ppc_build_one_stub): Don't emit relative relocs on .branch_lt. - (compare_relr_address, append_relr_off): New functions. - (got_and_plt_relr_for_local_syms, got_and_plt_relr): Likewise. - (ppc64_elf_size_stubs): Size .relr.syn. - (ppc64_elf_build_stubs): Emit .relr.dyn. - (build_global_entry_stubs_and_plt): Don't output relative relocs - when enable_dt_relr. - (write_plt_relocs_for_local_syms): Likewise. - (ppc64_elf_relocate_section): Likewise. - binutils/ - * testsuite/lib/binutils-common.exp (supports_dt_relr): Add - powerpc64. - ld/ - * emulparams/elf64ppc.sh: Source dt-relr.sh. - * testsuite/ld-elf/dt-relr-2b.d: Adjust for powerpc. - * testsuite/ld-elf/dt-relr-2c.d: Likewise. - * testsuite/ld-elf/dt-relr-2d.d: Likewise. - * testsuite/ld-elf/dt-relr-2e.d: Likewise. - -2022-01-18 Alan Modra - - tweak __ehdr_start visibility and flags for check_relocs - bfd/ - * elf-bfd.h (UNDEFWEAK_NO_DYNAMIC_RELOC): Test linker_def. - ld/ - * ldelf.c (ldelf_before_allocation): Don't force __ehdr_start - local and hidden here.. - * ldlang.c (lang_symbol_tweaks): ..do so here instead and set - def_regular and linker_def for check_relocs. New function - extracted from lang_process. - -2022-01-18 GDB Administrator - - Automatic date update in version.in - -2022-01-17 Nick Clifton - - Update the config.guess and config.sub files from the master repository and regenerate files. - -2022-01-17 Sergey Belyashov - - Fix Z80 assembly failure. - PR 28762 - * app.c (do_scrub_chars): Correct handling when the symbol is not 'af'. - -2022-01-17 Simon Marchi - - gdb/infrun: rename variable and move to more specific scope - Move the "started" variable to the scope it's needed, and rename it to - "step_over_started". - - Change-Id: I56f3384dbd328f55198063bb855edda10f1492a3 - -2022-01-17 Jan Beulich - - x86: adjust struct instr_info field types - Now that this lives on the stack, let's have it be a little less - wasteful in terms of space. Switch boolean fields to "bool" (also when - this doesn't change their size) and also limit the widths of "rex", - "rex_used", "op_ad", and "op_index". Do a little bit of re-ordering as - well to limit the number of padding holes. - - x86: drop index16 field - There's a single use on a generally infrequently taken code path. Put - the necessary conditional there instead. - - x86: drop most Intel syntax register name arrays - By making use of, in particular, oappend_maybe_intel() there's no need - for this redundant set of static data. - - x86: fold variables in memory operand index handling - There's no real need for the pseudo-boolean "haveindex" or for separate - 32-bit / 64-bit index pointers. Fold them into a single "indexes" and - set that uniformly to AT&T names, compensating by emitting the register - name via oappend_maybe_intel(). - - x86: constify disassembler static data - Now that the code is intended to be largely thread-safe, we'd better not - have any writable static objects. - -2022-01-17 GDB Administrator - - Automatic date update in version.in - -2022-01-16 Joel Brobecker - - gdb/copyright.py: Do not update gdbsupport/Makefile.in - This file is generated, so we should not modify it (any modification - we make is going to be undone at the next re-generation anyway). - -2022-01-16 GDB Administrator - - Automatic date update in version.in - -2022-01-15 GDB Administrator - - Automatic date update in version.in - -2022-01-14 Simon Marchi - - gdb.dlang/demangle.exp: update expected output for _D8demangle4testFnZv - Since commit ce2d3708bc8b ("Synchronize binutils libiberty sources with - gcc version."), I see this failure: - - demangle _D8demangle4testFnZv^M - demangle.test(typeof(null))^M - (gdb) FAIL: gdb.dlang/demangle.exp: _D8demangle4testFnZv - - The commit imported the commit 0e32a5aa8bc9 ("libiberty: Add support for - D `typeof(*null)' types") from the gcc repository. That commit includes - an update to libiberty/testsuite/d-demangle-expected, which updates a - test for the exact same mangled name: - - _D8demangle4testFnZv - -demangle.test(none) - +demangle.test(typeof(null)) - - I don't know anything about D, but give that the change was made by Iain - Buclaw, the D language maintainer, I trust him on that. - - Fix our test by updating the expected output in the same way. - - Note: it's not really useful to have all these D demangling tests in the - GDB testsuite, since there are demangling tests in libiberty. We should - consider removing them, but we first need to make sure that everything - that is covered in gdb/testsuite/gdb.dlang/demangle.exp is also covered - in libiberty/testsuite/d-demangle-expected. - - Change-Id: If2b290ea8367b8e1e0b90b20d4a6e0bee517952d - -2022-01-14 Nils-Christian Kempke - - gdb/testsuite: enable __INTEL_LLVM_COMPILER preprocessor in get_compiler_info - 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). - - gdb/testsuite/ChangeLog: - 2020-12-07 Abdul Basit Ijaz - - * lib/compiler.c: Add Intel next gen compiler pre-processor check. - * lib/compiler.cc: Ditto. - * lib/fortran.exp (fortran_main): Check Intel next gen compiler in - test_compiler_info. - -2022-01-14 Alan Modra - - PR28751 mbind2a / mbind2b regressions on powerpc*-linux - include/ - * bfdlink.h (struct bfd_link_info): Add commonpagesize_is_set. - ld/ - PR 28751 - * emultempl/elf.em (handle_option): Set commonpagesize_is_set. - * ldelf.c (ldelf_after_parse): Don't error when only one of - -z max-page-size or -z common-page-size is given, correct the - other value to make it sane. - * testsuite/ld-elf/elf.exp (mbind2a, mbind2b): Do not pass - -z max-page-size. - -2022-01-14 Jan Beulich - - x86: drop ymmxmm_mode - This enumerator is not used by any table entry. - - x86: share yet more VEX table entries with EVEX decoding - On top of prior similar work more opportunities have appeared in the - meantime. Note that this also happens to address the prior lack of - decoding of EVEX.L'L for VMOV{L,H}P{S,D} and VMOV{LH,HL}PS. - - x86: consistently use scalar_mode for AVX512-FP16 scalar insns - For some reason the original AVFX512F insns were not taken as a basis - here, causing unnecessary divergence. While not an active issue, it is - still relevant to note that OP_XMM() has special treatment of e.g. - scalar_mode (marking broadcast as invalid). Such would better be - consistent for all sufficiently similar insns. - - x86: record further wrong uses of EVEX.b - For one EVEX.W set does not imply EVEX.b is uniformly valid. Reject it - for modes which occur for insns allowing for EVEX.W to be set (noticed - with VMOV{H,L}PD and VMOVDDUP, and only in AT&T mode, but not checked - whether further insns would also have been impacted; I expect e.g. - VCMPSD would have had the same issue). And then the present concept of - broadcast makes no sense at all when the memory operand of an insn is - the destination. - -2022-01-14 Jan Beulich - - x86: reduce AVX512 FP set of insns decoded through vex_w_table[] - Like for AVX512-FP16, there's not that many FP insns where going through - this table is easier / cheaper than using suitable macros. Utilize %XS - and %XD more to eliminate a fair number of table entries. - - While doing this I noticed a few anomalies. Where lines get touched / - moved anyway, these are being addressed right here: - - vmovshdup used EXx for its 2nd operand, thus displaying seemingly - valid broadcast when EVEX.b is set with a memory operand; use - EXEvexXNoBcst instead just like vmovsldup already does - - vmovlhps used EXx for its 3rd operand, when all sibling entries use - EXq; switch to EXq there for consistency (the two differ only for - memory operands) - -2022-01-14 Jan Beulich - - x86: reduce AVX512-FP16 set of insns decoded through vex_w_table[] - Like already indicated during review of the original submission, there's - really only very few insns where going through this table is easier / - cheaper than using suitable macros. Utilize %XH more and introduce - similar %XS and %XD (which subsequently can be used for further table - size reduction). - - While there also switch to using oappend() in 'XH' macro processing. - -2022-01-14 GDB Administrator - - Automatic date update in version.in - -2022-01-13 H.J. Lu - - ld: Disable DT_RELR in some -z relro tests - Disable DT_RELR in the following -z relro tests which don't expect - DT_RELR in linker outputs. - - * testsuite/ld-i386/pr20830.d: Pass $NO_DT_RELR_LDFLAGS to ld. - * testsuite/ld-x86-64/pr20830a-now.d: Likewise. - * testsuite/ld-x86-64/pr20830a.d: Likewise. - * testsuite/ld-x86-64/pr20830b-now.d: Likewise. - * testsuite/ld-x86-64/pr20830b.d: Likewise. - * testsuite/ld-x86-64/pr21038a-now.d: Likewise. - * testsuite/ld-x86-64/pr21038a.d: Likewise. - * testsuite/ld-x86-64/pr21038b-now.d: Likewise. - * testsuite/ld-x86-64/pr21038c-now.d: Likewise. - * testsuite/ld-x86-64/pr21038c.d: Likewise. - -2022-01-13 H.J. Lu - - Reapply libiberty: Pass --plugin to AR and RANLIB - Reapply the patch to detect GCC LTO plugin used for libiberty build to - support LTO build in libiberty. - - * Makefile.in (AR): Add @AR_PLUGIN_OPTION@ - (RANLIB): Add @RANLIB_PLUGIN_OPTION@. - (configure_deps): Depend on ../config/gcc-plugin.m4. - * aclocal.m4: Include ../config/gcc-plugin.m4. - * configure.ac: AC_SUBST AR_PLUGIN_OPTION and - RANLIB_PLUGIN_OPTION. - * configure: Regenerate. - -2022-01-13 H.J. Lu - - elf: Remove the 1-page gap before the RELRO segment - The existing RELRO scheme may leave a 1-page gap before the RELRO segment - and align the end of the RELRO segment to the page size: - - [18] .eh_frame PROGBITS 408fa0 008fa0 005e80 00 A 0 0 8 - [19] .init_array INIT_ARRAY 410de0 00fde0 000008 08 WA 0 0 8 - [20] .fini_array FINI_ARRAY 410de8 00fde8 000008 08 WA 0 0 8 - [21] .dynamic DYNAMIC 410df0 00fdf0 000200 10 WA 7 0 8 - [22] .got PROGBITS 410ff0 00fff0 000010 08 WA 0 0 8 - [23] .got.plt PROGBITS 411000 010000 000048 08 WA 0 0 8 - - Instead, we can remove the 1-page gap if the maximum page size >= the - maximum section alignment: - - [18] .eh_frame PROGBITS 408fa0 008fa0 005e80 00 A 0 0 8 - [19] .init_array INIT_ARRAY 40fde0 00fde0 000008 08 WA 0 0 8 - [20] .fini_array FINI_ARRAY 40fde8 00fde8 000008 08 WA 0 0 8 - [21] .dynamic DYNAMIC 40fdf0 00fdf0 000200 10 WA 7 0 8 - [22] .got PROGBITS 40fff0 00fff0 000010 08 WA 0 0 8 - [23] .got.plt PROGBITS 410000 010000 000048 08 WA 0 0 8 - - Because the end of the RELRO segment is always aligned to the page size - and may not be moved, the RELRO segment size may be increased: - - [ 3] .dynstr STRTAB 000148 000148 000001 00 A 0 0 1 - [ 4] .eh_frame PROGBITS 000150 000150 000000 00 A 0 0 8 - [ 5] .init_array INIT_ARRAY 200150 000150 000010 08 WA 0 0 1 - [ 6] .fini_array FINI_ARRAY 200160 000160 000010 08 WA 0 0 1 - [ 7] .jcr PROGBITS 200170 000170 000008 00 WA 0 0 1 - [ 8] .data.rel.ro PROGBITS 200180 000180 000020 00 WA 0 0 16 - [ 9] .dynamic DYNAMIC 2001a0 0001a0 0001c0 10 WA 3 0 8 - [10] .got PROGBITS 200360 000360 0002a8 00 WA 0 0 8 - [11] .bss NOBITS 201000 000608 000840 00 WA 0 0 1 - - vs the old section layout: - - [ 3] .dynstr STRTAB 000148 000148 000001 00 A 0 0 1 - [ 4] .eh_frame PROGBITS 000150 000150 000000 00 A 0 0 8 - [ 5] .init_array INIT_ARRAY 200b48 000b48 000010 08 WA 0 0 1 - [ 6] .fini_array FINI_ARRAY 200b58 000b58 000010 08 WA 0 0 1 - [ 7] .jcr PROGBITS 200b68 000b68 000008 00 WA 0 0 1 - [ 8] .data.rel.ro PROGBITS 200b70 000b70 000020 00 WA 0 0 16 - [ 9] .dynamic DYNAMIC 200b90 000b90 0001c0 10 WA 3 0 8 - [10] .got PROGBITS 200d50 000d50 0002a8 00 WA 0 0 8 - [11] .bss NOBITS 201000 000ff8 000840 00 WA 0 0 1 - - But there is no 1-page gap. - - PR ld/28743 - * ldlang.c (lang_size_relro_segment_1): Remove the 1-page gap - before the RELRO segment if the maximum page size >= the maximum - section alignment. - * testsuite/ld-i386/pr20830.d: Adjusted. - * testsuite/ld-s390/gotreloc_64-relro-1.dd: Likewise. - * testsuite/ld-x86-64/pr14207.d: Likewise. - * testsuite/ld-x86-64/pr18176.d: Likewise. - * testsuite/ld-x86-64/pr20830a-now.d: Likewise. - * testsuite/ld-x86-64/pr20830a.d: Likewise. - * testsuite/ld-x86-64/pr20830b-now.d: Likewise. - * testsuite/ld-x86-64/pr20830b.d: Likewise. - * testsuite/ld-x86-64/pr21038a-now.d: Likewise. - * testsuite/ld-x86-64/pr21038a.d: Likewise. - * testsuite/ld-x86-64/pr21038b-now.d: Likewise. - * testsuite/ld-x86-64/pr21038c-now.d: Likewise. - * testsuite/ld-x86-64/pr21038c.d: Likewise. - -2022-01-13 Nick Clifton - - Synchronize binutils libiberty sources with gcc version. - +2021-12-30 Lancelot SIX - + - + * 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 - + - + Revert: - + 2021-12-16 H.J. Lu - + - + * 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 - + - + * 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 - + - + 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 - + - + * make-temp-file.c (try_dir): Check to see if the dir - + is actually a directory. - + - +2021-10-22 Eric Gallager - + - + PR other/102663 - + * Makefile.in: Allow dvi-formatted documentation - + to be installed. - + - +2021-10-17 Lu?s Ferreira - + - + 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 - + - + * testsuite/d-demangle-expected: Add test case for function literals. - + - +2021-10-14 Lu?s Ferreira - + - + * testsuite/d-demangle-expected: Add test cases for simple special - + mangles. - + - +2021-10-12 Lu?s Ferreira - + - + * d-demangle.c (dlang_parse_qualified): Remove redudant parenthesis - + around lhs and rhs of assignments. - + - +2021-10-01 Lu?s Ferreira - + - + * testsuite/d-demangle-expected: Add missing format for new test - + - +2021-09-23 Lu?s Ferreira - + - + * d-demangle.c (dlang_Type): Validate MANGLED is nonnull. - + * testsuite/d-demangle-expected: New test. - + - +2021-09-23 Lu?s Ferreira - + - + * d-demangle.c (dlang_symbol_backref): Ensure strlen of - + string is less than length computed by dlang_number. - + - +2021-09-01 Iain Sandoe - - * 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 - + - + * d-demangle.c (dlang_identifier): Skip over fake parent manglings. - + * testsuite/d-demangle-expected: Add tests. - + - +2021-08-29 Iain Buclaw - + - + * 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 - + - + * 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 - + - + * 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 - +2021-08-18 Iain Sandoe - - + * simple-object-mach-o.c (simple_object_mach_o_write_segment): - + Arrange to swap the LTO index tables where needed. - # Please enter the commit message for your changes. Lines starting - -2022-01-13 Andrew Burgess - - gdb: don't use -Wmissing-prototypes with g++ - This commit aims to not make use of -Wmissing-prototypes when - compiling with g++. - - Use of -Wmissing-prototypes was added with this commit: - - commit a0761e34f054767de6d6389929d27e9015fb299b - Date: Wed Mar 11 15:15:12 2020 -0400 - - gdb: enable -Wmissing-prototypes warning - - Because clang can provide helpful warnings with this flag. - Unfortunately, g++ doesn't accept this flag, and will give this - warning: - - cc1plus: warning: command line option ‘-Wmissing-prototypes’ is valid for C/ObjC but not for C++ - - In theory the fact that this flag is not supported should be detected - by the configure check in gdbsupport/warning.m4, but for users of - ccache, this check doesn't work due to a long standing ccache issue: - - https://github.com/ccache/ccache/issues/738 - - The ccache problem is that -W... options are reordered on the command - line, and so -Wmissing-prototypes is seen before -Werror. Usually - this doesn't matter, but the above warning (about the flag not being - valid) is issued before the -Werror flag is processed, and so is not - fatal. - - There have been two previous attempts to fix this that I'm aware of. - The first is: - - https://sourceware.org/pipermail/gdb-patches/2021-September/182148.html - - In this attempt, instead of just relying on a compile to check if a - flag is valid, the proposal was to both compile and link. As linking - doesn't go through ccache, we don't suffer from the argument - reordering problem, and the link phase will correctly fail when using - -Wmissing-prototypes with g++. The configure script will then disable - the use of this flag. - - This approach was rejected, and the suggestion was to only add the - -Wmissing-prototypes flag if we are compiling with gcc. - - The second attempt, attempts this approach, and can be found here: - - https://sourceware.org/pipermail/gdb-patches/2021-November/183076.html - - This attempt only adds the -Wmissing-prototypes flag is the value of - GCC is not 'yes'. This feels like it is doing the right thing, - unfortunately, the GCC flag is really a 'is gcc like' flag, not a - strict, is gcc check. As such, GCC is set to 'yes' for clang, which - would mean the flag was not included for clang or gcc. The entire - point of the original commit was to add this flag for clang, so - clearly the second attempt is not sufficient either. - - In this new attempt I have added gdbsupport/compiler-type.m4, this - file defines AM_GDB_COMPILER_TYPE. This macro sets the variable - GDB_COMPILER_TYPE to either 'gcc', 'clang', or 'unknown'. In future - the list of values might be extended to cover other compilers, if this - is ever useful. - - I've then modified gdbsupport/warning.m4 to only add the problematic - -Wmissing-prototypes flag if GDB_COMPILER_TYPE is not 'gcc'. - - I've tested this with both gcc and clang and see the expected results, - gcc no longer attempts to use the -Wmissing-prototypes flag, while - clang continues to use it. - - When compiling using ccache, I am no longer seeing the warning. - -2022-01-13 Andrew Burgess - - gdb: add some extra debug information to attach_command - While working on another patch I wanted to add some extra debug - information to the attach_command function. This required me to add a - new function to convert the thread_info::state variable to a string. - - The new debug might be useful to others, and the state to string - function might be useful in other locations, so I thought I'd merge - it. - -2022-01-13 Alan Modra - - Re: gas: add visibility support using GNU syntax on XCOFF - tc-ppc.c: In function 'ppc_comm': - tc-ppc.c:4560:40: error: 'visibility' may be used uninitialized in this function [-Werror=maybe-uninitialized] - - With that fixed we hit lots of segfaults in the ld testsuite. - - PR 22085 - bfd/ - * xcofflink.c (xcoff_link_input_bfd): Don't segfault on NULL - sym_hash. - gas/ - * config/tc-ppc.c (ppc_comm): Init visibility. - -2022-01-13 Alan Modra - - dt-relr.exp --no-as-needed - Otherwise the very simple test may not be linked with libc.so at all, - and thus correctly have no version reference added. Causing failure - of the dt-relr-glibc-1b.so test. - - * testsuite/ld-elf/dt-relr.exp: Link with --no-as-needed. - -2022-01-13 Alan Modra - - Correct .relr.dyn nocombreloc script - * scripttempl/elf.sc (.relr.dyn): Don't depend on $COMBRELOC. - -2022-01-13 Alan Modra - - testsuite supports_dt_relr - Tidy, and fix "FAIL: Build dt-relr-glibc-1b.so" on all non-x86 - linux targets. - - binutils/ - * binutils-common.exp (supports_dt_relr): New proc. - ld/ - * testsuite/config/default.exp (DT_RELR_LDFLAGS, NO_DT_RELR_LDFLAGS), - (DT_RELR_CC_LDFLAGS, NO_DT_RELR_CC_LDFLAGS): Use supports_dt_relr. - * testsuite/ld-elf/dt-relr.exp: Don't run unless supports_dt_relr. - * testsuite/ld-elf/dt-relr-1a.d: Likewise. - * testsuite/ld-elf/dt-relr-1b.d: Likewise. - * testsuite/ld-elf/dt-relr-1c.d: Likewise. - * testsuite/ld-elf/dt-relr-2a.d: Likewise. - * testsuite/ld-elf/dt-relr-2b.d: Likewise. - * testsuite/ld-elf/dt-relr-2c.d: Likewise. - * testsuite/ld-elf/dt-relr-2d.d: Likewise. - * testsuite/ld-elf/dt-relr-2e.d: Likewise. - * testsuite/ld-elf/dt-relr-2f.d: Likewise. - * testsuite/ld-elf/dt-relr-2g.d: Likewise. - * testsuite/ld-elf/dt-relr-2h.d: Likewise. - * testsuite/ld-elf/dt-relr-3a.d: Likewise. - * testsuite/ld-elf/dt-relr-3b.d: Likewise. - -2022-01-13 Alan Modra - - Don't use C++ comments in assembly - It might seem to work, but only if '/' is a start of comment char. - - * testsuite/ld-elf/dt-relr-1.s: Use # for comment. - * testsuite/ld-elf/dt-relr-2.s: Likewise. - * testsuite/ld-elf/dt-relr-3.s: Likewise. - -2022-01-13 Alan Modra - - Move DT_RELR tag setting to elflink.c - This makes the code setting DT_RELR tags generally available. Many - targets will be able to use the defaults. Those that can't should set - up sh_entsize for .relr.dyn output section before reaching the dynamic - tag code in bfd_elf_final_link. - - * elflink.c (bfd_elf_final_link): Set up DT_RELR tags and sh_entsize. - * elfxx-x86.c (_bfd_x86_elf_finish_dynamic_sections): Don't do any - of that here. - -2022-01-13 Alan Modra - - Re: Set SEC_ELF_REVERSE_COPY earlier - Let's not rely on .init/.fini having relocs for the size sanity check. - This is mainly to squash reports of "my fuzzed object made ld hang". - -2022-01-13 Tiezhu Yang - - gdb: testsuite: make string[] type as char in gdb.base/charset.c - This reverts the commit ff656e2e1cb1 ("gdb: testsuite: fix failed - testcases in gdb.base/charset.exp"). - - The original test code has no problem. On an architecture where - char is signed, then both 'A' and ebcdic_us_string[7] will yield - -63, which makes the equality true. On an architecture where char - is unsigned, then both 'A' and ebcdic_us_string[7] will yield 193, - which also makes the equality true. - - The test cases only failed on LoongArch. The default type of char - is signed char on LoongArch, like x86-64. But when use gdb print - command on LoongArch, the default type of char is unsigned char, - this is wrong, I will look into it later, sorry for that. - - On LoongArch: - - $ cat test_char.c - #include - - int main() - { - char c1 = 193; - unsigned char c2 = 193; - - printf("%d\n", c1); - printf("%d\n", c1 == c2); - - return 0; - } - $ gcc test_char.c -o test_char - $ ./test_char - -63 - 0 - - (gdb) set target-charset EBCDIC-US - (gdb) print 'A' - $1 = 193 'A' - (gdb) print /c 'A' - $2 = 193 'A' - (gdb) print /u 'A' - $3 = 193 - (gdb) print /d 'A' - $4 = -63 - (gdb) print /x 'A' - $5 = 0xc1 - -2022-01-13 GDB Administrator - - Automatic date update in version.in - -2022-01-12 Carl Love - - gdb Power 9 add test for HW watchpoint support. - The Power 9 processor revision 2.2 has HW watchpoint support disabled due - to a HW bug. The support is fixed in Power 9 processor revision 2.3. This - patch add a test to lib/gdb.exp for Power to determine if the processor - supports HW watchpoints or not. If the Power processor doesn't support HW - watchpoints the proceedure skip_hw_watchpoint_tests will return 1 to - disable the various HW watchpoint tests. - - The patch has been tested on Power 9, processor revesions 2.2 and 2.3. The - patch has also been tested on Power 10. No regression test failures were - found. - -2022-01-12 Andrew Burgess - - gdb/python: add gdb.host_charset function - We already have gdb.target_charset and gdb.target_wide_charset. This - commit adds gdb.host_charset along the same lines. - -2022-01-12 Tankut Baris Aktemur - - gdb/testsuite: fix gdb.python/py-events.exp for finding process id - When executed with --target_board=native-extended-gdbserver, the - gdb.python/py-events.exp test errors out with - - ERROR: tcl error sourcing /path/to/gdb/testsuite/gdb.python/py-events.exp. - ERROR: can't read "process_id": no such variable - while executing - "lappend expected "ptid: \\($process_id, $process_id, 0\\)" "address: $addr"" - (file "/path/to/gdb/testsuite/gdb.python/py-events.exp" line 103) - invoked from within - "source /path/to/gdb/testsuite/gdb.python/py-events.exp" - ("uplevel" body line 1) - invoked from within - "uplevel #0 source /path/to/gdb/testsuite/gdb.python/py-events.exp" - invoked from within - "catch "uplevel #0 source $test_file_name"" - - There are multiple problems around this: - - 1. The process_id variable is not initialized to a default value. - - 2. The test attempts to find the PID of the current thread, but the - regexp that it uses is not tailored for the output printed by the - remote target. - - 3. The test uses "info threads" to find the current thread PID. - Using the "thread" command instead is simpler. - - Fix these problems. - -2022-01-12 Tom Tromey - - Don't mention "serial" in target remote description - PR remote/9177 points out that "info files" mentions "serial" a couple - of times: - - Remote serial target in gdb-specific protocol: - Debugging a target over a serial line. - - However, often the remote target isn't really a serial connection. - - It seems to me that this text could be a bit clearer; and furthermore - since "info files" prints the target's long description, - remote_target::files_info doesn't really add much and can simply be - removed. - - Regression tested on x86-64 Fedora 34. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=9177 - -2022-01-12 H.J. Lu - - ld: Add glibc dependency for DT_RELR - When DT_RELR is enabled, to avoid random run-time crash with older glibc - binaries without DT_RELR support, add a GLIBC_ABI_DT_RELR symbol version, - which is provided by glibc with DT_RELR support, dependency on the shared - C library if it provides a GLIBC_2.XX symbol version. - - bfd/ - - * elflink.c (elf_link_add_dt_relr_dependency): New function. - (bfd_elf_size_dynamic_sections): Call - elf_link_add_dt_relr_dependency if DT_RELR is enabled. - - ld/ - - * ld.texi: Mention GLIBC_ABI_DT_RELR in -z pack-relative-relocs - entry. - * testsuite/ld-elf/dt-relr-glibc-1.c: New file. - * testsuite/ld-elf/dt-relr-glibc-1a.rd: Likewise. - * testsuite/ld-elf/dt-relr-glibc-1b.rd: Likewise. - * testsuite/ld-elf/dt-relr.exp: Likewise. - -2022-01-12 H.J. Lu - - ld: Add simple DT_RELR tests - * testsuite/ld-elf/dt-relr-1.s: New file. - * testsuite/ld-elf/dt-relr-1a.d: Likewise. - * testsuite/ld-elf/dt-relr-1b.d: Likewise. - * testsuite/ld-elf/dt-relr-1c.d: Likewise. - * testsuite/ld-elf/dt-relr-2.s: Likewise. - * testsuite/ld-elf/dt-relr-2a.d: Likewise. - * testsuite/ld-elf/dt-relr-2b.d: Likewise. - * testsuite/ld-elf/dt-relr-2c.d: Likewise. - * testsuite/ld-elf/dt-relr-2d.d: Likewise. - * testsuite/ld-elf/dt-relr-2e.d: Likewise. - * testsuite/ld-elf/dt-relr-2f.d: Likewise. - * testsuite/ld-elf/dt-relr-2g.d: Likewise. - * testsuite/ld-elf/dt-relr-2h.d: Likewise. - * testsuite/ld-elf/dt-relr-3.s: Likewise. - * testsuite/ld-elf/dt-relr-3a.d: Likewise. - * testsuite/ld-elf/dt-relr-3b.d: Likewise. - * testsuite/ld-i386/dt-relr-1.s: Likewise. - * testsuite/ld-i386/dt-relr-1a.d: Likewise. - * testsuite/ld-i386/dt-relr-1b.d: Likewise. - * testsuite/ld-x86-64/dt-relr-1a-x32.d: Likewise. - * testsuite/ld-x86-64/dt-relr-1a.d: Likewise. - * testsuite/ld-x86-64/dt-relr-1b-x32.d: Likewise. - * testsuite/ld-x86-64/dt-relr-1b.d: Likewise. - * testsuite/ld-x86-64/dt-relr-1.s: Likewise. - * testsuite/ld-i386/i386.exp: Run dt-relr-1a and dt-relr-1b. - * testsuite/ld-x86-64/x86-64.exp: Run dt-relr-1a, dt-relr-1a-x32 - dt-relr-1b and dt-relr-1b-x32. - -2022-01-12 H.J. Lu - - x86: Add DT_RELR support - DT_RELR is implemented with linker relaxation: - - 1. During linker relaxation, we scan input relocations with the same - logic in relocate_section to determine if a relative relocation should - be generated and save the relative relocation candidate information for - sizing the DT_RELR section later after all symbols addresses can be - determined. For these relative relocations which can't be placed in - the DT_RELR section, they will be placed in the rela.dyn/rel.dyn - section. - 2. When DT_RELR is enabled, _bfd_elf_map_sections_to_segments calls a - backend function to size the DT_RELR section which will compute the - DT_RELR section size and tell ldelf_map_segments to layout sections - again when the DT_RELR section size has been increased. - 3. After regular symbol processing is finished, bfd_elf_final_link calls - a backend function to finish the DT_RELR section. - - * elf32-i386.c (elf_i386_relocate_section): Don't generate - relative relocation when DT_RELR is enabled. - (elf_i386_finish_dynamic_symbol): Likewise. - * elf64-x86-64.c (elf_x86_64_relocate_section): Don't generate - relative relocation when DT_RELR is enabled. - (elf_x86_64_finish_dynamic_symbol): Likewise. - * elfxx-x86.c (_bfd_x86_elf_link_hash_table_create): Initialize - relative_r_type, relative_r_name, elf_append_reloc, - elf_write_addend and elf_write_addend_in_got. - (elf_x86_relative_reloc_record_add): New function. - (_bfd_x86_elf_link_relax_section): Likewise. - (elf64_dt_relr_bitmap_add): Likewise. - (elf32_dt_relr_bitmap_add): Likewise. - (_bfd_elf32_write_addend): Likewise. - (_bfd_elf64_write_addend): Likewise. - (elf_x86_size_or_finish_relative_reloc): Likewise. - (elf_x86_compute_dl_relr_bitmap): Likewise. - (elf_x86_write_dl_relr_bitmap): Likewise. - (elf_x86_relative_reloc_compare ): Likewise. - (_bfd_elf_x86_size_relative_relocs): Likewise. - (_bfd_elf_x86_finish_relative_relocs): Likewise. - (_bfd_x86_elf_size_dynamic_sections): Skip the .relr.dyn section. - (_bfd_x86_elf_finish_dynamic_sections): Convert 3 spare dynamic - tags to DT_RELR, DT_RELRSZ and for compact relative relocation. - * elfxx-x86.h (X86_64_GOT_TYPE_P): New. - (I386_GOT_TYPE_P): Likewise. - (X86_GOT_TYPE_P): Likewise. - (X86_64_RELATIVE_RELOC_TYPE_P): Likewise. - (I386_RELATIVE_RELOC_TYPE_P): Likewise. - (X86_RELATIVE_RELOC_TYPE_P): Likewise. - (X86_LOCAL_GOT_RELATIVE_RELOC_P): Likewise. - (I386_PCREL_TYPE_P): Likewise. - (X86_64_PCREL_TYPE_P): Likewise. - (X86_64_NEED_DYNAMIC_RELOC_TYPE_P): Rewrite. - (I386_NEED_DYNAMIC_RELOC_TYPE_P): Likewise. - (GENERATE_DYNAMIC_RELOCATION_P): Also check rel_from_abs. - (elf_x86_link_hash_entry): Add got_relative_reloc_done. - (elf_x86_relative_reloc_record): New. - (elf_x86_relative_reloc_data): Likewise. - (elf_dt_relr_bitmap): Likewise. - (elf_x86_link_hash_table): Add dt_relr_bitmap, relative_reloc, - unaligned_relative_reloc, relative_r_type, relative_r_name, - elf_append_reloc, elf_write_addend, elf_write_addend_in_got and - relative_reloc_done. - (elf_x86_relative_reloc_done): New. - (relative_reloc_packed): Likewise. - (_bfd_x86_elf_link_relax_section): Likewise. - (_bfd_elf_x86_size_relative_relocs): Likewise. - (_bfd_elf_x86_finish_relative_relocs): Likewise. - (_bfd_elf32_write_addend): Likewise. - (_bfd_elf64_write_addend): Likewise. - (bfd_elf32_bfd_relax_section): Likewise. - (bfd_elf64_bfd_relax_section): Likewise. - (elf_backend_size_relative_relocs): Likewise. - (elf_backend_finish_relative_relocs): Likewise. - (elf_x86_allocate_local_got_info): Also allocate - relative_reloc_done. - -2022-01-12 H.J. Lu - - elf: Support DT_RELR in linker tests - Allow eabling and disabling DT_RELR in linker tests. Disable DT_RELR in - linker tests which don't expect DT_RELR in linker outputs. - - binutils/ - - * testsuite/lib/binutils-common.exp (run_dump_test): Make - DT_RELR_LDFLAGS and NO_DT_RELR_LDFLAGS global. - - ld/ - - * testsuite/config/default.exp (DT_RELR_LDFLAGS): New. - (DT_RELR_CC_LDFLAGS): Likewise. - (NO_DT_RELR_LDFLAGS): Likewise. - (NO_DT_RELR_CC_LDFLAGS): Likewise. - * testsuite/ld-elf/shared.exp: Pass $NO_DT_RELR_LDFLAGS to - linker for some tests. - * testsuite/ld-i386/export-class.exp: Likewise. - * testsuite/ld-i386/i386.exp: Likewise. - * testsuite/ld-i386/ibt-plt-2a.d: Pass $NO_DT_RELR_LDFLAGS to - linker. - * testsuite/ld-i386/ibt-plt-3a.d: Likewise. - * testsuite/ld-i386/ibt-plt-3c.d: Likewise. - * testsuite/ld-i386/pr26869.d: Likewise. - * testsuite/ld-i386/report-reloc-1.d: Likewise. - * testsuite/ld-ifunc/ifunc-2-i386-now.d: Likewise. - * testsuite/ld-ifunc/ifunc-2-local-i386-now.d: Likewise. - * testsuite/ld-ifunc/ifunc-2-local-x86-64-now.d: Likewise. - * testsuite/ld-ifunc/ifunc-2-x86-64-now.d: Likewise. - * testsuite/ld-ifunc/pr17154-x86-64.d: Likewise. - * testsuite/ld-x86-64/bnd-branch-1-now.d: Likewise. - * testsuite/ld-x86-64/bnd-ifunc-1-now.d: Likewise. - * testsuite/ld-x86-64/bnd-ifunc-2-now.d: Likewise. - * testsuite/ld-x86-64/bnd-ifunc-2.d: Likewise. - * testsuite/ld-x86-64/bnd-plt-1-now.d: Likewise. - * testsuite/ld-x86-64/bnd-plt-1.d: Likewise. - * testsuite/ld-x86-64/ibt-plt-2a-x32.d: Likewise. - * testsuite/ld-x86-64/ibt-plt-2a.d: Likewise. - * testsuite/ld-x86-64/ibt-plt-3a-x32.d: Likewise. - * testsuite/ld-x86-64/ibt-plt-3a.d: Likewise. - * testsuite/ld-x86-64/ilp32-4.d: Likewise. - * testsuite/ld-x86-64/load1c.d: Likewise. - * testsuite/ld-x86-64/load1d.d: Likewise. - * testsuite/ld-x86-64/pr13082-2b.d: Likewise. - * testsuite/ld-x86-64/pr14207.d: Likewise. - * testsuite/ld-x86-64/pr18176.d: Likewise. - * testsuite/ld-x86-64/pr19162.d: Likewise. - * testsuite/ld-x86-64/pr19636-2d.d: Likewise. - * testsuite/ld-x86-64/pr19636-2l.d: Likewise. - * testsuite/ld-x86-64/pr20253-1d.d: Likewise. - * testsuite/ld-x86-64/pr20253-1f.d: Likewise. - * testsuite/ld-x86-64/pr20253-1j.d: Likewise. - * testsuite/ld-x86-64/pr20253-1l.d: Likewise. - * testsuite/ld-x86-64/report-reloc-1-x32.d: Likewise. - * testsuite/ld-x86-64/report-reloc-1.d: Likewise. - * testsuite/ld-x86-64/export-class.exp (x86_64_export_class_test): - Pass $NO_DT_RELR_LDFLAGS to linker. - * testsuite/ld-x86-64/x86-64.exp: Pass $NO_DT_RELR_LDFLAGS to - linker for some tests. - -2022-01-12 H.J. Lu - - elf: Add size_relative_relocs and finish_relative_relocs - On some targets, the DT_RELR section size can be computed only after all - symbols addresses can be determined. Set the preliminary DT_RELR section - size before mapping sections to segments and set the final DT_RELR section - size after regular symbol processing is done. - - * elf-bfd.h (elf_backend_data): Add size_relative_relocs and - finish_relative_relocs. - * elf.c (_bfd_elf_map_sections_to_segments): Call - size_relative_relocs if DT_RELR is enabled. - * elflink.c (bfd_elf_final_link): Call finish_relative_relocs - after regular symbol processing is finished if DT_RELR is enabled. - * elfxx-target.h (elf_backend_size_relative_relocs): New. - (elf_backend_finish_relative_relocs): Likewise. - (elfNN_bed): Add elf_backend_size_relative_relocs and - elf_backend_finish_relative_relocs. - -2022-01-12 H.J. Lu - - ld: Initial DT_RELR support - Add a -z pack-relative-relocs option to enable DT_RELR and create a - relr.dyn section for DT_RELR. DT_RELR is implemented with the linker - relaxation infrastructure, but it doesn't require the --relax option - enabled. -z pack-relative-relocs implies -z combreloc. -z nocombreloc - implies -z nopack-relative-relocs. - - -z pack-relative-relocs is chosen over the similar option in lld, - --pack-dyn-relocs=relr, to implement a glibc binary lockout mechanism - with a special glibc version symbol, to avoid random crashes of DT_RELR - binaries with the existing glibc binaries. - - bfd/ - - * elf-bfd.h (elf_link_hash_table): Add srelrdyn. - * elflink.c (_bfd_elf_link_create_dynamic_sections): Create a - .relr.dyn section for DT_RELR. - - include/ - - * bfdlink.h (bfd_link_info): Add enable_dt_relr. - - ld/ - - * News: Mention -z pack-relative-relocs and - -z nopack-relative-relocs. - * ld.texi: Document -z pack-relative-relocs and - -z nopack-relative-relocs. - * ldelf.c (ldelf_after_parse): Disable DT_RELR if not building - PIE nor shared library. Add 3 spare dynamic tags for DT_RELR, - DT_RELRSZ and DT_RELRENT. - * ldlang.c (lang_relax_sections): Also enable relaxation if - DT_RELR is enabled. - * emulparams/elf32_x86_64.sh: Source dt-relr.sh. - * emulparams/elf_i386.sh: Likewise. - * emulparams/elf_x86_64.sh: Likewise. - * emulparams/dt-relr.sh: New file. - * scripttempl/elf.sc: Support .relr.dyn. - -2022-01-12 H.J. Lu - - elf: Pass need_layout to _bfd_elf_map_sections_to_segments - On some targets, the DT_RELR section size can be computed only after all - symbols addresses can be determined. Update ldelf_map_segments to pass - need_layout to _bfd_elf_map_sections_to_segments which will size DT_RELR - section and set need_layout to true if the DT_RELR section size is changed. - - bfd/ - - * elf-bfd.h (_bfd_elf_map_sections_to_segments): Add a bool - pointer argument. - * elf.c (_bfd_elf_map_sections_to_segments): Add a bool pointer - argument to indicate if section layout needs update. - (assign_file_positions_for_load_sections): Pass NULL to - _bfd_elf_map_sections_to_segments. - * elflink.c (_bfd_elf_strip_zero_sized_dynamic_sections): Pass - NULL to _bfd_elf_map_sections_to_segments. - - ld/ - - * ldelfgen.c (ldelf_map_segments): Pass &need_layout to - _bfd_elf_map_sections_to_segments. - -2022-01-12 H.J. Lu - - elf: Add .relr.dyn to special_sections_r - * elf.c (special_sections_r): Add .relr.dyn. - -2022-01-12 Andrew Burgess - - gdb: add 'maint set/show gnu-source-highlight enabled' command - In a later commit I want to address an issue with the Python pygments - based code styling solution. As this approach is only used when the - GNU Source Highlight library is not available, testing bugs in this - area can be annoying, as it requires GDB to be rebuilt with use of GNU - Source Highlight disabled. - - This commit adds a pair of new maintenance commands: - - maintenance set gnu-source-highlight enabled on|off - maintenance show gnu-source-highlight enabled - - these commands can be used to disable use of the GNU Source Highlight - library, allowing me, in a later commit, to easily test bugs that - would otherwise be masked by GNU Source Highlight being used. - - I made this a maintenance command, rather than a general purpose - command, as it didn't seem like this was something a general user - would need to adjust. We can always convert the maintenance command - to a general command later if needed. - - There's no test for this here, but this feature will be used in a - later commit. - -2022-01-12 Andrew Burgess - - gdb: erase items from the source_cache::m_offset_cache - The source_cache class has two member variables m_source_map, which - stores the file contents, and m_offset_cache, which stores offsets - into the file contents. - - As source files are read the contents of the file, as well as the - offset data, are stored in the cache using these two member variables. - - Whenever GDB needs either the files contents, or the offset data, - source_cache::ensure is called. This function looks for the file in - m_source_map, and if it's found then this implies the file is also in - m_offset_cache, and we're done. - - If the file is not in m_source_map then GDB calls - source_cache::get_plain_source_lines to open the file and read its - contents. ::get_plain_source_lines also calculates the offset data, - which is then inserted into m_offset_cache. - - Back in ::ensure, the file contents are added into m_source_map. And - finally, if m_source_map contains more than MAX_ENTRIES, an entry is - removed from m_source_map. - - The problem is entries are not removed from m_offset_cache at the same - time. - - This means that if a program contains enough source files, GDB will - hold at most MAX_ENTRIES cached source file contents, but can contain - offsets data for every source file. - - Now, the offsets data is going to be smaller than the cached file - contents, so maybe there's no harm here. But, when we reload the file - contents we always recalculate the offsets data. And, when we - ::get_line_charpos asking for offset data we still call ::ensure which - will ends up loading and caching the file contents. - - So, given the current code does the work of reloading the offset data - anyway, we may as well save memory by capping m_offset_cache to - MAX_ENTRIES just like we do m_source_map. - - That's what this commit does. - - There should be no user visible changes after this commit, except for - ever so slightly lower memory usage in some cases. - -2022-01-12 Andrew Burgess - - gdb: new 'maint flush source-cache' command - This commit adds a new 'maint flush source-cache' command, this - flushes the cache of source file contents. - - After flushing GDB is forced to reread source files the next time any - source lines are to be displayed. - - I've added a test for this new feature. The test is a little weird, - in that it modifies a source file after compilation, and makes use of - the cache flush so that the changes show up when listing the source - file. I'm not sure when such a situation would ever crop up in real - life, but maybe we can imagine such cases. - - In reality, this command is useful for testing the syntax highlighting - within GDB, we can adjust the syntax highlighting settings, flush the - cache, and then get the file contents re-highlighted using the new - settings. - -2022-01-12 Andrew Burgess - - gdb: rename lin-lwp to linux-nat in set/show debug - Rename 'set debug lin-lwp' to 'set debug linux-nat' and 'show debug - lin-lwp' to 'show debug linux-nat'. - - I've updated the documentation and help text to match, as well as - making it clear that the debug that is coming out relates to all - aspects of Linux native inferior support, not just the LWP aspect of - it. - - The boundary between general "native" target debug, and the lwp - specific part of that debug was always a little blurry, but the actual - debug variable inside GDB is debug_linux_nat, and the print routine - linux_nat_debug_printf, is used throughout the linux-nat.c file, not - just for lwp related debug, so the new name seems to make more sense. - -2022-01-12 Clément Chigot - - ld: add hidden and internal visibility support for XCOFF - This patch adds a primary support for hidden and internal visibility in - GNU linker for XCOFF format. - The protected visibility isn't yet supported. - - PR 22085 - - bfd/ChangeLog: - - * xcofflink.c (xcoff_dynamic_definition_p): Add hidden - and internal visibility support. - (xcoff_link_add_symbols): Likewise. - (xcoff_auto_export_p): Likewise. - (bfd_xcoff_export_symbol): Likewise. - (xcoff_link_input_bfd): Likewise. - - ld/ChangeLog: - - * testsuite/ld-vsb/main.c: Adapt for XCOFF. - * testsuite/ld-vsb/sh1.c: Likewse. - * testsuite/ld-vsb/vsb.exp: Likewise. - * testsuite/ld-vsb/visibility-1-xcoff-32.d: New test. - * testsuite/ld-vsb/visibility-1-xcoff-64.d: New test. - * testsuite/ld-vsb/visibility-2-xcoff-32.d: New test. - * testsuite/ld-vsb/visibility-2-xcoff-64.d: New test. - * testsuite/ld-vsb/xcoffvsb.dat: New test. - -2022-01-12 Clément Chigot - - ld/testsuite: prepare ld-elfvsb to support XCOFF - A following patch will add visibility support in ld for XCOFF. Thus, - ld-elfvsb is renamed ld-vsb and a suffix is added to files targeting only - ELF format. - - ld/ChangeLog: - - * testsuite/ld-elfvsb: rename as ld-vsb. - * testsuite/ld-elfvsb/hidden0.d: move to ld-vsb and rename with - suffix -elf.d. - * testsuite/ld-elfvsb/hidden1.d: Likewise. - * testsuite/ld-elfvsb/hidden2.d: Likewise. - * testsuite/ld-elfvsb/internal0.d: Likewise. - * testsuite/ld-elfvsb/internal1.d: Likewise. - * testsuite/ld-elfvsb/protected0.d: Likewise. - * testsuite/ld-elfvsb/protected1.d: Likewise. - -2022-01-12 Clément Chigot - - gas: add visibility support using GNU syntax on XCOFF - In order to ease port of GNU assembly code and especially ld testsuite, - this patch allows XCOFF to accept the usual GNU syntax for visibility. - - PR 22085 - - gas/ChangeLog: - - * config/tc-ppc.c (ppc_GNU_visibility): New function. - * testsuite/gas/ppc/aix.exp: Add new tests. - * testsuite/gas/ppc/xcoff-visibility-2-32.d: New test. - * testsuite/gas/ppc/xcoff-visibility-2-64.d: New test. - * testsuite/gas/ppc/xcoff-visibility-2.s: New test. - -2022-01-12 Clément Chigot - - gas: add visibility support for XCOFF - XCOFF assembly defines the visibility using an additional argument - on several pseudo-ops: .globl, .weak, .extern and .comm. - This implies that .globl and .weak syntax is different than the - usual GNU syntax. But we want to provide compatibility with AIX - assembler, especially because GCC is generating the visibility - using this XCOFF syntax. - - PR 22085 - - bfd/ChangeLog: - - * coffcode.h (coff_write_object_contents): Change XCOFF header - vstamp field to 2. - * coffgen.c (coff_print_symbol): Increase the size for n_type. - - gas/ChangeLog: - - * config/tc-ppc.c (ppc_xcoff_get_visibility): New function. - (ppc_globl): New function. - (ppc_weak): New function. - (ppc_comm): Add visibility field support. - (ppc_extern): Likewise. - * testsuite/gas/all/cofftag.d: Adjust to new n_type size - providing by objdump. - * testsuite/gas/ppc/test1xcoff32.d: Likewise. - * testsuite/gas/ppc/aix.exp: Add new tests. - * testsuite/gas/ppc/xcoff-visibility-1-32.d: New test. - * testsuite/gas/ppc/xcoff-visibility-1-64.d: New test. - * testsuite/gas/ppc/xcoff-visibility-1.s: New test. - - include/ChangeLog: - - * coff/internal.h (SYM_V_INTERNAL, SYM_V_HIDDEN, - SYM_V_PROTECTED, SYM_V_EXPORTED, SYM_V_MASK): New defines. - * coff/xcoff.h (struct xcoff_link_hash_entry): Add visibility - field. - - ld/ChangeLog: - - * testsuite/ld-pe/pr19803.d: Adjust to new n_type size - providing by objdump. - -2022-01-12 Hans-Peter Nilsson - - objdump, readelf: Emit "CU:" format only when wide output is requested - As pre-approved by Alan in - https://sourceware.org/pipermail/binutils/2021-September/118019.html - and I believe people have run into getting testsuite failures for - test-environments with "long" directory names, at least once more - since that time. Enough. I grepped the gas, binutils and ld - testsuites for "CU:" to catch target-specific occurrences, but I - noticed none. I chose to remove "CU:" on the objdump tests instead of - changing options to get the wide format, so as to keep the name of the - test consistent with actual options; but added it to the readelf - options for the gas test as I believe the "CU:" format is preferable. - - Tested for cris-elf and native x86_64-pc-linux-gnu. - - binutils: - * dwarf.c (display_debug_lines_decoded): Don't check the - string length of the directory, instead emit the "CU: dir/name" - format only if wide output is requested. - * testsuite/binutils-all/dw5.W, testsuite/binutils-all/objdump.WL: - Adjust accordingly. - - gas: - * testsuite/gas/elf/dwarf-5-loc0.d: Add -W to readelf options. - -2022-01-12 Alan Modra - - Set SEC_ELF_REVERSE_COPY earlier - For the sake of DT_RELR. - - bfd/ - * elflink.c (elf_link_input_bfd): Don't set SEC_ELF_REVERSE_COPY - here. Move sanity checks to reverse copying code. - ld/ - * ldlang.c (lang_add_section): Set SEC_ELF_REVERSE_COPY for - .ctors/.dtors in .init_array/.fini_array. - -2022-01-12 Tiezhu Yang - - gdb: testsuite: fix wrong comment in gdb.base/charset.c - In gdb/testsuite/gdb.base/charset.c, use "IBM1047" instead of "EBCDIC" - to fix the wrong comment. - -2022-01-12 Tiezhu Yang - - gdb: testsuite: fix failed testcases in gdb.base/charset.exp - In gdb/testsuite/gdb.base/charset.c, the last argument is greater than 127 - when call fill_run() in EBCDIC-US and IBM1047, but the type of string[] is - char, this will change the value due to sign extension. - - For example, ebcdic_us_string[7] will be -63 instead of the original 193 in - EBCDIC-US. - - Make the type of string[] as unsigned char to fix the following six failed - testcases: - - $ grep FAIL gdb/testsuite/gdb.sum - FAIL: gdb.base/charset.exp: check value of parsed character literal in EBCDIC-US - FAIL: gdb.base/charset.exp: check value of parsed string literal in EBCDIC-US - FAIL: gdb.base/charset.exp: check value of escape that doesn't exist in EBCDIC-US - FAIL: gdb.base/charset.exp: check value of parsed character literal in IBM1047 - FAIL: gdb.base/charset.exp: check value of parsed string literal in IBM1047 - FAIL: gdb.base/charset.exp: check value of escape that doesn't exist in IBM1047 - -2022-01-12 GDB Administrator - - Automatic date update in version.in - -2022-01-11 Fangrui Song - - ar: Add --thin for creating thin archives - In many ar implementations (FreeBSD, elfutils, etc), -T has the X/Open - System Interface specified semantics. Therefore -T for thin archives is - not recommended for portability. -T is deprecated without diagnostics. - - PR binutils/28759 - * ar.c (long_options): Add --thin. - (usage) Add --thin. Deprecate -T without diagnostics. - * doc/binutils.texi: Add doc. - * NEWS: Mention --thin. - * binutils/testsuite/binutils-all/ar.exp: Add tests. - -2022-01-11 Martin Storsj - - Fix multiple problems with DLL generation. - ld * pe-dll.c (make_head): Prefix the symbol name with the dll name. - (make_tail, make_one, make_singleton_name_thunk): Likewise. - (make_import_fixup_entry, make_runtime_pseudo_reloc): Likewise. - (pe_create_runtime_relocator_reference): Likewise. - (pe_dll_generate_implib): Set dll_symname_len. - (pe_process_import_defs): Likewise. - - binutils - * dlltool.c (main): If a prefix has not been provided, attempt to - use a deterministic one based upon the dll name. - -2022-01-11 Jan Beulich - - gas/doc: mention quoted symbol names - -2022-01-11 Andrew Burgess - - gdbsupport: regenerate Makefile.in - I had cause to regenerate gdbsupport/Makefile.in, and noticed some - unexpected changes in the copyright header dates. - - I suspect that this was caused by the end of year date range update - process. - - The Makefile.in contains two date ranges. The first range appears to - be the date range for the version of automake being used, that is the - range runs up to 2017 only, when automake 1.15.1 was released. - - The second date range in Makefile.in represents the date range for the - generated file, and so, now runs up to 2022. - - Anyway, this is the result of running autoreconf (using automake - 1.15.1) in the gdbsupport directory. - -2022-01-11 GDB Administrator - - Automatic date update in version.in - -2022-01-10 Clément Chigot - - XCOFF: add support for TLS relocations on hidden symbols - This patch adds support for TLS relocation targeting C_HIDEXT symbols. - In gas, TLS relocations, except R_TLSM and R_TLMSL, must keep the value - of their target symbol. - In ld, it simply ensures that internal TLS symbols are added to the - linker hash table for xcoff_reloc_type_tls. - - It also improves the tests made by both. - - bfd/ChangeLog: - - * coff-rs6000.c (xcoff_howto_table): Fix name of R_TLSML. - (xcoff_reloc_type_tls): Replace the error when h is NULL by - an assert. - (xcoff_complain_overflow_unsigned_func): Adjust comments. - * coff64-rs6000.c (xcoff64_howto_table): Fix name of R_TLSML. - * xcofflink.c (xcoff_link_add_symbols_to_hash_table): New - function. - (xcoff_link_add_symbols): Add C_HIDEXT TLS symbols to the linker - hash table. - - gas/ChangeLog: - - * config/tc-ppc.c (md_apply_fix): Enable support for TLS - relocation over internal symbols. - * testsuite/gas/ppc/aix.exp: Replace xcoff-tlms by xcoff-tls. - * testsuite/gas/ppc/xcoff-tlsm-32.d: Removed. - * testsuite/gas/ppc/xcoff-tlsm-64.d: Removed. - * testsuite/gas/ppc/xcoff-tlsm.s: Removed. - * testsuite/gas/ppc/xcoff-tls-32.d: New test. - * testsuite/gas/ppc/xcoff-tls-64.d: New test. - * testsuite/gas/ppc/xcoff-tls.s: New test. - - ld/ChangeLog: - - * testsuite/ld-powerpc/aix52.exp: Improve aix-tls-reloc test. - * testsuite/ld-powerpc/aix-tls-reloc.s: Likewise. - * testsuite/ld-powerpc/aix-tls-reloc-32.d: Removed. - * testsuite/ld-powerpc/aix-tls-reloc-64.d: Removed. - * testsuite/ld-powerpc/aix-tls-reloc-32.dd: New test. - * testsuite/ld-powerpc/aix-tls-reloc-32.dt: New test. - * testsuite/ld-powerpc/aix-tls-reloc-64.dd: New test. - * testsuite/ld-powerpc/aix-tls-reloc-64.dt: New test. - -2022-01-10 Tiezhu Yang - - gdb: add Tiezhu Yang to MAINTAINERS - -2022-01-10 Tom Tromey - - Reduce use of unfiltered output in Darwin code - The Darwin code uses unfiltered output liberally. This patch changes - this code to send some output to gdb_stdlog (in some cases via the use - of debug_prefixed_printf_cond_nofunc), or to gdb_stderr, or to simply - switch to filtered output. - - Note that I didn't switch inferior_debug to use - debug_prefixed_printf_cond_nofunc, because that would affect the - output by removing the information about the inferior. I wasn't sure - if this was important or not, so I left it in. - - v2 of this patch uses warning rather than prints to gdb_stderr, and - removes some trailing whitespace. - - I can't compile this patch, so it's "best effort". - -2022-01-10 GDB Administrator - - Automatic date update in version.in - -2022-01-09 GDB Administrator - - Automatic date update in version.in - -2022-01-08 Andrew Burgess - - gdb/hurd: handle inferiors exiting - While testing on GNU/Hurd (i386) I noticed that GDB crashes when an - inferior exits, with this error: - - inferior.c:293: internal-error: inferior* find_inferior_pid(process_stratum_target*, int): Assertion `pid != 0' failed. - - The problem appears to be in gnu_nat_target::wait. - - We always set inferior_ptid to null_ptid before calling target_wait, - this has been the case since the multi-target changes were made to GDB - in commit: - - commit 5b6d1e4fa4fc6827c7b3f0e99ff120dfa14d65d2 - Date: Fri Jan 10 20:06:08 2020 +0000 - - Multi-target support - - With follow up changes in commit: - - commit 24ed6739b699f329c2c45aedee5f8c7d2f54e493 - Date: Thu Jan 30 14:35:40 2020 +0000 - - gdb/remote: Restore support for 'S' stop reply packet - - Unfortunately, the GNU/Hurd target is still relying on the value of - inferior_ptid in the case where an inferior exits - we return the - value of inferior_ptid as the pid of the process that exited. This - was fine in the single target world, where inferior_ptid identified - the one running inferior, but this is no longer good enough. - - Instead, we should return a ptid containing the pid of the process - that exited, as obtained from the wait event, and this is what this - commit does. - - I've not run the full testsuite on GNU/Hurd as there appear to be lots - of other issues with this target that makes running the full testsuite - very painful, but I think this looks like a small easy improvement. - -2022-01-08 Tom Tromey - - Add explicit check for nullptr to target_announce_attach - Lancelot pointed out that target_announce_attach was missing an - explicit check against nullptr. This patch adds it. - -2022-01-08 Hannes Domani - - Add _sigsys info to siginfo struct - This patch adds information about _sigsys structure from newer - kernels, so that $_siginfo decoding can show information about - _sigsys, making it easier for developers to debug seccomp failures. - Requested in PR gdb/24283. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=24283 - -2022-01-08 Tiezhu Yang - - gdb: testsuite: show print array-indexes after set in arrayidx.exp - Add "show print array-indexes" testcases after set print array-indexes - to off or on. - - Without this patch: - - PASS: gdb.base/arrayidx.exp: set print array-indexes to off - PASS: gdb.base/arrayidx.exp: print array with array-indexes off - PASS: gdb.base/arrayidx.exp: set print array-indexes to on - PASS: gdb.base/arrayidx.exp: print array with array-indexes on - - With this patch: - - PASS: gdb.base/arrayidx.exp: set print array-indexes to off - PASS: gdb.base/arrayidx.exp: show print array-indexes is off - PASS: gdb.base/arrayidx.exp: print array with array-indexes off - PASS: gdb.base/arrayidx.exp: set print array-indexes to on - PASS: gdb.base/arrayidx.exp: show print array-indexes is on - PASS: gdb.base/arrayidx.exp: print array with array-indexes on - -2022-01-08 H.J. Lu - - ld: Extract _bfd_elf_link_iterate_on_relocs - DT_RELR encodes consecutive R_*_RELATIVE relocations in GOT (the global - offset table) and data sections in a compact format: - - https://groups.google.com/g/generic-abi/c/bX460iggiKg - - On some targets, R_*_RELATIVE relocations are counted and the GOT offsets - are allocated when setting the dynamic section sizes after seeing all - relocations. R_*_RELATIVE relocations are generated while relocating - sections after section layout has been finalized. - - To prepare for DT_RELR implementation on these targets, extract - _bfd_elf_link_iterate_on_relocs from _bfd_elf_link_check_relocs so - that a backend can scan relocations in elf_backend_always_size_sections - - For x86 targets, the old check_relocs is renamed to scan_relocs and a - new check_relocs is added to chek input sections and create dynamic - relocation sections so that they will be mapped to output sections. - scan_relocs is now called from elf_backend_always_size_sections. - - Since relocations are scanned after __start, __stop, .startof. and - .sizeof. symbols have been finalized on x86, __[start|stop]_SECNAME for - --gc-sections -z start-stop-gc are now zero when all SECNAME sections - been garbage collected. This is no need for elf_x86_start_stop_gc_p. - - bfd/ - - * elf-bfd.h (_bfd_elf_link_iterate_on_relocs): New. - * elf32-i386.c (elf_i386_convert_load_reloc): Don't call - elf_x86_start_stop_gc_p. - (elf_i386_check_relocs): Renamed to ... - (elf_i386_scan_relocs): This. Don't call - _bfd_elf_make_dynamic_reloc_section. - (elf_i386_always_size_sections): New. - (elf_backend_check_relocs): Removed. - (elf_backend_always_size_sections): New. - * elf64-x86-64.c (elf_x86_64_convert_load_reloc): Don't call - elf_x86_start_stop_gc_p. - (elf_x86_64_check_relocs): Renamed to ... - (elf_x86_64_scan_relocs): This. Don't call - _bfd_elf_make_dynamic_reloc_section. - (elf_x86_64_always_size_sections): New. - (elf_backend_check_relocs): Removed. - (elf_backend_always_size_sections): New. - * elflink.c (elf_link_check_or_scan_relocs): - New. Extracted from _bfd_elf_link_check_relocs. - (_bfd_elf_link_check_relocs): Call elf_link_check_or_scan_relocs. - * elfxx-x86.c (_bfd_x86_elf_check_relocs): New. - * elfxx-x86.h (X86_64_NEED_DYNAMIC_RELOC_TYPE_P): New. - (I386_NEED_DYNAMIC_RELOC_TYPE_P): Likewise. - (X86_NEED_DYNAMIC_RELOC_TYPE_P): Likewise. - (_bfd_x86_elf_check_relocs): Likewise. - (elf_backend_check_relocs): Likewise. - (elf_backend_always_size_sections): Removed. - (elf_x86_start_stop_gc_p): Likewise. - - ld/ - - * testsuite/ld-i386/pr27491-1a.d: Updated. - * testsuite/ld-x86-64/pr27491-1a.d: Likewise. - -2022-01-08 GDB Administrator - - Automatic date update in version.in - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.mi/mi-catch-load.exp - When I run the testsuite, I have: - - Running .../gdb/testsuite/gdb.mi/mi-catch-load.exp ... - DUPLICATE: gdb.mi/mi-catch-load.exp: breakpoint at main - DUPLICATE: gdb.mi/mi-catch-load.exp: mi runto main - - Fix by grouping the various phases in with_test_prefix blocks. Since - the tests now have a prefix, remove the manually written prefixes in - testnames. - - Also change some messages with the pattern "(timeout) $testname" into - "$estname (timeout)" since tools will handle this as $testname[1] (which - is what we want in this particular scenario). - - Tested on x86_64-linux. - - [1] https://sourceware.org/gdb/wiki/GDBTestcaseCookbook#Do_not_use_.22tail_parentheses.22_on_test_messages - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.threads/staticthreads.ex - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.threads/staticthreads.exp ... - DUPLICATE: gdb.threads/staticthreads.exp: couldn't compile staticthreads.c: unrecognized error - - Fix by using foreach_with_prefix instead of foreach when preparing the - test case. - - Testeed on x86_64-linux both in a setup where the test fails to prepare - and in a setup where the test fails to setup. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.mi/mi-language.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.mi/mi-language.exp ... - DUPLICATE: gdb.mi/mi-language.exp: set lang ada - - This is due to an erroneous explicit test name. This explicit test name - also happens to be useless (at least it would have been if it was - correct) since it only repeats the command, so just remove the explicit - test name and let the command be used as default test name. Also remove - explicit test name at another location in the file since it also just - repeat the command. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.mi/mi-nonstop-exit.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.mi/mi-nonstop-exit.exp ... - DUPLICATE: gdb.mi/mi-nonstop-exit.exp: breakpoint at main - DUPLICATE: gdb.mi/mi-nonstop-exit.exp: mi runto main - - This test runs the same sequence of operations twice. Refactor the code - by running both of those sequences within a foreach_with_prefix block to - ensure that the commands have unique test names. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.mi/mi-nonstop.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.mi/mi-nonstop.exp ... - DUPLICATE: gdb.mi/mi-nonstop.exp: check varobj, w1, 1 - DUPLICATE: gdb.mi/mi-nonstop.exp: stacktrace of stopped thread - - Fix by adjusting the problematic test names. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.mi/mi-nsthrexec.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.mi/mi-nsthrexec.exp ... - DUPLICATE: gdb.mi/mi-nsthrexec.exp: breakpoint at main - - Fix by adjusting the duplicated test name. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/watchpoints.exp - When running the testsuite, I have: - - Running ../gdb/testsuite/gdb.base/watchpoints.exp ... - DUPLICATE: gdb.base/watchpoints.exp: watchpoint hit, first time - - Fix by adjusting the test names where appropriate. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/nested-subp2.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/nested-subp2.exp ... - DUPLICATE: gdb.base/nested-subp2.exp: continue to the STOP marker - DUPLICATE: gdb.base/nested-subp2.exp: print c - DUPLICATE: gdb.base/nested-subp2.exp: print count - - Fix by using with_test_prefix to differentiate the test that are - performed at different points during the execution of the debuggee. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/call-signal-resume.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/call-signal-resume.exp ... - DUPLICATE: gdb.base/call-signal-resume.exp: dummy stack frame number - DUPLICATE: gdb.base/call-signal-resume.exp: set confirm off - DUPLICATE: gdb.base/call-signal-resume.exp: return - - This is due to the fact that a pattern was probably copy/pasted to - re-use the logic while not adjusting the test names to avoid the - duplication. - - Fix by removing the redundant tests ('set confirm off' only needs to be - used once) and adjusting the test names where appropriate. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/pointers.exp - When I run the testsuite, I have : - - Running .../gdb/testsuite/gdb.base/pointers.exp ... - DUPLICATE: gdb.base/pointers.exp: pointer assignment - - Fix by placing the sections with duplication in with_test_prefix blocks. - This removes the duplication and gives a better organization the file. - - Tested on x86_64-linux. - Co-Authored-By: Pedro Alves - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/unload.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/unload.exp ... - DUPLICATE: gdb.base/unload.exp: continuing to unloaded libfile - - Fix by adjusting the test name. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/define-prefix.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/define-prefix.exp ... - DUPLICATE: gdb.base/define-prefix.exp: define user command: ghi-prefix-cmd - - Fix by adjusting test names. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/funcargs.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/funcargs.exp ... - DUPLICATE: gdb.base/funcargs.exp: run to call2a - - Fix by using proc_with_prefix instead on plain proc to create logical - function blocks. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/shlib-call.exp - When I run the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/shlib-call.exp ... - DUPLICATE: gdb.base/shlib-call.exp: print g - DUPLICATE: gdb.base/shlib-call.exp: set print sevenbit-strings - DUPLICATE: gdb.base/shlib-call.exp: set print address off - DUPLICATE: gdb.base/shlib-call.exp: set width 0 - DUPLICATE: gdb.base/shlib-call.exp: continue until exit - - Fix by adjusting the test names when required, and by removing - un-necessary commands. - - While at it, do some cleanup: - - Replace an explicit GDB restart sequence with a call to clean_restart. - - Remove trailing whitespaces. - - Use $gdb_test_name in gdb_test_multiple. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/set-cfd.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/set-cwd.exp ... - DUPLICATE: gdb.base/set-cwd.exp: test_cwd_reset: continue to breakpoint: break-here - - Fix by moving the tests after the 'runto_main' within the same - with_test_prefix scope. - - While at it, I fix some indentation issues. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/exprs.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/exprs.exp ... - DUPLICATE: gdb.base/exprs.exp: \$[0-9]* = red (setup) - - Fix by using with_test_prefix where appropriate. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/readline.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/readline.exp ... - DUPLICATE: gdb.base/readline.exp: Simple operate-and-get-next - final prompt - - Fix by adjusting the prefix given to the second 'simple' call to - operate_and_get_next. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/pretty-array.exp - When I run the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/pretty-array.exp ... - DUPLICATE: gdb.base/pretty-array.exp: print nums - DUPLICATE: gdb.base/pretty-array.exp: print nums - - Fix by giving a name to the test cases. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/ui-redirect.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/ui-redirect.exp ... - DUPLICATE: gdb.base/ui-redirect.exp: redirect while already logging: set logging redirect off - - Fix by moving the first 'set logging redirect off' to the end of the - previous [with_test_prefix] test block. The statement's purpose is to - clean the on flag set in this previous block, so moving it there makes - sense and does not change the sequence of commands in the test file. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb: completion-support.exp: improve leading whitespace support - There is a expect support library in the source tree designed to help - developers test the auto-completion capabilities of GDB. - - One of the functions is test_gdb_complete_unique_re. It is used - (usually indirectly via test_gdb_complete_unique) to test that a given - input line is completed as a given output line. The test checks for two - ways to do the completion: using tab-completion, or using the - 'complete' command. To do this, calls to two dedicated functions are - performed. If we omit few details, we can consider that a call to - - test_gdb_complete_unique $input $expected - - is equivalent to the two following calls: - - test_gdb_complete_tab_unique $input $expected - test_gdb_complete_cmd_unique $input $expected - - When using the tab-completion, everything works as expected, but some - care must be taken when using the 'complete' command if the given input - has leading whitespaces. In such situation, the output of the - 'complete' command will drop the leading whitespaces. - - The current approach is that in such situation, the input and expected - outputs are right trimmed (i.e. all leading whitespaces are removed) - when performing the command completion check. - - This means that the following call: - - test_gdb_complete_unique " $input" " $expected" - - is almost equivalent to (again, omitting few details and arguments): - - test_gdb_complete_tab_unique " $input" " $expected" - test_gdb_complete_cmd_unique "$input" "$expected" - - This approach comes with a problem that we encounter when running the - tests in complete-empty.exp. When doing so, we have: - - Running .../gdb/testsuite/gdb.base/complete-empty.exp ... - DUPLICATE: gdb.base/complete-empty.exp: empty-input-line: cmd complete "" - - This is because the test file does something like: - - test_gdb_complete_unique "" "!" " " 1 - test_gdb_complete_unique " " " !" " " 1¬ - - which, if we do the substitution introduced above is equivalent to: - - test_gdb_complete_tab_unique "" "!" - test_gdb_complete_cmd_unique "" "!" - test_gdb_complete_tab_unique " " " !" - test_gdb_complete_cmd_unique "" "!" - - We see that the lines 2 and 4 are now the same, and for this reason the - testing framework complains about DUPLICATE test names. - - To fix that, this commit proposes that instead of left trimming both - input and expected outputs, only the expected output is trimmed. - - Care must be taken in the case the completion gives more possibilities - than allowed by the max-completions setting. In this case, the input - will be repeated in the output in its left trimmed version. This commit - also ensures that this is taken care of. - - With this commit, the gdb.base/complete-empty.exp still passes all its - tests but does not report the DUPLICATE anymore. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/subst.exp - When I run the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/subst.ex ... - DUPLICATE: gdb.base/subst.exp: unset substitute-path from, no rule entered yet - - Fix by adjusting the problematic test name. - - Tested on x86_64-linux. - -2022-01-07 Pedro Alves - - gdb/testsuite: Remove duplicates from gdb.base/dfp-exprs.exp - When I run the testsuite, I have: - - Running ../gdb/testsuite/gdb.base/dfp-exprs.exp ... - DUPLICATE: gdb.base/dfp-exprs.exp: p 1.2dl < 1.3df - - Replace hand-written tests checking various comparison operators between - various decimal floating point types with a loop to programmatically - generate all the combinations. This removes the need to eyeball for all - suffixes, which lead to the original duplication. - - Also add a lot more combinations, testing all comparison operators - comprehensively. The result is 262 unique tests vs 104 before this - patch. - - Tested on x86_86-linux. - - Change-Id: Id215a3d610aa8e032bf06ee160b5e3aed4a92d1e - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/ptype.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/ptype.exp ... - DUPLICATE: gdb.base/ptype.exp: ptype the_highest - DUPLICATE: gdb.base/ptype.exp: list intfoo - DUPLICATE: gdb.base/ptype.exp: list charfoo - - Fix by adjusting the offending test names. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/dfp-test.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/dfp-test.exp ... - DUPLICATE: gdb.base/dfp-test.exp: 1.23E is an invalid number - DUPLICATE: gdb.base/dfp-test.exp: 1.23E45A is an invalid number - DUPLICATE: gdb.base/dfp-test.exp: 1.23E is an invalid number - DUPLICATE: gdb.base/dfp-test.exp: 1.23E45A is an invalid number - - Fix by using proc_with_prefix where appropriate. - - Tested on x86_64-linux. - Co-Authored-By: Andrew Burgess - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/del.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/del.exp ... - DUPLICATE: gdb.base/del.exp: info break after removing break on main - - Refactor slightly this test to run the various configurations under - foreach_with_prefix so each variant is automatically prefixed, ensuring - that the forgotten custom test name cannot happen. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/solib-display.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/solib-display.exp ... - DUPLICATE: gdb.base/solib-display.exp: NO: break 25 - DUPLICATE: gdb.base/solib-display.exp: NO: continue - DUPLICATE: gdb.base/solib-display.exp: IN: break 25 - DUPLICATE: gdb.base/solib-display.exp: IN: continue - DUPLICATE: gdb.base/solib-display.exp: SEP: break 25 - DUPLICATE: gdb.base/solib-display.exp: SEP: continue - - The 'break 25' appears because the test inserts two breakpoints at the - same location. Fix this by only inserting the breakpoint once. - - Fix the 'continue' DUPLICATE by giving a phony name to the second - continue: 'continue two'. - - While at it, this commit also removes a trailing space. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/decl-before-def.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/decl-before-def.exp ... - DUPLICATE: gdb.base/decl-before-def.exp: p a - - Fix by giving explicit names to the two tests that use the same command. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/pending.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/pending.exp ... - DUPLICATE: gdb.base/pending.exp: disable other breakpoints - - Fix by adjusting the test names. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/checkpoint.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/checkpoint.exp ... - DUPLICATE: gdb.base/checkpoint.exp: verify lines 5 two - DUPLICATE: gdb.base/checkpoint.exp: restart 0 one - - This patch fixes the various erroneous incorrect test names. - - While at it, this patch also remove some trailing white spaces across - the file. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/pie-fork.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/pie-fork.exp ... - DUPLICATE: gdb.base/pie-fork.exp: test_no_detach_on_fork: continue - - Fix by giving explicit names to the 'continue' commands that cause the - duplicate message. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/realname-expand.exp - When running the testsuite, I have: - - Running .../gdb/testsuite/gdb.base/realname-expand.exp ... - DUPLICATE: gdb.base/realname-expand.exp: set basenames-may-differ on - - This is due to the fact that the test restarts GDB twice and each time - sets the basenames-may-differ setting. This patch proposes to fix this - by not restarting GDB so the setting is maintained. It just clears the - breakpoints between the two tests and updates the breakpoints number as - required. - - This patch also perform some minor refactorings to improve visibility. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/interp.exp - When running the testsuite I have: - - Running .../gdb/testsuite/gdb.base/interp.exp ... - DUPLICATE: gdb.base/interp.exp: interpreter-exec mi "-var-update *" - - This is due to the fact that multiple successive instances of - gdb_test_multiple use 'pass $cmd', but one of them forgets to reset $cmd - to a new test name. - - Fix by using 'pass $gdb_test_name', given that the gdb_test_name is set - by gdb_test_multiple. - - While fixing this, this patch refactors all occurrences of the following - pattern: - - set cmd foo - gdb_test_multiple $cmd $cmd { - -re ... { - pass $cmd - } - } - - into - - gdb_test_multiple foo "" { - -re ... { - pass $gdb_test_name - } - } - - This makes this test file coherent in its use of $gdb_test_name. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/miscexprs.exp - When running the testsuite I see: - - Running .../gdb/testsuite/gdb.base/miscexprs.exp ... - DUPLICATE: gdb.base/miscexprs.exp: print value of !ibig.i[100] - DUPLICATE: gdb.base/miscexprs.exp: print value of !ibig.i[100] - - This is due to an explicit test name repeated across multiple tests. - The actual test explicit names do not add much over the command from - wich default test names are derived. - - Fix by removing the explicit test names across the file where they do - not add value. While at doing some cleaning, also use $gdb_test_name in - the various uses of gdb_test_multiple. - - Tested on x86_64-linux. - -2022-01-07 Lancelot SIX - - gdb/testsuite: Remove duplicates from gdb.base/stack-checking.exp - When running the testsuite I have: - - Running .../gdb/testsuite/gdb.base/stack-checking.exp ... - DUPLICATE: gdb.base/stack-checking.exp: bt - DUPLICATE: gdb.base/stack-checking.exp: bt - - Fix by using with_test_prefix. - - Tested on x86_64-linux. - -2022-01-07 Philipp Tomsich - - RISC-V: update docs to reflect privileged spec v1.9 has been dropped - After commit d8af286fffa ("RISC-V: Drop the privileged spec v1.9 - support.") has removed support for privileged spec v1.9, this removes - it from the documentation. - - References: d8af286fffa ("RISC-V: Drop the privileged spec v1.9 support.") - - gas/ChangeLog: - - * configure: Regenerate. - * configure.ac: Remove reference to priv spec 1.9. - * po/fr.po: Same. - * po/ru.po: Same. - * po/uk.po: Same. - -2022-01-07 Philipp Tomsich - - RISC-V: update docs for -mpriv-spec/--with-priv-spec for 1.12 - While support for the privileged spec was added in a63375ac337 - ("RISC-V: Hypervisor ext: support Privileged Spec 1.12"), the - documentation has not been updated. Add 1.12 to the relevant - documentation. - - References: a63375ac337 ("RISC-V: Hypervisor ext: support Privileged Spec 1.12") - - gas/ChangeLog: - - * config/tc-riscv.c: Add 1.12 to the usage message. - * configure: Regenerate. - * configure.ac: Add 1.12 to the help/usage message. - * po/fr.po: Same. - * po/ru.po: Same. - * po/uk.po: Same. - -2022-01-07 Tom Tromey - - Do not use CC_HAS_LONG_LONG - ax.cc checks CC_HAS_LONG_LONG, but nothing defines this. However, - PRINTF_HAS_LONG_LONG is checked in configure. This patch removes the - former and keeps the latter. This is PR remote/14976 (filed by me in - 2012, lol). - - I'm checking this in. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=14976 - -2022-01-07 Andrew Burgess - - gdb/doc: shorten some source lines, and prevent some line breaks - Building on the previous commit, this makes use of a trailing @ to - split long @deffn lines in the guile.texi source file. This splitting - doesn't change how the document is laid out by texinfo. - - I have also wrapped keyword and argument name pairs in @w{...} to - prevent line breaks appearing between the two. I've currently only - done this for the longer @deffn lines, where a line break is - possible. This makes the @deffn lines much nicer to read in the - generated pdf. - -2022-01-07 Andrew Burgess - - gdb/doc: Remove (...) around guile procedure names in @deffn lines - Most guile procedures in the guile.texi file are defined like: - - @deffn {Scheme Procedure} name arg1 arg2 arg3 - - But there are two places where we do this: - - @deffn {Scheme Procedure} (name arg1 arg2 arg3) - - Notice the added (...). Though this does represent how a procedure - call is written in scheme, it's not the normal style throughout the - manual. I also checked the 'info guile' info page to see how they - wrote there declarations, and they use the first style too. - - The second style also has the drawback that index entries are added as - '(name', and so they are grouped in the '(' section of the index, - which is not very user friendly. - - In this commit I've changed the definitions of make-command and - make-parameter to use the first style. - - The procedure declaration lines can get pretty long with all of the - arguments, and this was true for both of the procedures I am changing - in this commit. I have made use of a trailing '@' to split the deffn - lines, and keep them under 80 characters in the texi source. This - makes no difference to how the final document looks. - - Finally, our current style for keyword arguments, appears to be: - - [#:keyword-name argument-name] - - I don't really understand the reason for this, 'info guile' just seems - to use: - - [#:keyword-name] - - which seems just as good to me. But I don't propose to change - that just now. What I do notice though, is that sometimes, texinfo - will place a line break between the keyword-name and the - argument-name, for example, the pdf of make-command is: - - make-command name [#:invoke invoke] [#:command-class - command-class] [#:completer-class completer] [#:prefix? prefix] [#:doc - doc-string] - - Notice the line break after '#:command-class' and after '#:doc', - neither of which are ideal. And so, for the two commands I am - changing in this commit, I have made use of @w{...} to prevent line - breaks between the keyword-name and the argument-name. Now the pdf - looks like this: - - make-command name [#:invoke invoke] - [#:command-class command-class] [#:completer-class completer] - [#:prefix? prefix] [#:doc doc-string] - - Which seems much better. I'll probably update the other deffn lines - at some point. - -2022-01-07 Pavel Mayorov - - Revert previous delta to debug.c. Replace with patch to reject indirect types that point to indirect types. - PR 28718 - * dwarf.c: Revert previous delta. - (debug_get_real_type): Reject indirect types that point to - indirect types. - (debug_get_type_name, debug_get_type_size, debug_write_type): - Likewise. - -2022-01-07 Nelson Chu - - RISC-V: Updated the default ISA spec to 20191213. - Update the default ISA spec from 2.2 to 20191213 will change the default - version of i from 2.0 to 2.1. Since zicsr and zifencei are separated - from i 2.1, users need to add them in the architecture string if they need - fence.i and csr instructions. Besides, we also allow old ISA spec can - recognize zicsr and zifencei, but we won't output them since they are - already included in the i extension when i's version is less than 2.1. - - bfd/ - * elfxx-riscv.c (riscv_parse_add_subset): Allow old ISA spec can - recognize zicsr and zifencei. - gas/ - * config/tc-riscv.c (DEFAULT_RISCV_ISA_SPEC): Updated to 20191213. - * testsuite/gas/riscv/csr-version-1p10.d: Added zicsr to -march since - the default version of i is 2.1. - * testsuite/gas/riscv/csr-version-1p11.d: Likewise. - * testsuite/gas/riscv/csr-version-1p12.d: Likewise. - * testsuite/gas/riscv/csr-version-1p9p1.d: Likewise. - * testsuite/gas/riscv/option-arch-03.d: Updated i's version to 2.1. - * testsuite/gas/riscv/option-arch-03.s: Likewise. - ld/ - * testsuite/ld-riscv-elf/call-relax.d: Added zicsr to -march since - the default version of i is 2.1. - * testsuite/ld-riscv-elf/attr-merge-arch-01.d: Updated i's version to 2.1. - * testsuite/ld-riscv-elf/attr-merge-arch-01a.s: Likewise. - * testsuite/ld-riscv-elf/attr-merge-arch-01b.: Likewise. - * testsuite/ld-riscv-elf/attr-merge-arch-02.d: Likewise. - * testsuite/ld-riscv-elf/attr-merge-arch-02a.s: Likewise. - * testsuite/ld-riscv-elf/attr-merge-arch-02b.s: Likewise. - * testsuite/ld-riscv-elf/attr-merge-arch-03.d: Likewise. - * testsuite/ld-riscv-elf/attr-merge-arch-03a.s: Likewise. - * testsuite/ld-riscv-elf/attr-merge-arch-03b.s: Likewise. - * testsuite/ld-riscv-elf/attr-merge-arch-failed-02.d: Added zifencei - into Tag_RISCV_arch since it is added implied when i's version is - larger than 2.1. - -2022-01-07 Alan Modra - - Move elf_backend_always_size_sections earlier - * elflink.c (bfd_elf_size_dynamic_sections): Move plt/got init - earlier and call elf_backend_always_size_sections at the start - of this function. - -2022-01-07 GDB Administrator - - Automatic date update in version.in - -2022-01-06 H.J. Lu - - ldelfgen.c: Add missing newlines when calling einfo - * ldelfgen.c (ldelf_map_segments): Add the missing newline to - einfo. - -2022-01-06 Nick Clifton - - Fix a stack exhaustion bug parsing malicious STABS format debug information. - PR 28718 - * debug.c (debug_write_type): Allow for malicious recursion via - indirect debug types. - -2022-01-06 Richard Sandiford - - aarch64: Add support for new SME instructions - This patch adds support for three new SME instructions: ADDSPL, - ADDSVL and RDSVL. They behave like ADDPL, ADDVL and RDVL, but read - the streaming vector length instead of the current vector length. - - opcodes/ - * aarch64-tbl.h (aarch64_opcode_table): Add ADDSPL, ADDSVL and RDSVL. - * aarch64-dis-2.c: Regenerate. - - gas/ - * testsuite/gas/aarch64/sme.s, testsuite/gas/aarch64/sme.d: Add tests - for ADDSPL, ADDSVL and RDSVL. - -2022-01-06 Tom Tromey - - Use target_announce_detach in more targets - target_announce_detach was added in commit 0f48b757 ("Factor out - "Detaching from program" message printing"). There, Pedro wrote: - - (For now, I left the couple targets that print this a bit differently - alone. Maybe this could be further pulled out into infcmd.c. If we - did that, and those targets want to continue printing differently, - this new function could be converted to a target method.) - - It seems to me that the differences aren't very big, and in some cases - other targets handled the output a bit more nicely. In particular, - some targets will print a different message when exec_file==NULL, - rather than printing the same output with an empty string as - exec_file. - - This patch incorporates the nicer output into target_announce_detach, - then changes the remaining ports to use this function. - -2022-01-06 Tom Tromey - - Introduce target_announce_attach - This introduces target_announce_attach, by analog with - target_announce_detach. Then it converts existing targets to use - this, rather than emitting their own output by hand. - -2022-01-06 Andrew Burgess - - gdb: make use add_setshow_prefix_cmd in gnu-nat.c - In gnu-nat.c we currently implement some set/show prefix commands - "manually", that is, we call add_prefix_cmd, and assign a set and show - function to each prefix command. - - These set/show functions print an error indicating that the user - didn't type a complete command. - - If we instead switch to using add_setshow_prefix_cmd then we can - delete the set/show functions, GDB provides some default functions, - which give a nice help style summary that lists all of the available - sub-commands, along with a one line summary of what each does. - - Though this clearly changes the existing behaviour, I think this - change is acceptable as the new behaviour is more inline with other - set/show prefix commands, and the new behaviour is more informative. - - This change will conflict with Tom's change here: - - https://sourceware.org/pipermail/gdb-patches/2022-January/184724.html - - Where Tom changes the set/show functions that I delete. My suggestion - is that the set/show functions still be deleted even after Tom's - patch (or instead of Tom's patch). - - For testing I've build GDB on GNU/Hurd, and manually tested these - functions. I did a grep over the testsuite, and don't believe the - existing error messages are being checked for in any tests. - -2022-01-06 Tom Tromey - - Use warning in windows-nat error messages - A warning in windows-nat.c can be converted to use the warning - function. As a side effect, this arranges for the output to be sent - to gdb_stderr. - -2022-01-06 Tom Tromey - - Clean up some dead code in windows-tdep.c - windows-tdep.c checks the result of xmalloc, which isn't necessary. I - initially removed this dead check, but then went a bit further and - modified the code so that some "goto"s and explicit memory management - could be removed. Then, I added a couple of missing bounds checks. - - I believe this also fixes a possible bug with a missing 0-termination - of a string. I am not certain, but that is why I think the existing - code allocates a buffer that is 1 byte too long -- but then it fails - to set this byte to 0. - -2022-01-06 Tom Tromey - - Avoid crash in language_info - language_info calls: - - show_language_command (NULL, 1, NULL, NULL); - - ... "knowing" that show_language_command does not use its ui_file - parameter. However, this was changed in commit 7514a661 - ("Consistently Use ui_file parameter to show callbacks"). - - This patch changes language_info to pass a ui_file. - - It took a while to write the test -- this function is only called when - 'verbose' is on and when switching the "expected" language in auto - mode. - -2022-01-06 Tom Tromey - - Fix some failures in langs.exp - langs.exp currently has some fails for me because the stack trace - includes full paths to the source files. - - FAIL: gdb.base/langs.exp: up to foo in langs.exp - FAIL: gdb.base/langs.exp: up to cppsub_ in langs.exp - FAIL: gdb.base/langs.exp: up to fsub in langs.exp - - This fixes the failures by making the filename regexps a bit more lax. - -2022-01-06 Jan Beulich - - x86: drop NoAVX insn attribute - To avoid issues like that addressed by 6e3e5c9e4181 ("x86: extend SSE - check to PCLMULQDQ, AES, and GFNI insns"), base the check on opcode - attributes and operand types. - - x86: drop NoAVX from POPCNT - With the introduction of CpuPOPCNT the NoAVX attribute has become - meaningless for POPCNT. - - x86: drop some "comm" template parameters - As already indicated in a remark when introducing these templates, the - "commutative" attribute is ignored for legacy encoding templates. Hence - it is possible to shorten a number of templates by specifying C directly - rather than through a template parameter. I think this helps readability - a bit. - - x86: templatize FMA insn templates - The operand ordering portion of the mnemonics repeats, causing a flurry - of almost identical templates. Abstract this out. - - x86-64: restrict PC32 -> PLT32 conversion - Neither non-64-bit code nor uses with a non-zero offset from a symbol - should be converted to PLT32, as an eventual PLT entry would not express - what was requested. - -2022-01-06 Lancelot SIX - - gdb: Fix copyright year in gdb/testsuite/gdb.base/inferior-clone.exp - I just realized that I forgot to update the year before pushing the - patch that created this file. Since it landed after the global - copyright year update have been done, this file’s copyright year is - updated. - - This patch fixes that. - - Change-Id: I280f7d86e02d38425f7afdcf19a1c3500d51c23f - -2022-01-06 Mike Frysinger - - sim: ppc: migrate to standard uintXX_t types - Drop the sim-specific unsignedXX types and move to the standard uintXX_t - types that C11 provides. - - sim: common: migrate to standard uintXX_t types - Drop the sim-specific unsignedXX types and move to the standard uintXX_t - types that C11 provides. - - sim: igen: migrate to standard uintXX_t types - Move off the custom local 64-bit types and to the standard uintXX_t - types that C11 provides. - - sim: mips: migrate to standard uintXX_t types - Move off the sim-specific unsignedXX types and to the standard uintXX_t - types that C11 provides. - - sim: cris: migrate to standard uintXX_t types - Move off the sim-specific unsignedXX types and to the standard uintXX_t - types that C11 provides. - - sim: iq2000: migrate to standard uintXX_t types - Move off the sim-specific unsignedXX types and to the standard uintXX_t - types that C11 provides. - - sim: synacor: migrate to standard uintXX_t types - Move off the sim-specific unsignedXX types and to the standard uintXX_t - types that C11 provides. - - sim: msp430: migrate to standard uintXX_t types - Move off the sim-specific unsignedXX types and to the standard uintXX_t - types that C11 provides. - - sim: riscv: migrate to standard uintXX_t types - Move off the sim-specific unsignedXX types and to the standard uintXX_t - types that C11 provides. - - sim: bfin: migrate to standard uintXX_t types - Move off the sim-specific unsignedXX types and to the standard uintXX_t - types that C11 provides. - - sim: testsuite: migrate to standard uintXX_t types - This old code setup its own uintXX types, but since we require C11 - now, we can assume the standard uintXX_t types exist and use them. - - sim: erc32: migrate to standard uintXX_t types - This old port setup its own uintXX types, but since we require C11 - now, we can assume the standard uintXX_t types exist and use them. - - sim: mn10300: migrate to standard uintXX_t types - This old port setup its own uintXX types, but since we require C11 - now, we can assume the standard uintXX_t types exist and use them. - - sim: v850: migrate to standard uintXX_t types - This old port setup its own uintXX types, but since we require C11 - now, we can assume the standard uintXX_t types exist and use them. - -2022-01-06 Mike Frysinger - - sim: m68hc11: migrate to standard uintXX_t types - This old port setup its own uintXX types, but since we require C11 - now, we can assume the standard uintXX_t types exist and use them. - - Also migrate off the sim-specific unsignedXX types. - -2022-01-06 Mike Frysinger - - sim: d10v: migrate to standard uintXX_t types - This old port setup its own uintXX types, but since we require C11 - now, we can assume the standard uintXX_t types exist and use them. - - Also migrate off the sim-specific unsignedXX types. - -2022-01-06 Mike Frysinger - - sim: cr16: migrate to standard uintXX_t types - This old port setup its own uintXX types, but since we require C11 - now, we can assume the standard uintXX_t types exist and use them. - - Also migrate off the sim-specific unsignedXX types. - -2022-01-06 GDB Administrator - - Automatic date update in version.in - -2022-01-05 H.J. Lu - - x86: Add elf_x86_allocate_local_got_info - Add elf_x86_allocate_local_got_info to allocate x86 GOT info for local - symbols. - - * elf32-i386.c (elf_i386_check_relocs): Call - elf_x86_allocate_local_got_info. - * elf64-x86-64.c (elf_x86_64_check_relocs): Likewise. - * elfxx-x86.h (elf_x86_allocate_local_got_info): New. - -2022-01-05 Vladimir Mezentsev - - opcodes: Make i386-dis.c thread-safe - Improve thread safety in print_insn_i386_att, print_insn_i386_intel and - print_insn_i386 by removing the use of static variables. - - Tested on x86_64-pc-linux-gnu. - - 2022-01-04 Vladimir Mezentsev - - * i386-dis.c: Make print_insn_i386_att, print_insn_i386_intel - and print_insn_i386 thread-safe - -2022-01-05 H.J. Lu - - doc: Replace =frame-interp with =frames-interp - The actual objdump and readelf option name is =frames-interp, not - =frames-interp. - - PR binutils/28747 - * doc/debug.options.texi: Replace =frame-interp with - =frames-interp. - -2022-01-05 Tom Tromey - - Change riscv_return_value to use RETURN_VALUE_ABI_PRESERVES_ADDRESS - Internally, AdaCore has a test that is equivalent to (really a direct - translation of) gdb.base/gnu_vector.exp. On 32-bit RISC-V, the - "return" part of this test fails. - - Joel tracked this down to riscv_return_value returning - RETURN_VALUE_ABI_RETURNS_ADDRESS. Using - RETURN_VALUE_ABI_PRESERVES_ADDRESS is more correct here, and fixes the - bug. - - I tested this for both 32- and 64-bit RISC-V using the AdaCore - internal test suite, and Andrew Burgess tested it using - gnu_vector.exp. - -2022-01-05 Tom Tromey - - Filtered output cleanup in expression dumping - Most of the expression-dumping code uses filtered output, but a few - functions did not. This patch cleans up these instance. - - Note that this won't cause any behavior change, because the only calls - to dump_prefix_expression pass in gdb_stdlog. However, in the long - run it's easier to audit the code if the number of uses of _unfiltered - is reduced. - -2022-01-05 Tom Tromey - - Use filtered output in terminal_info implementations - This changes one terminal_info implementation, and - default_terminal_info, to use filtered output. Other implementations - of this method already use filtered output. - - I can't compile go32-nat.c, so this is a 'best effort' patch. - -2022-01-05 Tom Tromey - - Use filtered output in gnu-nat.c commands - gnu-nat.c has a number of ordinary commands that should use filtered - output. In a few cases, I changed the output to use gdb_stderr as - well. I can't compile this file, so this patch is split out as a - "best effort". - - Use filtered output in *-tdep commands - Various targets introduce their own commands, which then use - unfiltered output. It's better to use filtered output by default, so - this patch fixes the instances I found. - - Use filtered output in btrace-related commands - This changes btrace.c and record-btrace.c to use filtered output in - the commands implemented there. - - Use filtered output in some dumping commands - There are several commands that may optionally send their output to a - file -- they take an optional filename argument and open a file. This - patch changes these commands to use filtered output. The rationale - here is that, when printing to gdb_stdout, filtering is appropriate -- - it is, and should be, the default for all commands. And, when writing - to a file, paging will not happen anyway (it only happens when the - stream==gdb_stdout), so using the _filtered form will not change - anything. - - Use filtered output in kill command - This changes the kill command to use filtered output. I split this - one into its own patch because, out of an abundance of caution, I - changed the function to call bfd_cache_close_all a bit earlier, in - case pagination caused an exception. - -2022-01-05 Tom Tromey - - Use filtered output in ordinary commands - Many otherwise ordinary commands choose to use unfiltered output - rather than filtered. I don't think there's any reason for this, so - this changes many such commands to use filtered output instead. - - Note that complete_command is not touched due to a comment there - explaining why unfiltered output is believed to be used. - -2022-01-05 Tom Tromey - - Use filtered output in language_info - Change language_info to use filtered output. This is ok because the - sole caller uses filtered output elsewhere, and because this function - calls show_language_command, which also uses filtered output. - - Use filtered output in files_info implementations - This changes the implementations of the target files_info method to - use filtered output. This makes sense because the sole caller of this - method is an ordinary command (info_program_command). This patch - changes this command to use filtered output as well. - - Use filtered output in target-descriptions.c - target-descriptions.c uses unfiltered output. However, if you happen - to invoke this command interactively, it's probably better for it to - use filtering. For non-interactive use, this doesn't matter. - - Use filtered output for gdbarch dump - This changes gdbarch dumping to use filtered output. This seems a bit - better to me, both on the principle that this is an ordinary command, - and because the output can be voluminous, so it may be nice to stop in - the middle. - -2022-01-05 Tom Tromey - - Implement putstr and putstrn in ui_file - In my tour of the ui_file subsystem, I found that fputstr and fputstrn - can be simplified. The _filtered forms are never used (and IMO - unlikely to ever be used) and so can be removed. And, the interface - can be simplified by removing a callback function and moving the - implementation directly to ui_file. - - A new self-test is included. Previously, I think nothing was testing - this code. - - Regression tested on x86-64 Fedora 34. - -2022-01-05 Tom Tromey - - Change how versioned symbols are recorded - A change to BFD caused a gdb regression when using the Ada "catch - exception" feature. The bug is visible when a shared library throws - an exception that is caught in the main executable. - - This was discussed here: - - https://sourceware.org/pipermail/binutils/2021-July/117538.html - - This patch implements Alan's proposed fix, namely to use VERSYM_HIDDEN - rather than the name when deciding to install a version-less symbol. - - The internal test case is identical to the catch_ex_std.exp that is - in-tree, so I haven't added a new test. I could not make that one - fail on x86-64 Linux, though. It's possible that maybe I'd have to - update the system linker first, but I didn't want to try that. - - Regression tested on x86-64 Fedora 32. - -2022-01-05 Hannes Domani - - Fix inferior_thread attribute in new_thread event - Commit 72ee03ff58 fixed a use-after-move bug in add_thread_object, but - it changed the inferior_thread attribute to contain the inferior instead - of the actual thread. - This now uses the thread_obj in its new location instead. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28429 - -2022-01-05 Tom Tromey - - Simplify execute_control_commands_to_string - execute_control_commands_to_string can be rewritten in terms of - execute_fn_to_string, which consolidates some knowledge about which - streams to redirect. - - Regression tested on x86-64 Fedora 34. - -2022-01-05 Tom Tromey - - Do not print anything when self-backtrace unavailable - Right now, gdb's self-backtrace feature will still print something - when a backtrace is unavailable: - - sig_write (_("----- Backtrace -----\n")); - [...] - sig_write (_("Backtrace unavailable\n")); - sig_write ("---------------------\n"); - - However, if GDB_PRINT_INTERNAL_BACKTRACE is undefined, it seems better - to me to print nothing at all. - - This patch implements this change. It also makes a couple of other - small changes in this same module: it adds a header guard to - bt-utils.h, and it protects the definitions of - gdb_internal_backtrace_1 with a check of GDB_PRINT_INTERNAL_BACKTRACE. - -2022-01-05 Tom Tromey - - Fix pager regression - The patch to fix paging with redirection caused a regression in the - internal AdaCore test suite. The problem occurs when running an MI - command from the CLI using interpreter-exec, when paging is enabled. - This scenario isn't covered by the current test suite, so this patch - includes a new test. - - The problem is that, in this situation, MI does: - - fputs_unfiltered (strcmp (context->command, "target-select") == 0 - ? "^connected" : "^done", mi->raw_stdout); - - Here raw_stdout is a stdio_file wrapping stdout, so the pager thinks - that it is ok to buffer the output. However, in this setup, it isn't - ok, and flushing the wrap buffer doesn't really work properly. Also, - MI next does: - - mi_out_put (uiout, mi->raw_stdout); - - ... but this uses ui_file::write, which also doesn't flush the wrap - buffer. - - I think all this will be fixed by the pager rewrite series I'm working - on. However, in the meantime, adding the old gdb_stdout check back to - the pager fixes this problem. - - Regression tested on x86-64 Fedora 34. - -2022-01-05 H.J. Lu - - elf: Set p_align to the minimum page size if possible - Currently, on 32-bit and 64-bit ARM, it seems that ld generates p_align - values of 0x10000 even if no section alignment is greater than 0x1000. - The issue is more general and probably affects other targets with multiple - page sizes. - - While file layout absolutely must take 64K page size into account, that - does not have to be reflected in the p_align value. If running on a 64K - kernel, the file will be loaded at a 64K page boundary by necessity. On - a 4K kernel, 64K alignment is not needed. - - The glibc loader has been fixed to honor p_align: - - https://sourceware.org/bugzilla/show_bug.cgi?id=28676 - - similar to kernel: - - commit ce81bb256a224259ab686742a6284930cbe4f1fa - Author: Chris Kennelly - Date: Thu Oct 15 20:12:32 2020 -0700 - - fs/binfmt_elf: use PT_LOAD p_align values for suitable start address - - This means that on 4K kernels, we will start to do extra work for 64K - p_align, but this pointless for pretty much all binaries (whose section - alignment rarely exceeds 16). - - The minimum page size is used, instead of the maximum section alignment - due to this glibc bug: - - https://sourceware.org/bugzilla/show_bug.cgi?id=28688 - - It has been fixed in glibc 2.35. But linker output must work on existing - glibc binaries. - - 1. Set p_align to the minimum page size while laying out segments aligning - to the maximum page size or section alignment. The run-time loader can - align segments to the minimum page size or above, depending on system page - size. - 2. If -z max-page-size=NNN is used, p_align will be set to the maximum - page size or the largest section alignment. - 3. If a section requires alignment higher than the minimum page size, - don't set p_align to the minimum page size. - 4. If a section requires alignment higher than the maximum page size, - set p_align to the section alignment. - 5. For objcopy, when the minimum page size != the maximum page size, - p_align may be set to the minimum page size while segments are aligned - to the maximum page size. In this case, the input p_align will be - ignored and the maximum page size will be used to align the ouput - segments. - 6. Update linker to disallow the common page size > the maximum page size. - 7. Update linker to avoid the common page size > the maximum page size. - 8. Adjust pru_irq_map-1.d to expect p_align == sh_addralign: - - Section Headers: - [Nr] Name Type Addr Off Size ES Flg Lk Inf Al - [ 0] NULL 00000000 000000 000000 00 0 0 0 - [ 1] .text PROGBITS 20000000 00007c 000004 00 AX 0 0 4 - ... - Program Headers: - Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align - LOAD 0x000074 0x00000000 0x00000000 0x00008 0x00008 RW 0x1 - LOAD 0x00007c 0x20000000 0x20000000 0x00004 0x00004 R E 0x4 - - vs. - - Section Headers: - [Nr] Name Type Addr Off Size ES Flg Lk Inf Al - [ 0] NULL 00000000 000000 000000 00 0 0 0 - [ 1] .text PROGBITS 20000000 00007c 000004 00 AX 0 0 4 - ... - Program Headers: - Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align - LOAD 0x000074 0x00000000 0x00000000 0x00008 0x00008 RW 0x1 - LOAD 0x00007c 0x20000000 0x20000000 0x00004 0x00004 R E 0x1 - - To enable this linker optimization, the backend should define ELF_P_ALIGN - to ELF_MINPAGESIZE. - - bfd/ - - PR ld/28689 - PR ld/28695 - * elf-bfd.h (elf_backend_data): Add p_align. - * elf.c (assign_file_positions_for_load_sections): Set p_align - to the default p_align value while laying out segments aligning - to maximum page size or section alignment. - (elf_is_p_align_valid): New function. - (copy_elf_program_header): Call elf_is_p_align_valid to determine - if p_align is valid. - * elfxx-target.h (ELF_P_ALIGN): New. Default to 0. - (elfNN_bed): Add ELF_P_ALIGN. - * elfxx-x86.h (ELF_P_ALIGN): New. Set to ELF_MINPAGESIZE. - - include/ - - PR ld/28689 - PR ld/28695 - * bfdlink.h (bfd_link_info): Add maxpagesize_is_set. - - ld/ - - PR ld/28689 - PR ld/28695 - * emultempl/elf.em (gld${EMULATION_NAME}_handle_option): Set - link_info.maxpagesize_is_set for -z max-page-size=NNN. - * ldelf.c (ldelf_after_parse): Disallow link_info.commonpagesize - > link_info.maxpagesize. - * testsuite/ld-elf/elf.exp: Pass -z max-page-size=0x4000 to - linker to build mbind2a and mbind2b. - * testsuite/ld-elf/header.d: Add -z common-page-size=0x100. - * testsuite/ld-elf/linux-x86.exp: Add PR ld/28689 tests. - * testsuite/ld-elf/p_align-1.c: New file. - * testsuite/ld-elf/page-size-1.d: New test. - * testsuite/ld-elf/pr26936.d: Add -z common-page-size=0x1000. - * testsuite/ld-elf/seg.d: Likewise. - * testsuite/ld-scripts/rgn-at5.d: Likewise. - * testsuite/ld-pru/pru_irq_map-1.d: Append 1 to name. Adjust - expected PT_LOAD segment alignment. - * testsuite/ld-pru/pru_irq_map-2.d: Append 2 to name. - * testsuite/ld-scripts/pr23571.d: Add -z max-page-size=0x1000. - -2022-01-05 Alan Modra - - Adjust quoted-sym-names test - Some targets restrict symbol addresses in .text to instruction - boundaries. - - * testsuite/gas/all/quoted-sym-names.s: Define syms in .data. - * testsuite/gas/all/quoted-sym-names.d: Adjust to suit. - -2022-01-05 Alan Modra - - infinite recursion detected in gold testcase - gold/testsuite/icf_test.cc:32:5: error: infinite recursion detected [-Werror=infinite-recursion] - 32 | int kept_func() - | ^~~~~~~~~ - - * testsuite/icf_test.cc: Avoid infinite recursion error. - -2022-01-05 GDB Administrator - - Automatic date update in version.in - -2022-01-04 H.J. Lu - - ld/x86: Update -z report-relative-reloc - Use 0x%v, instead of bfd_sprintf_vma, to report relative relocations. - Change linker relative relocations report from - - tmpdir/dump: R_X86_64_IRELATIVE (offset: 0x0000000000002000, info: 0x0000000000000025, addend: 0x0000000000001007) against 'ifunc' for section '.data.rel.ro.local' in tmpdir/report-reloc-1.o - - to - - tmpdir/dump: R_X86_64_IRELATIVE (offset: 0x2000, info: 0x25, addend: 0x1007) against 'ifunc' for section '.data.rel.ro.local' in tmpdir/report-reloc-1.o - - bfd/ - - * elfxx-x86.c (_bfd_x86_elf_link_report_relative_reloc): Use - 0x%v instead of bfd_sprintf_vma. - - ld/ - - * testsuite/ld-i386/report-reloc-1.l: Updated. - * testsuite/ld-x86-64/report-reloc-1.l: Likewise. - -2022-01-04 H.J. Lu - - ld: Improve thin archive member error message - Improve thin archive member error message with: - - ld: libbar.a(bar.o): error opening thin archive member: No such file or directory - - instead of - - ld: libbar.a: error adding symbols: No such file or directory - - PR ld/28722 - * archive.c (_bfd_get_elt_at_filepos): Add a pointer argument - for struct bfd_link_info. Call linker callback when failing to - open thin archive member. - (_bfd_generic_get_elt_at_index): Pass NULL to - _bfd_get_elt_at_filepos. - (bfd_generic_openr_next_archived_file): Likewise. - * coff-alpha.c (alpha_ecoff_get_elt_at_filepos): Add a pointer - argument for struct bfd_link_info and pass it to - _bfd_get_elt_at_filepos. - (alpha_ecoff_openr_next_archived_file): Pass NULL to - _bfd_get_elt_at_filepos. - (alpha_ecoff_get_elt_at_index): Likewise. - * coff-rs6000.c (_bfd_xcoff_openr_next_archived_file): Likewise. - * ecoff.c (ecoff_link_add_archive_symbols): Pass info to - backend->get_elt_at_filepos. - * elflink.c (elf_link_is_defined_archive_symbol): info to - _bfd_get_elt_at_filepos. - * libbfd-in.h (_bfd_get_elt_at_filepos): Add a pointer argument - for struct bfd_link_info. - * libbfd.h: Regenerate. - * libecoff.h (ecoff_backend_data): Add a pointer argument for - struct bfd_link_info to get_elt_at_filepos. - * linker.c (_bfd_generic_link_add_archive_symbols): Pass info to - _bfd_get_elt_at_filepos. - -2022-01-04 Lancelot SIX - - gdb/testsuite: fix inferior-clone.exp for native-extended-gdbserver - 003aae076207dbf32f98ba846158fc32669ef85f (gdb: Copy inferior properties - in clone-inferior) introduced a testcase that fails when testing with - the native-extended-gdbserver board: - - Running ../gdb/testsuite/gdb.base/inferior-clone.exp ... - FAIL: gdb.base/inferior-clone.exp: inferior 2: clone-inferior - FAIL: gdb.base/inferior-clone.exp: inferior 3: clone-inferior - - The error is as follows: - - clone-inferior - [New inferior 2] - Added inferior 2 on connection 1 (extended-remote localhost:2346) - (gdb) FAIL: gdb.base/inferior-clone.exp: inferior 2: clone-inferior - - This fails because the testcase only expect the 'Added inferior 2' part - of the message. The 'on connection 1 [...]' part is unexpected. - - Fix by adjusting the testcase to a account for the possible trailing - part of the message. - - Tested on x86_64-linux with native-extende-gdbserver and unix boards. - - Change-Id: Ie3d6f04c9ffe9cab1fbda8ddf4935ee09b858c7a - -2022-01-04 Nick Clifton - - Add ATTRIBUTE_UNUSED to load_build_id_debug_file()'s main_filename parameter. - -2022-01-04 Andrew Burgess - - gdb: don't pass nullptr to sigwait - I tried building GDB on GNU/Hurd, and ran into this warning: - - gdbsupport/scoped_ignore_signal.h:78:16: error: null argument where non-null required (argument 2) [-Werror=nonnull] - - This is because in this commit: - - commit 99624310dd82542c389c89c2e55d8cae36bb74e1 - Date: Sun Jun 27 15:13:14 2021 -0400 - - gdb: fall back on sigpending + sigwait if sigtimedwait is not available - - A call to sigwait was introduced that passes nullptr as the second - argument, this call is only reached if sigtimedwait is not supported. - - The original patch was written for macOS, I assume on that target - passing nullptr as the second argument is fine. - - On my GNU/Linux box, the man-page for sigwait doesn't mention that - nullptr is allowed for the second argument, so my assumption would be - that nullptr is not OK, and, if I change the '#ifdef - HAVE_SIGTIMEDWAIT' introduced by the above patch to '#if 0', and - rebuild on GNU/Linux, I see the same warning that I see on GNU/Hurd. - - I propose that we stop passing nullptr as the second argument to - sigwait, and instead pass a valid int pointer. The value returned in - the int can then be used in an assert. - - For testing, I (locally) made the change to the #ifdef I mentioned - above, compiled GDB, and ran the usual tests, this meant I was using - sigwait instead on sigtimedwait on GNU/Linux, I saw no regressions. - -2022-01-04 Nick Clifton - - Remove a spurious debugging message. - PR 28716 - * dwarf.c (load_build_id_debug_file): Remove spurious printf. - -2022-01-04 Tom de Vries - - [gdb/build] Fix build breaker in gdb/cli/cli-logging.c - Fix build breaker in gdb/cli/cli-logging.c: - ... - gdb/cli/cli-logging.c: In function \ - ‘void show_logging_enabled(ui_file*, int, cmd_list_element*, const char*)’: - gdb/gdbsupport/gdb_locale.h:28:28: error: cannot convert ‘char*’ to ‘ui_file*’ - 28 | # define _(String) gettext (String) - | ~~~~~~~~^~~~~~~~ - | | - | char* - gdb/cli/cli-logging.c:202:25: note: in expansion of macro ‘_’ - 202 | fprintf_unfiltered (_("on: Logging is enabled.\n")); - | ^ - ... - - Build and tested on x86_64-linux. - - Fixes: 45aec4e5ed8 ("[gdb/cli] Improve show logging output") - -2022-01-04 Jan Beulich - - x86/Intel: correct VFPCLASSP{S,D} handling when displacement is present - fits_in_disp8() can be called before ambiguous operands get resolved - or rejected (in process_suffix()), which requires that i.memshift be - non-negative to avoid an internal error. This case wasn't covered by - 6c0946d0d28d ("x86: correct VFPCLASSP{S,D} operand size handling"). - -2022-01-04 Jan Beulich - - gas: rework handling of backslashes in quoted symbol names - Strange effects can result from the present handling, e.g.: - - .if 1 - "backslash\\": - .endif - - yields first (correctly) "missing closing `"'" but then also "invalid - character '\' in mnemonic" and further "end of file inside conditional". - Symbols names ending in \ are in principle not expressable with that - scheme. - - Instead of recording whether a backslash was seen, inspect the - subsequent character right away. Only accept \\ (meaning a single - backslash in the resulting symbol name) and \" (meaning an embedded - double quote in the resulting symbol name) for now, warning about any - other combination. - - While perhaps not necessary immediately, also permit concatenated - strings to form a symbol name. This may become useful if going forward - we would want to support \ or \x sequences, where closing - and re-opening quotes can be useful to delimit such sequences. - - The ELF "Multibyte symbol names" test gets switched away from using - .set, as that would now also mean excluding nios2 and pru. By using - .equiv instead, even the existing #notarget can be dropped. (For h8300 - the .section directive additionally needs attributes specified, to avoid - a target specific warning.) - -2022-01-04 GDB Administrator - - Automatic date update in version.in - -2022-01-03 Tom de Vries - - [gdb/cli] Improve show logging output - Before commit 3b6acaee895 "Update more calls to add_prefix_cmd" we had the - following output for "show logging": - ... - $ gdb -q -batch -ex "set trace-commands on" \ - -ex "set logging off" \ - -ex "show logging" \ - -ex "set logging on" \ - -ex "show logging" - +set logging off - +show logging - Future logs will be written to gdb.txt. - Logs will be appended to the log file. - Output will be logged and displayed. - Debug output will be logged and displayed. - +set logging on - +show logging - Currently logging to "gdb.txt". - Logs will be appended to the log file. - Output will be logged and displayed. - Debug output will be logged and displayed. - ... - - After that commit we have instead: - ... - +set logging off - +show logging - debugredirect: The logging output mode is off. - file: The current logfile is "gdb.txt". - overwrite: Whether logging overwrites or appends to the log file is off. - redirect: The logging output mode is off. - +set logging on - +show logging - debugredirect: The logging output mode is off. - file: The current logfile is "gdb.txt". - overwrite: Whether logging overwrites or appends to the log file is off. - redirect: The logging output mode is off. - ... - which gives less clear output for some subcommands. - - OTOH, it's explicit about whether boolean values are on or off. - - The new text seems to have been chosen to match the set/show help texts: - ... - (gdb) help show logging - Show logging options. - - List of show logging subcommands: - - show logging debugredirect -- Show the logging debug output mode. - show logging file -- Show the current logfile. - show logging overwrite -- \ - Show whether logging overwrites or appends to the log file. - show logging redirect -- Show the logging output mode. - ... - - Make the show logging messages more clear, while still keep the boolean - values explicit, such that we have: - ... - $ ./gdb.sh -q -batch -ex "show logging" - logging debugredirect: off: \ - Debug output will go to both the screen and the log file. - logging enabled: off: Logging is disabled. - logging file: The current logfile is "gdb.txt". - logging overwrite: off: Logging appends to the log file. - logging redirect: off: Output will go to both the screen and the log file. - ... - - Tested on x86_64-linux. - -2022-01-03 Tom Tromey - - Fix use of 'printf' in gdbtypes.c - An earlier patch of mine, commit 64b7cc50 ("Remove - gdb_print_host_address") inadvertently changed a function in - gdbtypes.c to use printf rather than printf_filtered. This patch - fixes the problem. - - Fix regression in page-logging.exp - Simon and Tom pointed out that page-logging.exp failed on their - machines. Tom tracked this down to the "width" setting. Since - there's no need in the test to change the width, it seems simplest to - remove the setting. I confirmed that the test still fails if the fix - is backed out, ensuring that the test is still testing what it - purports to. - - Small indentation fix in eval.c - I noticed that the AdaCore tree had a small divergence in eval.c -- it - had a fix for an indentation problem in binop_promote. I'm checking - in this small fix as obvious. - -2022-01-03 Tom de Vries - - [gdb/testsuite] Handle for loop initial decl with gcc 4.8.5 - When running test-case gdb.threads/schedlock-thread-exit.exp on a system with - system compiler gcc 4.8.5, I run into: - ... - src/gdb/testsuite/gdb.threads/schedlock-thread-exit.c:33:3: error: \ - 'for' loop initial declarations are only allowed in C99 mode - ... - - Fix this by: - - using -std=c99, or - - using -std=gnu99, in case that's required, or - - in the case of the jit test-cases, rewriting the for loops. - - Tested on x86_64-linux, both with gcc 4.8.5 and gcc 7.5.0. - -2022-01-03 GDB Administrator - - Automatic date update in version.in - -2022-01-02 Tom Tromey - - Update copying.awk for _initialize declaration patch - Commit 6c265988 ("gdb: add back declarations for _initialize - functions") modified copying.c, but not copying.awk. This patch - updates copying.awk to backport the appropriate fix. This way, if - copying.awk is run again, it will create the correct output. - - I'm checking this in as obvious. - -2022-01-02 Tom Tromey - - Use filtered output in print_i387_ext - print_i387_ext mostly uses filtered output, but one call in the middle - of the function uses the _unfiltered form. This patch fixes this - call. I'm checking this in as obvious. - -2022-01-02 Alan Modra - - Update year range in copyright notice of binutils files - The result of running etc/update-copyright.py --this-year, fixing all - the files whose mode is changed by the script, plus a build with - --enable-maintainer-mode --enable-cgen-maint=yes, then checking - out */po/*.pot which we don't update frequently. - - The copy of cgen was with commit d1dd5fcc38ead reverted as that commit - breaks building of bfp opcodes files. - -2022-01-02 GDB Administrator - - Automatic date update in version.in - -2022-01-01 Mike Frysinger - - gdb: copyright: fix a few comment typos - - sim: ppc: drop natural types - These are almost entirely unused. For the very few places using them, - replace with explicit signed types. This matches what was done in the - common sim code. - - sim: mips: clean up bad style/whitespace - This doesn't fix all the problems, but grabs a bunch of the more - obvious ones. - - sim: tweak copyright lines for gnulib update-copyright - The regex it uses does not like so many leading spaces which causes - it to think the files lack copyright. Trim them down so the script - can find & update them accordingly. - - gdb: update sim mips testsuite copyright exemption - The sim testsuite was reorganized last year, so update the path. - -2022-01-01 Mike Frysinger - - unify 64-bit bfd checks - Move the 64-bit bfd logic out of bfd/configure.ac and into bfd64.m4 - under config so it can be shared between all the other subdirs. - - This replaces want64 with enable_64_bit_bfd which was already being - declared, but not used directly. - -2022-01-01 Joel Brobecker - - Update Copyright year in gdb/testsuite/gdb.arch/powerpc-power10.exp - This commit updates the copyright year range in the script - gdb/testsuite/gdb.arch/powerpc-power10.exp. The update was - performed by running gdb/copyright.py again, to make sure - that the copyright year range will be automatically updated - in years forward. - -2022-01-01 Joel Brobecker - - Fix copyright header in gdb/testsuite/gdb.arch/powerpc-power10.exp - The copyright year and holder line is slight malformed, missing - a space after a comma, and this is sufficient for gdb's - copyright.py script to miss this file during its automated - copyright year update. - - This commit fixes this. - -2022-01-01 Joel Brobecker - - gdb/copyright.py: Add update-netbsd.sh to MULTIPLE_COPYRIGHT_HEADERS - Add gdb/syscalls/update-netbsd.sh to the reminder printed - at the end of the execution listing all the files where - a manual update of the copyright header is needed. This - scripts contains some inline code which includes a copyright - header. - - Manual copyright year update of various GDB files - This commit updates the copyright year in some files where - we have a copyright year outside of the copyright year, - and thus are not included in gdb's copyright.py script. - -2022-01-01 Joel Brobecker - - Automatic Copyright Year update after running gdb/copyright.py - This commit brings all the changes made by running gdb/copyright.py - as per GDB's Start of New Year Procedure. - - For the avoidance of doubt, all changes in this commits were - performed by the script. - -2022-01-01 Joel Brobecker - - Update Copyright Year in gdb, gdbserver and gdbreplay version output - This commit changes the copyright year printed by gdb, gdbserver - and gdbreplay when printing the tool's version. - -2022-01-01 Alan Modra - - ubsan: next_char_of_string signed integer overflow - Squash another totally useless fuzz report that I should have ignored. - - * read.c (next_char_of_string): Avoid integer overflow. - -2022-01-01 Alan Modra - - ubsan: bfd_mach_o_build_commands shift exponent 64 is too large - * mach-o.c (bfd_mach_o_read_section_32): Limit alignment further. - (bfd_mach_o_read_section_64): Likewise. - -2022-01-01 Alan Modra - - ubsan: signed integer multiply overflow - 9223371018427387904 * 2 cannot be represented in type 'long', yes, but - we don't care. - - * expr.c (expr): Avoid signed overflow. - -2022-01-01 Alan Modra - - asan: Null-dereference in _bfd_xcoff_copy_private_bfd_data - sec->output_section will be NULL when objcopy removes sections. - - * coff-rs6000.c (_bfd_xcoff_copy_private_bfd_data): Protect against - objcopy removing sections. - -2022-01-01 Alan Modra - - ubsan: integer overflow in section filepos subtraction - * elf.c (assign_file_positions_for_non_load_sections): Avoid - signed integer overflow. - -2022-01-01 Alan Modra - - Remove unnecessary ELF_MINPAGESIZE defines - The idea of this patch is to make it easy to see which targets (just - sparc) have ELF_MINPAGESIZE != ELF_COMMONPAGESIZE. - - * elf32-arm.c (ELF_MINPAGESIZE): Don't define. - * elf32-metag.c: Likewise. - * elfnn-aarch64.c: Likewise. - * elf64-x86-64.c: Likewise. Also don't redefine a bunch of other - macros for l1om elf64-target.h use that are unchanged from default. - -2022-01-01 H.J. Lu - - ld-x86-64: Pass options to linker with "-Wl," - * testsuite/ld-x86-64/x86-64.exp: Pass options to linker with - "-Wl,". - -2022-01-01 GDB Administrator - - Automatic date update in version.in - -2021-12-31 Tom Tromey - - Do not call reinitialize_more_filter from avr_io_reg_read_command - avr_io_reg_read_command is an ordinary gdb command, and so should not - be calling reinitialize_more_filter. This patch removes it. I'm - checking this in as obvious. Tested by rebuilding. - -2021-12-31 H.J. Lu - - x86: Define check_relocs_failed in elfxx-x86.h - * elf32-i386.c (check_relocs_failed): Moved to ... - * elfxx-x86.h (check_relocs_failed): Here. New. - * elf64-x86-64.c (check_relocs_failed): Removed. - - Define X86_PCREL_TYPE_P/X86_SIZE_TYPE_P in elfxx-x86.h - * elf32-i386.c: Don't include "elf/i386.h". - (X86_PCREL_TYPE_P): Removed. - (X86_SIZE_TYPE_P): Likewise. - (elf_i386_check_relocs): Pass false to NEED_DYNAMIC_RELOCATION_P. - (elf_i386_relocate_section): Pass false to - GENERATE_DYNAMIC_RELOCATION_P and COPY_INPUT_RELOC_P. - * elf64-x86-64.c: Don't include "elf/x86-64.h". - (X86_PCREL_TYPE_P): Removed. - (X86_SIZE_TYPE_P): Likewise. - (elf_x86_64_check_relocs): Pass true to NEED_DYNAMIC_RELOCATION_P - and X86_PCREL_TYPE_P. - (elf_x86_64_relocate_section): Pass true to X86_PCREL_TYPE_P, - X86_SIZE_TYPE_P, GENERATE_DYNAMIC_RELOCATION_P and - COPY_INPUT_RELOC_P. - * elfxx-x86.c: Don't include "elf/i386.h" nor "elf/x86-64.h". - * elfxx-x86.h (X86_64_PCREL_TYPE_P): New. - (I386_PCREL_TYPE_P): Likewise. - (X86_PCREL_TYPE_P): Likewise. - (X86_64_SIZE_TYPE_P): Likewise. - (I386_SIZE_TYPE_P): Likewise. - (X86_SIZE_TYPE_P): Likewise. - (NEED_DYNAMIC_RELOCATION_P): Add IS_X86_64 and pass it to - X86_PCREL_TYPE_P. - (COPY_INPUT_RELOC_P): Likewise. - (GENERATE_DYNAMIC_RELOCATION_P): Add IS_X86_64, pass it to - X86_PCREL_TYPE_P and X86_SIZE_TYPE_P. - -2021-12-31 Tamar Christina - - ld: fix coff PE SEH - COFF_WITH_pex64 and COFF_WITH_peAArch64 can't be true at the same time. - That means that two conditionals that control the sorting of the .pdata section - became a falsum. - - The testsuite doesn't catch this because the linker does the sorting and to link - you require library support from the unwinder so we can't test from binutils in - isolation. - - bfd/ChangeLog: - - 2021-12-31 Tamar Christina - - PR ld/28682 - * peXXigen.c: Fix conditional. - -2021-12-31 GDB Administrator - - Automatic date update in version.in - -2021-12-30 GDB Administrator - - Automatic date update in version.in - -2021-12-29 Tom Tromey - - Use filtered output in show callbacks - "show" command callbacks, like most ordinary gdb commands, should use - filtered output. I found a few that did not, so this patch changes - them to use the filtered form. - -2021-12-29 Tom Tromey - - Consistently Use ui_file parameter to show callbacks - I happened to notice that one "show" callback was printing to - gdb_stdout rather than to the passed-in ui_file parameter. I went - through all such callbacks and fixed them to consistently use the - ui_file. - - Regression tested on x86-64 Fedora 34. - -2021-12-29 Tom Tromey - - Use gdb_stdlog for MI debugging - When MI debugging is enabled, the logging output should be sent to - gdb_stdlog. This is part of PR gdb/7233. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7233 - -2021-12-29 Tom Tromey - - Use debug_prefixed_printf_cond_nofunc in index-cache - This changes index-cache.c to use debug_prefixed_printf_cond_nofunc. - As a side effect, logs are now written to gdb_stdlog. This is part of - PR gdb/7233. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7233 - -2021-12-29 Tom Tromey - - Send minsym logging to gdb_stdlog - This changes minsyms.c to send logging output to gdb_stdlog. This is - part of PR gdb/7233. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7233 - -2021-12-29 Tom Tromey - - Use gdb_stdlog for separate debug file logging - This changes the separate debug file logging code (spread across two - files) to use gdb_stdlog for its output. This is part of PR gdb/7233. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7233 - -2021-12-29 Tom Tromey - - Use debug_prefixed_printf_cond_nofunc in machoread - This changes machoread.c to use debug_prefixed_printf_cond_nofunc. As - a side effect, the logs are now written to gdb_stdlog. This is part - of PR gdb/7233. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7233 - -2021-12-29 Tom Tromey - - Use debug_prefixed_printf_cond_nofunc in microblaze.c - This changes microblaze.c to use the standard logging macro. As a - side effect, logs will now go to gdb_stdlog. This is part of PR gdb/7233. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7233 - -2021-12-29 Tom Tromey - - Send debugging data to gdb_stdlog in mips-linux-nat.c - This changes mips-linux-nat.c to send some logging output to - gdb_stdlog, rather than stdout. This is part of PR gdb/7233. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7233 - -2021-12-29 Tom Tromey - - Send arch-utils error messages to gdb_stderr - This changes arch-utils.c to send some error messages to gdb_stderr. - This is part of PR gdb/7233. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7233 - -2021-12-29 Tom Tromey - - Use correct stream for process record output - The process record code often emits unfiltered output. In some cases, - this output ought to go to gdb_stderr (but see below). In other - cases, the output is guarded by a logging variable and so ought to go - to gdb_stdlog. This patch makes these changes. - - Note that in many cases, the output to stderr is followed by a - "return -1", which is how process record indicates an error. It seems - to me that calling error here would be preferable, because, in many - cases, that's all the caller does when it sees a -1. However, I - haven't made this change. - - This is part of PR gdb/7233. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7233 - -2021-12-29 Tom Tromey - - Send jit.c errors to gdb_stderr - jit.c writes some error messages to gdb_stdout, but using gdb_stderr - is better. This is part of PR gdb/7233. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7233 - -2021-12-29 Tom Tromey - - Fix logging redirection bug with pager - I noticed yesterday that if gdb output is redirected to a file, the - pager will still be active. This is irritating, because the output - isn't actually visible -- just the pager prompt. Looking in bugzilla, - I found that this had been filed 17 years ago, as PR cli/8798. - - This patch fixes the bug. It changes the pagination code to query the - particular ui-file to see if paging is allowable. The ui-file - implementations are changed so that only the stdout implementation and - a tee (where one sub-file is stdout) can page. - - Regression tested on x86-64 Fedora 34. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=8798 - -2021-12-29 Tom Tromey - - Remove unusual use of core_addr_eq and core_addr_hash - gdbtypes.h uses core_addr_eq and core_addr_hash in a weird way: taking - the address of a member and then passing this (as a void*) to these - functions. - - It seems better to simply inline the ordinary code here. CORE_ADDR is - a scalar so it can be directly compared, and the identity hash - function seems safe to assume as well. - - After this, core_addr_eq and core_addr_hash are unused, so this patch - removes them. - -2021-12-29 Lancelot SIX - - gdb: Copy inferior properties in clone-inferior - This commit ensures that the following settings are cloned from one - inferior to the new one when processing the clone-inferior command: - - inferior-tty - - environment variables - - cwd - - args - - Some of those parameters can be passed as command line arguments to GDB - (-args and -tty), so one could expect the clone-inferior to respect - those flags. The following debugging session illustrates that: - - gdb -nx -quiet -batch \ - -ex "show args" \ - -ex "show inferior-tty" \ - -ex "clone-inferior" \ - -ex "inferior 2" \ - -ex "show args" \ - -ex "show inferior-tty" \ - -tty=/some/tty \ - -args echo foo bar - Argument list to give program being debugged when it is started is "foo bar". - Terminal for future runs of program being debugged is "/some/tty". - [New inferior 2] - Added inferior 2. - [Switching to inferior 2 [] (/bin/echo)] - Argument list to give program being debugged when it is started is "". - Terminal for future runs of program being debugged is "". - - The other properties this commit copies on clone (i.e. CWD and the - environment variables) are included since they are related (in the sense - that they influence the runtime behavior of the program) even if they - cannot be directly set using command line switches. - - There is a chance that this patch changes existing user workflow. I - think that this change is mostly harmless. If users want to start a new - inferior based on an existing one, they probably already propagate those - settings to the new inferior in some way. - - Tested on x86_64-linux. - - Change-Id: I3b1f28b662f246228b37bb24c2ea1481567b363d - -2021-12-29 GDB Administrator - - Automatic date update in version.in - -2021-12-28 H.J. Lu - - elf32-i386: Fix a typo in GOT comments - Entry offsets in the global offset table are multiples of 4, not 8. - - * elf32-i386.c (elf_i386_relocate_section): Fix a typo in GOT - comments. - -2021-12-28 H.J. Lu - - bfd: Don't check non-thin archive member file size - There is no need to check member file size for thin archive member. - - * bfdio.c (bfd_bread): Don't check non-thin archive member file - size. - -2021-12-28 Alan Modra - - gas reloc sorting - In some cases, eg. riscv_pre_output_hook, gas generates out-of-order - relocations. Various places in the linker assume relocs are sorted - by increasing r_offset, which is normally the case. Provide - GAS_SORT_RELOCS to handle unsorted relocs. - - bfd/ - PR 28709 - * elf32-nds32.c (nds32_insertion_sort): Make static. - * elf32-nds32.h (nds32_insertion_sort): Delete declaration. - gas/ - PR 28709 - * write.c (write_relocs): Implement reloc sorting by r_offset - when GAS_SORT_RELOCS. - * config/tc-nds32.c (compar_relent, nds32_set_section_relocs): Delete. - * config/tc-nds32.h (nds32_set_section_relocs): Don't declare. - (SET_SECTION_RELOCS): Don't define. - (GAS_SORT_RELOCS): Define. - * config/tc-riscv.h (GAS_SORT_RELOCS): Define. - -2021-12-28 jiawei - - ld: Fix testcase errors due to -shared not support. - Reviewed-by: Jim Wilson - - ld/ChangeLog: - - * testsuite/ld-ctf/ctf.exp: Add shared lib check. - * testsuite/ld-plugin/lto.exp: Add lto shared check. - -2021-12-28 GDB Administrator - - Automatic date update in version.in - -2021-12-27 H.J. Lu - - elf: Update comments for check_relocs in elf_backend_data - Since - - commit 5c3261b0e834647cf9eb555320e20871b7854f98 - Author: H.J. Lu - Date: Mon Oct 16 03:49:54 2017 -0700 - - ELF: Call check_relocs after opening all inputs - - check_relocs is called after opening all inputs. - - * elf-bfd.h (elf_backend_data::check_relocs): Update comments. - -2021-12-27 H.J. Lu - - ld: Remove emultempl/linux.em - Remove emultempl/linux.em whose last usage was removed by - - commit c65c21e1ffd1e02d9970a4bca0b7e384788a50f0 - Author: Alan Modra - Date: Mon Apr 16 22:14:01 2018 +0930 - - various i386-aout and i386-coff target removal - - Also tidies some other aout leftovers in binutils-common.exp. - -2021-12-27 GDB Administrator - - Automatic date update in version.in - -2021-12-26 GDB Administrator - - Automatic date update in version.in - -2021-12-25 GDB Administrator - - Automatic date update in version.in - -2021-12-24 Tom Tromey - - Remove gdb_print_host_address - gdb_print_host_address is just a simple wrapper around - fprintf_filtered. However, it is readily replaced in all callers by a - combination of %s and call to host_address_to_string. This also - simplifies the code, so I think it's worthwhile to remove this - function. - - Regression tested on x86-64 Fedora 64. - -2021-12-24 Tom Tromey - - Move gdb_bfd_errmsg to gdb_bfd.c - gdb_bfd.c contains most of gdb's BFD-related utility functions. - However, gdb_bfd_errmsg is in utils.c. It seemed better to me to move - this out of util.[ch] and into the BFD-related file instead. - - Tested by rebuilding. - -2021-12-24 Nelson Chu - - RISC-V: Rewrite the csr testcases. - Maskray (Fangrui Song) had suggested me before that we should combine - multiple testcases into one file as possible as we can. So that we can - more easily understand what these test cases are testing, and easier to - maintain. Therefore, this patch rewrites all csr testcases, to make them - more clean. - - gas/ - * testsuite/gas/riscv/csr-fail-nonexistent.d: Renamed from - priv-reg-fail-nonexistent testcase. - * testsuite/gas/riscv/csr-fail-nonexistent.: Likewise. - * testsuite/gas/riscv/csr-fail-nonexistent.s: Likewise. - * testsuite/gas/riscv/csr-insns-pseudo-noalias.d: Renamed from - priv-reg-pseudo testcase. - * testsuite/gas/riscv/csr-insns-pseudo.d: Likewise. - * testsuite/gas/riscv/csr-insns-pseudo.s: Likewise. - * testsuite/gas/riscv/csr-insns-read-only.d: Renamed from - priv-reg-fail-read-only-02 testcase. - * testsuite/gas/riscv/csr-insns-read-only.l: Likewise. - * testsuite/gas/riscv/csr-insns-read-only.s: Likewise. - * testsuite/gas/riscv/h-ext-32.d: Moved hypervisor csrs to csr.s. - * testsuite/gas/riscv/h-ext-32.s: Likewise. - * testsuite/gas/riscv/h-ext-64.d: Likewise. - * testsuite/gas/riscv/h-ext-64.s: Likewise. - * testsuite/gas/riscv/csr.s: Renamed from priv-reg.s, and then - added the hypervisor csrs. - * testsuite/gas/riscv/csr-version-1p9p1.d: The csr testcase when - the privileged spec is 1.9.1. Also tested all invalid csr warnings - when -mcsr-check is enabled. - * testsuite/gas/riscv/csr-version-1p9p1.l: Likewise. - * testsuite/gas/riscv/csr-version-1p10.d: Likewise, but the - privileged spec is 1.10.. - * testsuite/gas/riscv/csr-version-1p10.l: Likewise. - * testsuite/gas/riscv/csr-version-1p11.d: Likewise, but the - privileged spec is 1.11. - * testsuite/gas/riscv/csr-version-1p11.l: Likewise. - * testsuite/gas/riscv/csr-version-1p12.d: Likewise, but the - privileged spec is 1.12. - * testsuite/gas/riscv/csr-version-1p12.l: Likewise. - * testsuite/gas/riscv/priv-reg*: Removed or Renamed. - -2021-12-24 Vineet Gupta - - RISC-V: Hypervisor ext: support Privileged Spec 1.12 - This is the Hypervisor Extension 1.0 - - - Hypervisor Memory-Management Instructions - HFENCE.VVMA, HFENCE.GVMA, - - - Hypervisor Virtual Machine Load and Store Instructions - HLV.B, HLV.BU, HSV.B, - HLV.H, HLV.HU, HLVX.HU, HSB.H, - HLV.W, HLV.WU, HLVX.WU, HSV.W, - HLV.D, HSV.D - - - Hypervisor CSRs (some new, some address changed) - hstatus, hedeleg, hideleg, hie, hcounteren, hgeie, htval, hip, hvip, - htinst, hgeip, henvcfg, henvcfgh, hgatp, hcontext, htimedelta, htimedeltah, - vsstatus, vsie, vstvec, vsscratch, vsepc, vscause, vstval, vsip, vsatp, - - Note that following were added already as part of svinval extension - support: - HINVAL.GVMA, HINVAL.VVMA - - Reviewed-by: Palmer Dabbelt - Reviewed-by: Nelson Chu - - bfd/ - * cpu-riscv.c (riscv_priv_specs): Added entry for 1.12. - * cpu-riscv.h (enum riscv_spec_class): Added PRIV_SPEC_CLASS_1P12. - gas/ - * config/tc-riscv.c (abort_version): Updated comment. - (validate_riscv_insn): Annotate switch-break. - * testsuite/gas/riscv/h-ext-32.d: New testcase for hypervisor. - * testsuite/gas/riscv/h-ext-32.s: Likewise. - * testsuite/gas/riscv/h-ext-64.d: Likewise. - * testsuite/gas/riscv/h-ext-64.s: Likewise. - include/ - * opcode/riscv-opc.h: Added encodings for hypervisor csrs and - instrcutions. - opcodes/ - * riscv-opc.c (riscv_opcodes): Added hypervisor instrcutions. - -2021-12-24 Vineet Gupta - - RISC-V: Hypervisor ext: drop Privileged Spec 1.9.1 implementation/tests - This makes way for a clean 1.12 based Hypervisor Ext support. - - There are no known implementors of 1.9.1 H-ext. (Per Jim, kendryte k210 - is based on priv spec 1.9.1, but it seems unlikely that they implemented - H-ext). - - Reviewed-by: Palmer Dabbelt - Reviewed-by: Nelson Chu - - gas/ - * testsuite/gas/riscv/csr-dw-regnums.d: Drop the hypervisor csrs - defined in the privileged spec 1.9.1. - * testsuite/gas/riscv/csr-dw-regnums.s: Likewise. - * testsuite/gas/riscv/priv-reg-fail-read-only-01.s: Likewise. - * testsuite/gas/riscv/priv-reg-fail-version-1p10.l: Likewise. - * testsuite/gas/riscv/priv-reg-fail-version-1p11.l: Likewise. - * testsuite/gas/riscv/priv-reg-version-1p10.d: Likewise. - * testsuite/gas/riscv/priv-reg-version-1p11.d: Likewise. - * testsuite/gas/riscv/priv-reg-version-1p9p1.d: Likewise. - * testsuite/gas/riscv/priv-reg.s: Likewise. - include/ - * opcode/riscv-opc.h: Drop the hypervisor csrs defined in the - privileged spec 1.9.1. - -2021-12-24 GDB Administrator - - Automatic date update in version.in - -2021-12-23 Andrew Burgess - - gdb/testsuite: resolve some duplicate testnames in gdb.mi - Set of fixes to resolve some duplicate test names in the gdb.mi/ - directory. There should be no real test changes after this set of - fixes, they are all either: - - - Adding with_test_prefix type constructs to make test names unique, - or - - - Changing the test name to be more descriptive, or better reflect - the test being run. - -2021-12-23 Andrew Burgess - - gdb/remote: handle attach when stop packet lacks thread-id - Bug PR gdb/28405 reports a regression when using attach with an - extended-remote target. In this case the target is not including a - thread-id in the stop packet it sends back after the attach. - - The regression was introduced with this commit: - - commit 8f66807b98f7634c43149ea62e454ea8f877691d - Date: Wed Jan 13 20:26:58 2021 -0500 - - gdb: better handling of 'S' packets - - The problem is that when GDB processes the stop packet, it sees that - there is no thread-id and so has to "guess" which thread the stop - should apply to. - - In this case the target only has one thread, so really, there's no - guessing needed, but GDB still runs through the same process, this - shouldn't cause us any problems. - - However, after the above commit, GDB now expects itself to be more - internally consistent, specifically, only a thread that GDB thinks is - resumed, can be a candidate for having stopped. - - It turns out that, when GDB attaches to a process through an - extended-remote target, the threads of the process being attached too, - are not, initially, marked as resumed. - - And so, when GDB tries to figure out which thread the stop might apply - too, it finds no threads in the processes marked resumed, and so an - assert triggers. - - In extended_remote_target::attach we create a new thread with a call - to add_thread_silent, rather than remote_target::remote_add_thread, - the reason is that calling the latter will result in a call to - 'add_thread' rather than 'add_thread_silent'. However, - remote_target::remote_add_thread includes additional - actions (i.e. calling remote_thread_info::set_resumed and set_running) - which are missing from extended_remote_target::attach. These missing - calls are what would serve to mark the new thread as resumed. - - In this commit I propose that we add an extra parameter to - remote_target::remote_add_thread. This new parameter will force the - new thread to be added with a call to add_thread_silent. We can now - call remote_add_thread from the ::attach method, the extra - actions (listed above) will now be performed, and the thread will be - left in the correct state. - - Additionally, in PR gdb/28405, a segfault is reported. This segfault - triggers when 'set debug remote 1' is used before trying to reproduce - the original assertion failure. The cause of this is in - remote_target::select_thread_for_ambiguous_stop_reply, where we do - this: - - remote_debug_printf ("first resumed thread is %s", - pid_to_str (first_resumed_thread->ptid).c_str ()); - remote_debug_printf ("is this guess ambiguous? = %d", ambiguous); - - gdb_assert (first_resumed_thread != nullptr); - - Notice that when debug printing is on we dereference - first_resumed_thread before we assert that the pointer is not - nullptr. This is the cause of the segfault, and is resolved by moving - the assert before the debug printing code. - - I've extended an existing test, ext-attach.exp, so that the original - test is run multiple times; we run in the original mode, as normal, - but also, we now run with different packets disabled in gdbserver. In - particular, disabling Tthread would trigger the assertion as it was - reported in the original bug. I also run the test in all-stop and - non-stop modes now for extra coverage, we also run the tests with - target-async enabled, and disabled. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28405 - -2021-12-23 Andrew Burgess - - gdb: on x86-64 non-trivial C++ objects are returned in memory - Fixes PR gdb/28681. It was observed that after using the `finish` - command an incorrect value was displayed in some cases. Specifically, - this behaviour was observed on an x86-64 target. - - Consider this test program: - - struct A - { - int i; - - A () - { this->i = 0; } - A (const A& a) - { this->i = a.i; } - }; - - A - func (int i) - { - A a; - a.i = i; - return a; - } - - int - main () - { - A a = func (3); - return a.i; - } - - And this GDB session: - - $ gdb -q ex.x - Reading symbols from ex.x... - (gdb) b func - Breakpoint 1 at 0x401115: file ex.cc, line 14. - (gdb) r - Starting program: /home/andrew/tmp/ex.x - - Breakpoint 1, func (i=3) at ex.cc:14 - 14 A a; - (gdb) finish - Run till exit from #0 func (i=3) at ex.cc:14 - main () at ex.cc:23 - 23 return a.i; - Value returned is $1 = { - i = -19044 - } - (gdb) p a - $2 = { - i = 3 - } - (gdb) - - Notice how after the `finish` the contents of $1 are junk, but, when I - immediately ask for the value of `a`, I get back the correct value. - - The problem here is that after the finish command GDB calls the - function amd64_return_value to figure out where the return value can - be found (on x86-64 targets anyway). - - This function makes the wrong choice for the struct A in our case, as - sizeof(A) <= 8, then amd64_return_value decides that A will be - returned in a register. GDB then reads the return value register an - interprets the contents as an instance of A. - - Unfortunately, A is not trivially copyable (due to its copy - constructor), and the sys-v specification for argument and return - value passing, says that any non-trivial C++ object should have space - allocated for it by the caller, and the address of this space is - passed to the callee as a hidden first argument. The callee should - then return the address of this space as the return value. - - And so, the register that GDB is treating as containing an instance of - A, actually contains the address of an instance of A (in this case on - the stack), this is why GDB shows the incorrect result. - - The call stack within GDB for where we actually go wrong is this: - - amd64_return_value - amd64_classify - amd64_classify_aggregate - - And it is in amd64_classify_aggregate that we should be classifying - the type as AMD64_MEMORY, instead of as AMD64_INTEGER as we currently - do (via a call to amd64_classify_aggregate_field). - - At the top of amd64_classify_aggregate we already have this logic: - - if (TYPE_LENGTH (type) > 16 || amd64_has_unaligned_fields (type)) - { - theclass[0] = theclass[1] = AMD64_MEMORY; - return; - } - - Which handles some easy cases where we know a struct will be placed - into memory, that is (a) the struct is more than 16-bytes in size, - or (b) the struct has any unaligned fields. - - All we need then, is to add a check here to see if the struct is - trivially copyable. If it is not then we know the struct will be - passed in memory. - - I originally structured the code like this: - - if (TYPE_LENGTH (type) > 16 - || amd64_has_unaligned_fields (type) - || !language_pass_by_reference (type).trivially_copyable) - { - theclass[0] = theclass[1] = AMD64_MEMORY; - return; - } - - This solved the example from the bug, and my small example above. So - then I started adding some more extensive tests to the GDB testsuite, - and I ran into a problem. I hit this error: - - gdbtypes.h:676: internal-error: loc_bitpos: Assertion `m_loc_kind == FIELD_LOC_KIND_BITPOS' failed. - - This problem is triggered from: - - amd64_classify_aggregate - amd64_has_unaligned_fields - field::loc_bitpos - - Inside the unaligned field check we try to get the bit position of - each field. Unfortunately, in some cases the field location is not - FIELD_LOC_KIND_BITPOS, but is FIELD_LOC_KIND_DWARF_BLOCK. - - An example that shows this bug is: - - struct B - { - short j; - }; - - struct A : virtual public B - { - short i; - - A () - { this->i = 0; } - A (const A& a) - { this->i = a.i; } - }; - - A - func (int i) - { - A a; - a.i = i; - return a; - } - - int - main () - { - A a = func (3); - return a.i; - } - - It is the virtual base class, B, that causes the problem. The base - class is represented, within GDB, as a field within A. However, the - location type for this field is a DWARF_BLOCK. - - I spent a little time trying to figure out how to convert the - DWARF_BLOCK to a BITPOS, however, I realised that, in this case at - least, conversion is not needed. - - The C++ standard says that a class is not trivially copyable if it has - any virtual base classes. And so, in this case, even if I could - figure out the BITPOS for the virtual base class fields, I know for - sure that I would immediately fail the trivially_copyable check. So, - lets just reorder the checks in amd64_classify_aggregate to: - - if (TYPE_LENGTH (type) > 16 - || !language_pass_by_reference (type).trivially_copyable - || amd64_has_unaligned_fields (type)) - { - theclass[0] = theclass[1] = AMD64_MEMORY; - return; - } - - Now, if we have a class with virtual bases we will fail quicker, and - avoid the unaligned fields check completely. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28681 - -2021-12-23 Andrew Burgess - - gdb: make use of SCOPE_EXIT to manage thread executing state - While working on another patch relating to how GDB manages threads - executing and resumed state, I spotted the following code in - record-btrace.c: - - executing = tp->executing (); - set_executing (proc_target, inferior_ptid, false); - - id = null_frame_id; - try - { - id = get_frame_id (get_current_frame ()); - } - catch (const gdb_exception &except) - { - /* Restore the previous execution state. */ - set_executing (proc_target, inferior_ptid, executing); - - throw; - } - - /* Restore the previous execution state. */ - set_executing (proc_target, inferior_ptid, executing); - - return id; - - I notice that we only catch the exception so we can call - set_executing, and this is the same call to set_executing that we need - to perform in the non-exception return path. - - This would be much cleaner if we could use SCOPE_EXIT to avoid the - try/catch, so lets do that. - - While cleaning this up, I also applied a similar patch to - record-full.c, though there's no try/catch in that case, but using - SCOPE_EXIT makes the code safe if, in the future, we do start throwing - exceptions. - - There should be no user visible changes after this commit. - -2021-12-23 GDB Administrator - - Automatic date update in version.in - -2021-12-22 Andrew Burgess - - gdb/doc: add some index entries relating to mi-async setting - I noticed that the mi-async setting was not referenced from the index - in any way, this commit tries to rectify that a bit. - - The @cindex lines I think are not controversial, these same index - entries are used elsewhere in the manual for async related topics (see - @node Background Execution). - - The only bit that might be controversial is that I've added a @kindex - entry for 'set mi-async' when the command is documented as '-gdb-set - mi-async' (with a similar difference for the show/-gdb-show). - - My reasoning here is that nothing else is indexed under -gdb-set or - -gdb-show, and as -gdb-set/-gdb-show are just the MI equivalent for - set/show anything that is documented under set/show can be adjusted - using -gdb-set/-gdbshow, and so, I've tried to keep the index - consistent for mi-async. - -2021-12-22 Andrew Burgess - - gdb: convert 'set debug lin-lwp' to a boolean command - Convert the 'set debug lin-lwp' command to a boolean. Adds a new - LINUX_NAT_SCOPED_DEBUG_ENTER_EXIT macro, and makes use of it in one - place (linux_nat_target::stop). - - The manual entry for 'set debug lin-lwp' is already vague about - exactly what arguments this command takes, and the description talks - about turning debug on and off, so I don't think there's any updates - required there. - - I have updated the doc strings shown when the users enters 'help show - debug lin-lwp' or 'help show debug lin-lwp'. The old title lines used - to talk about the 'GNU/Linux lwp module', but this debug flag is now - used for any native linux target debug, so we now talk about - 'GNU/Linux native target'. The body string for this setting has been - changed from 'Enables printf debugging output.' to 'When on, print - debug messages relating to the GNU/Linux native target.', the old - value looks like a cut&paste error to me. - -2021-12-22 Andrew Burgess - - gdb: add threads debugging switch - Add new commands: - - set debug threads on|off - show debug threads - - Prints additional debug information relating to thread creation and - deletion. - - GDB already announces when threads are created of course.... most of - the time, but sometimes threads are added silently, in which case this - debug message is the only mechanism to see the thread being added. - Also, though GDB does announce when a thread exits, it doesn't - announce when the thread object is deleted, I've added a debug message - for that. - - Additionally, having message printed through the debug system will - cause the messages to be nested to an appropriate depth when other - debug sub-systems are turned on (especially things like `infrun` and - `lin-lwp`). - -2021-12-22 jiawei - - RISC-V: Update Scalar Crypto testcases. - Add opcodes in testcases to make sure every instruction generate - right opcode after disassemble. - - gas/ChangeLog: - - * testsuite/gas/riscv/k-ext-64.d: Add opcode detect. - * testsuite/gas/riscv/k-ext.d: Ditto. - * testsuite/gas/riscv/zbkb-32.d: Ditto. - * testsuite/gas/riscv/zbkb-64.d: Ditto. - * testsuite/gas/riscv/zbkc-32.d: Ditto. - * testsuite/gas/riscv/zbkc-64.d: Ditto. - * testsuite/gas/riscv/zbkx-32.d: Ditto. - * testsuite/gas/riscv/zbkx-64.d: Ditto. - * testsuite/gas/riscv/zknd-32.d: Ditto. - * testsuite/gas/riscv/zknd-64.d: Ditto. - * testsuite/gas/riscv/zkne-32.d: Ditto. - * testsuite/gas/riscv/zkne-64.d: Ditto. - * testsuite/gas/riscv/zknh-32.d: Ditto. - * testsuite/gas/riscv/zknh-64.d: Ditto. - * testsuite/gas/riscv/zksed-32.d: Ditto. - * testsuite/gas/riscv/zksed-64.d: Ditto. - * testsuite/gas/riscv/zksh-32.d: Ditto. - * testsuite/gas/riscv/zksh-64.d: Ditto. - -2021-12-22 Simon Marchi - - gdbarch-components.py: change empty "params" tuples to empty lists - During review, it was suggested to change the "params" parameter from a - tuple to a list, for esthetic reasons. The empty ones are still tuples - though, they should probably be changed to be empty lists, for - consistency. It does not change anything in the script result. - - Change-Id: If13c6c527aa167a5ee5b45740e5f1bda1e9517e4 - -2021-12-22 GDB Administrator - - Automatic date update in version.in - -2021-12-21 Luis Machado - - [AArch64] Fix typo in error messages - Fix mispelling of PROT_ME to PROT_MTE in the error messages. - -2021-12-21 Joel Sherrill - - Obsolete m32c-rtems and m32r-rtems - 2020-12-20 Joel Sherrill - - bfd/ - * config.bfd (m32c-*-rtems*): Remove target. - - ld/ - * configure.tgt (m32c-*-rtems*): Remove target. - * configure.tgt (m32r-*-rtems*): Remove target. - -2021-12-21 Jan Beulich - - x86: -mfence-as-lock-add=yes doesn't work for 16-bit mode - Rather than trying to fix this (which would require making an assumption - on the upper half of %esp being zero), simply issue an error. While at - it, since the generated code is in conflict with -momit-lock-prefix=yes, - issue an error in that case as well. - - gas/ELF: avoid below-base ref in obj_elf_parse_section_letters() - We would better be prepared for 'm' being the first character of the - incoming string. - -2021-12-21 Alan Modra - - Typo fixes in binutils doc - * doc/binutils.texi: Fix typos. - -2021-12-21 GDB Administrator - - Automatic date update in version.in - -2021-12-20 Tom Tromey - - Remove print_spaces - This removes the print_spaces helper function, in favor of using the - "*%s" idiom that's already used in many places in gdb. One spot (in - symmisc.c) is changed to use print_spaces_filtered, because the rest - of that function is using filtered output. (This highlights one way - that the printf idiom is better -- this error is harder to make when - using that.) - - Regression tested on x86-64 Fedora 34. - -2021-12-20 Tom Tromey - - Remove puts_debug - I noticed that puts_debug isn't used in the tree. git log tells me - that the last use was removed in 2015: - - commit 40e0b27177e747600d3ec186458fe0e482a1cf77 - Author: Pedro Alves - Date: Mon Aug 24 15:40:26 2015 +0100 - - Delete the remaining ROM monitor targets - - ... and this commit mentions that the code being removed here probably - hadn't worked for 6 years prior to that. - - Based on this, I'm removing puts_debug. I don't think it's useful. - Tested by rebuilding. - -2021-12-20 Tom Tromey - - Make n_spaces return a const char * - n_spaces keeps the spaces in a static buffer. If a caller overwrites - these, it may give an incorrect result to a subsequent caller. So, - make the return type const to help avoid this outcome. - -2021-12-20 Enze Li - - Add Enze Li to gdb/MAINTAINERS - -2021-12-20 Joel Brobecker - - gdb/ada-exp.y: Reformat comment to follow GDB's coding standards - This commit reformats a comment in gdb/ada-exp.y to avoid - the leading '*' at the beginning of each line of the comment. - - gdb/ada-lang.h: Reformat comment to follow coding standards - This commit reformats a comment in gdb/ada-lang.h to avoid - the leading '*' at the beginning of each line of the comment. - -2021-12-20 GDB Administrator - - Automatic date update in version.in - -2021-12-19 Alan Modra - - Obsolete m32c-rtems - - readelf: avoid a possible divide by zero - * readelf.c (process_section_headers): Check SHT_RELR entsize. - -2021-12-19 GDB Administrator - - Automatic date update in version.in - -2021-12-18 Enze Li - - gdb: add "exit" command as an alias for "quit" - This command adds the "exit" command as an alias for the "quit" - command, as requested in PR gdb/28406. - - The documentation is also updated to mention this new command. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28406 - -2021-12-18 Andrew Burgess - - gdb: add assert in remote_target::wait relating to async being off - While working on another patch I ended up in a situation where I had - async mode disabled (with 'maint set target-async off'), but the async - event token got marked anyway. - - In this situation GDB was continually calling into - remote_target::wait, however, the async token would never become - unmarked as the unmarking is guarded by target_is_async_p. - - We could just unconditionally unmark the token, but that would feel - like just ignoring a bug, so, instead, lets assert that if - !target_is_async_p, then the async token should not be marked. - - This assertion would have caught my earlier mistake. - - There should be no user visible changes with this commit. - -2021-12-18 Andrew Burgess - - gdb/remote: some fixes for 'maint set target-async off' - While working on another patch relating to remote targets, I wanted to - test with 'maint set target-async off' in place. Unfortunately I ran - into some problems. This commit is an attempt to fix one of the - issues I hit. - - In my particular case I was actually running with: - - maint set target-async off - maint set target-non-stop off - - that is, we're telling GDB to force the targets to operate in - non-async mode, and in all-stop mode. Here's my GDB session showing - the problem: - - (gdb) maintenance set target-async off - (gdb) maintenance set target-non-stop off - (gdb) target extended-remote :54321 - Remote debugging using :54321 - (gdb) attach 2365960 - Attaching to process 2365960 - No unwaited-for children left. - (gdb) - - Notice the 'No unwaited-for children left.' error, this is the - problem. There's no reason why GDB should not be able to attach to - the process. - - The problem is this: - - 1. The user runs 'attach PID' and this sends GDB into attach_command - in infcmd.c. From here we call the ::attach method on the attach - target, which will be the extended_remote_target. - - 2. In extended_remote_target::attach, we attach to the remote target - and get the first reply (which is a stop packet). We put off - processing the stop packet until the end of ::attach. We setup the - inferior and thread to represent the process we attached to, and - download the target description. Finally, we process the initial - stop packet. - - If '!target_is_non_stop_p ()' and '!target_can_async_p ()', which is - the case for us given the maintenance commands we used, we cache the - stop packet within the remote_state::buf for later processing. - - 3. Back in attach_command, if 'target_is_non_stop_p ()' then we - request that the target stops. This will either process any cached - stop replies, or request that the target stops, and process the stop - replies. However, this code is not what we use due to non-stop mode - being disabled. So, we skip to the next step which is to call - validate_exec_file. - - 4. Calling validate_exec_file can cause packets to be sent to the - remote target, and replies received, the first path I hit is the - call to target_pid_to_exec_file, which calls - remote_target::pid_to_exec_file, which can then try to read the - executable from the remote. Sending an receiving packets will make - use of the remote_state::buf object. - - 5. The attempt to attach continues, but the damage is already done... - - So, the problem is that, in step #2 we cache a stop reply in the - remote_state::buf, and then in step #4 we reuse the remote_state::buf - object, discarding any cached stop reply. As a result, the initial - stop, which is sent when GDB first attaches to the target, is lost. - - This problem can clearly be seen, I feel, by looking at the - remote_state::cached_wait_status flag. This flag tells GDB if there - is a wait status cached in remote_state::buf. However, in - remote_target::putpkt_binary and remote_target::getpkt_or_notif_sane_1 - this flag is just set back to 0, doing this immediately discards any - cached data. - - I don't know if this scheme ever made sense, looking at commit - 2d717e4f8a54, where the cached_wait_status flag was added, it appears - that there was nothing between where the stop was cached, and where - the stop was consumed, so, I suspect, there never was a situation - where we ended up in putpkt_binary or getpkt_or_notif_sane_1 and - needed to clear to the flag, maybe the clearing was added "just in - case". Whatever the history, I claim that this clearing this flag is - no longer a good idea. - - So, my first step toward fixing this issue was to replace the two - instances of 'rs->cached_wait_status = 0;' in ::putpkt_binary and - ::getpkt_or_notif_sane_1 with 'gdb_assert (rs->cached_wait_status == - 0);', this, at least would show me when GDB was doing something - dangerous, and indeed, this assert is now hit in my test case above. - - I did play with using some kind of scoped restore to backup, and - restore the remote_state::buf object in all the places within remote.c - that I was hitting where the ::buf was being corrupted. The first - problem with this is that, where the ::cached_wait_status flag is - reset is _not_ where ::buf is corrupted. For the ::putpkt_binary - case, by the time we get to the method the buffer has already been - corrupted in many cases, so we end up needing to add the scoped - save/restore within the callers, which means we need the save/restore - in _lots_ of places. - - Plus, using this save/restore model feels like the wrong solution. I - don't think that it's obvious that the buffer might be holding cached - data, and I think it would be too easy for new corruptions of the - buffer to be introduced, which could easily go unnoticed for a long - time. - - So, I really wanted a solution that didn't require us to cache data in - the ::buf object. - - Luckily, I think we already have such a solution in place, the - remote_state::stop_reply_queue, it seems like this does exactly the - same task, just in a slightly different way. With the - ::stop_reply_queue, the stop packets are processed upon receipt and - the stop_reply object is added to the queue. With the ::buf cache - solution, the unprocessed stop reply is cached in the ::buf, and - processed later. - - So, finally, in this commit, I propose to remove the - remote_state::cached_wait_status flag and to stop using the ::buf to - cache stop replies. Instead, stop replies will now always be stored - in the ::stop_reply_queue. - - There are two places where we use the ::buf to hold a cached stop - reply, the first is in the ::attach method, and the second is in - remote_target::start_remote, however, the second of these cases is far - less problematic, as after caching the stop reply in ::buf we call the - global start_remote function, which does very little work before - calling normal_stop, which processes the cached stop reply. However, - my plan is to switch both users over to using ::stop_reply_queue so - that the old (unsafe) ::cached_wait_status mechanism can be completely - removed. - - The next problem is that the ::stop_reply_queue is currently only used - for async-mode, and so, in remote_target::push_stop_reply, where we - push stop_reply objects into the ::stop_reply_queue, we currently also - mark the async event token. I've modified this so we only mark the - async event token if 'target_is_async_p ()' - note, _is_, not _can_ - here. The ::push_stop_reply method is called in places where async - mode has been temporarily disabled, but, when async mode is switched - back on (see remote_target::async) we will mark the event token if - there are events in the queue. - - Another change of interest is in remote_target::remote_interrupt_as. - Previously this code checked ::cached_wait_status, but didn't check - for events in the ::stop_reply_queue. Now that ::cached_wait_status - has been removed we now check the queue length instead, which should - have the same result. - - Finally, in remote_target::wait_as, I've tried to merge the processing - of the ::stop_reply_queue with how we used to handle the - ::cached_wait_status flag. - - Currently, when processing the ::stop_reply_queue we call - process_stop_reply and immediately return. However, when handling - ::cached_wait_status we run through the whole of ::wait_as, and return - at the end of the function. - - If we consider a standard stop packet, the two differences I see are: - - 1. Resetting of the remote_state::waiting_for_stop_reply, flag; this - is not currently done when processing a stop from the - ::stop_reply_queue. - - 2. The final return value has the possibility of being adjusted at - the end of ::wait_as, as well as there being calls to - record_currthread, non of which are done if we process a stop from - the ::stop_reply_queue. - - After discussion on the mailing list: - - https://sourceware.org/pipermail/gdb-patches/2021-December/184535.html - - it was suggested that, when an event is pushed into the - ::stop_reply_queue, the ::waiting_for_stop_reply flag is never going - to be set. As a result, we don't need to worry about the first - difference. I have however, added a gdb_assert to validate the - assumption that the flag is never going to be set. If in future the - situation ever changes, then we should find out pretty quickly. - - As for the second difference, I have resolved this by having all stop - packets taken from the ::stop_reply_queue, pass through the return - value adjustment code at the end of ::wait_as. - - An example of a test that reveals the benefits of this commit is: - - make check-gdb \ - RUNTESTFLAGS="--target_board=native-extended-gdbserver \ - GDBFLAGS='-ex maint\ set\ target-async\ off \ - -ex maint\ set\ target-non-stop\ off' \ - gdb.base/attach.exp" - - For testing I've been running test on x86-64/GNU Linux, and run with - target boards unix, native-gdbserver, and native-extended-gdbserver. - For each board I've run with the default GDBFLAGS, as well as with: - - GDBFLAGS='-ex maint\ set\ target-async\ off \ - -ex maint\ set\ target-non-stop\ off' \ - - Though running with the above GDBFLAGS is clearly a lot more unstable - both before and after my patch, I'm not seeing any consistent new - failures with my patch, except, with the native-extended-gdbserver - board, where I am seeing new failures, but only because more tests are - now running. For that configuration alone I see the number of - unresolved go down by 49, the number of passes goes up by 446, and the - number of failures also increases by 144. All of the failures are new - tests as far as I can tell. - -2021-12-18 Vladimir Mezentsev - - x86: Terminate mnemonicendp in swap_operand() - Tested on x86_64-pc-linux-gnu. - - opcodes/ChangeLog: - 2021-12-17 Vladimir Mezentsev - - * i386-dis.c (swap_operand): Terminate mnemonicendp. - - gas/ChangeLog: - 2021-12-17 Vladimir Mezentsev - - * testsuite/gas/i386/opts-intel.d: Updated expected disassembly. - * testsuite/gas/i386/opts.d: Likewise. - * testsuite/gas/i386/sse2avx-opts-intel.d: Likewise. - * testsuite/gas/i386/sse2avx-opts.d: Likewise. - * testsuite/gas/i386/x86-64-opts-intel.d: Likewise. - * testsuite/gas/i386/x86-64-opts.d: Likewise. - * testsuite/gas/i386/x86-64-sse2avx-opts-intel.d: Likewise. - * testsuite/gas/i386/x86-64-sse2avx-opts.d: Likewise. - -2021-12-18 GDB Administrator - - Automatic date update in version.in - -2021-12-17 Tom Tromey - - Document gdbarch-components.py - This adds a comment to document how to update gdbarch. - - Remove gdbarch.sh - This patch runs gdbarch.py and removes gdbarch.sh. - -2021-12-17 Simon Marchi - - Add new gdbarch generator - The new gdbarch generator is a Python program. It reads the - "components.py" that was created in the previous patch, and generates - gdbarch.c and gdbarch-gen.h. - - This is a relatively straightforward translation of the existing .sh - code. It doesn't try very hard to be idiomatic Python or to be - especially smart. - - It is, however, incredibly faster: - - $ time ./gdbarch.sh - - real 0m8.197s - user 0m5.779s - sys 0m3.384s - - $ time ./gdbarch.py - - real 0m0.065s - user 0m0.053s - sys 0m0.011s - - Co-Authored-By: Tom Tromey - -2021-12-17 Tom Tromey - - Generate new gdbarch-components.py from gdbarch.sh - The new gdbarch.sh approach will be to edit a Python file, rather than - adding a line to a certain part of gdbarch.sh. We use the existing sh - code, though, to generate the first draft of this .py file. - - Documentation on the format will come in a subsequent patch. - - Note that some info (like "staticdefault") in the current code is - actually unused, and so is ignored by this new generator. - -2021-12-17 Tom Tromey - - Do not sort the fields in gdbarch_dump - This changes gdbarch.sh so that it no longer sorts the fields in - gdbarch_dump. This sorting isn't done anywhere else by gdbarch.sh, - and this simplifies the new generator a little bit. - - Do not generate gdbarch.h - Now that gdbarch.h has been split, we no longer need the generator - code in gdbarch.sh, so remove it. - -2021-12-17 Tom Tromey - - Split gdbarch.h into two files - This patch splits gdbarch.h into two files -- gdbarch.h now is - editable and hand-maintained, and the new gdbarch-gen.h file is the - only thing generated by gdbarch.sh. This lets us avoid maintaining - boilerplate in the gdbarch.sh file. - - Note that gdbarch.sh still generates gdbarch.h after this patch. This - makes it easier to re-run when rebasing. This code is removed in a - subsequent patch. - -2021-12-17 Tom Tromey - - Move ordinary gdbarch code to arch-utils - While I think it makes sense to generate gdbarch.c, at the same time I - think it is better for ordinary code to be editable in a C file -- not - as a hunk of C code embedded in the generator. - - This patch moves this sort of code out of gdbarch.sh and gdbarch.c and - into arch-utils.c, then has arch-utils.c include gdbarch.c. - -2021-12-17 Maciej W. Rozycki - - Avoid redundant operations in `fortran_array_walker' - Move inner dimension's element type determination outside the respective - loops in `fortran_array_walker'. The operation is exactly the same with - each iteration, so there is no point in redoing it for each element and - while a smart compiler might be able to move it outside the loop it is - regardless a bad coding style. No functional change. - - Initialize `m_ndimensions' in the member initializer list - Following our coding convention initialize the `m_ndimensions' member in - the member initializer list rather than in the body of the constructor - of the `fortran_array_walker' class. No functional change. - -2021-12-17 Lancelot SIX - Pedro Alves - - gdb/tui: install SIGWINCH only when connected to a TTY - PR26056 reports that when GDB is connected to non-TTY stdin/stdout, it - crashes when it receives a SIGWINCH signal. - - This can be reproduced as follows: - - $ gdb/gdb -nx -batch -ex 'run' --args sleep 60 &1 | cat - - # from another terminal: - $ kill -WINCH %(pidof gdb) - - When doing so, the process crashes in a call to rl_resize_terminal: - - void - rl_resize_terminal (void) - { - _rl_get_screen_size (fileno (rl_instream), 1); - ... - } - - The problem is that at this point rl_instream has the value NULL. - - The rl_instream variable is supposed to be initialized during a call to - readline_initialize_everything, which in a normal startup sequence is - called under this call chain: - - tui_interp::init - tui_ensure_readline_initialized - rl_initialize - readline_initialize_everything - - In tui_interp::init, we have the following sequence: - - tui_initialize_io (); - tui_initialize_win (); // <- Installs SIGWINCH - if (gdb_stdout->isatty ()) - tui_ensure_readline_initialized (); // <- Initializes rl_instream - - This function unconditionally installs the SIGWINCH signal handler (this - is done by tui_initialize_win), and then if gdb_stdout is a TTY it - initializes readline. Therefore, if stdout is not a TTY, SIGWINCH is - installed but readline is not initialized. In such situation - rl_instream stays NULL, and when GDB receives a SIGWINCH it calls its - handler and in fine tries to access rl_instream leading to the crash. - - This patch proposes to fix this issue by installing the SIGWINCH signal - handler only if GDB is connected to a TTY. Given that this - initialization it the only task of tui_initialize_win, this patch moves - tui_initialize_win just after the call to - tui_ensure_readline_initialized. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=26056 - Change-Id: I6458acef7b0d9beda2a10715d0345f02361076d9 - -2021-12-17 Alan Modra - - asan: NULL dereference in bfd_elf_set_group_contents - * elf-bfd.h (struct output_elf_obj_tdata): Make num_section_syms - unsigned. - * elf.c (bfd_elf_set_group_contents): Bounds check sec->index - and check that entry in elf_section_syms for sec is non-NULL. - (_bfd_elf_symbol_from_bfd_symbol): Adjust. - -2021-12-17 Alan Modra - - asan: use after free in _bfd_elf_mips_get_relocated_section_contents - Leaving entries on mips_hi16_list from a previous pass over relocs - leads to confusing bugs. - - * elfxx-mips.c (_bfd_elf_mips_get_relocated_section_contents): - Free mips_hi16_list entries on error exit. - -2021-12-17 Alan Modra - - asan: abort in wasm_scan_name_function_section - Macros like READ_LEB128 in wasm-module.c that alter control flow are - evil. Maintainers will break your code if you have hidden ways to - reach labels. - - * wasm-module.c (wasm_scan_name_function_section): Don't - attempt to bfd_release NULL. - -2021-12-17 Alan Modra - - asan: heap-buffer-overflow in bpf_elf_generic_reloc - The bpf reloc howtos are a bit weird, using bitpos to specify an - offset from r_offset that is outside the size of the reloc as given by - howto.size. That means bfd_get_reloc_size gives the wrong answer for - range checking, and thus bfd_reloc_offset_in_range can't be used. - - * elf64-bpf.c (bpf_elf_generic_reloc): Handle bitpos offset reloc - range checking. - -2021-12-17 Alan Modra - - ubsan: bfd.c:2519:8: shift exponent 34 is too large - * bfd.c (bfd_update_compression_header): Avoid integer overflow. - - asan: buffer overflow in mmo_get_symbols - * mmo.c (mmo_get_symbols): Error on symbol name exceeding max length. - -2021-12-17 Alan Modra - - asan: buffer overflow in elfnn-aarch64.c get_plt_type - We can't assume .dynamic is a multiple of ElfNN_External_Dyn, at least - not when presented with fuzzed object files. - - * elfnn-aarch64.c (get_plt_type): Don't access past end of - improperly sized .dynamic. - -2021-12-17 Alan Modra - - try_build_id_prefix gcc-10 -Wformat-security errors - dwarf.c:11300:3: error: format not a string literal and no format arguments [-Werror=format-security] - 11300 | f += sprintf (f, prefix); - - PR 28697 - * dwarf.c (try_build_id_prefix): Avoid -Wformat-security error. - -2021-12-17 GDB Administrator - - Automatic date update in version.in - -2021-12-16 Nick Clifton - - Fix AVR assembler so that it creates relocs that will work with linker relaxation. - PR 28686 - gas * config/tc-avr.h (tc_fix_adjustable): Define. - * config/tc-avr.c (avr_fix_adjustable): New function. - * testsuite/gas/all/gas.exp: Skip tests that need adjustable fixups. - * testsuite/gas/elf/elf.exp: Likewise. - * testsuite/gas/avr/diffreloc_withrelax.d: Adjust expected output. - * testsuite/gas/avr/pc-relative-reloc.d: Adjust expected output. - - ld * testsuite/ld-avr/avr-prop-7.d: Adjust expected output. - * testsuite/ld-avr/avr-prop-8.d: Likewise. - * testsuite/ld-avr/pr13402.d: Likewise. - -2021-12-16 Nick Clifton - - When loading separate debug info files, also attempt to locate a file based upon the build-id. - PR 28697 - * dwarf.c (load_build_id_debug_file): New function. - (try_build_id_prefix): New function. - (check_for_and_load_links): Call load_build_id_debug_file. - (debug_displays): Add entry for .note.gnu.build-id. - * dwarf.h (enum dwarf_section_display_enum): Add - note_gnu_build_id. - * testsuite/binutils-all/debuginfod.exp (test_fetch_debuglink): - Fix regexp for loads via debuglink section. - -2021-12-16 Richard Sandiford - - arm: Add support for Armv9.1-A to Armv9.3-A - This patch adds AArch32 support for -march=armv9.[123]-a. - The behaviour of the new options can be expressed using a - combination of existing feature flags and tables. - - The cpu_arch_ver entries for ARM_ARCH_V9_2A and ARM_ARCH_V9_3A - are technically redundant but it seemed less surprising to include - them anyway. - - include/ - * opcode/arm.h (ARM_ARCH_V9_1A, ARM_ARCH_V9_2A): New macros. - (ARM_ARCH_V9_3A): Likewise. - - gas/ - * doc/c-arm.texi: Add armv9.1-a, armv9.2-a and armv9.3-a. - * config/tc-arm.c (armv91a_ext_table, armv92a_ext_table): New macros. - (armv93a_ext_table): Likewise. - (arm_archs): Add armv9.1-a, armv9.2-a and armv9.3-a. - (cpu_arch_ver): Add ARM_ARCH_V9_1A, ARM_ARCH_V9_2A and ARM_ARCH_V9_3A. - * NEWS: Mention the above. - * testsuite/gas/arm/attr-march-armv9_1-a.d: New test. - * testsuite/gas/arm/attr-march-armv9_2-a.d: Likewise. - * testsuite/gas/arm/attr-march-armv9_3-a.d: Likewise. - * testsuite/gas/arm/bfloat16-armv9.1-a.d: Likewise. - * testsuite/gas/arm/bfloat16-armv9.2-a.d: Likewise. - * testsuite/gas/arm/bfloat16-armv9.3-a.d: Likewise. - * testsuite/gas/arm/i8mm-armv9.1-a.d: Likewise. - * testsuite/gas/arm/i8mm-armv9.2-a.d: Likewise. - * testsuite/gas/arm/i8mm-armv9.3-a.d: Likewise. - -2021-12-16 Richard Sandiford - - arm: Add support for Armv8.7-A and Armv8.8-A - This patch adds AArch32 support for -march=armv8.[78]-a. - The behaviour of the new options can be expressed using a - combination of existing feature flags and tables. - - The cpu_arch_ver entries are technically redundant but - it seemed less surprising to include them anyway. - - include/ - * opcode/arm.h (ARM_ARCH_V8_7A, ARM_ARCH_V8_8A): New macros. - - gas/ - * doc/c-arm.texi: Add armv8.7-a and armv8.8-a. - * config/tc-arm.c (armv87a_ext_table, armv88a_ext_table): New macros. - (arm_archs): Add armv8.7-a and armv8.8-a. - (cpu_arch_ver): Add ARM_ARCH_V8_7A and ARM_ARCH_V8_8A. - * NEWS: Mention the above. - * testsuite/gas/arm/attr-march-armv8_7-a.d: New test. - * testsuite/gas/arm/attr-march-armv8_8-a.d: Likewise. - * testsuite/gas/arm/bfloat16-armv8.7-a.d: Likewise. - * testsuite/gas/arm/bfloat16-armv8.8-a.d: Likewise. - * testsuite/gas/arm/i8mm-armv8.7-a.d: Likewise. - * testsuite/gas/arm/i8mm-armv8.8-a.d: Likewise. - -2021-12-16 Richard Sandiford - - aarch64: Add support for Armv9.1-A to Armv9.3-A - This patch adds AArch64 support for -march=armv9.[123]-a. - The behaviour of the new options can be expressed using a - combination of existing feature flags, so we don't need to - eat into the vanishing number of spare AARCH64_FEATURE_* bits. - Hoewver, it was more convenient to separate out the |s of - feature flags so that Armv9.1-A could reuse the set for - Armv8.6-A, and so on. - - include/ - * opcode/aarch64.h (AARCH64_ARCH_V8_FEATURES): New macro, - split out from... - (AARCH64_ARCH_V8): ...here. - (AARCH64_ARCH_V8_1_FEATURES): New macro, split out from... - (AARCH64_ARCH_V8_1): ...here. - (AARCH64_ARCH_V8_2_FEATURES): New macro, split out from... - (AARCH64_ARCH_V8_2): ...here. - (AARCH64_ARCH_V8_3_FEATURES): New macro, split out from... - (AARCH64_ARCH_V8_3): ...here. - (AARCH64_ARCH_V8_4_FEATURES): New macro, split out from... - (AARCH64_ARCH_V8_4): ...here. - (AARCH64_ARCH_V8_5_FEATURES): New macro, split out from... - (AARCH64_ARCH_V8_5): ...here. - (AARCH64_ARCH_V8_6_FEATURES): New macro, split out from... - (AARCH64_ARCH_V8_6): ...here. - (AARCH64_ARCH_V8_7_FEATURES): New macro, split out from... - (AARCH64_ARCH_V8_7): ...here. - (AARCH64_ARCH_V8_8_FEATURES): New macro, split out from... - (AARCH64_ARCH_V8_8): ...here. - (AARCH64_ARCH_V9_FEATURES): New macro, split out from... - (AARCH64_ARCH_V9): ...here. - (AARCH64_ARCH_V9_1_FEATURES, AARCH64_ARCH_V9_1): New macros. - (AARCH64_ARCH_V9_2_FEATURES, AARCH64_ARCH_V9_2): New macros. - (AARCH64_ARCH_V9_3_FEATURES, AARCH64_ARCH_V9_3): New macros. - - gas/ - * doc/c-aarch64.texi: Add armv9.1-a, armv9-2-a and armv9.3-a. - * config/tc-aarch64.c (aarch64_archs): Likewise. - * NEWS: Mention the above. - * testsuite/gas/aarch64/armv9_invalid.d, - testsuite/gas/aarch64/armv9_invalid.s, - testsuite/gas/aarch64/armv9_invalid.l: New test. - * testsuite/gas/aarch64/armv9_1.d, - testsuite/gas/aarch64/armv9_1.s: Likewise. - * testsuite/gas/aarch64/armv9_1_invalid.d, - testsuite/gas/aarch64/armv9_1_invalid.s, - testsuite/gas/aarch64/armv9_1_invalid.l: Likewise. - * testsuite/gas/aarch64/armv9_2.d, - testsuite/gas/aarch64/armv9_2.s: Likewise. - * testsuite/gas/aarch64/armv9_2_invalid.d, - testsuite/gas/aarch64/armv9_2_invalid.s, - testsuite/gas/aarch64/armv9_2_invalid.l: Likewise. - * testsuite/gas/aarch64/armv9_3.d, - testsuite/gas/aarch64/armv9_3.s: Likewise. - -2021-12-16 Nelson Chu - - RISC-V: Support svinval extension with frozen version 1.0. - According to the privileged spec, there are five new instructions for - svinval extension. Two of them (HINVAL.VVMA and HINVAL.GVMA) need to - enable the hypervisor extension. But there is no implementation of - hypervisor extension in mainline for now, so let's consider the related - issues later. - - 31..25 24..20 19..15 14..12 11...7 6..2 1..0 - sinval.vma 0001011 rs2 rs1 000 00000 11100 11 - sfence.w.inval 0001100 00000 00000 000 00000 11100 11 - sfence.inval.ir 0001100 00001 00000 000 00000 11100 11 - hinval.vvma 0010011 rs2 rs1 000 00000 11100 11 - hinval.gvma 0110011 rs2 rs1 000 00000 11100 11 - - This patch is cherry-picked from the riscv integration branch since the - svinval extension is frozen for now. Besides, we fix the funct7 encodings - of hinval.vvma and hinval.gvma, from 0x0011011 and 0x0111011 to 0x0010011 - and 0x0110011. - - bfd/ - * elfxx-riscv.c (riscv_supported_std_s_ext): Added svinval. - (riscv_multi_subset_supports): Handle INSN_CLASS_SVINVAL. - gas/ - * testsuite/gas/riscv/svinval.d: New testcase. - * testsuite/gas/riscv/svinval.s: Likewise. - include/ - * opcode/riscv-opc.h: Added encodings for svinval. - * opcode/riscv.h (enum riscv_insn_class): Added INSN_CLASS_SVINVAL. - opcodes/ - * riscv-opc.c (riscv_opcodes): Added svinval instructions. - -2021-12-16 Mike Frysinger - - sim: mips/or1k: drop redundant arg to bitsize macro - These are just using the default behavior for the 3rd arg, so drop - it to make it more clear. This also makes them match all other - ports that only use the first 2 arguments. - -2021-12-16 Mike Frysinger - - bfd: unify texi generation rules - The logic between these rules are extremely similar, so unify them - into a single variable by leveraging make $@ and $< variables. - - Also add automake silent rule support while we're here. - -2021-12-16 Mike Frysinger - - sim: fix mingw builds with replacement gnulib open - The header shuffling in here broke the workaround for gnulib defining - "open". Move it back before the sim-specific includes to fix. This - is because the callback struct in the headers has an "open" member and - this file tries to call that. - -2021-12-16 Sandra Loosemore - - Adjust compare_link_order for unstable qsort - In a cross toolchain for nios2-elf target and x86_64-w64-mingw32 host - using binutils 2.37, we observed a failure that didn't show up on - x86_64-linux-gnu host: testcase pr25490-5.s was failing with - - C:\path\to\nios2-elf-ld.exe: looping in map_segments - FAIL: __patchable_function_entries section 5 - - * ldelfgen.c (compare_link_order): Don't use section id in - sorting. Keep original ordering instead. Update comments. - -2021-12-16 Alan Modra - - Re: Fix an undefined behaviour in the BFD library's DWARF parser - Using an unsigned int cast (to 32 bits) on a pointer difference (of - possibly 64 bits) is wrong. Even though it will work on all real - object files, the fuzzers will eventually find this hole. - - PR 28687 - * dwarf1.c (parse_die): Cast pointer difference to size_t. - Catch another possible pointer overflow. - -2021-12-16 Simon Marchi - - gdb: re-format with black 21.12b0 - Run black 21.12b0 on gdb/, there is a single whitespace change. I will - update the wiki [1] in parallel to bump the version of black to 21.12b0. - - [1] https://sourceware.org/gdb/wiki/Internals%20GDB-Python-Coding-Standards - - Change-Id: Ib3b859e3506c74a4f15d16f1e44ef402de3b98e2 - -2021-12-16 Simon Marchi - - gdb: re-format with black 21.9b0 - Run black 21.9b0 on gdb/ (this is the version currently mentioned on the - wiki [1], the subsequent commit will bump that version). - - [1] https://sourceware.org/gdb/wiki/Internals%20GDB-Python-Coding-Standards - - Change-Id: I5ceaab42c42428e053e2572df172aa42a88f0f86 - -2021-12-16 GDB Administrator - - Automatic date update in version.in - -2021-12-15 Alan Modra - - PR28691, validate dwarf attribute form - PR28691 is a fuzzing PR that triggers a non-problem of "output changes - per run" with PIEs and/or different compilers. I've closed similar - PRs before as wontfix, but I guess there will be no end of this type - of PR. The trigger is an attribute that usually takes one of the - offset/constant reference DW_FORMs being given an indexed string - DW_FORM. The bfd reader doesn't support indexed strings and returns - an error string instead. The address of the string varies with PIE - runs and/or compiler, and we allow that address to appear in output. - Fix this by validating integer attribute forms, as we do for string - form attributes. - - PR 28691 - * dwarf2.c (is_str_attr): Rename to.. - (is_str_form): ..this. Change param type. Update calls. - (is_int_form): New function. - (read_attribute_value): Handle DW_FORM_addrx2. - (find_abstract_instance): Validate form when using attr.u.val. - (scan_unit_for_symbols, parse_comp_unit): Likewise. - -2021-12-15 Luis Machado - - New --enable-threading configure option to control use of threads in GDB/GDBserver - Add the --enable-threading configure option so multithreading can be disabled - at configure time. This is useful for statically-linked builds of - GDB/GDBserver, since the thread library doesn't play well with that setup. - - If you try to run a statically-linked GDB built with threading, it will crash - when setting up the number of worker threads. - - This new option is also convenient when debugging GDB in a system with lots of - threads, where the thread discovery code in GDB will emit too many messages, - like so: - - [New Thread 0xfffff74d3a50 (LWP 2625599)] - - If you have X threads, that message will be repeated X times. - - The default for --enable-threading is "yes". - -2021-12-15 Nikita Popov - - Fix an undefined behaviour in the BFD library's DWARF parser. - PR 28687 - * dwarf1.c (parse_die): Fix undefined behaviour in range tests. - -2021-12-15 Alan Modra - - PR28694, Out-of-bounds write in stab_xcoff_builtin_type - PR 28694 - * stabs.c (stab_xcoff_builtin_type): Make typenum unsigned. - Negate typenum earlier, simplifying bounds checking. Correct - off-by-one indexing. Adjust switch cases. - -2021-12-15 GDB Administrator - - Automatic date update in version.in - -2021-12-14 Alan Modra - - loongarch32 build failure on 32-bit host - gas/config/tc-loongarch.c: In function ‘assember_macro_helper’: - gas/config/tc-loongarch.c:915:28: error: right shift count >= width of type [-Werror=shift-count-overflow] - 915 | hi32 = insn->args[1] >> 32; - | ^~ - - One possible fix is to make offsetT a 64-bit type for loongarch32. - This also makes bfd/targmatch.h (generated from bfd/config.bfd) - consistent since the loongarch32 match is inside #ifdef BFD64. - - * config.bfd (loongarch32-*): Set want64. - -2021-12-14 Alan Modra - - loongarch64 build failure on 32-bit host - gas/config/tc-loongarch.c: In function ‘loongarch_args_parser_can_match_arg_helper’: - gas/config/tc-loongarch.c:661:13: error: cast from pointer to integer of different size [-Werror=pointer - -to-int-cast] - 661 | imm = (offsetT) str_hash_find (r_htab, arg); - | ^ - - Cast it to the correct size int, relying on normal integer promotions - if offsetT is larger than a pointer. - - * config/tc-loongarch.c (loongarch_args_parser_can_match_arg_helper): - Cast return from str_hash_find to intptr_t, not offsetT. - -2021-12-14 Alan Modra - - XCOFF C_STSYM test failure on 32-bit host - This test was failing here and on another similar symbol: - [ 4](sec 1)(fl 0x00)(ty 0)(scl 143) (nx 0) 0x05d1745d11745d21 .bs - where correct output is - [ 4](sec 1)(fl 0x00)(ty 0)(scl 143) (nx 0) 0x000000000000000a .bs - - The problem is caused by a 32-bit host pointer being sign-extended - when stored into a 64-bit bfd_vma, and then that value not being - trimmed back to 32 bits when used. The following belt-and-braces - patch fixes both the store and subsequent reads. - - * coffcode.h (coff_slurp_symbol_table): Do not sign extend - when storing a host pointer to syment.n_value. - * coffgen.c (coff_get_symbol_info): Cast syment.n_value to a - bfd_hostptr_t before using in arithmetic. - (coff_print_symbol): Likewise. - -2021-12-14 Simon Marchi - - gdbserver/tracepoint.cc: use snprintf in gdb_agent_socket_init - If we modify tracepoint.cc to try to use a too long unix socket name, - for example by modifying SOCK_DIR to be: - - #define SOCK_DIR "/tmp/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut" - - ... trying to start an application with libinproctrace.so loaded - crashes: - - $ LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.6:./libinproctrace.so /bin/ls - /home/smarchi/src/binutils-gdb/gdbserver/../gdbsupport/common-utils.cc:69: A problem internal to GDBserver in-process agent has been detected. - xsnprintf: Assertion `ret < size' failed. - - Looking at the rest of the socket initialization code, the intent seems - to be that if something goes wrong, we warn but let the program - execute. So crashing on this failed assertions seems against the intent. - - Commit 6cebaf6e1ae4 ("use xsnprintf instead of snprintf.") changed this - code to use xsnprintf instead of snprintf, introducing this assertion. - Before that, snprintf would return a value bigger that UNIX_PATH_MAX and - the "if" after would catch it and emit a warning, which is exactly what - we want. That change was done because LynxOS didn't have snprintf. - Since LynxOS isn't supported anymore, we can simply revert to use - snprintf there. - - With this patch, we get a warning (printed by the caller of - gdb_agent_socket_init), but the program keeps executing: - - $ LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.6:./libinproctrace.so /bin/ls - ipa: could not create sync socket - ... - - Change-Id: I78bca52d5dc3145335abeae45a42052701e3f5dd - -2021-12-14 Simon Marchi - - gdbserver/tracepoint.cc: work around -Wstringop-truncation error - When building gdb with on AArch64 with g++ 11.1.0 (and some preceding - versions too), -O2 and -fsanitize=address, I get this error. - - CXX tracepoint-ipa.o - cc1plus: warning: command-line option ‘-Wmissing-prototypes’ is valid for C/ObjC but not for C++ - In file included from /usr/include/string.h:519, - from ../gnulib/import/string.h:41, - from /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/common-defs.h:95, - from /home/simark/src/binutils-gdb/gdbserver/server.h:22, - from /home/simark/src/binutils-gdb/gdbserver/tracepoint.cc:19: - In function ‘char* strncpy(char*, const char*, size_t)’, - inlined from ‘int init_named_socket(const char*)’ at /home/simark/src/binutils-gdb/gdbserver/tracepoint.cc:6902:11, - inlined from ‘int gdb_agent_socket_init()’ at /home/simark/src/binutils-gdb/gdbserver/tracepoint.cc:6953:26, - inlined from ‘void* gdb_agent_helper_thread(void*)’ at /home/simark/src/binutils-gdb/gdbserver/tracepoint.cc:7204:41: - /usr/include/bits/string_fortified.h:95:34: error: ‘char* __builtin_strncpy(char*, const char*, long unsigned int)’ output may be truncated copying 107 bytes from a string of length 107 [-Werror=stringop-truncation] - 95 | return __builtin___strncpy_chk (__dest, __src, __len, - | ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~ - 96 | __glibc_objsize (__dest)); - | ~~~~~~~~~~~~~~~~~~~~~~~~~ - - Note that _FORTIFY_SOURCE changes the message a bit, but I get a similar - error if I use -D_FORTIFY_SOURCE=0. - - I am pretty sure it's spurious and might be related to this GCC bug: - - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88780 - - From what I can see, we are copying from a static 108 bytes long buffer - (the global array agent_socket_name) to a 108 bytes long array, - sockaddr_un::sun_path. I don't see anything wrong. - - Still, it would make things easier if we didn't see this error. Change - the code to check that the source string length is smaller than the - destination buffer (including space for the NULL byte) and use strcpy. - - For anybody who would like to try to reproduce, the full command line - is: - - g++ -I. -I/home/simark/src/binutils-gdb/gdbserver -I/home/simark/src/binutils-gdb/gdbserver/../gdb/regformats -I/home/simark/src/binutils-gdb/gdbserver/.. -I/home/simark/src/binutils-gdb/gdbserver/../include -I/home/simark/src/binutils-gdb/gdbserver/../gdb -I/home/simark/src/binutils-gdb/gdbserver/../gnulib/import -I../gnulib/import -I/home/simark/src/binutils-gdb/gdbserver/.. -I.. -pthread -Wall -Wpointer-arith -Wno-unused -Wunused-value -Wunused-variable -Wunused-function -Wno-switch -Wno-char-subscripts -Wempty-body -Wunused-but-set-parameter -Wunused-but-set-variable -Wno-sign-compare -Wno-error=maybe-uninitialized -Wno-mismatched-tags -Wsuggest-override -Wimplicit-fallthrough=3 -Wduplicated-cond -Wshadow=local -Wdeprecated-copy -Wdeprecated-copy-dtor -Wredundant-move -Wmissing-declarations -Wmissing-prototypes -Wstrict-null-sentinel -Wformat -Wformat-nonliteral -Werror -DGDBSERVER -DCONFIG_UST_GDB_INTEGRATION -Drpl_strerror_r=strerror_r -Drpl_free=free -fPIC -DIN_PROCESS_AGENT -fvisibility=hidden -g3 -O2 -fsanitize=address -c -o tracepoint-ipa.o -MT tracepoint-ipa.o -MMD -MP -MF ./.deps/tracepoint-ipa.Tpo /home/simark/src/binutils-gdb/gdbserver/tracepoint.cc - - Change-Id: I18e86c0487feead7e7677e69398405e7057cf464 - -2021-12-14 Simon Marchi - - bfd: fix -Wunused errors with clang 13+ - Clang 13 and 14 produce some -Wunused-but-set-{variable,parameter} for - situations where gcc doesn't. In particular, when a variable is set and - then used in a way to update its own value. For example, if `i` is only - used in this way: - - int i = 2; - i++; - i = i + 1; - - gcc won't warn, but clang will. - - Fix all such errors found in an --enable-targets=all build. It would be - important for somebody who knows what they're doing to just make sure - that these variables can indeed be deleted, and that there a no cases - where it's a bug, and the variable should actually be used. - - The first instance of this error fix by this patch is: - - CC elf32-score.lo - /home/simark/src/binutils-gdb/bfd/elf32-score.c:450:11: error: variable 'relocation' set but not used [-Werror,-Wunused-but-set-variable] - bfd_vma relocation; - ^ - - Change-Id: I2f233ce20352645cf388aff3dfa08a651d21a6b6 - -2021-12-14 Andrew Burgess - - gdb/mi: rename build_table to add_builtin_mi_commands - Just give the function build_table a more descriptive name. There - should be no user visible changes after this commit. - -2021-12-14 Jan Vrany - - gdb/mi: rename mi_cmd to mi_command - Just give this class a new name, more inline with the name of the - sub-classes. I've also updated mi_cmd_up to mi_command_up in - mi-cmds.c inline with this new naming scheme. - - There should be no user visible changes after this commit. - -2021-12-14 Jan Vrany - - gdb/mi: use separate classes for different types of MI command - This commit changes the infrastructure in mi-cmds.{c,h} to add new - sub-classes for the different types of MI command. Instances of these - sub-classes are then created and added into mi_cmd_table. - - The existing mi_cmd class becomes the abstract base class, this has an - invoke method and takes care of the suppress notifications handling, - before calling a do_invoke virtual method which is implemented by all - of the sub-classes. - - There's currently two different sub-classes, one of pure MI commands, - and a second for MI commands that delegate to CLI commands. - - There should be no user visible changes after this commit. - -2021-12-14 Andrew Burgess - - gdb/mi: int to bool conversion in mi_execute_cli_command - Change an argument of mi_execute_cli_command from int to bool. Update - the callers to take this into account. Within mi_execute_cli_command, - update a comparison of a pointer to 0 with a comparison to nullptr, - and add an assert, if we are not using the argument string then the - string should be nullptr. Also removed a cryptic 'gdb_????' comment, - which isn't really helpful. - - There should be no user visible changes after this commit. - -2021-12-14 Jan Vrany - - gdb/mi: use std::map for MI commands in mi-cmds.c - This changes the hashmap used in mi-cmds.c from a custom structure to - std::map. Not only is replacing a custom container with a standard - one an improvement, but using std::map will make it easier to - dynamically add commands; which is something that is planned for a - later series, where we will allow MI commands to be implemented in - Python. - - There should be no user visible changes after this commit. - -2021-12-14 Jan Vrany - - gdb/mi: rename mi_lookup to mi_cmd_lookup - Lets give this function a more descriptive name. I've also improved - the comments in the header and source files. - - There should be no user visible changes after this commit. - -2021-12-14 Nelson Chu - - RISC-V: Added ld testcases for the medlow and medany code models. - There are two linker scripts, code-model-01.ld and code-model-02.ld, - which are corresponding to the two different memory layouts, - - * code-model-01.ld: the text section is in the 32-bit address range, but - the data section is far away from the text section, which means the data - section is over the 32-bit address range. - - * code-model-02.ld: the text section is over the 32-bit address range, but - the data section is placed nearly zero address. - - We use the two linker scripts, to test the current medlow and medany behaviors - of GNU ld, including the weak symbol references and the relaxations behaviors. - Besides, these testcases also show the limits of the current medlow and medany - code models, that is - we may get the truncated to fit errors when linking - with the above two linker scripts. - - ld/ - * testsuite/ld-riscv-elf/code-model-01.ld: New testcases to test the - behaviors of the current medlow and medany code models. - * testsuite/ld-riscv-elf/code-model-02.ld: Likewise. - * testsuite/ld-riscv-elf/code-model-medany-01.d: Likewise. - * testsuite/ld-riscv-elf/code-model-medany-02.d: Likewise. - * testsuite/ld-riscv-elf/code-model-medany-weakref-01.d: Likewise. - * testsuite/ld-riscv-elf/code-model-medany-weakref-02.d: Likewise. - * testsuite/ld-riscv-elf/code-model-medlow-01.d: Likewise. - * testsuite/ld-riscv-elf/code-model-medlow-02.d: Likewise. - * testsuite/ld-riscv-elf/code-model-medlow-weakref-01.d: Likewise. - * testsuite/ld-riscv-elf/code-model-medlow-weakref-02.d: Likewise. - * testsuite/ld-riscv-elf/code-model-relax-medany-01.d: Likewise. - * testsuite/ld-riscv-elf/code-model-relax-medany-02.d: Likewise. - * testsuite/ld-riscv-elf/code-model-relax-medany-weakref-01.d: Likewise. - * testsuite/ld-riscv-elf/code-model-relax-medany-weakref-02.d: Likewise. - * testsuite/ld-riscv-elf/code-model-relax-medlow-01.d: Likewise. - * testsuite/ld-riscv-elf/code-model-relax-medlow-02.d: Likewise. - * testsuite/ld-riscv-elf/code-model-relax-medlow-weakref-01.d: Likewise. - * testsuite/ld-riscv-elf/code-model-relax-medlow-weakref-02.d: Likewise. - * testsuite/ld-riscv-elf/code-model.s: Likewise. - * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated. - -2021-12-14 GDB Administrator - - Automatic date update in version.in - -2021-12-13 H.J. Lu - - x86: Adjust linker tests for --disable-separate-code - Adjust linker tests for linker configured with --disable-separate-code: - - 1. Update expected outputs. - 2. Pass -z max-page-size=0x1000 -z separate-code" to linker. - - * testsuite/ld-i386/report-reloc-1.l: Updated. - * testsuite/ld-x86-64/report-reloc-1.l: Likewise. - * testsuite/ld-x86-64/pe-x86-64.exp: Pass - "-z max-page-size=0x1000 -z separate-code" to linker. - * testsuite/ld-x86-64/pr19609-4e.d: Likewise. - * testsuite/ld-x86-64/pr19609-6a.d: Likewise. - * testsuite/ld-x86-64/pr19609-6b.d: Likewise. - * testsuite/ld-x86-64/pr19609-7b.d: Likewise. - * testsuite/ld-x86-64/pr19609-7d.d: Likewise. - -2021-12-13 Carl Love - - gdb: Powerpc mark xfail in gdb.base/catch-syscall.exp - Powerpc is not reporting the - - Catchpoint 1 (returned from syscall execve), .... - - as expected. The issue appears to be with the kernel not returning the - expected result. This patch marks the test failure as an xfail. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28623 - -2021-12-13 Andrew Burgess - - gdb: improve reuse of value contents when fetching array elements - While working on a Python script, which was interacting with a remote - target, I noticed some weird slowness in GDB. In my program I had a - structure something like this: - - struct foo_t - { - int array[5]; - }; - - struct foo_t global_foo; - - Then in the Python script I was fetching a complete copy of global - foo, like: - - val = gdb.parse_and_eval('global_foo') - val.fetch_lazy() - - Then I would work with items in foo_t.array, like: - - print(val['array'][1]) - - I called the fetch_lazy method specifically because I knew I was going - to end up accessing almost all of the contents of val, and so I wanted - GDB to do a single remote protocol call to fetch all the contents in - one go, rather than trying to do lazy fetches for a couple of bytes at - a time. - - What I observed was that, after the fetch_lazy call, GDB does, - correctly, fetch the entire contents of global_foo, including all of - the contents of array, however, when I access val.array[1], GDB still - goes and fetches the value of this element from the remote target. - - What's going on is that in valarith.c, in value_subscript, for C like - languages, we always end up treating the array value as a pointer, and - then doing value_ptradd, and value_ind, the second of these calls - always returns a lazy value. - - My guess is that this approach allows us to handle indexing off the - end of an array, when working with zero element arrays, or when - indexing a raw pointer as an array. And, I agree, that in these - cases, where, even when the original value is non-lazy, we still will - not have the content of the array loaded, we should be using the - value_ind approach. - - However, for cases where we do have the array contents loaded, and we - do know the bounds of the array, I think we should be using - value_subscripted_rvalue, which is what we use for non C like - languages. - - One problem I did run into, exposed by gdb.base/charset.exp, was that - value_subscripted_rvalue stripped typedefs from the element type of - the array, which means the value returned will not have the same type - as an element of the array, but would be the raw, non-typedefed, - type. In charset.exp we got back an 'int' instead of a - 'wchar_t' (which is a typedef of 'int'), and this impacts how we print - the value. Removing typedefs from the resulting value just seems - wrong, so I got rid of that, and I don't see any test regressions. - - With this change in place, my original Python script is now doing no - additional memory accesses, and its performance increases about 10x! - -2021-12-13 Andrew Burgess - - gdb: update gdb-gdb.py.in for latest changes to struct field - This commit updates uses of 'loc' and 'loc_kind' to 'm_loc' and - 'm_loc_kind' respectively, in gdb-gdb.py.in, which is required after - this commit: - - commit cd3f655cc7a55437a05aa8e7b1fcc9051b5fe404 - Date: Thu Sep 30 22:38:29 2021 -0400 - - gdb: add accessors for field (and call site) location - - I have also incorporated this change: - - https://sourceware.org/pipermail/gdb-patches/2021-September/182171.html - - Which means we print 'm_name' instead of 'name' when displaying the - 'm_name' member variable. - - Finally, I have also added support for the new TYPE_SPECIFIC_INT - fields, which were added with this commit: - - commit 20a5fcbd5b28cca88511ac5a9ad5e54251e8fa6d - Date: Wed Sep 23 09:39:24 2020 -0600 - - Handle bit offset and bit size in base types - - I updated the gdb.gdb/python-helper.exp test to cover all of these - changes. - -2021-12-13 Tankut Baris Aktemur - - gdbserver/linux-low: replace direct assignment to current_thread - Use scoped_restore_current_thread and switch_to_thread in - linux_process_target::wait_for_sigstop. - -2021-12-13 Tankut Baris Aktemur - - gdbserver: replace direct assignments to current_thread - Replace the direct assignments to current_thread with - switch_to_thread. Use scoped_restore_current_thread when appropriate. - There is one instance remaining in linux-low.cc's wait_for_sigstop. - This will be handled in a separate patch. - - Regression-tested on X86-64 Linux using the native-gdbserver and - native-extended-gdbserver board files. - -2021-12-13 Tankut Baris Aktemur - - gdbserver: introduce scoped_restore_current_thread and switch_to_thread - Introduce a class for restoring the current thread and a function to - switch to the given thread. This is a preparation for a refactoring - that aims to remove direct assignments to 'current_thread'. - -2021-12-13 Andrew Burgess - - gdb: make post_startup_inferior a virtual method on inf_ptrace_target - While working on a later patch that required me to understand how GDB - starts up inferiors, I was confused by the - target_ops::post_startup_inferior method. - - The post_startup_inferior target function is only called from - inf_ptrace_target::create_inferior. - - Part of the target class hierarchy looks like this: - - inf_child_target - | - '-- inf_ptrace_target - | - |-- linux_nat_target - | - |-- fbsd_nat_target - | - |-- nbsd_nat_target - | - |-- obsd_nat_target - | - '-- rs6000_nat_target - - Every sub-class of inf_ptrace_target, except rs6000_nat_target, - implements ::post_startup_inferior. The rs6000_nat_target picks up - the implementation of ::post_startup_inferior not from - inf_ptrace_target, but from inf_child_target. - - No descendent of inf_child_target, outside the inf_ptrace_target - sub-tree, implements ::post_startup_inferior, which isn't really - surprising, as they would never see the method called (remember, the - method is only called from inf_ptrace_target::create_inferior). - - What I find confusing is the role inf_child_target plays in - implementing, what is really a helper function for just one of its - descendents. - - In this commit I propose that we formally make ::post_startup_inferior - a helper function of inf_ptrace_target. To do this I will remove the - ::post_startup_inferior from the target_ops API, and instead make this - a protected, pure virtual function on inf_ptrace_target. - - I'll remove the empty implementation of ::post_startup_inferior from - the inf_child_target class, and add a new empty implementation to the - rs6000_nat_target class. - - All the other descendents of inf_ptrace_target already provide an - implementation of this method and so don't need to change beyond - making the method protected within their class declarations. - - To me, this makes much more sense now. The helper function, which is - only called from within the inf_ptrace_target class, is now a part of - the inf_ptrace_target class. - - The only way in which this change is visible to a user is if the user - turns on 'set debug target 1'. With this debug flag on, prior to this - patch the user would see something like: - - -> native->post_startup_inferior (...) - <- native->post_startup_inferior (2588939) - - After this patch these lines are no longer present, as the - post_startup_inferior is no longer a top level target method. For me, - this is an acceptable change. - -2021-12-13 Andrew Burgess - - gdb: have mips_nbsd_nat_target inherit from nbsd_nat_target - While working on another patch I had reason to look at - mips-netbsd-nat.c, and noticed that the class mips_nbsd_nat_target - inherits directly from inf_ptrace_target. - - This is a little strange as alpha_bsd_nat_target, - arm_netbsd_nat_target, hppa_nbsd_nat_target, m68k_bsd_nat_target, - ppc_nbsd_nat_target, sh_nbsd_nat_target, and vax_bsd_nat_target all - inherit from nbsd_nat_target. - - Originally, in this commit: - - commit f6ac5f3d63e03a81c4ff3749aba234961cc9090e - Date: Thu May 3 00:37:22 2018 +0100 - - Convert struct target_ops to C++ - - When the target tree was converted to C++, all of the above classes - inherited from inf_ptrace_target except for hppa_nbsd_nat_target, - which was the only class that originally inherited from - nbsd_nat_target. - - Later on all the remaining targets (except mips) were converted to - inherit from nbsd_nat_target, these are the commits: - - commit 4fed520be264b60893aa674071947890f8172915 - Date: Sat Mar 14 16:05:24 2020 +0100 - - Inherit alpha_netbsd_nat_target from nbsd_nat_target - - commit 6018d381a00515933016c539d2fdc18ad0d304b8 - Date: Sat Mar 14 14:50:51 2020 +0100 - - Inherit arm_netbsd_nat_target from nbsd_nat_target - - commit 01a801176ea15ddfc988cade2e3d84c3b0abfec3 - Date: Sat Mar 14 16:54:42 2020 +0100 - - Inherit m68k_bsd_nat_target from nbsd_nat_target - - commit 9faa006d11a5e08264a007463435f84b77864c9c - Date: Thu Mar 19 14:52:57 2020 +0100 - - Inherit ppc_nbsd_nat_target from nbsd_nat_target - - commit 9809762324491b851332ce600ae9bde8dd34f601 - Date: Tue Mar 17 15:07:39 2020 +0100 - - Inherit sh_nbsd_nat_target from nbsd_nat_target - - commit d5be5fa4207da00d039a1d5a040ba316e7092cbd - Date: Sat Mar 14 13:21:58 2020 +0100 - - Inherit vax_bsd_nat_target from nbsd_nat_target - - I could only find mailing list threads for ppc and sh in the archive , - and unfortunately, none of the commits has any real detail that might - explain why mips was missed out, the only extra context I could find - was this message: - - https://sourceware.org/pipermail/gdb-patches/2020-March/166853.html - - Which says that "proper" OS support is going to be added to - nbsd_nat_target, hence the need to inherit from that class. - - My guess is that leaving mips_nbsd_nat_target unchanged was an - oversight, so, in this commit, I propose changing mips_nbsd_nat_target - to inherit from nbsd_nat_target just like all the other nbsd targets. - - My motivation for this patch relates to the post_startup_inferior - target method. In a future commit I want to change how this method is - handled. Currently the mips_nbsd_nat_target will pick up the empty - implementation of inf_child_target::post_startup_inferior rather than - the version in netbsd-nat.c. This feels like a bug to me, as surely, - enabling of proc events is something that would need to be done for - all netbsd targets, regardless of architecture. - - In my future patch I have a choice then, either (a) add a new, empty - implementation of post_startup_inferior to mips_nbsd_nat_target, - or (b) this commit, have mips_nbsd_nat_target inherit from - nbsd_nat_target. Option (b) seems like the right way to go, hence, - this commit. - - I've done absolutely no testing for this change, not even building it, - as that would require at least an environment in which I can x-build - mips-netbsd applications, which I have no idea how to set up. - -2021-12-13 Andrew Burgess - - gdb: only include mips and riscv targets if building with 64-bit bfd - While testing another patch I was trying to build different - configurations of GDB, and, during one test build I ran into a - problem, I configured with `--enable-targets=all - --host=i686-w64-mingw32` and saw this error while linking GDB: - - .../i686-w64-mingw32/bin/ld: mips-tdep.o: in function `mips_gdbarch_init': - .../src/gdb/mips-tdep.c:8730: undefined reference to `disassembler_options_mips' - .../i686-w64-mingw32/bin/ld: riscv-tdep.o: in function `riscv_gdbarch_init': - .../src/gdb/riscv-tdep.c:3851: undefined reference to `disassembler_options_riscv' - - So the `disassembler_options_mips` and `disassembler_options_riscv` - symbols are missing. - - This turns out to be because mips-dis.c and riscv-dis.c, in which - these symbols are defined, are in the TARGET64_LIBOPCODES_CFILES list - in opcodes/Makefile.am, these files are only built when we are - building with a 64-bit bfd. - - If we look further, into bfd/Makefile.am, we can see that all the - files matching elf*-riscv.lo are in the BFD64_BACKENDS list, as are - the elf*-mips.lo files, and (I know because I tried), the two - disassemblers do, not surprisingly, depend on features supplied from - libbfd. - - So, though we can build most of GDB just fine for riscv and mips with - a 32-bit bfd, if I understand correctly, the final GDB - executable (assuming we could get it to link) would not understand - these architectures at the bfd level, nor would there be any - disassembler available. This sounds like a pretty useless GDB to me. - - So, in this commit, I move the riscv and mips targets into GDB's list - of targets that require a 64-bit bfd. After this I can build GDB just - fine with the configure options given above. - - This was discussed on the mailing list in a couple of threads: - - https://sourceware.org/pipermail/gdb-patches/2021-December/184365.html - https://sourceware.org/pipermail/binutils/2021-November/118498.html - - and it is agreed, that it is unfortunate that the 32-bit riscv and - 32-bit mips targets require a 64-bit bfd. If in the future this - situation ever changes then it would be expected that some (or all) of - this patch would be reverted. Until then though, this patch allows - GDB to build when configured with --enable-targets=all, and when using - a 32-bit libbfd. - -2021-12-13 GDB Administrator - - Automatic date update in version.in - -2021-12-12 Tom Tromey - - C++-ify path substitution code - I found some uses of xfree in the path substitution code in source.c. - C++-ifying struct substitute_path_rule both simplifies the code and - removes manual memory management. - - Regression tested on x86-64 Fedora 34. - -2021-12-12 GDB Administrator - - Automatic date update in version.in - -2021-12-11 Alan Modra - - [GOLD] PowerPC64 @notoc in non-power10 code - Gold version of commit 7aba54da42. - - elfcpp/ - * powerpc.h (R_PPC64_REL24_P9NOTOC): Define. - gold/ - * powerpc.cc (Target_powerpc::maybe_skip_tls_get_addr_call, - is_branch_reloc, max_branch_delta): Handle R_PPC64_REL24_P9NOTOC. - (Target_powerpc::Branch_info::make_stub): Likewise. - (struct Plt_stub_ent): Add p9notoc_, p9off_, tsize_. - (struct Branch_stub_ent): Add p9notoc_, p9off_. - (Stub_table::add_plt_call_entry): Handle R_PPC64_REL24_P9NOTOC. - (Stub_table::add_long_branch_entry): Likewise. - (Stub_table::add_eh_frame): Likewise. - (Stub_table::plt_call_size): Return aligned size. Adjust callers. - Handle p9notoc_ sizing. - (Stub_table::do_write): Write out p9notoc_ stubs. - (Target_powerpc::Scan::get_reference_flags, local, global): - Handle R_PPC64_REL24_P9NOTOC. - (Target_powerpc::Relocate::relocate): Likewise. - -2021-12-11 H.J. Lu - - Don't return the main file as the separate debug info - On Fedora 35, - - $ readelf -d /usr/bin/npc - - caused readelf to run out of stack since load_separate_debug_info - returned the input main file as the separate debug info: - - (gdb) bt - #0 load_separate_debug_info ( - main_filename=main_filename@entry=0x510f50 "/export/home/hjl/.cache/debuginfod_client/dcc33c51c49e7dafc178fdb5cf8bd8946f965295/debuginfo", - xlink=xlink@entry=0x4e5180 , - parse_func=parse_func@entry=0x431550 , - check_func=check_func@entry=0x432ae0 , - func_data=func_data@entry=0x7fffffffdb60, file=file@entry=0x51d430) - at /export/gnu/import/git/sources/binutils-gdb/binutils/dwarf.c:11057 - #1 0x000000000043328d in check_for_and_load_links (file=0x51d430, - filename=0x510f50 "/export/home/hjl/.cache/debuginfod_client/dcc33c51c49e7dafc178fdb5cf8bd8946f965295/debuginfo") - at /export/gnu/import/git/sources/binutils-gdb/binutils/dwarf.c:11381 - #2 0x00000000004332ae in check_for_and_load_links (file=0x51b070, - filename=0x518dd0 "/export/home/hjl/.cache/debuginfod_client/dcc33c51c49e7dafc178fdb5cf8bd8946f965295/debuginfo") - - Return NULL if the separate debug info is the same as the input main - file to avoid infinite recursion. - - PR binutils/28679 - * dwarf.c (load_separate_debug_info): Don't return the input - main file. - -2021-12-11 Alan Modra - - Don't edit bogus sh_link on reading relocatable objects (Oracle fix) - This reverts a 1995 fix to handle bogus object files. Presumably such - object files have long gone. - - * elf.c (bfd_section_from_shdr): Remove old hack for Oracle - libraries. - -2021-12-11 GDB Administrator - - Automatic date update in version.in - -2021-12-10 Jan Vrany - - gdb/testsuite: respect GDBSERVER variable in remote-stdio-gdbserver "board" - The comment on top of gdb/testsuite/boards/remote-stdio-gdbserver.exp says - that user can specify path to gdbserver on remote system by setting - GDBSERVER variable. However, this variable was ignored and /usr/bin/gdbserver - was used unconditionally. - - This commit updates the code to respect GDBSERVER if set and fall back to - /usr/bin/gdbserver if not. - -2021-12-10 Simon Marchi - - Revert "gdbsupport: remove unnecessary `#ifndef IN_PROCESS_AGENT`" - This reverts commit fe72c32765e1190c8a17d309fc3a7e1882d6a430. - - It turns out it was wrong, libinproctrace.so does build its own - gdbsupport/tdesc.cc. This broke the build: - - make[1]: Entering directory '/home/simark/build/binutils-gdb-one-target/gdbserver' - CXXLD libinproctrace.so - /usr/bin/ld: gdbsupport/tdesc-ipa.o: in function `print_xml_feature::visit_pre(target_desc const*)': - /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/tdesc.cc:407: undefined reference to `tdesc_architecture_name(target_desc const*)' - /usr/bin/ld: /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/tdesc.cc:408: undefined reference to `tdesc_architecture_name(target_desc const*)' - /usr/bin/ld: /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/tdesc.cc:411: undefined reference to `tdesc_osabi_name(target_desc const*)' - /usr/bin/ld: /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/tdesc.cc:416: undefined reference to `tdesc_compatible_info_list(target_desc const*)' - /usr/bin/ld: /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/tdesc.cc:418: undefined reference to `tdesc_compatible_info_arch_name(std::unique_ptr > const&)' - -2021-12-10 GDB Administrator - - Automatic date update in version.in - -2021-12-09 Alan Modra - - PR28674, objdump crash - Not returning an error indication here leaves the attribute - uninitialised, which then leads to intemperate behaviour. - - PR 28674 - * dwarf2.c (read_attribute_value): Return NULL on trying to read - past end of attributes. - -2021-12-09 Alan Modra - - Set sh_link for reloc sections created as normal sections - binutils-all/strip-13 and binutils-all/strip-14 tests create - SHT_REL/SHT_RELA sections by hand. These don't have sh_link set to - the .symtab section as they should, leading to readelf warnings if you - happen to be looking at the object files. - - * elf.c (assign_section_numbers): Formatting. Set sh_link for - reloc sections created as normal sections in relocatable - objects. - -2021-12-09 Simon Marchi - - gdbsupport: remove unnecessary `#ifndef IN_PROCESS_AGENT` - I suppose this code was copied from GDBserver and this ifndef was left - there. As far as I know, IN_PROCESS_AGENT will never be defined when - building this file, so we can remove this. - - Change-Id: I84fc408e330b3a29106df830a09342861cadbaf6 - -2021-12-09 Simon Marchi - - gdb/microblaze-tdep.c: fix -Wunused-but-set-variable - Fix this, seen when building with clang 14: - - CXX microblaze-tdep.o - /home/simark/src/binutils-gdb/gdb/microblaze-tdep.c:207:7: error: variable 'flags' set but not used [-Werror,-Wunused-but-set-variable] - int flags = 0; - ^ - - Change-Id: I59f726ed33e924912748bc475b6fd9a9394fc0d0 - -2021-12-09 Simon Marchi - - gdb/csky-tdep.c: fix -Wunused-but-set-variable error - Fix these, seen when building with clang 14: - - CXX csky-tdep.o - /home/simark/src/binutils-gdb/gdb/csky-tdep.c:332:7: error: variable 'need_dummy_stack' set but not used [-Werror,-Wunused-but-set-variable] - int need_dummy_stack = 0; - ^ - /home/simark/src/binutils-gdb/gdb/csky-tdep.c:805:12: error: variable 'offset' set but not used [-Werror,-Wunused-but-set-variable] - int offset = 0; - ^ - - Change-Id: I6703bcb50e83c50083f716f4084ef6aa30d659c4 - -2021-12-09 Simon Marchi - - gdb/testsuite: fix default behavior of runto - The documented behavior of proc runto is to not emit a PASS when - succeeding to to run to the specified location, but emit a FAIL when - failing to do so. I suppose the intent is that it won't pollute the - results normally passing tests (although I don't see why we would care), - but make visible any problems. - - However, it seems like the implementation makes it default to never - print anything. "no-message" is prependend to "args", so if "message" - is not passed, we will always take the path that sets print_fail to 0, - which will silence any failure. - - This unfortunately means that tests relying on runto_main won't emit a - FAIL if failing to run to main. And since commit 4dfef5be6812 - ("gdb/testsuite: make runto_main not pass no-message to runto"), tests - don't emit a FAIL themselves when failing to run to main. This means - that tests failing to run to main just fail silently, and that's bad. - - This can be reproduced by hacking gdb.base/template.exp like so: - - diff --git a/gdb/testsuite/gdb.base/template.c b/gdb/testsuite/gdb.base/template.c - index bcf39c377d92..052be5b79d73 100644 - --- a/gdb/testsuite/gdb.base/template.c - +++ b/gdb/testsuite/gdb.base/template.c - @@ -15,6 +15,14 @@ - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - - +#include - + - +__attribute__((constructor)) - +static void c (void) - +{ - + exit (1); - +} - + - int - main (void) - { - - Running the modified gdb.base/template.exp shows that it exits without - printing any result. - - Remove the line that prepends no-message to args, that should make - runto's behavior match its documentation. - - This patch will appear to add many failures, but in reality they already - existed, they were just silenced. - - Change-Id: I2a730d5bc72b6ef0698cd6aad962d9902aa7c3d6 - -2021-12-09 Carl Love - - gdb fix elfv1 Powerpc gdb.dwarf2/frame-inlined-in-outer-frame.exp - On ELFv1, the _start symbol must point to the *function descriptor* (in - the .opd section), not to the function code (in the .text section) like - with ELFv2 and other architectures. - -2021-12-09 Tom de Vries - - [gdb/testsuite] Fix gdb.base/maint.exp with -readnow - With test-case gdb.base/maint.exp and target board -readnow, I run into: - ... - FAIL: gdb.base/maint.exp: maint info line-table w/o a file name - ... - - The problem is that this and other regexps anchored using '^': - ... - -re "^$gdb_prompt $" { - ... - don't trigger because other regexps don't consume the entire preceding line. - - This is partly due to the addition of the IS-STMT column. - - Fix this by making the regexps consume entire lines. - - Tested on x86_64-linux with native and target board readnow, as well as - check-read1 and check-readmore. - -2021-12-09 Tom de Vries - - [gdb/testsuite] Fix gdb.base/include-main.exp with -readnow - With test-case gdb.base/include-main.exp and target board readnow, I run into: - ... - FAIL: gdb.base/include-main.exp: maint info symtab - ... - - The corresponding check in gdb.base/include-main.exp: - ... - gdb_test_no_output "maint info symtab" - ... - checks that no CU was expanded, while -readnow ensures that all CUs are - expanded. - - Fix this by skipping the check with -readnow. - - Tested on x86_64-linux, with native and target board readnow. - -2021-12-09 Nelson Chu - - RISC-V: Clarify the behavior of .option arch directive. - * To be consistent with -march option, removed the "=" operator when - user want to reset the whole architecture string. So the formats are, - - .option arch, +, ... - .option arch, - - .option arch, - - * Don't allow to add or remove the base extensions in the .option arch - directive. Instead, users should reset the whole architecture string - while they want to change the base extension. - - * The operator "+" won't update the version of extension, if the - extension is already in the subset list. - - bfd/ - * elfxx-riscv.c (riscv_add_subset): Don't update the version - if the extension is already in the subset list. - (riscv_update_subset): To be consistent with -march option, - removed the "=" operator when user want to reset the whole - architecture string. Besides, Don't allow to add or remove - the base extensions in the .option arch directive. - gas/ - * testsuite/gas/riscv/option-arch-01.s: Updated since we cannot - add or remove the base extensions in the .option arch directive. - * testsuite/gas/riscv/option-arch-02.s: Likewise. - * testsuite/gas/riscv/option-arch-fail.l: Likewise. - * testsuite/gas/riscv/option-arch-fail.s: Likewise. - * testsuite/gas/riscv/option-arch-01a.d: Set -misa-spec=2.2. - * testsuite/gas/riscv/option-arch-01b.d: Likewise. - * testsuite/gas/riscv/option-arch-02.d: Updated since the .option - arch, + won't change the version of extension, if the extension is - already in the subset list. - * testsuite/gas/riscv/option-arch-03.s: Removed the "=" operator - when resetting the whole architecture string. - -2021-12-09 Mike Frysinger - - sim: use ## for automake comments - The ## marker tells automake to not include the comment in its - generated output, so use that in most places where the comment - only makes sense in the inputs. - -2021-12-09 Simon Marchi - - gdb, gdbserver: detach fork child when detaching from fork parent - While working with pending fork events, I wondered what would happen if - the user detached an inferior while a thread of that inferior had a - pending fork event. What happens with the fork child, which is - ptrace-attached by the GDB process (or by GDBserver), but not known to - the core? Sure enough, neither the core of GDB or the target detach the - child process, so GDB (or GDBserver) just stays ptrace-attached to the - process. The result is that the fork child process is stuck, while you - would expect it to be detached and run. - - Make GDBserver detach of fork children it knows about. That is done in - the generic handle_detach function. Since a process_info already exists - for the child, we can simply call detach_inferior on it. - - GDB-side, make the linux-nat and remote targets detach of fork children - known because of pending fork events. These pending fork events can be - stored in: - - - thread_info::pending_waitstatus, if the core has consumed the event - but then saved it for later (for example, because it got the event - while stopping all threads, to present an all-stop stop on top of a - non-stop target) - - thread_info::pending_follow: if we ran to a "catch fork" and we - detach at that moment - - Additionally, pending fork events can be in target-specific fields: - - - For linux-nat, they can be in lwp_info::status and - lwp_info::waitstatus. - - For the remote target, they could be stored as pending stop replies, - saved in `remote_state::notif_state::pending_event`, if not - acknowledged yet, or in `remote_state::stop_reply_queue`, if - acknowledged. I followed the model of remove_new_fork_children for - this: call remote_notif_get_pending_events to process / - acknowledge any unacknowledged notification, then look through - stop_reply_queue. - - Update the gdb.threads/pending-fork-event.exp test (and rename it to - gdb.threads/pending-fork-event-detach.exp) to try to detach the process - while it is stopped with a pending fork event. In order to verify that - the fork child process is correctly detached and resumes execution - outside of GDB's control, make that process create a file in the test - output directory, and make the test wait $timeout seconds for that file - to appear (it happens instantly if everything goes well). - - This test catches a bug in linux-nat.c, also reported as PR 28512 - ("waitstatus.h:300: internal-error: gdb_signal target_waitstatus::sig() - const: Assertion `m_kind == TARGET_WAITKIND_STOPPED || m_kind == - TARGET_WAITKIND_SIGNALLED' failed.). When detaching a thread with a - pending event, get_detach_signal unconditionally fetches the signal - stored in the waitstatus (`tp->pending_waitstatus ().sig ()`). However, - that is only valid if the pending event is of type - TARGET_WAITKIND_STOPPED, and this is now enforced using assertions (iit - would also be valid for TARGET_WAITKIND_SIGNALLED, but that would mean - the thread does not exist anymore, so we wouldn't be detaching it). Add - a condition in get_detach_signal to access the signal number only if the - wait status is of kind TARGET_WAITKIND_STOPPED, and use GDB_SIGNAL_0 - instead (since the thread was not stopped with a signal to begin with). - - Add another test, gdb.threads/pending-fork-event-ns.exp, specifically to - verify that we consider events in pending stop replies in the remote - target. This test has many threads constantly forking, and we detach - from the program while the program is executing. That gives us some - chance that we detach while a fork stop reply is stored in the remote - target. To verify that we correctly detach all fork children, we ask - the parent to exit by sending it a SIGUSR1 signal and have it write a - file to the filesystem before exiting. Because the parent's main thread - joins the forking threads, and the forking threads wait for their fork - children to exit, if some fork child is not detach by GDB, the parent - will not write the file, and the test will time out. If I remove the - new remote_detach_pid calls in remote.c, the test fails eventually if I - run it in a loop. - - There is a known limitation: we don't remove breakpoints from the - children before detaching it. So the children, could hit a trap - instruction after being detached and crash. I know this is wrong, and - it should be fixed, but I would like to handle that later. The current - patch doesn't fix everything, but it's a step in the right direction. - - Change-Id: I6d811a56f520e3cb92d5ea563ad38976f92e93dd - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28512 - -2021-12-09 Simon Marchi - - gdb: move clearing of tp->pending_follow to follow_fork_inferior - A following patch will change targets so that when they detach an - inferior, they also detach any pending fork children this inferior may - have. While doing this, I hit a case where we couldn't differentiate - two cases, where in one we should detach the fork detach but not in the - other. - - Suppose we continue past a fork with "follow-fork-mode == child" && - "detach-on-fork on". follow_fork_inferior calls target_detach to detach - the parent. In that case the target should not detach the fork - child, as we'll continue debugging the child. As of now, the - tp->pending_follow field of the thread who called fork still contains - the details about the fork. - - Then, suppose we run to a fork catchpoint and the user types "detach". - In that case, the target should detach the fork child in addition to the - parent. In that case as well, the tp->pending_follow field contains - the details about the fork. - - To allow targets to differentiate the two cases, clear - tp->pending_follow a bit earlier, when following a fork. Targets will - then see that tp->pending_follow contains TARGET_WAITKIND_SPURIOUS, and - won't detach the fork child. - - As of this patch, no behavior changes are expected. - - Change-Id: I537741859ed712cb531baaefc78bb934e2a28153 - -2021-12-09 Simon Marchi - - gdb/remote.c: refactor pending fork status functions - In preparation for a following patch, refactor a few things that I did - find a bit awkward, and to make them a bit more reusable. - - - Pass an inferior to kill_new_fork_children instead of a pid. That - allows iterating on only this inferior's threads and avoid further - filtering on the thread's pid. - - Change thread_pending_fork_status to return a non-nullptr value only - if the thread does have a pending fork status. - - Remove is_pending_fork_parent_thread, as one can just use - thread_pending_fork_status and check for nullptr. - - Replace is_pending_fork_parent with is_fork_status, which just - returns if the given target_waitkind if a fork or a vfork. Push - filtering on the pid to the callers, when it is necessary. - - Change-Id: I0764ccc684d40f054e39df6fa5458cc4c5d1cd7b - -2021-12-09 Simon Marchi - - gdb/remote.c: move some things up - Move the stop_reply and a few functions up. Some code above them in the - file will need to use them in a following patch. No behavior changes - expected here. - - Change-Id: I3ca57d0e3ec253f56e1ba401289d9d167de14ad2 - -2021-12-09 Simon Marchi - - gdb/linux-nat: factor ptrace-detach code to new detach_one_pid function - The following patch will add some code paths that need to ptrace-detach - a given PID. Factor out the code that does this and put it in its own - function, so that it can be re-used. - - Change-Id: Ie65ca0d89893b41aea0a23d9fc6ffbed042a9705 - -2021-12-09 Simon Marchi - - gdbserver: hide fork child threads from GDB - This patch aims at fixing a bug where an inferior is unexpectedly - created when a fork happens at the same time as another event, and that - other event is reported to GDB first (and the fork event stays pending - in GDBserver). This happens for example when we step a thread and - another thread forks at the same time. The bug looks like (if I - reproduce the included test by hand): - - (gdb) show detach-on-fork - Whether gdb will detach the child of a fork is on. - (gdb) show follow-fork-mode - Debugger response to a program call of fork or vfork is "parent". - (gdb) si - [New inferior 2] - Reading /home/simark/build/binutils-gdb/gdb/testsuite/outputs/gdb.threads/step-while-fork-in-other-thread/step-while-fork-in-other-thread from remote target... - Reading /home/simark/build/binutils-gdb/gdb/testsuite/outputs/gdb.threads/step-while-fork-in-other-thread/step-while-fork-in-other-thread from remote target... - Reading symbols from target:/home/simark/build/binutils-gdb/gdb/testsuite/outputs/gdb.threads/step-while-fork-in-other-thread/step-while-fork-in-other-thread... - [New Thread 965190.965190] - [Switching to Thread 965190.965190] - Remote 'g' packet reply is too long (expected 560 bytes, got 816 bytes): ... - - The sequence of events leading to the problem is: - - - We are using the all-stop user-visible mode as well as the - synchronous / all-stop variant of the remote protocol - - We have two threads, thread A that we single-step and thread B that - calls fork at the same time - - GDBserver's linux_process_target::wait pulls the "single step - complete SIGTRAP" and the "fork" events from the kernel. It - arbitrarily choses one event to report, it happens to be the - single-step SIGTRAP. The fork stays pending in the thread_info. - - GDBserver send that SIGTRAP as a stop reply to GDB - - While in stop_all_threads, GDB calls update_thread_list, which ends - up querying the remote thread list using qXfer:threads:read. - - In the reply, GDBserver includes the fork child created as a result - of thread B's fork. - - GDB-side, the remote target sees the new PID, calls - remote_notice_new_inferior, which ends up unexpectedly creating a new - inferior, and things go downhill from there. - - The problem here is that as long as GDB did not process the fork event, - it should pretend the fork child does not exist. Ultimately, this event - will be reported, we'll go through follow_fork, and that process will be - detached. - - The remote target (GDB-side), has some code to remove from the reported - thread list the threads that are the result of forks not processed by - GDB yet. But that only works for fork events that have made their way - to the remote target (GDB-side), but haven't been consumed by the core - yet, so are still lingering as pending stop replies in the remote target - (see remove_new_fork_children in remote.c). But in our case, the fork - event hasn't made its way to the GDB-side remote target. We need to - implement the same kind of logic GDBserver-side: if there exists a - thread / inferior that is the result of a fork event GDBserver hasn't - reported yet, it should exclude that thread / inferior from the reported - thread list. - - This was actually discussed a while ago, but not implemented AFAIK: - - https://pi.simark.ca/gdb-patches/1ad9f5a8-d00e-9a26-b0c9-3f4066af5142@redhat.com/#t - https://sourceware.org/pipermail/gdb-patches/2016-June/133906.html - - Implementation details-wise, the fix for this is all in GDBserver. The - Linux layer of GDBserver already tracks unreported fork parent / child - relationships using the lwp_info::fork_relative, in order to avoid - wildcard actions resuming fork childs unknown to GDB. This information - needs to be made available to the handle_qxfer_threads_worker function, - so it can filter the reported threads. Add a new thread_pending_parent - target function that allows the Linux target to return the parent of an - eventual fork child. - - Testing-wise, the test replicates pretty-much the sequence of events - shown above. The setup of the test makes it such that the main thread - is about to fork. We stepi the other thread, so that the step completes - very quickly, in a single event. Meanwhile, the main thread is resumed, - so very likely has time to call fork. This means that the bug may not - reproduce every time (if the main thread does not have time to call - fork), but it will reproduce more often than not. The test fails - without the fix applied on the native-gdbserver and - native-extended-gdbserver boards. - - At some point I suspected that which thread called fork and which thread - did the step influenced the order in which the events were reported, and - therefore the reproducibility of the bug. So I made the test try both - combinations: main thread forks while other thread steps, and vice - versa. I'm not sure this is still necessary, but I left it there - anyway. It doesn't hurt to test a few more combinations. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28288 - Change-Id: I2158d5732fc7d7ca06b0eb01f88cf27bf527b990 - -2021-12-09 GDB Administrator - - Automatic date update in version.in - -2021-12-08 Tom Tromey - - Use for-each more in gdb - There are some loops in gdb that use ARRAY_SIZE (or a wordier - equivalent) to loop over a static array. This patch changes some of - these to use foreach instead. - - Regression tested on x86-64 Fedora 34. - -2021-12-08 Tom Tromey - - Fix error in file_and_directory patch - In my earlier C++-ization patch for file_and_directory, I introduced - an error: - - - if (strcmp (fnd.name, "") != 0) - + if (fnd.is_unknown ()) - - This change inverted the sense of the test, which causes failures with - .debug_names. - - This patch fixes the bug. Regression tested on x86-64 Fedora 34. I - also tested it using the AdaCore internal test suite, with - .debug_names -- this was failing before, and now it works. - -2021-12-08 Andrew Burgess - - gdb/python: Use tp_init instead of tp_new to setup gdb.Value - The documentation suggests that we implement gdb.Value.__init__, - however, this is not currently true, we really implement - gdb.Value.__new__. This will cause confusion if a user tries to - sub-class gdb.Value. They might write: - - class MyVal (gdb.Value): - def __init__ (self, val): - gdb.Value.__init__(self, val) - - obj = MyVal(123) - print ("Got: %s" % obj) - - But, when they source this code they'll see: - - (gdb) source ~/tmp/value-test.py - Traceback (most recent call last): - File "/home/andrew/tmp/value-test.py", line 7, in - obj = MyVal(123) - File "/home/andrew/tmp/value-test.py", line 5, in __init__ - gdb.Value.__init__(self, val) - TypeError: object.__init__() takes exactly one argument (the instance to initialize) - (gdb) - - The reason for this is that, as we don't implement __init__ for - gdb.Value, Python ends up calling object.__init__ instead, which - doesn't expect any arguments. - - The Python docs suggest that the reason why we might take this - approach is because we want gdb.Value to be immutable: - - https://docs.python.org/3/c-api/typeobj.html#c.PyTypeObject.tp_new - - But I don't see any reason why we should require gdb.Value to be - immutable when other types defined in GDB are not. This current - immutability can be seen in this code: - - obj = gdb.Value(1234) - print("Got: %s" % obj) - obj.__init__ (5678) - print("Got: %s" % obj) - - Which currently runs without error, but prints: - - Got: 1234 - Got: 1234 - - In this commit I propose that we switch to using __init__ to - initialize gdb.Value objects. - - This does introduce some additional complexity, during the __init__ - call a gdb.Value might already be associated with a gdb value object, - in which case we need to cleanly break that association before - installing the new gdb value object. However, the cost of doing this - is not great, and the benefit - being able to easily sub-class - gdb.Value seems worth it. - - After this commit the first example above works without error, while - the second example now prints: - - Got: 1234 - Got: 5678 - - In order to make it easier to override the gdb.Value.__init__ method, - I have tweaked the definition of gdb.Value.__init__. The second, - optional argument to __init__ is a gdb.Type, if this argument is not - present then GDB figures out a suitable type. - - However, if we want to override the __init__ method in a sub-class, - and still support the default argument, it is easier to write: - - class MyVal (gdb.Value): - def __init__ (self, val, type=None): - gdb.Value.__init__(self, val, type) - - Currently, passing None for the Type will result in an error: - - TypeError: type argument must be a gdb.Type. - - After this commit I now allow the type argument to be None, in which - case GDB figures out a suitable type just as if the type had not been - passed at all. - - Unless a user is trying to reinitialize a value, or create sub-classes - of gdb.Value, there should be no user visible changes after this - commit. - -2021-12-08 Andrew Burgess - - gdb: use try/catch around a gdb_disassembler::print_insn call - While investigating some disassembler problems I ran into this case; - GDB compiled on a 32-bit arm target, with --enable-targets=all. Then - in GDB: - - (gdb) set architecture i386 - (gdb) disassemble 0x0,+4 - unknown disassembler error (error = -1) - - This is interesting because it shows a case where the libopcodes - disassembler is returning -1 without first calling the - memory_error_func callback. Indeed, the return from libopcodes - happens from this code snippet in i386-dis.c in the print_insn - function: - - if (address_mode == mode_64bit && sizeof (bfd_vma) < 8) - { - (*info->fprintf_func) (info->stream, - _("64-bit address is disabled")); - return -1; - } - - Notice how, prior to the return the disassembler tries to print a - helpful message out, but GDB doesn't print this message. - - The reason this message goes missing is the call stack, it looks like - this: - - gdb_pretty_print_disassembler::pretty_print_insn - gdb_disassembler::print_insn - gdbarch_print_insn - ... - i386-dis.c:print_insn - - When i386-dis.c:print_insn returns -1 this is handled in - gdb_disassembler::print_insn, where an exception is thrown. However, - the actual printing of the disassembler output is done in - gdb_pretty_print_disassembler::pretty_print_insn, and is only done if - an exception is not thrown. - - In this commit I change this. The pretty_print_insn now uses - try/catch around the call to gdb_disassembler::print_insn, if we catch - an error then we first print any pending output in the instruction - buffer, before rethrowing the exception. As a result, even if an - exception is thrown we still print any pending disassembler output to - the screen; in the above case the helpful message will now be shown. - - Before my patch we might expect to see this output: - - (gdb) disassemble 0x0,+4 - Dump of assembler code from 0x0 to 0x4: - 0x0000000000000000: unknown disassembler error (error = -1) - (gdb) - - But now we see this: - - (gdb) disassemble 0x0,+4 - Dump of assembler code from 0x0 to 0x4: - 0x0000000000000000: 64-bit address is disabled - unknown disassembler error (error = -1) - - If the disassembler returns -1 without printing a helpful message then - we would still expect a change in output, something like: - - (gdb) disassemble 0x0,+4 - Dump of assembler code from 0x0 to 0x4: - 0x0000000000000000: - unknown disassembler error (error = -1) - - Which I think is still acceptable, though at this point I think a - strong case can be made that this is a disassembler bug (not printing - anything, but still returning -1). - - Notice however, that the error message is always printed on a new line - now. This is also true for the memory error case, where before we - might see this: - - (gdb) disassemble 0x0,+4 - Dump of assembler code from 0x0 to 0x4: - 0x00000000: Cannot access memory at address 0x0 - - We now get this: - - (gdb) disassemble 0x0,+4 - Dump of assembler code from 0x0 to 0x4: - 0x00000000: - Cannot access memory at address 0x0 - - For me, I'm happy to accept this change, having the error on a line by - itself, rather than just appended to the end of the previous line, - seems like an improvement, but I'm aware others might feel - differently, so I'd appreciate any feedback. - -2021-12-08 Jan Vrany - - ppc: recognize all program traps - Permanent program breakpoints (ones inserted into the code) other than - the one GDB uses for POWER (0x7fe00008) did not result in stop but - caused GDB to loop infinitely. - - This was because GDB did not recognize trap instructions other than - "trap". For example, "tw 12, 4, 4" was not be recognized, causing GDB - to loop forever. - - This commit fixes this by providing POWER specific hook - (gdbarch_program_breakpoint_here_p) recognizing all tw, twi, td and tdi - instructions. - - Tested on Linux on PowerPC e500 and on QEMU PPC64le. - -2021-12-08 Jan Vrany - - ppc: use "trap" ("tw, 31, 0, 0") as breakpoint instruction - Power ISA 3.0 B spec [1], sections 3.3.11 "Fixed-Point Trap Instructions" - and section C.6 "Trap Mnemonics" specify "tw, 31, 0, 0" (encoded as - 0x7fe00008) as canonical unconditional trap instruction. - - This commit changes the breakpoint instruction used by GDB from - "tw 12, r2, r2" to unconditional "trap". - - [1]: https://openpowerfoundation.org/?resource_lib=power-isa-version-3-0 - -2021-12-08 Fangrui Song - - bfd_section_from_shdr: Support SHT_RELR sections - If a.so contains an SHT_RELR section, objcopy a.so will fail with: - - a.so: unknown type [0x13] section `.relr.dyn' - - This change allows objcopy to work. - - bfd/ - * elf.c (bfd_section_from_shdr): Support SHT_RELR. - -2021-12-08 Alan Modra - - PR28673, input file 'gcov' is the same as output file - PR 28673 - * ldlang.c (open_output): Use local_sym_name when checking - output against input files rather than filename. - -2021-12-08 Tom Tromey - - Fix bug in source.c change - My earlier change to source.c ("Remove an xfree from add_path") - introduced a regression. This patch fixes the problem. - -2021-12-08 Simon Marchi - - gdb: make struct linespect contain vectors, not pointers to vectors - struct linespec contains pointers to vectors, instead of containing - vectors directly. This is probably historical, when linespec_parser - (which contains a struct linespec field) was not C++-ified yet. But it - seems easy to change the pointers to vectors to just vectors today. - This simplifies the code, we don't need to manually allocate and delete - the vectors and there's no pointer that can be NULL. - - As far as I understand, there was not meaningful distinction between a - NULL pointer to vector and an empty vector. So all NULL checks are - changed for !empty checks. - - Change-Id: Ie759707da14d9d984169b93233343a86e2de9ee6 - -2021-12-08 GDB Administrator - - Automatic date update in version.in - -2021-12-07 Tom Tromey - - Remove an xfree from add_path - This removes a temporary \0 assignment and an xfree from add_path, - replacing it with a simpler use of std::string. - -2021-12-07 Simon Marchi - - gdb/linespec.c: simplify condition - We can remove the empty check: if the vector has size 1, it is obviously - not empty. This code ended up like this because the empty check used to - be a NULL check. - - Change-Id: I1571bd0228818ca93f6a6b444e9b010dc2da4c08 - -2021-12-07 Simon Marchi - - gdb: rename "maint agent" functions - Functions agent_eval_command and agent_command are used to implement - maintenance commands, rename them accordingly (with the maint_ prefix), - as well as the agent_command_1 helper function. - - Change-Id: Iacf96d4a0a26298e8dd4648a0f38da649ea5ef61 - -2021-12-07 Simon Marchi - - gdb: make set_raw_breakpoint static - set_raw_breakpoint is only used in breakpoint.c, make it static. - - Change-Id: I7fbeda067685309a30b88aceaf957eff7a28e310 - -2021-12-07 John Baldwin - - Support AT_FXRNG and AT_KPRELOAD on FreeBSD. - FreeBSD's kernel has recently added two new ELF auxiliary vector - entries. AT_FXRNG points to a root seed version for the kernel's - PRNG. Userland can use this to reseed a userland PRNG after the - kernel's PRNG has reseeded. AT_KPRELOAD is the base address of a - kernel-provided vDSO. - - This change displays the proper name and description of these entries - in 'info auxv'. - - include/ChangeLog: - - * elf/common.h (AT_FREEBSD_FXRNG, AT_FREEBSD_KPRELOAD): Define. - -2021-12-07 Tom Tromey - - Avoid extra work in global_symbol_searcher::expand_symtabs - I noticed that global_symbol_searcher::expand_symtabs always passes a - file matcher to expand_symtabs_matching. However, if 'filenames' is - empty, then this always returns true. It's slightly more efficient to - pass a null file matcher in this case, because that lets the "quick" - symbol implementations skip any filename checks. - - Regression tested on x86-64 Fedora 34. - -2021-12-07 Tom de Vries - - [gdb/testsuite] Fix options arg handling in compile_jit_elf_main_as_so - In commit 80ad340c902 ("[gdb/testsuite] use -Ttext-segment for jit-elf tests") - the following change was made: - ... - proc compile_jit_elf_main_as_so {main_solib_srcfile main_solib_binfile options} { - - set options [concat $options debug] - + global jit_load_address jit_load_increment - + - + set options [list \ - + additional_flags="-DMAIN=jit_dl_main" \ - + additional_flags=-DLOAD_ADDRESS=$jit_load_address \ - + additional_flags=-DLOAD_INCREMENT=$jit_load_increment \ - + debug] - ... - - Before the change, the options argument was used, but after the change not - anymore. - - Fix this by reverting back to using "set options [concat $options ...]". - - Fixing this gets us twice the -DMAIN=jit_dl_main bit, once from a caller, and - once from compile_jit_elf_main_as_so. Fix this by removing the bit from - compile_jit_elf_main_as_so, which makes the code similar to compile_jit_main. - - Tested on x86_64-linux. - -2021-12-07 Tom de Vries - - [gdb/testsuite] Fix FAIL in gdb.tui/basic.exp - On openSUSE Leap 15.2 aarch64 I ran into: - ... - FAIL: gdb.tui/basic.exp: check main is where we expect on the screen - ... - while this is passing on x86_64. - - On x86_64-linux we have at the initial screen dump for "list -q main": - ... - 0 +-/home/vries/gdb_versions/devel/src/gdb/testsuite/gdb.tui/tui-layout.c--+ - 1 | 15 You should have received a copy of the GNU General Public | - 2 | 16 along with this program. If not, see \ - and ends at 0x4004ab . - ... - and on aarch64 instead: - ... - $ gdb -q -batch outputs/gdb.tui/basic/basic -ex "info line main" - Line 21 of "tui-layout.c" starts at address 0x4005f4
\ - and ends at 0x4005f8 . - ... - - Fix this by using a new source file main-one-line.c, that implements the - entire main function on a single line, in order to force the compiler to use - that line number. - - Also try to do less hard-coding in the test-case. - - Tested on x86_64-linux and aarch64-linux. - -2021-12-07 Tom de Vries - - [gdb/tdep] Fix inferior plt calls in PIE for i386 - Consider test-case test.c: - ... - int main (void) { - void *p = malloc (10); - return 0; - } - ... - - When compiled to a non-PIE exec: - ... - $ gcc -m32 test.c - ... - the call sequence looks like: - ... - 8048447: 83 ec 0c sub $0xc,%esp - 804844a: 6a 0a push $0xa - 804844c: e8 bf fe ff ff call 8048310 - ... - which calls to: - ... - 08048310 : - 8048310: ff 25 0c a0 04 08 jmp *0x804a00c - 8048316: 68 00 00 00 00 push $0x0 - 804831b: e9 e0 ff ff ff jmp 8048300 <.plt> - ... - where the first insn at 0x8048310 initially jumps to the following address - 0x8048316, read from the .got.plt @ 0x804a00c: - ... - 804a000 0c9f0408 00000000 00000000 16830408 ................ - 804a010 26830408 &... - ... - - Likewise, when compiled as a PIE: - ... - $ gcc -m32 -fPIE -pie test.c - ... - we have this call sequence (with %ebx setup to point to the .got.plt): - ... - 0000055d
: - 579: 83 ec 0c sub $0xc,%esp - 57c: 6a 0a push $0xa - 57e: 89 c3 mov %eax,%ebx - 580: e8 6b fe ff ff call 3f0 - ... - which calls to: - ... - 000003f0 : - 3f0: ff a3 0c 00 00 00 jmp *0xc(%ebx) - 3f6: 68 00 00 00 00 push $0x0 - 3fb: e9 e0 ff ff ff jmp 3e0 <.plt> - ... - where the insn at 0x3f0 initially jumps to following address 0x3f6, read from - the .got.plt at offset 0xc: - ... - 2000 f41e0000 00000000 00000000 f6030000 ................ - 2010 06040000 .... - ... - - When instead doing an inferior call to malloc (with nosharedlib to force - malloc to resolve to malloc@plt rather than the functions in ld.so or libc.so) - with the non-PIE exec, we have the expected: - ... - $ gdb -q -batch a.out -ex start -ex nosharedlib -ex "p /x (void *)malloc (10)" - Temporary breakpoint 1 at 0x8048444 - - Temporary breakpoint 1, 0x08048444 in main () - $1 = 0x804b160 - ... - - But with the PIE exec, we run into: - ... - $ gdb -q -batch a.out -ex start -ex nosharedlib -ex "p /x (void *)malloc (10)" - Temporary breakpoint 1 at 0x56c - - Temporary breakpoint 1, 0x5655556c in main () - - Program received signal SIGSEGV, Segmentation fault. - 0x565553f0 in malloc@plt () - ... - - The segfault happens because: - - the inferior call mechanism doesn't setup %ebx - - %ebx instead is 0 - - the jump to "*0xc(%ebx)" reads from memory at 0xc - - Fix this by setting up %ebx properly in i386_thiscall_push_dummy_call. - - Fixes this failure with target board unix/-m32/-pie/-fPIE reported in - PR28467: - ... - FAIL: gdb.base/nodebug.exp: p/c (int) array_index("abcdef",2) - ... - - Tested on x86_64-linux, with target board unix/-m32 and unix/-m32/-fPIE/-pie. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28467 - -2021-12-07 Tom de Vries - - [gdb/symtab] Support -readnow during reread - When running test-case gdb.base/cached-source-file.exp with target board - readnow, we run into: - ... - FAIL: gdb.base/cached-source-file.exp: rerun program (the program exited) - ... - - The problem is that when rereading, the readnow is ignored. - - Fix this by copying the readnow handling code from symbol_file_add_with_addrs - to reread_symbols. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=26800 - -2021-12-07 Tom de Vries - - [gdb/ada] Fix assert in ada_is_unconstrained_packed_array_type - On openSUSE Leap 42.3, with system compiler gcc 4.8.5 I run into: - ... - (gdb) print u_one_two_three^M - src/gdb/gdbtypes.h:1050: internal-error: field: \ - Assertion `idx >= 0 && idx < num_fields ()' failed.^M - ... - - We run into trouble while doing this in - ada_is_unconstrained_packed_array_type: - ... - 1953 return TYPE_FIELD_BITSIZE (type, 0) > 0; - ... - which tries to get field 0 from a type without fields: - ... - (gdb) p type->num_fields () - $6 = 0 - ... - which is the case because the type is a typedef: - ... - (gdb) p type->code () - $7 = TYPE_CODE_TYPEDEF - ... - - Fix this by using the type referenced by the typedef instead. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28323 - -2021-12-07 Alan Modra - - Re: Add support for AArch64 EFI (efi-*-aarch64) - Commit b69c9d41e8 was broken in multiple ways regarding the realloc - of the target string, most notably in that "-little" wasn't actually - appended to the input_target or output_target. This caused asan - errors and "FAIL: Check if efi app format is recognized". I also - noticed that the input_target string wasn't being copied but rather - the output_target when dealing with the input target. Fix that too. - - PR 26206 - * objcopy.c (convert_efi_target): Rewrite. Allocate modified - target strings here.. - (copy_main): ..rather than here. Do handle input_target, - not output_target for input. - -2021-12-07 Alan Modra - - Error on ld output file name matching input file name - It's not foolproof, for example we don't catch output to a linker - script, to a library specified with -l, or to an element of a thin - archive. - - * ldlang.c (open_output): Exit with error on output file matching - an input file. - * testsuite/ld-misc/just-symbols.exp: Adjust ld -r test to suit. - -2021-12-07 GDB Administrator - - Automatic date update in version.in - -2021-12-06 Carl Love - - gdb: Add PowerPC support to gdb.dwarf2/frame-inlined-in-outer-frame - This patch adds an #elif defined for PowerPC to setup the exit_0 macro. - This patch addes the needed macro definitionald logic to handle both elfV1 - and elfV2. - - The patch has been successfully tested on both PowerPC BE, Powerpc LE and - X86_64 with no regressions. - -2021-12-06 Tom de Vries - - [gdb/testsuite] Use precise align in gdb.arch/i386-{avx,sse}.exp - Test-cases gdb.arch/i386-{avx,sse}.exp use assembly instructions that require - the memory operands to be aligned to a certain boundary, and the test-cases - use C11's _Alignas to make that happen. - - The draw-back of using _Alignas is that while it does enforce a minimum - alignment, the actual alignment may be bigger, which makes the following - scenario possible: - - copy say, gdb.arch/i386-avx.c as basis for a new test-case - - run the test-case and observe a PASS - - commit the new test-case in the supposition that the test-case is correct - and well-tested - - run later into a failure on a different test setup (which may be a setup - where reproduction and investigation is more difficult and time-consuming), - and find out that the specified alignment was incorrect and should have been - updated to say, 64 bytes. The initial PASS occurred only because the actual - alignment happened to be greater than required. - - The idea of having precise alignment as a means of having more predictable - execution which allows flushing out bugs earlier, has been filed as PR - gcc/103095. - - Add a new file lib/precise-aligned-alloc.c with functions - precise_aligned_alloc and precise_aligned_dup, to support precise alignment. - - Use precise_aligned_dup in aforementioned test-cases to: - - verify that the specified alignment is indeed sufficient, rather - than too little but accidentally over-aligned. - - prevent the same type of problems in any new test-cases based on these - - Tested on x86_64-linux, with both gcc and clang. - -2021-12-06 Tom de Vries - - [gdb/testsuite] Fix data alignment in gdb.arch/i386-{avx,sse}.exp - When running test-case gdb.arch/i386-avx.exp with clang I ran into: - ... - (gdb) PASS: gdb.arch/i386-avx.exp: set first breakpoint in main - continue^M - Continuing.^M - ^M - Program received signal SIGSEGV, Segmentation fault.^M - 0x000000000040052b in main (argc=1, argv=0x7fffffffd3c8) at i386-avx.c:54^M - 54 asm ("vmovaps 0(%0), %%ymm0\n\t"^M - (gdb) FAIL: gdb.arch/i386-avx.exp: continue to breakpoint: \ - continue to first breakpoint in main - ... - - The problem is that the vmovaps insn requires an 256-bit (or 32-byte) aligned - address, and it's only 16-byte aligned: - ... - (gdb) p /x $rax - $1 = 0x601030 - ... - - Fix this by using a sufficiently aligned address, using _Alignas. - - Compile using -std=gnu11 to support _Alignas. - - Likewise in gdb.arch/i386-sse.exp. - - Tested on x86_64-linux, with both gcc and clang. - -2021-12-06 Alan Modra - - [GOLD] PowerPC64 inline plt sequences - The fixes gold failures to handle inline PLT sequences properly. - PowerPC gold was always turning these back into direct calls due to - gsym->use_plt_offset() returning false. This is fixed for dynamic - linking by correcting get_reference_flags, and for static linking by - overriding use_plt_offset() in relocate(). The rest of the patch - revolves around needing to create PLT entries for inline PLT calls - when statically linking (for gcc -mlongcall). The lplt section - handled that for local symbols, now it does globals too. - - * powerpc.cc (Target_powerpc::plt_off): Return proper section - for static link. - (Target_powerpc::symval_for_branch): Make public. - (Target_powerpc::make_lplt_section): Add Symbol_table* param. - Adjust all calls. - (Target_powerpc::make_local_plt_entry): Likewise. - (Target_powerpc::make_local_plt_entry): New variant for global syms. - (Powerpc_relobj::do_relocate_sections): Don't write lplt contents. - (Output_data_plt_powerpc::do_write): Write lplt contents here. - (Output_data_plt_powerpc::Output_data_plt_powerpc): Save - symbol table pointer. Adjust all uses. - (Output_data_plt_powerpc::add_entry): Add stash parameter. Don't - do dynamic reloc handling when no reloc section. Save symbol - for local plt entries. - (Output_data_plt_powerpc::add_local_entry): Save symbol. - (Output_data_plt_powerpc::Local_plt_ent): New class. - (Output_data_plt_powerpc::sym_ents_): New vector. - (Target_powerpc::Scan::get_reference_flags): Return - FUNCTION_CALL|RELATIVE_REF for inline plt relocs. - (Target_powerpc::Scan::global): Make entries in lplt for inline - plt call relocation symbols. - (Target_powerpc::Relocate::relocate): Rename has_plt_offset to - use_plt_offset. Set use_plt_offset for inline plt relocs. - -2021-12-06 Clément Chigot - - ld: improve shared tests for AIX - It's now possible to refer symbols in the main program from the - shared library. However, it still impossible to have the same - overriden features between shared objects and mains than ELF, - without using the runtime linking feature which isn't yet fully - available. - - ld/ChangeLog: - - * testsuite/ld-shared/shared.exp: Improve XCOFF support - * testsuite/ld-shared/main.c: Likewise. - * testsuite/ld-shared/sh1.c: Likewise. - * testsuite/ld-shared/xcoff.dat: Likewise. - -2021-12-06 GDB Administrator - - Automatic date update in version.in - -2021-12-05 Tom Tromey - - Preserve artificial CU name in process_psymtab_comp_unit_reader - This fixes a use-after-free that Simon pointed out. - process_psymtab_comp_unit_reader was allocating an artificial name for - a CU, and then discarding it. However, this name was preserved in the - cached file_and_directory. This patch arranges for the allocated name - to be preserved there. - -2021-12-05 Mike Frysinger - - sim: include ansidecl.h when needed - Avoid implicit include deps with this to help untangle sim headers - so we can get rid of arch-specific sim-main.h. - - sim: include stdint.h when needed - Avoid implicit include deps with this to help untangle sim headers - so we can get rid of arch-specific sim-main.h. - - sim: include stdarg.h when used - Avoid implicit include deps with this to help untangle sim headers - so we can get rid of arch-specific sim-main.h. - -2021-12-05 Mike Frysinger - - sim: reorder header includes - We're including system headers after local headers in a bunch of - places, but this leads to conflicts when our local headers happen - to define symbols that show up in the system headers. - - Use the more standard order of: - * config.h (via defs.h) - * system headers - * local library headers (e.g. bfd & libiberty) - * sim specific headers - -2021-12-05 Simon Marchi - - gdbsupport: fix memory leak in create_file_handler when re-using file handler - ASan made me notice a memory leak, where the memory tied to the file - handle name string wasn't freed. When register a file handler with an - fd that is already registered, we re-use the file_handler object, so we - ended up creating a new std::string object and overwriting the - file_handler::name pointer, without free-ing the old std::string. - - Fix this by allocating file_handler with new, deleting it with - delete, and making file_handler::name not a pointer. - - Change-Id: Ie304cc78ab5ae5dfad9a1366e9890c09de651f43 - -2021-12-05 GDB Administrator - - Automatic date update in version.in - -2021-12-04 Mike Frysinger - - sim: moxie: hoist dtb rules up to common builds - These rules don't depend on the target compiler settings, so hoist - the build logic up to the common builds for better parallelization. - - sim: m68hc11: delete unused profile flags - These were moved to the common configure script a while ago and have - the same default as these, so just delete it. - - sim: msp430: delete redundant comments & settings - These were copied from the example docs, so aren't adding any value. - - sim: erc32: drop old configure target - There is no configure script in here anymore to regenerate. - - sim: m32c/rl78: drop redundant -Wall settings - We already turn these on in the configure script. - -2021-12-04 Tom Tromey - - Cache the result of find_file_and_directory - This changes the DWARF reader to cache the result of - find_file_and_directory. This is not especially important now, but it - will help the new DWARF indexer. - - Move file_and_directory to new file and C++-ize - This moves file_and_directory to a new file, and then C++-izes it -- - replacing direct assignments with methods, and arranging for it to own - any string that must be computed. Finally, the CU's objfile will only - be used on demand; this is an important property for the new DWARF - indexer's parallel mode. - - Remove Irix case from find_file_and_directory - find_file_and_directory has a special case for the Irix 6.2 compiler. - Since this is long obsolete, this patch removes it. - -2021-12-04 Mike Frysinger - - sim: frv: split up testsuite a bit - Running frv's allinsn in serial is quite slow due to the sheer number - of tests it contains. By splitting it up and running in parallel, the - execution time on my system goes from ~100sec to ~60sec. - -2021-12-04 Simon Marchi - - gdb: don't show deprecated aliases - I don't think it's very useful to show deprecated aliases to the - user. It encourages the user to use them, when the goal is the - opposite. - - For example, before: - - (gdb) help set index-cache enabled - set index-cache enabled, set index-cache off, set index-cache on - alias set index-cache off = set index-cache enabled off - alias set index-cache on = set index-cache enabled on - Enable the index cache. - When on, enable the use of the index cache. - - (gdb) help set index-cache on - Warning: 'set index-cache on', an alias for the command 'set index-cache enabled', is deprecated. - Use 'set index-cache enabled on'. - - set index-cache enabled, set index-cache off, set index-cache on - alias set index-cache off = set index-cache enabled off - alias set index-cache on = set index-cache enabled on - Enable the index cache. - When on, enable the use of the index cache. - - After: - - (gdb) help set index-cache enabled - Enable the index cache. - When on, enable the use of the index cache. - (gdb) help set index-cache on - Warning: 'set index-cache on', an alias for the command 'set index-cache enabled', is deprecated. - Use 'set index-cache enabled on'. - - Enable the index cache. - When on, enable the use of the index cache. - - Change-Id: I989b618a5ad96ba975367e9d16db95523cd57a4c - -2021-12-04 Simon Marchi - - gdb/testsuite: fix two "maint info line-table"-related tests - Commit 92228a334ba2 ("gdb: small "maintenance info line-table" - readability improvements") change the output format of "maint info - line-table" slightly, adding some empty lines between each - line-table. This causes two tests to start failing, update them to - account for those empty lines. - - Change-Id: I9d33a58fce3e860ba0554b25f5582e8066a5c519 - -2021-12-04 Simon Marchi - - gdb: revert one array_view copy change in ada-lang.c - Commit 4bce7cdaf481 ("gdbsupport: add array_view copy function") caused - an internal error when running gdb.ada/packed_array_assign.exp: - - print pra(1) := pr^M - /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/array-view.h:217: internal-error: copy: Assertion `dest.size () == src.size ()' failed.^M - - I am not sure what's the root cause of this, whether it is a GDB bug - exposed by using the array_view copy function or not. Back out the - change that triggers the internal error for now, while we investigate - it. - - Change-Id: I055ab14143e4cfd3ca7ce8f4855c6c3c05db52a7 - -2021-12-04 Mike Frysinger - - bfd: unify header generation rules - The logic between these rules are extremely similar, so unify them - into a single variable. - -2021-12-04 Mike Frysinger - - bfd: move header updates up a directory - The rules for rebuilding the bfd headers live in the doc/ subdir - (most likely) because they rely on the chew & related tools. But - we can collapse them into the main Makefile while keeping the tools - in the doc subdir easily enough. This makes the code simpler and - allows for rebuilding them in parallel. - - Also add automake silent rule support while we're here. - -2021-12-04 Mike Frysinger - - bfd: convert bfdver.h to silent automake rules - -2021-12-04 GDB Administrator - - Automatic date update in version.in - -2021-12-03 Simon Marchi - - gdb: small "maintenance info line-table" readability improvements - - separate each entry with a newline, to visually separate them - - style filenames with the filename style - - print the name of the compunit_symtab - - A header now looks like this, with the compunit_symtab name added (and - the coloring, but you can't really see it here): - - objfile: /home/simark/build/babeltrace/src/cli/.libs/babeltrace2 ((struct objfile *) 0x613000005980) - compunit_symtab: babeltrace2-cfg-cli-args.c ((struct compunit_symtab *) 0x62100da1ed10) - symtab: /usr/include/glib-2.0/glib/gdatetime.h ((struct symtab *) 0x62100d9ee530) - linetable: ((struct linetable *) 0x0): - - Change-Id: Idc23e10aaa66e2e692adb0a6a74144f72c4fa1c7 - -2021-12-03 Simon Marchi - - gdb: change some alias functions parameters to const-reference - Now that we use intrusive list to link aliases, it becomes easier to - pass cmd_list_element arguments by const-reference rather than by - pointer to some functions, change a few. - - Change-Id: Id0df648ed26e9447da0671fc2c858981cda31df8 - -2021-12-03 Simon Marchi - - gdb: use intrusive_list for cmd_list_element aliases list - Change the manually-implemented linked list to use intrusive_list. This - is not strictly necessary, but it makes the code much simpler. - - Change-Id: Idd08090ebf2db8bdcf68e85ef72a9635f1584ccc - -2021-12-03 Simon Marchi - - gdb: trivial changes to use array_view - Change a few relatively obvious spots using value contents to propagate - the use array_view a bit more. - - Change-Id: I5338a60986f06d5969fec803d04f8423c9288a15 - -2021-12-03 Simon Marchi - - gdb: make extract_integer take an array_view - I think it would make sense for extract_integer, extract_signed_integer - and extract_unsigned_integer to take an array_view. This way, when we - extract an integer, we can validate that we don't overflow the buffer - passed by the caller (e.g. ask to extract a 4-byte integer but pass a - 2-byte buffer). - - - Change extract_integer to take an array_view - - Add overloads of extract_signed_integer and extract_unsigned_integer - that take array_views. Keep the existing versions so we don't - need to change all callers, but make them call the array_view - versions. - - This shortens some places like: - - result = extract_unsigned_integer (value_contents (result_val).data (), - TYPE_LENGTH (value_type (result_val)), - byte_order); - - into - - result = extract_unsigned_integer (value_contents (result_val), byte_order); - - value_contents returns an array view that is of length - `TYPE_LENGTH (value_type (result_val))` already, so the length is - implicitly communicated through the array view. - - Change-Id: Ic1c1f98c88d5c17a8486393af316f982604d6c95 - -2021-12-03 Simon Marchi - - gdbsupport: add array_view copy function - An assertion was recently added to array_view::operator[] to ensure we - don't do out of bounds accesses. However, when the array_view is copied - to or from using memcpy, it bypasses that safety. - - To address this, add a `copy` free function that copies data from an - array view to another, ensuring that the destination and source array - views have the same size. When copying to or from parts of an - array_view, we are expected to use gdb::array_view::slice, which does - its own bounds check. With all that, any copy operation that goes out - of bounds should be caught by an assertion at runtime. - - copy is implemented using std::copy and std::copy_backward, which, at - least on libstdc++, appears to pick memmove when copying trivial data. - So in the end there shouldn't be much difference vs using a bare memcpy, - as we do right now. When copying non-trivial data, std::copy and - std::copy_backward assigns each element in a loop. - - To properly support overlapping ranges, we must use std::copy or - std::copy_backward, depending on whether the destination is before the - source or vice-versa. std::copy and std::copy_backward don't support - copying exactly overlapping ranges (where the source range is equal to - the destination range). But in this case, no copy is needed anyway, so - we do nothing. - - The order of parameters of the new copy function is based on std::copy - and std::copy_backward, where the source comes before the destination. - - Change a few randomly selected spots to use the new function, to show - how it can be used. - - Add a test for the new function, testing both with arrays of a trivial - type (int) and of a non-trivial type (foo). Test non-overlapping - ranges as well as three kinds of overlapping ranges: source before dest, - dest before source, and dest == source. - - Change-Id: Ibeaca04e0028410fd44ce82f72e60058d6230a03 - -2021-12-03 Simon Marchi - - gdb: change store_waitstatus to return a target_waitstatus by value - store_waitstatus is basically a translation function between a status - integer and an equivalent target_waitstatus object. It would make sense - for it to take the integer as a parameter and return the - target_waitstatus by value. Do that, and rename to - host_status_to_waitstatus. Users can then do: - - ws = host_status_to_waitstatus (status) - - which does the right thing, given the move constructor of - target_waitstatus. - - Change-Id: I7a07d59d3dc19d3ed66929642f82f44f3e85d61b - -2021-12-03 Simon Marchi - - gdb: return *this in target_waitstatus setters - While playing with some code creating target_waitstatus objects, I was - mildly annoyed by the fact that we can't just return a new - target_waitstatus object. We have to do: - - target_waitstatus ws; - ws.set_exited (123); - return ws; - - Make the setters return the "this" object as a reference, such that it's - possible to do: - - return target_waitstatus ().set_exited (123); - - I initially thought of adding static creation functions, which you would - use like: - - return target_waitstatus::make_exited (123); - - However, making the setters return a reference to the object achieves - pretty much the same thing, with less new code. - - Change-Id: I45159b7f9fcd9db5b20603480e323020b14ed147 - -2021-12-03 Simon Marchi - - gdb: make saved_filename an std::string - Make this variable an std::string, avoiding manual memory management. - - Change-Id: Ie7a8d7381449ab9c4dfc4cb8b99e63b9ffa8f947 - -2021-12-03 Richard Sandiford - - aarch64: Fix uninitialised memory - AARCH64_OPDE_EXPECTED_A_AFTER_B and AARCH64_OPDE_A_SHOULD_FOLLOW_B - are not paired with an error string, but we had an assert that the - error was nonnull. Previously this assert was testing uninitialised - memory and so could pass or fail arbitrarily. - - opcodes/ - * aarch64-opc.c (verify_mops_pme_sequence): Initialize the error - field to null for AARCH64_OPDE_EXPECTED_A_AFTER_B and - AARCH64_OPDE_A_SHOULD_FOLLOW_B. - * aarch64-dis.c (print_verifier_notes): Move assert. - -2021-12-03 Andrew Burgess - - gdb: make value_subscripted_rvalue static - The function value_subscripted_rvalue is only used in valarith.c, so - lets make it a static function. - - There should be no user visible change after this commit. - -2021-12-03 Andrew Burgess - - gdb/testsuite: give a test a real name - A test in gdb.python/py-send-packet.exp added in this commit: - - commit 24b2de7b776f8f23788d855b1eec290c6e208821 - Date: Tue Aug 31 14:04:36 2021 +0100 - - gdb/python: add gdb.RemoteTargetConnection.send_packet - - included a large amount of binary data in the command sent to GDB. As - this test didn't have a real test name the binary data was included in - the gdb.sum file. The contents of the binary data could change - between different runs of GDB, and this makes comparing results - harder. - - This commit gives the test a real test name. - -2021-12-03 Andrew Burgess - - gdb/remote: fix use after free bug - This commit: - - commit 288712bbaca36bff6578bc839ebcdc3707662f81 - Date: Mon Nov 22 15:16:27 2021 +0000 - - gdb/remote: use scoped_restore to control starting_up flag - - introduced a use after free bug. The scoped restore added in the - above commit resets a flag within a remote_target's remote_state - object. - - However, in some situations, the remote_target can be unpushed before - the error is thrown. If the only reference to the target is the one - in the target stack, then unpushing the target will cause the - remote_target to be deleted, which, in turn, will delete the - remote_state object. The scoped restore will then try to reset the - flag within a deleted object. - - This problem was caught in the gdb.server/server-connect.exp test, - which, when run with the address sanitizer enabled, highlights the - write after free bug described above. - - This commit resolves this issue by adding a new class specifically for - the purpose of managing the starting_up flag. As well as setting, and - then clearing the starting_up flag, this new class increments, and - then decrements the reference count on the remote_target object. This - prevents the remote_target from being deleted until after the flag has - been reset. - - The gdb.server/server-connect.exp now runs cleanly with the address - sanitizer enabled. - -2021-12-03 Mike Frysinger - - libctf: workaround automake bug with conditional info pages - It looks like automake makes assumptions about its ability to build info - pages based on the GNU standard behavior of shipping info pages with the - distributions. So even though the info pages were conditionalized, and - automake disabled some of the targets, it was still creeping in by way - of unconditional INFO_DEPS settings. - - We can workaround this by adding a stub target for the info page when - building info pages are disabled. This tricks automake into disabling - its own extended generation target. I'll follow up with the automake - folks to see what they think. - -2021-12-03 Chenghua Xu - - Add myself and Zhensong Liu as the LoongArch port maintainer. - -2021-12-03 Alan Modra - - Revert "Re: Don't compile some opcodes files when bfd is 32-bit only" - This reverts commit 7a53275579e7cec9389ccb924f5ecf69e8d89d41. - The bpf sim doesn't work with a 32-bit bfd after all. - -2021-12-03 GDB Administrator - - Automatic date update in version.in - -2021-12-02 Simon Marchi - - gdb: remove unexpected xstrdup in _initialize_maint_test_settings - That xstrdup is not correct, since we are assigning an std::string. The - result of xstrdup is used to initialize the string, and then lost - forever. Remove it. - - Change-Id: Ief7771055e4bfd643ef3b285ec9fb7b1bfd14335 - -2021-12-02 Nick Clifton - - Fix illegal memory access whilst parsing corrupt DWARF debug information. - PR 28645 - * dwarf.c (process_cu_tu_index): Add test for overruning section - whilst processing slots. - -2021-12-02 Tom de Vries - - [gdb/tdep] Fix avx512 -m32 support in gdbserver - PR27257 reports a problem that can be reproduced as follows: - - use x86_64 machine with avx512 support - - compile a hello world with -m32 to a.out - - start a gdbserver session with a.out - - use gdb to connect to the gdbserver session - - This makes us run into: - ... - Listening on port 2346 - Remote debugging from host ::1, port 34940 - src/gdbserver/regcache.cc:257: \ - A problem internal to GDBserver has been detected. - Unknown register zmm16h requested - ... - - The problem is that i387_xsave_to_cache in gdbserver/i387-fp.cc can't find a - register zmm16h in the register cache. - - To understand how this happens, first some background. - - SSE has 16 128-bit wide xmm registers. - - AVX extends the SSE registers set as follows: - - it extends the 16 existing 128-bit wide xmm registers to 256-bit wide ymm - registers. - - AVX512 extends the AVX register set as follows: - - it extends the 16 existing 256-bit wide ymm registers to 512-bit wide zmm - registers. - - it adds 16 additional 512-bit wide zmm registers (with corresponding ymm and - xmm subregisters added as well) - - However, in 32-bit mode, there are only 8 xmm/ymm/zmm registers. - - The problem we're running into is that gdbserver/i387-fp.cc uses these - constants to describe the size of the register file: - ... - static const int num_avx512_zmmh_low_registers = 16; - static const int num_avx512_zmmh_high_registers = 16; - static const int num_avx512_ymmh_registers = 16; - static const int num_avx512_xmm_registers = 16; - ... - which are all incorrect for the 32-bit case. - - Fix this by replacing the constants with variables that have the appropriate - values in 64-bit and 32-bit mode. - - Tested on x86_64-linux with native and unix/-m32. - -2021-12-02 Simon Marchi - - gdb/testsuite: update tests looking for "DWARF 2" debug format - Commit ab557072b8ec ("gdb: use actual DWARF version in compunit's - debugformat field") changes the debug format string in "info source" to - show the actual DWARF version, rather than always show "DWARF 2". - - However, it failed to consider that some tests checked for the "DWARF 2" - string to see if the test program is compiled with DWARF debug - information. Since everything is compiled with DWARF 4 or 5 nowadays, - that changed the behavior of those tests. Notably, it prevent the - tests using skip_inline_var_tests to run. - - Grep through the testsuite for "DWARF 2" and change all occurrences I - could find to use "DWARF [0-9]" instead (that string is passed to TCL's - string match). - - Change-Id: Ic7fb0217fb9623880c6f155da6becba0f567a885 - -2021-12-02 Joel Brobecker - - (PPC64) fix handling of fixed-point values when using "return" command - In the gdb.ada/fixed_points_function.exp testcase, we have the following - Ada code... - - type FP1_Type is delta 0.1 range -1.0 .. +1.0; -- Ordinary - function Call_FP1 (F : FP1_Type) return FP1_Type is - begin - FP1_Arg := F; - return FP1_Arg; - end Call_FP1; - - ... used as follow: - - F1 : FP1_Type := 1.0; - F1 := Call_FP1 (F1); - - The testcase, among other things, verifies that "return" works - properly as follow: - - | (gdb) return 1.0 - | Make pck.call_fp1 return now? (y or n) y - | [...] - | 9 F1 := Call_FP1 (F1); - | (gdb) next - | (gdb) print f1 - | $1 = 0.0625 - - The output of the last command shows that we returned the wrong - value. The value printed gives a clue about the problem, since - it is 1/16th of the value we expected, where 1/16 is FP1_Type's - scaling factor. - - The problem, here, comes from the fact that the function - handling return values for base types (ppc64_sysv_abi_return_value_base) - writes the return value using unpack_long which, upon seeing that - the value being unpacked is a fixed point type, applies the scaling - factor, to get the integer-representation of our fixed-point value - (similar to what it does with floats, for instance). - - So, the fix consists in teaching ppc64_sysv_abi_return_value_base - about fixed-point types, and to avoid the unwanted application - of the scaling factor. - - Note that the "finish" function, on the other hand, does not - suffer from this issue, simply becaue the value returned by - the function is read from register without the use of a type, - thus avoiding an unwanted application of a scaling factor. - - No test added, as this change is already tested by - gdb.ada/fixed_points_function.exp. - - Co-Authored-By: Tristan Gingold - -2021-12-02 Joel Brobecker - - (RISCV) fix handling of fixed-point type return values - This commit adds support for TYPE_CODE_FIXED_POINT types for - "finish" and "return" commands. - - Consider the following Ada code... - - type FP1_Type is delta 0.1 range -1.0 .. +1.0; -- Ordinary - function Call_FP1 (F : FP1_Type) return FP1_Type is - begin - FP1_Arg := F; - return FP1_Arg; - end Call_FP1; - - ... used as follow: - - F1 : FP1_Type := 1.0; - F1 := Call_FP1 (F1); - - "finish" currently behaves as follow: - - | (gdb) finish - | [...] - | Value returned is $1 = 0 - - We expect the returned value to be "1". - - Similarly, "return" makes the function return the wrong value: - - | (gdb) return 1.0 - | Make pck.call_fp1 return now? (y or n) y - | [...] - | 9 F1 := Call_FP1 (F1); - | (gdb) next - | (gdb) print f1 - | $1 = 0.0625 - - (we expect it to print "1" instead). - - This problem comes from the handling of integral return values - when the return value is actually fixed point type. Our type - here is actually a range of a fixed point type, but the same - principles should also apply to pure fixed-point types. For - the record, here is what the debugging info looks like: - - <1><238>: Abbrev Number: 2 (DW_TAG_subrange_type) - <239> DW_AT_lower_bound : -16 - <23a> DW_AT_upper_bound : 16 - <23b> DW_AT_name : pck__fp1_type - <23f> DW_AT_type : <0x248> - - <1><248>: Abbrev Number: 4 (DW_TAG_base_type) - <249> DW_AT_byte_size : 1 - <24a> DW_AT_encoding : 13 (signed_fixed) - <24b> DW_AT_binary_scale: -4 - <24c> DW_AT_name : pck__Tfp1_typeB - <250> DW_AT_artificial : 1 - - ... where the scaling factor is 1/16. - - Looking at the "finish" command, what happens is that riscv_arg_location - determines that our return value should be returned by parameter using - an integral convention (via builtin type long). And then, - riscv_return_value uses a cast to that builtin type long to - store the value of into a buffer with the right register size. - This doesn't work in our case, because the underlying value - returned by the function is unscaled, which means it is 16, - and thus the cast is like doing: - - arg_val = (FP1_Type) 16 - - ... In other words, it is trying to create an FP1_Type enty whose - value is 16. Applying the scaling factor, that's 256, and because - the size of FP1_Type is 1 byte, we overflow and thus it ends up - being zero. - - The same happen with the "return" function, but the other way around. - - The fix consists in handling fixed-point types separately from - integral types. - -2021-12-02 Joel Brobecker - - (ARM/fixed-point) wrong value shown by "finish" command: - Consider the following Ada code: - - type FP1_Type is delta 0.1 range -1.0 .. +1.0; -- Ordinary - FP1_Arg : FP1_Type := 0.0; - - function Call_FP1 (F : FP1_Type) return FP1_Type is - begin - FP1_Arg := F; - return FP1_Arg; - end Call_FP1; - - After having stopped inside function Call_FP1 as follow: - - Breakpoint 1, pck.call_fp1 (f=1) at /[...]/pck.adb:5 - 5 FP1_Arg := F; - - Returning from that function call using "finish" should show - that the function return "1.0" (the same value as was passed - as an argument). However, this is not the case: - - (gdb) finish - Run till exit from #0 pck.call_fp1 (f=1) - [...] - 9 F1 := Call_FP1 (F1); - Value returned is $1 = 0 - - This patch enhances the extraction of the return value to know about - fixed point types. - -2021-12-02 Xavier Roirand - - (Ada/AArch64) fix fixed point argument passing in inferior funcall - Consider the following code: - - type FP1_Type is delta 0.1 range -1.0 .. +1.0; -- Ordinary - - function Call_FP1 (F : FP1_Type) return FP1_Type is - begin - return F; - end Call_FP1; - - When the default in GCC is to generate proper DWARF info for fixed point - types, then in gdb, printing the result of a call to call_fp1 with a - decimal parameter leads to: - - (gdb) p call_fp1(0.5) - $1 = 0 - - The displayed value is wrong, and we actually expected: - - (gdb) p call_fp1(0.5) - $1 = 0.5 - - What happened is that our fixed point type parameter got promoted to a - 32bit integer because we detected that the length of that object was less - than 4 bytes. The compiler does not perform this promotion and therefore - GDB should not either. - - This patch fixes the behavior described above. - -2021-12-02 Tom Tromey - - Implement 'task apply' - This adds a 'task apply' command, which is the Ada tasking analogue of - 'thread apply'. Unlike 'thread apply', it doesn't offer the - 'ascending' flag; but otherwise it's essentially the same. - - Add "task" keyword to the "watch" command - Breakpoints in gdb can be made specific to an Ada task using the - "task" qualifier. This patch applies this same idea to watchpoints. - -2021-12-02 Richard Sandiford - - aarch64: Update gas/NEWS for recent changes - gas/ - * NEWS: Mention support for Armv8.8-A and for new system registers. - -2021-12-02 Richard Sandiford - - aarch64: Add BC instruction - This patch adds support for the Armv8.8-A BC instruction. - [https://developer.arm.com/documentation/ddi0596/2021-09/Base-Instructions/BC-cond--Branch-Consistent-conditionally-?lang=en] - - include/ - * opcode/aarch64.h (AARCH64_FEATURE_HBC): New macro. - (AARCH64_ARCH_V8_8): Make armv8.8-a imply AARCH64_FEATURE_HBC. - - opcodes/ - * aarch64-tbl.h (aarch64_feature_hbc): New variable. - (HBC, HBC_INSN): New macros. - (aarch64_opcode_table): Add BC.C. - * aarch64-dis-2.c: Regenerate. - - gas/ - * doc/c-aarch64.texi: Document +hbc. - * config/tc-aarch64.c (aarch64_features): Add "hbc". - * testsuite/gas/aarch64/hbc.s, testsuite/gas/aarch64/hbc.d: New test. - * testsuite/gas/aarch64/hbc-invalid.s, - testsuite/gas/aarch64/hbc-invalid.l, - testsuite/gas/aarch64/hbc-invalid.d: New test. - -2021-12-02 Richard Sandiford - - aarch64: Enforce P/M/E order for MOPS instructions - The MOPS instructions should be used as a triple, such as: - - cpyfp [x0]!, [x1]!, x2! - cpyfm [x0]!, [x1]!, x2! - cpyfe [x0]!, [x1]!, x2! - - The registers should also be the same for each writeback operand. - This patch adds a warning for code that doesn't follow this rule, - along similar lines to the warning that we already emit for - invalid uses of MOVPRFX. - - include/ - * opcode/aarch64.h (C_SCAN_MOPS_P, C_SCAN_MOPS_M, C_SCAN_MOPS_E) - (C_SCAN_MOPS_PME): New macros. - (AARCH64_OPDE_A_SHOULD_FOLLOW_B): New aarch64_operand_error_kind. - (AARCH64_OPDE_EXPECTED_A_AFTER_B): Likewise. - (aarch64_operand_error): Make each data value a union between - an int and a string. - - opcodes/ - * aarch64-tbl.h (MOPS_CPY_OP1_OP2_INSN): Add scan flags. - (MOPS_SET_OP1_OP2_INSN): Likewise. - * aarch64-opc.c (set_out_of_range_error): Update after change to - aarch64_operand_error. - (set_unaligned_error, set_reg_list_error): Likewise. - (init_insn_sequence): Use a 3-instruction sequence for - MOPS P instructions. - (verify_mops_pme_sequence): New function. - (verify_constraints): Call it. - * aarch64-dis.c (print_verifier_notes): Handle - AARCH64_OPDE_A_SHOULD_FOLLOW_B and AARCH64_OPDE_EXPECTED_A_AFTER_B. - - gas/ - * config/tc-aarch64.c (operand_mismatch_kind_names): Add entries - for AARCH64_OPDE_A_SHOULD_FOLLOW_B and AARCH64_OPDE_EXPECTED_A_AFTER_B. - (operand_error_higher_severity_p): Check that - AARCH64_OPDE_A_SHOULD_FOLLOW_B and AARCH64_OPDE_EXPECTED_A_AFTER_B - come between AARCH64_OPDE_RECOVERABLE and AARCH64_OPDE_SYNTAX_ERROR; - their relative order is not significant. - (record_operand_error_with_data): Update after change to - aarch64_operand_error. - (output_operand_error_record): Likewise. Handle - AARCH64_OPDE_A_SHOULD_FOLLOW_B and AARCH64_OPDE_EXPECTED_A_AFTER_B. - * testsuite/gas/aarch64/mops_invalid_2.s, - testsuite/gas/aarch64/mops_invalid_2.d, - testsuite/gas/aarch64/mops_invalid_2.l: New test. - -2021-12-02 Richard Sandiford - - aarch64: Add support for +mops - This patch adds support for FEAT_MOPS, an Armv8.8-A extension - that provides memcpy and memset acceleration instructions. - - I took the perhaps controversial decision to generate the individual - instruction forms using macros rather than list them out individually. - This becomes useful with a follow-on patch to check that code follows - the correct P/M/E sequence. - [https://developer.arm.com/documentation/ddi0596/2021-09/Base-Instructions?lang=en] - - include/ - * opcode/aarch64.h (AARCH64_FEATURE_MOPS): New macro. - (AARCH64_ARCH_V8_8): Make armv8.8-a imply AARCH64_FEATURE_MOPS. - (AARCH64_OPND_MOPS_ADDR_Rd): New aarch64_opnd. - (AARCH64_OPND_MOPS_ADDR_Rs): Likewise. - (AARCH64_OPND_MOPS_WB_Rn): Likewise. - - opcodes/ - * aarch64-asm.h (ins_x0_to_x30): New inserter. - * aarch64-asm.c (aarch64_ins_x0_to_x30): New function. - * aarch64-dis.h (ext_x0_to_x30): New extractor. - * aarch64-dis.c (aarch64_ext_x0_to_x30): New function. - * aarch64-tbl.h (aarch64_feature_mops): New feature set. - (aarch64_feature_mops_memtag): Likewise. - (MOPS, MOPS_MEMTAG, MOPS_INSN, MOPS_MEMTAG_INSN) - (MOPS_CPY_OP1_OP2_PME_INSN, MOPS_CPY_OP1_OP2_INSN, MOPS_CPY_OP1_INSN) - (MOPS_CPY_INSN, MOPS_SET_OP1_OP2_PME_INSN, MOPS_SET_OP1_OP2_INSN) - (MOPS_SET_INSN): New macros. - (aarch64_opcode_table): Add MOPS instructions. - (aarch64_opcode_table): Add entries for AARCH64_OPND_MOPS_ADDR_Rd, - AARCH64_OPND_MOPS_ADDR_Rs and AARCH64_OPND_MOPS_WB_Rn. - * aarch64-opc.c (aarch64_print_operand): Handle - AARCH64_OPND_MOPS_ADDR_Rd, AARCH64_OPND_MOPS_ADDR_Rs and - AARCH64_OPND_MOPS_WB_Rn. - (verify_three_different_regs): New function. - * aarch64-asm-2.c: Regenerate. - * aarch64-dis-2.c: Likewise. - * aarch64-opc-2.c: Likewise. - - gas/ - * doc/c-aarch64.texi: Document +mops. - * config/tc-aarch64.c (parse_x0_to_x30): New function. - (parse_operands): Handle AARCH64_OPND_MOPS_ADDR_Rd, - AARCH64_OPND_MOPS_ADDR_Rs and AARCH64_OPND_MOPS_WB_Rn. - (aarch64_features): Add "mops". - * testsuite/gas/aarch64/mops.s, testsuite/gas/aarch64/mops.d: New test. - * testsuite/gas/aarch64/mops_invalid.s, - * testsuite/gas/aarch64/mops_invalid.d, - * testsuite/gas/aarch64/mops_invalid.l: Likewise. - -2021-12-02 Richard Sandiford - - aarch64: Add Armv8.8-A system registers - Armv8.8-A defines two new system registers: allint and icc_nmiar1_el1. - Both of them were previously unmapped. allint supports a 0/1 immediate. - [https://developer.arm.com/documentation/ddi0595/2021-09/AArch64-Registers/ALLINT--All-Interrupt-Mask-Bit?lang=en] - [https://developer.arm.com/documentation/ddi0595/2021-09/AArch64-Registers/ICC-NMIAR1-EL1--Interrupt-Controller-Non-maskable-Interrupt-Acknowledge-Register-1?lang=en] - - opcodes/ - * aarch64-opc.c (SR_V8_8): New macro. - (aarch64_sys_regs): Add allint and icc_nmiar1_el1. - (aarch64_pstatefields): Add allint. - - gas/ - * testsuite/gas/aarch64/armv8_8-a-sysregs.s, - * testsuite/gas/aarch64/armv8_8-a-sysregs.d: New test. - * testsuite/gas/aarch64/armv8_8-a-sysregs-invalid.s, - * testsuite/gas/aarch64/armv8_8-a-sysregs-invalid.l, - * testsuite/gas/aarch64/armv8_8-a-sysregs-invalid.d: New test. - -2021-12-02 Richard Sandiford - - aarch64: Add id_aa64isar2_el1 - Armv8.8-A defines a read-only system register called id_aa64isar2_el1. - The register was previously RES0 and should therefore be accepted - at all architecture levels. - [https://developer.arm.com/documentation/ddi0595/2021-09/AArch64-Registers/ID-AA64ISAR2-EL1--AArch64-Instruction-Set-Attribute-Register-2?lang=en] - - opcodes/ - * aarch64-opc.c (aarch64_sys_regs): Add id_aa64isar2_el1. - - gas/ - * testsuite/gas/aarch64/sysreg-diagnostic.s: Test writes to - id_aa64isar2_el1. - * testsuite/gas/aarch64/sysreg-diagnostic.d: Update accordingly. - * testsuite/gas/aarch64/sysreg-diagnostic.l: Likewise. - * testsuite/gas/aarch64/sysreg.s: Test reads from - id_aa64isar2_el1. - * testsuite/gas/aarch64/sysreg.d: Update accordingly. - -2021-12-02 Richard Sandiford - - aarch64: Add support for Armv8.8-A - This patch adds skeleton support for -march=armv8.8-a, testing only - that it correctly inherits from armv8.7-a. - - include/ - * opcode/aarch64.h (AARCH64_FEATURE_V8_8): New macro. - (AARCH64_ARCH_V8_8): Likewise. - - gas/ - * doc/c-aarch64.texi: Document armv8.8-a. - * config/tc-aarch64.c (aarch64_archs): Add armv8-8-a - * testsuite/gas/aarch64/v8-8-a.s, - * testsuite/gas/aarch64/v8-8-a.d: New test. - -2021-12-02 Richard Sandiford - - aarch64: Provide line info for unclosed sequences - We warn about MOVPRFX instructions that have no following - instruction. This patch adds a line number to the message, - which is useful if the assembly code has multiple text sections. - - The new code is unconditional since OBJ_ELF is always defined - for aarch64. - - gas/ - * config/tc-aarch64.h (aarch64_segment_info_type): Add last_file - and last_line. - * config/tc-aarch64.c (now_instr_sequence): Delete. - (force_automatic_sequence_close): Provide a line number when - reporting unclosed sequences. - (md_assemble): Record the location of the instruction in - tc_segment_info. - * testsuite/gas/aarch64/sve-movprfx_4.l: Add line number to error - message. - * testsuite/gas/aarch64/sve-movprfx_7.l: Likewise. - * testsuite/gas/aarch64/sve-movprfx_8.l: Likewise. - -2021-12-02 Richard Sandiford - - aarch64: Tweak insn sequence code - libopcodes has some code to check constraints across sequences - of consecutive instructions. It was added to support MOVPRFX - sequences but is going to be useful for the Armv8.8-A MOPS - feature as well. - - Currently the structure has one field to record the instruction - that started a sequence and another to record the remaining - instructions in the sequence. It's more convenient for the - MOPS code if we put the instructions into a single array instead. - - No functional change intended. - - include/ - * opcode/aarch64.h (aarch64_instr_sequence): Replace num_insns - and current_insns with num_added_insns and num_allocated_insns. - - opcodes/ - * aarch64-opc.c (add_insn_to_sequence): New function. - (init_insn_sequence): Update for new aarch64_instr_sequence layout. - Add the first instruction to the inst array. - (verify_constraints): Update for new aarch64_instr_sequence layout. - Don't add the last instruction to the array. - -2021-12-02 Richard Sandiford - - aarch64: Add maximum immediate value to aarch64_sys_reg - The immediate form of MSR has a 4-bit immediate field (in CRm). - However, many forms of MSR require a smaller immediate. These cases - are identified by value in operand_general_constraint_met_p, - but they're now the common case rather than the exception. - - This patch therefore adds the maximum value to the sys_reg - description and gets the range from there. It also enforces - the minimum of 0, which avoids a situation in which: - - msr dit, #2 - - would give the expected: - - Error: immediate value out of range 0 to 1 - - whereas: - - msr dit, #-1 - - would give: - - Error: immediate value out of range 0 to 15 - - (from the later UIMM4 checking). - - Also: - - - we were reporting the first error above against the wrong operand - - TCO takes a single-bit immediate, but we previously allowed - all 16 values. - [https://developer.arm.com/documentation/ddi0596/2021-09/Base-Instructions/MSR--immediate---Move-immediate-value-to-Special-Register-?lang=en] - - opcodes/ - * aarch64-opc.h (F_REG_MAX_VALUE, F_GET_REG_MAX_VALUE): New macros. - * aarch64-opc.c (operand_general_constraint_met_p): Read the - maximum MSR immediate value from aarch64_pstatefields. - (aarch64_pstatefields): Add the maximum immediate value - for each register. - - gas/ - * testsuite/gas/aarch64/sysreg-4.s: Use an immediate value of 1 - rather than 8 for the TCO test. - * testsuite/gas/aarch64/sysreg-4.d: Update accordingly. - * testsuite/gas/aarch64/armv8_2-a-illegal.l: Fix operand number - in MSR immediate error messages. - * testsuite/gas/aarch64/diagnostic.l: Likewise. - * testsuite/gas/aarch64/pan-illegal.l: Likewise. - * testsuite/gas/aarch64/ssbs-illegal1.l: Likewise. - * testsuite/gas/aarch64/illegal-sysreg-4b.s, - * testsuite/gas/aarch64/illegal-sysreg-4b.d, - * testsuite/gas/aarch64/illegal-sysreg-4b.l: New test. - -2021-12-02 Marcus Nilsson - - Allow the --visualize-jumps feature to work with the AVR disassembler. - * avr-dis.c (avr_operand); Pass in disassemble_info and fill - in insn_type on branching instructions. - -2021-12-02 Simon Marchi - - gdb, include: replace pragmas with DIAGNOSTIC macros, fix build with g++ 4.8 - When introducing this code, I forgot that we had some macros for this. - Replace some "manual" pragma diagnostic with some DIAGNOSTIC_* macros, - provided by include/diagnostics.h. - - In diagnostics.h: - - - Add DIAGNOSTIC_ERROR, to enable a diagnostic at error level. - - Add DIAGNOSTIC_ERROR_SWITCH, to enable -Wswitch at error level, for - both gcc and clang. - - Additionally, using DIAGNOSTIC_PUSH, DIAGNOSTIC_ERROR_SWITCH and - DIAGNOSTIC_POP seems to misbehave with g++ 4.8, where we see these - errors: - - CXX ada-tasks.o - /home/smarchi/src/binutils-gdb/gdb/ada-tasks.c: In function void read_known_tasks(): - /home/smarchi/src/binutils-gdb/gdb/ada-tasks.c:998:10: error: enumeration value ADA_TASKS_UNKNOWN not handled in switch [-Werror=switch] - switch (data->known_tasks_kind) - ^ - - Because of the POP, the diagnostic should go back to being disabled, - since it was disabled in the beginning, but that's not what we see - here. Versions of GCC >= 5 compile correctly. - - Work around this by making DIAGNOSTIC_ERROR_SWITCH a no-op for GCC < 5. - - Note that this code (already as it exists in master today) enables - -Wswitch at the error level even if --disable-werror is passed. It - shouldn't be a problem, as it's not like a new enumerator will appear - out of nowhere and cause a build error if building with future - compilers. Still, for correctness, we would ideally want to ask the - compiler to enable -Wswitch at its default level (as if the user had - passed -Wswitch on the command-line). There doesn't seem to be a way to - do this. - - Change-Id: Id33ebec3de39bd449409ea0bab59831289ffe82d - -2021-12-02 Simon Marchi - - gas: re-generate configure - When configuring gas, I get: - - config.status: error: cannot find input file: `doc/Makefile.in' - - This is because configure is out-of-date, re-generate it. - - Change-Id: Iaa5980c282900d9fd23b90f0df25bf8ba3676498 - -2021-12-02 Simon Marchi - - libctf: re-generate configure - When configuring libctf, I get: - - config.status: error: cannot find input file: `doc/Makefile.in' - - This is because configure is out-of-date, re-generate it. - - Change-Id: Ie69acd33012211a4620661582c7d24ad6d2cd169 - -2021-12-02 H.J. Lu - - x86: Skip __[start|stop]_SECNAME for --gc-sections -z start-stop-gc - Don't convert memory load to immediate load on __start_SECNAME and - __stop_SECNAME for --gc-sections -z start-stop-gc if all SECNAME - sections been garbage collected. - - bfd/ - - PR ld/27491 - * elf32-i386.c (elf_i386_convert_load_reloc): Skip __start_SECNAME - and __stop_SECNAME for --gc-sections -z start-stop-gc if the input - section been garbage collected. - * elf64-x86-64.c (elf_x86_64_convert_load_reloc): Likewise. - * elfxx-x86.h (elf_x86_start_stop_gc_p): New function. - - ld/ - PR ld/27491 - * testsuite/ld-i386/i386.exp: Run PR ld/27491 tests. - * testsuite/ld-x86-64/x86-64.exp: Likewise. - * testsuite/ld-i386/pr27491-1.s: New file. - * testsuite/ld-i386/pr27491-1a.d: Likewise. - * testsuite/ld-i386/pr27491-1b.d: Likewise. - * testsuite/ld-i386/pr27491-1c.d: Likewise. - * testsuite/ld-i386/pr27491-2.d: Likewise. - * testsuite/ld-i386/pr27491-2.s: Likewise. - * testsuite/ld-i386/pr27491-3.d: Likewise. - * testsuite/ld-i386/pr27491-3.s: Likewise. - * testsuite/ld-i386/pr27491-4.d: Likewise. - * testsuite/ld-i386/pr27491-4a.s: Likewise. - * testsuite/ld-i386/pr27491-4b.s: Likewise. - * testsuite/ld-x86-64/pr27491-1.s: Likewise. - * testsuite/ld-x86-64/pr27491-1a.d: Likewise. - * testsuite/ld-x86-64/pr27491-1b.d: Likewise. - * testsuite/ld-x86-64/pr27491-1c.d: Likewise. - * testsuite/ld-x86-64/pr27491-2.d: Likewise. - * testsuite/ld-x86-64/pr27491-2.s: Likewise. - * testsuite/ld-x86-64/pr27491-3.d: Likewise. - * testsuite/ld-x86-64/pr27491-3.s: Likewise. - * testsuite/ld-x86-64/pr27491-4.d: Likewise. - * testsuite/ld-x86-64/pr27491-4a.s: Likewise. - * testsuite/ld-x86-64/pr27491-4b.s: Likewise. - -2021-12-02 Mike Frysinger - - bfd: delete unused proto settings - These have been around for decades but don't appear to be used, and - trying to build them (e.g. `make archive.p archive.ip`) doesn't work, - so just delete it all. - - gas: merge doc subdir up a level - This avoids a recursive make into the doc subdir and speeds up the - build slightly. It also allows for more parallelism. - - libctf: merge doc subdir up a level - This avoids a recursive make into the doc subdir and speeds up the - build slightly. It also allows for more parallelism. - -2021-12-02 Simon Marchi - - gdb: use actual DWARF version in compunit's debugformat field - The "info source" command, with a DWARF-compile program, always show - that the debug info is "DWARF 2": - - (gdb) info source - Current source file is test.c - Compilation directory is /home/smarchi/build/binutils-gdb/gdb - Located in /home/smarchi/build/binutils-gdb/gdb/test.c - Contains 2 lines. - Source language is c. - Producer is GNU C17 9.3.0 -mtune=generic -march=x86-64 -g3 -gdwarf-5 -O0 -fasynchronous-unwind-tables -fstack-protector-strong -fstack-clash-protection -fcf-protection. - Compiled with DWARF 2 debugging format. - Includes preprocessor macro info. - - Change it to display the actual DWARF version: - - (gdb) info source - Current source file is test.c - Compilation directory is /home/smarchi/build/binutils-gdb/gdb - Located in /home/smarchi/build/binutils-gdb/gdb/test.c - Contains 2 lines. - Source language is c. - Producer is GNU C17 9.3.0 -mtune=generic -march=x86-64 -g3 -gdwarf-5 -O0 -fasynchronous-unwind-tables -fstack-protector-strong -fstack-clash-protection -fcf-protection. - Compiled with DWARF 5 debugging format. - Includes preprocessor macro info. - - The comp_unit_head::version field is guaranteed to be between 2 and 5, - thanks to the check in read_comp_unit_head. So we can still use static - strings to pass to record_debugformat, and keep it efficient. - - In the future, when somebody will update GDB to support DWARF 6, they'll - hit this assert and have to update this code. - - Change-Id: I3270b7ebf5e9a17b4215405bd2e365662a4d6172 - -2021-12-02 H.J. Lu - - elf: Discard input .note.gnu.build-id sections - 1. Discard input .note.gnu.build-id sections. - 2. Clear the build ID field before writing. - 3. Use bfd_make_section_anyway_with_flags to create the output - .note.gnu.build-id section. - - PR ld/28639 - * ldelf.c (ldelf_after_open): Discard input .note.gnu.build-id - sections, excluding the first one. - (write_build_id): Clear the build ID field before writing. - (ldelf_setup_build_id): Use bfd_make_section_anyway_with_flags - to create the output .note.gnu.build-id section. - * testsuite/ld-elf/build-id.exp: New file. - * testsuite/ld-elf/pr28639a.rd: Likewise. - * testsuite/ld-elf/pr28639b.rd: Likewise. - * testsuite/ld-elf/pr28639c.rd: Likewise. - * testsuite/ld-elf/pr28639d.rd: Likewise. - -2021-12-02 GDB Administrator - - Automatic date update in version.in - -2021-12-01 Mike Frysinger - - binutils: add missing prefix for binutils/index.html rule - -2021-12-01 Luca Boccassi - - readelf: recognize FDO Packaging Metadata ELF note. (Correcting snafu during patch application) - -2021-12-01 Luca Boccassi - - readelf: recognize FDO Packaging Metadata ELF note - As defined on: https://systemd.io/COREDUMP_PACKAGE_METADATA/ - this note will be used starting from Fedora 36. Allow - readelf --notes to pretty print it: - - Displaying notes found in: .note.package - Owner Data size Description - FDO 0x00000039 FDO_PACKAGING_METADATA - Packaging Metadata: {"type":"deb","name":"fsverity-utils","version":"1.3-1"} - -2021-12-01 Tom de Vries - - [gdb/testsuite] Fix typo in gdb.multi/multi-arch-exec.exp - With gdb.multi/multi-arch-exec.exp I run into: - ... - Running src/gdb/testsuite/gdb.multi/multi-arch-exec.exp ... - ERROR: tcl error sourcing src/gdb/testsuite/gdb.multi/multi-arch-exec.exp. - ERROR: wrong # args: extra words after "else" clause in "if" command - while executing - "if [istarget "powerpc64*-*-*"] { - set march "-m64" - } else if [istarget "s390*-*-*"] { - set march "-m31" - } else { - set march "-m32" - }" - ... - - Fix the else if -> elseif typo. - - Tested on x86_64-linux. - -2021-12-01 Tom de Vries - - [gdb/testsuite] Fix gdb.arch/i386-pkru.exp on linux - When running test-case gdb.arch/i386-pkru.exp on a machine with "Memory - Protection Keys for Userspace" support, we run into: - ... - (gdb) PASS: gdb.arch/i386-pkru.exp: probe PKRU support - print $pkru^M - $2 = 1431655764^M - (gdb) FAIL: gdb.arch/i386-pkru.exp: pkru register - ... - - The test-case expects the $pkru register to have the default value 0, matching - the "init state" of 0 defined by the XSAVE hardware. - - Since linux kernel version v4.9 containing commit acd547b29880 ("x86/pkeys: - Default to a restrictive init PKRU"), the register is set to 0x55555554 by - default (which matches the printed decimal value above). - - Fix the FAIL by accepting this value for linux. - - Tested on x86_64-linux. - -2021-12-01 Nick Clifton - - Fix the fields in the x_n union inside the the x_file structure so that pointers can be stored. - PR 28630 - * coff/internal.h (x_n): Use bfd_hostptr_t for the fields in this - structure. - -2021-12-01 Andrew Burgess - - gdb/remote: use scoped_restore to control starting_up flag - This commit makes use of a scoped_restore object to control the - remote_state::starting_up flag within the remote_target::start_remote - method. - - Ideally I would have liked to create the scoped_restore inside - start_remote and just leave the restore in place until the end of the - scope, however, I'm worried that doing this would change the behaviour - of GDB. Specifically, in start_remote, the following code is executed - once the starting_up flag has been restored to its previous value: - - if (breakpoints_should_be_inserted_now ()) - insert_breakpoints (); - - I think (but am not 100% sure) that calling install_breakpoints could - end up back inside remote_target::can_download_tracepoint, which does - check the value of remote_state::starting_up. And so, I'm concerned - that leaving the scoped_restore in place until the end of start_remote - will cause a possible change in behaviour. - - To avoid this, and to leave things as close to the current behaviour - as possible, I've split remote_target::start_remote into two, there's - the main function body which moves into remote_target::start_remote_1, - this function uses the scoped_restore to change the ::starting_up - flag, then there's the old remote_target::start_remote, which now just - calls ::start_remote_1, and then does the insert_breakpoints call. - - There should be no user visible changes after this commit, unless - there's a situation where the ::starting_up flag could previously have - been left set, if this was the case, then this situation should no - longer be possible. - -2021-12-01 Simon Marchi - - gdb.base/corefile-buildid.exp: fix DUPLICATEs when failing to generate a core file - When my system isn't properly configured to generate core files in the - local directory, I see these DUPLICATEs: - - DUPLICATE: gdb.base/corefile-buildid.exp: could not generate core file - - Fix that by having a single with_test_prefix around that message and - what follows. - - Change-Id: I4ac245fcce1c666db56e3bad3582aa17f183dcba - -2021-12-01 Mike Frysinger - - gold: enable silent build rules - -2021-12-01 GDB Administrator - - Automatic date update in version.in - -2021-11-30 Carl Love - - gdb: Powerpc fix gdb.multi/multi-arch-exec.exp test - The expect file has a procedure append_arch_options which sets march based - the istarget. The current if / else statement does not check for - powerpc64. The else statement is hit which sets march to -m32. This - results in compilation errors on 64-bit PowerPC. - - This patch adds an if statement to check for powerpc64 and if true sets mach - to -m64. - - The patch was tested on a Power 10 system. No compile errors were generated. - The test completes with 1 expected pass and no failures. - -2021-11-30 Mike Frysinger - - binutils: regenerate Makefile.in after doc/ changes - -2021-11-30 Roland McGrath - - Fix missing build dependency for binutils man pages - binutils/ - * doc/local.mk: Give each man page target its missing dependency on - doc/$(am__dirstamp). - -2021-11-30 Richard Sandiford - - aarch64: Add missing system registers [PR27145] - This patch adds support for various system registers, up to Armv8.7-A. - This includes all the registers that were mentioned in the PR and that - hadn't become supported since. - - opcodes/ - PR aarch64/27145 - * aarch64-opc.c (SR_V8_4): Remove duplicate definition. - (SR_V8_6, SR_V8_7, SR_GIC, SR_AMU): New macros. - (aarch64_sys_regs): Add missing entries (up to Armv8.7-A). - - gas/ - PR aarch64/27145 - * testsuite/gas/aarch64/sysreg-8.s, - * testsuite/gas/aarch64/sysreg-8.d, - * testsuite/gas/aarch64/illegal-sysreg-8.s, - * testsuite/gas/aarch64/illegal-sysreg-8.d, - * testsuite/gas/aarch64/illegal-sysreg-8.l, - * testsuite/gas/aarch64/illegal-sysreg-8b.s, - * testsuite/gas/aarch64/illegal-sysreg-8b.d, - * testsuite/gas/aarch64/illegal-sysreg-8b.l: New tests. - * testsuite/gas/aarch64/sysreg.s: Change system register numbers - to ones that are still unallocated. - * testsuite/gas/aarch64/sysreg.d: Update accordingly. - -2021-11-30 Richard Sandiford - - aarch64: Make LOR registers conditional on +lor - We have a +lor feature flag for the Limited Ordering Regions - extension, but the associated registers didn't use it. - - opcodes/ - * aarch64-opc.c (SR_LOR): New macro. - (aarch64_sys_regs): Use it for lorc_el1, lorea_el1, lorn_el1 and - lorsa_el1. - - gas/ - * testsuite/gas/aarch64/sysreg-7.s: Enable +lor. - * testsuite/gas/aarch64/illegal-sysreg-7.s: Test for LOR registers - without +lor. - * testsuite/gas/aarch64/illegal-sysreg-7.d: Update accordingly. - * testsuite/gas/aarch64/illegal-sysreg-7.l: Likewise. - -2021-11-30 Richard Sandiford - - aarch64: Remove ZIDR_EL1 - ZIDR_EL1 was part of an early version of SVE, but didn't make - it to the final release. - - opcodes/ - * aarch64-opc.c (aarch64_sys_regs): Remove zidr_el1 entry. - - gas/ - * testsuite/gas/aarch64/sve-sysreg.s: Remove zidr_el1. - * testsuite/gas/aarch64/sve-sysreg.d: Update accordingly. - * testsuite/gas/aarch64/sve-sysreg-invalid.l: Likewise. - -2021-11-30 Richard Sandiford - - aarch64: Allow writes to MFAR_EL3 - MFAR_EL3 is a read/write register, but was incorrectly marked as - read-only - [https://developer.arm.com/documentation/ddi0601/2021-09/AArch64-Registers/MFAR-EL3--PA-Fault-Address-Register?lang=en] - - opcodes/ - * aarch64-opc.c (aarch64_sys_regs): Mark mfar_el3 as read-write. - - gas/ - * testsuite/gas/aarch64/rme.s: Test writing to mfar_el3. - * testsuite/gas/aarch64/rme.d: Update accordingly. - * testsuite/gas/aarch64/rme-invalid.s: Delete. - * testsuite/gas/aarch64/rme-invalid.l: Likewise. - * testsuite/gas/aarch64/rme-invalid.d: Likewise. - -2021-11-30 Richard Sandiford - - aarch64: Mark PMSIDR_EL1 as read-only - We were incorrectly allowing writes to PMSIDR_EL1, which is - a read-only register. - [https://developer.arm.com/documentation/ddi0595/2021-09/AArch64-Registers/PMSIDR-EL1--Sampling-Profiling-ID-Register?lang=en] - - opcodes/ - * aarch64-opc.c (aarch64_sys_regs): Make pmsidr_el1 as F_REG_READ. - - gas/ - * testsuite/gas/aarch64/msr.s: Remove write to pmsidr_el1. - * testsuite/gas/aarch64/msr.d: Update accordingly. - * testsuite/gas/aarch64/illegal-sysreg-2.s, - * testsuite/gas/aarch64/illegal-sysreg-2.d, - * testsuite/gas/aarch64/illegal-sysreg-2.l: New test. - -2021-11-30 Richard Sandiford - - aarch64: Remove duplicate system register entries - There is a lot of overlap between the ETM and ETE system registers, - so some registers were listed twice. - - Already tested by etm.[sd] and ete.[sd]. - - opcodes/ - * aarch64-opc.c (aarch64_sys_regs): Combine ETE and ETM blocks - and remove redundant entries. - - gas/ - * testsuite/gas/aarch64/etm.s: Remove duplicated test. - * testsuite/gas/aarch64/etm.d: Update accordingly. - -2021-11-30 Richard Sandiford - - aarch64: Check for register aliases before mnemonics - Previously we would not accept: - - A .req B - - if A happened to be the name of an instruction. Adding new - instructions could therefore invalidate existing register aliases. - - I noticed this with a test that used "zero" as a register alias - for "xzr", where "zero" is now also the name of an SME instruction. - I don't have any evidence that "real" code is doing this, but it - seems at least plausible. - - This patch switches things so that we check for register aliases - first. It might slow down parsing slightly, but the difference - is unlikely to be noticeable. - - Things like: - - b .req + 0 - - still work, since create_register_alias checks for " .req ", - and with the input scrubber, we'll only keep whitespace after - .req if it's followed by another name. If there's some valid - expression that I haven't thought about that is scrubbed to - " .req ", users could avoid the ambiguity by wrapping .req - in parentheses. - - The new test for invalid aliases already passed. I just wanted - something to exercise the !dot condition. - - I can't find a way of exercising the (existing) p == base condition, - but I'm not brave enough to say that it can never happen. If it does - happen, get_mnemonic_name would return an empty string. - - gas/ - * config/tc-aarch64.c (opcode_lookup): Move mnemonic extraction - code to... - (md_assemble): ...here. Check for register aliases first. - * testsuite/gas/aarch64/register_aliases.d, - testsuite/gas/aarch64/register_aliases.s: Test for a register - alias called "zero". - * testsuite/gas/aarch64/register_aliases_invalid.d, - testsuite/gas/aarch64/register_aliases_invalid.l, - testsuite/gas/aarch64/register_aliases_invalid.s: New test. - -2021-11-30 Andrew Burgess - - gdb/python: don't use the 'p' format for parsing args - When running the gdb.python/py-arch.exp tests on a GDB built - against Python 2 I ran into some errors. The problem is that this - test script exercises the gdb.Architecture.integer_type method, and - this method uses 'p' as an argument format specifier in a call to - gdb_PyArg_ParseTupleAndKeywords. - - Unfortunately this specified was only added in Python 3.3, so will - cause an error for earlier versions of Python. - - This commit switches to use the 'O' specifier to collect a PyObject, - and then uses PyObject_IsTrue to convert the object to a boolean. - - An earlier version of this patch incorrectly switched from using 'p' - to use 'i', however, it was pointed out during review that this would - cause some changes in behaviour, for example both of these will work - with 'p', but not with 'i': - - gdb.selected_inferior().architecture().integer_type(32, None) - gdb.selected_inferior().architecture().integer_type(32, "foo") - - The new approach of using 'O' works fine with these cases. I've added - some new tests to cover both of the above. - - There should be no user visible changes after this commit. - -2021-11-30 Tom de Vries - - [gdb/testsuite] Fix gdb.base/style.exp with stub-termcap - When running test-case gdb.base/style.exp with a gdb build using - stub-termcap.c, we run into: - ... - (gdb) PASS: gdb.base/style.exp: all styles enabled: frame when width=20 - ^M - - Use dwarf_vma type for offsets, ranges and section sizes in DWARF decoder. - * dwarf.c (find_debug_info_for_offset): Use dwarf_vma type for - offsets, sizes and ranges. - (display_loc_list): Likewise. Also use print_dwarf_vma to print - the offset. - (display_loclists_list): Likewise. - (display_loc_list_dwo): Likewise. - (display_debug_str): Likewise. - (display_debug_aranges): Likewise. - (display_debug_ranges_list): Likewise. - (display_debug_rnglists_list): Likewise. - (display_debug_ranges): Likewise. - - ld: pru: Add pru_irq_map output section - * scripttempl/pru.sc (.pru_irq_map): Define output section. - * testsuite/ld-pru/pru_irq_map-1.d: New test. - * testsuite/ld-pru/pru_irq_map-2.d: New test. - * testsuite/ld-pru/pru_irq_map.s: New test. - -2021-11-30 Andrew Burgess - - gdb/testsuite: check the python module is available before using it - The gdb.python/py-inferior-leak.exp test makes use of the tracemalloc - module. When running the Python tests with a GDB built against Python - 2 I ran into a test failure due to the tracemalloc module not being - available. - - This commit adds a new helper function to lib/gdb-python.exp that - checks if a named module is available. Using this we can then skip - the py-inferior-leak.exp test when the tracemalloc module is not - available. - -2021-11-30 Andrew Burgess - - gdb: fix disassembler regressions for 32-bit arm - After this commit: - - commit 76b43c9b5c2b275cbf4f927bfc25984410cb5dd5 - Date: Tue Oct 5 15:10:12 2021 +0100 - - gdb: improve error reporting from the disassembler - - We started seeing FAILs in the gdb.base/all-architectures*.exp tests, - when running on a 32-bit ARM target, though I suspect running on any - target that compiles such that bfd_vma is 32-bits would also trigger - the failures. - - The problem is that the test is expected GDB's disassembler to print - an error like this: - - Cannot access memory at address 0x0 - - However, after the above commit we see an error like: - - unknown disassembler error (error = -1) - - The reason for this is this code in opcodes/i386-dis.c (in the - print_insn function): - - if (address_mode == mode_64bit && sizeof (bfd_vma) < 8) - { - (*info->fprintf_func) (info->stream, - _("64-bit address is disabled")); - return -1; - } - - This code effectively disallows us from ever disassembling 64-bit x86 - code if we compiled GDB with a 32-bit bfd_vma. Notice we return - -1 (indicating a failure to disassemble), but never call the - memory_error_func callback. - - Prior to the above commit GDB, when it received the -1 return value - would assume that a memory error had occurred and just print whatever - value happened to be in the memory error address variable, the default - value of 0 just happened to be fine because the test had asked GDB to - do this 'disassemble 0x0,+4'. - - If we instead change the test to do 'disassemble 0x100,+4' then GDB - would (previously) have still reported: - - Cannot access memory at address 0x0 - - which makes far less sense. - - In this commit I propose to fix this issue by changing the test to - accept either the "Cannot access memory ..." string, or the newer - "unknown disassembler error ..." string. With this change done the - test now passes. - - However, there is one weakness with this strategy; if GDB broke such - that we _always_ reported "unknown disassembler error ..." we would - never notice. This clearly would be bad. To avoid this issue I have - adjusted the all-architectures*.exp tests so that, when we disassemble - for the default architecture (the one selected by "auto") we _only_ - expect to get the "Cannot access memory ..." error string. - - [ Note: In an ideal world we should be able to disassemble any - architecture at all times. There's no reason why the 64-bit x86 - disassembler requires a 64-bit bfd_vma, other than the code happens - to be written that way. We could rewrite the disassemble to not - have this requirement, but, I don't plan to do that any time soon. ] - - Further, I have changed the all-architectures*.exp test so that we now - disassemble at address 0x100, this should avoid us being able to pass - by printing a default address of 0x0. I did originally change the - address we disassembled at to 0x4, however, some architectures, - e.g. ia64, have a default instruction alignment that is greater than - 4, so would still round down to 0x0. I could have just picked 0x8 as - an address, but I figured that 0x100 was likely to satisfy most - architectures alignment requirements. - -2021-11-30 Andrew Burgess - - gdb/python: add gdb.RemoteTargetConnection.send_packet - This commits adds a new sub-class of gdb.TargetConnection, - gdb.RemoteTargetConnection. This sub-class is created for all - 'remote' and 'extended-remote' targets. - - This new sub-class has one additional method over its base class, - 'send_packet'. This new method is equivalent to the 'maint - packet' CLI command, it allows a custom packet to be sent to a remote - target. - - The outgoing packet can either be a bytes object, or a Unicode string, - so long as the Unicode string contains only ASCII characters. - - The result of calling RemoteTargetConnection.send_packet is a bytes - object containing the reply that came from the remote. - -2021-11-30 Andrew Burgess - - gdb: make packet_command function available outside remote.c - In a later commit I will add a Python API to access the 'maint packet' - functionality, that is, sending a user specified packet to the target. - - To make implementing this easier, this commit refactors how this - command is currently implemented so that the packet_command function - is now global. - - The new global send_remote_packet function takes an object that is an - implementation of an abstract interface. Two functions within this - interface are then called, one just before a packet is sent to the - remote target, and one when the reply has been received from the - remote target. Using an interface object in this way allows (1) for - the error checking to be done before the first callback is made, this - means we only print out what packet it being sent once we know we are - going to actually send it, and (2) we don't need to make a copy of the - reply if all we want to do is print it. - - One user visible changes after this commit are the error - messages, which I've changed to be less 'maint packet' command - focused, this will make them (I hope) better for when - send_remote_packet can be called from Python code. - - So: "command can only be used with remote target" - Becomes: "packets can only be sent to a remote target" - - And: "remote-packet command requires packet text as argument" - Becomes: "a remote packet must not be empty" - - Additionally, in this commit, I've added support for packet replies - that contain binary data. Before this commit, the code that printed - the reply treated the reply as a C string, it assumed that the string - only contained printable characters, and had a null character only at - the end. - - One way to show the problem with this is if we try to read the auxv - data from a remote target, the auxv data is binary, so, before this - commit: - - (gdb) target remote :54321 - ... - (gdb) maint packet qXfer:auxv:read::0,1000 - sending: "qXfer:auxv:read::0,1000" - received: "l!" - (gdb) - - And after this commit: - - (gdb) target remote :54321 - ... - (gdb) maint packet qXfer:auxv:read::0,1000 - sending: "qXfer:auxv:read::0,1000" - received: "l!\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xfc\xf7\xff\x7f\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\xff\xf> - (gdb) - - The binary contents of the reply are now printed as escaped hex. - -2021-11-30 Andrew Burgess - - gdb/python: introduce gdb.TargetConnection object type - This commit adds a new object type gdb.TargetConnection. This new - type represents a connection within GDB (a connection as displayed by - 'info connections'). - - There's three ways to find a gdb.TargetConnection, there's a new - 'gdb.connections()' function, which returns a list of all currently - active connections. - - Or you can read the new 'connection' property on the gdb.Inferior - object type, this contains the connection for that inferior (or None - if the inferior has no connection, for example, it is exited). - - Finally, there's a new gdb.events.connection_removed event registry, - this emits a new gdb.ConnectionEvent whenever a connection is removed - from GDB (this can happen when all inferiors using a connection exit, - though this is not always the case, depending on the connection type). - The gdb.ConnectionEvent has a 'connection' property, which is the - gdb.TargetConnection being removed from GDB. - - The gdb.TargetConnection has an 'is_valid()' method. A connection - object becomes invalid when the underlying connection is removed from - GDB (as discussed above, this might be when all inferiors using a - connection exit, or it might be when the user explicitly replaces a - connection in GDB by issuing another 'target' command). - - The gdb.TargetConnection has the following read-only properties: - - 'num': The number for this connection, - - 'type': e.g. 'native', 'remote', 'sim', etc - - 'description': The longer description as seen in the 'info - connections' command output. - - 'details': A string or None. Extra details for the connection, for - example, a remote connection's details might be - 'hostname:port'. - -2021-11-30 Nelson Chu - - RISC-V: The vtype immediate with more than the defined 8 bits are preserved. - According the rvv spec, - https://github.com/riscv/riscv-v-spec/blob/master/vtype-format.adoc - - The bits of vtype immediate from 8 to (xlen - 1) should be reserved. - Therefore, we should also dump the vtype immediate as numbers, when - they are set over 8-bits. I think this is a bug that we used to support - vediv extension and use the bit 8 and 9 of vtype, but forgot to update - the behavior when removing the vediv. - - Consider the testcases, - - vsetvli a0, a1, 0x700 # the reserved bit 10, 9 and 8 are used. - vsetvli a0, a1, 0x400 # the reserved bit 10 is used. - vsetvli a0, a1, 0x300 # the reserved bit 9 and 8 are used. - vsetvli a0, a1, 0x100 # the reserved bit 8 is used. - vsetivli a0, 0xb, 0x300 # the reserved bit 9 and 8 are used. - vsetivli a0, 0xb, 0x100 # the reserved bit 8 is used. - - The original objdump shows the following result, - - 0000000000000000 <.text>: - 0: 7005f557 vsetvli a0,a1,1792 - 4: 4005f557 vsetvli a0,a1,1024 - 8: 3005f557 vsetvli a0,a1,e8,m1,tu,mu - c: 1005f557 vsetvli a0,a1,e8,m1,tu,mu - 10: f005f557 vsetivli a0,11,e8,m1,tu,mu - 14: d005f557 vsetivli a0,11,e8,m1,tu,mu - - But in fact the correct result should be, - - 0000000000000000 <.text>: - 0: 7005f557 vsetvli a0,a1,1792 - 4: 4005f557 vsetvli a0,a1,1024 - 8: 3005f557 vsetvli a0,a1,768 - c: 1005f557 vsetvli a0,a1,256 - 10: f005f557 vsetivli a0,11,768 - 14: d005f557 vsetivli a0,11,256 - - gas/ - * testsuite/gas/riscv/vector-insns.d: Added testcases to - test the reserved bit 8 to (xlen-1) of vtype. - * testsuite/gas/riscv/vector-insns.s: Likewise. - include/ - * opcode/riscv.h: Removed OP_MASK_VTYPE_RES and OP_SH_VTYPE_RES, - since they are different for operand Vc and Vb. - opcodes/ - * riscv-dis.c (print_insn_args): Updated imm_vtype_res to - extract the reserved immediate of vtype correctly. - -2021-11-30 Nelson Chu - - RISC-V: Dump vset[i]vli immediate as numbers once vsew or vlmul is reserved. - Consider the following case, - - vsetvli a0, a1, 0x4 # unrecognized vlmul - vsetvli a0, a1, 0x20 # unrecognized vsew - vsetivli a0, 0xb, 0x4 # unrecognized vlmul - vsetivli a0, 0xb, 0x20 # unrecognized vsew - - For the current dis-assembler, we get the result, - - 0000000000000000 <.text>: - 0: 0045f557 vsetvli a0,a1,e8,(null),tu,mu - 4: 0205f557 vsetvli a0,a1,e128,m1,tu,mu - 8: c045f557 vsetivli a0,11,e8,(null),tu,mu - c: c205f557 vsetivli a0,11,e128,m1,tu,mu - - The vsew e128 and vlmul (null) are preserved according to the spec, - so dump these fields looks wrong. Consider that we are used to dump - the unrecognized csr as csr numbers directly, we should also dump - the whole vset[i]vli immediates as numbers, once the vsew or vlmul - is reserved. Therefore, following is what I expected, - - 0000000000000000 <.text>: - 0: 0045f557 vsetvli a0,a1,4 - 4: 0205f557 vsetvli a0,a1,32 - 8: c045f557 vsetivli a0,11,4 - c: c205f557 vsetivli a0,11,32 - - gas/ - * testsuite/gas/riscv/vector-insns.d: Rewrite the vset[i]vli - testcases since we should dump the immediate as numbers once - the vsew or vlmul is reserved. - * testsuite/gas/riscv/vector-insns.s: Likewise. - opcodes/ - * riscv-dis.c (print_insn_args): The reserved vsew and vlmul - are NULL string in the riscv_vsew and riscv_vlmul, so dump the - whole imm as numbers once one of them is NULL. - * riscv-opc.c (riscv_vsew): Set the reserved vsew to NULL. - (riscv_vlmul): Set the reserved vlmul to NULL. - -2021-11-30 Mike Frysinger - - zlib: enable silent build rules - - ld: enable silent build rules - Also add $(AM_V_xxx) to various manual rules in here. - - libctf: enable silent build rules - Also add $(AM_V_xxx) to various manual rules in here. - - gprof: enable silent build rules - Also add $(AM_V_xxx) to various manual rules in here. - - binutils: merge doc subdir up a level - This avoids a recursive make into the doc subdir and speeds up the - build slightly. It also allows for more parallelism. - - binutils: enable silent build rules - Also add $(AM_V_xxx) to various manual rules in here. - - bfd: enable silent build rules - Also add $(AM_V_xxx) to various manual rules in here. - - opcodes: enable silent build rules - Also add $(AM_V_xxx) to various manual rules in here. - -2021-11-30 GDB Administrator - - Automatic date update in version.in - -2021-11-29 Tom Tromey - - Allow DW_ATE_UTF for Rust characters - The Rust compiler plans to change the encoding of a Rust 'char' type - to use DW_ATE_UTF. You can see the discussion here: - - https://github.com/rust-lang/rust/pull/89887 - - However, this fails in gdb. I looked into this, and it turns out that - the handling of DW_ATE_UTF is currently fairly specific to C++. In - particular, the code here assumes the C++ type names, and it creates - an integer type. - - This comes from commit 53e710acd ("GDB thinks char16_t and char32_t - are signed in C++"). The message says: - - Both places need fixing. But since I couldn't tell why dwarf2read.c - needs to create a new type, I've made it use the per-arch built-in - types instead, so that the types are only created once per arch - instead of once per objfile. That seems to work fine. - - ... which is fine, but it seems to me that it's also correct to make a - new character type; and this approach is better because it preserves - the type name as well. This does use more memory, but first we - shouldn't be too concerned about the memory use of types coming from - debuginfo; and second, if we are, we should implement type interning - anyway. - - Changing this code to use a character type revealed a couple of - oddities in the C/C++ handling of TYPE_CODE_CHAR. This patch fixes - these as well. - - I filed PR rust/28637 for this issue, so that this patch can be - backported to the gdb 11 branch. - -2021-11-29 Aaron Merey - Tom de Vries - - [PR gdb/27026] CTRL-C is ignored when debug info is downloaded - During debuginfod downloads, ctrl-c should result in the download - being cancelled and skipped. However in some cases, ctrl-c fails to - get delivered to gdb during downloading. This can result in downloads - being unskippable. - - Fix this by ensuring that target_terminal::ours is in effect for the - duration of each download. - - https://sourceware.org/bugzilla/show_bug.cgi?id=27026#c3 - -2021-11-29 Nick Clifton - - strings: Replace references to -u option with references to -U. - PR 28632 - -2021-11-29 Tom de Vries - - [gdb/symtab] Fix segfault in search_one_symtab - PR28539 describes a segfault in lambda function search_one_symtab due to - psymbol_functions::expand_symtabs_matching calling expansion_notify with a - nullptr symtab: - ... - struct compunit_symtab *symtab = - psymtab_to_symtab (objfile, ps); - - if (expansion_notify != NULL) - if (!expansion_notify (symtab)) - return false; - ... - - This happens as follows. The partial symtab ps is a dwarf2_include_psymtab - for some header file: - ... - (gdb) p ps.filename - $5 = 0x64fcf80 "/usr/include/c++/11/bits/stl_construct.h" - ... - - The includer of ps is a shared symtab for a partial unit, with as user: - ... - (gdb) p ps.includer().user.filename - $11 = 0x64fc9f0 \ - "/usr/src/debug/llvm13-13.0.0-1.2.x86_64/tools/clang/lib/AST/Decl.cpp" - ... - - The call to psymtab_to_symtab expands the Decl.cpp symtab (and consequently - the shared symtab), but returns nullptr because: - ... - struct dwarf2_include_psymtab : public partial_symtab - { - ... - compunit_symtab *get_compunit_symtab (struct objfile *objfile) const override - { - return nullptr; - } - ... - - Fix this by returning the Decl.cpp symtab instead, which fixes the segfault - in the PR. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28539 - -2021-11-29 Nick Clifton - - Update description of string's -n option. - PR 28632 - * strings.c (usage): Update desciption of -n option. - * doc/binutils.texi: Likewise. - -2021-11-29 Tom de Vries - - [gdb/testsuite] Fix typo in proc lines - Proc lines contains a typo: - ... - string_form { set $_line_string_form $value } - ... - - Remove the incorrect '$' in '$_line_string_form'. - - Tested on x86_64-linux. - -2021-11-29 Tom de Vries - - [gdb/testsuite] Use unique files in gdb.dwarf2/dw2-lines.exp - While debugging a problem in gdb.dwarf2/dw2-lines.exp, I realized that the - test-case generates all executables and associated temporary files using the - same filenames. - - Fix this by adding a new proc prefix_id in lib/gdb.exp, and using it in the - test-case. - - Tested on x86_64-linux. - -2021-11-29 Tom de Vries - - [gdb/testsuite] Fix gdb.dwarf2/dw2-lines.exp with -m32 - When running test-case gdb.dwarf2/dw2-lines.exp with target board -unix/-m32, - we run into another instance of PR28383, where the dwarf assembler generates - 64-bit relocations which are not supported by the 32-bit assembler: - ... - dw2-lines-dw.S: Assembler messages:^M - outputs/gdb.dwarf2/dw2-lines/dw2-lines-dw.S:76: Error: \ - cannot represent relocation type BFD_RELOC_64^M - ... - - Fix this by using _op_offset in _line_finalize_header. - - Tested on x86_64-linux. - -2021-11-29 Mike Frysinger - - sim: testsuite: drop most specific istarget checks - We'll rely on the toolchain probing to determine whether each arch's - tests can be run rather the current configure target. This allows - testing all of the ports in a multitarget configuration. - - For now, we don't reformat the files entirely to make it easier to - review, and in case we need to make adjustments. Once this feels - like it's stable, we can flatten the code a bit by removing the if - statement entirely. - -2021-11-29 Mike Frysinger - - sim: testsuite: support parallel execution - Break up the dejagnu logic so that we can parallelize the testsuite. - This takes a page from gcc & gdb where each .exp is run in isolation - instead of in serial. - - For most targets, this doesn't make much of a difference as they only - have a single .exp. A few (like cris & frv) have multiple .exp though - and will see a bit of a speed up. - - The real gain is when testing a multitarget build. This way we can - run all the targets in parallel and cut the execution time a bit. - On my system, it goes from ~155sec to ~100sec. - - We can gain further speedups by splitting up some of the larger .exp - files into smaller groups. We'll do that in a followup though. - -2021-11-29 Mike Frysinger - - sim: testsuite: expand arch specific toolchain settings - Leverage the new per-port toolchain settings to initialize the env - for eeach set of tests. This allows us to run all the tests in a - multitarget build if the user sets up the vars. If they don't, we - can still skip all the tests. - -2021-11-29 Mike Frysinger - - sim: testsuite: setup per-port toolchain settings for multitarget build - Gas does not support multitarget builds -- it still only supports - a single input & output format. ld is a bit better, but requires - manual flags to select the right output. This makes it impossible - to run the complete testsuite in a multitarget build. - - To address this limitation, create a suite of FOR_TARGET variables - so these can be set to precompiled as & ld programs. It requires - a bit of setup ahead of time, but it's a one-time cost, and makes - running the full testsuite at once much easier. - -2021-11-29 GDB Administrator - - Automatic date update in version.in - -2021-11-28 Alan Modra - - PR28629 NIOS2 fallout - The test exactly matched wrong output. - - PR 28629 - * testsuite/gas/nios2/relax.d: Update expected output. - -2021-11-28 Mike Frysinger - - sim: add checks to core headers to prevent incorrect common building - Some of the core sim headers rely on the SIM_AC_OPTION_BITSIZE macro - which can change the size of core types. Since these haven't been - unified across ports, add checks to make sure they aren't accidentally - included when building for all ports. This caught the sim-load file - using poisoned headers that it didn't actually need. - - sim: unify syscall.o building - Now that we've unified all the syscall tables, this file does not rely - on any port-specific settings, so move it up to building as part of the - common step so we only do it once in a multibuild. - - sim: drop unused gentmap & nltvals.def logic - Now that all ports have switched to target-newlib-* files, there's - no need for these files & generating things at build time. So punt - the logic and make target-newlib-syscall a hard requirement. - - sim: mcore: switch to new target-newlib-syscall - Use the new target-newlib-syscall module. This is needed to merge all - the architectures into a single build, and mcore has a custom syscall - table for its newlib/libgloss port. - - sim: riscv: switch to new target-newlib-syscall - Use the new target-newlib-syscall module. This is needed to merge all - the architectures into a single build, and riscv has a custom syscall - table for its newlib/libgloss port. - -2021-11-28 Mike Frysinger - - sim: cr16: switch to new target-newlib-syscall - Use the new target-newlib-syscall module. This is needed to merge all - the architectures into a single build, and cr16 has a custom syscall - table for its newlib/libgloss port. - - This allows cleaning up the syscall ifdef logic. We know these will - always exist now. - -2021-11-28 Mike Frysinger - - sim: d10v: switch to new target-newlib-syscall - Use the new target-newlib-syscall module. This is needed to merge all - the architectures into a single build, and d10v has a custom syscall - table for its newlib/libgloss port. - - This allows cleaning up the syscall ifdef logic. We know these will - always exist now. - -2021-11-28 Mike Frysinger - - sim: sh: switch to new target-newlib-syscall - Use the new target-newlib-syscall module. This is needed to merge all - the architectures into a single build, and sh has a custom syscall - table for its newlib/libgloss port. - -2021-11-28 Mike Frysinger - - sim: v850: switch to new target-newlib-syscall - Use the new target-newlib-syscall module. This is needed to merge all - the architectures into a single build, and v850 has a custom syscall - table for its newlib/libgloss port. - - This allows cleaning up the syscall ifdef logic. We know these will - always exist now. - -2021-11-28 Mike Frysinger - - sim: iq2000/lm32/m32c/moxie/rx: switch to new target-newlib-syscall.h - Use the new target-newlib-syscall.h to provide the target syscall - defines. These code paths are written specifically for the newlib - ABI rather than being generalized, so switching them to the defines - rather than trying to go through the dynamic callback conversion - seems like the best trade-off for now. Might have to reconsider - this in the future. - -2021-11-28 Mike Frysinger - - sim: nltvals: pull target syscalls out into a dedicated source file - Like we just did for pulling out the errno map, pull out the syscall - maps into a dedicated common file. Most newlib ports are using the - same syscall map, but not all, which means we have to do a bit more - work to migrate. - - This commit adds the maps and switches the ports using the common - default syscall table over to it. Ports using unique syscall tables - are still using the old targ-map.c logic. - - Switching common ports over is easy by checking NL_TARGET, but the - ppc code needs a bit more cleanup here hence its larger diff. - -2021-11-28 Mike Frysinger - - sim: frv: resolve syscalls dynamically - Avoid use of TARGET_ defines and rely on the callback layers - to resolve these dynamically so we can support multiple syscall layers - instead of assuming the newlib/libgloss numbers all the time. - - sim: mn10300: resolve syscalls dynamically - Avoid use of TARGET_ defines and rely on the callback layers - to resolve these dynamically so we can support multiple syscall layers - instead of assuming the newlib/libgloss numbers all the time. - - sim: nltvals: drop i960 - This port was dropped from gdb/bfd/sim years ago, so stop including - its syscall constants too. - - sim: moxie: fix datadir handling - Expand the value at `make` time rather than configure generation time - so that we handle $(datarootdir) setting properly. - -2021-11-28 GDB Administrator - - Automatic date update in version.in - -2021-11-27 Simon Marchi - - gdb: fix typos in configure - The variable names used to restore CFLAGS and LDFLAGS here don't quite - match the names used above, resulting in losing the original CFLAGS and - LDFLAGS. Fix that. - - Change-Id: I9cc2c3b48b1dc30c31a7143563c893fd6f426a0a - -2021-11-27 Mike Frysinger - - sim: hw: mark hw_descriptors const - - sim: testsuite: add dedicated flag for init toolchain tests - As we setup more reliable CC_FOR_TARGET variables for each target, the - bfin way of overriding it to stuff custom CFLAGS doesn't scale well. - Add a dedicated CFLAGS_FOR_TARGET_init setting that each set of tests - can setup if they want to add custom options. - - sim: testsuite: clean up arch specific toolchain settings - In a multitarget build, we process all targets in order, so make sure - the toolchain settings from one don't leak into the next. - -2021-11-27 Mike Frysinger - - sim: cris: always search for local rvdummy tool - If the board info sets the sim to a basename that is found via $PATH - (which is the default dejagnu behavior), the logic here to use its - dirname to find rvdummy fails because it looks for `./rvdummy`. So - switch it to always use the local build of rvdummy which is the one - we want to be testing against in the first place. - - If we get a request for testing against a different setup, we can - figure out & document the needs at that point, and then setup some - config knobs to control it. - -2021-11-27 Tom de Vries - - [gdb/testsuite] Fix FAIL in gdb.base/list-missing-source.exp - In commit f8080fb7a44 "[gdb/testsuite] Add gdb.base/include-main.exp" a - file gdb.base/main.c was added, which caused the following regression: - ... - (gdb) list^M - - (gdb) FAIL: gdb.base/list-missing-source.exp: list - ... - - The problem is that the test-case does not expect to find a file main.c, but - now it finds gdb.base/main.c. - - Fix this by using the more specific file name list-missing-source.c. - - Tested on x86_64-linux. - -2021-11-27 Mike Frysinger - - sim: testsuite: fix bits-gen EXEEXT handling - Add missing $(EXEEXT) to dependencies on bits-gen. These are actually - build-only tools, but automake doesn't allow for build & host tools, so - the rules are re-using EXEEXT. - -2021-11-27 Mike Frysinger - - sim: testsuite: initial support for OS-specific tests - We usually test against the newlib/libgloss environment, but for a - few ports that also support Linux apps, we want to test that logic - too. A lot of the C code is written such that it works with either - newlib/libgloss or glibc/linux toolchains, but we have some tests - that end up being Linux-specific. Cris has been using the target - tuple as a rough proxy for this (where cris*-*-elf is assumed to be - newlib/libgloss, and everything else is glibc/linux), but that is a - bit too rough, and it doesn't work in a multitarget build. - - So lets create a few stub files that we can do compile tests with - to detect the different setups, and then let tests declare which - one they require (if they require any at all). - -2021-11-27 Mike Frysinger - - sim: testsuite: unify basic C compiler checks - Both bfin & cris ports test the C compiler to see if it works, but in - their own way. Unify the checks in the common code so we can leverage - them in more ports in the future, and collapse the bfin & cris code. - -2021-11-27 Mike Frysinger - - sim: testsuite: rework sim_init usage - The sim_init function was called by runtest for each test when --tool - was set to sim. When we changed to --tool '' to collapse the testsuite - dir, the init function was no longer called on every test. However, it - was still being called explicitly by config/default.exp. It's not clear - why that explicit call ever existed since, in the past, it meant it was - redundant. - - Lets drop the single sim_init call in config/default.exp and move it out - to all our tests. This replicates the runtest behavior so we can setup - variables on a per-test basis which allows us to recollapse the sim_path - logic back. We'll also leverage this in the future for toolchain setup. - - Also add a few comments clarifying the overall runtime behavior. - -2021-11-27 Mike Frysinger - - sim: cris: fix testsuite hang when sim is missing - If the cris sim hasn't been built yet, trying to run its testsuite - will hang indefinitely. The common sim APIs already have this, so - copy it over to the cris forks of the test+run functions. - -2021-11-27 Mike Frysinger - - sim: testsuite: fix objdir handling - The tests assume that the cwd is the objdir directory and write its - intermediates to there all the time. When using runtest's --objdir - setting though, this puts the files in the wrong place. This isn't - a big problem currently as we never change --objdir, but in order to - support parallel test execution, we're going to start setting that - option, so clean up the code ahead of time. - - We also have to tweak some of the cris tests which were making - assumptions about the argv[0] value. - -2021-11-27 Mike Frysinger - - sim: testsuite: rename global_sim_options to SIMFLAGS_FOR_TARGET - Now that all the other toolchain settings have been renamed to match - the dejagnu settings of XXX_FOR_TARGET, rename global_sim_options to - SIMFLAGS_FOR_TARGET too. - - sim: testsuite: replace global_ld_options with LDFLAGS_FOR_TARGET - Only a few tests actually use global_ld_options, but we can replace the - sim-specific settings with the dejagnu common LDFLAGS_FOR_TARGET and get - the same result. - -2021-11-27 GDB Administrator - - Automatic date update in version.in - -2021-11-26 John David Anglin - - Fix ifunc test fails on hppa*-*-* - 2021-11-26 John David Anglin - - PR ld/27442 - - ld/ChangeLog: - - * ld/testsuite/ld-ifunc/ifunc.exp (contains_irelative_reloc): Adjust - regexp. - Skip static ifunc-using executable test on hppa*-*-*. - -2021-11-26 H.J. Lu - - gas: Update commit 4780e5e4933 - Update - - commit 4780e5e4933a2497a5aecc4ceabbbb8e82aaf822 - Author: Tom de Vries - Date: Fri Nov 26 09:59:45 2021 +0100 - - [gas] Fix file 0 dir with -gdwarf-5 - - 1. Replace i with j in - - for (j = 0; i < NUM_MD5_BYTES; ++j) - - 2. Pass -W to readelf to force CU: in output due to: - - if (do_wide || strlen (directory) < 76) - printf (_("CU: %s/%s:\n"), directory, file_table[0].name); - else - printf ("%s:\n", file_table[0].name); - - PR gas/28629 - * dwarf2dbg.c (out_dir_and_file_list): Fix a typo in commit - 4780e5e4933. - * testsuite/gas/elf/dwarf-5-nop-for-line-table.d: Pass -W to - readelf. - -2021-11-26 Mike Frysinger - - sim: testsuite: replace global_as_options with ASFLAGS_FOR_TARGET - Only a few tests actually use global_as_options, but we can replace the - sim-specific settings with the dejagnu common ASFLAGS_FOR_TARGET and get - the same result. - -2021-11-26 Tom de Vries - - [gdb/testsuite] Add gdb.base/include-main.exp - The test-case gdb.ada/dgopt.exp uses the -gnatD switch, in combination with - -gnatG. - - This causes the source file $src/gdb/testsuite/gdb.ada/dgopt/x.adb to be - expanded into $build/gdb/testsuite/outputs/gdb.ada/dgopt/x.adb.dg, and the - debug information should refer to the x.adb.dg file. - - That is the case for the .debug_line part: - ... - The Directory Table is empty. - - The File Name Table (offset 0x1c): - Entry Dir Time Size Name - 1 0 0 0 x.adb.dg - ... - but not for the .debug_info part: - ... - <11> DW_AT_name : $src/gdb/testsuite/gdb.ada/dgopt/x.adb - <15> DW_AT_comp_dir : $build/gdb/testsuite/outputs/gdb.ada/dgopt - ... - - Filed as PR gcc/103436. - - In C we can generate similar debug information, using a source file that does - not contain any code, but includes another one that does: - ... - $ cat gdb/testsuite/gdb.base/include-main.c - #include "main.c" - ... - such that in the .debug_line part we have: - ... - The Directory Table (offset 0x1c): - 1 /home/vries/gdb_versions/devel/src/gdb/testsuite/gdb.base - - The File Name Table (offset 0x57): - Entry Dir Time Size Name - 1 1 0 0 main.c - ... - and in the .debug_info part: - ... - <11> DW_AT_name : $src/gdb/testsuite/gdb.base/include-main.c - <15> DW_AT_comp_dir : $build/gdb/testsuite - ... - - Add a C test-case that mimics gdb.ada/dgopt.exp, that is: - - generate debug info as described above, - - issue a list of a line in include-main.c, while the corresponding - CU is not expanded yet. - - Tested on x86_64-linux. - -2021-11-26 Mike Frysinger - - sim: testsuite: drop unused global_cc_options - Nothing in the testsuite is using this setting, so let's drop it. - Any code that wants to set compiler flags can use CFLAGS_FOR_TARGET - instead to get the same effect. - - sim: testsuite: punt unused toolchain variables - These haven't been used in over 20 years. The sim testsuite used to - run these tools itself directly, but back in ~1999 it switched to the - dejagnu helpers (e.g. target_assemble & target_link), and the dejagnu - logic only utilizes XXX_FOR_TARGET variables. Punt them here to avoid - confusion with dead code. - -2021-11-26 Andrew Burgess - Simon Cook - - gdb: add risc-v disassembler options support - This commit adds support for RISC-V disassembler options to GDB. This - commit is based on this patch which was never committed: - - https://sourceware.org/pipermail/binutils/2021-January/114944.html - - All of the binutils refactoring has been moved to a separate, earlier, - commit, so this commit is pretty straight forward, just registering - the required gdbarch hooks. - -2021-11-26 Andrew Burgess - Simon Cook - - opcodes/riscv: add disassembler options support to libopcodes - In preparation for the next commit, which will add GDB support for - RISC-V disassembler options, this commit restructures how the - disassembler options are managed within libopcodes. - - The implementation provided here is based on this mailing list patch - which was never committed: - - https://sourceware.org/pipermail/binutils/2021-January/114944.html - - which in turn took inspiration from the MIPS implementation of the - same feature. - - The biggest changes from the original mailing list post are: - - 1. The GDB changes have been split into a separate patch, and - - 2. The `riscv_option_args_privspec` variable, which held the valid - priv-spec values is now gone, instead we use the `riscv_priv_specs` - array from bfd/cpu-riscv.c instead. - - - include/ChangeLog: - - * dis-asm.h (disassembler_options_riscv): Declare. - - opcodes/ChangeLog: - - * riscv-dis.c (enum riscv_option_arg_t): New enum typedef. - (riscv_options): New static global. - (disassembler_options_riscv): New function. - (print_riscv_disassembler_options): Rewrite to use - disassembler_options_riscv. - -2021-11-26 Tom de Vries - - [gas] Fix file 0 dir with -gdwarf-5 - In out_dir_and_file_list, if file 0 is copied from file 1, only the filename - is copied, and the dir and md5 fields are left to their default values. - - Fix this by adding the copy of the dir and md5 fields. - - gas/ChangeLog: - - 2021-11-26 Tom de Vries - - PR 28629 - * dwarf2dbg.c (out_dir_and_file_list): When copying file 1 to file 0, - also copy dir and md5 fields. - * testsuite/gas/i386/dwarf5-line-4.d: Adjust expected output. - -2021-11-26 Mike Frysinger - - sim: mips: avoid _ namespace - Some C libraries export _P symbols in their headers (like older - newlib and its ctype.h), so use P_ instead to avoid conflicts. - - ld: fix POSIX shell test usage - POSIX test uses = for compares, not == which is a bashism. - - gas: enable silent build rules - - ld: fix --disable-multiple-abs-defs alignment in help - -2021-11-26 GDB Administrator - - Automatic date update in version.in - -2021-11-25 Enze Li - - gdb: ensure extension_language_python is always defined - In this commit: - - commit c6a6aad52d9e839d6a84ac31cabe2b7e1a2a31a0 - Date: Mon Oct 25 17:25:45 2021 +0100 - - gdb/python: make some global variables static - - building without Python was broken. The extension_language_python - global was moved from being always defined, to only being defined when - the HAVE_PYTHON macro was defined. As a consequence, building without - Python support would result in errors like: - - /usr/bin/ld: extension.o:(.rodata+0x120): undefined reference to `extension_language_python' - - This commit fixes the problem by moving the definition of - extension_language_python outside of the HAVE_PYTHON macro protection. - -2021-11-25 Andrew Burgess - - Revert "gdb: add assert in remote_target::wait relating to async being off" - This commit introduced a test failure in gdb.server/attach-flag.exp. - I didn't spot this failure originally as the problem is fixed by this, - as yet unpushed patch: - - https://sourceware.org/pipermail/gdb-patches/2021-November/183768.html - - I unfortunately didn't test each patch in the original series - independently. I'll repost this patch after the above patch has been - merged. - - This reverts commit 32b1f5e8d6b8ddd3be6e471c26dd85a1dac31dda. - -2021-11-25 Nick Clifton - - Fix building the AArch64 assembler and disassembler when assertions are disabled. - PR 28614 - * aarch64-asm.c: Replace assert(0) with real code. - * aarch64-dis.c: Likewise. - * aarch64-opc.c: Likewise. - -2021-11-25 Bruno Larsen - - PR gdb/28480: Improve ambiguous member detection - Basic ambiguity detection assumes that when 2 fields with the same name - have the same byte offset, it must be an unambiguous request. This is not - always correct. Consider the following code: - - class empty { }; - - class A { - public: - [[no_unique_address]] empty e; - }; - - class B { - public: - int e; - }; - - class C: public A, public B { }; - - if we tried to use c.e in code, the compiler would warn of an ambiguity, - however, since A::e does not demand an unique address, it gets the same - address (and thus byte offset) of the members, making A::e and B::e have the - same address. however, "print c.e" would fail to report the ambiguity, - and would instead print it as an empty class (first path found). - - The new code solves this by checking for other found_fields that have - different m_struct_path.back() (final class that the member was found - in), despite having the same byte offset. - - The testcase gdb.cp/ambiguous.exp was also changed to test for this - behavior. - -2021-11-25 Jan W. Jagersma - - coff-go32: consistent 16-byte section alignment - Section alignment for coff-go32 is inconsistent - The '.text' and - '.data' sections are 16-byte aligned, but named sections '.text.*' and - '.data.*' are only 4-byte aligned. '.gnu.linkonce.r.*' is aligned to - 16 bytes, yet '.rodata' and '.rodata.*' are aligned to 4 bytes. For - '.bss' all input sections are only aligned to 4 bytes. - - This primarily can cause trouble when using SSE instructions, which - require their memory operands to be aligned to 16-byte boundaries. - - This patch solves the issue simply by setting the section alignment - to 16 bytes, for all code and data sections referenced in the default - linker script. - - * coff-go32.c (COFF_SECTION_ALIGNMENT_ENTRIES): Use partial - name match for .text, .data. Add entries for .const, .rodata, - .bss, .gnu.linkonce.b. - -2021-11-25 Alan Modra - - Re: AArch64: Add support for AArch64 EFI (efi-*-aarch64) - Commit b69c9d41e8 edited bfd/Makefile.in rather than using automake, - which meant a typo in Makefile.am was not discovered and other - differences in Makefile.in are seen with a proper regeneration. One - difference was lack of an empty line between the pe-aarch64igen.c rule - and the following $(BFD32_LIBS) etc. dependency rule, in the - regenerated file. Not that it matters for proper "make" behaviour, - but it's nicer with a line between those rules. Moving the rule - earlier seems to cure the missing empty line. - - * Makefile.am (BFD64_BACKENDS): Correct typo. - (BFD_H_DEPS, LOCAL_H_DEPS): Move earlier. Move rule using these - deps earlier too. - * Makefile.in: Regenerate. - * po/BLD-POTFILES.in: Regenerate. - * po/SRC-POTFILES.in: Regenerate. - -2021-11-25 Nick Clifton - - Updated French translation for the opcodes directory. - * po/fr.po; Updated French translation. - -2021-11-25 Andrew Burgess - - gdb: rename source_styling_changed observer - In a later commit I plan to add disassembler styling. In the same way - that we have a source_styling_changed observer I would need to add a - disassembler_styling_changed observer. - - However, currently, these observers would only be notified from - cli-style.c:set_style_enabled, and observed in tui-winsource.c, - tui_source_window::style_changed, as a result, having two observers - seems unnecessary right now, so, in this commit, I plan to rename - source_styling_changed to just styling_changed, then, in the later - commit, when disassembler styling is added, I can use the same - observer for both source styling, and disassembler styling. - - There should be no user visible changes after this commit. - -2021-11-25 Andrew Burgess - - gdb/python: make some global variables static - Make a couple of global variables static in python/python.c. To do - this I had to move the definition of extension_language_python to - later in the file. - - There should be no user visible changes after this commit. - -2021-11-25 Andrew Burgess - - gdb: add assert in remote_target::wait relating to async being off - While working on another patch I ended up in a situation where I had - async mode disabled (with 'maint set target-async off'), but the async - event token got marked anyway. - - In this situation GDB was continually calling into - remote_target::wait, however, the async token would never become - unmarked as the unmarking is guarded by target_is_async_p. - - We could just unconditionally unmark the token, but that would feel - like just ignoring a bug, so, instead, lets assert that if - !target_is_async_p, then the async token should not be marked. - - This assertion would have caught my earlier mistake. - - There should be no user visible changes with this commit. - -2021-11-25 Andrew Burgess - - gdb: simplify remote_target::is_async_p - This commit simplifies remote_target::is_async_p by removing the - target_async_permitted check. - - In previous commits I have added additional assertions around the - target_async_permitted flag into target.c, as a result we should now - be confident that if target_can_async_p returns false, a target will - never have async mode enabled. Given this, it should not be necessary - to check target_async_permitted in remote_target::is_async_p, if this - flag is false ::is_async_p should return false anyway. There is an - assert to this effect in target_is_async_p. - - There should be no user visible change after this commit. - -2021-11-25 Andrew Burgess - - gdb: add asserts in target.c for target_async_permitted - The target_async_permitted flag allows a user to override whether a - target can act in async mode or not. In previous commits I have moved - the checking of this flag out of the various ::can_async_p methods and - into the common target.c code. - - In this commit I will add some additional assertions into - target_is_async_p and target_async. The rules these assertions are - checking are: - - 1. A target that returns false for target_can_async_p should never - become "async enabled", and so ::is_async_p should always return - false. This is being checked in target_is_async_p. - - 2. GDB should never try to enable async mode for a target that - returns false for target_can_async_p, this is checked in - target_async. - - There are a few places where we call the ::is_async_p method directly, - in these cases we will obviously not pass through the assert in - target_is_async_p, however, there are also plenty of places where we - do call target_is_async_p so if GDB starts to misbehave we should - catch it quickly enough. - - There should be no user visible changes after this commit. - -2021-11-25 Andrew Burgess - - gdb: hoist target_async_permitted checks into target.c - This commit moves the target_async_permitted check out of each targets - ::can_async_p method and into the target_can_async_p wrapper function. - - I've left some asserts in the two ::can_async_p methods that I - changed, which will hopefully catch any direct calls to these methods - that might be added in the future. - - There should be no user visible changes after this commit. - -2021-11-25 Andrew Burgess - - gdb: introduce a new overload of target_can_async_p - There are a few places where we call the target_ops::can_async_p - member function directly, instead of using the target_can_async_p - wrapper. - - In some of these places this is because we need to ask before the - target has been pushed, and in another location (in target.c) it seems - unnecessary to go through the wrapper when we are already in target.c - code. - - However, in the next commit I'd like to hoist some common checks out - of target specific code into target.c. To achieve this, in this - commit, I introduce a new overload of target_can_async_p which takes a - target_ops pointer, and calls the ::can_async_p method directly. I - then make use of the new overload where appropriate. - - There should be no user visible changes after this commit. - -2021-11-25 Clément Chigot - - ld/testsuite/ld-elfvsb: correctly test "weak hidden symbol DSO last" - The test must be done with the shared object and not with the object - file which is already being tested above. - - ld/ - * testsuite/ld-elfvsb/elfvsb.exp: use .so file in "weak hidden - symbol DSO last" - -2021-11-25 Tom de Vries - - [gdb/cli] Add "set logging enabled", deprecate "set logging on/off" - Before commit 3b6acaee895 "Update more calls to add_prefix_cmd" we had the - following output for "show logging file": - ... - $ gdb -q -batch -ex "set trace-commands on" \ - -ex "set logging off" \ - -ex "show logging file" \ - -ex "set logging on" \ - -ex "show logging file" - +set logging off - +show logging file - Future logs will be written to gdb.txt. - +set logging on - +show logging file - Currently logging to "gdb.txt". - ... - - After that commit we have instead: - ... - +set logging off - +show logging file - The current logfile is "gdb.txt". - +set logging on - +show logging file - The current logfile is "gdb.txt". - ... - - Before the commit, whether logging is enabled or not can be deduced from the - output of the command. After the commit, the message is unified and it's no - longer clear whether logging is enabled or not. - - Fix this by: - - adding a new command "show logging enabled" - - adding a corresponding new command "set logging enabled on/off" - - making the commands "set logging on/off" deprecated aliases of the - "set logging enabled on/off" command. - - Update the docs and testsuite to use "set logging enabled". Mention the new - and deprecated commands in NEWS. - - Tested on x86_64-linux. - -2021-11-25 Tom de Vries - - [gdb/cli] Fix typo in logging overwrite help text - Currently we have: - ... - $ gdb -q -batch -ex "help set logging overwrite" - Set whether logging overwrites or appends to the log file. - If set, logging overrides the log file. - ... - - Fix overrides -> overwrites typo. - -2021-11-25 GDB Administrator - - Automatic date update in version.in - -2021-11-24 Simon Marchi - - gdb: fix help doc for "set index-cache enabled" - When implementing this command, I put "help doc" as a placeholder for - the help string, and forgot to update it. Change it for a real help - string. - - Change-Id: Id23c2142c5073dc570bd8a706e9ec6fa8c40eb09 - -2021-11-24 Simon Marchi - - Revert (part of) "gdb fix for catch-syscall.exp" - This reverts (par of) commit ab198279120fe7937c0970a8bb881922726678f9. - This commit changed what the test expects when catching the execve - syscall based on the behavior seen on a Linux PowerPC machine. That is, - we get an "entry" event, but no "return" event. This is not what we get - on Linux with other architectures, though, and it seems like a - PowerPC-specific bug. - - Revert the part of the patch related to this, but not the other hunk. - - Change-Id: I4248776e4299f10999487be96d4acd1b33639996 - -2021-11-24 Nick Clifton - - Fix an illegal memory access parsing a corrupt sysroff file. - PR 28564 - * sysdump.c (getCHARS): Check for an out of bounds read. - -2021-11-24 Andrew Burgess - - gdb: fix crash when reading ECOFF debug information - In commit: - - commit 633cf2548bcd3dafe297e21a1dd3574240280d48 - Date: Wed May 9 15:42:28 2018 -0600 - - Remove cleanups from mdebugread.c - - the following change was made in the function parse_partial_symbols in - mdebugread.c: - - - fdr_to_pst = XCNEWVEC (struct pst_map, hdr->ifdMax + 1); - - old_chain = make_cleanup (xfree, fdr_to_pst); - + gdb::def_vector fdr_to_pst_holder (hdr->ifdMax + 1); - + fdr_to_pst = fdr_to_pst_holder.data (); - - The problem with this change is that XCNEWVEC calls xcalloc, which in - turn calls calloc, and calloc zero initializes the allocated memory. - In contrast, the new line gdb::def_vector specifically - does not initialize the underlying memory. - - This is a problem because, later on in this same function, we - increment the n_globals field within 'struct pst_map' objects stored - in the vector. The incrementing is now being done from an - uninitialized starting point. - - In this commit we switch from using gdb::def_vector to using - std::vector, this alone should be enough to ensure that the fields are - initialized to zero. - - However, for extra clarity, I have also added initial values in the - 'struct pst_map' to make it crystal clear how the struct will start - up. - - This issue was reported on the mailing list here: - - https://sourceware.org/pipermail/gdb-patches/2021-November/183693.html - - Co-Authored-By: Lightning - -2021-11-24 GDB Administrator - - Automatic date update in version.in - -2021-11-23 Alexandra Hájková - - configure.ac: Check for the readline.h explicitly - When readline development package is missing make fails with - "configure: error: system readline is not new enough" which - might be confusing. This patch checks for the readline.h explicitly - and makes make to warn about the missing package. - -2021-11-23 Tamar Christina - - AArch64: Add support for AArch64 EFI (efi-*-aarch64). - This adds support for efi-*-aarch64 by virtue of adding a new PEI target - pei-aarch64-little. This is not a full target and only exists to support EFI - at this time. - - This means that this target does not support relocation processing and is mostly - a container format. This format has been added to elf based aarch64 targets - such that efi images can be made natively on Linux. - - However this target is not valid for use with gas but only with objcopy. - - With these changes the resulting file is recognized as an efi image by - third party tools: - - > pecli info hello.efi - - Metadata - ================================================================================ - MD5: 598c32a778b0f0deebe977fef8578c4e - SHA1: 4580121edd5cb4dc40f51b28f171fd15250df84c - SHA256: 3154bd7cf42433d1c957f6bf55a17ad8c57ed41b29df2d485703349fd6ff1d5c - Imphash: - Size: 47561 bytes - Type: PE32+ executable (EFI application) (stripped to external PDB), for MS Windows - Compile Time: 1970-01-01 00:00:00 (UTC - 0x0 ) - Entry point: 0x2000 (section .text) - - Sections - ================================================================================ - Name RWX VirtSize VirtAddr RawAddr RawSize Entropy md5 - .text R-X 0x5bb0 0x2000 0x400 0x5c00 6.39 551fbc264256a3f387de8a891500ae0d - .reloc R-- 0xc 0x8000 0x6000 0x200 0.02 0c45f6d812d079821c1d54c09ab89e1d - .data RW- 0x1d88 0x9000 0x6200 0x1e00 4.18 5d1137c09f01289dc62bf754f7290db3 - .dynamic RW- 0xf0 0xb000 0x8000 0x200 0.34 5c94ed3206f05a277e6f04fbf131f131 - .rela R-- 0xe58 0xc000 0x8200 0x1000 1.87 8b5c6bc30f3acb7ca7bf2e6789d68519 - .dynsym R-- 0x138 0xd000 0x9200 0x200 0.96 bdcf5101da51aadc663ca8859f88138c - - Imports - ================================================================================ - - Any magic number is based on the Microsoft PE specification [1]. - - [1] https://docs.microsoft.com/en-us/windows/win32/debug/pe-format - - bfd/ChangeLog: - - 2021-10-21 Tamar Christina - - PR binutils/26206 - * .gitignore (pe-aarch64igen.c): New. - * Makefile.am (pei-aarch64.lo, pe-aarch64igen.lo, pei-aarch64.c, - pe-aarch64igen.c): Add support. - * Makefile.in: Likewise. - * bfd.c (bfd_get_sign_extend_vma): Add pei-aarch64-little. - * coff-aarch64.c: New file. - * coffcode.h (coff_set_arch_mach_hook, coff_set_flags, - coff_write_object_contents) Add aarch64 (aarch64_pei_vec) support. - * config.bfd: Likewise. - * configure: Likewise. - * configure.ac: Likewise. - * libpei.h (GET_OPTHDR_IMAGE_BASE, PUT_OPTHDR_IMAGE_BASE, - GET_OPTHDR_SIZE_OF_STACK_RESERVE, PUT_OPTHDR_SIZE_OF_STACK_RESERVE, - GET_OPTHDR_SIZE_OF_STACK_COMMIT, PUT_OPTHDR_SIZE_OF_STACK_COMMIT, - GET_OPTHDR_SIZE_OF_HEAP_RESERVE, PUT_OPTHDR_SIZE_OF_HEAP_RESERVE, - GET_OPTHDR_SIZE_OF_HEAP_COMMIT, PUT_OPTHDR_SIZE_OF_HEAP_COMMIT, - GET_PDATA_ENTRY, _bfd_peAArch64_bfd_copy_private_bfd_data_common, - _bfd_peAArch64_bfd_copy_private_section_data, - _bfd_peAArch64_get_symbol_info, _bfd_peAArch64_only_swap_filehdr_out, - _bfd_peAArch64_print_private_bfd_data_common, - _bfd_peAArch64i_final_link_postscript, - _bfd_peAArch64i_only_swap_filehdr_out, _bfd_peAArch64i_swap_aouthdr_in, - _bfd_peAArch64i_swap_aouthdr_out, _bfd_peAArch64i_swap_aux_in, - _bfd_peAArch64i_swap_aux_out, _bfd_peAArch64i_swap_lineno_in, - _bfd_peAArch64i_swap_lineno_out, _bfd_peAArch64i_swap_scnhdr_out, - _bfd_peAArch64i_swap_sym_in, _bfd_peAArch64i_swap_sym_out, - _bfd_peAArch64i_swap_debugdir_in, _bfd_peAArch64i_swap_debugdir_out, - _bfd_peAArch64i_write_codeview_record, - _bfd_peAArch64i_slurp_codeview_record, - _bfd_peAArch64_print_ce_compressed_pdata): New. - * peXXigen.c (_bfd_XXi_swap_aouthdr_in, _bfd_XXi_swap_aouthdr_out, - pe_print_pdata, _bfd_XX_print_private_bfd_data_common, - _bfd_XX_bfd_copy_private_section_data, _bfd_XXi_final_link_postscript): - Support COFF_WITH_peAArch64, - * pei-aarch64.c: New file. - * peicode.h (coff_swap_scnhdr_in, pe_ILF_build_a_bfd, pe_ILF_object_p): - Support COFF_WITH_peAArch64. - (jtab): Add dummy entry that traps. - * targets.c (aarch64_pei_vec): New. - - binutils/ChangeLog: - - 2021-10-21 Tamar Christina - - PR binutils/26206 - * NEWS: Add new support. - * objcopy.c (convert_efi_target): Add efi-*-aarch64 support. - * testsuite/binutils-all/aarch64/pei-aarch64-little.d: New test. - * testsuite/binutils-all/aarch64/pei-aarch64-little.s: New test. - - include/ChangeLog: - - 2021-10-21 Tamar Christina - - PR binutils/26206 - * coff/aarch64.h: New file. - * coff/pe.h (IMAGE_FILE_MACHINE_ARM64): New. - -2021-11-23 Alan Modra - - binutils debuginfod test - A missing "return" resulted in this non-ELF fail: - x86_64-w64-mingw32 +FAIL: debuginfod (create separate debug info file) - - Also, the debuginfod I have installed does not appear to handle - non-native ELF objects, so only run the test when native. - - * testsuite/binutils-all/debuginfod.exp: Don't run test unless - native ELF. - -2021-11-23 Alan Modra - - Update bug reporting address - https://sourceware.org/bugzilla/ everywhere - - bfd/ - * configure.ac (ACX_BUGURL): Set to https://sourceware.org/bugzilla/ - * po/Make-in (msgid-bugs-address): Likewise. - * README: Report bugs to the above. - * configure: Regenerate. - binutils/ - * po/Make-in (msgid-bugs-address): Update. - gas/ - * README: Update bug address. Delete mention of gcc. - * po/Make-in: Update bug address. - gold/ - * po/Make-in: Update bug address. - gprof/ - * po/Make-in: Update bug address. - ld/ - * po/Make-in: Update bug address. - opcodes/ - * po/Make-in: Update bug address. - -2021-11-23 Jan (janneke) Nieuwenhuizen - - gdb: more compile fixes for gnu-nat.c - This fixes compile errors like - - ../../gdb-11.1/gdb/gnu-nat.c: In function void add_task_commands(): - ../../gdb-11.1/gdb/gnu-nat.c:3204:17: error: no matching function for call to add_cmd(const char [8], command_class, cmd_list_element*&, char*, cmd_list_element**) - 3204 | &setlist); - | ^ - In file included from ../../gdb-11.1/gdb/completer.h:21, - from ../../gdb-11.1/gdb/symtab.h:36, - from ../../gdb-11.1/gdb/infrun.h:21, - from ../../gdb-11.1/gdb/target.h:42, - from ../../gdb-11.1/gdb/inf-child.h:23, - from ../../gdb-11.1/gdb/gnu-nat.h:38, - from ../../gdb-11.1/gdb/gnu-nat.c:24: - ../../gdb-11.1/gdb/command.h:160:33: note: candidate: cmd_list_element* add_cmd(const char*, command_class, void (*)(const char*, int), const char*, cmd_list_element**) - 160 | extern struct cmd_list_element *add_cmd (const char *, enum command_class, - | ^~~~~~~ - ../../gdb-11.1/gdb/command.h:161:30: note: no known conversion for argument 3 from cmd_list_element* to void (*)(const char*, int) - 161 | cmd_const_cfunc_ftype *fun, - | ~~~~~~~~~~~~~~~~~~~~~~~^~~ - ../../gdb-11.1/gdb/command.h:167:33: note: candidate: cmd_list_element* add_cmd(const char*, command_class, const char*, cmd_list_element**) - 167 | extern struct cmd_list_element *add_cmd (const char *, enum command_class, - | ^~~~~~~ - ../../gdb-11.1/gdb/command.h:167:33: note: candidate expects 4 arguments, 5 provided - ../../gdb-11.1/gdb/gnu-nat.c:3210:18: error: no matching function for call to add_cmd(const char [8], command_class, cmd_list_element*&, char*, cmd_list_element**) - 3210 | &showlist); - | ^ - - Change-Id: Ie9029363d3fb40e34e8f5b1ab503745bc44bfe3f - -2021-11-23 Andrea Monaco - - gnu-nat.c: fix calls to add_info_alias - Some time ago add_info_alias was changed (commit - e0f25bd9717c7973197095523db7c1cdc956cea2). These calls were not updated - and caused errors on compilation. - - Change-Id: I354ae4e8b8926d785abc94ec7142471ffd76d2de - -2021-11-23 GDB Administrator - - Automatic date update in version.in - -2021-11-22 Simon Marchi - - gdb: pass more const target_waitstatus by reference - While working on target_waitstatus changes, I noticed a few places where - const target_waitstatus objects could be passed by reference instead of - by pointers. And in some cases, places where a target_waitstatus could - be passed as const, but was not. Convert them as much as possible. - - Change-Id: Ied552d464be5d5b87489913b95f9720a5ad50c5a - -2021-11-22 Simon Marchi - - gdb: introduce target_waitkind_str, use it in target_waitstatus::to_string - I would like to print target_waitkind values in debug messages, so I - think that a target_waitkind-to-string function would be useful. While - at it, use it in target_waitstatus::to_string. This changes the output - of target_waitstatus::to_string a bit, but I think it is for the better. - The debug messages will show a string matching exactly the - target_waitkind enumerator (minus the TARGET_WAITKIND prefix). - - As a convenience, make string_appendf return the same reference to - string it got as a parameter. This allows doing this: - - return string_appendf (str, "foo"); - - ... keeping the code concise. - - Change-Id: I383dffc9c78614e7d0668b1516073905e798eef7 - -2021-11-22 Simon Marchi - - gdb: rename target_waitstatus_to_string to target_waitstatus::to_string - Make target_waitstatus_to_string a "to_string" method of - target_waitstatus, a bit like we have ptid_t::to_string already. This - will save a bit of typing. - - Change-Id: Id261b7a09fa9fa3c738abac131c191a6f9c13905 - -2021-11-22 Nelson Chu - - RISC-V: Removed the redundant NULL pointer check in the riscv_update_subset. - If we always use the .option arch to call the riscv_update_subset, then - it is almost impossible that the input string will be NULL. Therefore, - just remove the redundant NULL pointer check in the riscv_update_subset. - - bfd/ - * elfxx-riscv.c (riscv_update_subset): Removed the redundant NULL - pointer check. - -2021-11-22 Nelson Chu - - RISC-V: Replace .option rvc/norvc with .option arch, +c/-c. - Since the .option rvc/norvc directives are obsolete, replace them with - the new proposed diretives: .option arch, +c/-c. And also reset the - riscv_opts.rvc flag for the .option arch directives. - - gas/ - * config/tc-riscv.c (s_riscv_option): Reset the riscv_opts.rvc - for the .option arch directives. - * testsuite/gas/riscv/align-1.s: Replace the obsolete .option - rvc/norvc with .option arch, +c/-c. - * testsuite/gas/riscv/c-add-addi.s: Likewise. - * testsuite/gas/riscv/c-nonzero-imm.s: Likewise. - * testsuite/gas/riscv/c-nonzero-reg.s: Likewise. - * testsuite/gas/riscv/c-zero-imm-64.s: Likewise. - * testsuite/gas/riscv/c-zero-imm.s: Likewise. - * testsuite/gas/riscv/c-zero-reg.s: Likewise. - * testsuite/gas/riscv/ext.s: Likewise. - * testsuite/gas/riscv/mapping-01.s: Likewise. - * testsuite/gas/riscv/mapping-02.s: Likewise. - * testsuite/gas/riscv/mapping-03.s: Likewise. - * testsuite/gas/riscv/mapping-04.s: Likewise. - * testsuite/gas/riscv/no-relax-align-2.s: Likewise. - * testsuite/gas/riscv/shamt-32.s: Likewise. - * testsuite/gas/riscv/shamt-64.s: Likewise. - -2021-11-22 Tom de Vries - - [gdb/build] Fix x86_64 x32 build - A build error on x86_64 with x32 abi was reported here ( - https://sourceware.org/pipermail/gdb/2021-November/049787.html ): - ... - gdb/nat/amd64-linux-siginfo.c:280:42: error: \ - 'struct compat_x32_siginfo_t::::' has no member \ - named 'si_addr_bnd' - 280 | #define cpt_si_lower _sifields._sigfault.si_addr_bnd._lower - | ^~~~~~~~~~~ - gdb/nat/amd64-linux-siginfo.c:337:38: note: in expansion of macro 'cpt_si_lower' - 337 | to->cpt_si_lower = from_ptrace.cpt_si_lower; - | ^~~~~~~~~~~~ - ... - - The problem is that code added in commit d3d7d1ba3bb "[gdb/tdep] Handle - si_addr_bnd in compat_siginfo_from_siginfo" doesn't compile on an x86_64 x32 - setup, because compat_x32_siginfo_t doesn't have the si_addr_bnd fields. - - Fix this conservatively by disabling the code for x32. - - Tested on x86_64-linux. - -2021-11-22 Nelson Chu - - RISC-V: PR28610, Fix ASAN heap-buffer-overflow error in riscv_update_subset. - The architecture parser in riscv_update_subset shouldn't check (or access) - the pointer space which doesn't exist. - - bfd/ - pr 28610 - * elfxx-riscv.c (riscv_update_subset): The architecture parser - shouldn't access the pointer space which doesn't exist. - -2021-11-22 Tom de Vries - - [gdb/symtab] Support .debug_line with DW_FORM_line_strp - I noticed a new gcc option -gdwarf64 and tried it out (using gcc 11.2.1). - - With a test-case hello.c: - ... - int - main (void) - { - printf ("hello\n"); - return 0; - } - ... - compiled like this: - ... - $ gcc -g -gdwarf64 ~/hello.c - ... - I ran into: - ... - $ gdb -q -batch a.out - DW_FORM_line_strp pointing outside of .debug_line_str section \ - [in module a.out] - ... - - Debugging gdb revealed that the string offset is: - ... - (gdb) up - objfile=0x182ab70, str_offset=1378684502312, - form_name=0xeae9b5 "DW_FORM_line_strp") - at src/gdb/dwarf2/section.c:208 - 208 error (_("%s pointing outside of %s section [in module %s]"), - (gdb) p /x str_offset - $1 = 0x14100000128 - (gdb) - ... - which is read when parsing a .debug_line entry at 0x1e0. - - Looking with readelf at the 0x1e0 entry, we have: - ... - The Directory Table (offset 0x202, lines 2, columns 1): - Entry Name - 0 (indirect line string, offset: 0x128): /data/gdb_versions/devel - 1 (indirect line string, offset: 0x141): /home/vries - ... - which in a hexdump looks like: - ... - 0x00000200 1f022801 00004101 00000201 1f020f02 - ... - - What happens is the following: - - readelf interprets the DW_FORM_line_strp reference to .debug_line_str as - a 4 byte value, and sees entries 0x00000128 and 0x00000141. - - gdb instead interprets it as an 8 byte value, and sees as first entry - 0x0000014100000128, which is too big so it bails out. - - AFAIU, gdb is wrong. It assumes DW_FORM_line_strp is 8 bytes on the basis - that the corresponding CU is 64-bit DWARF. However, the .debug_line - contribution has it's own initial_length field, and encodes there that it's - 32-bit DWARF. - - Fix this by using the correct offset size for DW_FORM_line_strp references - in .debug_line. - - Note: the described test-case does trigger this complaint (both with and - without this patch): - ... - $ gdb -q -batch -iex "set complaints 10" a.out - During symbol reading: intermixed 32-bit and 64-bit DWARF sections - ... - - The reason that the CU has 64-bit dwarf is because -gdwarf64 was passed to - gcc. The reason that the .debug_line entry has 32-bit dwarf is because that's - what gas generates. Perhaps this is complaint-worthy, but I don't think it - is wrong. - - Tested on x86_64-linux, using native and target board dwarf64.exp. - -2021-11-22 Tom de Vries - - [gdb/testsuite] Add target board dwarf64.exp - Add a new target board dwarf64.exp, that runs test with -gdwarf64. - - Tested on x86_64-linux. - -2021-11-22 Tom de Vries - - [gdb/testsuite] Support .debug_line v5 in dwarf assembler - The v5 section version for .debug_line has: - - two new fields address_size and segment_selector_size - - a different way to encode the directory and filename tables. - - Add support for this in the dwarf assembler. - - For now, make the v5 directory and filename tables work with the v4 type of - specification in the test-cases by adding duplicate entries at position 0. - - This will need to be properly fixed with an intrusive fix that changes how - directory and filename entries are specified in the test-cases, f.i: - ... - set diridx [include_dir "${srcdir}/${subdir}"] - set fileidx [file_name "$srcfile" $diridx] - ... - - Tested on x86_64-linux. - -2021-11-22 Tom de Vries - - [gdb/testsuite] Factor out _line_finalize_header - Rather than generate dwarf immediately in procs include_dir and file_name, - postpone generation and store the data in variables. Then handle the - generation in a new proc _line_finalize_header. - - Tested on x86-64-linux. - -2021-11-22 Tom de Vries - - [gdb/testsuite] Support .debug_line v4 in dwarf assembler - The .debug_line header got a new field in v4: - maximum_operations_per_instruction. - - Generate this field in the dwarf assembler, for now hardcoding the value to 1, - meaning non-VLIW. - - Tested on x86_64-linux. - -2021-11-22 Tom de Vries - - [gdb/testsuite] Add test-case gdb.dwarf2/dw2-lines.exp - Add a new test-case gdb.dwarf2/dw2-lines.exp that tests various .debug_line - sections. - - Tested on x86_64-linux. - -2021-11-22 Tom de Vries - - [gdb/testsuite] Speed up MACRO_AT_* calls - Currently, for each MACRO_AT_range or MACRO_AT_func in dwarf assembly the - following is done: - - $srcdir/$subdir/$srcfile is compiled to an executable using - flags "debug" - - a new gdb instance is started - - the new executable is loaded. - - This is inefficient, because the executable is identical within the same - Dwarf::assemble call. - - Share the gdb instance in the same Dwarf::assemble invocation, which speeds - up a make check with RUNTESTFLAGS like this to catch all dwarf assembly - test-cases: - ... - rtf=$(echo $(cd src/gdb/testsuite; find gdb.* -type f -name "*.exp" \ - | xargs grep -l Dwarf::assemble)) - ... - from: - ... - real 1m39.916s - user 1m25.668s - sys 0m21.377s - ... - to: - ... - real 1m29.512s - user 1m17.316s - sys 0m19.100s - ... - - Tested on x86_64-linux. - -2021-11-22 GDB Administrator - - Automatic date update in version.in - -2021-11-21 Lancelot SIX - - gdb/testsuite: Remove duplicates in gdb.base/catch-signal.exp - When running the testsuite I have the following: - - Running .../gdb/testsuite/gdb.base/catch-signal.exp ... - DUPLICATE: gdb.base/catch-signal.exp: SIGHUP: continue - DUPLICATE: gdb.base/catch-signal.exp: SIGHUP: continue - DUPLICATE: gdb.base/catch-signal.exp: 1: continue - DUPLICATE: gdb.base/catch-signal.exp: 1: continue - DUPLICATE: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue - DUPLICATE: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue - - This patch removes DUPLICATE in gdb.base/catch-signal.exp by explicitly - giving names to the offending 'gdb_test "continue"' statements to make - them distinct. - - Tested on x86_64-linux. - -2021-11-21 Mike Frysinger - - sim: v850: fix cpu_option testsuite handling - The v850 testsuite code has been testing the $opt variable, but this - was never actually set anywhere globally or v850-specific. Instead, - this was a random variable leaking out of the sh testsuite code. As - far as I can tell, it has always been this way. That means the code - only ever tested the v850 cpu target (which is the default). - - This failure can be easily seen in practice by running the v850 code - in isolation and seeing it crash: - $ runtest v850/allinsns.exp - ... - Running target unix - Using /usr/share/dejagnu/baseboards/unix.exp as board description file for target. - Using /usr/share/dejagnu/config/unix.exp as generic interface file for target. - Using ../../../sim/testsuite/config/default.exp as tool-and-target-specific interface file. - WARNING: Assuming target board is the local machine (which is probably wrong). - You may need to set your DEJAGNU environment variable. - Running ../../../sim/testsuite/v850/allinsns.exp ... - ERROR: tcl error sourcing ../../../sim/testsuite/v850/allinsns.exp. - ERROR: tcl error code TCL LOOKUP VARNAME opt - ERROR: can't read "opt": no such variable - while executing - "switch -regexp -- $opt { - - Backing up a bit, the reason for this logic in the first place is - because the common sim testsuite code makes an assumption about the - assembler options with cpu_option -- the option and its value are - always separated by an =. This is not the case with v850. So tweak - the core sim logic a bit to support omitting the = so that we can - switch v850 to the standard all_machs setting and avoid opt entirely. - -2021-11-21 GDB Administrator - - Automatic date update in version.in - -2021-11-20 Jeff Law - - Fix intermittent failures on the H8, particularly H8/SX tests. - The upstream GCC tester has showed spurious execution failures on the - H8 target for the H8/SX multilibs. I suspected memory corruption or an - uninitialized variable early as the same binary would sometimes work and - sometimes it got the wrong result. Worse yet, the point where the test - determined it was getting the wrong result would change. - - Because it only happened on the H8/SX variant I was able to zero in on - the "mova" support and the "short form" of those instructions in particular. - - As the code stands it checks if code->op3.type == 0 to try and identify cases - where op3 wasn't filled in and thus we've got the short form of the mova - instruction. - - But for the short-form of those instructions we never set any of the "op3" - data structure. We get whatever was lying around -- it's usually zero and - thus things usually work, but if the stale data was nonzero, then we'd - fail to recognize the instruction as a short-form and fail to set up the - various fields appropriately. - - I initially initialized the op3.type field to zero, but didn't like that - because it was inconsistent with how other operands were initialized. - Bringing consistency meant using -1 as the initializer value and adjusting - the check for short form mova appropriately. - - I've had this in the upstream GCC tester for perhaps a year at this point - and haven't seen any of the intermittent failures again. - -2021-11-20 Simon Marchi - - gdbsupport: fix array-view compilation with c++11 && _GLIBCXX_DEBUG - When building with -std=c++11 and -D_GLIBCXX_DEBUG=1, we get some errors - like: - - CXX unittests/array-view-selftests.o - In file included from /home/smarchi/src/binutils-gdb/gdb/utils.h:25, - from /home/smarchi/src/binutils-gdb/gdb/defs.h:630, - from /home/smarchi/src/binutils-gdb/gdb/unittests/array-view-selftests.c:20: - /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/array-view.h: In instantiation of constexpr gdb::array_view gdb::array_view::slice(gdb::array_view::size_type, gdb::array_view::size_type) const [with T = unsigned char; gdb::array_view::size_type = long unsigned int: - /home/smarchi/src/binutils-gdb/gdb/unittests/array-view-selftests.c:532:29: required from here - /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/array-view.h:192:3: error: body of constexpr function constexpr gdb::array_view gdb::array_view::slice(gdb::array_view::size_type, gdb::array_view::size_type) const [with T = unsigned char; gdb::array_view::size_type = long unsigned int not a return-statement - 192 | } - | ^ - - This is because constexpr functions in c++11 can only consist of a - single return statement, so we can't have the gdb_assert in there. Make - the gdb_assert presence conditional to the __cplusplus version, to - enable it only for c++14 and later. - - Change-Id: I2ac33f7b4bd1765ddc3ac8d07445b16ac1f340f0 - -2021-11-20 Tom de Vries - - [gdb/build] Check if libsource-highlight is usable - When building gdb with g++ 4.8.5, I ran into: - ... - ld: source-cache.o: in function `source_cache::ensure(symtab*)': - source-cache.c:207: undefined reference to \ - srchilite::SourceHighlight::SourceHighlight(std::string const&) - ... - - [ I configured gdb without explicit settings related to source-highlight, so - we're excercising the enable_source_highlight=auto scenario. ] - - The problem is that: - - the source-highlight library is build with system compiler - g++ 7.5.0 which uses the new libstdc++ library abi (see - https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html ) - - gdb is build using g++ 4.8.5 which uses the old abi. - - [ There's a compatibility macro _GLIBCXX_USE_CXX11_ABI, but that doesn't work - for this case. Instead, it enables the opposite case where the - source-highlight library is build with g++ 4.8.5 and gdb is build with - g++ 7.5.0. ] - - Fix this by checking whether the source-highlight library is usable during - configuration. - - In the enable_source_highlight=auto scenario, this allows the build to skip - the unusable library and finish successfully. - - In the enable_source_highlight=yes scenario, this allows the build to error - out earlier. - - Tested on x86_64-linux. - -2021-11-20 Clément Chigot - - bfd: remove wrong comment in xcofflink.c - This comment was long time ago associated to the function - "xcoff_build_ldsyms" which have since been replaced by - "xcoff_build_ldsym". - - * xcofflink.c: Remove wrong comment. - -2021-11-20 Mike Frysinger - - sim: bfin: fix short --env usage in testsuite - Now that we have more than one option that matches "--env", the test - config here doesn't work. Use the explicit --environment. - -2021-11-20 GDB Administrator - - Automatic date update in version.in - -2021-11-19 H.J. Lu - - elfedit: Align --[in|out]put-abiversion usage - Align - - --input-abiversion [0-255] Set input ABIVERSION - --output-abiversion [0-255] Set output ABIVERSION - - instead of - - --input-abiversion [0-255] - Set input ABIVERSION - --output-abiversion [0-255] - Set output ABIVERSION - - * elfedit.c (usage): Align --[in|out]put-abiversion usage. - -2021-11-19 Tom de Vries - - [gdb/testsuite] Handle runto fail in gdb.mi/mi-var-cp.exp - On OBS I ran into: - ... - PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:81 (set breakpoint) - UNRESOLVED: gdb.mi/mi-var-cp.exp: unable to start target - ... - followed by 81 FAILs and two more UNRESOLVEDs. - - I didn't manage to reproduce this, but I did notice that the initial - problem causing the UNRESOLVED caused all subsequent UNRESOLVEDs and FAILs. - - I emulated the problem by commenting out the send_gdb "run\n" in - mi_run_cmd_full. - - Fix this by: - - handling mi_run_cmd failure in mi_get_inline_test - - handling mi_run_inline_test failure in gdb.mi/mi-var-cp.exp, and - other test-cases using mi_get_inline_test - - Tested on x86_64-linux. - -2021-11-19 Tom de Vries - - [gdb/testsuite] Fix 64-bit dwarf test-cases with -m32 - When running test-case gdb.dwarf2/loc-sec-offset.exp with target board -m32, - I run into: - ... - builtin_spawn -ignore SIGHUP gcc -fno-stack-protector -m32 \ - -fdiagnostics-color=never -c -o loc-sec-offset-dw641.o \ - loc-sec-offset-dw64.S^M - as: loc-sec-offset-dw641.o: unsupported relocation type: 0x1^M - loc-sec-offset-dw64.S: Assembler messages:^M - loc-sec-offset-dw64.S:29: Error: cannot represent relocation type \ - BFD_RELOC_64^M - ... - - Looking at line 29, we have: - ... - .8byte .Labbrev1_begin /* Abbrevs */ - ... - - It would be nice if the assembler could handle this somehow. But I guess - it's not unreasonable that an assembler for a 32-bit architecture will object - to handling 64-bit labels. - - Instead, work around this in the dwarf assembler by emitting: - ... - .4byte .Labbrev1_begin /* Abbrevs (lsw) */ - .4byte 0 /* Abbrevs (msw) */ - ... - - Tested on x86_64-linux with target board unix/-m32. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28383 - -2021-11-19 Tom de Vries - - [gdb/testsuite] Fix gdb.threads/thread-specific-bp.exp - On OBS I ran into a failure in test-case gdb.threads/thread-specific-bp.exp: - ... - (gdb) PASS: gdb.threads/thread-specific-bp.exp: non-stop: continue to end - info breakpoint^M - Num Type Disp Enb Address What^M - 1 breakpoint keep y 0x0000555555555167 in main at $src:36^M - breakpoint already hit 1 time^M - 2 breakpoint keep y 0x0000555555555151 in start at $src:23^M - breakpoint already hit 1 time^M - 3 breakpoint keep y 0x0000555555555167 in main at $src:36 thread 2^M - stop only in thread 2^M - 4 breakpoint keep y 0x000055555555515c in end at $src:29^M - breakpoint already hit 1 time^M - (gdb) [Thread 0x7ffff7db1640 (LWP 19984) exited]^M - Thread-specific breakpoint 3 deleted - thread 2 no longer in the thread list.^M - FAIL: gdb.threads/thread-specific-bp.exp: non-stop: \ - thread-specific breakpoint was deleted (timeout) - ... - - Fix this by waiting for the "[Thread 0x7ffff7db1640 (LWP 19984) exited]" - message before issuing the "info breakpoint command". - - Tested on x86_64-linux. - -2021-11-19 Christina Schimpe - - gdb/testsuite: Extend tests for print of cv qualifiers - This commit supplements whatis and ptype command tests for print of - const-volatile qualifiers. - - gdb/testsuite/ChangeLog: - 2021-11-16 Christina Schimpe - - * gdb.cp/ptype-cv-cp.cc: New const and volatile typedef - variables. - * gdb.cp/ptype-cv-cp.exp: Add new tests. - -2021-11-19 Christina Schimpe - - gdb: Print cv qualifiers if class attributes are substituted - Make ptype print const/volatile qualifiers when template or typedef - attributes are substituted. - - For a programm like - ~~~ - template - class Cfoo - { - typedef float myfloat; - public: - DataT me0; - const DataT me1=1; - const myfloat me2=2.0; - }; - - int main() - { - Cfoo cfoo; - return 0; - } - ~~~ - - gdb outputs the following type for cfoo's attributes: - - ~~~ - (gdb) b 14 - Breakpoint 1 at 0x1170: file tmp.cc, line 14. - (gdb) run - Starting program: /tmp - - Breakpoint 1, main () at tmp.cc:14 - 14 return 0; - (gdb) ptype cfoo - type = class Cfoo [with DataT = int] { - public: - DataT me0; - DataT me1; - myfloat me2; - - private: - typedef float myfloat; - } - - ~~~ - - The cv qualifiers (const in this case) are ignored for me1 and me2. - - After: - ~~~ - (gdb) ptype cfoo - type = class Cfoo [with DataT = int] { - public: - DataT me0; - const DataT me1; - const myfloat me2; - - private: - typedef float myfloat; - } - ~~~ - - gdb/ChangeLog: - 2021-11-16 Christina Schimpe - - * gdb/c-typeprint.c: Print cv qualifiers in case of parameter - substitution. - - gdb/testsuite/ChangeLog: - 2021-11-16 Christina Schimpe - - * gdb.cp/templates.cc: New template class Cfoo with const, - template, typdef and integer attributes. - * gdb.cp/templates.exp: Add new test using ptype and ptype/r - commmands for template class CFoo. - -2021-11-19 Nelson Chu - - RISC-V: Support new .option arch directive. - https://github.com/riscv/riscv-asm-manual/pull/67 - - Format: - .option arch, +, ... - .option arch, - - .option arch, = - - The new direcitve is used to enable/disable extensions for the specific - code region. For example, - - .attribute arch, "rv64ic" # arch = rv64i2p0_c2p0 - .option push - .option arch, +d2p0, -c # arch = rv64i2p0_f2p0_d2p0, f is added implied - .option arch, =rv32gc # arch = rv32i2p0_m2p0_a2p0_f2p0_d2p0_c2p0 - .option pop # arch = rv64i2p0_c2p0 - - Note that, - 1. ".option rvc/norvc" have the same behavior as ".option arch +c/-c". - 2. ".option arch -i" is illegal, since we cannot remove base i extension. - 3. If arch=rv64i2p0, then ".option arch, +i3p0" will update the i's version - from 2.0 to 3.0. - 4. If arch=rv64i3p0, then ".option arch, +i" will update the i's version - from 2.0 to the default one according to the chosen isa spec. - - bfd/ - * elfxx-riscv.c (riscv_add_subset): If the subset is already added, - and the new versions are not RISCV_UNKNOWN_VERSION, then update the - versions to the subset list. - (riscv_copy_subset): New function. Copy the subset from list. - (riscv_copy_subset_list): New function. Return the new copyed list. - (riscv_update_subset): Updated to make .option arch directives workable. - * elfxx-riscv.h: Updated. - gas/ - * config/tc-riscv.c (riscv_subsets): Defined as a pointer. - (riscv_rps_as): Init the subset_list to NULL, we will set it later - once riscv_opts_stack is created or updated. - (struct riscv_option_stack, riscv_opts_stack): Moved forward. - (riscv_set_arch): Updated. - (s_riscv_option): Support new .option arch directive, to add, remove - or update subsets for the specific code region. - (riscv_write_out_attrs): Updated. - * doc/c-riscv.texi: Added document for new .option arch directive. - * testsuite/gas/riscv/option-arch-01a.d: New testcase. - * testsuite/gas/riscv/option-arch-01b.d: Likewise. - * testsuite/gas/riscv/option-arch-01.s: Likewise.. - * testsuite/gas/riscv/option-arch-02.d: Likewise. - * testsuite/gas/riscv/option-arch-02.s: Likewise. - * testsuite/gas/riscv/option-arch-fail.d: Likewise. - * testsuite/gas/riscv/option-arch-fail.l: Likewise. - * testsuite/gas/riscv/option-arch-fail.s: Likewise. - -2021-11-19 Alan Modra - - Re: Add multibyte character warning option to the assembler. - On hppa*-hp-hpux* run_dump_test edits the test file, adjusting .comm - directives to suit those target's unusual syntax. Thus gas is passed - a temporary file name. - - * testsuite/gas/all/multibyte1.l: Ignore file name. - -2021-11-19 Mike Frysinger - - sim: install various doc files - -2021-11-19 Nelson Chu - - RISC-V: Support STO_RISCV_VARIANT_CC and DT_RISCV_VARIANT_CC. - This is the original discussion, - https://github.com/riscv/riscv-elf-psabi-doc/pull/190 - - And here is the glibc part, - https://sourceware.org/pipermail/libc-alpha/2021-August/129931.html - - For binutils part, we need to support a new direcitve: .variant_cc. - The function symbol marked by .variant_cc means it need to be resolved - directly without resolver for dynamic linker. We also add a new dynamic - entry, STO_RISCV_VARIANT_CC, to indicate there are symbols with the - special attribute in the dynamic symbol table of the object. - - I heard that llvm already have supported this in their mainline, so - I think it's time to commit this. - - bfd/ - * elfnn-riscv.c (riscv_elf_link_hash_table): Added variant_cc - flag. It is used to check if relocations for variant CC symbols - may be present. - (allocate_dynrelocs): If the symbol has STO_RISCV_VARIANT_CC - flag, then raise the variant_cc flag of riscv_elf_link_hash_table. - (riscv_elf_size_dynamic_sections): Added dynamic entry for - variant_cc. - (riscv_elf_merge_symbol_attribute): New function, used to merge - non-visibility st_other attributes, including STO_RISCV_VARIANT_CC. - binutils/ - * readelf.c (get_riscv_dynamic_type): New function. - (get_dynamic_type): Called get_riscv_dynamic_type for riscv targets. - (get_riscv_symbol_other): New function. - (get_symbol_other): Called get_riscv_symbol_other for riscv targets. - gas/ - * config/tc-riscv.c (s_variant_cc): Marked symbol that it follows a - variant CC convention. - (riscv_elf_copy_symbol_attributes): Same as elf_copy_symbol_attributes, - but without copying st_other. If a function symbol has special st_other - value set via directives, then attaching an IFUNC resolver to that symbol - should not override the st_other setting. - (riscv_pseudo_table): Support variant_cc diretive. - * config/tc-riscv.h (OBJ_COPY_SYMBOL_ATTRIBUTES): Defined. - * testsuite/gas/riscv/variant_cc-set.d: New testcase. - * testsuite/gas/riscv/variant_cc-set.s: Likewise. - * testsuite/gas/riscv/variant_cc.d: Likewise. - * testsuite/gas/riscv/variant_cc.s: Likewise. - include/ - * elf/riscv.h (DT_RISCV_VARIANT_CC): Defined to (DT_LOPROC + 1). - (STO_RISCV_VARIANT_CC): Defined to 0x80. - ld/ - * testsuite/ld-riscv-elf/variant_cc-1.s: New testcase. - * testsuite/ld-riscv-elf/variant_cc-2.s: Likewise. - * testsuite/ld-riscv-elf/variant_cc-now.d: Likewise. - * testsuite/ld-riscv-elf/variant_cc-r.d: Likewise. - * testsuite/ld-riscv-elf/variant_cc-shared.d: Likewise. - * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated. - -2021-11-19 Mike Frysinger - - sim: use program_transform_name for libsim - Instead of always using target_alias as a prefix on the name, use - program_transform_name instead so that the library is scoped in the - same way as the run program. - - sim: avoid installing headers when there is no sim - If we aren't building any sims, don't install the sim headers as they - won't be useful to anyone. - -2021-11-19 GDB Administrator - - Automatic date update in version.in - -2021-11-18 Kevin Buettner - - dprintf-execution-x-script.exp: Adjust test for native-extended-gdbserver - Without this commit, doing... - - make check RUNTESTFLAGS="--target_board=native-extended-gdbserver" \ - TESTS="gdb.base/dprintf-execution-x-script.exp" - - ...will show one failure. - - Here's a snippet from gdb.log showing the circumstances - I've trimmed - the paths for readability: - - builtin_spawn gdb -nw -nx -data-directory data-directory -iex set height 0 -iex set width 0 -iex set auto-connect-native-target off -iex set sysroot -ex set height unlimited -x testsuite/gdb.base/dprintf-execution-x-script.gdb --args testsuite/outputs/gdb.base/dprintf-execution-x-script/dprintf-execution-x-script - ... - Reading symbols from testsuite/outputs/gdb.base/dprintf-execution-x-script/dprintf-execution-x-script... - Dprintf 1 at 0x40116e: file testsuite/gdb.base/dprintf-execution-x-script.c, line 38. - Breakpoint 2 at 0x40113a: file testsuite/gdb.base/dprintf-execution-x-script.c, line 26. - testsuite/gdb.base/dprintf-execution-x-script.gdb:21: Error in sourced command file: - Don't know how to run. Try "help target". - (gdb) FAIL: gdb.base/dprintf-execution-x-script.exp: load and run script with -x - ... - GNU gdb (GDB) 12.0.50.20211118-git - Copyright (C) 2021 Free Software Foundation, Inc. - ... - (gdb) set height 0 - (gdb) set width 0 - (gdb) builtin_spawn gdbserver/gdbserver --once --multi localhost:2346 - Listening on port 2346 - target extended-remote localhost:2346 - Remote debugging using localhost:2346 - ... - [Tests after this point will pass.] - - Note that the command which spawns gdb prevents the gdb script from - using the native target via "-iex set auto-connect-native-target off". - - Moreover, the script in question contains a "run" command, so GDB - doesn't know how to run (since it's prevented from using the native - target and no alternate "target" command has been issued. But, once - GDB finishes starting up, the test will spawn a gdbserver and then - connect to it. The other (two) tests after this point both pass. - - I've fixed this by using gdb_test_multiple instead of gdb_test. - When a "Don't know how to run message" is received, the test is - unsupported. - - I've also added a comment explaining the reason for needing to check - for "Don't know how to run" despite bailing out at the top of the test - via: - - if ![target_can_use_run_cmd] { - return 0 - } - -2021-11-18 Simon Marchi - - gdb: fix array-view-selftests.c build with g++ 4.8 - When building with g++ 4.8, I get: - - CXX unittests/array-view-selftests.o - /home/smarchi/src/binutils-gdb/gdb/unittests/array-view-selftests.c:123:42: error: expected 'class' before 'Container' - template typename Container> - ^ - - I am no C++ template expert, but it looks like if I change "typename" for - "class", as the compiler kind of suggests, the code compiles. - - Change-Id: I9c3edd29fb2b190069f0ce0dbf3bc3604d175f48 - -2021-11-18 Simon Marchi - - gdb: fix ia64-tdep.c build with g++ 4.8 - When building with g++ 4.8, I get: - - CXX ia64-tdep.o - /home/smarchi/src/binutils-gdb/gdb/ia64-tdep.c:3862:1: error: could not convert '{ia64_allocate_new_rse_frame, ia64_store_argument_in_slot, ia64_set_function_addr}' from '' to 'const ia64_infcall_ops' - }; - ^ - - This happens since commit 345bd07cce3 ("gdb: fix gdbarch_tdep ODR - violation"), which added default values for ia64_infcall_ops fields. It - looks like g++ 4.8 doesn't like initializing the ia64_infcall_ops object - using the brace-enclosed initializer list when the ia64_infcall_ops - fields are assigned default values. - - Later compilers don't have a problem with that, so I suppose that the - code is correct, but still, change it to make gcc 4.8 happy. Don't - initialize the fields of ia64_infcall_ops directly, instead - default-initialize ia64_gdbarch_tdep::infcall_ops. - - Change-Id: I35e3a61abd7b7bbcafe6cb207078c738c5266d76 - -2021-11-18 Simon Marchi - - gdb: move AIX_TEXT_SEGMENT_BASE to rs6000-aix-tdep.c, remove rs6000-tdep.h - The contents of rs6000-tdep.h (AIX_TEXT_SEGMENT_BASE) is AIX-specific, - so I thought that this file should be named rs6000-aix-tdep.h. But - there's already a rs6000-aix-tdep.h, so then I though - AIX_TEXT_SEGMENT_BASE should simply be moved there, and rs6000-tdep.h - deleted. But then I realized that AIX_TEXT_SEGMENT_BASE is only used in - rs6000-aix-tdep.c, so move it to the beginning of that file. - - Change-Id: Ia212c6fae202f31aedb46575821cd642beeda7a3 - -2021-11-18 Simon Marchi - - gdb: rename rs6000-nat.c to rs6000-aix-nat.c - This file seems to be AIX-specific, according to its contents and - configure.nat. Rename it to rs6000-aix-nat.c, to make that clear (and - to follow the convention). - - Change-Id: Ib418dddc6b79b2e28f64431121742b5e87f5f4f5 - -2021-11-18 Tom de Vries - - [gdb/doc] Fix negative repeat count examining memory example - The documentation for the examining memory command x contains an example: - ... - You can also specify a negative repeat count to examine memory backward from - the given address. For example, 'x/-3uh 0x54320' prints three halfwords (h) - at 0x54314, 0x54328, and 0x5431c. - ... - - The 0x54328 looks like a typo, which was intended to be 0x54318. - - But the series uses a 4-byte distance, while the halfword size used in the - command means a 2-byte distance, so the series should be: - ... - 0x5431a, 0x5431c, and 0x5431e. - ... - - Fix this by updating the addresses in the example accordingly. - - Reported here ( https://sourceware.org/pipermail/gdb/2021-November/049784.html - ). - -2021-11-18 Nick Clifton - - Add multibyte character warning option to the assembler. - * as.c (parse_args): Add support for --multibyte-handling. - * as.h (multibyte_handling): Declare. - * app.c (scan_for_multibyte_characters): New function. - (do_scrub_chars): Call the new function if multibyte warning is - enabled. - * input-scrub,c (input_scrub_next_buffer): Call the multibyte - scanning function if multibyte warnings are enabled. - * symbols.c (struct symbol_flags): Add multibyte_warned bit. - (symbol_init): Call the multibyte scanning function if multibyte - symbol warnings are enabled. - (S_SET_SEGMENT): Likewise. - * NEWS: Mention the new feature. - * doc/as.texi: Document the new feature. - * testsuite/gas/all/multibyte.s: New test source file. - * testsuite/gas/all/multibyte1.d: New test driver file. - * testsuite/gas/all/multibyte1.l: New test expected output. - * testsuite/gas/all/multibyte2.d: New test driver file. - * testsuite/gas/all/multibyte2.l: New test expected output. - * testsuite/gas/all/gas.exp: Run the new tests. - -2021-11-18 Simon Marchi - - gdb: include gdbarch.h in all files extending gdbarch_tdep - Commit 345bd07cce33 ("gdb: fix gdbarch_tdep ODR violation") made a bunch - of files define a *_gdbarch_tdep class that inherits from a gdbarch_tdep - base. But some of these files don't include gdbarch.h, where - gdbarch_tdep is defined. This may cause build errors if gdbarch.h isn't - already included by chance by some other header file. Avoid this by - making them include gdbarch.h. - - Change-Id: If433d302007e274daa4f656cfc94f769cf1aa68a - -2021-11-18 Simon Marchi - - gdbsupport: make gdb_assert_not_reached accept a format string - Change gdb_assert_not_reached to accept a format string plus - corresponding arguments. This allows giving more precise messages. - - Because the format string passed by the caller is prepended with a "%s:" - to add the function name, the callers can no longer pass a translated - string (`_(...)`). Make the gdb_assert_not_reached include the _(), - just like the gdb_assert_fail macro just above. - - Change-Id: Id0cfda5a57979df6cdaacaba0d55dd91ae9efee7 - -2021-11-18 Carl Love - - gdb fix for catch-syscall.exp - Remove check_continue "execve" from Proc test_catch_syscall_execve. - - The check_continue proceedure checs that the command, execve, starts and - checks for the return from the command. The execve command starts a new - program and thus the return from the command causing the test to fail. - - The call to proc check_continue "execve" is removed and replaced with - just the call to check_call_to_syscall "execve" to verify the command - executed. The next test in proc test_catch_syscall_execve verifies that - the new program started and hit the break point in main. - - Update the check for the PowerPC architecture. Power Little Endian systems - include "le" in the name. The istarget "power64-*-linux*" check fails to - match LE sytems. The expected string is updated to capture both Big Endian - and Little Endian systems. Power 10 LE istarget prints as: - powerpc64le-unknown-linux-gnu. - - This patch fixes three failures and the error: - - ERROR: can't read "arch1": no such variable - - Patch tested on Power 10 ppc64le GNU/Linux platform. - -2021-11-18 Carl Love - - gdb: PowerPC fix gdb.base/break-interp.exp - This patch fixes eight test failures on PowerPC for the test - gdb.base/break-interp.exp. The patch adds a funtion and registers it to - setup the displaced stepping for ppc-linux platform. The patch moves the - struct ppc_inferior_data to the ppc-tdep.h include file to make it visible - to the ppc-linux-tdep.c and rs6000-tdep.c files. Additionally the function - get_ppc_per_inferior is made external in ppc-tdep.h to make it visible in - both files. - - Tested on Power 10 ppc64le-linux with no regressions. - -2021-11-18 Carl Love - - gdb fix PowerPC test gdb.arch/ppc-longdouble.exp - The test complains of duplicate tests. - - DUPLICATE: gdb.arch/ppc-longdouble.exp: continue to breakpoint: return - - The do_test calls gdb_continue_to_breakpoint "return". The duplicates - are the result of calling do_test three times with different arguments. - - This patch fixes the duplicate tests by adding $name to the - gdb_continue_to_breakpoint argument. - - Patch tested on Power 10 ppc64le GNU/Linux, no duplicate tests reported, - no new regression errors. - -2021-11-18 H.J. Lu - - elf/x86: Issue an error on discarded output .plt section - Issue an error, instead of crash, on discarded output .plt section. - - bfd/ - - PR ld/28597 - * elf32-i386.c (elf_i386_finish_dynamic_sections): Issue an error - on discarded output .plt section. - * elf64-x86-64.c (elf_x86_64_finish_dynamic_sections): Likewise. - - ld/ - - PR ld/28597 - * testsuite/ld-elf/pr28597.d: New file. - * testsuite/ld-elf/pr28597.s: Likewise. - * testsuite/ld-elf/pr28597.t: Likewise. - -2021-11-18 Tom de Vries - - [gdb/testsuite] Add missing wait in gdb.base/signals-state-child.exp - On OBS I ran into: - ... - (gdb) shell diff -s outputs/gdb.base/signals-state-child/standalone.txt \ - outputs/gdb.base/signals-state-child/gdb.txt^M - diff: outputs/gdb.base/signals-state-child/standalone.txt: \ - No such file or directory^M - (gdb) FAIL: gdb.base/signals-state-child.exp: signals states are identical - ... - - I managed to reproduce this by adding "sleep (5)" at the start of main in - signals-state-child.c. - - Fix this by waiting on the result of the spawned command. - - Tested on x86_64-linux. - -2021-11-18 Alan Modra - - Re: Don't compile some opcodes files when bfd is 32-bit only - Put bpf back in the 32-bit targets, even though bpf requires a 64-bit - bfd. bpf sim support apparently works without being 64-bit. - - * Makefile.am (TARGET64_LIBOPCODES_CFILES): Move bpf files.. - (TARGET32_LIBOPCODES_CFILES): ..to here. - * Makefile.in: Regenerate. - -2021-11-18 Alan Modra - - Pass DEBUGINFOD_CFLAGS when compiling dwarf.c - Pick up the elfutils/debuginfod.h install location -I flags from - a variable set by debuginfod.m4 (via pkg.m4 and pkg-config). - - * Makefile.am (DEBUGINFOD_CFLAGS): Define. - (dwarf.@OBJECT@): New rule. - -2021-11-18 jiawei - - RISC-V: Add testcases for z[fdq]inx - Use gpr when the zfinx enable, the testcases contain float - instructions that reuse by z[fdq]inx. - - gas/ChangeLog: - - * testsuite/gas/riscv/zdinx.d: New test. - * testsuite/gas/riscv/zdinx.s: New test. - * testsuite/gas/riscv/zfinx.d: New test. - * testsuite/gas/riscv/zfinx.s: New test. - * testsuite/gas/riscv/zqinx.d: New test. - * testsuite/gas/riscv/zqinx.s: New test. - - Reviewed-by: Palmer Dabbelt - -2021-11-18 jiawei - - RISC-V: Add instructions and operand set for z[fdq]inx - Reuse float instructions in INSN_CLASS_F/D/Q, use riscv_subset_supports to - verify if z*inx enabled and use gpr instead of fpr when z*inx is enable. - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_multi_subset_supports): Added support for - z*inx extension. - - gas/ChangeLog: - - * config/tc-riscv.c (riscv_ip): Added register choice for z*inx. - - include/ChangeLog: - - * opcode/riscv.h (enum riscv_insn_class): Reused INSN_CLASS_* for z*inx. - - opcodes/ChangeLog: - - * riscv-dis.c (riscv_disassemble_insn): Added disassemble check for - z*inx. - * riscv-opc.c: Reused INSN_CLASS_* for z*inx. - - Reviewed-by: Palmer Dabbelt - -2021-11-18 jiawei - - RISC-V: Add mininal support for z[fdq]inx - Minimal support for zfinx, zdinx, zqinx. Like f/d/q, the zqinx - imply zdinx and zdinx imply zfinx, where zfinx are not compatible - with f/d/q. - - bfd/ChangeLog: - - * elfxx-riscv.c (riscv_implicit_subsets): Added implicit rules - for z*inx extensions. - (riscv_supported_std_z_ext): Added entries for z*inx. - (riscv_parse_check_conflicts): Added conflict check for z*inx. - - Reviewed-by: Palmer Dabbelt - -2021-11-18 GDB Administrator - - Automatic date update in version.in - -2021-11-17 Przemyslaw Wirkus - - aarch64: [SME] SVE2 instructions added to support SME - This patch is adding new SVE2 instructions added to support SME extension. - The following SVE2 instructions are added by the SME architecture: - * PSEL, - * REVD, SCLAMP and UCLAMP. - - gas/ChangeLog: - - * config/tc-aarch64.c (parse_sme_pred_reg_with_index): - New parser. - (parse_operands): New parser. - * testsuite/gas/aarch64/sme-9-illegal.d: New test. - * testsuite/gas/aarch64/sme-9-illegal.l: New test. - * testsuite/gas/aarch64/sme-9-illegal.s: New test. - * testsuite/gas/aarch64/sme-9.d: New test. - * testsuite/gas/aarch64/sme-9.s: New test. - - include/ChangeLog: - - * opcode/aarch64.h (enum aarch64_opnd): New operand - AARCH64_OPND_SME_PnT_Wm_imm. - - opcodes/ChangeLog: - - * aarch64-asm.c (aarch64_ins_sme_pred_reg_with_index): - New inserter. - * aarch64-dis.c (aarch64_ext_sme_pred_reg_with_index): - New extractor. - * aarch64-opc.c (aarch64_print_operand): Printout of - OPND_SME_PnT_Wm_imm. - * aarch64-opc.h (enum aarch64_field_kind): New bitfields - FLD_SME_Rm, FLD_SME_i1, FLD_SME_tszh, FLD_SME_tszl. - * aarch64-tbl.h (OP_SVE_NN_BHSD): New qualifier. - (OP_SVE_QMQ): New qualifier. - (struct aarch64_opcode): New instructions PSEL, REVD, - SCLAMP and UCLAMP. - aarch64-asm-2.c: Regenerate. - aarch64-dis-2.c: Regenerate. - aarch64-opc-2.c: Regenerate. - -2021-11-17 Przemyslaw Wirkus - - aarch64: [SME] Add new SME system registers - This patch is adding miscellaneous SME related system registers. - - gas/ChangeLog: - - * testsuite/gas/aarch64/sme-sysreg.d: New test. - * testsuite/gas/aarch64/sme-sysreg.s: New test. - * testsuite/gas/aarch64/sme-sysreg-illegal.d: New test. - * testsuite/gas/aarch64/sme-sysreg-illegal.l: New test. - * testsuite/gas/aarch64/sme-sysreg-illegal.s: New test. - - opcodes/ChangeLog: - - * aarch64-opc.c: New system registers id_aa64smfr0_el1, - smcr_el1, smcr_el12, smcr_el2, smcr_el3, smpri_el1, - smprimap_el2, smidr_el1, tpidr2_el0 and mpamsm_el1. - -2021-11-17 Przemyslaw Wirkus - - aarch64: [SME] Add SME mode selection and state access instructions - This patch is adding new SME mode selection and state access instructions: - * Add SMSTART and SMSTOP instructions. - * Add SVCR system register. - - gas/ChangeLog: - - * config/tc-aarch64.c (parse_sme_sm_za): New parser. - (parse_operands): New parser. - * testsuite/gas/aarch64/sme-8-illegal.d: New test. - * testsuite/gas/aarch64/sme-8-illegal.l: New test. - * testsuite/gas/aarch64/sme-8-illegal.s: New test. - * testsuite/gas/aarch64/sme-8.d: New test. - * testsuite/gas/aarch64/sme-8.s: New test. - - include/ChangeLog: - - * opcode/aarch64.h (enum aarch64_opnd): New operand - AARCH64_OPND_SME_SM_ZA. - (enum aarch64_insn_class): New instruction classes - sme_start and sme_stop. - - opcodes/ChangeLog: - - * aarch64-asm.c (aarch64_ins_pstatefield): New inserter. - (aarch64_ins_sme_sm_za): New inserter. - * aarch64-dis.c (aarch64_ext_imm): New extractor. - (aarch64_ext_pstatefield): New extractor. - (aarch64_ext_sme_sm_za): New extractor. - * aarch64-opc.c (operand_general_constraint_met_p): - New pstatefield value for SME instructions. - (aarch64_print_operand): Printout for OPND_SME_SM_ZA. - (SR_SME): New register SVCR. - * aarch64-opc.h (F_REG_IN_CRM): New register endcoding. - * aarch64-opc.h (F_IMM_IN_CRM): New immediate endcoding. - (PSTATE_ENCODE_CRM): Encode CRm field. - (PSTATE_DECODE_CRM): Decode CRm field. - (PSTATE_ENCODE_CRM_IMM): Encode CRm immediate field. - (PSTATE_DECODE_CRM_IMM): Decode CRm immediate field. - (PSTATE_ENCODE_CRM_AND_IMM): Encode CRm and immediate - field. - * aarch64-tbl.h (struct aarch64_opcode): New SMSTART - and SMSTOP instructions. - aarch64-asm-2.c: Regenerate. - aarch64-dis-2.c: Regenerate. - aarch64-opc-2.c: Regenerate. - -2021-11-17 Przemyslaw Wirkus - - aarch64: [SME] Add LD1x, ST1x, LDR and STR instructions - This patch is adding new loads and stores defined by SME instructions. - - gas/ChangeLog: - - * config/tc-aarch64.c (parse_sme_address): New parser. - (parse_sme_za_hv_tiles_operand_with_braces): New parser. - (parse_sme_za_array): New parser. - (output_operand_error_record): Print error details if - present. - (parse_operands): Support new operands. - * testsuite/gas/aarch64/sme-5-illegal.d: New test. - * testsuite/gas/aarch64/sme-5-illegal.l: New test. - * testsuite/gas/aarch64/sme-5-illegal.s: New test. - * testsuite/gas/aarch64/sme-5.d: New test. - * testsuite/gas/aarch64/sme-5.s: New test. - * testsuite/gas/aarch64/sme-6-illegal.d: New test. - * testsuite/gas/aarch64/sme-6-illegal.l: New test. - * testsuite/gas/aarch64/sme-6-illegal.s: New test. - * testsuite/gas/aarch64/sme-6.d: New test. - * testsuite/gas/aarch64/sme-6.s: New test. - * testsuite/gas/aarch64/sme-7-illegal.d: New test. - * testsuite/gas/aarch64/sme-7-illegal.l: New test. - * testsuite/gas/aarch64/sme-7-illegal.s: New test. - * testsuite/gas/aarch64/sme-7.d: New test. - * testsuite/gas/aarch64/sme-7.s: New test. - - include/ChangeLog: - - * opcode/aarch64.h (enum aarch64_opnd): New operands. - (enum aarch64_insn_class): Added sme_ldr and sme_str. - (AARCH64_OPDE_UNTIED_IMMS): New operand error kind. - - opcodes/ChangeLog: - - * aarch64-asm.c (aarch64_ins_sme_za_hv_tiles): New inserter. - (aarch64_ins_sme_za_list): New inserter. - (aarch64_ins_sme_za_array): New inserter. - (aarch64_ins_sme_addr_ri_u4xvl): New inserter. - * aarch64-asm.h (AARCH64_DECL_OPD_INSERTER): Added - ins_sme_za_list, ins_sme_za_array and ins_sme_addr_ri_u4xvl. - * aarch64-dis.c (aarch64_ext_sme_za_hv_tiles): New extractor. - (aarch64_ext_sme_za_list): New extractor. - (aarch64_ext_sme_za_array): New extractor. - (aarch64_ext_sme_addr_ri_u4xvl): New extractor. - * aarch64-dis.h (AARCH64_DECL_OPD_EXTRACTOR): Added - ext_sme_za_list, ext_sme_za_array and ext_sme_addr_ri_u4xvl. - * aarch64-opc.c (operand_general_constraint_met_p): - (aarch64_match_operands_constraint): Handle sme_ldr, sme_str - and sme_misc. - (aarch64_print_operand): New operands supported. - * aarch64-tbl.h (OP_SVE_QUU): New qualifier. - (OP_SVE_QZU): New qualifier. - aarch64-asm-2.c: Regenerate. - aarch64-dis-2.c: Regenerate. - aarch64-opc-2.c: Regenerate. - -2021-11-17 Przemyslaw Wirkus - - aarch64: [SME] Add ZERO instruction - This patch is adding ZERO (a list of 64-bit element ZA tiles) - instruction. - - gas/ChangeLog: - - * config/tc-aarch64.c (parse_sme_list_of_64bit_tiles): - New parser. - (parse_operands): Handle OPND_SME_list_of_64bit_tiles. - * testsuite/gas/aarch64/sme-4-illegal.d: New test. - * testsuite/gas/aarch64/sme-4-illegal.l: New test. - * testsuite/gas/aarch64/sme-4-illegal.s: New test. - * testsuite/gas/aarch64/sme-4.d: New test. - * testsuite/gas/aarch64/sme-4.s: New test. - - include/ChangeLog: - - * opcode/aarch64.h (enum aarch64_opnd): New operand - AARCH64_OPND_SME_list_of_64bit_tiles. - - opcodes/ChangeLog: - - * aarch64-opc.c (print_sme_za_list): New printing function. - (aarch64_print_operand): Handle OPND_SME_list_of_64bit_tiles. - * aarch64-opc.h (enum aarch64_field_kind): New bitfield - FLD_SME_zero_mask. - * aarch64-tbl.h (struct aarch64_opcode): New ZERO instruction. - aarch64-asm-2.c: Regenerate. - aarch64-dis-2.c: Regenerate. - aarch64-opc-2.c: Regenerate. - -2021-11-17 Przemyslaw Wirkus - - aarch64: [SME] Add MOV and MOVA instructions - This patch is adding new MOV (alias) and MOVA SME instruction. - - gas/ChangeLog: - - * config/tc-aarch64.c (enum sme_hv_slice): new enum. - (struct reloc_entry): Added ZAH and ZAV registers. - (parse_sme_immediate): Immediate parser. - (parse_sme_za_hv_tiles_operand): ZA tile parser. - (parse_sme_za_hv_tiles_operand_index): Index parser. - (parse_operands): Added ZA tile parser calls. - (REGNUMS): New macro. Regs with suffix. - (REGSET16S): New macro. 16 regs with suffix. - * testsuite/gas/aarch64/sme-2-illegal.d: New test. - * testsuite/gas/aarch64/sme-2-illegal.l: New test. - * testsuite/gas/aarch64/sme-2-illegal.s: New test. - * testsuite/gas/aarch64/sme-2.d: New test. - * testsuite/gas/aarch64/sme-2.s: New test. - * testsuite/gas/aarch64/sme-2a.d: New test. - * testsuite/gas/aarch64/sme-2a.s: New test. - * testsuite/gas/aarch64/sme-3-illegal.d: New test. - * testsuite/gas/aarch64/sme-3-illegal.l: New test. - * testsuite/gas/aarch64/sme-3-illegal.s: New test. - * testsuite/gas/aarch64/sme-3.d: New test. - * testsuite/gas/aarch64/sme-3.s: New test. - * testsuite/gas/aarch64/sme-3a.d: New test. - * testsuite/gas/aarch64/sme-3a.s: New test. - - include/ChangeLog: - - * opcode/aarch64.h (enum aarch64_opnd): New enums - AARCH64_OPND_SME_ZA_HV_idx_src and - AARCH64_OPND_SME_ZA_HV_idx_dest. - (struct aarch64_opnd_info): New ZA tile vector struct. - - opcodes/ChangeLog: - - * aarch64-asm.c (aarch64_ins_sme_za_hv_tiles): - New inserter. - * aarch64-asm.h (AARCH64_DECL_OPD_INSERTER): - New inserter ins_sme_za_hv_tiles. - * aarch64-dis.c (aarch64_ext_sme_za_hv_tiles): - New extractor. - * aarch64-dis.h (AARCH64_DECL_OPD_EXTRACTOR): - New extractor ext_sme_za_hv_tiles. - * aarch64-opc.c (aarch64_print_operand): - Handle SME_ZA_HV_idx_src and SME_ZA_HV_idx_dest. - * aarch64-opc.h (enum aarch64_field_kind): New enums - FLD_SME_size_10, FLD_SME_Q, FLD_SME_V and FLD_SME_Rv. - (struct aarch64_operand): Increase fields size to 5. - * aarch64-tbl.h (OP_SME_BHSDQ_PM_BHSDQ): New qualifiers - aarch64-asm-2.c: Regenerate. - aarch64-dis-2.c: Regenerate. - aarch64-opc-2.c: Regenerate. - -2021-11-17 Przemyslaw Wirkus - - aarch64: [SME] Add SME instructions - Patch is adding new SME matrix instructions. Please note additional - instructions will be added in following patches. - - gas/ChangeLog: - - * config/tc-aarch64.c (parse_sme_zada_operand): - New parser. - * config/tc-aarch64.c (parse_reg_with_qual): - New reg parser. - * config/tc-aarch64.c (R_ZA): New egister type. - (parse_operands): New parser. - * testsuite/gas/aarch64/sme-illegal.d: New test. - * testsuite/gas/aarch64/sme-illegal.l: New test. - * testsuite/gas/aarch64/sme-illegal.s: New test. - * testsuite/gas/aarch64/sme.d: New test. - * testsuite/gas/aarch64/sme.s: New test. - * testsuite/gas/aarch64/sme-f64.d: New test. - * testsuite/gas/aarch64/sme-f64.s: New test. - * testsuite/gas/aarch64/sme-i64.d: New test. - * testsuite/gas/aarch64/sme-i64.s: New test. - - include/ChangeLog: - - * opcode/aarch64.h (enum aarch64_opnd): New operands - AARCH64_OPND_SME_ZAda_2b, AARCH64_OPND_SME_ZAda_3b and - AARCH64_OPND_SME_Pm. - (enum aarch64_insn_class): New instruction class sme_misc. - - opcodes/ChangeLog: - - * aarch64-opc.c (aarch64_print_operand): - Print OPND_SME_ZAda_2b and OPND_SME_ZAda_3b operands. - (verify_constraints): Handle OPND_SME_Pm. - * aarch64-opc.h (enum aarch64_field_kind): - New bit fields FLD_SME_ZAda_2b, FLD_SME_ZAda_3b and FLD_SME_Pm. - * aarch64-tbl.h (OP_SME_ZADA_PN_PM_ZN_S): New qualifier set. - (OP_SME_ZADA_PN_PM_ZN_D): New qualifier. - (OP_SME_ZADA_PN_PM_ZN_ZM): New qualifier. - (OP_SME_ZADA_S_PM_PM_S_S): New qualifier. - (OP_SME_ZADA_D_PM_PM_D_D): New qualifier. - (OP_SME_ZADA_S_PM_PM_H_H): New qualifier. - (OP_SME_ZADA_S_PM_PM_B_B): New qualifier. - (OP_SME_ZADA_D_PM_PM_H_H): New qualifier. - (SME_INSN): New instruction macro. - (SME_F64_INSN): New instruction macro. - (SME_I64_INSN): New instruction macro. - (SME_INSNC): New instruction macro. - (struct aarch64_opcode): New SME instructions. - aarch64-asm-2.c: Regenerate. - aarch64-dis-2.c: Regenerate. - aarch64-opc-2.c: Regenerate. - -2021-11-17 Przemyslaw Wirkus - - aarch64: [SME] Add +sme option to -march - This series of patches (tagged [SME]) add support for the Scalable - Matrix Extension. Patch introduces new command line options: +sme, +sme-f64 and - +sme-i64 to -march command line options. - - gas/ChangeLog: - - * NEWS: Updated docs. - * config/tc-aarch64.c: New SME command line options. - * doc/c-aarch64.texi: Update docs. - - include/ChangeLog: - - * opcode/aarch64.h (AARCH64_FEATURE_SME): New flag. - (AARCH64_FEATURE_SME_F64): New flag. - (AARCH64_FEATURE_SME_I64): New flag. - - opcodes/ChangeLog: - - * aarch64-tbl.h (SME): New feature object. - -2021-11-17 Jeremy Drake - - Set the default DLL chracteristics to 0 for Cygwin based targets. - * emultempl/pep.em (DEFAULT_DLL_CHARACTERISTICS): Set to 0 for - Cygwin targets. - * emultempl/pep.em (DEFAULT_DLL_CHARACTERISTICS): Likewise. - -2021-11-17 Nick Clifton - - Fix the linker script parser so that it will recognise the PT_GNU_RELRO segment type, and the linker itself so that it will gracefully handle being unable to assign any sections to such a segment. - PR 28452 - bfd * elf.c (assign_file_positions_for_non_load_sections): Replace - assertion with a warning message. - - ld * ldgram.y: Add support for PT_GNU_RELRO and PT_GNU_PROPERTY. - * ldgram.c: Regenerate. - -2021-11-17 Andreas Arnez - - [gdb/build, s390x] Fix build after gdbarch_tdep changes - Commit 345bd07cce33 ("gdb: fix gdbarch_tdep ODR violation") changes a - declaration in s390-tdep.h from - - struct gdbarch_tdep { ... }; - - to - - struct s390_gdbarch_tdep : gdbarch_tdep { ... }; - - and now requires that gdbarch_tdep has been declared before. Which is - usually the case, except when compiling s390-linux-nat.c, where - s390-tdep.h is included before gdbarch.h. Thus the s390x build errors out - with the compiler complaining about a missing class name after the colon. - - Fix this in s390-linux-nat.c, by including gdbarch.h before s390-tdep.h. - -2021-11-17 Luis Machado - - Expose the BTI BTYPE more explicitly in the registers - Augment the register description XML to expose the BTI BTYPE field contained - in the CPSR register. It will be displayed like so: - - cpsr 0x60001000 [ EL=0 BTYPE=0 SSBS C Z ] - -2021-11-17 H.J. Lu - - elfedit: Add --output-abiversion option to update ABIVERSION - * NEWS: Mention --output-abiversion. - * elfedit.c (input_elf_abiversion): New. - (output_elf_abiversion): Likewise. - (update_elf_header): Update EI_ABIVERSION. - (command_line_switch): Add OPTION_INPUT_ABIVERSION and - OPTION_OUTPUT_ABIVERSION. - (options): Add --input-abiversion and --output-abiversion. - (usage): Likewise. - (main): Handle --input-abiversion and --output-abiversion. - * doc/binutils.texi: Document --input-abiversion and - --output-abiversion. - * testsuite/binutils-all/elfedit.exp: Run elfedit-6. - * testsuite/binutils-all/elfedit-6.d: New file. - -2021-11-17 Nelson Chu - - RISC-V: Support rvv extension with released version 1.0. - 2021-11-17 Jim Wilson - Kito Cheng - Nelson Chu - - This patch is porting from the following riscv github, - https://github.com/riscv/riscv-binutils-gdb/tree/rvv-1.0.x - - And here is the vector spec, - https://github.com/riscv/riscv-v-spec - - bfd/ - * elfxx-riscv.c (riscv_implicit_subsets): Added imply rules - of v, zve and zvl extensions. - (riscv_supported_std_ext): Updated verison of v to 1.0. - (riscv_supported_std_z_ext): Added zve and zvl extensions. - (riscv_parse_check_conflicts): The zvl extensions need to - enable either v or zve extension. - (riscv_multi_subset_supports): Check the subset list to know - if the INSN_CLASS_V and INSN_CLASS_ZVEF instructions are supported. - gas/ - * config/tc-riscv.c (enum riscv_csr_class): Added CSR_CLASS_V. - (enum reg_class): Added RCLASS_VECR and RCLASS_VECM. - (validate_riscv_insn): Check whether the rvv operands are valid. - (md_begin): Initialize register hash for rvv registers. - (macro_build): Added rvv operands when expanding rvv pseudoes. - (vector_macro): Expand rvv macros into one or more instructions. - (macro): Likewise. - (my_getVsetvliExpression): Similar to my_getVsetvliExpression, - but used for parsing vsetvli operands. - (riscv_ip): Parse and encode rvv operands. Besides, The rvv loads - and stores with EEW 64 cannot be used when zve32x is enabled. - * testsuite/gas/riscv/priv-reg-fail-version-1p10.d: Updated -march - to rv32ifv_zkr. - * testsuite/gas/riscv/priv-reg-fail-version-1p11.d: Likewise. - * testsuite/gas/riscv/priv-reg-fail-version-1p9p1.d: Likewise. - * testsuite/gas/riscv/priv-reg.s: Added rvv csr testcases. - * testsuite/gas/riscv/priv-reg-version-1p10.d: Likewise. - * testsuite/gas/riscv/priv-reg-version-1p11.d: Likewise. - * testsuite/gas/riscv/priv-reg-version-1p9p1.d: Likewise. - * testsuite/gas/riscv/march-imply-v.d: New testcase. - * testsuite/gas/riscv/vector-insns-fail-zve32xf.d: Likewise. - * testsuite/gas/riscv/vector-insns-fail-zve32xf.l: Likewise. - * testsuite/gas/riscv/vector-insns-fail-zvl.d: Likewise. - * testsuite/gas/riscv/vector-insns-fail-zvl.l: Likewise. - * testsuite/gas/riscv/vector-insns-vmsgtvx.d: Likewise. - * testsuite/gas/riscv/vector-insns-vmsgtvx.s: Likewise. - * testsuite/gas/riscv/vector-insns-zero-imm.d: Likewise. - * testsuite/gas/riscv/vector-insns-zero-imm.s: Likewise. - * testsuite/gas/riscv/vector-insns.d: Likewise. - * testsuite/gas/riscv/vector-insns.s: Likewise. - include/ - * opcode/riscv-opc.h: Defined mask/match encodings and csrs for rvv. - * opcode/riscv.h: Defined rvv immediate encodings and fields. - (enum riscv_insn_class): Added INSN_CLASS_V and INSN_CLASS_ZVEF. - (INSN_V_EEW64): Defined. - (M_VMSGE, M_VMSGEU): Added for the rvv pseudoes. - opcodes/ - * riscv-dis.c (print_insn_args): Dump the rvv operands. - * riscv-opc.c (riscv_vecr_names_numeric): Defined rvv registers. - (riscv_vecm_names_numeric): Likewise. - (riscv_vsew): Likewise. - (riscv_vlmul): Likewise. - (riscv_vta): Likewise. - (riscv_vma): Likewise. - (match_vs1_eq_vs2): Added for rvv Vu operand. - (match_vd_eq_vs1_eq_vs2): Added for rvv Vv operand. - (riscv_opcodes): Added rvv v1.0 instructions. - -2021-11-17 Sergei Trofimovich - - gdb/nat/linux-osdata.c: fix build on gcc-12 (string overfow) - On gcc-12 build fails as: - - ../../gdbserver/../gdb/nat/linux-osdata.c: In function 'void linux_xfer_osdata_processes(buffer*)': - ../../gdbserver/../gdb/nat/linux-osdata.c:330:39: error: - '__builtin___sprintf_chk' may write a terminating nul past the end of the destination [-Werror=format-overflow=] - 330 | sprintf (core_str, "%d", i); - | ^ - - It's an off-by-one case in an infeasible scenario for negative - huge core count. The change switches to std::string for memory - handling. - - Tested by running 'info os processes' and checking CPU cores column. - -2021-11-17 Aaron Merey - - gdb: Add aliases for read_core_file_mappings callbacks - Add aliases read_core_file_mappings_loop_ftype and - read_core_file_mappings_pre_loop_ftype. Intended for use with - read_core_file_mappings. - - Also add build_id parameter to read_core_file_mappings_loop_ftype. - -2021-11-17 Mike Frysinger - - sim: testsuite: add support for $pwd replacements - Extend the common test framework to support $pwd replacements in - settings. This allows replacing the custom cris @exedir@ with it. - - sim: cris: replace @srcdir@ test extension with $srcdir/$subdir - The common framework supports $srcdir & $subdir replacements already, - so replace the custom @srcdir@ logic with those. Since the replace - happens in slurp_options that cris already uses, we don't have any - logic to port over there. We have to duplicate that into the cris - slurp_rv helper though. - -2021-11-17 Mike Frysinger - - sim: cris: drop custom "dynamic" test field - This tag is used to force tests to be built dynamically (i.e. without - -static linking). This is because cris-sim.exp in dejagnu turns on - static linking in ldflags. - - The default configs and runtest flags shouldn't load these boards. - If these settings are still needed, we should figure out a different - way of suppressing the stock settings wholesale. We want these to - all pass out of the box with little to no configuration so that they - can run in a multitarget build. - - With dropping "dynamic", it'll be easier to merge the custom cris - test logic with the common sim test logic. - -2021-11-17 Mike Frysinger - - sim: testsuite: add more silent build rules - site.exp is still verbose, but that comes from automake, so have - to get it fixed upstream. - -2021-11-17 GDB Administrator - - Automatic date update in version.in - -2021-11-16 Sergei Trofimovich - - sim: cr16: fix build on gcc-12 (NULL comparison) - On gcc-12 build fails as: - - sim/cr16/interp.c: In function 'lookup_hash': - sim/cr16/interp.c:89:25: error: - the comparison will always evaluate as 'true' - for the address of 'mnimonic' will never be NULL [-Werror=address] - 89 | if ((h->ops->mnimonic != NULL) && - | ^~ - - 'mnimonic' is a sharr array within ops. It can never be NULL. - - While at it renamed 'mnimonic' to 'mnemonic'. - -2021-11-16 Simon Marchi - - gdb: fix length of array view returned by some value_contents functions - In commit 50888e42dcd3 ("gdb: change functions returning value contents - to use gdb::array_view"), I believe I made a mistake with the length of - the array views returned by some functions. All functions return a view - of `TYPE_LENGTH (value_type (type))` length. This is not correct when - the value's enclosing type is larger than the value's type. In that - case, the value's contents buffer is of the size of the enclosing type, - and the value's actual contents is a slice of that (as returned by - value_contents). So, functions value_contents_all_raw, - value_contents_for_printing and value_contents_for_printing_const are - not correct. Since they are meant to return the value's contents buffer - as a whole, they should have the size of the enclosing type. - - There is nothing that uses the returned array view size at the moment, - so this didn't cause a problem. But it became apparent when trying to - adjust some callers. - - Change-Id: Ib4e8837e1069111d2b2784d3253d5f3002419e68 - -2021-11-16 Fangrui Song - - readelf: Support SHT_RELR/DT_RELR for -r - The -r output for SHT_RELR looks like: - - Relocation section '.relr.dyn' at offset 0x530 contains 4 entries: - 7 offsets - 00000000000028c0 - 00000000000028c8 - 0000000000003ad0 - 0000000000003ad8 - 0000000000003ae0 - 0000000000003ae8 - 0000000000003af0 - - For --use-dynamic, the header looks like - - 'RELR' relocation section at offset 0x530 contains 32 bytes: - - include/ - * elf/common.h (DT_ENCODING): Bump to 38. - * elf/external.h (Elf32_External_Relr): New. - (Elf64_External_Relr): New. - binutils/ - * readelf.c (enum relocation_type): New. - (slurp_relr_relocs): New. - (dump_relocations): Change is_rela to rel_type. - Dump RELR. - (dynamic_relocations): Add DT_RELR. - (process_relocs): Check SHT_RELR and DT_RELR. - (process_dynamic_section): Store into dynamic_info for - DT_RELR/DT_RELRENT/DT_RELRSZ. - -2021-11-16 Simon Marchi - - gdbsupport: remove FUNCTION_NAME - __func__ is standard C++11: - - https://en.cppreference.com/w/cpp/language/function - - Also, in C++11, __func__ expands to the demangled function name, so the - mention in the comment above FUNCTION_NAME doesn't apply anymore. - Finally, in places where FUNCTION_NAME is used, I think it's enough to - print the function name, no need to print the whole signature. - Therefore, I propose to just remove FUNCTION_NAME and update users to - use the standard __func__. - - Change-Id: I778f28155422b044402442dc18d42d0cded1017d - -2021-11-16 Andrew Burgess - - gdb/gdbsupport: make xstrprintf and xstrvprintf return a unique_ptr - The motivation is to reduce the number of places where unmanaged - pointers are returned from allocation type routines. All of the - callers are updated. - - There should be no user visible changes after this commit. - -2021-11-16 Andrew Burgess - - gdbsupport: move xfree into its own file - In the next commit I'd like to reference gdb_unique_ptr within the - common-utils.h file. However, this requires that I include - gdb_unique_ptr.h, which requires that xfree be defined. - - Interestingly, gdb_unique_ptr.h doesn't actually include anything that - defines xfree, but I was finding that when I added a gdb_unique_ptr.h - include to common-utils.h I was getting a dependency cycle; before my - change xfree was defined when gdb_unique_ptr.h was processed, while - after my change it was not, and this made g++ unhappy. - - To break this cycle, I propose to move xfree into its own header file, - gdb-xfree.h, which I'll then include into gdb_unique_ptr.h and - common-utils.cc. - -2021-11-16 Andrew Burgess - - gdb: throw OPTIMIZED_OUT_ERROR rather than GENERIC_ERROR - While reviewing this patch: - - https://sourceware.org/pipermail/gdb-patches/2021-November/183227.html - - I spotted that the patch could be improved if we threw - OPTIMIZED_OUT_ERROR rather than GENERIC_ERROR in a few places. - - This commit updates error_value_optimized_out and - require_not_optimized_out to throw OPTIMIZED_OUT_ERROR. - - I ran the testsuite and saw no regressions. This doesn't really - surprise me, we don't usually write code like: - - catch (const gdb_exception_error &ex) - { - (if ex.error == GENERIC_ERROR) - ... - else - ... - } - - There are a three places where we write something like: - - catch (const gdb_exception_error &ex) - { - (if ex.error == OPTIMIZED_OUT_ERROR) - ... - } - - In frame.c:unwind_pc, stack.c:info_frame_command_core, and - value.c:value_optimized_out, but if we are hitting these cases then - it's not significantly changing GDB's behaviour. - -2021-11-16 Tom Tromey - - Remove config.cache in gdbserver's "distclean" - PR gdb/28586 points out that "make distclean" fails to delete - config.cache from gdbserver/. This patch fixes the bug, and removes a - duplicate "Makefile" deletion that was also pointed out in the PR. - -2021-11-16 Tom de Vries - - [gdb/testsuite] Remove inferior output in gdb.base/foll-vfork.exp - Test-case gdb.base/foll-vfork.exp has inferior output that is not needed, but - which makes the regexp matching more difficult (see commit 1f28b70def1 - "[gdb/testsuite] Fix regexp in gdb.base/foll-vfork.exp"). - - Remove the inferior output, and revert commit 1f28b70def1 to make the matching - more restrictive. - - Tested on x86_64-linux. - -2021-11-16 H.J. Lu - - x86: Don't allow KMOV in TLS code sequences - Don't allow KMOV in TLS code sequences which require integer MOV - instructions. - - PR target/28595 - * config/tc-i386.c (match_template): Don't allow KMOV in TLS - code sequences. - * testsuite/gas/i386/i386.exp: Run inval-tls and x86-64-inval-tls - tests. - * testsuite/gas/i386/inval-tls.l: New file. - * testsuite/gas/i386/inval-tls.s: Likewise. - * testsuite/gas/i386/x86-64-inval-tls.l: Likewise. - * testsuite/gas/i386/x86-64-inval-tls.s: Likewise. - -2021-11-16 Mike Frysinger - - sim: run: support concise env var settings - Support the same syntax as other common utilities where env vars can - be specified before the program to be run without an explicit option. - - This behavior can be suppressed by using the -- marker. - -2021-11-16 Mike Frysinger - - sim: nrun: add --env-{set,unset,clear} command line options - Provide explicit control over the program's environment with the - basic set/unset/clear options. These are a bit clunky to use, - but they're functional. - - The env set operation is split out into a separate function as it'll - be used in the next commit. - - With these in place, we can adjust the custom cris testsuite to use - the now standard options and not its one-off hack. - -2021-11-16 Mike Frysinger - - sim: syscall: hoist argc/argn/argnlen to common code - Now that the callback framework supports argv & envp, we can move - the Blackfin implementation of these syscalls to the common code. - - sim: syscall: fix argvlen & argv implementation - Now that we have access to the argv & envp strings, finish implementing - these syscalls. Delete unused variables, fix tbuf by incrementing the - pointer instead of setting to the length, and make sure we don't write - more data than the bufsize says is available. - - sim: callback: expose argv & environ - Pass the existing strings data to the callbacks so that common - libgloss syscalls can be implemented (which we'll do shortly). - -2021-11-16 Mike Frysinger - - sim: keep track of program environment strings - We've been passing the environment strings to sim_create_inferior, - but most ports don't do anything with them. A few will use ad-hoc - logic to stuff the stack for user-mode programs, but that's it. - - Let's formalize this across the board by storing the strings in the - normal sim state. This will allow (in future commits) supporting - more functionality in the run interface, and to unify some of the - libgloss syscalls. - -2021-11-16 Mike Frysinger - - sim: iq2000: fix some missing prototypes warnings - Turns out some of these were hiding real bugs like not passing the - pc variable down. - -2021-11-16 jiawei - - RISC-V: Scalar crypto instruction and entropy source CSR testcases. - Add testcases for Scalar Crypto extension, with total testcase contain all - instructions in k-ext/k-ext-64 and sub-extension testcase for zbk* zk*. Also - add testcase for new CSR name 'seed' which is the Entropy Source in zkr. - - In fact these whole testcases can be combined into one file, after we have - supported the .option arch +-= directives. - - gas/ - * testsuite/gas/riscv/k-ext-64.d: New testcase for crypto instructions. - * testsuite/gas/riscv/k-ext-64.s: Likewise. - * testsuite/gas/riscv/k-ext.d: Likewise. - * testsuite/gas/riscv/k-ext.s: Likewise. - * testsuite/gas/riscv/zbkb-32.d: Likewise. - * testsuite/gas/riscv/zbkb-32.s: Likewise. - * testsuite/gas/riscv/zbkb-64.d: Likewise. - * testsuite/gas/riscv/zbkb-64.s: Likewise. - * testsuite/gas/riscv/zbkc-32.d: Likewise. - * testsuite/gas/riscv/zbkc-64.d: Likewise. - * testsuite/gas/riscv/zbkc.s: Likewise. - * testsuite/gas/riscv/zbkx-32.d: Likewise. - * testsuite/gas/riscv/zbkx-64.d: Likewise. - * testsuite/gas/riscv/zbkx.s: Likewise. - * testsuite/gas/riscv/zknd-32.d: Likewise. - * testsuite/gas/riscv/zknd-32.s: Likewise. - * testsuite/gas/riscv/zknd-64.d: Likewise. - * testsuite/gas/riscv/zknd-64.s: Likewise. - * testsuite/gas/riscv/zkne-32.d: Likewise. - * testsuite/gas/riscv/zkne-32.s: Likewise. - * testsuite/gas/riscv/zkne-64.d: Likewise. - * testsuite/gas/riscv/zkne-64.s: Likewise. - * testsuite/gas/riscv/zknh-32.d: Likewise. - * testsuite/gas/riscv/zknh-32.s: Likewise. - * testsuite/gas/riscv/zknh-64.d: Likewise. - * testsuite/gas/riscv/zknh-64.s: Likewise. - * testsuite/gas/riscv/zksed-32.d: Likewise. - * testsuite/gas/riscv/zksed-64.d: Likewise. - * testsuite/gas/riscv/zksed.s: Likewise. - * testsuite/gas/riscv/zksh-32.d: Likewise. - * testsuite/gas/riscv/zksh-64.d: Likewise. - * testsuite/gas/riscv/zksh.s: Likewise. - * testsuite/gas/riscv/priv-reg-fail-zkr.d: New testcase for zkr - csr check. - * testsuite/gas/riscv/priv-reg-fail-zkr.l: Likewise. - * testsuite/gas/riscv/priv-reg-fail-version-1p10.d: Updated march to - rv32if_zkr. - * testsuite/gas/riscv/priv-reg-fail-version-1p11.d: Likewise. - * testsuite/gas/riscv/priv-reg-fail-version-1p9p1.d: Likewise. - * testsuite/gas/riscv/priv-reg-version-1p10.d: Added Crypto seed csr. - * testsuite/gas/riscv/priv-reg-version-1p11.d: Likewise. - * testsuite/gas/riscv/priv-reg-version-1p9p1.d: Likewise. - * testsuite/gas/riscv/priv-reg.s: Likewise. - -2021-11-16 jiawei - - RISC-V: Scalar crypto instructions and operand set. - Add instructions in k-ext, some instruction in zbkb, zbkc is reuse from - zbb,zbc, we just change the class attribute to make them both support. - The 'aes64ks1i' and 'aes64ks2' instructions are present in both the Zknd - and Zkne extensions on rv64. Add new operand letter 'y' to present 'bs' - symbol and 'Y' to present 'rnum' symbolc for zkn instructions. Also add - a new Entropy Source CSR define 'seed' located at address 0x015. - - bfd/ - * elfxx-riscv.c (riscv_multi_subset_supports): Added support for - crypto extension. - gas/ - *config/tc-riscv.c (enum riscv_csr_class): Added CSR_CLASS_ZKR. - (riscv_csr_address): Checked for CSR_CLASS_ZKR. - (validate_riscv_insn): Added y and Y for bs and rnum operands. - (riscv_ip): Handle y and Y operands. - include/ - * opcode/riscv-opc.h: Added encodings of crypto instructions. - Also defined new csr seed, which address is 0x15. - * opcode/riscv.h: Defined OP_* and INSN_CLASS_* for crypto. - opcodes/ - * riscv-dis.c (print_insn_args): Recognized new y and Y operands. - * riscv-opc.c (riscv_opcodes): Added crypto instructions. - -2021-11-16 jiawei - - RISC-V: Minimal support of scalar crypto extension. - Minimal support of scalar crypto extension, add "k" in the - riscv_supported_std_ext, to make the order check right with - "zk" behind "zb". - - bfd/ - * elfxx-riscv.c (riscv_implicit_subsets): Added implicit - rules for zk* extensions. - (riscv_supported_std_ext): Added entry for k. - (riscv_supported_std_z_ext): Added entries for zk*. - -2021-11-16 Simon Marchi - - gdb: rework "set debuginfod" commands - As discussed here [1], do some re-work in the "set debuginfod commands". - - First, use "set debuginfod enabled on/off/ask" instead of "set - debuginfod on/off/ask". This is more MI-friendly, and it gives an - output that makes more sense in "info set", for example. - - Then, make the show commands not call "error" when debuginfod support is - not compiled in. This makes the commands "show" and "show debuginfod" - stop early, breaking gdb.base/default.exp: - - Running /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.base/default.exp ... - FAIL: gdb.base/default.exp: info set - FAIL: gdb.base/default.exp: show - - - Make the "debuginfod enabled" setting default to "off" when debuginfod - support is not compiled in, and "ask" otherwise. - - Make the setter of "debuginfod enabled" error out when debuginfod - support is not compiled in, so that "debuginfod enabled" will always - remain "off" in that case. - - Make the setter of "debuginfod verbose" work in any case. I don't - see the harm in letting the user change that setting, since the user will - hit an error if they try to enable the use of debuginfod. - - I would do the same for the "debuginfod urls" setter, but because - this one needs to see the DEBUGINFOD_URLS_ENV_VAR macro, provided by - libdebuginfod, I made that one error out as well if debuginfod - support is not compiled it (otherwise, I would have left it like - "debuginfod verbose". Alternatively, we could hard-code - "DEBUGINFOD_URLS" in the code (in fact, it was prior to this patch, - but I think it was an oversight, as other spots use - DEBUGINFOD_URLS_ENV_VAR), or use a dummy string to store the setting, - but I don't really see the value in that. - - Rename debuginfod_enable to debuginfod_enabled, just so it matches the - setting name. - - [1] https://sourceware.org/pipermail/gdb-patches/2021-October/182937.html - - Change-Id: I45fdb2993f668226a5639228951362b7800f09d5 - Co-Authored-By: Aaron Merey - -2021-11-16 Simon Marchi - - gdb: adjust gdbarch_tdep calls in nat files - Commit 345bd07cce33 ("gdb: fix gdbarch_tdep ODR violation") forgot to - update the gdbarch_tdep calls in the native files other than x86-64 - Linux. This patch updates them all (to the best of my knowledge). - These are the files I was able to build-test: - - aarch64-linux-nat.c - amd64-bsd-nat.c - arm-linux-nat.c - ppc-linux-nat.c - windows-nat.c - xtensa-linux-nat.c - - And these are the ones I could not build-test: - - aix-thread.c - arm-netbsd-nat.c - ppc-fbsd-nat.c - ppc-netbsd-nat.c - ia64-tdep.c (the part that needs libunwind) - ppc-obsd-nat.c - rs6000-nat.c - - If there are still some build problems related to gdbarch_tdep in them, - they should be pretty obvious to fix. - - Change-Id: Iaa3d791a850e4432973757598e634e3da6061428 - -2021-11-16 Simon Marchi - - gdb: remove unused variables in xtensa-linux-nat.c - While build-testing this file, the compiler complained about these two - unused variables, remove them. - - Change-Id: I3c54f779f12c16ef6184af58aca75eaad042ce4e - -2021-11-16 Simon Marchi - - gdb: add arc-newlib-tdep.c to ALL_TARGET_OBS - This file is currently not compiled in an --enable-targets=all build, - but it should be. Add it to ALL_TARGET_OBS. - - Update the gdbarch_tdep call that commit 345bd07cce33 ("gdb: fix - gdbarch_tdep ODR violation") forgot to update. - - Change-Id: I86248a01493eea5e70186e9c46a298ad3994b034 - -2021-11-16 Jim Wilson - - Update my email address. - I've left SiFive and have a new gmail account because it is convenient - to use with git send-email. I'm planning to use this for my RISC-V - work. My tuliptree address still works, it just isn't as convenient. - - binutils: - * MAINTAINERS (RISC-V): Update my address. - -2021-11-16 GDB Administrator - - Automatic date update in version.in - -2021-11-15 Tom de Vries - - [gdb] Don't use gdb_stdlog for inferior-events - The test-case gdb.base/foll-vfork.exp contains: - ... - if [gdb_debug_enabled] { - untested "debug is enabled" - return 0 - } - ... - - To understand what it does, I disabled this bit and ran with GDB_DEBUG=infrun, - like so: - ... - $ cd $build/gdb/testsuite - $ make check GDB_DEBUG=infrun RUNTESTFLAGS=gdb.base/foll-vfork.exp - ... - and ran into: - ... - (gdb) PASS: gdb.base/foll-vfork.exp: exec: \ - vfork parent follow, through step: set follow-fork parent - next^M - 33 if (pid == 0) {^M - (gdb) FAIL: gdb.base/foll-vfork.exp: exec: \ - vfork parent follow, through step: step - ... - - The problem is that the test-case expects: - ... - (gdb) PASS: gdb.base/foll-vfork.exp: exec: \ - vfork parent follow, through step: set follow-fork parent - next^M - [Detaching after vfork from child process 28169]^M - 33 if (pid == 0) {^M - (gdb) PASS: gdb.base/foll-vfork.exp: exec: \ - vfork parent follow, through step: step - ... - but the "Detaching" line has been redirected to - $outputs/gdb.base/foll-vfork/gdb.debug. - - I looked at the documentation of "set logging debugredirect [on|off]": - ... - By default, GDB debug output will go to both the terminal and the logfile. - Set debugredirect if you want debug output to go only to the log file. - ... - and my interpretation of it was that "debug output" did not match the - "messages" description of inferior-events: - ... - The set print inferior-events command allows you to enable or disable printing - of messages when GDB notices that new inferiors have started or that inferiors - have exited or have been detached. - ... - - Fix the discrepancy by not using gdb_stdlog for inferior-events. - - Update the gdb.base/foll-vfork.exp test-case to not require - gdb_debug_enabled == 0. - - Tested on x86_64-linux. - - Tested test-case gdb.base/foll-vfork.exp with and without GDB_DEBUG=infrun. - -2021-11-15 Roland McGrath - - ld: Fix testsuite failures under --enable-textrel-check=error - ld/ - * testsuite/ld-aarch64/dt_textrel.d: Pass explicit -z notext in - case ld was configured with --enable-textrel-check=error. - * testsuite/ld-aarch64/pr22764.d: Likewise. - * testsuite/ld-aarch64/pr20402.d: Likewise. - -2021-11-15 Luis Machado - - Extend the prologue analyzer to handle the bti instruction - Handle the BTI instruction in the prologue analyzer. The patch handles all - the variations of the BTI instruction. - -2021-11-15 Simon Marchi - - gdb: fix gdbarch_tdep ODR violation - I would like to be able to use non-trivial types in gdbarch_tdep types. - This is not possible at the moment (in theory), because of the one - definition rule. - - To allow it, rename all gdbarch_tdep types to _gdbarch_tdep, and - make them inherit from a gdbarch_tdep base class. The inheritance is - necessary to be able to pass pointers to all these _gdbarch_tdep - objects to gdbarch_alloc, which takes a pointer to gdbarch_tdep. - - These objects are never deleted through a base class pointer, so I - didn't include a virtual destructor. In the future, if gdbarch objects - deletable, I could imagine that the gdbarch_tdep objects could become - owned by the gdbarch objects, and then it would become useful to have a - virtual destructor (so that the gdbarch object can delete the owned - gdbarch_tdep object). But that's not necessary right now. - - It turns out that RISC-V already has a gdbarch_tdep that is - non-default-constructible, so that provides a good motivation for this - change. - - Most changes are fairly straightforward, mostly needing to add some - casts all over the place. There is however the xtensa architecture, - doing its own little weird thing to define its gdbarch_tdep. I did my - best to adapt it, but I can't test those changes. - - Change-Id: Ic001903f91ddd106bd6ca09a79dabe8df2d69f3b - -2021-11-15 Clément Chigot - - COFF: avoid modifications over C_FILE filename aux entries. - Commit e86fc4a5bc37 ("PR 28447: implement multiple parameters for .file - on XCOFF") introduces C_FILE entries which can store additional - information. - However, some modifications are needed by them but not by the original - C_FILE entries, usually representing the filename. - This patch ensures that filename entries are kept as is, in order to - protect targets not supporting the additional entries. - - * coffgen.c (coff_write_symbol): Protect filename entries - (coff_write_symbols): Likewise. - (coff_print_symbol): Likewise. - -2021-11-15 Eric Botcazou - - Deal with full path in .file 0 directive - Gas uses the directory part, if present, of the .file 0 directive to set - entry 0 of the directory table in DWARF 5, which represents the "current - directory". - - Now Gas also uses the file part of the same directive to set entry 0 of the - file table, which represents the "current compilation file". But the latter - need not be located in the former so GCC will use a full path in the file - part when it is passed a full path: - - gcc -c /full/path/test.c -save-temps - - yields: - - .file 0 "/current/directory" "/full/path/test.c" - - in the assembly file and: - - The Directory Table (offset 0x22, lines 2, columns 1): - Entry Name - 0 (indirect line string, offset: 0x25): /current/directory - 1 (indirect line string, offset: 0x38): /full/path - - The File Name Table (offset 0x30, lines 2, columns 2): - Entry Dir Name - 0 0 (indirect line string, offset: 0x43): /full/path/test.c - - in the object file. Note the full path and the questionable Dir value in - the 0 entry of the file table. - -2021-11-15 Mike Frysinger - - sim: cris: make error message test a little more flexible - The point of this test is to just make sure the usage text is shown, - not the exact details of the usage text. So shorten the output test - to match the beginning. This fixes breakage when the output changed - slightly to include [--]. - - sim: run: fix crash in argc==0 error situation - The new argv processing code assumed that we were always passed a - command line. If we weren't, make sure we don't crash before we - get a chance to output an error message about incorrect usage. - - sim: cris: touch up rvdummy handling - Add quiet build support and make sure it's removed with `make clean`. - - sim: cris: replace custom "dest" test field with new --argv0 - The #dest field used in the cris testsuite is a bit of hack to set the - argv[0] for the tests to read out later on. Now that the sim has an - option to set argv[0] explicitly, we don't need this custom field, so - let's drop it to harmonize the testsuites a little. - - sim: run: add --argv0 option to control argv[0] - We default argv[0] to the program we run which is a standard *NIX - convention, but sometimes we want to be able to control the argv[0] - setting independently (especially for programs that inspect argv[0] - to change their behavior or output). Add an option to control it. - -2021-11-15 Mike Frysinger - - sim: split program path out of argv vector - We use the program argv to both find the program to run (argv[0]) and - to hold the arguments to the program. Most of the time this is fine, - but if we want to let programs specify argv[0] independently (which is - possible in standard *NIX programs), this double duty doesn't work. - - So let's split the path to the program to run out into a separate - field by itself. This simplifies the various sim_open funcs too. - - By itself, this code is more of a logical cleanup than something that - is super useful. But it will open up customization of argv[0] in a - follow up commit. Split the changes to make it easier to review. - -2021-11-15 Mike Frysinger - - sim: bfin: fix mach/xfail usage in tests - Set the mach to the right value all the time, and update xfail to - say the test fails on all targets. WIth multitarget testing, the - idea of target here doesn't make much sense. - -2021-11-15 Alan Modra - - -Waddress fixes for gold testsuite - Current mainline gcc. - common_test_1.c: In function 'main': - common_test_1.c:56:14: error: comparison between two arrays [-Werror=array-compare] - 56 | assert (c5 > c4); - | ^ - common_test_1.c:56:14: note: use '&c5[0] > &c4[0]' to compare the addresses - - * testsuite/common_test_1.c: Avoid -Waddress warnings. - * testsuite/common_test_1_v1.c: Likewise. - * testsuite/common_test_1_v2.c: Likewise. - * testsuite/script_test_2.cc: Likewise. - -2021-11-15 Alan Modra - - PowerPC64 @notoc in non-power10 code - R_PPC64_REL24_P9NOTOC is a variant of R_PPC64_REL24_NOTOC for use on - @notoc cals from non-power10 code in the rare case that using such a - construct is useful. R_PPC64_REL24_P9NOTOC will be emitted by gas - rather than R_PPC64_REL24_NOTOC when @notoc is used in a branch - instruction if power10 instructions are not enabled at that point. - The new relocation tells the linker to not use power10 instructions on - any stub emitted for that branch, unless overridden by - --power10-stubs=yes. - - The current linker heuristic of only generating power10 instructions - for stubs if power10-only relocations are detected, continues to be - used. - - include/ - * elf/ppc64.h (R_PPC64_REL24_P9NOTOC): Define. - bfd/ - * reloc.c (BFD_RELOC_PPC64_REL24_P9NOTOC): Define. - * elf64-ppc.c (ppc64_elf_howto_raw): Add entry for new reloc. - (ppc64_elf_reloc_type_lookup): Handle it. - (enum ppc_stub_type): Delete. - (enum ppc_stub_main_type, ppc_stub_sub_type): New. - (struct ppc_stub_type): New. - (struct ppc_stub_hash_entry): Use the above new type. - (struct ppc_link_hash_table): Update stub_count. - (is_branch_reloc, ppc64_elf_check_relocs), - (toc_adjusting_stub_needed): Handle new reloc. - (stub_hash_newfunc, select_alt_stub, ppc_merge_stub), - (ppc_type_of_stub, plt_stub_size, build_plt_stub), - (build_tls_get_addr_head, build_tls_get_addr_tail), - (ppc_build_one_stub, ppc_size_one_stub, ppc64_elf_size_stubs), - (ppc64_elf_build_stubs, ppc64_elf_relocate_section): Handle new - reloc. Modify stub handling to suit new scheme. - * bfd-in2.h: Regenerate. - * libbfd.h: Regenerate. - gas/ - * config/tc-ppc.c (ppc_elf_suffix): When power10 is not enabled - return BFD_RELOC_PPC64_REL24_P9NOTOC for @notoc. - (fixup_size, ppc_force_relocation, ppc_fix_adjustable): Handle - BFD_RELOC_PPC64_REL24_P9NOTOC. - ld/ - * testsuite/ld-powerpc/callstub-2.s: Add .machine power10. - -2021-11-15 Alan Modra - - Regenerate a couple of files - A couple of files changed on my latest --enable-maintainer-mode - build. ld/Makefile.in had a missing dependency but better sorting of - the loongson entries. - - intl/ - * configure: Regenerate. - ld/ - * Makefile.am: Sort loongson entries. - * Makefile.in: Regenerate. - -2021-11-15 Pedro Alves - - Fix build with current GCC: EL_EXPLICIT(location) always non-NULL - Compiling GDB with current GCC (1b4a63593b) runs into this: - - src/gdb/location.c: In function 'int event_location_empty_p(const event_location*)': - src/gdb/location.c:963:38: error: the address of 'event_location::::explicit_loc' will never be NULL [-Werror=address] - 963 | return (EL_EXPLICIT (location) == NULL - | ^ - src/gdb/location.c:57:30: note: 'event_location::::explicit_loc' declared here - 57 | struct explicit_location explicit_loc; - | ^~~~~~~~~~~~ - - GCC is right, EL_EXPLICIT is defined as returning the address of an - union field: - - /* An explicit location. */ - struct explicit_location explicit_loc; - #define EL_EXPLICIT(P) (&((P)->u.explicit_loc)) - - and thus must always be non-NULL. - - Change-Id: Ie74fee7834495a93affcefce03c06e4d83ad8191 - -2021-11-15 GDB Administrator - - Automatic date update in version.in - -2021-11-14 Lancelot SIX - - [PR gdb/16238] Add completer for the show user command - The 'show user' command (which shows the definition of non-python/scheme - user defined commands) is currently missing a completer. This is - mentioned in PR 16238. Having one can improve the user experience. - - In this commit I propose an implementation for such completer as well as - the associated tests. - - Tested on x86_64 GNU/Linux. - - All feedbacks are welcome. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=16238 - -2021-11-14 Alan Modra - - sync libbacktrace from gcc - -2021-11-14 GDB Administrator - - Automatic date update in version.in - -2021-11-13 H.J. Lu - - Sync Makefile.tpl with GCC - * Makefile.tpl: Sync with GCC. - * Makefile.in: Regenerate. - -2021-11-13 Mike Frysinger - - sim: sh: fix switch-bool warnings - This code triggers -Werror=switch-bool warnings with <=gcc-5 versions. - Rework it to use if statements instead as it also simplifies a bit. - - sim: sh: rework carry checks to not rely on integer overflows - In <=gcc-7 versions, -fstrict-overflow is enabled by default, and that - triggers warnings in this code that relies on integer overflows to test - for carries. Change the logic to test against the limit directly. - -2021-11-13 GDB Administrator - - Automatic date update in version.in - -2021-11-12 Carl Love - - Fix gdb.base/sigstep.exp test for ppc - The test stops at which is the call to the handler - rather than in the handler as intended. This patch replaces the - gdb_test "$enter_cmd to handler" with a gdb_test_multiple test. The multiple - test looks for the stop at . If found, the command - is issued again. The test passes if gdb stops in the handler as expected. - - (gdb) PASS: gdb.base/sigstep.exp: stepi to handler, nothing in handler, step - from handler: continue to signal - stepi - - 1: x/i $pc - => 0x7ffff7f80440 <__kernel_start_sigtramp_rt64>: bctrl - (gdb) stepi - handler (sig=551) at sigstep.c:32 - 32 { - 1: x/i $pc - => 0x10000097c : addis r2,r12,2 - (gdb) PASS: gdb.base/sigstep.exp: stepi to handler, nothing in handler, - step from handler: stepi to handler - - Patch has been tested on x86_64-linux and ppc64le-linux with no test failures. - -2021-11-12 Tom de Vries - - [gdb/testsuite] Fix regexp in gdb.base/foll-vfork.exp - On OBS I ran into: - ... - (gdb) PASS: gdb.base/foll-vfork.exp: exit: \ - vfork relations in info inferiors: continue to child exit - info inferiors^M - Num Description Connection Executable ^M - 1 foll-vfork-exit ^M - * 2 foll-vfork-exit ^M - (gdb) I'm the proud parent of child #5044!^M - FAIL: gdb.base/foll-vfork.exp: exit: vfork relations in info inferiors: \ - vfork relation no longer appears in info inferiors (timeout) - ... - - Fix this by removing the '$' anchor in the corresponding '$gdb_prompt $' - regexps. - - Tested on x86_64-linux. - -2021-11-12 Alan Modra - - Don't compile some opcodes files when bfd is 32-bit only - * Makefile.am (TARGET_LIBOPCODES_CFILES): Split into.. - (TARGET64_LIBOPCODES_CFILES): ..this and.. - (TARGET32_LIBOPCODES_CFILES): ..this. - (ALL_MACHINES): Likewise split to - (ALL64_MACHINES, ALL32_MACHINES): ..this. - * disassemble.c: Define some ARCH_* when ARCH_all only if BFD64. - * configure.ac (BFD_MACHINES): Defined depending on BFD_ARCH_SIZE. - * Makefile.in: Regenerate. - * configure: Regenerate. - - Import Makefile.def from gcc - * Makefile.def: Import from gcc. - * Makefile.in: Regenerate. - -2021-11-12 Alan Modra - - Fix demangle style usage info - Extract allowed styles from libiberty, so we don't have to worry about - our help messages getting out of date. The function probably belongs - in libiberty/cplus-dem.c but it can be here for a while to iron out - bugs. - - PR 28581 - * demanguse.c: New file. - * demanguse.h: New file. - * nm.c (usage): Break up output. Use display_demangler_styles. - * objdump.c (usage): Use display_demangler_styles. - * readelf.c (usage): Likewise. - * Makefile.am: Add demanguse.c and demanguse.h. - * Makefile.in: Regenerate. - * po/POTFILESin: Regenerate. - -2021-11-12 GDB Administrator - - Automatic date update in version.in - -2021-11-11 Simon Marchi - - gdb: fix "set scheduler-locking" thread exit hang - GDB hangs when doing this: - - - launch inferior with multiple threads - - multiple threads hit some breakpoint(s) - - one breakpoint hit is presented as a stop, the rest are saved as - pending wait statuses - - "set scheduler-locking on" - - resume the currently selected thread (because of scheduler-locking, - it's the only one resumed), let it execute until exit - - GDB hangs, not showing the prompt, impossible to interrupt with ^C - - When the resumed thread exits, we expect the target to return a - TARGET_WAITKIND_NO_RESUMED event, and that's what we see: - - [infrun] fetch_inferior_event: enter - [infrun] scoped_disable_commit_resumed: reason=handling event - [infrun] random_pending_event_thread: None found. - [Thread 0x7ffff7d9c700 (LWP 309357) exited] - [infrun] print_target_wait_results: target_wait (-1.0.0 [process -1], status) = - [infrun] print_target_wait_results: -1.0.0 [process -1], - [infrun] print_target_wait_results: status->kind = no-resumed - [infrun] handle_inferior_event: status->kind = no-resumed - [infrun] handle_no_resumed: TARGET_WAITKIND_NO_RESUMED (ignoring: found resumed) - [infrun] prepare_to_wait: prepare_to_wait - [infrun] reset: reason=handling event - [infrun] maybe_set_commit_resumed_all_targets: not requesting commit-resumed for target native, no resumed threads - [infrun] fetch_inferior_event: exit - - The problem is in handle_no_resumed: we check if some other thread is - actually resumed, to see if we should ignore that event (see comments in - that function for more info). If this condition is true: - - (thread->executing () || thread->has_pending_waitstatus ()) - - ... then we ignore the event. The problem is that there are some non-resumed - threads with a pending event, which makes us ignore the event. But these - threads are not resumed, so we end up waiting while nothing executes, hence - waiting for ever. - - My first fix was to change the condition to: - - (thread->executing () - || (thread->resumed () && thread->has_pending_waitstatus ())) - - ... but then it occured to me that we could simply check for: - - (thread->resumed ()) - - Since "executing" implies "resumed", checking simply for "resumed" - covers threads that are resumed and executing, as well as threads that - are resumed with a pending status, which is what we want. - - Change-Id: Ie796290f8ae7f34c026ca3a8fcef7397414f4780 - -2021-11-11 Tom de Vries - - [gdb/build] Fix Wimplicit-exception-spec-mismatch in clang build - When building with clang 13 (and -std=gnu++17 to work around an issue in - string_view-selftests.c), we run into a few Wimplicit-exception-spec-mismatch - warnings: - ... - src/gdbsupport/new-op.cc:102:1: error: function previously declared with an \ - explicit exception specification redeclared with an implicit exception \ - specification [-Werror,-Wimplicit-exception-spec-mismatch] - operator delete (void *p) - ^ - /usr/include/c++/11/new:130:6: note: previous declaration is here - void operator delete(void*) _GLIBCXX_USE_NOEXCEPT - ^ - ... - - These are due to recent commit 5fff6115fea "Fix - LD_PRELOAD=/usr/lib64/libasan.so.6 gdb". - - Fix this by adding the missing noexcept. - - Build on x86_64-linux, using gcc 7.5.0 and clang 13.0.0. - -2021-11-11 Tom de Vries - - [gdb/build] Fix build with -std=c++11 - When building with -std=c++11, we run into two Werror=missing-declarations: - ... - new-op.cc: In function 'void operator delete(void*, std::size_t)': - new-op.cc:114:1: error: no previous declaration for \ - 'void operator delete(void*, std::size_t)' [-Werror=missing-declarations] - operator delete (void *p, std::size_t) noexcept - ^~~~~~~~ - new-op.cc: In function 'void operator delete [](void*, std::size_t)': - new-op.cc:132:1: error: no previous declaration for \ - 'void operator delete [](void*, std::size_t)' [-Werror=missing-declarations] - operator delete[] (void *p, std::size_t) noexcept - ^~~~~~~~ - ... - - These are due to recent commit 5fff6115fea "Fix - LD_PRELOAD=/usr/lib64/libasan.so.6 gdb". - - The declarations are provided by (which is included) for c++14 onwards, - but they are missing for c++11. - - Fix this by adding the missing declarations. - - Tested on x86_64-linux, with gcc 7.5.0, both without (implying -std=gnu++14) and - with -std=c++11. - -2021-11-11 Tom de Vries - - [gdb/testsuite] Add gdb.arch/ppc64-break-on-_exit.exp - Add a regression test-case for commit a50bdb99afe "[gdb/tdep, rs6000] Don't - skip system call in skip_prologue": - - set a breakpoint on a local copy of glibc's _exit, and - - verify that it triggers. - - The test-case uses an assembly file by default, but also has the possibility - to use a C source file instead. - - Tested on ppc64le-linux. Verified that the test-case fails without - aforementioned commit, and passes with the commit. Both with assembly - and C source. - -2021-11-11 Nelson Chu - - RISC-V: Dump objects according to the elf architecture attribute. - For now we should always generate the elf architecture attribute both for - elf and linux toolchains, so that we could dump the objects correctly - according to the generated architecture string. This patch resolves the - problem that we probably dump an object with c.nop instructions, but - in fact the c extension isn't allowed. Consider the following case, - - nelson@LAPTOP-QFSGI1F2:~/test$ cat temp.s - .option norvc - .option norelax - .text - add a0, a0, a0 - .byte 0x1 - .balign 16 - nelson@LAPTOP-QFSGI1F2:~/test$ ~/binutils-dev/build-elf32-upstream/build-install/bin/riscv32-unknown-elf-as temp.s -o temp.o - nelson@LAPTOP-QFSGI1F2:~/test$ ~/binutils-dev/build-elf32-upstream/build-install/bin/riscv32-unknown-elf-objdump -d temp.o - - temp.o: file format elf32-littleriscv - - Disassembly of section .text: - - 00000000 <.text>: - 0: 00a50533 add a0,a0,a0 - 4: 01 .byte 0x01 - 5: 00 .byte 0x00 - 6: 0001 nop - 8: 00000013 nop - c: 00000013 nop - nelson@LAPTOP-QFSGI1F2:~/test$ ~/binutils-dev/build-elf32-upstream/build-install/bin/riscv32-unknown-elf-readelf -A temp.o - Attribute Section: riscv - File Attributes - Tag_RISCV_arch: "rv32i2p0_m2p0_a2p0_f2p0_d2p0" - - The c.nop at address 0x6 is generated for alignment, but since the rvc isn't - allowed for this object, dump it as a c.nop instruction looks wrong. After - applying this patch, I get the following result, - - nelson@LAPTOP-QFSGI1F2:~/test$ ~/binutils-dev/build-elf32-upstream/build-install/bin/riscv32-unknown-elf-objdump -d temp.o - - temp.o: file format elf32-littleriscv - - Disassembly of section .text: - - 00000000 <.text>: - 0: 00a50533 add a0,a0,a0 - 4: 01 .byte 0x01 - 5: 00 .byte 0x00 - 6: 0001 .2byte 0x1 - 8: 00000013 nop - c: 00000013 nop - - For the current objdump, we dump data to .byte/.short/.word/.dword, and - dump the unknown or unsupported instructions to .2byte/.4byte/.8byte, which - respectively are 2, 4 and 8 bytes instructions. Therefore, we shouldn't - dump the 0x0001 as a c.nop instruction in the above case, we should dump - it to .2byte 0x1 as a unknown instruction, since the rvc is disabled. - - However, consider that some people may use the new objdump to dump the old - objects, which don't have any elf attributes. We usually set the default - architecture string to rv64g by bfd/elfxx-riscv.c:riscv_set_default_arch. - But this will cause rvc instructions to be unrecognized. Therefore, we - set the default architecture string to rv64gc for disassembler, to keep - the previous behavior. - - This patch pass the riscv-gnu-toolchain gcc/binutils regressions for - rv32emc-elf, rv32gc-linux, rv32i-elf, rv64gc-elf and rv64gc-linux - toolchains. Also, tested by --enable-targets=all and can build - riscv-gdb successfully. - - bfd/ - * elfnn-riscv.c (riscv_merge_arch_attr_info): Tidy the - codes for riscv_parse_subset_t setting. - * elfxx-riscv.c (riscv_get_default_ext_version): Updated. - (riscv_subset_supports): Moved from gas/config/tc-riscv.c. - (riscv_multi_subset_supports): Likewise. - * elfxx-riscv.h: Added extern for riscv_subset_supports and - riscv_multi_subset_supports. - gas/ - * config/tc-riscv.c (riscv_subset_supports): Moved to - bfd/elfxx-riscv.c. - (riscv_multi_subset_supports): Likewise. - (riscv_rps_as): Defined for architectrue parser. - (riscv_set_arch): Updated. - (riscv_set_abi_by_arch): Likewise. - (riscv_csr_address): Likewise. - (reg_lookup_internal): Likewise. - (riscv_ip): Likewise. - (s_riscv_option): Updated. - * testsuite/gas/riscv/mapping-04b.d: Updated. - * testsuite/gas/riscv/mapping-norelax-03b.d: Likewise. - * testsuite/gas/riscv/mapping-norelax-04b.d: Likewise. - opcodes/ - * riscv-dis.c: Include elfxx-riscv.h since we need the - architecture parser. Also removed the cpu-riscv.h, it - is already included in elfxx-riscv.h. - (default_isa_spec): Defined since the parser need this - to set the default architecture string. - (xlen): Moved out from riscv_disassemble_insn as a global - variable, it is more convenient to initialize riscv_rps_dis. - (riscv_subsets): Defined to recoed the supported - extensions. - (riscv_rps_dis): Defined for architectrue parser. - (riscv_disassemble_insn): Call riscv_multi_subset_supports - to make sure if the instructions are valid or not. - (print_insn_riscv): Initialize the riscv_subsets by parsing - the elf architectrue attribute. Otherwise, set the default - architectrue string to rv64gc. - -2021-11-11 Mike Frysinger - - sim: testsuite: drop sim_compile cover function - Most code isn't using this, and the only call site (in one cris file) - can use target_compile directly. So switch it over to simplify. - - sim: cris: stop testing a.out explicitly [ld/13900] - Since gcc dropped support for a.out starting with 4.4.0 in 2009, it's - been impossible to verify this code actually still works. Since it - crashes in ld, and it uses a config option that no other tests uses - and we want to remove, drop the test to avoid all the trouble. - - sim: io: tweak compiler workaround with error output - Outputting an extra space broke a cris test. Change the workaround - to use %s with an empty string to avoid the compiler warning but not - output an extra space. - - sim: testsuite: delete unused arm remote host logic - There's no need to sync testutils.inc with remote hosts. The one - we have in the source tree is all we need and only thing we test. - Delete it to simplify. - - sim: synacor: simplify test generation - Objcopy was used to create a binary file of just the executable code - since the environment requires code to based at address 0. We can - accomplish the same thing with the -Ttext=0 flag, so switch to that - to get rid of custom logic. - -2021-11-11 GDB Administrator - - Automatic date update in version.in - -2021-11-10 Tom Tromey - - Handle PIE in .debug_loclists - Simon pointed out that my recent patches to .debug_loclists caused - some regressions. After a brief discussion we realized it was because - his system compiler defaults to PIE. - - This patch changes this code to unconditionally apply the text offset - here. It also changes loclist_describe_location to work more like - dwarf2_find_location_expression. - - I tested this by running the gdb.dwarf2 tests both with and without - -pie. - -2021-11-10 Przemyslaw Wirkus - - arm: enable Cortex-A710 CPU - This patch is adding support for Cortex-A710 CPU in Arm. - - bfd/ - - * cpu-arm.c (processors): Add cortex-a710. - - gas/ - - * NEWS: Update docs. - * config/tc-arm.c (arm_cpus): Add cortex-a710 to -mcpu. - * doc/c-arm.texi: Update docs. - * testsuite/gas/arm/cpu-cortex-a710.d: New test. - -2021-11-10 Clément Chigot - - gdb: adjust x_file fields on COFF readers - Commit e86fc4a5bc37 ("PR 28447: implement multiple parameters for .file - on XCOFF") changes the structure associated to the internal - representation of files in COFF formats. However, gdb directory update - has been forgotten, leading to compilation errors of this kind: - - CXX coffread.o - /home/simark/src/binutils-gdb/gdb/coffread.c: In function 'const char* coff_getfilename(internal_auxent*)': - /home/simark/src/binutils-gdb/gdb/coffread.c:1343:29: error: 'union internal_auxent::::' has no member named 'x_zeroes' - 1343 | if (aux_entry->x_file.x_n.x_zeroes == 0) - | ^~~~~~~~ - - Fix it by adjusting the COFF code in GDB. - - Change-Id: I703fa134bc722d47515efbd72b88fa5650af6c3c - -2021-11-10 Tom de Vries - - [gdb/testsuite] Add gdb.opt/break-on-_exit.exp - Add a test-case to excercise the problem scenario reported in PR28527 and - fixed in commit a50bdb99afe "[gdb/tdep, rs6000] Don't skip system call in - skip_prologue": - - set a breakpoint on _exit, and - - verify that it triggers. - - Note that this is not a regression test for that commit. Since the actual - code in _exit may vary across os instances, we cannot guarantee that the - problem will always trigger with this test-case. - - Rather, this test-case is a version of the original test-case - (gdb.threads/process-dies-while-detaching.exp) that is minimal while still - reproducing the problem reported in PR28527, in that same setting. - - The benefit of this test-case is that it exercise real-life code and may - expose similar problems in other settings. Also, it provides a much easier - test-case to investigate in case a similar problem occurs. - - Tested on x86_64-linux and ppc64le-linux. - -2021-11-10 Mike Frysinger - - sim: frv: flip trapdump default back to off - When I refactored this by scoping it to sim-frv-xxx in commit - e7954ef5e5ed90fb7d28c013518f4c2e6bcd20a1 ("sim: frv: scope the - unique configure flag"), I changed the default from off to on. - While the feature is nice for developers, it breaks a bunch of - tests which aren't expecting this extra output. So flip it back - to off by default. - -2021-11-10 Pekka Seppänen - - PR28575, readelf.c and strings.c use undefined type uint - Since --unicode support (commit b3aa80b45c4) both binutils/readelf.c - and binutils/strings.c use 'uint' in a few locations. It likely - should be 'unsigned int' since there isn't anything defining 'uint' - within binutils (besides zlib) and AFAIK it isn't a standard type. - - * readelf.c (print_symbol): Replace uint with unsigned int. - * strings.c (string_min, display_utf8_char): Likewise. - (print_unicode_stream_body, print_unicode_stream): Likewise. - (print_strings): Likewise. - (get_unicode_byte): Wrap long line. - -2021-11-10 Clément Chigot - - ld: set correct flags for AIX shared tests - Previous flags were aimed to be run with XLC. - Nowadays, only GCC is being tested with GNU toolchain. Moreover, - recent XLC versions might also accept "-shared". - - * testsuite/ld-shared/shared.exp: Adjust shared flags. - -2021-11-10 Clément Chigot - - PR 28447: implement multiple parameters for .file on XCOFF - On XCOFF, ".file" pseudo-op allows 3 extras parameters to provide - additional information to AIX linker, or its debugger. These are - stored in auxiliary entries of the C_FILE symbol. - - bfd/ - PR 28447 - * coffcode.h (combined_entry_type): Add extrap field. - (coff_bigobj_swap_aux_in): Adjust names of x_file fields. - (coff_bigobj_swap_aux_out): Likewise. - * coffgen.c (coff_write_auxent_fname): New function. - (coff_fix_symbol_name): Write x_file using - coff_write_auxent_fname. - (coff_write_symbol): Likewise. - (coff_write_symbols): Add C_FILE auxiliary entries to - string table if needed. - (coff_get_normalized_symtab): Adjust names of x_file fields. - Normalize C_FILE auxiliary entries. - (coff_print_symbol): Print C_FILE auxiliary entries. - * coff-rs6000.c (_bfd_xcoff_swap_aux_in): Adjust names of - x_file fields. - (_bfd_xcoff_swap_aux_out): Likewise. - * coff64-rs6000.c (_bfd_xcoff64_swap_aux_in): Likewise. - (_bfd_xcoff64_swap_aux_out): Likewise. - * cofflink.c (_bfd_coff_final_link): Likewise. - (_bfd_coff_link_input_bfd): Likewise. - * coffswap.h (coff_swap_aux_in): Likewise. - * peXXigen.c (_bfd_XXi_swap_aux_in): Likewise. - (_bfd_XXi_swap_aux_out): Likewise. - * xcofflink.c (xcoff_link_input_bfd): Likewise. - * libcoff.h: Regenerate. - gas/ - * config/tc-ppc.c (ppc_file): New function. - * config/tc-ppc.h (OBJ_COFF_MAX_AUXENTRIES): Change to 4. - * testsuite/gas/ppc/aix.exp: Add tests. - * testsuite/gas/ppc/xcoff-file-32.d: New test. - * testsuite/gas/ppc/xcoff-file-64.d: New test. - * testsuite/gas/ppc/xcoff-file.s: New test. - include/ - * coff/internal.h (union internal_auxent): Change x_file to be a - struct instead of a union. Add x_ftype field. - * coff/rs6000.h (union external_auxent): Add x_resv field. - * coff/xcoff.h (XFT_FN): New define. - (XFT_CT): Likewise. - (XFT_CV): Likewise. - (XFT_CD): Likewise. - -2021-11-10 Kevin Buettner - - Test case for Bug 28308 - The purpose of this test is described in the comments in - dprintf-execution-x-script.exp. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28308 - - The name of this new test was based on that of an existing test, - bp-cmds-execution-x-script.exp. I started off by copying that test, - adding to it, and then rewriting almost all of it. It's different - enough that I decided that listing the copyright year as 2021 - was sufficient. - -2021-11-10 Kevin Buettner - - Fix PR 28308 - dprintf breakpoints not working when run from script - This commit fixes Bug 28308, titled "Strange interactions with - dprintf and break/commands": - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28308 - - Since creating that bug report, I've found a somewhat simpler way of - reproducing the problem. I've encapsulated it into the GDB test case - which I've created along with this bug fix. The name of the new test - is gdb.base/dprintf-execution-x-script.exp, I'll demonstrate the - problem using this test case, though for brevity, I've placed all - relevant files in the same directory and have renamed the files to all - start with 'dp-bug' instead of 'dprintf-execution-x-script'. - - The script file, named dp-bug.gdb, consists of the following commands: - - dprintf increment, "dprintf in increment(), vi=%d\n", vi - break inc_vi - commands - continue - end - run - - Note that the final command in this script is 'run'. When 'run' is - instead issued interactively, the bug does not occur. So, let's look - at the interactive case first in order to see the correct/expected - output: - - $ gdb -q -x dp-bug.gdb dp-bug - ... eliding buggy output which I'll discuss later ... - (gdb) run - Starting program: /mesquite2/sourceware-git/f34-master/bld/gdb/tmp/dp-bug - vi=0 - dprintf in increment(), vi=0 - - Breakpoint 2, inc_vi () at dprintf-execution-x-script.c:26 - 26 in dprintf-execution-x-script.c - vi=1 - dprintf in increment(), vi=1 - - Breakpoint 2, inc_vi () at dprintf-execution-x-script.c:26 - 26 in dprintf-execution-x-script.c - vi=2 - dprintf in increment(), vi=2 - - Breakpoint 2, inc_vi () at dprintf-execution-x-script.c:26 - 26 in dprintf-execution-x-script.c - vi=3 - [Inferior 1 (process 1539210) exited normally] - - In this run, in which 'run' was issued from the gdb prompt (instead - of at the end of the script), there are three dprintf messages along - with three 'Breakpoint 2' messages. This is the correct output. - - Now let's look at the output that I snipped above; this is the output - when 'run' is issued from the script loaded via GDB's -x switch: - - $ gdb -q -x dp-bug.gdb dp-bug - Reading symbols from dp-bug... - Dprintf 1 at 0x40116e: file dprintf-execution-x-script.c, line 38. - Breakpoint 2 at 0x40113a: file dprintf-execution-x-script.c, line 26. - vi=0 - dprintf in increment(), vi=0 - - Breakpoint 2, inc_vi () at dprintf-execution-x-script.c:26 - 26 dprintf-execution-x-script.c: No such file or directory. - vi=1 - - Breakpoint 2, inc_vi () at dprintf-execution-x-script.c:26 - 26 in dprintf-execution-x-script.c - vi=2 - - Breakpoint 2, inc_vi () at dprintf-execution-x-script.c:26 - 26 in dprintf-execution-x-script.c - vi=3 - [Inferior 1 (process 1539175) exited normally] - - In the output shown above, only the first dprintf message is printed. - The 2nd and 3rd dprintf messages are missing! However, all three - 'Breakpoint 2...' messages are still printed. - - Why does this happen? - - bpstat_do_actions_1() in gdb/breakpoint.c contains the following - comment and code near the start of the function: - - /* Avoid endless recursion if a `source' command is contained - in bs->commands. */ - if (executing_breakpoint_commands) - return 0; - - scoped_restore save_executing - = make_scoped_restore (&executing_breakpoint_commands, 1); - - Also, as described by this comment prior to the 'async' field - in 'struct ui' in top.h, the main UI starts off in sync mode - when processing command line arguments: - - /* True if the UI is in async mode, false if in sync mode. If in - sync mode, a synchronous execution command (e.g, "next") does not - return until the command is finished. If in async mode, then - running a synchronous command returns right after resuming the - target. Waiting for the command's completion is later done on - the top event loop. For the main UI, this starts out disabled, - until all the explicit command line arguments (e.g., `gdb -ex - "start" -ex "next"') are processed. */ - - This combination of things, the state of the static global - 'executing_breakpoint_commands' plus the state of the async - field in the main UI causes this behavior. - - This is a backtrace after hitting the dprintf breakpoint for - the second time when doing 'run' from the script file, i.e. - non-interactively: - - Thread 1 "gdb" hit Breakpoint 3, bpstat_do_actions_1 (bsp=0x7fffffffc2b8) - at /ironwood1/sourceware-git/f34-master/bld/../../worktree-master/gdb/breakpoint.c:4431 - 4431 if (executing_breakpoint_commands) - - #0 bpstat_do_actions_1 (bsp=0x7fffffffc2b8) - at gdb/breakpoint.c:4431 - #1 0x00000000004d8bc6 in dprintf_after_condition_true (bs=0x1538090) - at gdb/breakpoint.c:13048 - #2 0x00000000004c5caa in bpstat_stop_status (aspace=0x116dbc0, bp_addr=0x40116e, thread=0x137f450, ws=0x7fffffffc718, - stop_chain=0x1538090) at gdb/breakpoint.c:5498 - #3 0x0000000000768d98 in handle_signal_stop (ecs=0x7fffffffc6f0) - at gdb/infrun.c:6172 - #4 0x00000000007678d3 in handle_inferior_event (ecs=0x7fffffffc6f0) - at gdb/infrun.c:5662 - #5 0x0000000000763cd5 in fetch_inferior_event () - at gdb/infrun.c:4060 - #6 0x0000000000746d7d in inferior_event_handler (event_type=INF_REG_EVENT) - at gdb/inf-loop.c:41 - #7 0x00000000007a702f in handle_target_event (error=0, client_data=0x0) - at gdb/linux-nat.c:4207 - #8 0x0000000000b8cd6e in gdb_wait_for_event (block=block@entry=0) - at gdbsupport/event-loop.cc:701 - #9 0x0000000000b8d032 in gdb_wait_for_event (block=0) - at gdbsupport/event-loop.cc:597 - #10 gdb_do_one_event () at gdbsupport/event-loop.cc:212 - #11 0x00000000009d19b6 in wait_sync_command_done () - at gdb/top.c:528 - #12 0x00000000009d1a3f in maybe_wait_sync_command_done (was_sync=0) - at gdb/top.c:545 - #13 0x00000000009d2033 in execute_command (p=0x7fffffffcb18 "", from_tty=0) - at gdb/top.c:676 - #14 0x0000000000560d5b in execute_control_command_1 (cmd=0x13b9bb0, from_tty=0) - at gdb/cli/cli-script.c:547 - #15 0x000000000056134a in execute_control_command (cmd=0x13b9bb0, from_tty=0) - at gdb/cli/cli-script.c:717 - #16 0x00000000004c3bbe in bpstat_do_actions_1 (bsp=0x137f530) - at gdb/breakpoint.c:4469 - #17 0x00000000004c3d40 in bpstat_do_actions () - at gdb/breakpoint.c:4533 - #18 0x00000000006a473a in command_handler (command=0x1399ad0 "run") - at gdb/event-top.c:624 - #19 0x00000000009d182e in read_command_file (stream=0x113e540) - at gdb/top.c:443 - #20 0x0000000000563697 in script_from_file (stream=0x113e540, file=0x13bb0b0 "dp-bug.gdb") - at gdb/cli/cli-script.c:1642 - #21 0x00000000006abd63 in source_gdb_script (extlang=0xc44e80 , stream=0x113e540, - file=0x13bb0b0 "dp-bug.gdb") at gdb/extension.c:188 - #22 0x0000000000544400 in source_script_from_stream (stream=0x113e540, file=0x7fffffffd91a "dp-bug.gdb", - file_to_open=0x13bb0b0 "dp-bug.gdb") - at gdb/cli/cli-cmds.c:692 - #23 0x0000000000544557 in source_script_with_search (file=0x7fffffffd91a "dp-bug.gdb", from_tty=1, search_path=0) - at gdb/cli/cli-cmds.c:750 - #24 0x00000000005445cf in source_script (file=0x7fffffffd91a "dp-bug.gdb", from_tty=1) - at gdb/cli/cli-cmds.c:759 - #25 0x00000000007cf6d9 in catch_command_errors (command=0x5445aa , - arg=0x7fffffffd91a "dp-bug.gdb", from_tty=1, do_bp_actions=false) - at gdb/main.c:523 - #26 0x00000000007cf85d in execute_cmdargs (cmdarg_vec=0x7fffffffd1b0, file_type=CMDARG_FILE, cmd_type=CMDARG_COMMAND, - ret=0x7fffffffd18c) at gdb/main.c:615 - #27 0x00000000007d0c8e in captured_main_1 (context=0x7fffffffd3f0) - at gdb/main.c:1322 - #28 0x00000000007d0eba in captured_main (data=0x7fffffffd3f0) - at gdb/main.c:1343 - #29 0x00000000007d0f25 in gdb_main (args=0x7fffffffd3f0) - at gdb/main.c:1368 - #30 0x00000000004186dd in main (argc=5, argv=0x7fffffffd508) - at gdb/gdb.c:32 - - There are two frames for bpstat_do_actions_1(), one at frame #16 and - the other at frame #0. The one at frame #16 is processing the actions - for Breakpoint 2, which is a 'continue'. The one at frame #0 is attempting - to process the dprintf breakpoint action. However, at this point, - the value of 'executing_breakpoint_commands' is 1, forcing an early - return, i.e. prior to executing the command(s) associated with the dprintf - breakpoint. - - For the sake of comparison, this is what the stack looks like when hitting - the dprintf breakpoint for the second time when issuing the 'run' - command from the GDB prompt. - - Thread 1 "gdb" hit Breakpoint 3, bpstat_do_actions_1 (bsp=0x7fffffffccd8) - at /ironwood1/sourceware-git/f34-master/bld/../../worktree-master/gdb/breakpoint.c:4431 - 4431 if (executing_breakpoint_commands) - - #0 bpstat_do_actions_1 (bsp=0x7fffffffccd8) - at gdb/breakpoint.c:4431 - #1 0x00000000004d8bc6 in dprintf_after_condition_true (bs=0x16b0290) - at gdb/breakpoint.c:13048 - #2 0x00000000004c5caa in bpstat_stop_status (aspace=0x116dbc0, bp_addr=0x40116e, thread=0x13f0e60, ws=0x7fffffffd138, - stop_chain=0x16b0290) at gdb/breakpoint.c:5498 - #3 0x0000000000768d98 in handle_signal_stop (ecs=0x7fffffffd110) - at gdb/infrun.c:6172 - #4 0x00000000007678d3 in handle_inferior_event (ecs=0x7fffffffd110) - at gdb/infrun.c:5662 - #5 0x0000000000763cd5 in fetch_inferior_event () - at gdb/infrun.c:4060 - #6 0x0000000000746d7d in inferior_event_handler (event_type=INF_REG_EVENT) - at gdb/inf-loop.c:41 - #7 0x00000000007a702f in handle_target_event (error=0, client_data=0x0) - at gdb/linux-nat.c:4207 - #8 0x0000000000b8cd6e in gdb_wait_for_event (block=block@entry=0) - at gdbsupport/event-loop.cc:701 - #9 0x0000000000b8d032 in gdb_wait_for_event (block=0) - at gdbsupport/event-loop.cc:597 - #10 gdb_do_one_event () at gdbsupport/event-loop.cc:212 - #11 0x00000000007cf512 in start_event_loop () - at gdb/main.c:421 - #12 0x00000000007cf631 in captured_command_loop () - at gdb/main.c:481 - #13 0x00000000007d0ebf in captured_main (data=0x7fffffffd3f0) - at gdb/main.c:1353 - #14 0x00000000007d0f25 in gdb_main (args=0x7fffffffd3f0) - at gdb/main.c:1368 - #15 0x00000000004186dd in main (argc=5, argv=0x7fffffffd508) - at gdb/gdb.c:32 - - This relatively short backtrace is due to the current UI's async field - being set to 1. - - Yet another thing to be aware of regarding this problem is the - difference in the way that commands associated to dprintf breakpoints - versus regular breakpoints are handled. While they both use a command - list associated with the breakpoint, regular breakpoints will place - the commands to be run on the bpstat chain constructed in - bp_stop_status(). These commands are run later on. For dprintf - breakpoints, commands are run via the 'after_condition_true' function - pointer directly from bpstat_stop_status(). (The 'commands' field in - the bpstat is cleared in dprintf_after_condition_true(). This - prevents the dprintf commands from being run again later on when other - commands on the bpstat chain are processed.) - - Another thing that I noticed is that dprintf breakpoints are the only - type of breakpoint which use 'after_condition_true'. This suggests - that one possible way of fixing this problem, that of making dprintf - breakpoints work more like regular breakpoints, probably won't work. - (I must admit, however, that my understanding of this code isn't - complete enough to say why. I'll trust that whoever implemented it - had a good reason for doing it this way.) - - The comment referenced earlier regarding 'executing_breakpoint_commands' - states that the reason for checking this variable is to avoid - potential endless recursion when a 'source' command appears in - bs->commands. We know that a dprintf command is constrained to either - 1) execution of a GDB printf command, 2) an inferior function call of - a printf-like function, or 3) execution of an agent-printf command. - Therefore, infinite recursion due to a 'source' command cannot happen - when executing commands upon hitting a dprintf breakpoint. - - I chose to fix this problem by having dprintf_after_condition_true() - directly call execute_control_commands(). This means that it no - longer attempts to go through bpstat_do_actions_1() avoiding the - infinite recursion check for potential 'source' commands on the - command chain. I think it simplifies this code a little bit too, a - definite bonus. - - Summary: - - * breakpoint.c (dprintf_after_condition_true): Don't call - bpstat_do_actions_1(). Call execute_control_commands() - instead. - -2021-11-10 Alan Modra - - Re: Add --unicode option - * objdump: Whitespace fixes. - (long_options): Correct "ctf" entry. - -2021-11-10 Alan Modra - - Re: Add --unicode option - At low optimisation levels gcc may warn. - - * strings.c (print_unicode_stream_body): Avoid bogus "may be - used unitialised" warning. - -2021-11-10 GDB Administrator - - Automatic date update in version.in - -2021-11-09 Alan Modra - - PR28543, readelf entered an infinite loop - This little tweak terminates fuzzed binary readelf output a little - quicker. - - PR 28543 - * dwarf.c (read_and_display_attr_value): Consume a byte when - form is unrecognized. - -2021-11-09 Alan Modra - - PR28542, Undefined behaviours in readelf.c - PR 28542 - * readelf.c (dump_relocations): Check that section headers have - been read before attempting to access section name. - (print_dynamic_symbol): Likewise. - (process_mips_specific): Delete dead code. - -2021-11-09 Pedro Alves - - gdb::array_view slicing/container selftest - test std::array too - Change-Id: I2141b0b8a09f6521a59908599eb5ba1a19b18dc6 - -2021-11-09 Simon Marchi - - gdb.debuginfod/fetch_src_and_symbols.exp: fix when GDB is built with AddressSanitizer - This test fails for me, showing: - - ERROR: tcl error sourcing /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp. - ERROR: This GDB was configured as follows: - configure --host=x86_64-pc-linux-gnu --target=x86_64-pc-linux-gnu - --with-auto-load-dir=$debugdir:$datadir/auto-load - --with-auto-load-safe-path=$debugdir:$datadir/auto-load - ... and much more ... - - The problem is that TCL's exec throws an error as soon as the exec'ed - process outputs on stderr. When GDB is built with ASan, it prints some - warnings about pre-existing signal handlers: - - warning: Found custom handler for signal 7 (Bus error) preinstalled. - warning: Found custom handler for signal 8 (Floating point exception) preinstalled. - warning: Found custom handler for signal 11 (Segmentation fault) preinstalled. - - Pass --quiet to GDB to avoid these warnings. - - Change-Id: I3751d89b9b1df646da19149d7cb86775e2d3e80f - -2021-11-09 Tom Tromey - - Correctly handle DW_LLE_start_end - When the code to handle DW_LLE_start_end was added (as part of some - DWARF 5 work), it was written to add the base address. However, this - seems incorrect -- the DWARF standard describes this as an address, - not an offset from the base address. - - This patch changes a couple of spots in dwarf2/loc.c to fix this - problem. It then changes decode_debug_loc_addresses to return - DEBUG_LOC_OFFSET_PAIR instead, which preserves the previous semantics. - - This only showed up on the RISC-V target internally, due to the - combination of DWARF 5 and a newer version of GCC. I've updated a - couple of existing loclists test cases to demonstrate the bug. - -2021-11-09 Tom Tromey - - Fix build on rhES5 - The rhES5 build failed due to an upstream import a while back. The - bug here is that, while the 'personality' function exists, - ADDR_NO_RANDOMIZE is only defined in , not - . - - However, does not declare the 'personality' - function, and and cannot - both be included. - - This patch restores one of the removed configure checks and updates - the code to check it. - - We had this as a local patch at AdaCore, because it seemed like there - was no interest upstream. However, now it turns out that this fixes - PR build/28555, so I'm sending it now. - -2021-11-09 H.J. Lu - - doc/ctf-spec.texi: Remove "@validatemenus off" - Remove @validatemenus from ctf-spec.texi, which has been removed from - texinfo by - - commit a16dd1a9ece08568a1980b9a65a3a9090717997f - Author: Gavin Smith - Date: Mon Oct 12 16:32:37 2020 +0100 - - * doc/texinfo.texi - (Writing a Menu, Customization Variables for @-Commands) - (Command List), - * doc/refcard/txirefcard.tex - Remove @validatemenus. - * tp/Texinfo/XS/Makefile.am (command_ids.h): Use gawk instead - of awk. Avoid discouraged "$p" usage, using "$(p)" instead. - * tp/Texinfo/XS/configure.ac: Check for gawk. - - commit 128acab3889b51809dc3bd3c6c74b61d13f7f5f4 - Author: Gavin Smith - Date: Thu Jan 3 14:51:53 2019 +0000 - - Update refcard. - - * doc/refcard/txirefcard.tex: @setfilename is no longer - mandatory. Do not mention @validatemenus or explicitly giving - @node pointers, as these are not very important features. - - PR libctf/28567 - * doc/ctf-spec.texi: Remove "@validatemenus off". - -2021-11-09 Nick Clifton - - Add --unicode option to control how unicode characters are handled by display tools. - * nm.c: Add --unicode option to control how unicode characters are - handled. - * objdump.c: Likewise. - * readelf.c: Likewise. - * strings.c: Likewise. - * binutils.texi: Document the new feature. - * NEWS: Document the new feature. - * testsuite/binutils-all/unicode.exp: New file. - * testsuite/binutils-all/nm.hex.unicode - * testsuite/binutils-all/strings.escape.unicode - * testsuite/binutils-all/objdump.highlight.unicode - * testsuite/binutils-all/readelf.invalid.unicode - -2021-11-09 Mike Frysinger - - sim: sh: simplify testsuite a bit - Switch from the centralized list in the exp file to each test declaring - its own requirements which they're already (mostly) doing. This will - increase coverage slightly by running more tests in more configurations - since the hardcoded exp list was a little out of date. - - We have to mark the psh* tests as shdsp only (to match what the exp - file was doing), mark the fsca & fsrra tests as failing (since they - weren't even being run by the exp file), and to fix the expected - output & status of the fail test. - -2021-11-09 Mike Frysinger - - sim: cris: clean up missing func prototype warnings - Move some unused funcs under existing #if 0 protection, mark a few - local funcs as static, and add missing prototypes for the rest which - are used from other files. This fixes all the fatal warnings in the - mloop files so we can turn -Werror on here fully. - -2021-11-09 GDB Administrator - - Automatic date update in version.in - -2021-11-08 Lancelot SIX - - Improve gdb::array_view ctor from contiguous containers - While reading the interface of gdb::array_view, I realized that the - constructor that builds an array_view on top of a contiguous container - (such as std::vector, std::array or even gdb::array_view) can be - missused. - - Lets consider the following code sample: - - struct Parent - { - Parent (int a): a { a } {} - int a; - }; - - std::ostream &operator<< (std::ostream& os, const Parent & p) - { os << "Parent {a=" << p.a << "}"; return os; } - - struct Child : public Parent - { - Child (int a, int b): Parent { a }, b { b } {} - int b; - }; - - std::ostream &operator<< (std::ostream& os, const Child & p) - { os << "Child {a=" << p.a << ", b=" << p.b << "}"; return os; } - - template - void print (const gdb::array_view &p) - { - std::for_each (p.begin (), p.end (), [](const T &p) { std::cout << p << '\n'; }); - } - - Then with the current interface nothinng prevents this usage of - array_view to be done: - - const std::array elts = { - Child {1, 2}, - Child {3, 4}, - Child {5, 6} - }; - print_all (elts); - - This compiles fine and produces the following output: - - Parent {a=1} - Parent {a=2} - Parent {a=3} - - which is obviously wrong. There is nowhere in memory a Parent-like - object for which the A member is 2 and this call to print_all - shold not compile at all (calling print_all is however fine). - - This comes down to the fact that a Child* is convertible into a Parent*, - and that an array view is constructed to a pointer to the first element - and a size. The valid type pointed to that can be used with this - constructor are restricted using SFINAE, which requires that a - pointer to a member into the underlying container can be converted into a - pointer the array_view's data type. - - This patch proposes to change the constraints on the gdb::array_view - ctor which accepts a container now requires that the (decayed) type of - the elements in the container match the (decayed) type of the array_view - being constructed. - - Applying this change required minimum adjustment in GDB codebase, which - are also included in this patch. - - Tested by rebuilding. - -2021-11-08 Lancelot SIX - - Add a const version of gdb_argv:as_array_view - This commits adds const versions for the GET and AS_ARRAX_VIEW methods - of gdb_argv. Those methods will be required in the following patch of - the series. - -2021-11-08 Simon Marchi - - gdb: fix nulltr -> nullptr typo - Change-Id: I04403bd85ec3fa75ea14130d68daba675a2a8aeb - -2021-11-08 Simon Marchi - - gdb: tweak scoped_disable_commit_resumed uses when resuming all threads in non-stop - When doing "continue -a" in non-stop mode, each thread is individually - resumed while the commit resumed state is enabled. This forces the - target to commit each resumption immediately, instead of being able to - batch things. - - The reason is that there is no scoped_disable_commit_resumed around the - loop over threads in continue_1, when "non_stop && all_threads" is true. - Since the proceed function is called once for each thread, the - scoped_disable_commit_resumed in proceed therefore forces commit-resumed - between each thread resumption. Add the necessary - scoped_disable_commit_resumed in continue_1 to avoid that. - - I looked at the MI side of things, the function exec_continue, and found - that it was correct. There is a similar iteration over threads, and - there is a scoped_disable_commit_resumed at the function scope. This is - not wrong, but a bit more than we need. The branches that just call - continue_1 do not need it, as continue_1 takes care of disabling commit - resumed. So, move the scoped_disable_commit_resumed to the inner scope - where we iterate on threads and proceed them individually. - - Here's an example debugging a multi-threaded program attached by - gdbserver (debug output trimmed for brevity): - - $ ./gdb -nx -q --data-directory=data-directory -ex "set non-stop" -ex "tar rem :1234" - (gdb) set debug remote - (gdb) set debug infrun - (gdb) c -a - Continuing. - [infrun] proceed: enter - [infrun] scoped_disable_commit_resumed: reason=proceeding - [remote] Sending packet: $vCont;c:p14388.14388#90 - [infrun] reset: reason=proceeding - [infrun] maybe_set_commit_resumed_all_targets: enabling commit-resumed for target remote - [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target remote - [infrun] proceed: exit - [infrun] proceed: enter - [infrun] scoped_disable_commit_resumed: reason=proceeding - [remote] Sending packet: $vCont;c:p14388.1438a#b9 - [infrun] reset: reason=proceeding - [infrun] maybe_set_commit_resumed_all_targets: enabling commit-resumed for target remote - [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target remote - [infrun] proceed: exit - ... and so on for each thread ... - - Notice how we send one vCont;c for each thread. With the patch applied, we - send a single vCont;c at the end: - - [infrun] scoped_disable_commit_resumed: reason=continue all threads in non-stop - [infrun] proceed: enter - [infrun] scoped_disable_commit_resumed: reason=proceeding - [infrun] reset: reason=proceeding - [infrun] proceed: exit - [infrun] clear_proceed_status_thread: Thread 85790.85792 - [infrun] proceed: enter - [infrun] scoped_disable_commit_resumed: reason=proceeding - [infrun] reset: reason=proceeding - [infrun] proceed: exit - ... proceeding threads individually ... - [infrun] reset: reason=continue all threads in non-stop - [infrun] maybe_set_commit_resumed_all_targets: enabling commit-resumed for target remote - [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target remote - [remote] Sending packet: $vCont;c#a8 - - Change-Id: I331dd2473c5aa5114f89854196fed2a8fdd122bb - -2021-11-08 Simon Marchi - - gdb: make dwarf2_find_containing_comp_unit take a dwarf2_per_bfd - While reading another patch, I saw that this function didn't need to - take a dwarf2_per_objfile, but could take a dwarf2_per_bfd instead. - It doesn't change the behavior, but doing this shows that this function - is objfile-independent (can work with only the shared per-bfd data). - - Change-Id: I58f9c9cef6688902e95226480285da2d0005d77f - -2021-11-08 Simon Marchi - - gdb: remove bpstat typedef, rename bpstats to bpstat - I don't find that the bpstat typedef, which hides a pointer, is - particularly useful. In fact, it confused me many times, and I just see - it as something to remember that adds cognitive load. Also, with C++, - we might want to be able to pass bpstats objects by const-reference, not - necessarily by pointer. - - So, remove the bpstat typedef and rename struct bpstats to bpstat (since - it represents one bpstat, it makes sense that it is singular). - - Change-Id: I52e763b6e54ee666a9e045785f686d37b4f5f849 - -2021-11-08 Nick Alcock - - libctf: add CTF format specification - It's been a long time since most of this was written: it's long past - time to put it in the binutils source tree. It's believed correct and - complete insofar as it goes: it documents format v3 (the current - version) but not the libctf API or any earlier versions. (The - earlier versions can be read by libctf but not generated by it, and you - are highly unlikely ever to see an example of any of them.) - - libctf/ChangeLog - 2021-11-08 Nick Alcock - - * doc/ctf-spec.texi: New file. - * configure.ac (MAKEINFO): Add. - (BUILD_INFO): Likewise. - (AC_CONFIG_FILES) [doc/Makefile]: Add. - * Makefile.am [BUILD_INFO] (SUBDIRS): Add doc/. - * doc/Makefile.am: New file. - * doc/Makefile.in: Likewise. - * configure: Regenerated. - * Makefile.in: Likewise. - -2021-11-08 GDB Administrator - - Automatic date update in version.in - -2021-11-07 Alan Modra - - Correct ld script wildcard matching description - Goes with commit 68bbb9f788d0 - - * ld.texi (Input Section Wildcards): Delete paragraph incorrectly - saying '*' does not match '/'. - -2021-11-07 Mike Frysinger - - sim: sh: fix conversion of PC to an integer - On LLP64 targets where sizeof(long) != sizeof(void*), this code fails: - sim/sh/interp.c:704:24: error: cast from pointer to integer of different size -Werror=pointer-to-int-cast] - 704 | do { memstalls += ((((long) PC & 3) != 0) ? (n) : ((n) - 1)); } while (0) - | ^ - - Since this code simply needs to check alignment, cast it using uintptr_t - which is the right type for this. - -2021-11-07 Mike Frysinger - - sim: sh: clean up time(NULL) call - Casting 0 to a pointer via (long *) doesn't work on LLP64 targets: - error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast] - - It's also unnecessary here. We can simply pass NULL like every other - bit of code does. - -2021-11-07 Mike Frysinger - - sim: sh: break utime logic out of _WIN32 check - Some _WIN32 targets provide utime (like mingw), so move the header - include out from _WIN32 and under the specific HAVE_UTIME_H check. - - sim: sh: drop errno extern - This isn't needed on any reasonable target nowadays, and no other - source does this, and breaks with some mingw targets, so punt the - extern entirely. - - sim: sh: fix isnan redefinition with mingw targets - The code assumes that all _WIN32 targets are the same and can - define isnan to _isnan. For mingw targets, they provide an isnan - define already, so no need for the fallback here. - - sim: arm/bfin/rx: undefine page size from system headers - Some targets (like cygwin) will export page size defines that clash - with our local usage here. Undefine the system one to fix building - for these targets. - - sim: ppc: switch to libiberty environ.h - Drop our compat code and assume environ exists to simplify. - We did this for all other targets already, but ppc was missed. - - sim: sh: enable -Werror everywhere - With most of the warnings fixed in interp.c, we can enable -Werror - here too now. There are some -Wmaybe-uninitialized warnings still - lurking that look legitimate, but we don't flag those are fatal, - and I don't have the expertise to dive into each opcode to figure - out the right way to clean them up. - - sim: sh: fix uninitialized variable usage with pdmsb - This block of code relies on i to control which bits to test and how - many times to run through the loop, but it never actually initialized - it. There is another chunk of code that handles the pdmsb instruction - that sets i to 16, so use that here too assuming it's correct. The - programming manual suggests this is the right value too, but I am by - no means a SuperH DSP expert. The tests are still passing though ... - - sim: sh: constify a few read-only lookup tables - - sim: sh: fix various parentheses warnings - Add parentheses to a bunch of places where the compiler suggests we - do to avoid confusion to most readers. - - sim: sh: fix unused-value warnings - These macro expansions are deliberate in not using the computed value - so that they trigger side-effects (possible invalid memory accesses) - but while otherwise being noops. Add a (void) cast so the compiler - knows these are intentional. - - sim: sh: rework register layout with anonymous unions & structs - Now that we require C11, we can leverage anonymous unions & structs - to fix a long standing issue with the SH register layout. The use - of sregs.i for sh-dsp has generated a lot of compiler warnings about - the access being out of bounds -- it only has 7 elements declared, - but code goes beyond that to reach into the fregs that follow. But - now that we have anonymous unions, we can reduce the nested names - and have sregs cover all of these registers. - -2021-11-07 GDB Administrator - - Automatic date update in version.in - -2021-11-06 Tiezhu Yang - - sim: mips: use sim_fpu_to{32,64}u to fix build warnings - Since the first argument type is unsigned32 or unsigned64, just use - sim_fpu_to{32,64}u instead of sim_fpu_to{32,64}i to fix the following - build warnings: - - CC cp1.o - .../sim/mips/cp1.c: In function 'convert': - .../sim/mips/cp1.c:1425:32: warning: pointer targets in passing argument 1 of 'sim_fpu_to32i' differ in signedness [-Wpointer-sign] - status |= sim_fpu_to32i (&result32, &wop, round); - ^~~~~~~~~ - In file included from .../sim/mips/sim-main.h:67, - from .../sim/mips/cp1.c:46: - .../sim/mips/../common/sim-fpu.h:270:22: note: expected 'signed32 *' {aka 'int *'} but argument is of type 'unsigned32 *' {aka 'unsigned int *'} - INLINE_SIM_FPU (int) sim_fpu_to32i (signed32 *i, const sim_fpu *f, - ^~~~~~~~~~~~~ - .../sim/mips/cp1.c:1429:32: warning: pointer targets in passing argument 1 of 'sim_fpu_to64i' differ in signedness [-Wpointer-sign] - status |= sim_fpu_to64i (&result64, &wop, round); - ^~~~~~~~~ - In file included from .../sim/mips/sim-main.h:67, - from .../sim/mips/cp1.c:46: - .../sim/mips/../common/sim-fpu.h:274:22: note: expected 'signed64 *' {aka 'long int *'} but argument is of type 'unsigned64 *' {aka 'long unsigned int *'} - INLINE_SIM_FPU (int) sim_fpu_to64i (signed64 *i, const sim_fpu *f, - ^~~~~~~~~~~~~ - .../sim/mips/cp1.c: In function 'convert_ps': - .../sim/mips/cp1.c:1528:34: warning: pointer targets in passing argument 1 of 'sim_fpu_to32i' differ in signedness [-Wpointer-sign] - status_u |= sim_fpu_to32i (&res_u, &wop_u, round); - ^~~~~~ - In file included from .../sim/mips/sim-main.h:67, - from .../sim/mips/cp1.c:46: - .../sim/mips/../common/sim-fpu.h:270:22: note: expected 'signed32 *' {aka 'int *'} but argument is of type 'unsigned32 *' {aka 'unsigned int *'} - INLINE_SIM_FPU (int) sim_fpu_to32i (signed32 *i, const sim_fpu *f, - ^~~~~~~~~~~~~ - .../sim/mips/cp1.c:1529:34: warning: pointer targets in passing argument 1 of 'sim_fpu_to32i' differ in signedness [-Wpointer-sign] - status_l |= sim_fpu_to32i (&res_l, &wop_l, round); - ^~~~~~ - In file included from .../sim/mips/sim-main.h:67, - from .../sim/mips/cp1.c:46: - .../sim/mips/../common/sim-fpu.h:270:22: note: expected 'signed32 *' {aka 'int *'} but argument is of type 'unsigned32 *' {aka 'unsigned int *'} - INLINE_SIM_FPU (int) sim_fpu_to32i (signed32 *i, const sim_fpu *f, - ^~~~~~~~~~~~~ - -2021-11-06 Alan Modra - - Modernise yyerror - Newer versions of bison emit a prototype for yyerror - void yyerror (const char *); - This clashes with some of our old code that declares yyerror to return - an int. Fix that in most cases by modernizing yyerror. bfin-parse.y - uses the return value all over the place, so for there disable - generation of the prototype as specified by posix. - - binutils/ - * arparse.y (yyerror): Return void. - * dlltool.c (yyerror): Likewise. - * dlltool.h (yyerror): Likewise. - * sysinfo.y (yyerror): Likewise. - * windmc.h (yyerror): Likewise. - * mclex.c (mc_error): Extract from .. - (yyerror): ..here, both now returning void. - gas/ - * config/bfin-parse.y (yyerror): Define. - (yyerror): Make static. - * itbl-parse.y (yyerror): Return void. - ld/ - * deffilep.y (def_error): Return void. - -2021-11-06 Alan Modra - - ubsan: undefined shift in mach-o.c - This one was logically wrong too. If file_ptr was 64 bits, then -1U - is extended to 0x00000000ffffffff, probably not what was intended - here. - - * mach-o.c (FILE_ALIGN): Correct expression. - -2021-11-06 Fangrui Song - - readelf: Support RELR in -S and -d and output - readelf -r dumping support is not added in this patch. - - include/ - * elf/common.h: Add SHT_RELR, DT_RELR{,SZ,ENT} - bfd/ - * elf.c (_bfd_elf_print_private_bfd_data): Add DT_RELR{,SZ,ENT}. - binutils/ - * readelf.c (get_dynamic_type): Add DT_RELR{,SZ,ENT}. - (get_section_type_name): Add SHT_RELR. - -2021-11-06 Fangrui Song - - readelf: Make DT_PREINIT_ARRAYSZ's output style match DT_INIT_ARRAYSZ - The output now looks like: - - - 0x0000000000000021 (PREINIT_ARRAYSZ) 0x10 - + 0x0000000000000021 (PREINIT_ARRAYSZ) 16 (bytes) - 0x0000000000000019 (INIT_ARRAY) 0xbefc90 - 0x000000000000001b (INIT_ARRAYSZ) 536 (bytes) - - * readelf.c (process_dynamic_section): Handle DT_PREINIT_ARRAYSZ. - -2021-11-06 Mike Frysinger - - sim: clarify license text via COPYING file - The project has been using GPL v3 for a while now in the source files, - and the arm & ppc ports have carried a copy of the COPYING file. Lets - move those up to the top sim dir like other projects to make it clear. - - Also drop the ppc/COPYING.LIB as it's not really referenced by any - source as everything is GPL v3. - -2021-11-06 GDB Administrator - - Automatic date update in version.in - -2021-11-05 Tom Tromey - - Introduce make_unique_xstrndup - This adds a new make_unique_xstrndup function, which is the "n" - analogue of make_unique_xstrdup. It also updates a couple existing - places to use this function. - -2021-11-05 Pedro Alves - - Avoid /proc/pid/mem races (PR 28065) - PR 28065 (gdb.threads/access-mem-running-thread-exit.exp intermittent - failure) shows that GDB can hit an unexpected scenario -- it can - happen that the kernel manages to open a /proc/PID/task/LWP/mem file, - but then reading from the file returns 0/EOF, even though the process - hasn't exited or execed. - - "0" out of read/write is normally what you get when the address space - of the process the file was open for is gone, because the process - execed or exited. So when GDB gets the 0, it returns memory access - failure. In the bad case in question, the process hasn't execed or - exited, so GDB fails a memory access when the access should have - worked. - - GDB has code in place to gracefully handle the case of opening the - /proc/PID/task/LWP/mem just while the LWP is exiting -- most often the - open fails with EACCES or ENOENT. When it happens, GDB just tries - opening the file for a different thread of the process. The testcase - is written such that it stresses GDB's logic of closing/reopening the - /proc/PID/task/LWP/mem file, by constantly spawning short lived - threads. - - However, there's a window where the kernel manages to find the thread, - but the thread exits just after and clears its address space pointer. - In this case, the kernel creates a file successfully, but the file - ends up with no address space associated, so a subsequent read/write - returns 0/EOF too, just like if the whole process had execed or - exited. This is the case in question that GDB does not handle. - - Oleg Nesterov gave this suggestion as workaround for that race: - - gdb can open(/proc/pid/mem) and then read (say) /proc/pid/statm. - If statm reports something non-zero, then open() was "successfull". - - I think that might work. However, I didn't try it, because I realized - we have another nasty race that that wouldn't fix. - - The other race I realized is that because we close/reopen the - /proc/PID/task/LWP/mem file when GDB switches to a different inferior, - then it can happen that GDB reopens /proc/PID/task/LWP/mem just after - a thread execs, and before GDB has seen the corresponding exec event. - I.e., we can open a /proc/PID/task/LWP/mem file accessing the - post-exec address space thinking we're accessing the pre-exec address - space. - - A few months back, Simon, Oleg and I discussed a similar race: - - [Bug gdb/26754] Race condition when resuming threads and one does an exec - https://sourceware.org/bugzilla/show_bug.cgi?id=26754 - - The solution back then was to make the kernel fail any ptrace - operation until the exec event is consumed, with this kernel commit: - - commit dbb5afad100a828c97e012c6106566d99f041db6 - Author: Oleg Nesterov - AuthorDate: Wed May 12 15:33:08 2021 +0200 - Commit: Linus Torvalds - CommitDate: Wed May 12 10:45:22 2021 -0700 - - ptrace: make ptrace() fail if the tracee changed its pid unexpectedly - - This however, only applies to ptrace, not to the /proc/pid/mem file - opening case. Also, even if it did apply to the file open case, we - would want to support current kernels until such a fix is more wide - spread anyhow. - - So all in all, this commit gives up on the idea of only ever keeping - one /proc/pid/mem file descriptor open. Instead, make GDB open a - /proc/pid/mem per inferior, and keep it open until the inferior exits, - is detached or execs. Make GDB open the file right after the inferior - is created or is attached to or forks, at which point we know the - inferior is stable and stopped and isn't thus going to exec, or have a - thread exit, and so the file open won't fail (unless the whole process - is SIGKILLed from outside GDB, at which point it doesn't matter - whether we open the file). - - This way, we avoid both races described above, at the expense of using - more file descriptors (one per inferior). - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28065 - Change-Id: Iff943b95126d0f98a7973a07e989e4f020c29419 - -2021-11-05 Andrew Burgess - - gdb/testsuite: use gdb_get_line_number - Replaces a hard coded line number with a use of gdb_get_line_number. - - I suspect that the line number has, over time, come adrift from where - it was supposed to be stopping. When the test was first added, line - 770 pointed at the final 'return 0' in function main. Over time, as - things have been added, line 770 now points at some random location in - the middle of main. - - So, I've marked the 'return 0' with a comment, and now the test will - always stop there. - - I also removed an old comment from 1997 talking about how these tests - will only pass with the HP compiler, followed by an additional comment - from 2000 saying that the tests now pass with GCC. - - I get the same results before and after this change. - -2021-11-05 Alan Modra - - PR28541, unstable cie offset in the output of readelf - Calculating "0 - pointer" can indeed result in seeming randomness as - the pointer address varies. - - PR 28541 - * dwarf.c (display_debug_frames): Don't print cie offset when - invalid, print "invalid" instead. Remove now redundant warning. - -2021-11-05 Alan Modra - - Missing va_end in aarch64-dis.c - * aarch64-dis.c (extract_fields): Invoke va_end. - -2021-11-05 Alan Modra - - PR28530, Hang in objdump on machine with 196GB RAM - Investigating the PR28530 testcase, which has a fuzzed compression - header with an enormous size, I noticed that decompress_contents is - broken when the size doesn't fit in strm.avail_out. It wouldn't be - too hard to support larger sizes (patches welcome!) but for now just - stop decompress_contents from returning rubbish. - - PR 28530 - * compress.c (decompress_contents): Fail when uncompressed_size - is too big. - (bfd_init_section_decompress_status): Likewise. - -2021-11-05 Alan Modra - - asan: alpha-vms: objdump buffer overflows - * vms-alpha.c (evax_bfd_print_desc): Sanity check buffer access. - (evax_bfd_print_valspec, evax_bfd_print_typspec): Likewise. - (evax_bfd_print_dst): Likewise. - -2021-11-05 GDB Administrator - - Automatic date update in version.in - -2021-11-04 Simon Marchi - - gdb: introduce "set index-cache enabled", deprecate "set index-cache on/off" - The "set index-cache" command is used at the same time as a prefix - command (prefix for "set index-cache directory", for example), and a - boolean setting for turning the index-cache on and off. Even though I - did introduce that, I now don't think it's a good idea to do something - non-standard like this. - - First, there's no dedicated CLI command to show whether the index-cache - is enabled, so it has to be custom output in the "show index-cache - handler". Also, it means there's no good way a MI frontend can find out - if the index-cache is enabled. "-gdb-show index-cache" doesn't show it - in the MI output record: - - (gdb) interpreter-exec mi "-gdb-show index-cache" - ~"\n" - ~"The index cache is currently disabled.\n" - ^done,showlist={option={name="directory",value="/home/simark/.cache/gdb"}} - - Fix this by introducing "set/show index-cache enabled on/off", regular - boolean setting commands. Keep commands "set index-cache on" and "set - index-cache off" as deprecated aliases of "set index-cache enabled", - with respectively the default arguments "on" and "off". - - Update tests using "set index-cache on/off" to use the new command. - Update the regexps in gdb.base/maint.exp to figure out whether the - index-cache is enabled or not. Update the doc to mention the new - commands. - - Change-Id: I7d5aaaf7fd22bf47bd03e0023ef4fbb4023b37b3 - -2021-11-04 Simon Marchi - - gdb: pass/return setting setter/getter scalar values by value - The getter and setter in struct setting always receive and return values - by const reference. This is not necessary for scalar values (like bool - and int), but more importantly it makes it a bit annoying to write a - getter, you have to use a scratch static variable or something similar - that you can refer to: - - const bool & - my_getter () - { - static bool value; - value = function_returning_bool (); - return value; - } - - Change the getter and setter function signatures to receive and return - value by value instead of by reference, when the underlying data type is - scalar. This means that string-based settings will still use - references, but all others will be by value. The getter above would - then be re-written as: - - bool - my_getter () - { - return function_returning_bool (); - } - - This is useful for a patch later in this series that defines a boolean - setting with a getter and a setter. - - Change-Id: Ieca3a2419fcdb75a6f75948b2c920b548a0af0fd - -2021-11-04 Simon Marchi - - gdb: remove command_class enum class_deprecated - The class_deprecated enumerator isn't assigned anywhere, so remove it. - Commands that are deprecated have cmd_list_element::cmd_deprecated set - instead. - - Change-Id: Ib35e540915c52aa65f13bfe9b8e4e22e6007903c - -2021-11-04 Simon Marchi - - gdb: remove unnecessary cmd_list_element::aliases nullptr checks - Remove two unnecessary nullptr checks. If aliases is nullptr, then the - for loops will simply be skipped. - - Change-Id: I9132063bb17798391f8d019af305383fa8e0229f - -2021-11-04 Simon Marchi - - gdbserver: re-generate configure - I get some diffs when running autoconf in gdbserver, probably leftovers - from commit 5dfe4bfcb969 ("Fix format_pieces selftest on Windows"). - Re-generate configure in that directory. - - Change-Id: Icdc9906af95fbaf1047a579914b2983f8ec5db08 - -2021-11-04 H.J. Lu - - Revert "bfd: Always check sections with the corrupt size" - This reverts commit e0f7ea91436dd308a094c4c101fd4169e8245a91. - -2021-11-04 H.J. Lu - - bfd: Always check sections with the corrupt size - Always check sections with the corrupt size for non-MMO files. Skip MMO - files for compress_status == COMPRESS_SECTION_NONE since MMO has special - handling for COMPRESS_SECTION_NONE. - - PR binutils/28530 - * compress.c (bfd_get_full_section_contents): Always check - sections with the corrupt size. - -2021-11-04 Nelson Chu - - RISC-V: Clarify the behavior of .option rvc or norvc. - Add/Remove the rvc extension to/from the riscv_subsets once the - .option rvc/norvc is set. So that we don't need to always check - the riscv_opts.rvc in the riscv_subset_supports, just call the - riscv_lookup_subset to search the subset list is enough. - - Besides, we will need to dump the instructions according to the - elf architecture attributes. That means the dis-assembler needs - to parse the architecture string from the elf attribute before - dumping any instructions, and also needs to recognized the - INSN_CLASS* classes from riscv_opcodes. Therefore, I suppose - some functions will need to be moved from gas/config/tc-riscv.c - to bfd/elfxx-riscv.c, including riscv_multi_subset_supports and - riscv_subset_supports. This is one of the reasons why we need - this patch. - - This patch passes the gcc/binutils regressions of rv32emc-elf, - rv32i-elf, rv64gc-elf and rv64gc-linux toolchains. - - bfd/ - * elfxx-riscv.c (riscv_remove_subset): Remove the extension - from the subset list. - (riscv_update_subset): Add/Remove an extension to/from the - subset list. This is used for the .option rvc or norvc. - * elfxx-riscv.h: Added the extern bool riscv_update_subset. - gas/ - * config/tc-riscv.c (riscv_set_options): Removed the unused - rve flag. - (riscv_opts): Likewise. - (riscv_set_rve): Removed. - (riscv_subset_supports): Removed the riscv_opts.rvc check. - (riscv_set_arch): Don't need to call riscv_set_rve. - (reg_lookup_internal): Call riscv_subset_supports to check - whether the rve is supported. - (s_riscv_option): Add/Remove the rvc extension to/from the - subset list once the .option rvc/norvc is set. - -2021-11-04 Mike Frysinger - - sim: mips: fix missing prototype in multi-run generation - The multi-run logic for mips involves a bit of codegen and rewriting - of files to include per-architecture prefixes. That can result in - files with missing prototypes which cause compiler errors. In the - case of mips-sde-elf targets, we have: - $srcdir/m16run.c -> $builddir/m16mips64r2_run.c - sim_engine_run -> m16mips64r2_engine_run - $srcdir/micromipsrun.c -> micromipsmicromips_run.c - sim_engine_run -> micromips64micromips_engine_run - - micromipsmicromips_run.c:80:1: error: no previous prototype for 'micromips64micromips_engine_run' [-Werror=missing-prototypes] - 80 | micromips64micromips_engine_run (SIM_DESC sd, int next_cpu_nr, int nr_cpus, - - We generate headers for those prototypes in the configure script, - but only include them in the generated multi-run.c file. Update the - rewrite logic to turn the sim-engine.h include into the relevant - generated engine include so these files also have their prototypes. - $srcdir/m16run.c -> $builddir/m16mips64r2_run.c - sim-engine.h -> m16mips64r2_engine.h - $srcdir/micromipsrun.c -> micromipsmicromips_run.c - sim-engine.h -> micromips64micromips_engine.h - -2021-11-04 Alan Modra - - PR28540, segmentation fault on NULL byte_get - PR 28540 - * objdump.c (dump_bfd): Don't attempt load_separate_debug_files - when byte_get is NULL. - -2021-11-04 GDB Administrator - - Automatic date update in version.in - -2021-11-03 Mike Frysinger - - sim: ppc: inline common sim-fpu.c logic - We will never bother building w/out a ../common/ sim directory, - so drop ancient logic supporting that method. - -2021-11-03 Mike Frysinger - - sim: ppc: switch to common builds for callback objects - We don't need to build this anymore ourselves since the common build - includes it and produces the same object code. We also need to pull - in the split constant modules after the refactoring and pulling them - out of nltvals.def & targ-map.o. This doesn't matter for the sim - directly, but does for gdb and other users of libsim. - - We also delete some conditional source tree logic since we already - require this be the "new" combined tree with a ../common/ dir. This - has been the case for decades at this point. - -2021-11-03 Simon Marchi - - gdb: fix gnu-nat build - When building gnu-nat.c, we get: - - CXX gnu-nat.o - gnu-nat.c: In member function 'virtual void gnu_nat_target::create_inferior(const char*, const string&, char**, int)': - gnu-nat.c:2117:13: error: 'struct inf' has no member named 'target_is_pushed' - 2117 | if (!inf->target_is_pushed (this)) - | ^~~~~~~~~~~~~~~~ - gnu-nat.c:2118:10: error: 'struct inf' has no member named 'push_target' - 2118 | inf->push_target (this); - | ^~~~~~~~~~~ - - This is because of a confusion between the generic `struct inferior` - variable and the gnu-nat-specific `struct inf` variable. Fix by - referring to `inferior`, not `inf`. - - Adjust the comment on top of `struct inf` to clarify the purpose of that - type. - - Co-Authored-By: Andrea Monaco - Change-Id: I2fe2f7f6ef61a38d79860fd262b08835c963fc77 - -2021-11-03 Simon Marchi - - gdb/testsuite: set ASAN_OPTIONS=detect_leaks=0 while running tests - We see some additional failures when running the testsuite against a GDB - compiled with ASan, compared to a GDB compiled without ASan. Some of - them are caused by the memory leak report shown by the GDB process when - it exits, and the fact that it makes it exit with a non-zero exit code. - - I generally try to remember to set ASAN_OPTIONS=detect_leaks=0 in my - environment when running the tests, but I don't always do it. I think - it would be nice if the testsuite did it. I don't see any use to have - leak detection when running the tests. That is, unless we ever have a - test that ensures GDB doesn't leak memory, which isn't going to happen - any time soon. - - Here are some tests I found that were affected by this: - - gdb.base/batch-exit-status.exp - gdb.base/many-headers.exp - gdb.base/quit.exp - gdb.base/with-mf.exp - gdb.dwarf2/gdb-add-index.exp - gdb.dwarf2/gdb-add-index-symlink.exp - gdb.dwarf2/imported-unit-runto-main.exp - - Change-Id: I784c7df8a13979eb96587f735c1d33ba2cc6e0ca - -2021-11-03 Tom Tromey - - Use section name in warnings in display_debug_loc - While looking at an apparently malformed executable with - "readelf --debug-dump=loc", I got this warning: - - readelf: ./main: Warning: There is a hole [0x89 - 0x95] in .debug_loc section. - - However, the executable only has a .debug_loclists section. - - This patch fixes the warning messages in display_debug_loc to use the - name of the section that is being processed. - - binutils/ChangeLog - 2021-11-03 Tom Tromey - - * dwarf.c (display_debug_loc): Use section name in warnings. - -2021-11-03 Luis Machado - - [AArch64] Make gdbserver register set selection dynamic - The current register set selection mechanism for AArch64 is static, based - on a pre-populated array of register sets. - - This means that we might potentially probe register sets that are not - available. This is OK if the kernel errors out during ptrace, but probing the - tag_ctl register, for example, does not result in a ptrace error if the kernel - supports the tagged address ABI but not MTE (PR 28355). - - Making the register set selection dynamic, based on feature checks, solves - this and simplifies the code a bit. It allows us to list all of the register - sets only once, and pick and choose based on HWCAP/HWCAP2 or other properties. - - I plan to backport this fix to GDB 11 as well. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28355 - -2021-11-03 Jan Kratochvil - - Fix LD_PRELOAD=/usr/lib64/libasan.so.6 gdb - Currently for a binary compiled normally (without -fsanitize=address) but with - LD_PRELOAD of ASAN one gets: - - $ ASAN_OPTIONS=detect_leaks=0:alloc_dealloc_mismatch=1:abort_on_error=1:fast_unwind_on_malloc=0 LD_PRELOAD=/usr/lib64/libasan.so.6 gdb - ================================================================= - ==1909567==ERROR: AddressSanitizer: alloc-dealloc-mismatch (malloc vs operator delete []) on 0x602000001570 - #0 0x7f1c98e5efa7 in operator delete[](void*) (/usr/lib64/libasan.so.6+0xb0fa7) - ... - 0x602000001570 is located 0 bytes inside of 2-byte region [0x602000001570,0x602000001572) - allocated by thread T0 here: - #0 0x7f1c98e5cd1f in __interceptor_malloc (/usr/lib64/libasan.so.6+0xaed1f) - #1 0x557ee4a42e81 in operator new(unsigned long) (/usr/libexec/gdb+0x74ce81) - SUMMARY: AddressSanitizer: alloc-dealloc-mismatch (/usr/lib64/libasan.so.6+0xb0fa7) in operator delete[](void*) - ==1909567==HINT: if you don't care about these errors you may set ASAN_OPTIONS=alloc_dealloc_mismatch=0 - ==1909567==ABORTING - - Despite the code called properly operator new[] and operator delete[]. - But GDB's new-op.cc provides its own operator new[] which gets translated into - malloc() (which gets recogized as operatore new(size_t)) but as it does not - translate also operators delete[] Address Sanitizer gets confused. - - The question is how many variants of the delete operator need to be provided. - There could be 14 operators new but there are only 4, GDB uses 3 of them. - There could be 16 operators delete but there are only 6, GDB uses 2 of them. - It depends on libraries and compiler which of the operators will get used. - Currently being used: - U operator new[](unsigned long) - U operator new(unsigned long) - U operator new(unsigned long, std::nothrow_t const&) - U operator delete[](void*) - U operator delete(void*, unsigned long) - - Tested on x86_64-linux. - -2021-11-03 Alan Modra - - asan: dlltool buffer overflow: embedded NUL in string - yyleng gives the pattern length, xstrdup just copies up to the NUL. - So it is quite possible writing at an index of yyleng-2 overflows - the xstrdup allocated string buffer. xmemdup quite handily avoids - this problem, even writing the terminating NUL over the trailing - quote. Use it in ldlex.l too where we'd already had a report of this - problem and fixed it by hand, and to implement xmemdup0 in gas. - - binutils/ - * deflex.l (single and double quote strings): Use xmemdup. - gas/ - * as.h (xmemdup0): Use xmemdup. - ld/ - PR 20906 - * ldlex.l (double quote string): Use xmemdup. - -2021-11-03 Mike Frysinger - - sim: mloop: mark a few conditionally used funcs as unused - These are marked inline, so building w/gcc at higher optimization - levels will automatically discard them. But building with -O0 will - trigger unused function warnings, so fix that. - - The common before/after cover functions in the common mloop generator - are not used by all architecture ports. Doesn't seem to be a hard - requirement, so marking them optional (i.e. unused) is fine. - - The cris execute function is conditionally used depending on the - fast-build mode settings, so mark it unused too. - -2021-11-03 Alan Modra - - asan: assert (addr_ranges) <= (start) - That assert would be more obvious if it were reported as - "addr_ranges <= end_ranges". Fix that by using the obvious variable - in the final loop. Stop the assertion by using a signed comparison: - It's possible for the rounding up of the arange pointer to exceed the - end of the block when the block size is fuzzed. - - * dwarf.c (display_debug_aranges): Use "end_ranges" in loop - displaying ranges rather that "start". Simplify rounding up - to 2*address_size boundary. Use signed comparison in loop. - -2021-11-03 Mike Frysinger - - sim: hoist cgen mloop rules up to common builds - These rules don't depend on the target compiler settings, so hoist - the build logic up to the common builds for better parallelization. - - We have to extend the genmloop.sh logic a bit to allow outputting - to a subdir since it always assumed cwd was the right place. - - We leave the cgen maintainer rules in the subdirs for now as they - aren't normally run, and they rely on cgen logic that has not yet - been generalized. - -2021-11-03 Mike Frysinger - - sim: hoist mn10300 & v850 igen rules up to common builds - These rules don't depend on the target compiler settings, so hoist - the build logic up to the common builds for better parallelization. - - We leave the mips rules in place as they depend on complicated - arch-specific configure logic that needs to be untangled first. - -2021-11-03 Mike Frysinger - - sim: hoist gencode & opc2c build rules up to common builds - These rules don't depend on the target compiler settings, so hoist - the build logic up to the common builds for better parallelization. - -2021-11-03 Mike Frysinger - - opcodes: d10v: simplify header includes - This file doesn't use anything from bfd (sysdep.h), so drop that - include. This avoids an implicit dependency on the generated - config.h which can be problematic for build-time tools. - - Also swap stdio.h for stddef.h. This file isn't doing or using - any I/O structures, but it does need NULL. - -2021-11-03 Alan Modra - - PR28523, ld.bfd created undefined symbols on ppc64 - This patch removes any fake (linker created) function descriptor - symbol if its code entry symbol isn't dynamic, to ensure bogus dynamic - symbols are not created. The change to func_desc_adjust requires that - it be run only once, which means ppc64_elf_tls_setup can't call it for - just a few selected symbols. - - PR 28523 - * elf64-ppc.c (func_desc_adjust): If a function entry sym is - not dynamic and has no plt entry, hide any associated fake - function descriptor symbol. - (ppc64_elf_edit): Move func_desc_adjust iteration over syms to.. - (ppc64_elf_tls_setup): ..here. - -2021-11-03 GDB Administrator - - Automatic date update in version.in - -2021-11-02 Tom de Vries - - [gdb/tdep, rs6000] Don't skip system call in skip_prologue - I ran into a case where a breakpoint on _exit never triggered, because it was - set past the end of the _exit prologue, past the end of the exit_group system - call (which does not return). - - More concretely, the breakpoint was set at the last insn show here: - ... - Dump of assembler code for function _exit: - 0x00007ffff7e42ea0 <+0>: 12 00 4c 3c addis r2,r12,18 - 0x00007ffff7e42ea4 <+4>: 60 43 42 38 addi r2,r2,17248 - 0x00007ffff7e42ea8 <+8>: 00 00 00 60 nop - 0x00007ffff7e42eac <+12>: f8 ff e1 fb std r31,-8(r1) - 0x00007ffff7e42eb0 <+16>: 78 1b 7f 7c mr r31,r3 - 0x00007ffff7e42eb4 <+20>: f0 ff c1 fb std r30,-16(r1) - 0x00007ffff7e42eb8 <+24>: ea 00 00 38 li r0,234 - 0x00007ffff7e42ebc <+28>: a0 8b 22 e9 ld r9,-29792(r2) - 0x00007ffff7e42ec0 <+32>: 78 fb e3 7f mr r3,r31 - 0x00007ffff7e42ec4 <+36>: 14 6a c9 7f add r30,r9,r13 - 0x00007ffff7e42ec8 <+40>: 02 00 00 44 sc - 0x00007ffff7e42ecc <+44>: 26 00 00 7c mfcr r0 - 0x00007ffff7e42ed0 <+48>: 00 10 09 74 andis. r9,r0,4096 - ... - - Fix this by treating system calls the same as branches in skip_prologue: - by default, don't skip, such that the breakpoint is set at 0x00007ffff7e42eb8 - instead. - - Tested on ppc64le-linux, on a power 8 machine. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28527 - -2021-11-02 Tom de Vries - - [gdb/testsuite] Handle SIGILL in two gdb.arch powerpc test-cases - On powerpc64le-linux, with test-case gdb.arch/powerpc-addpcis.exp I run into - SIGILL: - ... - (gdb) PASS: gdb.arch/powerpc-addpcis.exp: get hexadecimal valueof "$r3" - stepi^M - ^M - Program terminated with signal SIGILL, Illegal instruction.^M - The program no longer exists.^M - (gdb) PASS: gdb.arch/powerpc-addpcis.exp: set r4 - ... - because it's a power9 insn, and I'm running on a power8 machine. - - Fix this by handling the SIGILL. Likewise in gdb.arch/powerpc-lnia.exp. - - Tested on powerpc64le-linux. - -2021-11-02 Andrew Burgess - - gdb/sim: update my email address - gdb: - - * MAINTAINERS (Global Maintainers): Update my address. - (Responsible Maintainers): Likewise. - (Write After Approval): Likewise. - - sim: - - * MAINTAINERS (Global Maintainers): Update my address. - -2021-11-02 Tom de Vries - - [gdb/testsuite] Fix stepi test-cases with unix/-m32/-fPIE/-pie - When running test-case gdb.base/step-indirect-call-thunk.exp with target board - unix/-m32/-fPIE/-pie, I run into: - ... - (gdb) stepi^M - 0x5655552e 22 { /* inc.1 */^M - (gdb) stepi^M - 0x56555530 22 { /* inc.1 */^M - (gdb) stepi^M - 0x565555f7 in __x86.get_pc_thunk.ax ()^M - (gdb) FAIL: gdb.base/step-indirect-call-thunk.exp: stepi into return thunk - ... - - In contrast, with unix/-m32 we have instead: - ... - (gdb) stepi^M - 0x08048407 22 { /* inc.1 */^M - (gdb) stepi^M - 23 return x + 1; /* inc.2 */^M - (gdb) stepi^M - 0x0804840c 23 return x + 1; /* inc.2 */^M - (gdb) stepi^M - 24 } /* inc.3 */^M - (gdb) stepi^M - 0x08048410 24 } /* inc.3 */^M - (gdb) stepi^M - 0x0804848f in __x86_return_thunk ()^M - (gdb) PASS: gdb.base/step-indirect-call-thunk.exp: stepi into return thunk - ... - - The test-case doesn't expect to run into __x86.get_pc_thunk.ax, which is a - PIC helper function for x86_64-linux. - - Fix this by insn-stepping through it. - - Likewise in a few other test-cases. - - Tested on x86_64-linux. - -2021-11-02 GDB Administrator - - Automatic date update in version.in - -2021-11-01 Alan Modra - - ARM: match armeb output for unwind-pacbti-m test - * testsuite/gas/arm/unwind-pacbti-m.d: Match armeb output. - -2021-11-01 Bruno Larsen - - [gdb/doc]: Updated manpages to be consistent with help - Updated manpages to be consistent with help information provided by the - binary. The main changes are: - - * Making all long-form options have '--', instead of a single '-'; - * added most of the missing options to the manpage; - * removed the information about using '+' instead of '-', since it - doesn't seem to be supported anymore. - - This also fixes 2 upstream bugs: - * https://sourceware.org/bugzilla/show_bug.cgi?id=23965; by adding - --args to the manpage - * https://sourceware.org/bugzilla/show_bug.cgi?id=10619; by adding the - double dashes - -2021-11-01 Alan Modra - - macho-o archive sanity checks - Anti-fuzzing checks. - - * mach-o.c (bfd_mach_o_fat_archive_p): Sanity check entry offset - and size against file size. - -2021-11-01 Alan Modra - - objcopy buffer overflow - "tocopy" in this code was an int, which when the size to be copied was - larger than MAXINT could result in tocopy being negative. A negative - value of course is less than BUFSIZE, but when converted to - bfd_size_type is extremely large. - - PR 995 - * objcopy.c (copy_unknown_object): Correct calculation of "tocopy". - Use better variable types. - -2021-11-01 Przemyslaw Wirkus - - arm: add armv9-a architecture to -march - Update also include: - + New value of Tag_CPU_arch EABI attribute (22) is added. - + Updated missing Tag_CPU_arch EABI attributes. - + Updated how we combine archs 'v4t_plus_v6_m' as this mechanism - have to handle new Armv9 as well. - - Regression tested on `arm-none-eabi` cross Binutils and no issues. - - bfd/ - - * archures.c: Define bfd_mach_arm_9. - * bfd-in2.h (bfd_mach_arm_9): Define bfd_mach_arm_9. - * cpu-arm.c: Add 'armv9-a' option to -march. - * elf32-arm.c (using_thumb2_bl): Update assert check. - (arch_has_arm_nop): Add TAG_CPU_ARCH_V9. - (bfd_arm_get_mach_from_attributes): Add case for TAG_CPU_ARCH_V9. - Update assert. - (tag_cpu_arch_combine): Updated table. - (v9): New table.. - - binutils/ - - * readelf.c (arm_attr_tag_CPU_arch): Update with - - elfcpp/ - - * arm.h: Update TAG_CPU_ARCH_ enums with correct values. - - gas/ - - * NEWS: Update docs. - * config/tc-arm.c (get_aeabi_cpu_arch_from_fset): Return Armv9-a - for -amarch=all. - (aeabi_set_public_attributes): Update assert. - * doc/c-arm.texi: Update docs. - * testsuite/gas/arm/armv9-a_arch.d: New test. - * testsuite/gas/arm/attr-march-all.d: Update test with v9. - - include/ - - * elf/arm.h Update TAG_CPU_ARCH_ defines with correct values. - * opcode/arm.h (ARM_EXT3_V9A): New macro. - (ARM_ARCH_NONE): Updated with arm_feature_set.core size. - (FPU_NONE): Updated. - (ARM_ANY): Updated. - (ARM_ARCH_UNKNOWN): New macro. - (ARM_FEATURE_LOW): Updated. - (ARM_FEATURE_CORE): Updated. - (ARM_FEATURE_CORE_LOW): Updated. - (ARM_FEATURE_CORE_HIGH): Updated. - (ARM_FEATURE_COPROC): Updated. - (ARM_FEATURE): Updated. - (ARM_FEATURE_ALL): New macro. - - opcodes/ - - * arm-dis.c (select_arm_features): Support bfd_mach_arm_9. - Also Update bfd_mach_arm_unknown to use new macro ARM_ARCH_UNKNOWN. - -2021-11-01 Mike Frysinger - - sim: iq2000: reduce -Wno-error scope - Clean up the warnings in sim-if, then reduce the -Werror disable to - the files that still aren't clean that now that we require GNU make - and can set variables on a per-object basis. - - sim: lm32: reduce -Wno-error scope - Clean up some warnings in dv-lm32cpu, and all in sim-if, then reduce - the -Werror disable to the files that still aren't clean that now that - we require GNU make and can set variables on a per-object basis. - - sim: frv: reduce -Wno-error scope - Only two files in here still generates warnings, so reduce the -Werror - disable to that now that we require GNU make and can set variables on - a per-object basis. - - sim: m32r: reduce -Wno-error scope - Only two files in here still generates warnings, so reduce the -Werror - disable to that now that we require GNU make and can set variables on - a per-object basis. - - sim: mips: reduce -Wno-error scope - Fix a few printf warnings in sim-main.c, and then we're left with only - one file in here still generating warnings, so reduce the -Werror - disable to that alone now that we require GNU make and can set variables - on a per-object basis. - - sim: erc32: reduce -Wno-error scope - Only one file in here still generates warnings, so reduce the -Werror - disable to that alone now that we require GNU make and can set variables - on a per-object basis. - - sim: cris: reduce -Wno-error scope - Only two files in here still generates warnings, so reduce the -Werror - disable to that now that we require GNU make and can set variables on - a per-object basis. - - sim: sh: reduce -Wno-error scope - Only one file in here still generates warnings, so reduce the -Werror - disable to that alone now that we require GNU make and can set variables - on a per-object basis. - - sim: or1k: build with -Werror - The only warnings left in this port are a few maybe-uninitialized, - but we don't abort the build for them, so turn on -Werror everywhere. - - sim: igen: minor build output alignment fix - The custom echo was off by one space relative to all the others. - - sim: ppc: fix the printf fix for 32-bit systems - The time delta is a 64-bit value too. - - sim: m68hc11: clean up pointer casts - The void *data field is used to past arbitrary data between event - handlers, and these are using it to pass an integer. Fix up the - casts to avoid using (long) to cast to/from pointers since there - is no guarantee that's the right size. - - sim: d10v: clean up pointer casts - Use %p to print pointers instead of trying to cast them to longs. - - sim: bfin: cast pointers using uintptr_t - We can't assume that sizeof(long) == sizeof(void*), so change all - these casts over to uintptr_t. - - sim: ppc: clean up printf format handling - Don't blindly cast every possible type to (long). Change to the right - printf format specifier whether it be a 64-bit type or a pointer. - - sim: ppc: switch core types to stdint.h types - There's no need to define these ourselves anymore, so switch to the - stdint.h types. This will be important when we start using PRI* - defines with printf formats. - - sim: mn10300: clean up pointer casts - The void *data field is used to past arbitrary data between event - handlers, and these are using it to pass an enum. Fix up the casts - to avoid using (long) to cast to/from pointers since there is no - guarantee that's the right size. - - sim: events: clean up trace casts - Don't blindly cast every possible type to (long). Change to the right - printf format specifier whether it be a 64-bit type or a pointer. - - sim: ppc: handle \r in igen inputs [PR sim/28476] - Make sure we consume & ignore \r bytes in inputs in case the file - encodings are from a non-LF systems (e.g. Windows). - - sim: ppc: constify strings in igen tooling - -2021-11-01 GDB Administrator - - Automatic date update in version.in - -2021-10-31 Tom Tromey - - Fix latent bug in DWARF test case - On my branch that replaces the DWARF psymtab reader, - dw2-stack-boundary.exp started failing. However, when I look at the - output in gdb.log, it is correct: - - file /home/tromey/gdb/build/gdb/testsuite/outputs/gdb.dwarf2/dw2-stack-boundary/dw2-stack-boundary - Reading symbols from /home/tromey/gdb/build/gdb/testsuite/outputs/gdb.dwarf2/dw2-stack-boundary/dw2-stack-boundary... - During symbol reading: location description stack overflow - During symbol reading: location description stack underflow - - What happens to cause the failure is that the two branches in - gdb_test_multiple appear in this order: - - -re "\r\nDuring symbol reading: location description stack underflow" { - [...] - -re "\r\nDuring symbol reading: location description stack overflow" { - - The first one will match the above, without causing the second one to - ever match -- leading to a spurious failure. - - Anchoring the regexps seems to fix the problem, and works for the - current gdb as well. - -2021-10-31 Tom Tromey - - Fix unittest.exp failure due to 'set debuginfod' addition - The 'set debuginfod' change caused a regression in unittest.exp: - - Running selftest help_doc_invariants. - help doc broken invariant: command 'info set debuginfod' help doc first line is not terminated with a '.' character - help doc broken invariant: command 'set debuginfod' help doc first line is not terminated with a '.' character - help doc broken invariant: command 'show debuginfod' help doc first line is not terminated with a '.' character - Self test failed: self-test failed at ../../binutils-gdb/gdb/unittests/command-def-selftests.c:100 - - This patch fixes the problem. I'm checking it in. - -2021-10-31 Mike Frysinger - - sim: ppc: use silent build rules here too - The ppc codebase is unique and doesn't leverage common/, so have to - add silent rules to it specifically. - - sim: rl78: drop obsolete manual dependency rules - We have GNU make generate these for us automatically now, so there's - no need to manually specify any deps. - - sim: drop unused targ-vals.h includes - This is used in a few places where it's not needed. Drop the include - to avoid the build-time generated header file as we move to drop it. - - sim: unify callback.o building - Now that the use of TARGET_xxx defines have been removed, we can move - this to the common logic so we only build it once for multi-targets. - - sim: nltvals: pull target open flags out into a dedicated source file - Like we just did for pulling out the errno & signal maps, pull out the - open flag map into a dedicated common file. All newlib ports are using - the same map which makes it easy. - - sim: nltvals: localize TARGET_ defines - Code should not be using these directly, instead they should be - resolving these dynamically via the open_map. Rework the common - callback code that was using the defines to use symbolic names - instead, and localize some of the defines in the ARM code (since - it's a bit unclear how many different APIs it supports currently), - then remove the defines out of the header so no new code can rely on - them. - - sim: nltvals: pull target signal out into a dedicated source file - Like we just did for pulling out the errno map, pull out the signal - map into a dedicated common file. All newlib ports are using the - same signal map which makes it easy. - -2021-10-31 Mike Frysinger - - sim: nltvals: pull target errno out into a dedicated source file - The current system maintains a list of target errno constants in the - nltvals.def file, then runs a build-time tool to turn that into a C - file. This list of errno values is the same for all arches, so we - don't need the arch-specific flexibility. Further, these are only - for newlib/libgloss environments, which makes it confusing to support - other userland runtimes (like Linux). Let's simplify to make this - easier to understand & build. We don't namespace the variables yet, - but sets up the framework for it. - - Create a new target-newlib-errno.c template file. The template file - is hand written, but the inline map is still automatically generated. - - This allows us to move it to the common set of objects so it's only - built once in a multi-target build. - - Now we can remove the output from the gentmap build-time tool since - it's checked into the tree. - - Then we stop including the errno lists in nltvals.def since nothing - uses it. - -2021-10-31 Mike Frysinger - - sim: erc32: use silent build rules with sis linkage - -2021-10-31 Mike Frysinger - - sim: erc32: fix a few more build warnings - Tweak the if indentation & brace style to avoid ambiguous warnings. - - Add ATTRIBUTE_UNUSED to UART functions that aren't used when FAST_UART - is defined (which is the default). - -2021-10-31 Orgad Shaneh - - sim: erc32: fix signedness compatibility and redefinition warnings - -2021-10-31 Mike Frysinger - - sim: add arch-specific conditional logic - This will make it easy to include arch-specific logic (build files) - as we migrate ports to the common top level build. - - sim: v850: delete old gencode logic - The v850 port used to have a gencode helper, but it was deleted long - ago. Clean up the settings that no longer make sense w/out it. - - sim: common: merge multiple clean commands - This provides a minor speedup when cleaning in a multi-target build. - - sim: m32c: tighten up opc2c build output - Drop the single debugging line that repeats the command line option, - and use the silent build helpers to tighten up output. - - sim: tighten up build regen rules - Update the makefile & configure related rules to use the silent - build helpers. - - sim: tighten up gencode output - Update the gencode rules to use the silent build helpers. - - sim: igen: tighten up build output - Add a new stamp helper for quiet builds, and don't dump the command - line options when it runs. That isn't standard tool behavior, and - doesn't really seem necessary in any way. - - sim: tighten up stamp rules - Add a new ECHO_STAMP helper and convert existing stamp code over - to it. This is mostly common rules and cgen mloop rules. - - sim: silence stamp touch rules - We pretty much never care about these stamp touches, so silence them. - Also switch to using $@ when it makes sense. - - sim: standardize move-if-change rules - Use the srcroot path and make them all silent. - - sim: mips/v850: remove redundant variable setup - The common/Make-common.in fragment already provides these variables. - -2021-10-31 Orgad Shaneh - - sim: fix compilation on mingw64 [PR sim/28476] - ...by reordering includes. - - 1. sim-utils.c - - sim/mips/sim-main.h defines UserMode, while there is a struct in winnt.h - which has UserMode as a member. So if sim-main.h is included before winnt.h, - compilation fails. - - 2. ppc - - registers.h defines CR, which is used as a member in winnt.h. - - winsock2.h is included by sys/time.h, so sys/time.h has to be included - before registers.h. - - Bug: https://sourceware.org/PR28476 - -2021-10-31 Alan Modra - - Don't include coff/pe.h in coff-x86_64.c - This (and other) code from coffcode.h is broken for x86_64_coff_vec, - and has been ever since support was added in 2006 commit 99ad839030c1 - Here, bfd_coff_aoutsz must match coff_swap_aouthdr_out otherwise we - end up writing garbage. - - /* Note that peicode.h fills in a PEAOUTHDR, not an AOUTHDR. - include/coff/pe.h sets AOUTSZ == sizeof (PEAOUTHDR)). */ - char * buff; - bfd_size_type amount = bfd_coff_aoutsz (abfd); - - buff = (char *) bfd_malloc (amount); - if (buff == NULL) - return false; - - coff_swap_aouthdr_out (abfd, & internal_a, buff); - amount = bfd_bwrite (buff, amount, abfd); - - We have removed support for --target=x86_64-coff, likely because it - never worked properly, but still produce coff-x86_64.o with - --enable-targets=all. This means objcopy can recognize x86_64 COFF - files but will write garbage to the output file, a fact found by - fuzzers. I suspect x86_64 COFF is still broken after this fix, and - mention of coff-x86_64.* should be removed from bfd/Makefile.am. - - * coff-x86_64.c: Don't include coff/pe.h. - (COFF_WITH_pex64): Don't define here. - * pe-x86_64.c: Include coff/pe.h and other headers. - (PEI_HEADERS): Define. - -2021-10-31 Alan Modra - - Re: PR28420, ecoff fuzzing failures - sym_ptr_ptr NULL results in segfaults. - - PR 28420 - * ecoff.c (ecoff_slurp_reloc_table): Don't leave sym_ptr_ptr NULL. - -2021-10-31 Alan Modra - - ubsan: alpha-vms: undefined shift - * vms-alpha.c (evax_bfd_print_image): Shift left 1u. - - PR28518: signed integer overflow & free on unmalloced address - PR 28518 - * vms-alpha.c (build_module_list): Don't lose malloc buffer address. - Use unsigned variables. - -2021-10-31 GDB Administrator - - Automatic date update in version.in - -2021-10-30 Simon Marchi - - gdb: fix gdb.gdb/unittest.exp with C++17 compiler - On a machine with gcc 11, I get: - - FAIL: gdb.gdb/unittest.exp: test_completion: tab complete "maintenance selftest string_v" (second tab) (timeout) - FAIL: gdb.gdb/unittest.exp: test_completion: tab complete "maintenance selftest string_vie" (timeout) - - That's because when compiling with C++ >= 17, we use the standard - version of string_view, and don't have a selftest for it. So the list - of selftests shown by the tab completion when completing "string_v" - differs. - - Change the test to use the copy_* tests instead. - - Change-Id: I85f6aa44ee5fc9652b9bd4451e0506b89773526b - -2021-10-30 Aaron Merey - - gdb.texinfo: Expand documentation for debuginfod - Add section describing GDB's usage of debuginfod. - - Refer to this new section in the description of the '--with-debuginfod' - configure option. - - Mention debuginfod in the 'Separate Debug Files' section. - -2021-10-30 Aaron Merey - - gdb: add set/show commands for managing debuginfod - Add 'set debuginfod' command. Accepts 'on', 'off' or 'ask' as an - argument. 'on' enables debuginfod for the current session. 'off' - disables debuginfod for the current session. 'ask' will prompt - the user to either enable or disable debuginfod when the next query - is about to be performed: - - This GDB supports auto-downloading debuginfo from the following URLs: - ... - Enable debuginfod for this session? (y or [n]) y - Debuginfod has been enabled. - To make this setting permanent, add 'set debuginfod on' to .gdbinit. - - For interactive sessions, 'ask' is the default. For non-interactive - sessions, 'off' is the default. - - Add 'show debuginfod status' command. Displays whether debuginfod - is set to 'on', 'off' or 'ask'. - - Add 'set/show debuginfod urls' commands. Accepts a string of - space-separated debuginfod server URLs to be queried. The default - value is copied from the DEBUGINFOD_URLS environment variable. - - Finally add 'set/show debuginfod verbose' commands to control whether - debuginfod-related output is displayed. Verbose output is enabled - by default. - - (gdb) run - Starting program: /bin/sleep 5 - Download failed: No route to host. Continuing without debug info for /lib64/libc.so.6. - - If GDB is not built with debuginfod then these commands will just display - - Support for debuginfod is not compiled into GDB. - -2021-10-30 GDB Administrator - - Automatic date update in version.in - -2021-10-29 Simon Marchi - - gdb: remove TYPE_FIELD_DWARF_BLOCK - Remove TYPE_FIELD_DWARF_BLOCK, replace with type::field + - field::loc_dwarf_block. - - Change-Id: I10af9410bb5f46d342b8358a7956998c7e804b64 - -2021-10-29 Simon Marchi - - gdb: remove TYPE_FIELD_STATIC_PHYSADDR - Remove TYPE_FIELD_STATIC_PHYSADDR replace with type::field + - field::loc_physaddr. - - Change-Id: Ica9bc4a48f34750ec82ec86c298d3ecece81bcbd - -2021-10-29 Simon Marchi - - gdb: remove TYPE_FIELD_STATIC_PHYSNAME - Remove TYPE_FIELD_STATIC_PHYSNAME, replace with type::field + - field::loc_physname. - - Change-Id: Ie35d446b67dd1d02f39998b406001bdb7e6d5abb - -2021-10-29 Simon Marchi - - gdb: remove TYPE_FIELD_ENUMVAL - Remove TYPE_FIELD_ENUMVAL, replace with type::field + - field::loc_enumval. - - Change-Id: I2ada73e4635aad3363ce2eb22c1dc52698ee2072 - -2021-10-29 Simon Marchi - - gdb: remove TYPE_FIELD_BITPOS - Remove TYPE_FIELD_BITPOS, replace its uses with type::field + - field::loc_bitpos. - - Change-Id: Iccd8d5a77e5352843a837babaa6bd284162e0320 - -2021-10-29 Simon Marchi - - gdb: remove TYPE_FIELD_LOC_KIND - Remove TYPE_FIELD_LOC_KIND, replace its uses with type::field + - field::loc_kind. - - Change-Id: Ib124a26365df82ac1d23df7962d954192913bd90 - -2021-10-29 Simon Marchi - - gdb: remove FIELD_DWARF_BLOCK macro - Remove FIELD_DWARF_BLOCK, replace its uses with field::loc_dwarf_block. - - Change-Id: I66b7d6a960cb5e341e61e21bd3cc9a6ac26de6a8 - -2021-10-29 Simon Marchi - - gdb: remove FIELD_STATIC_PHYSADDR macro - Remove FIELD_LOC_KIND_PHYSADDR, replace its uses with - field::loc_physaddr. - - Change-Id: Ifd8b2bdaad75f42bfb1404ef8c396ffe7e10ac55 - -2021-10-29 Simon Marchi - - gdb: remove FIELD_STATIC_PHYSNAME macro - Remove FIELD_STATIC_PHYSNAME, replace its uses with field::loc_physname. - - Change-Id: Iaa8952410403b4eb5bbd68411feea27e2405d657 - -2021-10-29 Simon Marchi - - gdb: remove FIELD_ENUMVAL macro - Remove FIELD_ENUMVAL, replace its uses with field::loc_enumval. - - Change-Id: Id4861cee91a8bb583a9836f1aa5da0a320fbf4d9 - -2021-10-29 Simon Marchi - - gdb: remove FIELD_BITPOS macro - Remove FIELD_BITPOD, replace its uses with field::loc_bitpos. - - Change-Id: Idb99297e0170661254276c206383a7e9bf1a935a - -2021-10-29 Simon Marchi - - gdb: remove FIELD_LOC_KIND macro - Remove FIELD_LOC_KIND, replace its uses with field::loc_kind or - call_site_target::loc_kind. - - Change-Id: I0368d8c3ea269d491bb215aa70e32edbdf55f389 - -2021-10-29 Tom Tromey - - Add gdb.Architecture.integer_type Python function - This adds a new Python function, gdb.Architecture.integer_type, which - can be used to look up an integer type of a given size and - signed-ness. This is useful to avoid dependency on debuginfo when a - particular integer type would be useful. - - v2 moves this to be a method on gdb.Architecture and addresses other - review comments. - -2021-10-29 Tom Tromey - - Remove ada_value_print_inner - I noticed that the only caller of ada_value_print_inner is - valprint.c:do_val_print (via ada_language::value_print_inner), meaning - that the try/catch logic in this function is redundant. This patch - removes the wrapper function. - - Regression tested on x86-64 Fedora 34. - -2021-10-29 Tom Tromey - - Document resolve_dynamic_type oddity - Today I re-learned that resolve_dynamic_type can return a type for - which is_dynamic_type returns true. This can happen for an array - whose elements have dynamic type -- the array is reported as dynamic, - but resolving the elements would be incorrect, because each element - might have a different type after resolution. - - You can see the special case in resolve_dynamic_array_or_string: - - if (ary_dim != NULL && ary_dim->code () == TYPE_CODE_ARRAY) - ... - else - ... - - I looked into having the TYPE_CODE_ARRAY case in - is_dynamic_type_internal follow this same logic, but that breaks down - on the gdb.fortran/dynamic-ptype-whatis.exp test case. In particular - this code in fortran_undetermined::evaluate: - - value *callee = std::get<0> (m_storage)->evaluate (nullptr, exp, noside); - if (noside == EVAL_AVOID_SIDE_EFFECTS - && is_dynamic_type (value_type (callee))) - callee = std::get<0> (m_storage)->evaluate (nullptr, exp, EVAL_NORMAL); - - ... relies on is_dynamic_type returning true for such an array. - - I wasn't really sure of the best way to fix this, so in the meantime I - wrote this patch, which documents the oddity so that I might have a - chance of remembering this in the future. - -2021-10-29 Tom Tromey - - Avoid self-test failures on x86-linux - The disassembly tests in "maint selftest" will fail on x86-linux. - This happens because opcodes rejects an attempt to disassemble for an - arch with a 64-bit address size when bfd_vma is 32-bit. - - This patch avoids this problem by avoiding the test in this case. I - chose to do it this way because this seems to be the only situation - where opcodes checks the size of bfd_vma. - - For v2 of this patch, I've also updated memory_error_test to do the - same thing. This is needed due to the "improve error reporting from - the disassembler" patch. - -2021-10-29 Tom de Vries - - [gdb/build] Fix build with --disable-unit-tests - A build with --disable-unit-tests currently run into: - ... - ld: maint.o: in function \ - `maintenance_selftest_completer(cmd_list_element*, completion_tracker&, - char const*, char const*)': - src/gdb/maint.c:1183: undefined reference to \ - `selftests::for_each_selftest( - gdb::function_view< - void (std::__cxx11::basic_string, - std::allocator > const&)>)' - ... - - Fix this by guarding the call to selftests::for_each_selftest in - maintenance_selftest_completer with GDB_SELF_TEST, such that the "-verbose" - completion still works. - - Rebuild on x86_64-linux and ran gdb.gdb/unittest.exp. - -2021-10-29 Enze Li - - Document "memory-tag-violations". - * gdb/doc/gdb.texinfo: (Data): Document '-memory-tag-violations'. - (Command Options): Update the example. - -2021-10-29 Tejas Belagod - - Support for a new pacbti unwind opcode. - This patch adds readelf support for decoding the exception table - opcode for restoring the RA_AUTH_CODE pseudo register defined by the - EHABI - (https://github.com/ARM-software/abi-aa/releases/download/2021Q1/ehabi32.pdf - Section 10.3). - - * readelf.c (decode_arm_unwind_bytecode): Add support to decode - restoring RA_AUTH_CODE pseudo register. - -2021-10-29 Alan Modra - - Re: arm: add unwinder encoding support for PACBTI - Move the gas testsuite files to where they belong. - -2021-10-29 Alan Modra - - ELF core file size checks - Catch fuzzed segments where p_offset + p_filesz wraps, and limit error - output. - - * elfcore.h (elf_core_file_p): Rewrite segment checks using - bfd_get_file_size. Set read_only on file size errors. - * elfcode.h (elf_swap_shdr_in): Don't repeat error message. - -2021-10-29 Alan Modra - - obcopy vs. files with silly section alignment - We already ignore stupid segment alignment when rewriting headers, - ignore section alignment too. - - * elf.c (rewrite_elf_program_header): Ignore section alignment - power greater than 62. - -2021-10-29 GDB Administrator - - Automatic date update in version.in - -2021-10-28 Stafford Horne - - gdb: Add OpenRISC gdbserver and native config news - The previous patches added gdbserver and native debugging support - for OpenRISC targets. This patch documents that in the news. - - gdb: or1k: add single step for linux native debugging - Needed for single stepping in Linux, this adds the or1k implementation - of or1k_software_single_step. Most of the implementation is borrowed - from the bare metal single step code from or1k_single_step_through_delay - which has been extracted and shared in helper function - or1k_delay_slot_p. - -2021-10-28 Stafford Horne - - gdb: or1k: add native linux support - This patch adds support for running gdb natively on OpenRISC linux. - Debugging support is provided via the linux PTRACE interface which is - mostly handled by GDB genric code. This patch provides the logic of how - to read and write the ptrace registers between linux and GDB. - - Single stepping is privided in a separate patch. - -2021-10-28 Stafford Horne - - gdb: or1k: add generated linux descriptor file - - gdb: or1k: fixup linux regcache comment - The old comment was not properly updated from the RISC-V example used. - Update it to match OpenRISC. - -2021-10-28 Stafford Horne - - gdb: or1k: implement gdb server - This patch adds gdbserver support for OpenRISC. This has been used for - debugging the glibc port that in being worked on here: - - https://github.com/openrisc/or1k-glibc/tree/or1k-port-2 - - Hence the comment about registers definitions being inline with glibc. - -2021-10-28 Christian Biesinger - - [sim] Include defs.h in ppc/hw_memory.c - To fix this error (seen on cygwin): - /../../sim/ppc/../common ../../../sim/ppc/hw_memory.c - In file included from ../../gnulib/import/stdlib.h:100, - from ../../../sim/ppc/hw_memory.c:28: - ../../gnulib/import/unistd.h:663:3: error: #error "Please include config.h first." - 663 | #error "Please include config.h first." - | ^~~~~ - ../../gnulib/import/unistd.h:665:24: error: expected ';' before 'extern' - 665 | _GL_INLINE_HEADER_BEGIN - | ^ - | ; - ../../gnulib/import/unistd.h:2806:22: error: expected ';' before 'extern' - 2806 | _GL_INLINE_HEADER_END - | ^ - | ; - -2021-10-28 Markus Klein - - ARM assembler: Allow up to 32 single precision registers in the VPUSH and VPOP instructions. - PR 28436 - * config/tc-arm.c (do_vfp_nsyn_push_pop_check): New function. - (do_vfp_nsyn_pop): Use the new function. - (do_vfp_nsyn_push): Use the new function. - * testsuite/gas/arm/v8_1m-mve.s: Add new instructions. - * testsuite/gas/arm/v8_1m-mve.d: Updated expected disassembly. - -2021-10-28 Simon Marchi - - gdb: use ptid_t::to_string in infrun debug messages - In debug messages, I think it would be more helpful to print ptid using - the simple "pid.lwp.tid" notation in infrun debug messages. I am - currently debugging some fork issues, and find the pid_to_str output not - so useful, as it doesn't tell which process a thread belongs to. - - It currently shows up like this: - - [infrun] resume_1: step=1, signal=GDB_SIGNAL_0, trap_expected=0, current thread [Thread 0x7ffff7d95740 (LWP 892942)] at 0x55555555521f - - With the patch, it shows up like this: - - [infrun] resume_1: step=1, signal=GDB_SIGNAL_0, trap_expected=1, current thread [894072.894077.0] at 0x5555555551d9 - - Change-Id: I130796d7dfb0d8e763b8358d8a6002701d80c4ea - -2021-10-28 Simon Marchi - - gdb: add selftest name completion - After the previous commit, it is easy to add completion for selftest - names. Again, this is not particularly high value, but I rarely touched - completion, so it served as a simple example to get some practice. - - Change the for_each_selftest_ftype parameter to gdb::function_view, so - that we can pass a lambda that captures things. - - Change-Id: I87cac299ddca9ca7eb0ffab78342e850a98d954c - -2021-10-28 Tejas Belagod - - arm: add unwinder encoding support for PACBTI - This patch adds support for encoding the Return Address Authentication pseudo - register - '.save {ra_auth_code}' as defined by the DWARF ABI - in the - exception tables where the opcode is defined by the EHABI - - gas/Changelog: - - * config/tc-arm.c (arm_reg_type): Add new type REG_TYPE_PSEUDO. - (reg_expected_msgs): Add message for pseudo reg type. - (reg_list_els): Add new reg list type REGLIST_PSEUDO. - (parse_reg_list): Handle new REGLIST_PSEUDO type. - (s_arm_unwind_save_pseudo): Encode pseudo reg list save in exception - tables. - (s_arm_unwind_save): Handle new REG_TYPE_PSEUDO. - (reg_names): Add ra_auth_code pseudo register. - * testsuite/gas/arm/unwind-pacbti-m.s: New test. - * testsuite/gas/arm/unwind-pacbti-m.d: New test. - * testsuite/gas/arm/unwind-pacbti-m-readelf.d: New test. - -2021-10-28 Simon Marchi - - gdb: add "maint set/show selftest verbose" commands and use process_options - I saw the new -verbose switch to "maint selftests" and thought it would - be nice for it to use the option framework. For example, that makes - having completion easy. It's not that high value, given this is a - maintenance command, but I had never used the framework myself, so it - was a good way to practice. - - This patch also adds the "maint set/show selftest verbose" setting. It - would be possible to use option framework without adding the setting, - but using the framework makes adding the option almost trivial, so I - thought why not. - - Change-Id: I6687faa0713ff3da60b398253211777100094144 - -2021-10-28 Tom de Vries - - [gdb/testsuite] Update some test-cases to GPLv3 - I noticed some files in the test-suite have GPLv2 notices. - - Update these to GPLv3. - -2021-10-28 Simon Marchi - - gdb: add add_setshow_prefix_cmd - There's a common pattern to call add_basic_prefix_cmd and - add_show_prefix_cmd to add matching set and show commands. Add the - add_setshow_prefix_cmd function to factor that out and use it at a few - places. - - Change-Id: I6e9e90a30e9efb7b255bf839cac27b85d7069cfd - -2021-10-28 Tom de Vries - - [gdb/testsuite] Require python in gdb.server/server-kill-python.exp - I came across this when running test-case gdb.server/server-kill-python.exp - with a gdb configured without python: - ... - builtin_spawn gdb -nw -nx -data-directory data-directory -iex set height 0 \ - -iex set width 0 -quiet -iex set height 0 -iex set width 0 \ - -ex source outputs/gdb.server/server-kill-python/file1.py^M - FAIL: gdb.server/server-kill-python.exp: ensure inferior is running - Executing on target: kill -9 28535 (timeout = 300) - builtin_spawn -ignore SIGHUP kill -9 28535^M - file1.py:1: Error in sourced command file:^M - Undefined command: "import". Try "help".^M - ... - - Fix this by testing for python support in the test-case. - - Tested on aarch64-linux (with python support disabled) and x86_64-linux (with - python support enabled). - -2021-10-28 Tom de Vries - - [gdb/testsuite] Fix assembly comments in gdb.dwarf2/clang-debug-names.exp.tcl - On openSUSE Leap 15.2 aarch64 I ran into: - ... - clang-debug-names-debug.S:72: \ - Error: junk at end of line, first unrecognized character is `#' - ... - due to: - ... - 71 .Ldebug_names_start: - 72 .short 5 # Header: version - ... - - Fix this by using the /* ... */ comment style instead: - ... - $ sed -i 's% #\([^"]*\)%/*\1 */%' clang-debug-names.exp.tcl - ... - - Tested on aarch64-linux and x86_64-linux. - -2021-10-28 Tom de Vries - - [gdb/symtab] Handle DW_AT_string_length with location list - Consider a fortran routine where a string variable s is modified: - ... - subroutine f(s) - character*(*) s - print *, s - s(1:3) = 'oof' - print *, s - end subroutine f - ... - - When compiling with optimization level -O1 and printing the type of - variable s we get: - ... - $ gdb -q -batch outputs/gdb.opt/fortran-string/fortran-string \ - -ex "b f" \ - -ex run \ - -ex "ptype s" - Breakpoint 1 at 0x4006f7: file fortran-string.f90, line 21. - - Breakpoint 1, f (s=..., _s=_s@entry=3) at fortran-string.f90:21 - 21 subroutine f(s) - type = character*1 - ... - while with -O0 we have instead: - ... - type = character (3) - ... - - The problem is that the type of s is: - ... - <1><2d6>: Abbrev Number: 21 (DW_TAG_string_type) - <2d7> DW_AT_string_length: 0xbf (location list) - <2db> DW_AT_byte_size : 4 - ... - where the DW_AT_string_length is a location list, a case that is not handled - by attr_to_dynamic_prop. - - Fix this by handling attr->form_is_section_offset () in attr_to_dynamic_prop. - - Tested on x86_64-linux. - - The test-case is based on gdb.opt/fortran-string.exp from - https://src.fedoraproject.org/rpms/gdb/raw/f32/f/gdb-archer-vla-tests.patch . - I've updated the copyrights to stretch to 2021. - - [ I've tried to create a dwarf assembly test-case for this, but didn't - manage. ] - - Co-Authored-By: Jan Kratochvil - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=26910 - -2021-10-28 Kavitha Natarajan - - [gdb/testsuite] Initialize anonymous union in gdb.cp/koenig.cc - GDB test fails while running the test case gdb.cp/koenig.exp using - clang compiler: - [...] - p foo (p_union) - No symbol "p_union" in current context. - (gdb) FAIL: gdb.cp/koenig.exp: p foo (p_union) - [...] - - In the testcase, "p_union" is an unused/uninitialized variable of - anonymous union type. Clang does not emit symbol for unused anonymous - union/struct variables at any optimization level. Since the compiler - itself is not emitting the symbol for "p_union", debug info is also - not emitted when built with debug option. If the anonymous union is - initialized (or used), then clang emits the symbol "p_union" which - enables emitting debug info for "p_union". - [...] - p foo (p_union) - Cannot resolve function foo to any overloaded instance - (gdb) PASS: gdb.cp/koenig.exp: p foo (p_union) - [...] - -2021-10-28 Alan Modra - - asan: mmo: NULL dereferenc in mmo_xore_32 - mmo_get_loc can return NULL. It's commented even, and that the caller - then must handle a split field. mmo_xore_* don't handle split fields, - instead just segfault. Stop that happening, and refuse to recognise - fuzzed mmo files that trigger this problem. - - * mmo.c (mmo_get_loc): Don't declare inline. - (mmo_xore_64, mmo_xore_32, mmo_xore_16): Remove forward decls. - Return pointer, don't dereference NULL. - (mmo_scan): Return error on mmo_get_loc returning NULL. - -2021-10-28 Alan Modra - - bfd: remove use of INLINE - No need to use anything fancy, plain inline works just as well. - - * bfd-in.h (INLINE): Don't define. - * bfd-in2.h: Regenerate. - * aoutx.h: Replace use of INLINE with inline. - * elf-eh-frame.c: Likewise. - * elf32-score7.c: Likewise. - * elfxx-mips.c: Likewise. - * ihex.c: Likewise. - * mach-o.c: Likewise. - * mmo.c: Likewise. - -2021-10-28 Alan Modra - - ASSERT in empty output section with address - * ldlang.c (lang_do_assignments_1): Correct "dot" inside ignored - sections. - * testsuite/ld-scripts/empty-address-4.d, - * testsuite/ld-scripts/empty-address-4.s, - * testsuite/ld-scripts/empty-address-4.t: New test. - * testsuite/ld-scripts/empty-address.exp: Run it. - -2021-10-28 GDB Administrator - - Automatic date update in version.in - -2021-10-27 Alan Modra - - asan: alpha-vms: buffer overflows - Yet more anti-fuzzer sanity checking - - * vms-alpha.c (evax_bfd_print_egsd): Sanity check record and - name lengths before access. - (evax_bfd_print_etir_stc_ir, evax_bfd_print_etir): Likewise. - -2021-10-27 Alan Modra - - ubsan: arm: undefined shift - left shift of 2 by 31 places cannot be represented in type 'int' - - * arm-dis.c (print_insn_thumb16): Avoid undefined behaviour. - -2021-10-27 Tom Tromey - - Fix watchpoints with multiple threads on Windows - A recent internal change pointed out that watchpoints were not working - on Windows when the inferior was multi-threaded. This happened - because the debug registers were only updated for certain threads -- - in particular, those that were being resumed and that were not marked - as suspended. In the case of single-stepping, the need to update the - debug registers in other threads could also be "forgotten". - - This patch changes windows-nat.c to mark all threads needing a debug - register update. This brings the code closer to what gdbserver does - (though, unfortunately, it still seems more complicated than needed). - -2021-10-27 Tom de Vries - - [gdb/testsuite] Fix port detection in gdb.debuginfod/fetch_src_and_symbols.exp - On OBS I ran into this failure with test-case - gdb.debuginfod/fetch_src_and_symbols.exp: - ... - Failed to listen for connections: Address already in use^M - [Thu Oct 21 11:48:49 2021] (559/559): started http server on IPv6 port=8000^M - ... - FAIL: gdb.debuginfod/fetch_src_and_symbols.exp: local_url: find port timeout - ... - - The test-case is trying to start debuginfod on a port to see if it's - available, and it handles either this message: - "started http server on IPv4 IPv6 port=$port" - meaning success, or: - "failed to bind to port" - meaning failure, in which case the debuginfod instance is killed, and we try - the next port. - - The test-case only uses the v4 address 127.0.0.1, so fix this by: - - accepting "started http server on IPv4 port=$port" - - rejecting "started http server on IPv6 port=$port" - - Tested on x86_64-linux. - -2021-10-27 Simon Marchi - - gdb: fix value.c build on 32-bits - When building on ARM (32-bits), we errors like this: - - /home/smarchi/src/binutils-gdb/gdb/value.c: In function 'gdb::array_view value_contents_for_printing(value*)': - /home/smarchi/src/binutils-gdb/gdb/value.c:1252:35: error: narrowing conversion of 'length' from 'ULONGEST' {aka 'long long unsigned int'} to 'size_t' {aka 'unsigned int'} [-Werror=narrowing] - 1252 | return {value->contents.get (), length}; - | ^~~~~~ - - Fix that by using gdb::make_array_view, which does the appropriate - conversion. - - Change-Id: I7d6f2e75d7440d248b8fb18f8272ee92954b404d - -2021-10-27 Nelson Chu - - RISC-V: Tidy riscv assembler and disassembler. - Tidy the gas/config/tc-riscv.c and opcodes/riscv-dis.c, to prepare for - moving the released extensions (including released vendor extensions) - from integration branch back to mainline. - - * Added parts of missing comments. - - * Updated md_show_usage. - - * For validate_riscv_insn, riscv_ip and print_insn_args, unify the - following pointer names, - - oparg: pointed to the parsed operand defined in the riscv_opcodes. - - asarg: pointed to the parsed operand from assembly. - - opargStart: recorded the parsed operand name from riscv_opcodes. - - asargStart: recorded the parsed operand name from assembly. - - gas/ - * config/tc-riscv.c: Added parts of missind comments and updated - the md_show_usage. - (riscv_multi_subset_supports): Tidy codes. - (validate_riscv_insn): Unify the pointer names, oparg, asarg, - opargStart and asargStart, to prepare for moving the released - extensions from integration branch back to mainline. - (riscv_ip): Likewise. - (macro_build): Added fmtStart, also used to prepare for moving - released extensions. - (md_show_usage): Added missing descriptions for new options. - opcodes/ - * riscv-dis.c (print_insn_args): Unify the pointer names, - oparg and opargStart, to prepare for moving the released - extensions from integration branch back to mainline. - -2021-10-27 Maciej W. Rozycki - - opcodes: Fix RPATH not being set for dynamic libbfd dependency - If built as a shared library, libopcodes has a load-time dependency on - libbfd, which is recorded in the dynamic section, however without a - corresponding RPATH entry for the directory to find libbfd in. This - causes loading to fail whenever libbfd is only pulled by libopcodes - indirectly and libbfd has been installed in a directory that is not in - the dynamic loader's search path. - - It does not happen with the programs included with binutils or GDB, - because they all also pull libbfd when using libopcodes, but it can - happen with external software, e.g.: - - $ gdbserver --help - gdbserver: error while loading shared libraries: libbfd-[...].so: cannot open shared object file: No such file or directory - $ - - (not our `gdbserver'). - - Indirect dynamic dependencies are handled by libtool automatically by - adding RPATH entries as required, however our setup for libopcodes - prevents this from happening by linking in libbfd with an explicit file - reference sneaked through to the linker directly behind libtool's back - via the `-Wl' linker command-line option rather than via `-l' combined - with a suitable library search path specified via `-L', as it would be - usually the case, or just referring to the relevant .la file in a fully - libtool-enabled configuration such as ours. - - According to an observation in the discussion back in 2007[1][2][3] that - has led to the current arrangement it is to prevent libtool from picking - up the wrong version of libbfd. It does not appear to be needed though, - not at least with our current libtool incarnation, as directly referring - `libbfd.la' does exactly what it should, as previously suggested[4], and - with no link-time reference to the installation directory other than to - set RPATH. Uninstalled version of libopcodes has libbfd's build-time - location prepended to RPATH too, as also expected. - - Use a direct reference to `libbfd.la' then, making the load error quoted - above go away. Alternatively `-L' and `-l' could be used to the same - effect, but it seems an unnecessary complication and just another way to - circumvent rather than making use of libtool. - - References: - - [1] "compile failure due to undefined symbol", - - - [2] same, - - [3] same, - - [4] same, - - opcodes/ - * Makefile.am: Remove obsolete comment. - * configure.ac: Refer `libbfd.la' to link shared BFD library - except for Cygwin. - * Makefile.in: Regenerate. - * configure: Regenerate. - -2021-10-27 GDB Administrator - - Automatic date update in version.in - -2021-10-27 H.J. Lu - - gold: Place .note.gnu.property section before other note sections - Place the .note.gnu.property section before all other note sections to - avoid being placed between other note sections with different alignments. - - PR gold/28494 - * layout.cc (Layout::create_note): Set order to ORDER_PROPERTY_NOTE - for the .note.gnu.property section. - * layout.h (Output_section_order): Add ORDER_PROPERTY_NOTE. - -2021-10-26 Tom de Vries - - [gdb/doc] Fix print inferior-events default - In the docs about print inferior-events we read: - ... - By default, these messages will not be printed. - ... - - That used to be the case, but is no longer so since commit f67c0c91715 "Enable - 'set print inferior-events' and improve detach/fork/kill/exit messages". - - Fix this by updating the docs. - -2021-10-26 GDB Administrator - - Automatic date update in version.in - -2021-10-25 Simon Marchi - - gdb: change functions returning value contents to use gdb::array_view - The bug fixed by this [1] patch was caused by an out-of-bounds access to - a value's content. The code gets the value's content (just a pointer) - and then indexes it with a non-sensical index. - - This made me think of changing functions that return value contents to - return array_views instead of a plain pointer. This has the advantage - that when GDB is built with _GLIBCXX_DEBUG, accesses to the array_view - are checked, making bugs more apparent / easier to find. - - This patch changes the return types of these functions, and updates - callers to call .data() on the result, meaning it's not changing - anything in practice. Additional work will be needed (which can be done - little by little) to make callers propagate the use of array_view and - reap the benefits. - - [1] https://sourceware.org/pipermail/gdb-patches/2021-September/182306.html - - Change-Id: I5151f888f169e1c36abe2cbc57620110673816f3 - -2021-10-25 Simon Marchi - - gdbsupport: add assertions in array_view - Add assertions to ensure we don't access an array_view out of bounds. - Enable these assertions only when _GLIBCXX_DEBUG is set, as we did for - gdb::optional. - - Change-Id: Iffaee38252405073735ed123c8e57fde6b2c6be3 - -2021-10-25 Simon Marchi - - gdbserver: make target_pid_to_str return std::string - I wanted to write a warning that included two target_pid_to_str calls, - like this: - - warning (_("Blabla %s, blabla %s"), - target_pid_to_str (ptid1), - target_pid_to_str (ptid2)); - - This doesn't work, because target_pid_to_str stores its result in a - static buffer, so my message would show twice the same ptid. Change - target_pid_to_str to return an std::string to avoid this. I don't think - we save much by using a static buffer, but it is more error-prone. - - Change-Id: Ie3f649627686b84930529cc5c7c691ccf5d36dc2 - -2021-10-25 H.J. Lu - - x86: Also handle stores for -muse-unaligned-vector-move - * config/tc-i386.c (encode_with_unaligned_vector_move): Also - handle stores. - * testsuite/gas/i386/unaligned-vector-move.s: Add stores. - * testsuite/gas/i386/unaligned-vector-move.d: Updated. - * testsuite/gas/i386/x86-64-unaligned-vector-move.d: Likewise. - -2021-10-25 Tom de Vries - - [gdb/testsuite] Fix duplicate in gdb.mi/mi-var-cp.exp - With test-case gdb.mi/mi-var-cp.exp I run into this duplicate: - ... - PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:104 (set breakpoint) - PASS: gdb.mi/mi-var-cp.exp: create varobj for s - PASS: gdb.mi/mi-var-cp.exp: create varobj for s - DUPLICATE: gdb.mi/mi-var-cp.exp: create varobj for s - ... - - This is due to a duplicate test name here: - ... - $ cat -n gdb/testsuite/gdb.mi/mi-var-cp.cc - ... - 100 int reference_to_struct () - 101 { - 102 /*: BEGIN: reference_to_struct :*/ - 103 S s = {7, 8}; - 104 S& r = s; - 105 /*: - 106 mi_create_varobj S s "create varobj for s" - 107 mi_create_varobj R r "create varobj for s" - ... - - Fix this by using "create varobj for r" instead. - - Tested on x86_64-linux. - -2021-10-25 Nick Alcock - - libctf, ld: handle nonrepresentable types better - ctf_type_visit (used, among other things, by the type dumping code) was - aborting when it saw a nonrepresentable type anywhere: even a single - structure member with a nonrepresentable type caused an abort with - ECTF_NONREPRESENTABLE. This is not useful behaviour, given that the - abort comes from a type-resolution we are only doing in order to - determine whether the type is a structure or union. We know - nonrepresentable types can't be either, so handle that case and - pass the nonrepresentable type down. - - (The added test verifies that the dumper now handles this case and - prints nonrepresentable structure members as it already does - nonrepresentable top-level types, rather than skipping the whole - structure -- or, without the previous commit, skipping the whole types - section.) - - ld/ChangeLog - 2021-10-25 Nick Alcock - - * testsuite/ld-ctf/nonrepresentable-member.*: New test. - - libctf/ChangeLog - 2021-10-25 Nick Alcock - - * ctf-types.c (ctf_type_rvisit): Handle nonrepresentable types. - -2021-10-25 Nick Alcock - - libctf: dump: do not stop dumping types on error - If dumping of a single type fails, we obviously can't dump it; but just - as obviously this doesn't make the other types in the types section - invalid or undumpable. So we should not propagate errors seen when - type-dumping, but rather ignore them and carry on, so we dump as many - types as we can (leaving out the ones we can't grok). - - libctf/ChangeLog - 2021-10-25 Nick Alcock - - * ctf-dump.c (ctf_dump_type): Do not abort on error. - -2021-10-25 Nick Alcock - - binutils, ld: make objdump --ctf's parameter optional - ld by default (and always, unless adjusted with a hand-rolled linker - script) emits deduplicated CTF into the .ctf section. But viewing - it needs you to explicitly tell objdump this: it doesn't default - its argument, even though what you always end up typing is - --ctf=.ctf. - - This is annoying, so make the argument optional. - - binutils/ChangeLog - 2021-10-25 Nick Alcock - - * objdump.c (usage): --ctf now has an optional argument. - (main): Adjust accordingly. - (dump_ctf): Default it. - * doc/ctf.options.texi: Adjust. - - ld/ChangeLog - 2021-10-25 Nick Alcock - - * testsuite/ld-ctf/array.d: Change --ctf=.ctf to --ctf. - * testsuite/ld-ctf/conflicting-cycle-1.B-1.d: Likewise. - * testsuite/ld-ctf/conflicting-cycle-1.B-2.d: Likewise. - * testsuite/ld-ctf/conflicting-cycle-1.parent.d: Likewise. - * testsuite/ld-ctf/conflicting-cycle-2.A-1.d: Likewise. - * testsuite/ld-ctf/conflicting-cycle-2.A-2.d: Likewise. - * testsuite/ld-ctf/conflicting-cycle-2.parent.d: Likewise. - * testsuite/ld-ctf/conflicting-cycle-3.C-1.d: Likewise. - * testsuite/ld-ctf/conflicting-cycle-3.C-2.d: Likewise. - * testsuite/ld-ctf/conflicting-cycle-3.parent.d: Likewise. - * testsuite/ld-ctf/conflicting-enums.d: Likewise. - * testsuite/ld-ctf/conflicting-typedefs.d: Likewise. - * testsuite/ld-ctf/cross-tu-cyclic-conflicting.d: Likewise. - * testsuite/ld-ctf/cross-tu-cyclic-nonconflicting.d: Likewise. - * testsuite/ld-ctf/cross-tu-into-cycle.d: Likewise. - * testsuite/ld-ctf/cross-tu-noncyclic.d: Likewise. - * testsuite/ld-ctf/cycle-1.d: Likewise. - * testsuite/ld-ctf/cycle-2.A.d: Likewise. - * testsuite/ld-ctf/cycle-2.B.d: Likewise. - * testsuite/ld-ctf/cycle-2.C.d: Likewise. - * testsuite/ld-ctf/data-func-conflicted.d: Likewise. - * testsuite/ld-ctf/diag-cttname-null.d: Likewise. - * testsuite/ld-ctf/diag-cuname.d: Likewise. - * testsuite/ld-ctf/diag-parlabel.d: Likewise. - * testsuite/ld-ctf/enum-forward.d: Likewise. - * testsuite/ld-ctf/enums.d: Likewise. - * testsuite/ld-ctf/forward.d: Likewise. - * testsuite/ld-ctf/function.d: Likewise. - * testsuite/ld-ctf/nonrepresentable.d: Likewise. - * testsuite/ld-ctf/slice.d: Likewise. - * testsuite/ld-ctf/super-sub-cycles.d: Likewise. - -2021-10-25 Nick Alcock - - binutils: make objdump/readelf --ctf-parent actually useful - This option has been present since the very early days of the - development of libctf as part of binutils, and it shows. Back in the - earliest days, I thought we might handle ambiguous types by introducing - new ELF sections on the fly named things like .ctf.foo.c for ambiguous - types found only in foo.c, etc. This turned out to be a terrible idea, - so we moved to using a CTF archive in the .ctf section which contained - all the CTF dictionaries -- but the --ctf-parent option in objdump and - readelf was never adjusted, and lingered as a mechanism to specify CTF - parent dictionaries in sections other than .ctf, even though the linker - has no way to produce parent dictionaries in different sections from - their children, libctf's ctf_open can't handle such split-up - parent/child dicts, and they are never found in the wild, emitted by GNU - ld or by any known third-party linking tool. - - Meanwhile, the actually-useful ctf_link feature (albeit not used by ld) - which lets you remap the names of CTF archive members (so you can end up - with a parent archive member named something other than ".ctf", still - contained with all its children in a single .ctf section) had no support - in objdump or readelf: there was no way to tell them that these members - were parents, so all the types in the associated child dicts always - appeared corrupted, referencing nonexistent types from a parent objdump - couldn't find. - - So adjust --ctf-parent so that rather than taking a section name it - takes a member name instead (if not specified, the name is ".ctf", which - is what GNU ld emits). Because the option was always useless before - now, this is expected to have no backward-compatibility implications. - - As part of this, we have to slightly adjust the code which skips the - archive member name if redundant: right now it skips it if it's ".ctf", - on the assumption that this name will almost always be at the start - of the objdump output and thus we'll end up with a shared dump - and then smaller, headed dumps for the per-TU child dicts; but if - the parent name has been changed, that won't be true any more. - - So change the rules to "members named .ctf which appear first in the - first have their member name skipped". Since we now need to count - members, move from ctf_archive_iter (for which passing in extra - parameters requires defining a new struct and is clumsy) to - ctf_archive_next, allowing us to just *call* dump_ctf_archive_member and - maintain a member count in the obvious way. In the process we fix a - tiny difference between readelf and objdump: if a ctf_dump ever failed, - readelf skipped every later member, while objdump tried to keep going as - much as it could. For a dumping tool the former is clearly preferable. - - binutils/ChangeLog - 2021-10-25 Nick Alcock - - * objdump.c (usage): --ctf-parent now takes a name, not a section. - (dump_ctf): Don't open a separate section; use the parent_name in - ctf_dict_open instead. Use ctf_archive_next, not ctf_archive_iter, - so we can pass down a member count. - (dump_ctf_archive_member): Add the member count; don't return - anything. Import parents into children no matter what the - parent's name, while still avoiding displaying the header for the - common parent name of ".ctf". - * readelf.c (usage): Adjust similarly. - (dump_section_as_ctf): Likewise. - (dump_ctf_archive_member): Likewise. Never stop iterating over - archive members, even if ctf_dump of one member fails. - * doc/ctf.options.texi: Adjust. - -2021-10-25 Alan Modra - - objdump doesn't accept -L option - A followup to commit ca0e11aa4b. - - * objdump.c (main): Add 'L' to short options and sort them. - -2021-10-25 Alan Modra - - bfd_nonfatal_message, localise va_start - Nothing to see here, just a little tidier. - - * bucomm.c (bfd_nonfatal_message): Localise va_list args. - -2021-10-25 Alan Modra - - ubsan: _bfd_xcoff64_swap_aux_in left shift of negative value - * coff64-rs6000.c (_bfd_xcoff64_swap_aux_in): Use bfd_vma for h. - - asan: evax_bfd_print_image buffer overflow - * vms-alpha.c (evax_bfd_print_image): Sanity check printing of - "image activator fixup" section. - (evax_bfd_print_relocation_records): Sanity check buffer offsets. - (evax_bfd_print_address_fixups): Likewise. - (evax_bfd_print_reference_fixups): Likewise. - -2021-10-25 GDB Administrator - - Automatic date update in version.in - -2021-10-24 Alan Modra - - asan: c4x, c54x coff_canonicalize_reloc buffer overflow - Sometimes the investigation of a fuzzing bug report leads into areas - you'd rather not go. In this instance by the time I'd figured out the - real cause was a target variant that had never been properly supported - in binutils, the time needed to fix it was less than the time needed - to rip it out. - - * coffcode.h (coff_set_alignment_hook): Call bfd_coff_swap_reloc_in - not coff_swap_reloc_in. - (coff_slurp_reloc_table): Likewise. Don't use RELOC type. - (ticoff0_swap_table): Use coff_swap_reloc_v0_out and - coff_swap_reloc_v0_in. - * coffswap.h (coff_swap_reloc_v0_in, coff_swap_reloc_v0_out): New. - * coff-tic54x.c (tic54x_lookup_howto): Don't abort. - * coffgen.c (coff_get_normalized_symtab): Use PTR_ADD. - * bfd-in.h (PTR_ADD, NPTR_ADD): Avoid warnings when passing an - expression. - * bfd-in2.h: Regenerate. - -2021-10-24 Alan Modra - - asan: arm-darwin: buffer overflow - PR 21813 - * mach-o-arm.c (bfd_mach_o_arm_canonicalize_one_reloc): Sanity - check PAIR reloc in other branch of condition as was done for - PR21813. Formatting. Delete debug printf. - - asan: aout: heap buffer overflow - * aoutx.h (aout_get_external_symbols): Sanity check before writing - zero index entry. Remove outdated comment. - * pdp11.c (aout_get_external_symbols): Likewise. - -2021-10-24 liuzhensong - - LoongArch ld support - 2021-10-22 Chenghua Xu - Zhensong Liu - Weinan Liu - Xiaolin Tang - - ld/ - * Makefile.am: Add LoongArch. - * NEWS: Mention LoongArch support. - * configure.tgt: Add LoongArch. - * emulparams/elf32loongarch-defs.sh: New. - * emulparams/elf32loongarch.sh: Likewise. - * emulparams/elf64loongarch-defs.sh: Likewise. - * emulparams/elf64loongarch.sh: Likewise. - * emultempl/loongarchelf.em: Likewise. - * Makefile.in: Regenerate. - * po/BLD-POTFILES.in: Regenerate. - ld/testsuite/ - * ld-loongarch-elf/disas-jirl.d: New. - * ld-loongarch-elf/disas-jirl.s: Likewise. - * ld-loongarch-elf/jmp_op.d: Likewise. - * ld-loongarch-elf/jmp_op.s: Likewise. - * ld-loongarch-elf/ld-loongarch-elf.exp: Likewise. - * ld-loongarch-elf/macro_op.d: Likewise. - * ld-loongarch-elf/macro_op.s: Likewise. - * ld-loongarch-elf/syscall-0.s: Likewise. - * ld-loongarch-elf/syscall-1.s: Likewise. - * ld-loongarch-elf/syscall.d: Likewise. - * ld-srec/srec.exp: Add LoongArch. - * ld-unique/pr21529.d: Likewise. - -2021-10-24 liuzhensong - - LoongArch gas support - 2021-10-22 Chenghua Xu - Zhensong Liu - Weinan Liu - Xiaolin Tang - - gas/ - * Makefile.am: Add LoongArch. - * NEWS: Mention LoongArch support. - * config/loongarch-lex-wrapper.c: New. - * config/loongarch-lex.h: New. - * config/loongarch-lex.l: New. - * config/loongarch-parse.y: New. - * config/tc-loongarch.c: New. - * config/tc-loongarch.h: New. - * configure.ac: Add LoongArch. - * configure.tgt: Likewise. - * doc/as.texi: Likewise. - * doc/c-loongarch.texi: Likewise. - * Makefile.in: Regenerate. - * configure: Regenerate. - * po/POTFILES.in: Regenerate. - gas/testsuite/ - * gas/all/gas.exp: Add LoongArch. - * gas/elf/elf.exp: Likewise. - * gas/loongarch/4opt_op.d: New. - * gas/loongarch/4opt_op.s: Likewise. - * gas/loongarch/fix_op.d: Likewise. - * gas/loongarch/fix_op.s: Likewise. - * gas/loongarch/float_op.d: Likewise. - * gas/loongarch/float_op.s: Likewise. - * gas/loongarch/imm_op.d: Likewise. - * gas/loongarch/imm_op.s: Likewise. - * gas/loongarch/jmp_op.d: Likewise. - * gas/loongarch/jmp_op.s: Likewise. - * gas/loongarch/load_store_op.d: Likewise. - * gas/loongarch/load_store_op.s: Likewise. - * gas/loongarch/loongarch.exp: Likewise. - * gas/loongarch/macro_op.d: Likewise. - * gas/loongarch/macro_op.s: Likewise. - * gas/loongarch/nop.d: Likewise. - * gas/loongarch/nop.s: Likewise. - * gas/loongarch/privilege_op.d: Likewise. - * gas/loongarch/privilege_op.s: Likewise. - * gas/loongarch/syscall.d: Likewise. - * gas/loongarch/syscall.s: Likewise. - * lib/gas-defs.exp: Add LoongArch. - -2021-10-24 liuzhensong - - LoongArch binutils support - 2021-10-22 Chenghua Xu - Zhensong Liu - Weinan Liu - binutils/ - * NEWS: Mention LoongArch support. - * readelf.c: Add LoongArch. - * testsuite/binutils-all/objdump.exp: Add LoongArch. - -2021-10-24 liuzhensong - - LoongArch opcodes support - 2021-10-22 Chenghua Xu - Zhensong Liu - Weinan Liu - - include/ - * opcode/loongarch.h: New. - * dis-asm.h: Declare print_loongarch_disassembler_options. - opcodes/ - * Makefile.am: Add LoongArch. - * configure.ac: Likewise. - * disassemble.c: Likewise. - * disassemble.h: Declare print_insn_loongarch. - * loongarch-coder.c: New. - * loongarch-dis.c: New. - * loongarch-opc.c: New. - * Makefile.in: Regenerate. - * configure: Regenerate. - * po/POTFILES.in: Regenerate. - -2021-10-24 liuzhensong - - LoongArch bfd support - 2021-10-22 Chenghua Xu - Zhensong Liu - Weinan Liu - bfd/ - * Makefile.am: Add LoongArch. - * archures.c: Likewise. - * config.bfd: Likewise. - * configure.ac: Likewise. - * cpu-loongarch.c: New. - * elf-bfd.h: Add LoongArch. - * elf.c: Add LoongArch elfcore_grok_xxx. - * elfnn-loongarch.c: New. - * elfxx-loongarch.c: New. - * elfxx-loongarch.h: New. - * reloc.c: Add LoongArch BFD RELOC ENUM. - * targets.c: Add LoongArch target. - * Makefile.in: Regenerate. - * bfd-in2.h: Regenerate. - * configure: Regenerate. - * libbfd.h: Regenerate. - * po/BLD-POTFILES.in: Regenerate. - * po/SRC-POTFILES.in: Regenerate. - - include/ - * elf/common.h: Add NT_LARCH_{CPUCFG,CSR,LSX,LASX}. - * elf/loongarch.h: New. - -2021-10-24 GDB Administrator - - Automatic date update in version.in - -2021-10-23 GDB Administrator - - Automatic date update in version.in - -2021-10-22 H.J. Lu - - x86: Add -muse-unaligned-vector-move to assembler - Unaligned load/store instructions on aligned memory or register are as - fast as aligned load/store instructions on modern Intel processors. Add - a command-line option, -muse-unaligned-vector-move, to x86 assembler to - encode encode aligned vector load/store instructions as unaligned - vector load/store instructions. - - * NEWS: Mention -muse-unaligned-vector-move. - * config/tc-i386.c (use_unaligned_vector_move): New. - (encode_with_unaligned_vector_move): Likewise. - (md_assemble): Call encode_with_unaligned_vector_move for - -muse-unaligned-vector-move. - (OPTION_MUSE_UNALIGNED_VECTOR_MOVE): New. - (md_longopts): Add -muse-unaligned-vector-move. - (md_parse_option): Handle -muse-unaligned-vector-move. - (md_show_usage): Add -muse-unaligned-vector-move. - * doc/c-i386.texi: Document -muse-unaligned-vector-move. - * testsuite/gas/i386/i386.exp: Run unaligned-vector-move and - x86-64-unaligned-vector-move. - * testsuite/gas/i386/unaligned-vector-move.d: New file. - * testsuite/gas/i386/unaligned-vector-move.s: Likewise. - * testsuite/gas/i386/x86-64-unaligned-vector-move.d: Likewise. - -2021-10-22 Tom Tromey - - Fix 'uninstall' target - This adds some missing code to the 'uninstall' targets in gdb and - gdbserver. It also changes gdb's uninstall target so that it no - longer tries to remove any man page -- this is already done (and more - correctly) by doc/Makefile.in. - - I tested this with 'make install' followed by 'make uninstall', then - examining the install tree for regular files. Only the 'dir' file - remains, but this appears to just be how 'install-info' is intended to - work. - -2021-10-22 Tom Tromey - - Remove unused variables from gdbserver's Makefile - This removes a number of unused variables from gdbserver's Makefile. - I found these while working on the subsequent patches, and figured it - would be cleaner to have a separate patch for the deletions. - -2021-10-22 Tom de Vries - - [gdb/testsuite] Fix gdb.threads/linux-dp.exp - On openSUSE Tumbleweed with glibc-debuginfo installed I get: - ... - (gdb) PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print - where^M - #0 print_philosopher (n=3, left=33 '!', right=33 '!') at linux-dp.c:105^M - #1 0x0000000000401628 in philosopher (data=0x40537c) at linux-dp.c:148^M - #2 0x00007ffff7d56b37 in start_thread (arg=) \ - at pthread_create.c:435^M - #3 0x00007ffff7ddb640 in clone3 () \ - at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81^M - (gdb) PASS: gdb.threads/linux-dp.exp: first thread-specific breakpoint hit - ... - while without debuginfo installed I get instead: - ... - (gdb) PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print - where^M - #0 print_philosopher (n=3, left=33 '!', right=33 '!') at linux-dp.c:105^M - #1 0x0000000000401628 in philosopher (data=0x40537c) at linux-dp.c:148^M - #2 0x00007ffff7d56b37 in start_thread () from /lib64/libc.so.6^M - #3 0x00007ffff7ddb640 in clone3 () from /lib64/libc.so.6^M - (gdb) FAIL: gdb.threads/linux-dp.exp: first thread-specific breakpoint hit - ... - - The problem is that the regexp used: - ... - "\(from .*libpthread\|at pthread_create\|in pthread_create\)" - ... - expects the 'from' part to match libpthread, but in glibc 2.34 libpthread has - been merged into libc. - - Fix this by updating the regexp. - - Tested on x86_64-linux. - -2021-10-22 Tom de Vries - - [gdb/testsuite] Fix FAILs in gdb.mi/mi-breakpoint-changed.exp - Since commit e36788d1354 "[gdb/testsuite] Fix handling of nr_args < 3 in - mi_gdb_test" we run into: - ... - PASS: gdb.mi/mi-breakpoint-changed.exp: test_auto_disable: mi runto main - Expecting: ^(-break-insert -f pendfunc1[^M - ]+)?((&.*)*.*~"Breakpoint 2 at.*\\n".*=breakpoint-created,\ - bkpt=\{number="2",type="breakpoint".*\}.*\n\^done[^M - ]+[(]gdb[)] ^M - [ ]*) - -break-insert -f pendfunc1^M - ^done,bkpt={number="2",type="breakpoint",disp="keep",enabled="y",\ - addr="0x00007ffff7bd559e",func="pendfunc1",\ - file="gdb/testsuite/gdb.mi/pendshr1.c",\ - fullname="gdb/testsuite/gdb.mi/pendshr1.c",line="21",thread-groups=["i1"],\ - times="0",original-location="pendfunc1"}^M - (gdb) ^M - FAIL: gdb.mi/mi-breakpoint-changed.exp: test_auto_disable: \ - -break-insert -f pendfunc1 (unexpected output) - ... - - The regexp expects a breakpoint-created event, but that's actually suppressed - by the command: - ... - DEF_MI_CMD_MI_1 ("break-insert", mi_cmd_break_insert, - &mi_suppress_notification.breakpoint), - ... - - Fix this by updating the regexp. - - Likewise for the following: - ... - PASS: gdb.mi/mi-breakpoint-changed.exp: test_auto_disable: \ - -break-insert -f pendfunc1 - Expecting: ^(-break-enable count 1 2[^M - ]+)?(=breakpoint-modified,\ - bkpt=\{number="2",type="breakpoint",disp="dis",enabled="y".*\}.*\n\^done[^M - ]+[(]gdb[)] ^M - [ ]*) - -break-enable count 1 2^M - ^done^M - (gdb) ^M - FAIL: gdb.mi/mi-breakpoint-changed.exp: test_auto_disable: \ - -break-enable count 1 2 (unexpected out\ - put) - ... - - Tested on x86_64-linux. - -2021-10-22 Andrew Burgess - - gdb/python: move gdb.Membuf support into a new file - In a future commit I'm going to be creating gdb.Membuf objects from a - new file within gdb/python/py*.c. Currently all gdb.Membuf objects - are created directly within infpy_read_memory (as a result of calling - gdb.Inferior.read_memory()). - - Initially I split out the Membuf creation code into a new function, - and left the new function in gdb/python/py-inferior.c, however, it - felt a little random that the Membuf creation code should live with - the inferior handling code. - - So, then I moved all of the Membuf related code out into a new file, - gdb/python/py-membuf.c, the interface is gdbpy_buffer_to_membuf, which - wraps an array of bytes into a gdb.Membuf object. - - Most of the code is moved directly from py-inferior.c with only minor - tweaks to layout and replacing NULL with nullptr, hence, I've left the - copyright date on py-membuf.c as 2009-2021 to match py-inferior.c. - - Currently, the only user of this code is still py-inferior.c, but in - later commits this will change. - - There should be no user visible changes after this commit. - -2021-10-22 Andrew Burgess - - gdb/python: new gdb.architecture_names function - Add a new function to the Python API, gdb.architecture_names(). This - function returns a list containing all of the supported architecture - names within the current build of GDB. - - The values returned in this list are all of the possible values that - can be returned from gdb.Architecture.name(). - -2021-10-22 Andrew Burgess - - gdb: make disassembler fprintf callback a static member function - The disassemble_info structure has four callbacks, we have three of - them as static member functions within gdb_disassembler, the fourth is - just a global static function. - - However, this fourth callback, is still only used from the - disassemble_info struct, so there's no real reason for its special - handling. - - This commit makes fprintf_disasm a static method within - gdb_disassembler. - - There should be no user visible changes after this commit. - -2021-10-22 Lewis Revill - - RISC-V: Added ld testcase for pcgp relaxation. - Consider the the pcgp-relax-02 testcase, - - .text - .globl _start - _start: - .L1: auipc a0, %pcrel_hi(data_a) - .L2: auipc a1, %pcrel_hi(data_b) - addi a0, a0, %pcrel_lo(.L1) - addi a1, a1, %pcrel_lo(.L2) - - .data - .word 0x0 - .globl data_a - data_a: - .word 0x1 - - .section .rodata - .globl data_b - data_b: - .word 0x2 - - If the first auipc is deleted, but we are still building the pcgp - table (connect the high and low pcrel relocations), then there is - an aliasing issue that we need some way to disambiguate which of - the two symbols we are targeting. Therefore, Palmer thought of a - way to use R_RISCV_DELETE to split this into two phases, so we - could resolve the addresses before creating the ambiguities. - - This patch just add the ld testcase for the above case, in case we - have changed something but break this. - - ld/ - * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Renamed pcgp-relax - to pcgp-relax-01, and added pcgp-relax-02. - * testsuite/ld-riscv-elf/pcgp-relax-01.d: Renmaed from pcgp-relax. - * testsuite/ld-riscv-elf/pcgp-relax-01.s: Likewise. - * testsuite/ld-riscv-elf/pcgp-relax-02.d: New testcase. - * testsuite/ld-riscv-elf/pcgp-relax-02.s: Likewise. - -2021-10-22 Lewis Revill - - RISC-V: Don't separate pcgp relaxation to another relax pass. - Commit abd20cb637008da9d32018b4b03973e119388a0a and - ebdcad3fddf6ec21f6d4dcc702379a12718cf0c4 introduced additional - complexity into the paths run by the RISC-V relaxation pass in order to - resolve the issue of accurately keeping track of pcrel_hi and pcrel_lo - pairs. The first commit split up relaxation of these relocs into a pass - which occurred after other relaxations in order to prevent the situation - where bytes were deleted in between a pcrel_lo/pcrel_hi pair, inhibiting - our ability to find the corresponding pcrel_hi relocation from the - address attached to the pcrel_lo. - - Since the relaxation was split into two passes the 'again' parameter - could not be used to perform the entire relaxation process again and so - the second commit added a way to restart ldelf_map_segments, thus - starting the whole process again. - - Unfortunately this process could not account for the fact that we were - not finished with the relaxation process so in some cases - such as the - case where code would not fit in a memory region before the - R_RISCV_ALIGN relocation was relaxed - sanity checks in generic code - would fail. - - This patch fixes all three of these concerns by reverting back to a - system of having only one target relax pass but updating entries in the - table of pcrel_hi/pcrel_lo relocs every time any bytes are deleted. Thus - we can keep track of the pairs accurately, and we can use the 'again' - parameter to restart the entire target relax pass, behaving in the way - that generic code expects. Unfortunately we must still have an - additional pass to delay deleting AUIPC bytes to avoid ambiguity between - pcrel_hi relocs stored in the table after deletion. This pass can only - be run once so we may potentially miss out on relaxation opportunities - but this is likely to be rare. - - https://sourceware.org/bugzilla/show_bug.cgi?id=28410 - - bfd/ - * elfnn-riscv.c (riscv_elf_link_hash_table): Removed restart_relax. - (riscv_elf_link_hash_table_create): Updated. - (riscv_relax_delete_bytes): Moved after the riscv_update_pcgp_relocs. - Update the pcgp_relocs table whenever bytes are deleted. - (riscv_update_pcgp_relocs): Add function to update the section - offset of pcrel_hi and pcrel_lo, and also update the symbol value - of pcrel_hi. - (_bfd_riscv_relax_call): Need to update the pcgp_relocs table - when deleting codes. - (_bfd_riscv_relax_lui): Likewise. - (_bfd_riscv_relax_tls_le): Likewise. - (_bfd_riscv_relax_align): Once we've handled an R_RISCV_ALIGN, - we can't relax anything else, so set the sec->sec_flg0 to true. - Besides, we don't need to update the pcgp_relocs table at this - stage, so just pass NULL pointer as the pcgp_relocs table for - riscv_relax_delete_bytes. - (_bfd_riscv_relax_section): Use only one pass for all target - relaxations. - (_bfd_riscv_relax_delete): Likewise, we don't need to update - the pcgp_relocs table at this stage, and don't need to set - the `again' since restart_relax mechanism is abandoned. - (bfd_elfNN_riscv_restart_relax_sections): Removed. - (_bfd_riscv_relax_section): Updated. - * elfxx-riscv.h (bfd_elf32_riscv_restart_relax_sections): Removed. - (bfd_elf64_riscv_restart_relax_sections): Likewise. - ld/ - * emultempl/riscvelf.em: Revert restart_relax changes and set - relax_pass to 3. - * testsuite/ld-riscv-elf/align-small-region.d: New testcase. - * testsuite/ld-riscv-elf/align-small-region.ld: Likewise. - * testsuite/ld-riscv-elf/align-small-region.s: Likewise. - * testsuite/ld-riscv-elf/restart-relax.d: Removed sine the - restart_relax mechanism is abandoned. - * testsuite/ld-riscv-elf/restart-relax.s: Likewise. - * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated. - -2021-10-22 Simon Marchi - - gdb: fix remote-sim.c build - Commit 183be222907a ("gdb, gdbserver: make target_waitstatus safe") - broke the remote-sim.c build. In fact, it does some wrong changes, - result of a bad sed invocation. - - Fix it by adjusting the code to the new target_waitstatus API. - - Change-Id: I3236ff7ef7681fc29215f68be210ff4263760e91 - -2021-10-22 GDB Administrator - - Automatic date update in version.in - -2021-10-21 Simon Marchi - - gdb, gdbserver: make target_waitstatus safe - I stumbled on a bug caused by the fact that a code path read - target_waitstatus::value::sig (expecting it to contain a gdb_signal - value) while target_waitstatus::kind was TARGET_WAITKIND_FORKED. This - meant that the active union field was in fact - target_waitstatus::value::related_pid, and contained a ptid. The read - signal value was therefore garbage, and that caused GDB to crash soon - after. Or, since that GDB was built with ubsan, this nice error - message: - - /home/simark/src/binutils-gdb/gdb/linux-nat.c:1271:12: runtime error: load of value 2686365, which is not a valid value for type 'gdb_signal' - - Despite being a large-ish change, I think it would be nice to make - target_waitstatus safe against that kind of bug. As already done - elsewhere (e.g. dynamic_prop), validate that the type of value read from - the union matches what is supposed to be the active field. - - - Make the kind and value of target_waitstatus private. - - Make the kind initialized to TARGET_WAITKIND_IGNORE on - target_waitstatus construction. This is what most users appear to do - explicitly. - - Add setters, one for each kind. Each setter takes as a parameter the - data associated to that kind, if any. This makes it impossible to - forget to attach the associated data. - - Add getters, one for each associated data type. Each getter - validates that the data type fetched by the user matches the wait - status kind. - - Change "integer" to "exit_status", "related_pid" to "child_ptid", - just because that's more precise terminology. - - Fix all users. - - That last point is semi-mechanical. There are a lot of obvious changes, - but some less obvious ones. For example, it's not possible to set the - kind at some point and the associated data later, as some users did. - But in any case, the intent of the code should not change in this patch. - - This was tested on x86-64 Linux (unix, native-gdbserver and - native-extended-gdbserver boards). It was built-tested on x86-64 - FreeBSD, NetBSD, MinGW and macOS. The rest of the changes to native - files was done as a best effort. If I forgot any place to update in - these files, it should be easy to fix (unless the change happens to - reveal an actual bug). - - Change-Id: I0ae967df1ff6e28de78abbe3ac9b4b2ff4ad03b7 - -2021-10-21 Simon Marchi - - gdbserver: initialize the members of lwp_info in-class - Add a constructor to initialize the waitstatus members. Initialize the - others in the class directly. - - Change-Id: I10f885eb33adfae86e3c97b1e135335b540d7442 - -2021-10-21 Simon Marchi - - gdbserver: make thread_info non-POD - Add a constructor and a destructor. The constructor takes care of the - initialization that happened in add_thread, while the destructor takes - care of the freeing that happened in free_one_thread. This is needed to - make target_waitstatus non-POD, as thread_info contains a member of that - type. - - Change-Id: I1db321b4de9dd233ede0d5c101950f1d6f1d13b7 - -2021-10-21 Andrew Pinski - - Fix ARMv8.4 for hw watchpoint and breakpoint - Just like my previoius patch for ARMv8.1 and v8.2 (49ecef2a7da2ee9df4), - this adds ARMv8.4 debug arch as being compatible for hw watchpoint - and breakpoints. - - Refactor code slightly in nat/aarch64-linux-hw-point.c (aarch64_linux_get_debug_reg_capacity) - Since the two locations which check the debug arch are the same code currently, it is - a good idea to factor it out to a new function and just use that function from - aarch64_linux_get_debug_reg_capacity. This is also the first step to support - ARMv8.4 debug arch. - -2021-10-21 Carl Love - - Fixes for gdb.mi/mi-break.exp - Update the expected pattern for two of the tests. - - Matching pattern \" doesn't work. Use .* to match the \* pattern. - -2021-10-21 Tom de Vries - - [gdb/tui] Fix breakpoint display functionality - In commit 81e6b8eb208 "Make tui-winsource not use breakpoint_chain", a loop - body was transformed into a lambda function body: - ... - - for (bp = breakpoint_chain; - - bp != NULL; - - bp = bp->next) - + iterate_over_breakpoints ([&] (breakpoint *bp) -> bool - ... - and consequently: - - a continue was replaced by a return, and - - a final return was added. - - Then in commit 240edef62f0 "gdb: remove iterate_over_breakpoints function", we - transformed back to a loop body: - ... - - iterate_over_breakpoints ([&] (breakpoint *bp) -> bool - + for (breakpoint *bp : all_breakpoints ()) - ... - but without reverting the changes that introduced the two returns. - - Consequently, breakpoints no longer show up in the tui source window. - - Fix this by reverting the changes that introduced the two returns. - - Build on x86_64-linux, tested with all .exp test-cases that contain - tuiterm_env. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28483 - -2021-10-21 Carl Love - - Fix test step-and-next-inline.cc - The test expect the runto_main to stop at the first line of the function. - Depending on the optimization level, gdb may stop in the prolog or after - the prolog at the first line. To ensure the test stops at the first line - of main, have it explicitly stop at a break point on the first line of the - function. - - On PowerPC, the test passes when compiled with no optimization but fails - with all levels of optimization due to gdb stopping in the prolog. - -2021-10-21 Tom Tromey - - Fix latent Ada bug when accessing field offsets - The "add accessors for field (and call site) location" patch caused a - gdb crash when running the internal AdaCore testsuite. This turned - out to be a latent bug in ada-lang.c. - - The immediate cause of the bug is that find_struct_field - unconditionally uses TYPE_FIELD_BITPOS. This causes an assert for a - dynamic type. - - This patch fixes the problem by doing two things. First, it changes - find_struct_field to use a dummy value for the field offset in the - situation where the offset is not actually needed by the caller. This - works because the offset isn't used in any other way -- only as a - result. - - Second, this patch assures that calls to find_struct_field use a - resolved type when the offset is needed. For - value_tag_from_contents_and_address, this is done by resolving the - type explicitly. In ada_value_struct_elt, this is done by passing - nullptr for the out parameters when they are not needed (the second - call in this function already uses a resolved type). - - Note that, while we believe the parent field probably can't occur at a - variable offset, the patch still updates this code path, just in case. - - I've updated an existing test case to reproduce the crash. - I'm checking this in. - -2021-10-21 Alan Modra - - -Waddress warning in ldelf.c - ldelf.c: In function 'ldelf_after_open': - ldelf.c:1049:43: warning: the comparison will always evaluate as 'true' for the address of 'elf_header' will never be NULL [-Waddress] - 1049 | && elf_tdata (abfd)->elf_header != NULL - | ^~ - In file included from ldelf.c:37: - ../bfd/elf-bfd.h:1957:21: note: 'elf_header' declared here - 1957 | Elf_Internal_Ehdr elf_header[1]; /* Actual data, but ref like ptr */ - - * ldelf.c (ldelf_after_open): Remove useless elf_header test. - -2021-10-21 Alan Modra - - Avoid -Waddress warnings in readelf - Mainline gcc: - readelf.c: In function 'find_section': - readelf.c:349:8: error: the comparison will always evaluate as 'true' for the pointer operand in 'filedata->section_headers + (sizetype)((long unsigned int)i * 80)' must not be NULL [-Werror=address] - 349 | ((X) != NULL \ - | ^~ - readelf.c:761:9: note: in expansion of macro 'SECTION_NAME_VALID' - 761 | if (SECTION_NAME_VALID (filedata->section_headers + i) - | ^~~~~~~~~~~~~~~~~~ - - This will likely be fixed in gcc, but inline functions are nicer than - macros. - - * readelf.c (SECTION_NAME, SECTION_NAME_VALID), - (SECTION_NAME_PRINT, VALID_SYMBOL_NAME, VALID_DYNAMIC_NAME), - (GET_DYNAMIC_NAME): Delete. Replace with.. - (section_name, section_name_valid, section_name_print), - (valid_symbol_name, valid_dynamic_name, get_dynamic_name): ..these - new inline functions. Update use throughout file. - -2021-10-21 GDB Administrator - - Automatic date update in version.in - -2021-10-20 Alan Modra - - PR28417, std::string no longer allows accepting nullptr_t - PR 28417 - * incremental.cc (Sized_relobj_incr::do_section_name): Avoid - std:string undefined behaviour. - * options.h (Search_directory::Search_directory): Likewise. - -2021-10-20 Alan Modra - - Re: PR27625, powerpc64 gold __tls_get_addr calls - My previous PR27625 patch had a problem or two. For one, the error - "__tls_get_addr call lacks marker reloc" on processing some calls - before hitting a call without markers typically isn't seen. Instead a - gold assertion fails. Either way it would be a hard error, which - triggers on a file contained in libphobos.a when running the gcc - testsuite. A warning isn't even appropriate since the call involved - is one built by hand without any of the arg setup relocations that - might result in linker optimisation. - - So this patch reverts most of commit 0af4fcc25dd5, instead entirely - ignoring the problem of mis-optimising old-style __tls_get_addr calls - without marker relocs. We can't handle them gracefully without - another pass over relocations before decisions are made about GOT - entries in Scan::global or Scan::local. That seems too costly, just - to link object files from 2009. What's more, there doesn't seem to be - any way to allow the libphobos explicit __tls_get_addr call, but not - old TLS sequences without marker relocs. Examining instructions - before the __tls_get_addr call is out of the question: program flow - might reach the call via a branch. Putting an R_PPC64_TLSGD marker - with zero sym on the call might be a solution, but current linkers - will then merrily optimise away the call! - - PR gold/27625 - * powerpc.cc (Powerpc_relobj): Delete no_tls_marker_, tls_marker_, - and tls_opt_error_ variables and accessors. Remove all uses. - -2021-10-20 Tom Tromey - - Use std::string in print_one_catch_syscall - This changes print_one_catch_syscall to use std::string, removing a - bit of manual memory management. - - Use unique_xmalloc_ptr in breakpoint - This changes struct breakpoint to use unique_xmalloc_ptr in a couple - of spots, removing a bit of manual memory management. - - Use unique_xmalloc_ptr in bp_location - This changes struct bp_location to use a unique_xmalloc_ptr, removing - a bit of manual memory management. - - Use unique_xmalloc_ptr in watchpoint - This changes struct watchpoint to use unique_xmalloc_ptr in a couple - of places, removing a bit of manual memory management. - - Use unique_xmalloc_ptr in exec_catchpoint - This changes struct exec_catchpoint to use a unique_xmalloc_ptr, - removing a bit of manual memory management. - - Use unique_xmalloc_ptr in solib_catchpoint - This changes struct solib_catchpoint to use a unique_xmalloc_ptr, - removing a bit of manual memory management. - -2021-10-20 Christian Biesinger - - Make c-exp.y work with Bison 3.8+ - When using Bison 3.8, we get this error: - - ../../gdb/c-exp.y:3455:1: error: 'void c_print_token(FILE*, int, YYSTYPE)' defined but not used [-Werror=unused-function] - - That's because bison 3.8 removed YYPRINT support: - https://savannah.gnu.org/forum/forum.php?forum_id=10047 - - Accordingly, this patch only defines that function for Bison < 3.8. - - Change-Id: I3cbf2f317630bb72810b00f2d9b2c4b99fa812ad - -2021-10-20 GDB Administrator - - Automatic date update in version.in - -2021-10-19 Tom de Vries - - [gdb/testsuite] Reimplement gdb.gdb/python-interrupts.exp as unittest - The test-case gdb.gdb/python-interrupts.exp: - - runs to captured_command_loop - - sets a breakpoint at set_active_ext_lang - - calls a python command - - verifies the command triggers the breakpoint - - sends a signal and verifies the result - - The test-case is fragile, because (f.i. with -flto) it cannot be guaranteed - that captured_command_loop and set_active_ext_lang are available for setting - breakpoints. - - Reimplement the test-case as unittest, using: - - execute_command_to_string to capture the output - - try/catch to catch the "Error while executing Python code" exception - - a new hook selftests::hook_set_active_ext_lang to raise the signal - - Tested on x86_64-linux. - -2021-10-19 Tom Tromey - - Check index in type::field - This changes gdb to check the index that is passed to type::field. - This caught one bug in the Ada code when running the test suite - (actually I found the bug first, then realized that the check would - have helped), so this patch fixes that as well. - - Regression tested on x86-64 Fedora 34. - -2021-10-19 Tom Tromey - - Fix Rust lex selftest when using libiconv - The Rust lex selftest fails on our Windows build. I tracked this down - to a use of UTF-32 as a parameter to convert_between_encodings. Here, - iconv_open succeeds, but the actual conversion of a tab character - fails with EILSEQ. I suspect that "UTF-32" is being interpreted as - big-endian, as changing the call to use "UTF-32LE" makes it work. - This patch implements this fix. - -2021-10-19 Tom Tromey - - Fix format_pieces selftest on Windows - The format_pieces selftest currently fails on Windows hosts. - - The selftest doesn't handle the "%ll" -> "%I64" rewrite that the - formatter may perform, but also gdbsupport was missing a configure - check for PRINTF_HAS_LONG_LONG. This patch fixes both issues. - -2021-10-19 Tom Tromey - - Fix bug in dynamic type resolution - A customer-reported problem led us to a bug in dynamic type - resolution. resolve_dynamic_struct will recursively call - resolve_dynamic_type_internal, passing it the sub-object for the - particular field being resolved. While it offsets the address here, - it does not also offset the "valaddr" -- the array of bytes describing - the memory. - - This patch fixes the bug, by offsetting both. A test case is included - that can be used to reproduce the bug. - -2021-10-19 Tom Tromey - - Always use std::function for self-tests - Now that there is a register_test variant that accepts std::function, - it seems to me that the 'selftest' struct and accompanying code is - obsolete -- simply always using std::function is simpler. This patch - implements this idea. - -2021-10-19 Daniel Black - - Fix PR gdb/17917 Lookup build-id in remote binaries - GDB doesn't support loading debug files using build-id from remote - target filesystems. - - This is the case when gdbserver attached to a process and a gdb target - remote occurs over tcp. - - With this change we make build-id lookups possible: - - (gdb) show debug-file-directory - The directory where separate debug symbols are searched for is "/usr/local/lib/debug". - (gdb) set debug-file-directory /usr/lib/debug - (gdb) show sysroot - The current system root is "target:". - (gdb) target extended-remote :46615 - Remote debugging using :46615 - warning: Can not parse XML target description; XML support was disabled at compile time - Reading /usr/sbin/mariadbd from remote target... - warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead. - Reading /usr/sbin/mariadbd from remote target... - Reading symbols from target:/usr/sbin/mariadbd... - Reading /usr/lib/debug/.build-id/6e/0a874dca5a7ff831396ddc0785d939a192efe3.debug from remote target... - Reading /usr/lib/debug/.build-id/6e/0a874dca5a7ff831396ddc0785d939a192efe3.debug from remote target... - Reading symbols from target:/usr/lib/debug/.build-id/6e/0a874dca5a7ff831396ddc0785d939a192efe3.debug... - Reading /lib/x86_64-linux-gnu/libpcre2-8.so.0 from remote target... - ... - - Before this change, the lookups would have been (GNU gdb (GDB) Fedora 10.2-3.fc34): - - (gdb) target extended-remote :46615 - Remote debugging using :46615 - Reading /usr/sbin/mariadbd from remote target... - warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead. - Reading /usr/sbin/mariadbd from remote target... - Reading symbols from target:/usr/sbin/mariadbd... - Reading /usr/sbin/0a874dca5a7ff831396ddc0785d939a192efe3.debug from remote target... - Reading /usr/sbin/.debug/0a874dca5a7ff831396ddc0785d939a192efe3.debug from remote target... - Reading /usr/lib/debug//usr/sbin/0a874dca5a7ff831396ddc0785d939a192efe3.debug from remote target... - Reading /usr/lib/debug/usr/sbin//0a874dca5a7ff831396ddc0785d939a192efe3.debug from remote target... - Reading target:/usr/lib/debug/usr/sbin//0a874dca5a7ff831396ddc0785d939a192efe3.debug from remote target... - Missing separate debuginfo for target:/usr/sbin/mariadbd - Try: dnf --enablerepo='*debug*' install /usr/lib/debug/.build-id/6e/0a874dca5a7ff831396ddc0785d939a192efe3.debug - (No debugging symbols found in target:/usr/sbin/mariadbd) - - Observe it didn't look for - /usr/lib/debug/.build-id/6e/0a874dca5a7ff831396ddc0785d939a192efe3.debug - on the remote target (where it is) and expected them to be installed - locally. - - As a minor optimization, this also changes the build-id lookup such that - if sysroot is empty, no second lookup of the same location is performed. - - Change-Id: I5181696d271c325a25a0805a8defb8ab7f9b3f55 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17917 - -2021-10-19 Nick Clifton - - Fix a potential illegal memory access when testing for a special LTO symbol name. - bfd * linker.c (_bfd_generic_link_add_one_symbol): Test for a NULL - name before checking to see if the symbol is __gnu_lto_slim. - * archive.c (_bfd_compute_and_write_armap): Likewise. - binutils - * nm.c (filter_symbols): Test for a NULL name before checking to - see if the symbol is __gnu_lto_slim. - * objcopy.c (filter_symbols): Likewise. - -2021-10-19 GDB Administrator - - Automatic date update in version.in - -2021-10-18 Weimin Pan - - CTF: incorrect underlying type setting for enumeration types - A bug was filed against the incorrect underlying type setting for - an enumeration type, which was caused by a copy and paste error. - This patch fixes the problem by setting it by calling objfile_int_type, - which was originally dwarf2_per_objfile::int_type, with ctf_type_size bits. - Also add error checking on ctf_func_type_info call. - -2021-10-18 GDB Administrator - - Automatic date update in version.in - -2021-10-17 Alan Modra - - PR28459, readelf issues bogus warning - I'd missed the fact that the .debug_rnglists dump doesn't exactly - display the contents of the section. Instead readelf rummages through - .debug_info looking for DW_AT_ranges entries, then displays the - entries in .debug_rnglists pointed at, sorted. A simpler dump of the - actual section contents might be more useful and robust, but it was - likely done that way to detect overlap and holes. - - Anyway, the headers in .debug_rnglists besides the first are ignored, - and limiting to the unit length of the first header fails if there is - more than one unit. - - PR 28459 - * dwarf.c (display_debug_ranges): Don't constrain data to length - in header. - -2021-10-17 GDB Administrator - - Automatic date update in version.in - -2021-10-16 H.J. Lu - - ld: Adjust pr28158.rd for glibc 2.34 - Adjust pr28158.rd for glibc 2.34: - - $ readelf -W --dyn-syms tmpdir/pr28158 - - Symbol table '.dynsym' contains 4 entries: - Num: Value Size Type Bind Vis Ndx Name - 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND - 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.34 (2) - 2: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ - 3: 000000000040401c 4 OBJECT GLOBAL DEFAULT 23 foo@VERS_2.0 (3) - $ - - vs older glibc: - - $ readelf -W --dyn-syms tmpdir/pr28158 - - Symbol table '.dynsym' contains 4 entries: - Num: Value Size Type Bind Vis Ndx Name - 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND - 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.2.5 (3) - 2: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ - 3: 000000000040401c 4 OBJECT GLOBAL DEFAULT 23 foo@VERS_2.0 (2) - - $ - - * testsuite/ld-elf/pr28158.rd: Adjusted for glibc 2.34. - -2021-10-16 GDB Administrator - - Automatic date update in version.in - -2021-10-15 GDB Administrator - - Automatic date update in version.in - -2021-10-14 Carl Love - - Powerpc: Add support for openat and fstatat syscalls - [gdb] update ppc-linux-tdep.c - - Add argument to ppc_canonicalize_syscall for the wordsize. - Add syscall entries for the openat and fstatat system calls. - -2021-10-14 Tom de Vries - - [gdb/testsuite] Add .debug_loc support in dwarf assembler - Add .debug_loc support in the dwarf assembler, and use it in new test-case - gdb.dwarf2/loc-sec-offset.exp (which is based on - gdb.dwarf2/loclists-sec-offset.exp). - - Tested on x86_64-linux. - -2021-10-14 Alan Modra - - [GOLD] Re: PowerPC64: Don't pretend to support multi-toc - We can't get at section->address() until everything is laid out, so - trying to generalise the offset calculation rather than using a value - of 0x8000 (the old object->toc_base_offset()) was bound to fail. - got->g_o_t() is a little better than a hard-coded 0x8000. - - * powerpc.cc (Target_powerpc::Scan::local, global): Don't use - toc_pointer() here. - -2021-10-14 Alan Modra - - [GOLD] Two GOT sections for PowerPC64 - Split .got into two piece, one with the header and entries for small - model got entries, the other with entries for medium/large model got - entries. The idea is to better support mixed pcrel/non-pcrel code - where non-pcrel small-model .toc entries need to be within 32k of the - toc pointer. - - * target.h (Target::tls_offset_for_local): Add got param. - (Target::tls_offset_for_global): Likewise. - (Target::do_tls_offset_for_local, do_tls_offset_for_global): Likewise. - * output.h (Output_data_got::Got_entry::write): Add got param. - * output.cc (Output_data_got::Got_entry::write): Likewise, pass to - tls_offset_for_local/global calls. - (Output_data_got::do_write): Adjust to suit. - * s390.cc (Target_s390::do_tls_offset_for_local): Likewise. - (Target_s390::do_tls_offset_for_global): Likewise. - * powerpc.cc (enum Got_type): Extend with small types, move from - class Target_powerpc. - (Target_powerpc::biggot_): New. - (Traget_powerpc::do_tls_offset_for_local, do_tls_offset_for_global, - got_size, got_section, got_base_offset): Handle biggot_. - (Target_powerpc::do_define_standard_symbols): Adjust. - (Target_powerpc::make_plt_section, do_finalize_sections): Likewise. - (Output_data_got_powerpc::Output_data_got_powerpc): Only make - 64-bit header for small got section. - (Output_data_got_powerpc::g_o_t): Only return a result for small - got section. - (Output_data_got_powerpc::write): Only write small got section - header. - (Target_powerpc::Scan::local, global): Select small/big Got_type - and section to suit reloc. - (Target_powerpc::Relocate::relocate): Similarly. - (Sort_toc_sections): Rewrite. - -2021-10-14 Alan Modra - - [GOLD] PowerPC64: Don't pretend to support multi-toc - Code in powerpc.cc is pretending to support a per-object toc pointer - value, but powerpc gold has no real support for multi-toc. This patch - removes the pretense, tidying quite a lot in preparation for a - followup patch. If multi-toc is ever to be supported, don't revert - this patch but start by adding object parameter to toc_pointer() and - an object to Branch_stub_key. - - * powerpc.cc (Powerpc_relobj::toc_base_offset): Delete. - (Target_powerpc::toc_pointer): New function. Use throughout. - (Target_powerpc::got_base_offset): New function. Use throughout.. - (Output_data_got_powerpc::got_base_offset): ..in place of - this. Delete. - (Output_data_got_powerpc::Output_data_got_powerpc): Init - header_index_ to -1u for 64-bit, and make header here. - (Output_data_got_powerpc::set_final_data_size, reserve_ent): Don't - make 64-bit header here. - (Output_data_got_powerpc::g_o_t): Return toc pointer offset in - section for 64-bit. Use throughout. - (Stub_table): Remove toc_base_off_ from Branch_stub_key, and - object param on add_long_branch_entry and find_long_branch_entry. - Adjust all uses. - -2021-10-14 Alan Modra - - Re: s12z/disassembler: call memory_error_func when appropriate - Adjust for commit ba7c18a48457. - - * testsuite/gas/s12z/truncated.d: Update expected output. - -2021-10-14 GDB Administrator - - Automatic date update in version.in - -2021-10-13 Tom de Vries - - [gdb/exp] Improve message - When printing a variable x in a subroutine foo: - ... - subroutine foo (x) - integer(4) :: x (*) - x(3) = 1 - end subroutine foo - ... - where x is an array with unknown bounds, we get: - ... - $ gdb -q -batch outputs/gdb.fortran/array-no-bounds/array-no-bounds \ - -ex "break foo" \ - -ex run \ - -ex "print x" - Breakpoint 1 at 0x4005cf: file array-no-bounds.f90, line 18. - - Breakpoint 1, foo (x=...) at array-no-bounds.f90:18 - 18 x(3) = 1 - $1 = - ... - - Improve the error message by printing the details of the error, such that we - have instead: - ... - $1 = - ... - - This is a change in gdb/valprint.c, and grepping through the sources reveals - that this is a common pattern. - - Tested on x86_64-linux. - -2021-10-13 Carl Love - - PPC fix for stfiwx instruction (and additional stores with primary opcode of 31) - [gdb] Fix address being recorded in rs6000-tdep.c, ppc_process_record_op31. - - The GDB record function was recording the variable addr that was passed in - rather than the calculated effective address (ea) by the - ppc_process_record_op31 function. - -2021-10-13 Andrew Burgess - - gdb: improve error reporting from the disassembler - If the libopcodes disassembler returns a negative value then this - indicates that the disassembly failed for some reason. In disas.c, in - the function gdb_disassembler::print_insn we can see how this is - handled; when we get a negative value back, we call the memory_error - function, which throws an exception. - - The problem here is that the address used in the memory_error call is - gdb_disassembler::m_err_memaddr, which is set in - gdb_disassembler::dis_asm_memory_error, which is called from within - the libopcodes disassembler through the - disassembler_info::memory_error_func callback. - - However, for this to work correctly, every time the libopcodes - disassembler returns a negative value, the libopcodes disassembler - must have first called the memory_error_func callback. - - My first plan was to make m_err_memaddr a gdb::optional, and assert - that it always had a value prior to calling memory_error, however, a - quick look in opcodes/*-dis.c shows that there _are_ cases where a - negative value is returned without first calling the memory_error_func - callback, for example in arc-dis.c and cris-dis.c. - - Now, I think that a good argument can be made that these disassemblers - must therefore be broken, except for the case where we can't read - memory, we should always be able to disassemble the memory contents to - _something_, even if it's just '.word 0x....'. However, I certainly - don't plan to go and fix all of the disassemblers. - - What I do propose to do then, is make m_err_memaddr a gdb::optional, - but now, instead of always calling memory_error, I add a new path - which just calls error complaining about an unknown error. This new - path is only used if m_err_memaddr doesn't have a value (indicating - that the memory_error_func callback was not called). - - To test this I just augmented one of the disassemblers to always - return -1, before this patch I see this: - - Dump of assembler code for function main: - 0x000101aa <+0>: Cannot access memory at address 0x0 - - And after this commit I now see: - - Dump of assembler code for function main: - 0x000101aa <+0>: unknown disassembler error (error = -1) - - This doesn't really help much, but that's because there's no way to - report non memory errors out of the disasembler, because, it was not - expected that the disassembler would ever report non memory errors. - -2021-10-13 Tom de Vries - - [gdb/testsuite] Fix gdb.fortran/call-no-debug.exp with native-gdbserver - When running test-case gdb.fortran/call-no-debug.exp with target board - native-gdbserver, I run into: - ... - (gdb) PASS: gdb.fortran/call-no-debug.exp: print string_func_ (&'abcdefg', 3) - call (integer) string_func_ (&'abcdefg', 3)^M - $2 = 0^M - (gdb) FAIL: gdb.fortran/call-no-debug.exp: call (integer) string_func_ (&'abcdefg', 3) - ... - - The problem is that gdb_test is used to match inferior output. - - Fix this by using gdb_test_stdio. - - Tested on x86_64-linux. - -2021-10-13 Tom de Vries - - [gdb/testsuite] Require use_gdb_stub == 0 where appropriate - When running with target board native-gdbserver, we run into a number of FAILs - due to use of the start command (and similar), which is not supported when - use_gdb_stub == 1. - - Fix this by: - - requiring use_gdb_stub == 0 for the entire test-case, or - - guarding some tests in the test-case with use_gdb_stub == 0. - - Tested on x86_64-linux. - -2021-10-13 Tom de Vries - - [gdb/testsuite] Fix test name in gdb.python/python.exp - When running test-case gdb.python/python.exp, we have: - ... - PASS: gdb.python/python.exp: starti via gdb.execute, not from tty - PASS: gdb.python/python.exp: starti via interactive input - ... - - The two tests are instances of the same test, with different values for - starti command argument from_tty, so it's strange that the test names are so - different. - - This is due to using a gdb_test nested in a gdb_test_multiple, with the inner - one using a different test name than the outer one. [ That could still make - sense if both produced passes, but that's not the case here. ] - - Fix this by using $gdb_test_name, such that we have: - ... - PASS: gdb.python/python.exp: starti via gdb.execute, not from tty - PASS: gdb.python/python.exp: starti via gdb.execute, from tty - ... - - Also make this more readable by using variables. - - Tested on x86_64-linux. - -2021-10-13 Tom de Vries - - [gdb/testsuite] Fix gdb.base/batch-exit-status.exp with native-gdbserver - When running test-case gdb.base/batch-exit-status.exp with target board - native-gdbserver, I run into (added missing double quotes for clarity): - ... - builtin_spawn $build/gdb/testsuite/../../gdb/gdb -nw -nx \ - -data-directory $build/gdb/testsuite/../data-directory \ - -iex "set height 0" -iex "set width 0" \ - -ex "set auto-connect-native-target off" \ - -iex "set sysroot" -batch ""^M - : No such file or directory.^M - PASS: gdb.base/batch-exit-status.exp: 1x: \ - No such file or directory: [lindex $result 2] == 0 - FAIL: gdb.base/batch-exit-status.exp: 1x: \ - No such file or directory: [lindex $result 3] == $expect_status - ... - - As in commit a02a90c114c "[gdb/testsuite] Set sysroot earlier in - local-board.exp", the problem is the use of -ex for - "set auto-connect-native-target off", which makes that the last command to - be executed, and consequently determines the return status. - - Fix this by using -iex instead. - - Tested on x86_64-linux. - -2021-10-13 Tom de Vries - - [gdb/testsuite] Remove quit in gdb.arch/i386-mpx.exp - When running test-case gdb.arch/i386-mpx.exp with target board - native-gdbserver, I run into: - ... - (gdb) PASS: gdb.arch/i386-mpx.exp: verify size for bnd0 - Remote debugging from host ::1, port 42328^M - quit^M - A debugging session is active.^M - ^M - Inferior 1 [process 19679] will be killed.^M - ^M - Quit anyway? (y or n) monitor exit^M - Please answer y or n.^M - A debugging session is active.^M - ^M - Inferior 1 [process 19679] will be killed.^M - ^M - Quit anyway? (y or n) WARNING: Timed out waiting for EOF in server after monitor exit - ... - - The problem is that the test-case sends a quit at the end (without verifying - the result of this in any way): - ... - send_gdb "quit\n" - ... - - Fix this by removing the quit. - - Tested on x86_64-linux. - -2021-10-13 GDB Administrator - - Automatic date update in version.in - -2021-10-12 GDB Administrator - - Automatic date update in version.in - -2021-10-11 Srinath Parvathaneni - - [ARM] Add support for M-profile MVE extension - This patch adds support for the M-profile MVE extension, which includes the - following: - - - New M-profile XML feature m-profile-mve - - MVE vector predication status and control register (VPR) - - p0 pseudo register (contained in the VPR) - - q0 ~ q7 pseudo vector registers - - New feature bits - - Documentation update - - Pseudo register p0 is the least significant bits of vpr and can be accessed - as $p0 or displayed through $vpr. For more information about the register - layout, please refer to [1]. - - The q0 ~ q7 registers map back to the d0 ~ d15 registers, two d registers - per q register. - - The register dump looks like this: - - (gdb) info reg all - r0 0x0 0 - r1 0x0 0 - r2 0x0 0 - r3 0x0 0 - r4 0x0 0 - r5 0x0 0 - r6 0x0 0 - r7 0x0 0 - r8 0x0 0 - r9 0x0 0 - r10 0x0 0 - r11 0x0 0 - r12 0x0 0 - sp 0x0 0x0 <__Vectors> - lr 0xffffffff -1 - pc 0xd0c 0xd0c - xpsr 0x1000000 16777216 - d0 0 (raw 0x0000000000000000) - d1 0 (raw 0x0000000000000000) - d2 0 (raw 0x0000000000000000) - d3 0 (raw 0x0000000000000000) - d4 0 (raw 0x0000000000000000) - d5 0 (raw 0x0000000000000000) - d6 0 (raw 0x0000000000000000) - d7 0 (raw 0x0000000000000000) - d8 0 (raw 0x0000000000000000) - d9 0 (raw 0x0000000000000000) - d10 0 (raw 0x0000000000000000) - d11 0 (raw 0x0000000000000000) - d12 0 (raw 0x0000000000000000) - d13 0 (raw 0x0000000000000000) - d14 0 (raw 0x0000000000000000) - d15 0 (raw 0x0000000000000000) - fpscr 0x0 0 - vpr 0x0 [ P0=0 MASK01=0 MASK23=0 ] - s0 0 (raw 0x00000000) - s1 0 (raw 0x00000000) - s2 0 (raw 0x00000000) - s3 0 (raw 0x00000000) - s4 0 (raw 0x00000000) - s5 0 (raw 0x00000000) - s6 0 (raw 0x00000000) - s7 0 (raw 0x00000000) - s8 0 (raw 0x00000000) - s9 0 (raw 0x00000000) - s10 0 (raw 0x00000000) - s11 0 (raw 0x00000000) - s12 0 (raw 0x00000000) - s13 0 (raw 0x00000000) - s14 0 (raw 0x00000000) - s15 0 (raw 0x00000000) - s16 0 (raw 0x00000000) - s17 0 (raw 0x00000000) - s18 0 (raw 0x00000000) - s19 0 (raw 0x00000000) - s20 0 (raw 0x00000000) - s21 0 (raw 0x00000000) - s22 0 (raw 0x00000000) - s23 0 (raw 0x00000000) - s24 0 (raw 0x00000000) - s25 0 (raw 0x00000000) - s26 0 (raw 0x00000000) - s27 0 (raw 0x00000000) - s28 0 (raw 0x00000000) - s29 0 (raw 0x00000000) - s30 0 (raw 0x00000000) - s31 0 (raw 0x00000000) - q0 {u8 = {0x0 }, u16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u32 = {0x0, 0x0, 0x0, 0x0}, u64 = {0x0, 0x0}, f32 = {0x0, 0x0, 0x0, 0x0}, f64 = {0x0, 0x0}} - q1 {u8 = {0x0 }, u16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u32 = {0x0, 0x0, 0x0, 0x0}, u64 = {0x0, 0x0}, f32 = {0x0, 0x0, 0x0, 0x0}, f64 = {0x0, 0x0}} - q2 {u8 = {0x0 }, u16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u32 = {0x0, 0x0, 0x0, 0x0}, u64 = {0x0, 0x0}, f32 = {0x0, 0x0, 0x0, 0x0}, f64 = {0x0, 0x0}} - q3 {u8 = {0x0 }, u16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u32 = {0x0, 0x0, 0x0, 0x0}, u64 = {0x0, 0x0}, f32 = {0x0, 0x0, 0x0, 0x0}, f64 = {0x0, 0x0}} - q4 {u8 = {0x0 }, u16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u32 = {0x0, 0x0, 0x0, 0x0}, u64 = {0x0, 0x0}, f32 = {0x0, 0x0, 0x0, 0x0}, f64 = {0x0, 0x0}} - q5 {u8 = {0x0 }, u16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u32 = {0x0, 0x0, 0x0, 0x0}, u64 = {0x0, 0x0}, f32 = {0x0, 0x0, 0x0, 0x0}, f64 = {0x0, 0x0}} - q6 {u8 = {0x0 }, u16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u32 = {0x0, 0x0, 0x0, 0x0}, u64 = {0x0, 0x0}, f32 = {0x0, 0x0, 0x0, 0x0}, f64 = {0x0, 0x0}} - q7 {u8 = {0x0 }, u16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u32 = {0x0, 0x0, 0x0, 0x0}, u64 = {0x0, 0x0}, f32 = {0x0, 0x0, 0x0, 0x0}, f64 = {0x0, 0x0}} - p0 0x0 0 - - Built and regtested with a simulator. - - [1] https://developer.arm.com/documentation/ddi0553/bn - - Co-Authored-By: Luis Machado - -2021-10-11 Luis Machado - - [ARM] Refactor pseudo register numbering - The pseudo register handling for ARM uses some hardcoded constants to - determine types and names. In preparation to the upcoming MVE support - patch (that will add another pseudo register), this patch refactors and - reorganizes things in order to simplify handling of future pseudo registers. - - We keep track of the first pseudo register number in a group and the number of - pseudo registers in that group. - - Right now we only have the S and Q pseudo registers. - -2021-10-11 Luis Machado - - [ARM] Small refactoring of arm gdbarch initialization - This is in preparation to MVE support, where we will define another - pseudo register. We need to define the pseudo register numbers *after* - accounting for all the registers in the XML description, so move - the call to tdesc_use_registers up. - - If we don't do it, GDB's register count won't consider registers contained - in the XML but ignored by GDB, throwing the register numbering off. - -2021-10-11 Luis Machado - - [ARM] Refactor some constants - In preparation for the MVE extension patch, this one refactors some of - the register-related constants we have for ARM. - - Basically I'm separating counting constants from numbering constants. - - For example, ARM_A1_REGNUM is a numbering constant, whereas ARM_NUM_ARG_REGS - is a counting constant. - -2021-10-11 Tom de Vries - - [gdb/testsuite] Fix FAIL in gdb.mi/mi-var-child-f.exp - When running test-case gdb.mi/mi-var-child-f.exp on openSUSE Tumbleweed - (with glibc 2.34) I run into: - ... - (gdb) ^M - PASS: gdb.mi/mi-var-child-f.exp: mi runto prog_array - Expecting: ^(-var-create array \* array[^M - ]+)?(\^done,name="array",numchild="[0-9]+",value=".*",type=.*,has_more="0"[^M - ]+[(]gdb[)] ^M - [ ]*) - -var-create array * array^M - &"Attempt to use a type name as an expression.\n"^M - ^error,msg="-var-create: unable to create variable object"^M - (gdb) ^M - FAIL: gdb.mi/mi-var-child-f.exp: create local variable array (unexpected output) - ... - - The problem is that the name array is used both: - - as the name for a local variable - - as the name of a type in glibc, in file malloc/dynarray-skeleton.c, as included - by nss/nss_files/files-hosts.c. - - Fix this by ignoring the shared lib symbols. - - Likewise in a couple of other fortran tests. - - Tested on x86_64-linux. - -2021-10-11 Andrew Burgess - - z80/disassembler: call memory_error_func when appropriate - If a call to the read_memory_func fails then we should call the - memory_error_func to notify the user of the disassembler of the - address that was a problem. - - Without this GDB will report all memory errors as being at address - 0x0. - - opcodes/ChangeLog: - - * z80-dis.c (fetch_data): Call memory_error_func if the - read_memory_func call fails. - -2021-10-11 Andrew Burgess - - s12z/disassembler: call memory_error_func when appropriate - If a call to the read_memory_func fails then we should call the - memory_error_func to notify the user of the disassembler of the - address that was a problem. - - Without this GDB will report all memory errors as being at address - 0x0. - - opcodes/ChangeLog: - - * s12z-disc.c (abstract_read_memory): Call memory_error_func if - the read_memory_func call fails. - -2021-10-11 Tom de Vries - - [gdb/testsuite] Fix double debug info in gdb.dwarf2/dw2-ref-missing-frame.exp - A mistake slipped in in commit a5ea23036d8 "[gdb/testsuite] Use function_range - in gdb.dwarf2/dw2-ref-missing-frame.exp". - - Before the commit the main file was compiled with debug info, and the two - others not: - ... - if {[prepare_for_testing_full "failed to prepare" \ - [list $testfile {} $srcfile {} $srcfuncfile {} \ - $srcmainfile debug]]} { - ... - - After the commit, all were compiled with debug info, and consequently, there - are two versions of debug info for $srcfuncfile. This shows up as a FAIL when - running the test-case with target boards readnow and cc-with-debug-names. - - Fix this by using prepare_for_testing_full, as before. - - Tested on x86_64-linux. - - Fixes: a5ea23036d8 ("[gdb/testsuite] Use function_range in - gdb.dwarf2/dw2-ref-missing-frame.exp") - -2021-10-11 Tom de Vries - - [gdb/testsuite] Use require for ensure_gdb_index - Replace: - ... - if { [ensure_gdb_index $binfile] == -1 } { - return -1 - } - ... - with: - ... - require {ensure_gdb_index $binfile} != -1 - ... - and consequently, add a missing UNTESTED message. - - Tested on x86_64-linux, both with native and target board readnow. - -2021-10-11 Tom de Vries - - [gdb/testsuite] Handle readnow in ensure_gdb_index - When running test-case gdb.base/with-mf.exp with target board readnow, I run - into: - ... - FAIL: gdb.base/with-mf.exp: check if index present - ... - This is since commit 6010fb0c49e "[gdb/testsuite] Fix full buffer in - gdb.rust/dwindex.exp". - - Before that commit, the proc ensure_gdb_index would treat the line: - ... - .gdb_index: faked for "readnow"^M - ... - as proof that an index is already present (which is incorrect). - - Now, instead it generates aforementioned FAIL and continues to generate an - index. - - Fix this by explicitly handling the readnow case in proc ensure_gdb_index, - such that we bail out instead. - - Tested on x86_64-linux. - -2021-10-11 Tom de Vries - - [gdb/testsuite] Fix gdb.dwarf2/gdb-add-index-symlink.exp - The test-case gdb.dwarf2/gdb-add-index-symlink.exp interpretes a failure to - add an index as a failure to add an index for a symlink: - ... - if { [ensure_gdb_index $symlink] == -1 } { - fail "Unable to call gdb-add-index with a symlink to a symfile" - return -1 - } - ... - - However, it's possible that the gdb-add-index also fails with a regular - file. Add a check for that situation. - - Tested on x86_64-linux. - -2021-10-11 Tom de Vries - - [gdb/testsuite] Add proc require in lib/gdb.exp - Add a new proc require in lib/gdb.exp, and use it to shorten: - ... - if { [gdb_skip_xml_test] } { - # Valgrind gdbserver requires gdb with xml support. - untested "missing xml support" - return 0 - } - ... - into: - ... - require gdb_skip_xml_test 0 - ... - - Tested on x86_64-linux, both with and without a trigger patch that forces - gdb_skip_xml_test to return 1. - -2021-10-11 Michael Forney - - bfd: Remove use of void pointer arithmetic - This is not valid in ISO C. Instead, use a pointer to bfd_byte. - - * peicode.h (pe_bfd_object_p): Remove use of void pointer - arithmetic. - -2021-10-11 GDB Administrator - - Automatic date update in version.in - -2021-10-10 GDB Administrator - - Automatic date update in version.in - -2021-10-09 Tom de Vries - - [gdb] Make execute_command_to_string return string on throw - The pattern for using execute_command_to_string is: - ... - std::string output; - output = execute_fn_to_string (fn, term_out); - ... - - This results in a problem when using it in a try/catch: - ... - try - { - output = execute_fn_to_string (fn, term_out) - } - catch (const gdb_exception &e) - { - /* Use output. */ - } - ... - - If an expection was thrown during execute_fn_to_string, then the output - remains unassigned, while it could be worthwhile to known what output was - generated by gdb before the expection was thrown. - - Fix this by returning the string using a parameter instead: - ... - execute_fn_to_string (output, fn, term_out) - ... - - Also add a variant without string parameter, to support places where the - function is used while ignoring the result: - ... - execute_fn_to_string (fn, term_out) - ... - - Tested on x86_64-linux. - -2021-10-09 Tom de Vries - - [gdb/testsuite] Add check-readmore - Consider the gdb output: - ... - 27 return SYSCALL_CANCEL (nanosleep, requested_time, remaining);^M - (gdb) ^M - Thread 2 "run-attach-whil" stopped.^M - ... - - When trying to match the gdb prompt using gdb_test which uses '$gdb_prompt $', - it may pass or fail. - - This sort of thing needs to be fixed (see commit b0e2f96b56b), but there's - currently no way to reliably find this type of FAILs. - - We have check-read1, but that one actually make the test pass reliably. - - We need something like the opposite of check-read1: something that makes - expect read a bit slower, or more exhaustively. - - Add a new test target check-readmore that implements this. - - There are two methods of implementing this in read1.c: - - the first method waits a bit before doing a read - - the second method does a read and then decides whether to - return or to wait a bit and do another read, and so on. - - The second method is potentially faster, has less risc of timeout and could - potentially detect more problems. The first method has a simpler - implementation. - - The second method is enabled by default. The default waiting period is 10 - miliseconds. - - The first method can be enabled using: - ... - $ export READMORE_METHOD=1 - ... - and the waiting period can be specified in miliseconds using: - ... - $ export READMORE_SLEEP=9 - ... - - Also a log file can be specified using: - ... - $ export READMORE_LOG=$(pwd -P)/LOG - ... - - Tested on x86_64-linux. - - Testing with check-readmore showed these regressions: - ... - FAIL: gdb.base/bp-cmds-continue-ctrl-c.exp: run: stop with control-c (continue) - FAIL: gdb.base/bp-cmds-continue-ctrl-c.exp: attach: stop with control-c (continue) - ... - - I have not been able to find a problem in the test-case, and I think it's the - nature of both the test-case and readmore that makes it run longer. Make - these pass by increasing the alarm timeout from 60 to 120 seconds. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=27957 - -2021-10-09 Tom de Vries - - [gdb/testsuite] Fix fortran module tests with stressed cpu - When running these test-cases: - - gdb.fortran/info-modules.exp - - gdb.fortran/module.exp - - gdb.mi/mi-fortran-modules.exp - in conjunction with: - ... - $ stress -c $(($(cat /proc/cpuinfo | grep -c "^processor") + 1)) - ... - I run into timeouts. - - Fix this by using: - - "set auto-solib-add off" to avoid symbols of shared libs - (which doesn't work for libc, now that libpthread_name_p has been - updated to match libc) - - "nosharedlibrary" to avoid symbols of libc - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28133 - -2021-10-09 Guillermo E. Martinez - - PR28415, invalid read in xtensa_read_table_entries - PR 28415 - PR 28416 - * elf32-xtensa.c (xtensa_read_table_entries): Handle error - return from retrieve_contents. - -2021-10-09 GDB Administrator - - Automatic date update in version.in - -2021-10-08 Tom de Vries - - [gdb/testsuite] Fix gdb.base/info-types-c++.exp with stressed cpu - When running test-case gdb.base/info-types-c++.exp in conjunction with: - ... - $ stress -c $(($(cat /proc/cpuinfo | grep -c "^processor") + 1)) - ... - we get: - ... - FAIL: gdb.base/info-types-c++.exp: info types (timeout) - ... - - Fix this by setting auto-solib-add to off. - - Tested on x86_64-linux. - -2021-10-08 Tom de Vries - - [gdb/testsuite] Fix gdb.base/info_sources_2.exp with check-read1 - When running test-case gdb.base/info_sources_2.exp with check-read1, I run - into: - ... - FAIL: gdb.base/info_sources_2.exp: args: : info sources (timeout) - ... - - Fix this by consuming a "$src1, $src2, ..., $srcn: line bit by bit rather than - as one whole line. - - Also add the missing handling of "Objfile has no debug information". - - Tested on x86_64-linux. - -2021-10-08 Tom de Vries - - [gdb/testsuite] Fix gdb.mi/gdb2549.exp with check-read1 - When running test-case gdb.mi/gdb2549.exp with check-read1, I run into: - ... - FAIL: gdb.mi/gdb2549.exp: register values x (timeout) - ... - - Fix this by applying the same fix as for "register values t" in commit - 478e490a4df "[gdb/testsuite] Fix gdb.mi/gdb2549.exp with check-read1". - - Tested on x86_64-linux. - -2021-10-08 Tom de Vries - - [gdb/testsuite] Fix gdb.base/bt-on-error-and-warning.exp with check-read1 - When running test-case gdb.base/bt-on-error-and-warning.exp with check-read1, - I run into: - ... - (gdb) maint internal-error foobar^M - src/gdb/maint.c:82: internal-error: foobar^M - A problem internal to GDB has been detectedFAIL: \ - gdb.base/bt-on-error-and-warning.exp: problem=internal-error, mode=on: \ - scan for backtrace (GDB internal error) - Resyncing due to internal error. - ,^M - ... - - The corresponding gdb_test_multiple in the test-case contains: - ... - -early -re "^A problem internal to GDB has been detected,\r\n" { - incr header_lines - exp_continue - } - ... - but instead this one triggers in gdb_test_multiple: - ... - -re ".*A problem internal to GDB has been detected" { - fail "$message (GDB internal error)" - gdb_internal_error_resync - set result -1 - } - ... - - Fix this by likewise shortening the regexp to before the comma. - - Tested on x86_64-linux. - -2021-10-08 Tom de Vries - - [gdb/testsuite] Add nopie in two test-cases - When running test-case gdb.dwarf2/dw2-restrict.exp on openSUSE Leap 15.2 with - gcc-PIE installed (switching compiler default to -fPIE/-pie), I get: - ... - gdb compile failed, ld: outputs/gdb.dwarf2/dw2-restrict/dw2-restrict0.o: \ - warning: relocation in read-only section `.text' - ld: warning: creating DT_TEXTREL in a PIE - UNTESTED: gdb.dwarf2/dw2-restrict.exp: failed to prepare - ... - - This is due to using a hardcoded .S file that was generated with -fno-PIE. - - Fix this by adding the missing nopie. - - Likewise in gdb.arch/amd64-tailcall-noret.exp. - - Tested on x86_64-linux. - -2021-10-08 GDB Administrator - - Automatic date update in version.in - -2021-10-07 Tom de Vries - - [gdb/testsuite] Fix gdb.threads/check-libthread-db.exp with glibc 2.34 - When running test-case gdb.threads/check-libthread-db.exp on openSUSE - Tumbleweed (with glibc 2.34) I get: - ... - (gdb) continue^M - Continuing.^M - [Thread debugging using libthread_db enabled]^M - Using host libthread_db library "/lib64/libthread_db.so.1".^M - Stopped due to shared library event:^M - Inferior loaded /lib64/libm.so.6^M - /lib64/libc.so.6^M - (gdb) FAIL: gdb.threads/check-libthread-db.exp: user-initiated check: continue - ... - - The check expect the inferior to load libpthread, but since glibc 2.34 - libpthread has been integrated into glibc, and consequently it's no longer - a dependency: - ... - $ ldd outputs/gdb.threads/check-libthread-db/check-libthread-db - linux-vdso.so.1 (0x00007ffe4cae4000) - libm.so.6 => /lib64/libm.so.6 (0x00007f167c77c000) - libc.so.6 => /lib64/libc.so.6 (0x00007f167c572000) - /lib64/ld-linux-x86-64.so.2 (0x00007f167c86e000) - ... - - Fix this by updating the regexp to expect libpthread or libc. - - Tested on x86_64-linux. - -2021-10-07 Tom de Vries - - [gdb/testsuite] Fix gdb.guile/scm-type.exp with gcc 4.8 - With gcc 7.5.0, I get: - ... - (gdb) guile (print (type-range (field-type (type-field (value-type \ - (value-dereference f)) "items"))))^M - = (0 0)^M - (gdb) PASS: gdb.guile/scm-type.exp: lang_cpp: test_range: \ - on flexible array member: $cmd - ... - but with gcc 4.8.5, I get instead: - ... - (gdb) guile (print (type-range (field-type (type-field (value-type \ - (value-dereference f)) "items"))))^M - = (0 -1)^M - (gdb) FAIL: gdb.guile/scm-type.exp: lang_cpp: test_range: \ - on flexible array member: $cmd - ... - - There's a difference in debug info. With gcc 4.8.5, we have: - ... - <2><224>: Abbrev Number: 15 (DW_TAG_member) - <225> DW_AT_name : items - <22b> DW_AT_type : <0x231> - <1><231>: Abbrev Number: 4 (DW_TAG_array_type) - <232> DW_AT_type : <0x105> - <2><23a>: Abbrev Number: 16 (DW_TAG_subrange_type) - <23b> DW_AT_type : <0x11a> - <23f> DW_AT_upper_bound : 0xffffffffffffffff - ... - and with gcc 7.5.0, we have instead: - ... - <2><89f>: Abbrev Number: 12 (DW_TAG_member) - <8a0> DW_AT_name : items - <8a6> DW_AT_type : <0x8ac> - <1><8ac>: Abbrev Number: 17 (DW_TAG_array_type) - <8ad> DW_AT_type : <0x29d> - <2><8b5>: Abbrev Number: 41 (DW_TAG_subrange_type) - <2><8b6>: Abbrev Number: 0 - ... - - As mentioned in commit 858c8f2c1b9 "gdb/testsuite: adjust - gdb.python/flexible-array-member.exp expected pattern": - ... - Ideally, GDB would present a consistent and documented value for an - array member declared with size 0, regardless of how the debug info - looks like. - ... - - As in gdb.python/flexible-array-member.exp, change the test to accept the two - values. - - Tested on x86_64-linux. - -2021-10-07 Simon Marchi - - gdb: add accessors for field (and call site) location - Add accessors for the various location values in struct field. This - lets us assert that when we get a location value of a certain kind (say, - bitpos), the field's location indeed contains a value of that kind. - - Remove the SET_FIELD_* macros, instead use the new setters directly. - Update the FIELD_* macros used to access field locations to go through - the getters. They will be removed in a subsequent patch. - - There are places where the FIELD_* macros are used on call_site_target - structures, because it contains members of the same name (loc_kind and - loc). For now, I have replicated the getters/setters in - call_site_target. But we could perhaps eventually factor them in a - "location" structure that can be used at both places. - - Note that the field structure, being zero-initialized, defaults to a - bitpos location with value 0. While writing this patch, I tried to make - it default to an "unset" location, to catch places where we would miss - setting a field's location. However, I found that some places relied on - the default being "bitpos 0", so I left it as-is. This change could - always be done as follow-up work, making these places explicitly set the - "bitpos 0" location. - - I found two issues to fix: - - - I got some failures in the gdb.base/infcall-nested-structs-c++.exp - test. They were caused by two functions in amd64-tdep.c using - TYPE_FIELD_BITPOS before checking if the location is of the bitpos - kind, which they do indirectly through `field_is_static`. Simply - move getting the bitpos below the field_is_static call. - - - I got a failure in gdb.xml/tdesc-regs.exp. It turns out that in - make_gdb_type_enum, we set enum field values using SET_FIELD_BITPOS, - and later access them through FIELD_ENUMVAL. Fix that by using - set_loc_enumval to set the value. - - Change-Id: I53d3734916c46457576ba11dd77df4049d2fc1e8 - -2021-10-07 Philipp Tomsich - - RISC-V: Support aliases for Zbs instructions - Add aliases for the non-immediate mnemonics of b{set,clr,inv,ext} to - yencode the respective immediate insn b{set,clr,inv,ext}i when the - second source operand is an immediate. - - 2021-01-11 Philipp Tomsich - - gas/ - * testsuite/gas/riscv/b-ext.d: Add tests. - * testsuite/gas/riscv/b-ext.s: Likewise. - * testsuite/gas/riscv/b-ext-64.d: Likewise. - * testsuite/gas/riscv/b-ext-64.s: Likewise. - opcodes/ - * riscv-opc.c (riscv_opcodes): Add aliases for Zbs. - - Suggested-by: Jan Beulich - -2021-10-07 Philipp Tomsich - - RISC-V: Add support for Zbs instructions - This change adds the Zbs instructions from the Zbs 1.0.0 specification. - See - https://github.com/riscv/riscv-bitmanip/releases/tag/1.0.0 - for the frozen specification. - - 2021-01-09 Philipp Tomsich - - bfd/ - * elfxx-riscv.c (riscv_supported_std_z_ext): Added zbs. - gas/ - * config/tc-riscv.c (riscv_multi_subset_supports): Handle INSN_CLASS_ZBS. - * testsuite/gas/riscv/b-ext.d: Test Zbs instructions. - * testsuite/gas/riscv/b-ext.s: Likewise. - * testsuite/gas/riscv/b-ext-64.d: Likewise. - * testsuite/gas/riscv/b-ext-64.s: Likewise. - include/ - * opcode/riscv-opc.h: Added MASK/MATCH/DECLARE_INSN for Zbs. - * opcode/riscv.h (riscv_insn_class): Added INSN_CLASS_ZBS. - opcodes/ - * riscv-opc.c (riscv_supported_std_z_ext): Add zbs. - -2021-10-07 Philipp Tomsich - - RISC-V: Update extension version for Zb[abc] to 1.0.0 - 2021-10-06 Philipp Tomsich - - bfd/ - * elfxx-riscv.c (riscv_supported_std_z_ext): Update the version - number for zba, zbb and zbc to 1.0.0 - - - Version-changes: 3 - - Updated version numbers for zba, zbb and zbc to 1.0.0 - -2021-10-07 Philipp Tomsich - - RISC-V: Split Zb[abc] into commented sections - The Zb[abc] opcodes are bundled just below the Privileged opcodes in - riscv_opcodes, possibly giving the appearance that they are part of - the Privileged spec for an uninitiated reader. This separates them - out and adds comments above each section to clearly identify them as - Zba, Zbb or Zbc opcodes. - - 2021-10-04 Philipp Tomsich - - opcodes/ - * riscv-opc.c: Split of Zb[abc] instructions and add comments. - -2021-10-07 Alan Modra - - PR28423, use-after-free in objdump - XCOFF archives use a bi-directional linked list for file members. So - one member points to both the previous member and the next member. - Members may not be sequentially ordered in the file. This of course - is over-engineered nonsense and an attractive target for fuzzers. - (There is even a free list of members!) The testcase in PR28423 is an - XCOFF archive with one member pointing to itself, which results in - lots of bad behaviour. For example, "ar t" never terminates. - - The use-after-free with "objdump -r" happens like this: The first - archive element is opened, its symbols are read and "canonicalized" - for objdump, then relocations are read and printed. Those relocations - use the canonicalized symbols, and also happen to be cached by the - coff bfd backend support. objdump frees the symbols. The next - archive element is then opened. This must be done before the first - element is closed, because finding the next element uses data held in - the currect element. Unfortunately the next element happens to be the - original, so we aren't opening, we're reopening a bfd which has cached - data. When the relocations are printed they use the cached copy - containing references to the freed canonical symbols. - - This patch adds a little sanity checking to the XCOFF "open next - archive file" support, so that it rejects archive members pointing at - themselves. That is sufficient to cure this problem. Anything more - is overkill. If someone deliberately fuzzes an XCOFF archive with an - element loop then reports an "ar" bug when it runs forever, they will - find their bug report closed WONTFIX. - - PR 28423 - * coff-rs6000.c (_bfd_xcoff_read_ar_hdr): Save size occupied - by member name in areltdata.extra_size. - (_bfd_xcoff_openr_next_archived_file): Sanity check nextoff. - * coff64-rs6000.c (xcoff64_openr_next_archived_file): Call - _bfd_xcoff_openr_next_archived_file. - -2021-10-07 Alan Modra - - PR28422, build_id use-after-free - This fixes a bug in commit 5d9bbb73c1df. All fields preserved from a - bfd in struct bfd_preserve need to be cleared in bfd_reinit. - - PR 28422 - * format.c (bfd_reinit): Clear build_id. - -2021-10-07 Alan Modra - - Change ridiculous section size error - Rather than reporting "memory exhausted", report "file truncated". - You can hit this error on small fuzzed object files, or on files that - are actually truncated. In either case sizes can be such that an out - of memory error is a little confusing. - - * compress.c (bfd_get_full_section_contents): Set - bfd_error_file_truncated rather than bfd_error_no_memory when - section size exceeds file size. - -2021-10-07 Tom de Vries - - [gdb/testsuite] Fix FAIL in gdb.base/annota1.exp - On openSUSE tumbleweed I run into: - ... - FAIL: gdb.base/annota1.exp: run until main breakpoint (timeout) - ... - due to a message related to libthread_db: - ... - ^Z^Zstarting^M - [Thread debugging using libthread_db enabled]^M - Using host libthread_db library "/lib64/libthread_db.so.1".^M - ^M - ^Z^Zframes-invalid^M - ... - which is not matched by the regexp. - - Fix this by updating the regexp. - - Tested on x86_64-linux. - -2021-10-07 Tom de Vries - - [gdb/testsuite] Refactor regexp in gdb.base/annota1.exp - Refactor regexp in gdb.base/annota1.exp to reduce indentation and repetition. - - Tested on x86_64-linux. - -2021-10-07 GDB Administrator - - Automatic date update in version.in - -2021-10-06 Andrew Burgess - - gdb/doc: improve 'show print elements' description - The documentation for 'show print elements' contains the line: - - If the number is 0, then the printing is unlimited. - - However, this line is now out of date as can be seen by this GDB - session: - - (gdb) set print elements 0 - (gdb) show print elements - Limit on string chars or array elements to print is unlimited. - - The value 0 does indeed mean unlimited, and this is described in the - 'set print elements' section, however, for 'show print elements' the - user will never see the value 0, so lets just remove that bit from the - docs. - -2021-10-06 Tom de Vries - - [gdb/testsuite] Fix FAIL in gdb.tui/corefile-run.exp - When running test-case gdb.tui/corefile-run.exp on openSUSE Tumbleweed, - I run into: - ... - PASS: gdb.tui/corefile-run.exp: load corefile - FAIL: gdb.tui/corefile-run.exp: run until the end - ... - - What's going on is easier to see when also doing dump_screen if - check_contents passes, and inspecting state at the preceding PASS: - ... - +-------------------------------------------------------------------------+ - exec No process In: L?? PC: ?? - [New LWP 16629] - [Thread debugging using libthread_db enabled] - Using host libthread_db library "/lib64/libthread_db.so.1". - Core was generated by `/data/gdb_versions/devel/build/gdb/testsuite/output - s/gdb.tui/corefile-run/corefi'. - Program terminated with signal SIGTRAP, Trace/breakpoint trap. - #0 main () - --Type for more, q to quit, c to continue without paging-- - ... - - The problem is that we're getting a pagination prompt, and the subsequent run - command is interpreted as an answer to that prompt. - - Fix this by: - - detecting the gdb prompt in response to "load corefile", such that - we detect the failure earlier, and - - doing a "set pagination off" in Term::clean_restart. - - Tested on x86_64-linux. - -2021-10-06 Alan Modra - - PR28420, ecoff fuzzing failures - PR 28420 - * coff-mips.c (mips_adjust_reloc_in): Replace abort with error - message and return. - * ecoff.c (ecoff_slurp_reloc_table): Remove assertion and aborts, - instead handle errors gracefully. - -2021-10-06 Alan Modra - - PR28402, fail to allocate line number array - This fixes a situation where the COFF code allocated memory for - internal representaion arrays before reading the external file data. - That meant the allocation didn't have any sanity check against file - size. - - PR 28402 - * coffcode.h (buy_and_read): Malloc rather than alloc memory. - (coff_slurp_line_table): Read native line number info before - allocating memory for internal line number array. Adjust error - paths to suit. Remove now unnecessary line number count check. - (coff_slurp_reloc_table): Adjust to suit buy_and_read change. - -2021-10-06 Alan Modra - - PR28403, null pointer dereference in disassemble_bytes - Indexing of symbol and howto arrays wasn't checked in aout targets. - - PR 28403 - * aout-ns32k.c (MY (reloc_howto)): Sanity check howto_table index. - Make r_index unsigned. - (MY_swap_std_reloc_in): Make r_index unsigned. - * aoutx.h (MOVE_ADDRESS): Sanity check symbol r_index. - (aout_link_input_section_std): Make r_index unsigned. - (aout_link_input_section_ext): Likewise. - * i386lynx.c (MOVE_ADDRESS): Sanity check symbol r_index. - (swap_ext_reloc_in, swap_std_reloc_in): Make r_index unsigned. - * pdp11.c (MOVE_ADDRESS): Sanity check symbol r_index. - -2021-10-06 Alan Modra - - PR28401, invalid section name lookup - The PR28401 testcase has a section named "", ie. an empty string. - This results in some silly behaviour in load_debug_section, and - dump_dwarf_section. Fix that. Note that this patch doesn't correct - the main complaint in PR28401, "failed to allocate", since malloc - failures on sections having huge bogus sizes are to be expected. We - can't safely catch all such cases by comparing with file size, for - example, where sections contain compressed data. - - PR 28401 - * objdump.c (load_debug_section): Don't attempt to retrieve - empty name sections. - (dump_dwarf_section): Likewise. - -2021-10-06 GDB Administrator - - Automatic date update in version.in - -2021-10-06 Tom de Vries - - [gdb/testsuite] Make tui testing less verbose - Currently, tui testing is rather verbose. When using these RUNTESTFLAGS to - pick up all tui tests (17 in total): - ... - rtf=$(echo $(cd src/gdb/testsuite/; find gdb.* -type f -name *.exp* \ - | xargs grep -l tuiterm_env) ) - ... - we have: - ... - $ wc -l gdb.log - 120592 gdb.log - ... - - Most of the output is related to controlling the tui screen, but that does - not give a top-level sense of how the test-case progresses. - - Put differently: a lot of bandwith is used to describe how we arrive at a - certain tui screen state. But we don't actually always show the state we - arrive at, unless there's a FAIL. - - And if there's say, a PASS that should actually be FAILing, it's hard to - detect. - - Fix this by: - - dropping the -log on the call to verbose in _log. We still can get the - same info back using runtest -v. - - dumping the screen or box that we're checking, also when the test passes. - - Brings down verbosity to something more reasonable: - ... - $ wc -l gdb.log - 3221 gdb.log - ... - - Tested on x86_64-linux. - -2021-10-06 Tom de Vries - - [gdb/testsuite] Add Term::dump_box in lib/tuiterm.exp - Factor out new proc Term::get_region and use it to implement a - new proc Term::dump_box, similar to Term::dump_screen. - - Tested on x86_64-linux. - -2021-10-05 Lancelot SIX - - gdb: Remove deprecated assertion in setting::get - The commit 702991711a91bd47b209289562843a11e7009396 (gdb: Have setter - and getter callbacks for settings) makes it possible for a setting not - to be backed by a memory buffer but use callback functions instead to - retrieve or set the setting's value. - - An assertion was not properly updated to take into account that the - m_var member (which points to a memory buffer, if used) might be nullptr - if the setting uses callback functions. If the setting is backed by a - memory buffer, the m_var has to be non nullptr, which is already checked - before the pointer is dereferenced. - - This commit removes this assertion as it is not valid anymore. - -2021-10-05 Tom Tromey - - Remove 'varsize-limit' - This makes the Ada-specific "varsize-limit" a synonym for - "max-value-size", and removes the Ada-specific checks of the limit. - - I am not certain of the history here, but it seems to me that this - code is fully obsolete now. And, removing this makes it possible to - index large Ada arrays without triggering an error. A new test case - is included to demonstrate this. - -2021-10-05 Tom Tromey - - Allow lazy 'zero' value - This changes value_zero to create a lazy value. In many cases, - value_zero is called in expression evaluation to wrap a type in a - non-eval context. It seems senseless to allocate a buffer in these - cases. - - A new 'is_zero' flag is added so we can preserve the existing - assertions in value_fetch_lazy. - - A subsequent patch will add a test where creating a zero value would - fail, due to the variable size check. However, the contents of this - value are never needed, and so creating a lazy value avoids the error - case. - -2021-10-05 Tom Tromey - - Add lval_funcs::is_optimized_out - This adds an is_optimized_out function pointer to lval_funcs, and - changes value_optimized_out to call it. This new function lets gdb - determine if a value is optimized out without necessarily fetching the - value. This is needed for a subsequent patch, where an attempt to - access a lazy value would fail due to the value size limit -- however, - the access was only needed to determine the optimized-out state. - -2021-10-05 Tom de Vries - - [gdb/testsuite] Fix FAIL in gdb.mi/mi-nsmoribund.exp - Since commit e36788d1354 "[gdb/testsuite] Fix handling of nr_args < 3 in - mi_gdb_test" we run into: - ... - PASS: gdb.mi/mi-nsmoribund.exp: print done = 1 - Expecting: ^(.*[^M - ]+)?([^ - ]*^M - \*running,thread-id="[0-9]+"^M - \*running,thread-id="[0-9]+"^M - \*running,thread-id="[0-9]+"^M - \*running,thread-id="[0-9]+"^M - \*running,thread-id="[0-9]+"^M - \*running,thread-id="[0-9]+"^M - \*running,thread-id="[0-9]+"^M - \*running,thread-id="[0-9]+"^M - \*running,thread-id="[0-9]+"^M - \*running,thread-id="[0-9]+"[^M - ]+[(]gdb[)] ^M - [ ]*) - 103-exec-continue --all^M - =library-loaded,id="/lib64/libgcc_s.so.1",target-name="/lib64/libgcc_s.so.1",\ - host-name="/lib64/libgcc_s.so.1",symbols-loaded="0",thread-group="i1",\ - ranges=[{from="0x00007ffff22a5010",to="0x00007ffff22b6365"}]^M - 103^running^M - *running,thread-id="5"^M - (gdb) ^M - FAIL: gdb.mi/mi-nsmoribund.exp: 103-exec-continue --all (unexpected output) - ... - - The regexp expect running messages for all threads, but we only get one for - thread 5. - - The test-case uses non-stop mode, and when the exec-continue --all command is - issued, thread 5 is stopped and all other threads are running. Consequently, - only thread 5 is resumed, and reported as running. - - Fix this by updating the regexp. - - Tested on x86_64-linux. - -2021-10-05 Andrew Burgess - - gdb/python: fix memory leak in python inferior code - When a user creates a gdb.Inferior object for the first time a new - Python object is created. This object is then cached within GDB's - inferior object using the registry mechanism (see - inferior_to_inferior_object in py-inferior.c, specifically the calls - to inferior_data and set_inferior_data). - - The Python Reference to the gdb.Inferior object held within the real - inferior object ensures that the reference count on the Python - gdb.Inferior object never reaches zero while the GDB inferior object - continues to exist. - - At the same time, the gdb.Inferior object maintains a C++ pointer back - to GDB's real inferior object. We therefore end up with a system that - looks like this: - - Python Reference - | - | - .----------. | .--------------. - | |------------------->| | - | inferior | | gdb.Inferior | - | |<-------------------| | - '----------' | '--------------' - | - | - C++ Pointer - - When GDB's inferior object is deleted (say the inferior exits) then - py_free_inferior is called (thanks to the registry system), this - function looks up the Python gdb.Inferior object and sets the C++ - pointer to nullptr and finally reduces the reference count on the - Python gdb.Inferior object. - - If at this point the user still holds a reference to the Python - gdb.Inferior object then nothing happens. However, the gdb.Inferior - object is now in the non-valid state (see infpy_is_valid in - py-inferior.c), but otherwise, everything is fine. - - However, if there are no further references to the Python gdb.Inferior - object, or, once the user has given up all their references to the - gdb.Inferior object, then infpy_dealloc is called. - - This function currently checks to see if the inferior pointer within - the gdb.Inferior object is nullptr or not. If the pointer is nullptr - then infpy_dealloc immediately returns. - - Only when the inferior point in the gdb.Inferior is not nullptr do - we (a) set the gdb.Inferior reference inside GDB's inferior to - nullptr, and (b) call the underlying Python tp_free function. - - There are a number things wrong here: - - 1. The Python gdb.Inferior reference within GDB's inferior object - holds a reference count, thus, setting this reference to nullptr - without first decrementing the reference count would leak a - reference, however... - - 2. As GDB's inferior holds a reference then infpy_dealloc will never - be called until GDB's inferior object is deleted. Deleting a GDB - inferior ohject calls py_free_inferior, and so gives up the - reference. At this point there is no longer a need to call - set_inferior_data to set the field back to NULL, that field must - have been cleared in order to get the reference count to zero, which - means... - - 3. If we know that py_free_inferior must be called before - infpy_dealloc, then we know that the inferior pointer in - gdb.Inferior will always be nullptr when infpy_dealloc is called, - this means that the call to the underlying tp_free function will - always be skipped. Skipping this call will cause Python to leak the - memory associated with the gdb.Inferior object, which is what we - currently always do. - - Given all of the above, I assert that the C++ pointer within - gdb.Inferior will always be nullptr when infpy_dealloc is called. - That's what this patch does. - - I wrote a test for this issue making use of Pythons tracemalloc - module, which allows us to spot this memory leak. - -2021-10-05 Bhuvanendra Kumar N - - [gdb/testsuite] Use function_range in gdb.dwarf2/dw2-ref-missing-frame.exp - Following 2 test points are failing with clang compiler - - (gdb) FAIL: gdb.dwarf2/dw2-ref-missing-frame.exp: func_nofb print - (gdb) FAIL: gdb.dwarf2/dw2-ref-missing-frame.exp: func_loopfb print - - As in commit f677852bbda "[gdb/testsuite] Use function_range in - gdb.dwarf2/dw2-abs-hi-pc.exp", the problem is that the CU and functions - have an empty address range, due to using asm labels in global scope, - which is a known source of problems, as explained in the comment of proc - function_range in gdb/testsuite/lib/dwarf.exp. Hence fix this also by - using function_range. - - Tested on x86_64-linux with gcc and clang. - -2021-10-05 Andrew Burgess - - gdb/python: add a new gdb_exiting event - Add a new event, gdb.events.gdb_exiting, which is called once GDB - decides it is going to exit. - - This event is not triggered in the case that GDB performs a hard - abort, for example, when handling an internal error and the user - decides to quit the debug session, or if GDB hits an unexpected, - fatal, signal. - - This event is triggered if the user just types 'quit' at the command - prompt, or if GDB is run with '-batch' and has processed all of the - required commands. - - The new event type is gdb.GdbExitingEvent, and it has a single - attribute exit_code, which is the value that GDB is about to exit - with. - - The event is triggered before GDB starts dismantling any of its own - internal state, so, my expectation is that most Python calls should - work just fine at this point. - - When considering this functionality I wondered about using the - 'atexit' Python module. However, this is triggered when the Python - environment is shut down, which is done from a final cleanup. At - this point we don't know for sure what other GDB state has already - been cleaned up. - -2021-10-05 Andrew Burgess - - gdb/python: update events test to handle missing exit_code - The test gdb.python/py-events.exp sets up a handler for the gdb.exited - event. Unfortunately the handler is slightly broken, it assumes that - the exit_code attribute will always be present. This is not always - the case. - - In a later commit I am going to add more tests to py-events.exp test - script, and in so doing I expose the bug in our handling of gdb.exited - events. - - Just to be clear, GDB itself is fine, it is the test that is not - written correctly according to the Python Events API. - - So, in this commit I fix the Python code in the test, and extend the - test case to exercise more paths through the Python code. - - Additionally, I noticed that the gdb.exited event is used as an - example in the documentation for how to write an event handler. - Unfortunately the same bug that we had in our test was also present in - the example code in the manual. - - So I've fixed that too. - - After this commit there is no functional change to GDB. - -2021-10-05 GDB Administrator - - Automatic date update in version.in - -2021-10-04 Tom Tromey - - Use unique_xmalloc_ptr when demangling - I noticed that some methods in language_defn could use - unique_xmalloc_ptr rather than a plain 'char *'. This patch - implements this change, fixing up the fallout and changing - gdb_demangle to also return this type. In one spot, std::string is - used to simplify some related code, and in another, an auto_obstack is - used to avoid manual management. - - Regression tested on x86-64 Fedora 34. - -2021-10-04 Tom Tromey - - Minor boolean fix in windows-nat.c - I noticed a spot in windows-nat.c that used '1' rather than the more - appropriate 'true'. This patch fixes it. - -2021-10-04 Tom de Vries - - [gdb/build] Add CXX_DIALECT to CXX - Say we use a gcc version that (while supporting c++11) does not support c++11 - by default, and needs an -std setting to enable it. - - If gdb would use the default AX_CXX_COMPILE_STDCXX from autoconf-archive, then - we'd have: - ... - CXX="g++ -std=gnu++11" - ... - - That mechanism however has the following problem (quoting from commit - 0bcda685399): - ... - the top level Makefile passes CXX down to subdirs, and that overrides whatever - gdb/Makefile may set CXX to. The result would be that a make invocation from - the build/gdb/ directory would use "g++ -std=gnu++11" as expected, while a - make invocation at the top level would not. - ... - - Commit 0bcda685399 fixes this by using a custom AX_CXX_COMPILE_STDCXX which - does: - ... - CXX=g++ - CXX_DIALECT=-std=gnu++11 - ... - - The problem reported in PR28318 is that using the custom instead of the - default AX_CXX_COMPILE_STDCXX makes the configure test for std::thread - support fail. - - We could simply add $CXX_DIALECT to the test for std::thread support, but - that would have to be repeated for each added c++ support test. - - Instead, fix this by doing: - ... - CXX="g++ -std=gnu++11" - CXX_DIALECT=-std=gnu++11 - ... - - This is somewhat awkward, since it results in -std=gnu++11 occuring twice in - some situations: - ... - $ touch src/gdb/dwarf2/read.c - $ ( cd build/gdb; make V=1 dwarf2/read.o ) - g++-4.8 -std=gnu++11 -x c++ -std=gnu++11 ... - ... - - However, both settings are needed: - - the switch in CXX for the std::thread tests (and other tests) - - the switch in CXX_DIALECT so it can be appended in Makefiles, to - counteract the fact that the top-level Makefile overrides CXX - - The code added in gdb/ax_cxx_compile_stdcxx.m4 is copied from the default - AX_CXX_COMPILE_STDCXX from autoconf-archive. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28318 - -2021-10-04 Simon Marchi - - [gdb/symtab] Use unrelocated addresses in call_site - Consider test-case gdb.trace/entry-values.exp with target board - unix/-fPIE/-pie. - - Using this command we have an abbreviated version, and can see the correct - @entry values for foo: - ... - $ gdb -q -batch outputs/gdb.trace/entry-values/entry-values \ - -ex start \ - -ex "break foo" \ - -ex "set print entry-values both" \ - -ex continue - Temporary breakpoint 1 at 0x679 - - Temporary breakpoint 1, 0x0000555555554679 in main () - Breakpoint 2 at 0x55555555463e - - Breakpoint 2, 0x000055555555463e in foo (i=0, i@entry=2, j=2, j@entry=3) - ... - - Now, let's try the same again, but run directly to foo rather than stopping at - main: - ... - $ gdb -q -batch outputs/gdb.trace/entry-values/entry-values \ - -ex "break foo" \ - -ex "set print entry-values both" \ - -ex run - Breakpoint 1 at 0x63e - - Breakpoint 1, 0x000055555555463e in foo (i=0, i@entry=, \ - j=2, j@entry=) - ... - - So, what explains the difference? Noteworthy, this is a dwarf assembly - test-case, with debug info for foo and bar, but not for main. - - In the first case: - - we run to main - - this does not trigger expanding debug info, because there's none for main - - we set a breakpoint at foo - - this triggers expanding debug info. Relocated addresses are used in - call_site info (because the exec is started) - - we continue to foo, and manage to find the call_site info - - In the second case: - - we set a breakpoint at foo - - this triggers expanding debug info. Unrelocated addresses are used in - call_site info (because the exec is not started) - - we run to foo - - this triggers objfile_relocate1, but it doesn't update the call_site - info addresses - - we don't manage to find the call_site info - - We could fix this by adding the missing call_site relocation in - objfile_relocate1. - - This solution however is counter-trend in the sense that we're trying to - work towards the situation where when starting two instances of an executable, - we need only one instance of debug information, implying the use of - unrelocated addresses. - - So, fix this instead by using unrelocated addresses in call_site info. - - Tested on x86_64-linux. - - This fixes all remaining unix/-fno-PIE/-no-pie vs unix/-fPIE/-pie - regressions, like f.i. PR24892. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=24892 - - Co-Authored-By: Tom de Vries - -2021-10-04 Simon Marchi - - [gdb/symtab] C++-ify call_site - - add constructor - - add member function call_site::pc () - - Tested on x86_64-linux. - - Co-Authored-By: Tom de Vries - -2021-10-04 Tom de Vries - - [gdb/symtab] Add call_site_eq and call_site_hash - In commit b4c919f7525 "[gdb/symtab] Fix htab_find_slot call in - read_call_site_scope" , I removed the comment: - ... - It must be the first field as we overload core_addr_hash and core_addr_eq for - it. - ... - for field pc of struct call_site. - - However, this was not tested, and when indeed moving field pc to the second - location, we run into a testsuite failure in gdb.trace/entry-values.exp. - - This is caused by core_addr_eq (the eq_f function for the htab) being - called with a pointer to the pc field (as passed into htab_find_slot) and a - pointer to a hash table element. Now that pc is no longer the first field, - the pointer to hash table element no longer points to the pc field. - - This could be fixed by simply reinstating the comment, but we're trying to - get rid of this kind of tricks that make refactoring more difficult. - - Instead, fix this by: - - reverting commit b4c919f7525, apart from the comment removal, such that - we're passing a pointer to element to htab_find_slot - - updating the htab_find_slot call in compunit_symtab::find_call_site - in a similar manner - - adding a call_site_eq and call_site_hash, and using these in the hash table - instead of core_addr_eq and core_addr_hash. - - Tested on x86_64-linux, both with and without a trigger patch that moves pc to - the second location in struct call_site. - -2021-10-04 Tom Tromey - - Fix remote-sim.c compilation - The change "make string-like set show commands use std::string - variable" caused remote-sim.c to fail to build. The issue is that the - code does: - - const std::string &sysroot = gdb_sysroot; - if (is_target_filename (sysroot)) - sysroot += strlen (TARGET_SYSROOT_PREFIX); - - ... which isn't valid. - - This patch changes this code to use a 'const char *' again, fixing the - build. - -2021-10-04 Bruno Larsen - - [gdb/testsuite] update analyze-racy-logs.py to python3 - Since python 2 is no longer supported on most distributions, update the - script to run under python while while still being runnable under - python2. - -2021-10-04 Andrew Burgess - - gdbsupport: remove attempt to define TARGET_WORD_SIZE - In the gdbsupport configure.ac file, there is an attempt to define - TARGET_WORD_SIZE. This is done by running grep on the file - ../bfd/bfd-in3.h. - - The problem with this is, the file bfd-in3.h is generated into the bfd - build directory when bfd is configured, and there is no dependency - between the gdbsupport module and the bfd module, so, for example, if - I do: - - $ ../src/configure - $ make all-gdbsupport - - Then bfd will neither be configured, or built. In this case - TARGET_WORD_SIZE ends up being defined, but with no value because the - grep on bfd-in3.h fails. - - However, it turns out that this doesn't matter; we don't actually use - TARGET_WORD_SIZE anywhere. - - My proposal in this commit is to just remove the definition of - TARGET_WORD_SIZE, the alternative would be to add a dependency between - configure-gdbsupport and configure-bfd into Makefile.def, but adding a - dependency for something we don't need seems pretty pointless. - -2021-10-04 Mike Frysinger - - sim: add --info-target for listing supported BFD targets - It can be difficult to guess the exact bfd name, so add an option to - list all the targets that the current build supports. This aligns with - other simulator options like --info-architecture. - -2021-10-04 GDB Administrator - - Automatic date update in version.in - -2021-10-03 Lancelot SIX - - gdb: Setting setter return a bool to tell if the value changed - GDB can notify observers when a parameter is changed. - - To do that, do_set_command (in gdb/cli/cli-setshow.c) compares the new - value against the old one before updating it, and based on that notifies - observers. This looks like something like: - - int valuechanged = 0; - switch (cmd->var.type ()) - { - case var_integer: - { - LONGEST new_val = parse_and_eval_long (arg) - if (new_val != cmd->var.get ()) - { - cmd->var.get (new_val); - value_changes = 1; - } - } - case var_uinteger: - case var_zuinteger: - { - unsigned int val - = parse_cli_var_uinteger (c->var->type (), &arg, true); - if (c->var->get () != val) - { - c->var->set (val); - option_changed = true; - } - } - case... - /* And so on for all possible var_types. */ - } - - This comparison is done for each possible var_type, which leads to - unnecessary logic duplication. - - In this patch I propose to move all those checks in one place within the - setting setter method. This limits the code duplication and simplifies - the do_set_command implementation. - - This patch also changes slightly the way a value change is detected. - Instead of comparing the user provided value against the current value - of the setting, we compare the value of the setting before and after the - set operation. This is meant to handle edge cases where trying to set - an unrecognized value would be equivalent to a noop (the actual value - remains unchanged). Doing this requires that the original value needs - to be copied before the update, which can be non trivial for - std::string. - - There should be no user visible change introduced by this commit. - - Tested on x86_64 GNU/Linux. - - [1] https://review.lttng.org/c/binutils-gdb/+/5831/41 - - Change-Id: If064b9cede3eb56275aacd2b286f74eceb1aed11 - -2021-10-03 Lancelot SIX - Simon Marchi - - gdb: Have setter and getter callbacks for settings - The main motivation behind this improvement is to help the - implementation of a patch Simon Marchi is preparing to fix a bug when - MI or Python try to access parameters that are inferior dependent (see - PR/28085). - - This commit extends the previous ones, which introduces the setting - object to represent a static variable whose value can be set or shown - with the appropriate commands. This patch proposes that a setting can - either contain a pointer to a static variable holding a setting, or - pointers to a pair of setter and getter callback functions. - - The callbacks functions can be used to retrieve or change the value with - custom logic. This is useful when the source of truth for a given - setting is not contained in the variable pointed to by the setting - instance. - - Given that the callback function call is hidden within the setting - abstraction introduced earlier, none of the sites accessing the setting - needs to be updated. The registered getter or setter is used whatever - the way to access it is (through MI, Python, Guile, the "with" command - and the $_gdb_setting / $_gdb_setting_str convenience functions). - - All the add_setshow_*_cmd are given a new overload that will accept the - pair of function pointers (set / get functions) instead of the pointer - to a global variable. - - Tested on GNU/Linux x86_64 with no regression observed. - - Change-Id: Ieb81fef57550632ff66e6aa85f637372a226be8c - -2021-10-03 Simon Marchi - Lancelot SIX - - gdb: make string-like set show commands use std::string variable - String-like settings (var_string, var_filename, var_optional_filename, - var_string_noescape) currently take a pointer to a `char *` storage - variable (typically global) that holds the setting's value. I'd like to - "mordernize" this by changing them to use an std::string for storage. - - An obvious reason is that string operations on std::string are often - easier to write than with C strings. And they avoid having to do any - manual memory management. - - Another interesting reason is that, with `char *`, nullptr and an empty - string often both have the same meaning of "no value". String settings - are initially nullptr (unless initialized otherwise). But when doing - "set foo" (where `foo` is a string setting), the setting now points to - an empty string. For example, solib_search_path is nullptr at startup, - but points to an empty string after doing "set solib-search-path". This - leads to some code that needs to check for both to check for "no value". - Or some code that converts back and forth between NULL and "" when - getting or setting the value. I find this very error-prone, because it - is very easy to forget one or the other. With std::string, we at least - know that the variable is not "NULL". There is only one way of - representing an empty string setting, that is with an empty string. - - I was wondering whether the distinction between NULL and "" would be - important for some setting, but it doesn't seem so. If that ever - happens, it would be more C++-y and self-descriptive to use - optional anyway. - - Actually, there's one spot where this distinction mattered, it's in - init_history, for the test gdb.base/gdbinit-history.exp. init_history - sets the history filename to the default ".gdb_history" if it sees that - the setting was never set - if history_filename is nullptr. If - history_filename is an empty string, it means the setting was explicitly - cleared, so it leaves it as-is. With the change to std::string, this - distinction doesn't exist anymore. This can be fixed by moving the code - that chooses a good default value for history_filename to - _initialize_top. This is ran before -ex commands are processed, so an - -ex command can then clear that value if needed (what - gdb.base/gdbinit-history.exp tests). - - Another small improvement, in my opinion is that we can now easily - give string parameters initial values, by simply initializing the global - variables, instead of xstrdup-ing it in the _initialize function. - - In Python and Guile, when registering a string-like parameter, we - allocate (with new) an std::string that is owned by the param_smob (in - Guile) and the parmpy_object (in Python) objects. - - This patch started by changing all relevant add_setshow_* commands to - take an `std::string *` instead of a `char **` and fixing everything - that failed to build. That includes of course all string setting - variable and their uses. - - string_option_def now uses an std::string also, because there's a - connection between options and settings (see - add_setshow_cmds_for_options). - - The add_path function in source.c is really complex and twisted, I'd - rather not try to change it to work on an std::string right now. - Instead, I added an overload that copies the std:string to a `char *` - and back. This means more copying, but this is not used in a hot path - at all, so I think it is acceptable. - - Change-Id: I92c50a1bdd8307141cdbacb388248e4e4fc08c93 - -2021-10-03 Lancelot SIX - Simon Marchi - - gdb: Introduce setting construct within cmd_list_element - cmd_list_element can contain a pointer to data that can be set and / or - shown. This is achieved with the void* VAR member which points to the - data that can be accessed, while the VAR_TYPE member (of type enum - var_types) indicates how to interpret the data pointed to. - - With this pattern, the user of the cmd_list_element needs to know what - is the storage type associated with a given VAR_TYPES in order to do - the proper casting. No automatic safeguard is available to prevent - miss-use of the pointer. Client code typically looks something like: - - switch (c->var_type) - { - case var_zuinteger: - unsigned int v = *(unsigned int*) c->var; - ... - break; - case var_boolean: - bool v = *(bool *) c->var; - ... - break; - ... - } - - This patch proposes to add an abstraction around the var_types and void* - pointer pair. The abstraction is meant to prevent the user from having - to handle the cast and verify that the data is read or written as a type - that is coherent with the setting's var_type. This is achieved by - introducing the struct setting which exposes a set of templated get / - set member functions. The template parameter is the type of the - variable that holds the referred variable. - - Using those accessors allows runtime checks to be inserted in order to - ensure that the data pointed to has the expected type. For example, - instantiating the member functions with bool will yield something - similar to: - - const bool &get () const - { - gdb_assert (m_var_type == var_boolean); - gdb_assert (m_var != nullptr); - return *static_cast (m_var); - } - void set (const bool &var) - { - gdb_assert (m_var_type == var_boolean); - gdb_assert (m_var != nullptr); - *static_cast (m_var) = var; - } - - Using the new abstraction, our initial example becomes: - - switch (c->var_type) - { - case var_zuinteger: - unsigned int v = c->var->get (); - ... - break; - case var_boolean: - bool v = c->var->get (); - ... - break; - ... - } - - While the call site is still similar, the introduction of runtime checks - help ensure correct usage of the data. - - In order to avoid turning the bulk of add_setshow_cmd_full into a - templated function, and following a suggestion from Pedro Alves, a - setting can be constructed from a pre validated type erased reference to - a variable. This is what setting::erased_args is used for. - - Introducing an opaque abstraction to describe a setting will also make - it possible to use callbacks to retrieve or set the value of the setting - on the fly instead of pointing to a static chunk of memory. This will - be done added in a later commit. - - Given that a cmd_list_element may or may not reference a setting, the - VAR and VAR_TYPES members of the struct are replaced with a - gdb::optional named VAR. - - Few internal function signatures have been modified to take into account - this new abstraction: - - -The functions value_from_setting, str_value_from_setting and - get_setshow_command_value_string used to have a 'cmd_list_element *' - parameter but only used it for the VAR and VAR_TYPE member. They now - take a 'const setting &' parameter instead. - - Similarly, the 'void *' and a 'enum var_types' parameters of - pascm_param_value and gdbpy_parameter_value have been replaced with a - 'const setting &' parameter. - - No user visible change is expected after this patch. - - Tested on GNU/Linux x86_64, with no regression noticed. - - Change-Id: Ie1d08c3ceb8b30b3d7bf1efe036eb8acffcd2f34 - -2021-10-03 Mike Frysinger - - sim: filter out SIGSTKSZ [PR sim/28302] - We map target signals to host signals so we can propagate signals - between the host & simulated worlds. That means we need to know - the symbolic names & values of all signals that might be sent. - - The tools that generate that list use signal.h and include all - symbols that start with "SIG" so as to automatically include any - new symbols that the C library might add. Unfortunately, this - also picks up "SIGSTKSZ" which is not actually a signal itself, - but a signal related setting -- it's the size of the stack when - a signal is handled. - - By itself this doesn't super matter as we will never see a signal - with that same value (since the range of valid signals tend to be - way less than 1024, and the size of the default signal stack will - never be that small). But with recent glibc changes that make this - into a dynamic value instead of a compile-time constant, some users - see build failures when building the sim. - - As suggested by Adam Sampson, update our scripts to ignore this - symbol to simplify everything and avoid the build failure. - - Bug: https://sourceware.org/PR28302 - -2021-10-03 Mike Frysinger - - sim: ppc: fallback when ln is not available [PR sim/18864] - Not all systems have easy access to hard links or symlinks, so add - fallback logic to the run->psim build code to handle those. - - Bug: https://sourceware.org/PR18864 - -2021-10-03 Lancelot SIX - - gdb: Fix comment in riscv_scan_prologue - I found an inaccurate comment in riscv_scan_prologue. This commit fixes - it. - -2021-10-03 Lancelot SIX - - gdb: Support the c.mv insn in the riscv prologue scanner. - While working on other problems, I encountered situations where GDB - fails to properly unwind the stack because some functions use the C.MV - instruction in the prologue. The prologue scanner stops when it hits - this instruction assuming its job is done at this point. Unfortunately - the prologue is not necessarily finished yet, preventing GDB to properly - unwind. - - This commit adds support for handling such instruction in - riscv_scan_prologue. - - Note that C.MV is part of the compressed instruction set. The MV - counterpart from the base ISA is a pseudo instruction that expands to - 'ADDI RD,RS1,0' which is already supported. - - Tested on riscv64-linux-gnu. - - All feedback are welcome. - -2021-10-03 GDB Administrator - - Automatic date update in version.in - -2021-10-02 Simon Marchi - - [gdb/symtab] Remove COMPUNIT_CALL_SITE_HTAB - Remove macro COMPUNIT_CALL_SITE_HTAB, and provide access to the htab using - member functions: - - compunit_symtab::find_call_site - - compunit_symtab::set_call_site_htab - - Tested on x86_64-linux. - - Co-Authored-By: Tom de Vries - -2021-10-02 Simon Marchi - - gdb/python: fix a few flake8 warnings - Fix these rather obvious warnings reported by flake8: - - ./lib/gdb/FrameIterator.py:16:1: F401 'gdb' imported but unused - ./lib/gdb/FrameIterator.py:17:1: F401 'itertools' imported but unused - ./lib/gdb/command/prompt.py:55:26: E712 comparison to False should be 'if cond is False:' or 'if not cond:' - ./lib/gdb/command/explore.py:526:9: F841 local variable 'has_explorable_fields' is assigned to but never used - ./lib/gdb/command/explore.py:697:56: E712 comparison to False should be 'if cond is False:' or 'if not cond:' - ./lib/gdb/command/explore.py:736:62: E712 comparison to False should be 'if cond is False:' or 'if not cond:' - ./lib/gdb/command/explore.py:767:61: E712 comparison to False should be 'if cond is False:' or 'if not cond:' - ./lib/gdb/command/frame_filters.py:21:1: F401 'copy' imported but unused - ./lib/gdb/command/frame_filters.py:22:1: F401 'gdb.FrameIterator.FrameIterator' imported but unused - ./lib/gdb/command/frame_filters.py:23:1: F401 'gdb.FrameDecorator.FrameDecorator' imported but unused - ./lib/gdb/command/frame_filters.py:25:1: F401 'itertools' imported but unused - ./lib/gdb/command/frame_filters.py:179:17: E712 comparison to True should be 'if cond is True:' or 'if cond:' - - Change-Id: I4f49c0cb430359ee872222600c61d9c5283b09ab - -2021-10-02 GDB Administrator - - Automatic date update in version.in - -2021-10-01 Luis Machado - - Fix build failure for 32-bit targets - When building master GDB, I ran into the following: - - binutils-gdb/gdb/bt-utils.c: In function 'int libbacktrace_print(void*, uintptr_t, const char*, int, const char*)': - binutils-gdb/gdb/bt-utils.c:93:44: error: format '%lx' expects argument of type 'long unsigned int', but argument 4 has type 'uintptr_t {aka unsigned int}' [-Werror=format=] - snprintf (buf, sizeof (buf), "0x%lx ", pc); - - Fix this by using %PRIxPTR as opposed to %lx. - -2021-10-01 Nick Clifton - - Fix mistake in RX assembler documentation (special section names) - -2021-10-01 Simon Marchi - - [gdb/symtab] Fix htab_find_slot call in read_call_site_scope - In read_call_site_scope we have: - ... - call_site_local.pc = pc; - slot = htab_find_slot (cu->call_site_htab, &call_site_local, INSERT); - ... - - The call passes a call_site pointer as element. OTOH, the hashtab is created - using hash_f == core_addr_hash and eq_f == core_addr_eq, so the element - will be accessed through a CORE_ADDR pointer. - - This is not wrong (at least in C), given that pc is the first field in - call_site. - - Nevertheless, as in call_site_for_pc, make the htab_find_slot call match the - used hash_f and eq_f by using &pc instead: - ... - slot = htab_find_slot (cu->call_site_htab, &pc, INSERT); - ... - - Tested on x86_64-linux. - - Co-Authored-By: Tom de Vries - -2021-10-01 Andrea Corallo - - PATCH bfd: Fix linker warning for recently introduced arm attributes - 2021-09-27 Andrea Corallo - - * elf-bfd.h (NUM_KNOWN_OBJ_ATTRIBUTES): Update value to cover - 'Tag_BTI_use' and 'Tag_PACRET_use'. - -2021-10-01 Simon Marchi - - gdb/testsuite/dwarf: use options for rnglists/loclists procs - Change how rnglists and loclists procs to align them with how procs for - aranges (and other things in the DWARF assembler) work. Instead of - using "args" (variable number of parameters in TCL) and command-line - style option arguments, use one leading "option" parameters, used as a - kind of key/value dictionary of options parsed using `parse_options`. - - Change-Id: I63e60d17ae16a020ce4d6de44baf3d152ea42a1a - -2021-10-01 Simon Marchi - - gdb/testsuite/dwarf: don't define nested procs for rnglists/loclists - When I wrote support for rnglists and loclists in the testsuite's DWARF - assembler, I made it with nested procs, for example proc "table" inside - proc "rnglists". The intention was that this proc "table" could only be - used by the user while inside proc "rnglists"'s body. I had chosen very - simple names, thinking there was no chance of name clashes. I recently - learned that this is not how TCL works. This ends up defining a proc - "table" in the current namespace ("Dwarf" in this case). - - Things still work if you generate rnglists and loclists in the same - file, as each redefines its own procedures when executing. But if a - user of the assembler happened to define a convenience "table" or - "start_end" procedure, for example, it would get overriden. - - I'd like to change how this works to reduce the chances of a name clash. - - - Move the procs out of each other, so they are not defined in a nested - fashion. - - Prefix them with "_rnglists_" or "_loclists_". - - While calling $body in the various procs, temporarily make the procs - available under their "short" name. For example, while in rngllists' - body, make _rnglists_table available as just "table". This allows - existing code to keep working and keeps it not too verbose. - - Modify with_override to allow the overriden proc to not exist. In - that case, the temporary proc is deleted on exit. - - Note the non-conforming indentation when calling with_override in - _loclists_list. This is on purpose: as we implement more loclists (and - rnglists) entry types, the indentation would otherwise get larger and - larger without much value for readability. So I think it's reasonable - here to put them on the same level. - - Change-Id: I7bb48d26fcb0dba1ae4dada05c0c837212424328 - -2021-10-01 Simon Marchi - - gdb: remove TYPE_FIELD_NAME and FIELD_NAME macros - Remove the `TYPE_FIELD_NAME` and `FIELD_NAME` macros, changing all the - call sites to use field::name directly. - - Change-Id: I6900ae4e1ffab1396e24fb3298e94bf123826ca6 - -2021-10-01 Simon Marchi - - gdb: add field::name / field::set_name - Add the `name` and `set_name` methods on `struct field`, in order to - remove `FIELD_NAME` and `TYPE_FIELD_NAME` macros. In this patch, the - macros are changed to use `field::name`, so all the call sites that are - used to set the field's name are changed to use `field::set_name`. - The next patch will remove the macros completely. - - Note that because of the name clash between the existing field named - `name` and the new method, I renamed the field `m_name`. It is not - private per-se, because we can't make `struct field` a non-POD yet, but - it should be considered private anyway (not accessed outside `struct - field`). - - Change-Id: If16ddbca4e0c39d0ff9da420bb5cdebe5b9b0896 - -2021-10-01 GDB Administrator - - Automatic date update in version.in - -2021-09-30 Sergio Durigan Junior - - [PR gdb/28369] Use get_shell on gdb/ser-pipe.c - PR gdb/28369 reports that gdb/ser-pipe.c has an 'execl' function call - with a hard-coded "/bin/sh" as its argument. We've had 'get_shell' - for a while now, which is conscious about the SHELL environment and a - better alternative to always calling "/bin/sh". - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28369 - -2021-09-30 Tom de Vries - - [gdb/testsuite] Add untested for missing xml support in gdb.base/valgrind*.exp - Add untested in case missing xml support is detected in test-cases - gdb.base/valgrind*.exp. - - Tested on x86_64-linux. - -2021-09-30 Przemyslaw Wirkus - - arm: enable Cortex-R52+ CPU - Patch is adding Cortex-R52+ as 'cortex-r52plus' command line - flag for -mcpu option. - - bfd/ - - * cpu-arm.c: New Cortex-R52+ CPU. - - gas/ - - * NEWS: Update docs. - * config/tc-arm.c: New Cortex-R52+ CPU. - * doc/c-arm.texi: Update docs. - * testsuite/gas/arm/cpu-cortex-r52plus.d: New test. - -2021-09-30 Przemyslaw Wirkus - - aarch64: Enable Cortex-X2 CPU - This patch is adding support for Cortex-X2 CPU. - - gas: - - * NEWS: Update docs. - * config/tc-aarch64.c: Add Cortex-X2. - * doc/c-aarch64.texi: Update docs. - -2021-09-30 Przemyslaw Wirkus - - aarch64: Enable Cortex-A710 CPU - This patch is adding support for Cortex-A710 CPU. - - gas/ - - * NEWS: Update docs. - * config/tc-aarch64.c: Add Cortex-A710. - * doc/c-aarch64.texi: Update docs. - -2021-09-30 Przemyslaw Wirkus - - aarch64: Enable Cortex-A510 CPU - This patch is adding support for Cortex-A510 CPU. - - gas/ - - * NEWS: Update docs. - * config/tc-aarch64.c: Add Cortex-A510. - * doc/c-aarch64.texi: Update docs. - -2021-09-30 Przemyslaw Wirkus - - aarch64: Update AArch64 features command line options docs 2/2 - Patch is only sorting by 'Extension` column 'Architecture Extension' - table. - - gas/ - - * doc/c-aarch64.texi: Update docs. - -2021-09-30 Przemyslaw Wirkus - - aarch64: Update AArch64 features command line options docs 1/2 - Patch is improving entries in "Architecture extensions" table in GAS - documentation. - - gas/ - - * doc/c-aarch64.texi: Update docs. - -2021-09-30 Przemyslaw Wirkus - - aarch64: add armv9-a architecture to -march - Patch is adding new 'armv9-a` command line flag to -march for AArch64. - - gas/ - - * config/tc-aarch64.c: Add 'armv9-a' command line flag. - * docs/c-aarch64.text: Update docs. - * NEWS: Update docs. - - include/ - - * opcode/aarch64.h (AARCH64_FEATURE_V9): New define. - (AARCH64_ARCH_V9): New define. - -2021-09-30 Simon Marchi - - gdb/testsuite: make runto_main not pass no-message to runto - As follow-up to this discussion: - - https://sourceware.org/pipermail/gdb-patches/2020-August/171385.html - - ... make runto_main not pass no-message to runto. This means that if we - fail to run to main, for some reason, we'll emit a FAIL. This is the - behavior we want the majority of (if not all) the time. - - Without this, we rely on tests logging a failure if runto_main fails, - otherwise. They do so in a very inconsisteny mannet, sometimes using - "fail", "unsupported" or "untested". The messages also vary widly. - This patch removes all these messages as well. - - Also, remove a few "fail" where we call runto (and not runto_main). by - default (without an explicit no-message argument), runto prints a - failure already. In two places, gdb.multi/multi-re-run.exp and - gdb.python/py-pp-registration.exp, remove "message" passed to runto. - This removes a few PASSes that we don't care about (but FAILs will still - be printed if we fail to run to where we want to). This aligns their - behavior with the rest of the testsuite. - - Change-Id: Ib763c98c5f4fb6898886b635210d7c34bd4b9023 - -2021-09-30 Simon Marchi - - gdbsupport: make gdb_mkostemp_cloexec return a scoped_fd - This encourages the callers to use automatic file descriptor management. - - Change-Id: I137a81df6f3607b457e28c35aafde8ed6f3a3344 - -2021-09-30 Simon Marchi - - gdbsupport: make gdb_open_cloexec return scoped_fd - Make gdb_open_cloexec return a scoped_fd, to encourage using automatic - management of the file descriptor closing. Except in the most trivial - cases, I changed the callers to just release the fd, which retains their - existing behavior. That will allow the transition to using scoped_fd - more to go gradually, one caller at a time. - - Change-Id: Ife022b403f96e71d5ebb4f1056ef6251b30fe554 - -2021-09-30 Simon Marchi - - gdbsupport: move gdb_file_up to its own file - The following patches wants to change gdb_fopen_cloexec and - gdb_mkostemp_cloexec to return a scoped_fd. Doing this causes a cyclic - include between scoped_fd.h and filestuff.h, that both want to include - each other. scoped_fd.h includes filestuff.h because of the - scoped_fd::to_file method's return value. filestuff.h would then - include scoped_fd.h for gdb_fopen_cloexec's and gdb_mkostemp_cloexec's - return values. - - To fix that, move gdb_file_up to its own file, gdb_file.h. - - Change-Id: Ic82a48914b2aacee8f14af535b7469245f88b93d - -2021-09-30 Dimitar Dimitrov - - ld: pru: Fix resource_table output section alignment - My commit 261980de18b added alignment for the resource table symbol. - But it is wrong. The Linux remoteproc driver loads and interprets the - contents of the .resource_table ELF section, not of a table symbol. - - Without this patch, if the linker happens to output padding for symbol - alignment, then the resource table contents as viewed by the kernel - loader would "shift" and look corrupted. - - ld/ChangeLog: - - * scripttempl/pru.sc (.resource_table): Align the output - section, not the first symbol. - -2021-09-30 Tom Tromey - - Fix Windows crash from stop_pc change - The "make thread_suspend_state::stop_pc optional" patch caused a - regression on Windows when using shared libraries. I tracked this - down to an unguarded use of stop_pc() in the TARGET_WAITKIND_LOADED - case of handle_inferior_event. This patch fixes the bug by ensuring - that the stop PC is set at this point. - -2021-09-30 Tom de Vries - - [gdb/testsuite] Use untested in gdb.debuginfod/fetch_src_and_symbols.exp - With running test-case gdb.debuginfod/fetch_src_and_symbols.exp with target - board unix/-bad, I get: - ... - gcc: error: unrecognized command line option '-bad'^M - compiler exited with status 1 - gdb compile failed, gcc: error: unrecognized command line option '-bad' - FAIL: gdb.debuginfod/fetch_src_and_symbols.exp: compile - ... - - Replace the FAIL with the usual: - ... - UNTESTED: gdb.debuginfod/fetch_src_and_symbols.exp: failed to compile - ... - - Tested on x86_64-linux. - -2021-09-30 Tom de Vries - - [gdb/testsuite] Remove redundant FAIL in gdb.base/info-os.exp - When running test-case gdb.base/info-os.exp with target board unix/-bad, I run - into: - ... - gdb compile failed, gcc: error: unrecognized command line option '-bad' - UNTESTED: gdb.base/info-os.exp: failed to prepare - FAIL: gdb.base/info-os.exp: cannot compile test program - ... - - Remove the redundant FAIL. - - Tested on x86_64-linux. - -2021-09-30 Tom de Vries - - [gdb/testsuite] Fix DUPLICATE in gdb.base/info-os.exp - When running test-case gdb.base/info-os.exp, I run into: - ... - PASS: gdb.base/info-os.exp: get threads - PASS: gdb.base/info-os.exp: get threads - DUPLICATE: gdb.base/info-os.exp: get threads - ... - - Fix this not doing pass followed by exp_continue in gdb_test_multiple. - - Tested on x86_64-linux. - -2021-09-30 Tom de Vries - - [gdb/testsuite] Check compilation result in gdb.dwarf2/dw2-opt-structptr.exp - When running test-case gdb.dwarf2/dw2-opt-structptr.exp with target board - unix/-bad, I get: - ... - gdb compile failed, gcc: error: unrecognized command line option '-bad' - UNTESTED: gdb.dwarf2/dw2-opt-structptr.exp: dw2-opt-structptr.exp - UNTESTED: gdb.dwarf2/dw2-opt-structptr.exp: failed to compile - ERROR: (dw2-opt-structptr) No such file or directory - UNRESOLVED: gdb.dwarf2/dw2-opt-structptr.exp: console: set print object on - ... - - Merge the two UNTESTEDs. - - Fix the UNRESOLVED by checking result of compilation. - - Tested on x86_64-linux. - -2021-09-30 Tom de Vries - - [gdb/testsuite] Check compilation result in gdb.base/structs.exp - When running test-case gdb.base/structs.exp with target board unix/-bad, I - get: - ... - gdb compile failed, gcc: error: unrecognized command line option '-bad' - UNTESTED: gdb.base/structs.exp: failed to prepare - ERROR: tcl error sourcing src/gdb/testsuite/gdb.base/structs.exp. - ERROR: can't read "use_gdb_stub": no such variable - ... - - Fix this by checking the compilation result. - - Fix the resulting DUPLICATEs using with_test_prefix. - - Tested on x86_64-linux. - -2021-09-30 Tom de Vries - - [gdb/testsuite] Prepare nodebug exec in gdb.base/cvexpr.exp - When running test-case gdb.base/cvexpr.exp with target board unix/-bad, I get: - ... - gdb compile failed, gcc: error: unrecognized command line option '-bad' - ERROR: tcl error sourcing src/gdb/testsuite/gdb.base/cvexpr.exp. - ERROR: can't read "use_gdb_stub": no such variable - ... - - This is triggered in a part of the test that claims to require no debug - information, but uses the exec containing either dwarf or ctf. - - Fix this by preparing another executable compiled with nodebug, and using - that one instead. - - Also use with_test_prefix to mark the nodebug part, such that we have: - ... - gdb compile failed, gcc: error: unrecognized command line option '-bad' - UNTESTED: gdb.base/cvexpr.exp: dwarf: failed to prepare - gdb compile failed, gcc: error: unrecognized command line option '-bad' - UNTESTED: gdb.base/cvexpr.exp: nodebug: failed to prepare - ... - - Tested on x86_64-linux. - -2021-09-30 Tom de Vries - - [gdb/testsuite] Fix DUPLICATE in gdb.base/cvexpr.exp - Fix: - ... - DUPLICATE: gdb.base/cvexpr.exp: ptype int * restrict - ... - using with_test_prefix. - - Tested on x86_64-linux. - -2021-09-30 Tom de Vries - - [gdb/testsuite] Check compilation result in gdb.base/call-sc.exp - When running test-case gdb.base/call-sc.exp with target board unix/-bad, I - get: - ... - gdb compile failed, gcc: error: unrecognized command line option '-bad' - UNTESTED: gdb.base/call-sc.exp: failed to prepare - ERROR: tcl error sourcing src/gdb/testsuite/gdb.base/call-sc.exp. - ERROR: can't read "use_gdb_stub": no such variable - ... - - Fix this by checking the compilation result. - - Fix the resulting DUPLICATE: - ... - DUPLICATE: gdb.base/call-sc.exp: failed to prepare - ... - using with_test_prefix. - - Tested on x86_64-linux. - -2021-09-30 Tom de Vries - - [gdb/testsuite] Fix untested messages in gdb.mi/*.exp - The effect of: - ... - untested "y.exp" - ... - in a gdb.x/y.exp is: - ... - UNTESTED: gdb.x/y.exp: y.exp - ... - which is a bit pointless. - - Replace these untested messages in gdb.mi/*.exp with the usual "failed to - compile". - - Likewise for an: - ... - untested $testname - ... - where the variable is undefined. - - Tested on x86_64-linux. - -2021-09-30 Nick Clifton - - make objcopy fail if it is asked to redefine symbols in an object file containing LTO information. - * objcopy.c (filter_symbols): Fail if attempting to dredefine - symbols in an LTO object file. - -2021-09-30 Tom de Vries - - [gdb/testsuite] Fix full buffer in gdb.rust/dwindex.exp - On ubuntu 18.04.5, I run into: - ... - (gdb) mt print objfiles dwindex^M - ^M - Object file build/gdb/testsuite/outputs/gdb.rust/dwindex/dwindex: \ - Objfile at 0x55dab0b87a50, bfd at 0x55dab0b0cfa0, 1095 minsyms^M - ^M - Psymtabs:^M - vendor/compiler_builtins/src/int/specialized_div_rem/mod.rs at 0x55dab0db0720^M - ... - library/std/src/sys/unix/stdio.rs at 0x55dab0d96320^M - ERROR: internal buffer is full. - UNRESOLVED: gdb.rust/dwindex.exp: check if index present - ... - - Fix this by using -lbl in proc ensure_gdb_index. - - Tested on x86_64-linux. - -2021-09-30 Libor Bukata - - Add Solaris specific ELF note processing - Add elfcore_grok_solaris_note function that enables to - obtain process status, register values, and program info - from Solaris's core files. - - bfd/ - * elf.c (elfcore_grok_solaris_note): Solaris specific ELF - note parser. Better GDB's coredump analysis on Solaris... - (elfcore_grok_solaris_note_impl): New function. - (elfcore_grok_solaris_prstatus): New function. - (elfcore_grok_solaris_info): New function. - (elfcore_grok_solaris_lwpstatus): New function. - (elf_parse_notes): Added "CORE" groker element. - include/ - * elf/common.h: Add note segment constants for core files on - Solaris systems. - -2021-09-30 Frederic Cambus - - Add support to readelf for reading OpenBSD ELF core notes. - * readelf.c (get_openbsd_elfcore_note_type): New function. - (process_note): Add support for OpenBSD core notes. - -2021-09-30 GDB Administrator - - Automatic date update in version.in - -2021-09-29 Tom de Vries - - [gdb/testsuite] Fix gdb.base/break-interp.exp for ld.so without debug - When running test-case gdb.base/break-interp.exp on openSUSE Leap 42.3, I get: - ... - (gdb) info addr dl_main^M - Symbol "dl_main" is at 0x1750 in a file compiled without debugging.^M - (gdb) FAIL: gdb.base/break-interp.exp: info addr dl_main - ... - while the regexp expects "Symbol \"dl_main\" is a function at address $hex\\." - - Fix this by also accepting this variant. - - Tested on x86_64-linux. - -2021-09-29 H.J. Lu - - Add a testcase for PR binutils/27202 - PR binutils/27202 - * testsuite/gas/elf/dwarf-5-loc0.d: New file. - * testsuite/gas/elf/dwarf-5-loc0.s: Likewise. - * testsuite/gas/elf/elf.exp: Run dwarf-5-loc0. - -2021-09-29 Pedro Alves - - Fix gdb.multi/multi-term-settings.exp race - The gdb.multi/multi-term-settings.exp testcase sometimes fails like so: - - Running /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.multi/multi-term-settings.exp ... - FAIL: gdb.multi/multi-term-settings.exp: inf1_how=attach: inf2_how=attach: stop with control-c (SIGINT) - - It's easier to reproduce if you stress the machine at the same time, like e.g.: - - $ stress -c 24 - - Looking at gdb.log, we see: - - (gdb) attach 60422 - Attaching to program: build/gdb/testsuite/outputs/gdb.multi/multi-term-settings/multi-term-settings, process 60422 - [New Thread 60422.60422] - Reading symbols from /lib/x86_64-linux-gnu/libc.so.6... - Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/libc-2.31.so... - Reading symbols from /lib64/ld-linux-x86-64.so.2... - (No debugging symbols found in /lib64/ld-linux-x86-64.so.2) - 0x00007f2fc2485334 in __GI___clock_nanosleep (clock_id=, clock_id@entry =0, flags=flags@entry =0, req=req@entry =0x7ffe23126940, rem=rem@entry =0x0) at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78 - 78 ../sysdeps/unix/sysv/linux/clock_nanosleep.c: No such file or directory. - (gdb) PASS: gdb.multi/multi-term-settings.exp: inf1_how=attach: inf2_how=attach: inf2: attach - set schedule-multiple on - (gdb) PASS: gdb.multi/multi-term-settings.exp: inf1_how=attach: inf2_how=attach: set schedule-multiple on - info inferiors - Num Description Connection Executable - 1 process 60404 1 (extended-remote localhost:2349) build/gdb/testsuite/outputs/gdb.multi/multi-term-settings/multi-term-settings - * 2 process 60422 1 (extended-remote localhost:2349) build/gdb/testsuite/outputs/gdb.multi/multi-term-settings/multi-term-settings - (gdb) PASS: gdb.multi/multi-term-settings.exp: inf1_how=attach: inf2_how=attach: info inferiors - pid=60422, count=46 - pid=60422, count=47 - pid=60422, count=48 - pid=60422, count=49 - pid=60422, count=50 - pid=60422, count=51 - pid=60422, count=52 - pid=60422, count=53 - pid=60422, count=54 - pid=60422, count=55 - pid=60422, count=56 - pid=60422, count=57 - pid=60422, count=58 - pid=60422, count=59 - pid=60422, count=60 - pid=60422, count=61 - pid=60422, count=62 - pid=60422, count=63 - pid=60422, count=64 - pid=60422, count=65 - pid=60422, count=66 - pid=60422, count=67 - pid=60422, count=68 - pid=60422, count=69 - pid=60404, count=54 - pid=60404, count=55 - pid=60404, count=56 - pid=60404, count=57 - pid=60404, count=58 - PASS: gdb.multi/multi-term-settings.exp: inf1_how=attach: inf2_how=attach: continue - Quit - (gdb) FAIL: gdb.multi/multi-term-settings.exp: inf1_how=attach: inf2_how=attach: stop with control-c (SIGINT) - - If you look at the testcase's sources, you'll see that the intention - is to resumes the program with "continue", wait to see a few of those - "pid=..., count=..." lines, and then interrupt the program with - Ctrl-C. But somehow, that resulted in GDB printing "Quit", instead of - the Ctrl-C stopping the program with SIGINT. - - Here's what is happening: - - #1 - those "pid=..., count=..." lines we see above weren't actually - output by the inferior after it has been continued (see #1). - Note that "inf1_how" and "inf2_how" are "attach". What happened - is that those "pid=..., count=..." lines were output by the - inferiors _before_ they were attached to. We see them at that - point instead of earlier, because that's where the testcase - reads from the inferiors' spawn_ids. - - #2 - The testcase mistakenly thinks those "pid=..., count=..." lines - happened after the continue was processed by GDB, meaning it has - waited enough, and so sends the Ctrl-C. GDB hasn't yet passed - the terminal to the inferior, so the Ctrl-C results in that - Quit. - - The fix here is twofold: - - #1 - flush inferior output right after attaching - - #2 - consume the "Continuing" printed by "continue", indicating the - inferior has the terminal. This is the same as done throughout - the testsuite to handle this exact problem of sending Ctrl-C too - soon. - - gdb/testsuite/ChangeLog: - yyyy-mm-dd Pedro Alves > - - * gdb.multi/multi-term-settings.exp (create_inferior): Flush - inferior output. - (coretest): Use $gdb_test_name. After issuing "continue", wait - for "Continuing". - - Change-Id: Iba7671dfe1eee6b98d29cfdb05a1b9aa2f9defb9 - -2021-09-29 Tom de Vries - - [gdb/testsuite] Disable vgdb tests if xml not supported - I build gdb without xml support using --without-expat, and ran into: - ... - (gdb) target remote | vgdb --wait=2 --max-invoke-ms=2500 --pid=22032^M - Remote debugging using | vgdb --wait=2 --max-invoke-ms=2500 --pid=22032^M - relaying data between gdb and process 22032^M - warning: Can not parse XML target description; XML support was disabled at \ - compile time^M - ... - (gdb) PASS: gdb.base/valgrind-infcall.exp: continue #1 - p gdb_test_infcall ()^M - Remote 'g' packet reply is too long (expected 560 bytes, got 800 bytes): ...^M - (gdb) FAIL: gdb.base/valgrind-infcall.exp: p gdb_test_infcall () - ... - - After googling the error message with context valgrind gdbserver, I found - indications that the Remote 'g' packet reply error is due to missing xml - support. - - And here ( https://www.valgrind.org/docs/manual/manual-core-adv.html ) I - found: - ... - GDB version needed for ARM and PPC32/64. - - You must use a GDB version which is able to read XML target description sent - by a gdbserver. This is the standard setup if GDB was configured and built - with the "expat" library. If your GDB was not configured with XML support, it - will report an error message when using the "target" command. Debugging will - not work because GDB will then not be able to fetch the registers from the - Valgrind gdbserver. - ... - - So I guess I'm running into the same problem for x86_64. - - Fix this by skipping all gdb.base/valgrind-*.exp tests if xml support is not - available. Although only the gdb.base/valgrind-infcall*.exp produce fails, - the Remote 'g' packet reply error occurs in all tests, so it seems prudent to - disable them all. - - Tested on x86_64-linux. - -2021-09-29 Tom de Vries - - [gdb/testsuite] Fix gdb.python/py-breakpoint.exp with python 2 - With a gdb build using python 2.7, I run into: - ... - (gdb) python \ - gdb.events.breakpoint_modified.connect(lambda bp: print(bp.enabled))^M - File "", line 1^M - gdb.events.breakpoint_modified.connect(lambda bp: print(bp.enabled))^M - ^^M - SyntaxError: invalid syntax^M - Error while executing Python code.^M - (gdb) FAIL: gdb.python/py-breakpoint.exp: test_bkpt_auto_disable: \ - trap breakpoint_modified event - ... - - This is caused by the following: - - a lambda function body needs to be an expression - - in python 2, print is a statement, while in python 3 it's a function - - a function call is an expression, and a statement is not. - - Fix this by defining a function print_bp_enabled: - ... - def print_bp_enabled (bp): - print (bp.enabled) - end - ... - and using that instead. - - Tested on x86_64-linux. - -2021-09-29 Tom de Vries - - [gdb/testsuite] Fix breakpoint detection in gdb.gdb/python-helper.exp - With a gdb configured to be somewhat minimal, while still supporting python: - ... - $ gdb --configuration - This GDB was configured as follows: - configure --host=x86_64-pc-linux-gnu --target=x86_64-pc-linux-gnu - --with-auto-load-dir=$debugdir:$datadir/auto-load - --with-auto-load-safe-path=$debugdir:$datadir/auto-load - --without-expat - --with-gdb-datadir=$install/share/gdb (relocatable) - --with-jit-reader-dir=$install/lib64/gdb (relocatable) - --without-libunwind-ia64 - --without-lzma - --without-babeltrace - --without-intel-pt - --with-mpfr - --without-xxhash - --with-python=/usr - --with-python-libdir=/usr/lib - --with-debuginfod - --without-guile - --disable-source-highlight - --with-separate-debug-dir=/usr/lib/debug - --with-system-gdbinit=$devel/system-gdbinit - ... - and using gcc 4.8 to build gdb (causing std::thread not to be used due to - PR28318) I ran into: - ... - (gdb) PASS: gdb.gdb/python-helper.exp: start inner gdb - print 1^M - ^M - Breakpoint 2, value_print () at src/gdb/valprint.c:1174^M - 1174 scoped_value_mark free_values;^M - (xgdb) FAIL: gdb.gdb/python-helper.exp: hit breakpoint in inner gdb (timeout) - ... - - The problem is that the regexp expects "hit Breakpoint $decimal". The "hit" - part is missing. - - The "hit" is printed by maybe_print_thread_hit_breakpoint, when - show_thread_that_caused_stop returns true: - ... - int - show_thread_that_caused_stop (void) - { - return highest_thread_num > 1; - } - ... - Apparently, that's not the case. - - Fix this by removing "hit" from the regexp, making the regexp more similar to - what is used in say, continue_to_breakpoint. - - Tested on x86_64-linux. - -2021-09-29 Andrew Burgess - - gdb: fix build when libbacktrace and execinfo backtrace are not available - In this commit: - - commit abbbd4a3e0ca51132e7fb31a43f896d29894dae0 - Date: Wed Aug 11 13:24:33 2021 +0100 - - gdb: use libbacktrace to create a better backtrace for fatal signals - - The build of GDB was broken iff, the execinfo backtrace API is not - available, and, libbacktrace is either disabled, or not usable. In - this case you'll see build errors like this: - - CXX bt-utils.o - /home/username/src/binutils-gdb/gdb/bt-utils.c: In function 'void gdb_internal_backtrace()': - /home/username/src/binutils-gdb/gdb/bt-utils.c:165:5: error: 'gdb_internal_backtrace_1' was not declared in this scope - gdb_internal_backtrace_1 (); - ^~~~~~~~~~~~~~~~~~~~~~~~ - - This commit fixes the issue by guarding the call to - gdb_internal_backtrace_1 with '#ifdef GDB_PRINT_INTERNAL_BACKTRACE', - which is only defined when one of the backtrace libraries are - available. - -2021-09-29 Andrew Burgess - - gdb/doc: use 'standard error stream' instead of 'stderr' in some places - With this commit: - - commit 91f2597bd24d171c1337a4629f8237aa47c59082 - Date: Thu Aug 12 18:24:59 2021 +0100 - - gdb: print backtrace for internal error/warning - - I included some references to 'stderr', which, it was pointed out, - would be better written as 'standard error stream'. See: - - https://sourceware.org/pipermail/gdb-patches/2021-September/182225.html - - This commit replaces the two instances of 'stderr' that I introduced. - -2021-09-29 Andrew Burgess - - gdb: fix manor -> manner typo in some comments - In a recent commit I used 'manor' in some comments rather than - 'manner'. This commit fixes those two mistakes. - - I also looked through the gdb/ tree and found one additional instance - of this mistake that this commit also fixes. - -2021-09-29 Alan Modra - - PR27202, readelf -wL doesn't work on ".loc 0" - For DWARF revision 4 and earlier, display_debug_lines_decoded - populates the file_table array with entries read from .debug_line - after the directory table. file_table[0] contains the first entry. - DWARF rev 4 line number programs index this entry as file number one. - DWARF revision 5 changes .debug_line format quite extensively, and in - particular gives file number zero a meaning. - - PR 27202 - * dwarf.c (display_debug_lines_decoded): Correct indexing used - for DWARF5 files. - -2021-09-29 Simon Marchi - - gdb: enable target_async around stop_all_threads call in process_initial_stop_replies - The following scenario hangs: - - - maint set target-non-stop on - - `gdbserver --attach` - - a multi-threaded program - - For example: - - Terminal 1: - - $ gnome-calculator& - [1] 495731 - $ ../gdbserver/gdbserver --once --attach :1234 495731 - Attached; pid = 495731 - Listening on port 1234 - - Terminal 2: - - $ ./gdb -nx -q --data-directory=data-directory /usr/bin/gnome-calculator -ex "maint set target-non-stop on" -ex "tar rem :1234" - Reading symbols from /usr/bin/gnome-calculator... - (No debugging symbols found in /usr/bin/gnome-calculator) - Remote debugging using :1234 - * hangs * - - What happens is: - - - The protocol between gdb and gdbserver is in non-stop mode, but the - user-visible behavior is all-stop - - On connect, gdbserver sends one stop reply for one thread that is - stops, the others stay running - - In process_initial_stop_replies, gdb calls stop_all_threads to stop - these other threads, because we are using the all-stop user-visible - mode - - stop_all_threads sends a stop request for all the running threads and - then waits for resulting events - - At this point, the remote target is in target_async(0) mode, which - makes stop_all_threads not consider it for events - - stop_all_threads loops indefinitely (it does not even block - indefinitely, it is in an infinite busy loop) because there are no - event sources. wait_one_event returns a TARGET_WAITKIND_NO_RESUMED - wait status. - - Fix that by making the remote target async around the stop_all_threads - call. - - I haven't implemented it because I'm not sure how to do it, but I think - it would be a good idea to have, in stop_all_threads / wait_one / - handle_one, an assert to check that if we are expecting one or more - event, then there are some targets that are in a state where they can - supply some events. Otherwise, we'll necessarily be stuck in this - infinite loop, and it's probably due to a bug in GDB. I'm not too sure - where to put this or how to express it though. Perhaps in - stop_all_threads, here: - - for (int i = 0; i < waits_needed; i++) - { - wait_one_event event = wait_one (); - *here* - if (handle_one (event)) - break; - } - - If at that point, the returned event is TARGET_WAITKIND_NO_RESUMED, - there's a problem. We expect some event, because we've asked some - threads to stop, but all targets are answering that they won't have any - events for us. That's a contradiction, and a sign that something has - gone wrong. It could perhaps event be: - - gdb_assert (event.ws.kind != TARGET_WAITKIND_NO_RESUMED); - - in handle_one, as the idea is the same in prepare_for_detach. - - A bit more sophisticated would be: we know which targets we are - expecting waits from, since we know which threads we have asked to - stop. So if any of these targets returns TARGET_WAITKIND_NO_RESUMED, - something is fishy. - - Add a test that tests attaching with gdbserver's --attach flag to a - multi-threaded program, and then connecting to it. Without the fix, the - test reproduces the hang. - - Change-Id: If6f6690a4887ca66693ef1af64791dda4c65f24f - -2021-09-29 GDB Administrator - - Automatic date update in version.in - -2021-09-29 Simon Marchi - - gdb: fix darwin-nat build (again) - I made a mistake in the previous patch. Adjust the format string to - match the arguments. - - Change-Id: I4d45e0e0adb78eb3b5a06ba1a5287155940056ba - -2021-09-29 Simon Marchi - - gdb: fix darwin-nat build - There are two errors of this kind: - - CXX darwin-nat.o - /Users/smarchi/src/binutils-gdb/gdb/darwin-nat.c:1175:19: error: format specifies type 'unsigned long' but the argument has type 'ULONGEST' (aka 'unsigned long long') [-Werror,-Wformat] - ptid.pid (), ptid.tid ()); - ^~~~~~~~~~~ - - Fix them by using ptid_t's to_string method. - - Change-Id: I52087d5f7ee0fc01ac8b3f87d4db0217cb0d7cc7 - -2021-09-29 Simon Marchi - - gdb.base/foll-fork.exp: accept "info breakpoints" output in any order - The test currently requires the "inf 1" breakpoint to be before the "inf - 2" breakpoint. This is not always the case: - - info breakpoints 2 - Num Type Disp Enb Address What - 2 breakpoint keep y - 2.1 y 0x0000555555554730 in callee at /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/foll-fork.c:9 inf 2 - 2.2 y 0x0000555555554730 in callee at /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/foll-fork.c:9 inf 1 - (gdb) FAIL: gdb.base/foll-fork.exp: follow-fork-mode=parent: detach-on-fork=off: cmd=next 2: test_follow_fork: info breakpoints - - Since add_location_to_breakpoint uses only the address as a criterion to - sort locations, the order of locations at the same address is not - stable: it will depend on the insertion order. Here, the insertion - order comes from the order of SALs when creating the breakpoint, which - can vary from machine to machine. While it would be more user-friendly - to have a more stable order for printed breakpoint locations, it doesn't - really matter for this test, and it would be hard to define an order - that will be the same everywhere, all the time. - - So, loosen the regexp to accept "inf 1" and "inf 2" in any order. - - Co-Authored-By: Pedro Alves - Change-Id: I5ada2e0c6ad0669e0d161bfb6b767229c0970d16 - -2021-09-28 Cooper Qu - - RISC-V: Fix wrong version number when arch contains 'p'. - When specify a default version for p extension in - riscv_supported_std_ext[](elfxx-riscv.c) and assembling with - -march=rv32imacp, the c extension's version in attribute will become - 0p0, the expectation is 2p0. - - TODO: Remember to add testcase when we have supported standrad p in - the future. - - bfd/ - PR gas/28372 - * elfxx-riscv.c (riscv_parsing_subset_version): Break if p - represent the 'p' extension. - - Change-Id: Ia4e0cf26f3d7d07acaee8cefd86707ecac663a59 - -2021-09-28 Nelson Chu - - RISC-V: Allow to add numbers in the prefixed extension names. - We need to allow adding numbers in the prefixed extension names, since - the zve<32,64> extensions are included in the forzen rvv v1.0 spec - recently. But there are two restrictions as follows, - - * The extension name ends with p is invalid, since this may - be confused with extension with .0 version. We report errors - for this case. - - Invalid format: [z|h|s|zvm|x][0-9a-z]+[0-9]+p - - * The extension name ends with numbers is valid, but the numbers will - be parsed as major version, so try to avoid naming extensions like this. - - bfd/ - * elfxx-riscv.c (riscv_recognized_prefixed_ext): Renamed from - riscv_valid_prefixed_ext/ - (riscv_parsing_subset_version): The extensions end with p - is forbidden, we already report the detailed errors in the - riscv_parse_prefixed_ext, so clean the code and unused parameters. - (riscv_parse_std_ext): Updated. - (riscv_parse_prefixed_ext): Rewrite the parser to allow numbers - in the prefixed extension names. - gas/ - * testsuite/gas/riscv/march-fail-invalid-x-01.d: New testcases. - * testsuite/gas/riscv/march-fail-invalid-x-02.d: Likewise. - * testsuite/gas/riscv/march-fail-invalid-z-01.d: Likewise. - * testsuite/gas/riscv/march-fail-invalid-z-02.d: Likewise. - * testsuite/gas/riscv/march-fail-invalid.l: Likewise. - * testsuite/gas/riscv/march-fail-version-x.d: Removed. - * testsuite/gas/riscv/march-fail-version-z.d: Likewise. - * testsuite/gas/riscv/march-fail-version.l: Likewise. - -2021-09-28 Andrew Burgess - - gdb: print backtrace for internal error/warning - This commit builds on previous work to allow GDB to print a backtrace - of itself when GDB encounters an internal-error or internal-warning. - This fixes PR gdb/26377. - - There's not many places where we call internal_warning, and I guess in - most cases the user would probably continue their debug session. And - so, in order to avoid cluttering up the output, by default, printing - of a backtrace is off for internal-warnings. - - In contrast, printing of a backtrace is on by default for - internal-errors, as I figure that in most cases hitting an - internal-error is going to be the end of the debug session. - - Whether a backtrace is printed or not can be controlled with the new - settings: - - maintenance set internal-error backtrace on|off - maintenance show internal-error backtrace - - maintenance set internal-warning backtrace on|off - maintenance show internal-warning backtrace - - Here is an example of what an internal-error now looks like with the - backtrace included: - - (gdb) maintenance internal-error blah - ../../src.dev-3/gdb/maint.c:82: internal-error: blah - A problem internal to GDB has been detected, - further debugging may prove unreliable. - ----- Backtrace ----- - 0x5c61ca gdb_internal_backtrace_1 - ../../src.dev-3/gdb/bt-utils.c:123 - 0x5c626d _Z22gdb_internal_backtracev - ../../src.dev-3/gdb/bt-utils.c:165 - 0xe33237 internal_vproblem - ../../src.dev-3/gdb/utils.c:393 - 0xe33539 _Z15internal_verrorPKciS0_P13__va_list_tag - ../../src.dev-3/gdb/utils.c:470 - 0x1549652 _Z14internal_errorPKciS0_z - ../../src.dev-3/gdbsupport/errors.cc:55 - 0x9c7982 maintenance_internal_error - ../../src.dev-3/gdb/maint.c:82 - 0x636f57 do_simple_func - ../../src.dev-3/gdb/cli/cli-decode.c:97 - .... snip, lots more backtrace lines .... - --------------------- - ../../src.dev-3/gdb/maint.c:82: internal-error: blah - A problem internal to GDB has been detected, - further debugging may prove unreliable. - Quit this debugging session? (y or n) y - - This is a bug, please report it. For instructions, see: - . - - ../../src.dev-3/gdb/maint.c:82: internal-error: blah - A problem internal to GDB has been detected, - further debugging may prove unreliable. - Create a core file of GDB? (y or n) n - - My hope is that this backtrace might make it slightly easier to - diagnose GDB issues if all that is provided is the console output, I - find that we frequently get reports of an assert being hit that is - located in pretty generic code (frame.c, value.c, etc) and it is not - always obvious how we might have arrived at the assert. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=26377 - -2021-09-28 Andrew Burgess - - gdb: use libbacktrace to create a better backtrace for fatal signals - GDB recently gained the ability to print a backtrace when a fatal - signal is encountered. This backtrace is produced using the backtrace - and backtrace_symbols_fd API available in glibc. - - However, in order for this API to actually map addresses to symbol - names it is required that the application (GDB) be compiled with - -rdynamic, which GDB is not by default. - - As a result, the backtrace produced often looks like this: - - Fatal signal: Bus error - ----- Backtrace ----- - ./gdb/gdb[0x80ec00] - ./gdb/gdb[0x80ed56] - /lib64/libc.so.6(+0x3c6b0)[0x7fc2ce1936b0] - /lib64/libc.so.6(__poll+0x4f)[0x7fc2ce24da5f] - ./gdb/gdb[0x15495ba] - ./gdb/gdb[0x15489b8] - ./gdb/gdb[0x9b794d] - ./gdb/gdb[0x9b7a6d] - ./gdb/gdb[0x9b943b] - ./gdb/gdb[0x9b94a1] - ./gdb/gdb[0x4175dd] - /lib64/libc.so.6(__libc_start_main+0xf3)[0x7fc2ce17e1a3] - ./gdb/gdb[0x4174de] - --------------------- - - This is OK if you have access to the exact same build of GDB, you can - manually map the addresses back to symbols, however, it is next to - useless if all you have is a backtrace copied into a bug report. - - GCC uses libbacktrace for printing a backtrace when it encounters an - error. In recent commits I added this library into the binutils-gdb - repository, and in this commit I allow this library to be used by - GDB. Now (when GDB is compiled with debug information) the backtrace - looks like this: - - ----- Backtrace ----- - 0x80ee08 gdb_internal_backtrace - ../../src/gdb/event-top.c:989 - 0x80ef0b handle_fatal_signal - ../../src/gdb/event-top.c:1036 - 0x7f24539dd6af ??? - 0x7f2453a97a5f ??? - 0x154976f gdb_wait_for_event - ../../src/gdbsupport/event-loop.cc:613 - 0x1548b6d _Z16gdb_do_one_eventv - ../../src/gdbsupport/event-loop.cc:237 - 0x9b7b02 start_event_loop - ../../src/gdb/main.c:421 - 0x9b7c22 captured_command_loop - ../../src/gdb/main.c:481 - 0x9b95f0 captured_main - ../../src/gdb/main.c:1353 - 0x9b9656 _Z8gdb_mainP18captured_main_args - ../../src/gdb/main.c:1368 - 0x4175ec main - ../../src/gdb/gdb.c:32 - --------------------- - - Which seems much more useful. - - Use of libbacktrace is optional. If GDB is configured with - --disable-libbacktrace then the libbacktrace directory will not be - built, and GDB will not try to use this library. In this case GDB - would try to use the old backtrace and backtrace_symbols_fd API. - - All of the functions related to writing the backtrace of GDB itself - have been moved into the new files gdb/by-utils.{c,h}. - -2021-09-28 Andrew Burgess - - src-release.sh: add libbacktrace to GDB_SUPPORT_DIRS - After the previous commit that imported libbacktrace from gcc, this - commit updates src-release.sh so that the libbacktrace directory is - included in the gdb release tar file. - - ChangeLog: - - * src-release.sh (GDB_SUPPPORT_DIRS): Add libbacktrace. - -2021-09-28 Andrew Burgess - - Copy in libbacktrace from gcc - This copies in libbacktrace from the gcc repository as it was in the - commit 62e420293a293608f383d9b9c7f2debd666e9fc9. GDB is going to - start using this library soon. - - A dependency between GDB and libbacktrace has already been added to - the top level Makefile, so, after this commit, when building GDB, - libbacktrace will be built first. However, libbacktrace is not yet - linked into GDB, or used by GDB in any way. - - It is possible to stop libbacktrace being built by configuring the - tree with --disable-libbacktrace. - - This commit does NOT update src-release.sh, that will be done in the - next commit, this commit ONLY imports libbacktrace from gcc. This - means that if you try to make a release of GDB from exactly this - commit then the release tar file will not include libbacktrace. - However, as libbacktrace is an optional dependency this is fine. - -2021-09-28 Andrew Burgess - - gdb: Add a dependency between gdb and libbacktrace - GDB is going to start using libbacktrace, so add a build dependency. - - ChangeLog: - - * Makefile.def: Add all-gdb dependency on all-libbacktrace. - * Makefile.in: Regenerate. - -2021-09-28 Andrew Burgess - - top-level configure: setup target_configdirs based on repository - The top-level configure script is shared between the gcc repository - and the binutils-gdb repository. - - The target_configdirs variable in the configure.ac script, defines - sub-directories that contain components that should be built for the - target using the target tools. - - Some components, e.g. zlib, are built as both host and target - libraries. - - This causes problems for binutils-gdb. If we run 'make all' in the - binutils-gdb repository we end up trying to build a target version of - the zlib library, which requires the target compiler be available. - Often the target compiler isn't immediately available, and so the - build fails. - - The problem with zlib impacted a previous attempt to synchronise the - top-level configure scripts from gcc to binutils-gdb, see this thread: - - https://sourceware.org/pipermail/binutils/2019-May/107094.html - - And I'm in the process of importing libbacktrace in to binutils-gdb, - which is also a host and target library, and triggers the same issues. - - I believe that for binutils-gdb, at least at the moment, there are no - target libraries that we need to build. - - In the configure script we build three lists of things we want to - build, $configdirs, $build_configdirs, and $target_configdirs, we also - build two lists of things we don't want to build, $skipdirs and - $noconfigdirs. We then remove anything that is in the lists of things - not to build, from the list of things that should be built. - - My proposal is to add everything in target_configdirs into skipdirs, - if the source tree doesn't contain a gcc/ sub-directory. The result - is that for binutils-gdb no target tools or libraries will be built, - while for the gcc repository, nothing should change. - - If a user builds a unified source tree, then the target tools and - libraries should still be built as the gcc/ directory will be present. - - I've tested a build of gcc on x86-64, and the same set of target - libraries still seem to get built. On binutils-gdb this change - resolves the issues with 'make all'. - - ChangeLog: - - * configure: Regenerate. - * configure.ac (skipdirs): Add the contents of target_configdirs if - we are not building gcc. - -2021-09-28 Gleb Fotengauer-Malinovskiy - - PR28391, strip/objcopy --preserve-dates *.a: cannot set time - After commit 985e0264516 copy_archive function began to pass invalid - values to the utimensat(2) function when it tries to preserve - timestamps in ar archives. This happens because the bfd_stat_arch_elt - implementation for ar archives fills only the st_mtim.tv_sec part of - the st_mtim timespec structure, but leaves the st_mtim.tv_nsec part - and the whole st_atim timespec untouched leaving them uninitialized - - PR 28391 - * ar.c (extract_file): Clear buf for preserve_dates. - * objcopy.c (copy_archive): Likewise. - -2021-09-28 Mike Frysinger - - sim: drop weak func attrs on module inits - When I first wrote this, I was thinking we'd scan all source files - that existed and generate a complete init list. That means for any - particular build, we'd probably have a few functions that didn't - exist, so weak attributes was necessary. What I ended up scanning - though was only the source files that went into a particular build. - - There was another concern too: a source file might be included, but - the build settings would cause all of its contents to be skipped - (via CPP defines). So scanning via naive grep would pick up names - not actually available. A check of the source tree shows that we - never do this, and it's pretty easy to institute a policy that we - don't start (by at the very least including a stub init func). - - The use of weak symbols ends up causing a problem in practice: for - a few modules (like profiling), nothing else pulls it in, so the - linker omits it entirely, which leads to the profiling module never - being available. So drop the weak markings since we know all these - funcs will be available. - -2021-09-28 Cui,Lili - - x86: Print {bad} on invalid broadcast in OP_E_memory - Don't print broadcast for scalar_mode, and print {bad} for invalid broadcast. - - gas/ - - PR binutils/28381 - * testsuite/gas/i386/bad-bcast.s: Add a new testcase. - * testsuite/gas/i386/bad-bcast.d: Likewise. - * testsuite/gas/i386/bad-bcast-intel.d: New. - - opcodes/ - - PR binutils/28381 - * i386-dis.c (static struct): Add no_broadcast. - (OP_E_memory): Mark invalid broadcast with no_broadcast=1 and Print "{bad}"for it. - (intel_operand_size): mark invalid broadcast with no_broadcast=1. - (OP_XMM): Mark scalar_mode with no_broadcast=1. - -2021-09-28 Simon Marchi - - gdb: use intrusive_list for linux-nat lwp_list - Replace the manually maintained linked list of lwp_info objects with - intrusive_list. Replace the ALL_LWPS macro with all_lwps, which returns - a range. Add all_lwps_safe as well, for use in iterate_over_lwps, which - currently iterates in a safe manner. - - Change-Id: I355313502510acc0103f5eaf2fbde80897d6376c - -2021-09-28 Simon Marchi - - gdb: add destructor to lwp_info - Replace the lwp_free function with a destructor. Make lwp_info - non-copyable, since there is now a destructor (we wouldn't want an - lwp_info object getting copied and this->arch_private getting deleted - twice). - - Change-Id: I09fcbe967e362566d3a06fed2abca2a9955570fa - -2021-09-28 Simon Marchi - - gdb: make lwp_info non-POD - Initialize all fields in the class declaration directly. This opens the - door to using intrusive_list, done in the following patch. - - Change-Id: I38bb27410cd9ebf511d310bb86fe2ea1872c3b05 - -2021-09-28 GDB Administrator - - Automatic date update in version.in - -2021-09-27 Simon Marchi - - gdb: don't share aspace/pspace on fork with "detach-on-fork on" and "follow-fork-mode child" - We found that when handling forks, two inferiors can unexpectedly share - their program space and address space. To reproduce: - - 1. Using a test program that forks... - 2. "set follow-fork-mode child" - 3. "set detach-on-fork on" (the default) - 4. run to a breakpoint somewhere after the fork - - Step 4 should have created a new inferior: - - (gdb) info inferiors - Num Description Connection Executable - 1 /home/smarchi/build/wt/amd/gdb/fork - * 2 process 251425 1 (native) /home/smarchi/build/wt/amd/gdb/fork - - By inspecting the state of GDB, we can see that the two inferiors now - share one program space and one address space: - - Inferior 1: - - (top-gdb) p inferior_list.m_front.num - $2 = 1 - (top-gdb) p inferior_list.m_front.aspace - $3 = (struct address_space *) 0x5595e2520400 - (top-gdb) p inferior_list.m_front.pspace - $4 = (struct program_space *) 0x5595e2520440 - - Inferior 2: - - (top-gdb) p inferior_list.m_front.next.num - $5 = 2 - (top-gdb) p inferior_list.m_front.next.aspace - $6 = (struct address_space *) 0x5595e2520400 - (top-gdb) p inferior_list.m_front.next.pspace - $7 = (struct program_space *) 0x5595e2520440 - - You can then run inferior 1 again and the two inferiors will still - erroneously share their spaces, but already at this point this is wrong. - - The cause of the bad {a,p}space sharing is in follow_fork_inferior. - When following the child and detaching from the parent, we just re-use - the parent's spaces, rather than cloning them. When we switch back to - inferior 1 and run again, we find ourselves with two unrelated inferiors - sharing spaces. - - Fix that by creating new spaces for the parent after having moved them - to the child. My initial implementation created new spaces for the - child instead. Doing this breaks doing "next" over fork(). When "next" - start, we record the symtab of the starting location. When the program - stops, we compare that symtab with the symtab the program has stopped - at. If the symtab or the line number has changed, we conclude the - "next" is done. If we create a new program space for the child and copy - the parent's program space to it with clone_program_space, it creates - new symtabs for the child as well. When the child stop, but still on - the fork() line, GDB thinks the "next" is done because the symtab - pointers no longer match. In reality they are two symtab instances that - represent the same file. But moving the spaces to the child and - creating new spaces for the parent, we avoid this problem. - - Note that the problem described above happens today with "detach-on-fork - off" and "follow-fork-mode child", because we create new spaces for the - child. This will have to be addressed later. - - Test-wise, improve gdb.base/foll-fork.exp to set a breakpoint that is - expected to have a location in each inferiors. Without the fix, when - the two inferiors erroneously share a program space, GDB reports a - single location. - - Change-Id: Ifea76e14f87b9f7321fc3a766217061190e71c6e - -2021-09-27 Simon Marchi - - gdb.base/foll-fork.exp: use foreach_with_prefix to handle prefixes - No behavior change in the test expected, other than in the test names. - - Change-Id: I111137483858ab0f23138439f2930009779a2b3d - -2021-09-27 Simon Marchi - - gdb.base/foll-fork.exp: rename variables - Rename the variables / parameters used to match the corresponding GDB - setting name, I find that easier to follow. - - Change-Id: Idcbddbbb369279fcf1e808b11a8c478f21b2a946 - -2021-09-27 Simon Marchi - - gdb.base/foll-fork.exp: refactor to restart GDB between each portion of the test - This test is difficult to follow and modify because the state of GDB is - preserved some tests. Add a setup proc, which starts a new GDB and runs - to main, and use it in all test procs. Use proc_with_prefix to avoid - duplicates. - - The check_fork_catchpoints proc also seems used to check for follow-fork - support by checking if catchpoints are supported. If they are not, it - uses "return -code return", which makes its caller return. I find this - unnecessary complex, versus just returning a boolean. Modify it to do - so. - - Change-Id: I23e62b204286c5e9c5c86d2727f7d33fb126ed08 - -2021-09-27 Simon Marchi - - gdb.base/foll-fork.exp: remove gating based on target triplet - It looks like this test has some code to check at runtime the support of - fork handling of the target (see check_fork_catchpoints). So, it seems - to me that the check based on target triplet at the beginning of the - test is not needed. This kind of gating is generally not desirable, - because we wouldn't think of updating it when adding fork support to a - target. For example, FreeBSD supports fork, but it wasn't listed here. - - Change-Id: I6b55f2298edae6b37c3681fb8633d8ea1b5aabee - -2021-09-27 Simon Marchi - - gdb.base/foll-fork.exp: remove DUPLICATEs - Remove DUPLICATEs, and and at the same time replace two uses of - gdb_test_multiple with gdb_test. I don't think using gdb_test_multiple - is necessary here. - - Change-Id: I8dcf097c3364e92d4f0e11f0c0f05dbb88e86742 - -2021-09-27 Nick Alcock - - libctf, lookup: fix bounds of pptrtab lookup - An off-by-one bug in the check for pptrtab lookup meant that we could - access the pptrtab past its bounds (*well* past its bounds), - particularly if we called ctf_lookup_by_name in a child dict with "*foo" - where "foo" is a type that exists in the parent but not the child and no - previous lookups by name have been carried out. (Note that "*foo" is - not even a valid thing to call ctf_lookup_by_name with: foo * is. - Nonetheless, users sometimes do call ctf_lookup_by_name with invalid - content, and it should return ECTF_NOTYPE, not crash.) - - ctf_pptrtab_len, as its name suggests (and as other tests of it in - ctf-lookup.c confirm), is one higher than the maximum valid permissible - index, so the comparison is wrong. - - (Test added, which should fail pretty reliably in the presence of this - bug on any machine with 4KiB pages.) - - libctf/ChangeLog - 2021-09-27 Nick Alcock - - * ctf-lookup.c (ctf_lookup_by_name_internal): Fix pptrtab bounds. - * testsuite/libctf-writable/pptrtab-writable-page-deep-lookup.*: - New test. - -2021-09-27 Nick Alcock - - libctf, testsuite: fix various warnings in tests - These warnings are all off by default, but if they do fire you get - spurious ERRORs when running make check-libctf. - - libctf/ChangeLog - 2021-09-27 Nick Alcock - - * testsuite/libctf-lookup/enum-symbol.c: Remove unused label. - * testsuite/libctf-lookup/conflicting-type-syms.c: Remove unused - variables. - * testsuite/libctf-regression/pptrtab.c: Likewise. - * testsuite/libctf-regression/type-add-unnamed-struct.c: Likewise. - * testsuite/libctf-writable/pptrtab.c: Likewise. - * testsuite/libctf-writable/reserialize-strtab-corruption.c: - Likewise. - * testsuite/libctf-regression/nonstatic-var-section-ld-r.c: Fix - format string. - * testsuite/libctf-regression/nonstatic-var-section-ld.c: - Likewise. - * testsuite/libctf-regression/nonstatic-var-section-ld.lk: Adjust. - * testsuite/libctf-writable/symtypetab-nonlinker-writeout.c: Fix - initializer. - -2021-09-27 Nick Alcock - - libctf: fix handling of CTF symtypetab sections emitted by older GCC - Older (pre-upstreaming) GCC emits a function symtypetab section of a - format never read by any extant libctf. We can detect such CTF dicts by - the lack of the CTF_F_NEWFUNCINFO flag in their header, and we do so - when reading in the symtypetab section -- but if the set of symbols with - types is sufficiently sparse, even an older GCC will emit a function - index section. - - In NEWFUNCINFO-capable compilers, this section will always be the exact - same length as the corresponding function section (each is an array of - uint32_t, associated 1:1 with each other). But this is not true for the - older compiler, for which the sections are different lengths. We check - to see if the function symtypetab section and its index are the same - length, but we fail to skip this check when this is not a NEWFUNCINFO - dict, and emit a spurious corruption error for a CTF dict we could - have perfectly well opened and used. - - Fix trivial: check the flag (and fix the terrible grammar of the error - message at the same time). - - libctf/ChangeLog - 2021-09-27 Nick Alcock - - * ctf-open.c (ctf_bufopen_internal): Don't complain about corrupt - function index symtypetab sections if this is an old-format - function symtypetab section (which should be ignored in any case). - Fix bad grammar. - -2021-09-27 Nick Alcock - - configure: regenerate in all projects that use libtool.m4 - (including sim/, which has no changelog.) - - bfd/ChangeLog - 2021-09-27 Nick Alcock - - * configure: Regenerate. - - binutils/ChangeLog - 2021-09-27 Nick Alcock - - * configure: Regenerate. - - gas/ChangeLog - 2021-09-27 Nick Alcock - - * configure: Regenerate. - - gprof/ChangeLog - 2021-09-27 Nick Alcock - - * configure: Regenerate. - - ld/ChangeLog - 2021-09-27 Nick Alcock - - * configure: Regenerate. - - libctf/ChangeLog - 2021-09-27 Nick Alcock - - * configure: Regenerate. - * Makefile.in: Regenerate. - - opcodes/ChangeLog - 2021-09-27 Nick Alcock - - * configure: Regenerate. - - zlib/ChangeLog - 2021-09-27 Nick Alcock - - * configure: Regenerate. - -2021-09-27 Nick Alcock - - libctf: try several possibilities for linker versioning flags - Checking for linker versioning by just grepping ld --help output for - mentions of --version-script is inadequate now that Solaris 11.4 - implements a --version-script with different semantics. Try linking a - test program with a small wildcard-using version script with each - supported set of flags in turn, to make sure that linker versioning is - not only advertised but actually works. - - The Solaris "GNU-compatible" linker versioning is not quite - GNU-compatible enough, but we can work around the differences by - generating a new version script that removes the comments from the - original (Solaris ld requires #-style comments), and making another - version script for libctf-nonbfd in particular which doesn't mention any - of the symbols that appear in libctf.la, to avoid Solaris ld introducing - corresponding new NOTYPE symbols to match the version script. - - libctf/ChangeLog - 2021-09-27 Nick Alcock - - PR libctf/27967 - * configure.ac (VERSION_FLAGS): Replace with... - (ac_cv_libctf_version_script): ... this multiple test. - (VERSION_FLAGS_NOBFD): Substitute this too. - * Makefile.am (libctf_nobfd_la_LDFLAGS): Use it. Split out... - (libctf_ldflags_nover): ... non-versioning flags here. - (libctf_la_LDFLAGS): Use it. - * libctf.ver: Give every symbol not in libctf-nobfd a comment on - the same line noting as much. - -2021-09-27 Nick Alcock - - libtool.m4: fix nm BSD flag detection - Libtool needs to get BSD-format (or MS-format) output out of the system - nm, so that it can scan generated object files for symbol names for - -export-symbols-regex support. Some nms need specific flags to turn on - BSD-formatted output, so libtool checks for this in its AC_PATH_NM. - Unfortunately the code to do this has a pair of interlocking flaws: - - - it runs the test by doing an nm of /dev/null. Some platforms - reasonably refuse to do an nm on a device file, but before now this - has only been worked around by assuming that the error message has a - specific textual form emitted by Tru64 nm, and that getting this - error means this is Tru64 nm and that nm -B would work to produce - BSD-format output, even though the test never actually got anything - but an error message out of nm -B. This is fixable by nm'ing *nm - itself* (since we necessarily have a path to it). - - - the test is entirely skipped if NM is set in the environment, on the - grounds that the user has overridden the test: but the user cannot - reasonably be expected to know that libtool wants not only nm but - also flags forcing BSD-format output. Worse yet, one such "user" is - the top-level Cygnus configure script, which neither tests for - nor specifies any BSD-format flags. So platforms needing BSD-format - flags always fail to set them when run in a Cygnus tree, breaking - -export-symbols-regex on such platforms. Libtool also needs to - augment $LD on some platforms, but this is done unconditionally, - augmenting whatever the user specified: the nm check should do the - same. - - One wrinkle: if the user has overridden $NM, a path might have been - provided: so we use the user-specified path if there was one, and - otherwise do the path search as usual. (If the nm specified doesn't - work, this might lead to a few extra pointless path searches -- but - the test is going to fail anyway, so that's not a problem.) - - (Tested with NM unset, and set to nm, /usr/bin/nm, my-nm where my-nm is a - symlink to /usr/bin/nm on the PATH, and /not-on-the-path/my-nm where - *that* is a symlink to /usr/bin/nm.) - - ChangeLog - 2021-09-27 Nick Alcock - - PR libctf/27967 - * libtool.m4 (LT_PATH_NM): Try BSDization flags with a user-provided - NM, if there is one. Run nm on itself, not on /dev/null, to avoid - errors from nms that refuse to work on non-regular files. Remove - other workarounds for this problem. Strip out blank lines from the - nm output. - -2021-09-27 Nick Alcock - - libtool.m4: augment symcode for Solaris 11 - This reports common symbols like GNU nm, via a type code of 'C'. - - ChangeLog - 2021-09-27 Nick Alcock - - PR libctf/27967 - * libtool.m4 (lt_cv_sys_global_symbol_pipe): Augment symcode for - Solaris 11. - -2021-09-27 Nick Alcock - - libctf: link against libiberty before linking in libbfd or libctf-nobfd - This ensures that the CTF_LIBADD, which always contains at least this - when doing a shared link: - - -L`pwd`/../libiberty/pic -liberty - - appears in the link line before any requirements pulled in by libbfd.la, - which include -liberty but because it is install-time do not include the - -L`pwd`/../libiberty/pic portion (in an indirect dep like this, the path - comes from the libbfd.la file, and is an install path). libiberty also - appears after libbfd in the link line by virtue of libctf-nobfd.la, - because libctf-nobfd has to follow libbfd in the link line, and that - needs symbols from libiberty too. - - Without this, an installed liberty might well be pulled in by libbfd, - and if --enable-install-libiberty is not specified this libiberty might - be completely incompatible with what is being installed and break either - or boht of libbfd and libctf. (The specific problem observed here is - that bsearch_r was not present, but other problems might easily be - observed in future too.) - - Because ld links against libctf, this has a tendency to break the system - linker at install time too, if installing with --prefix=/usr. That's - quite unpleasant to recover from. - - libctf/ChangeLog - 2021-09-27 Nick Alcock - - PR libctf/27360 - * Makefile.am (libctf_la_LIBADD): Link against libiberty - before pulling in libbfd.la or pulling in libctf-nobfd.la. - * Makefile.in: Regenerate. - -2021-09-27 Tom de Vries - - [gdb/build] Fix build with g++-4.8 - When building g++-4.8, we run into: - ... - src/gdb/dwarf2/read.c:919:5: error: multiple fields in union \ - 'partial_die_info::' initialized - ... - - This is due to: - ... - union - { - struct - { - CORE_ADDR lowpc = 0; - CORE_ADDR highpc = 0; - }; - ULONGEST ranges_offset; - }; - ... - - The error looks incorrect, given that only one union member is initialized, - and does not reproduce with newer g++. - - Nevertheless, work around this by moving the initialization to a constructor. - - [ I considered just removing the initialization, with the idea that access - should be guarded by has_pc_info, but I ran into one failure in the testsuite, - for gdb.base/check-psymtab.exp due to add_partial_symbol using lowpc without - checking has_pc_info. ] - - Tested on x86_64-linux. - -2021-09-27 Andrew Burgess - - gdb: add setting to disable reading source code files - In some situations it is possible that a user might not want GDB to - try and access source code files, for example, the source code might - be stored on a slow to access network file system. - - It is almost certainly possible that using some combination of 'set - directories' and/or 'set substitute-path' a user can trick GDB into - being unable to find the source files, but this feels like a rather - crude way to solve the problem. - - In this commit a new option is add that stops GDB from opening and - reading the source files. A user can run with source code reading - disabled if this is required, then re-enable later if they decide - that they now want to view the source code. - -2021-09-27 Andrew Burgess - - gdb: remove duplicate cmd_list_element declarations - For some reason we have two locations where cmd_list_elements are - declared, cli/cli-cmds.h and gdbcmd.h. Worse still there is - duplication between these two locations. - - In this commit I have moved all of the cmd_list_element declarations - from gdbcmd.h into cli/cli-cmds.h and removed the duplicates. - - There should be no user visible changes after this commit. - -2021-09-27 Andrew Burgess - - gdb: prevent an assertion when computing the frame_id for an inline frame - I ran into this assertion while GDB was trying to unwind the stack: - - gdb/inline-frame.c:173: internal-error: void inline_frame_this_id(frame_info*, void**, frame_id*): Assertion `frame_id_p (*this_id)' failed. - - That is, when building the frame_id for an inline frame, GDB asks for - the frame_id of the previous frame. Unfortunately, no valid frame_id - was returned for the previous frame, and so the assertion triggers. - - What is happening is this, I had a stack that looked something like - this (the arrows '->' point from caller to callee): - - normal_frame -> inline_frame - - However, for whatever reason (e.g. broken debug information, or - corrupted stack contents in the inferior), when GDB tries to unwind - "normal_frame", it ends up getting back effectively the same frame, - thus the call stack looks like this to GDB: - - .-> normal_frame -> inline_frame - | | - '-----' - - Given such a situation we would expect GDB to terminate the stack with - an error like this: - - Backtrace stopped: previous frame identical to this frame (corrupt stack?) - - However, the inline_frame causes a problem, and here's why: - - When unwinding we start from the sentinel frame and call - get_prev_frame. We eventually end up in get_prev_frame_if_no_cycle, - in here we create a raw frame, and as this is frame #0 we immediately - return. - - However, eventually we will try to unwind the stack further. When we - do this we inevitably needing to know the frame_id for frame #0, and - so, eventually, we end up in compute_frame_id. - - In compute_frame_id we first find the right unwinder for this frame, - in our case (i.e. for inline_frame) the $pc is within the function - normal_frame, but also within a block associated with the inlined - function inline_frame, as such the inline frame unwinder claims this - frame. - - Back in compute_frame_id we next compute the frame_id, for our - inline_frame this means a call to inline_frame_this_id. - - The ID of an inline frame is based on the id of the previous frame, so - from inline_frame_this_id we call get_prev_frame_always, this - eventually calls get_prev_frame_if_no_cycle again, which creates - another raw frame and calls compute_frame_id (for frames other than - frame 0 we immediately compute the frame_id). - - In compute_frame_id we again identify the correct unwinder for this - frame. Our $pc is unchanged, however, the fact that the next frame is - of type INLINE_FRAME prevents the inline frame unwinder from claiming - this frame again, and so, the standard DWARF frame unwinder claims - normal_frame. - - We return to compute_frame_id and call the standard DWARF function to - build the frame_id for normal_frame. - - With the frame_id of normal_frame figured out we return to - compute_frame_id, and then to get_prev_frame_if_no_cycle, where we add - the ID for normal_frame into the frame_id cache, and return the frame - back to inline_frame_this_id. - - From inline_frame_this_id we build a frame_id for inline_frame and - return to compute_frame_id, and then to get_prev_frame_if_no_cycle, - which adds the frame_id for inline_frame into the frame_id cache. - - So far, so good. - - However, as we are trying to unwind the complete stack, we eventually - ask for the previous frame of normal_frame, remember, at this point - GDB doesn't know the stack is corrupted (with a cycle), GDB still - needs to figure that out. - - So, we eventually end up in get_prev_frame_if_no_cycle where we create - a raw frame and call compute_frame_id, remember, this is for the frame - before normal_frame. - - The first task for compute_frame_id is to find the unwinder for this - frame, so all of the frame sniffers are tried in order, this includes - the inline frame sniffer. - - The inline frame sniffer asks for the $pc, this request is sent up the - stack to normal_frame, which, due to its cyclic behaviour, tells GDB - that the $pc in the previous frame was the same as the $pc in - normal_frame. - - GDB spots that this $pc corresponds to both the function normal_frame - and also the inline function inline_frame. As the next frame is not - an INLINE_FRAME then GDB figures that we have not yet built a frame to - cover inline_frame, and so the inline sniffer claims this new frame. - Our stack is now looking like this: - - inline_frame -> normal_frame -> inline_frame - - But, we have not yet computed the frame id for the outer most (on the - left) inline_frame. After the frame sniffer has claimed the inline - frame GDB returns to compute_frame_id and calls inline_frame_this_id. - - In here GDB calls get_prev_frame_always, which eventually ends up - in get_prev_frame_if_no_cycle again, where we create a raw frame and - call compute_frame_id. - - Just like before, compute_frame_id tries to find an unwinder for this - new frame, it sees that the $pc is within both normal_frame and - inline_frame, but the next frame is, again, an INLINE_FRAME, so, just - like before the standard DWARF unwinder claims this frame. Back in - compute_frame_id we again call the standard DWARF function to build - the frame_id for this new copy of normal_frame. - - At this point the stack looks like this: - - normal_frame -> inline_frame -> normal_frame -> inline_frame - - After compute_frame_id we return to get_prev_frame_if_no_cycle, where - we try to add the frame_id for the new normal_frame into the frame_id - cache, however, unlike before, we fail to add this frame_id as it is - a duplicate of the previous normal_frame frame_id. Having found a - duplicate get_prev_frame_if_no_cycle unlinks the new frame from the - stack, and returns nullptr, the stack now looks like this: - - inline_frame -> normal_frame -> inline_frame - - The nullptr result from get_prev_frame_if_no_cycle is fed back to - inline_frame_this_id, which forwards this to get_frame_id, which - immediately returns null_frame_id. As null_frame_id is not considered - a valid frame_id, this is what triggers the assertion. - - In summary then: - - - inline_frame_this_id currently assumes that as the inline frame - exists, we will always get a valid frame back from - get_prev_frame_always, - - - get_prev_frame_if_no_cycle currently assumes that it is safe to - return nullptr when it sees a cycle. - - Notice that in frame.c:compute_frame_id, this code: - - fi->this_id.value = outer_frame_id; - fi->unwind->this_id (fi, &fi->prologue_cache, &fi->this_id.value); - gdb_assert (frame_id_p (fi->this_id.value)); - - The assertion makes it clear that the this_id function must always - return a valid frame_id (e.g. null_frame_id is not a valid return - value), and similarly in inline_frame.c:inline_frame_this_id this - code: - - *this_id = get_frame_id (get_prev_frame_always (this_frame)); - /* snip comment */ - gdb_assert (frame_id_p (*this_id)); - - Makes it clear that every inline frame expects to be able to get a - previous frame, which will have a valid frame_id. - - As I have discussed above, these assumptions don't currently hold in - all cases. - - One possibility would be to move the call to get_prev_frame_always - forward from inline_frame_this_id to inline_frame_sniffer, however, - this falls foul of (in frame.c:frame_cleanup_after_sniffer) this - assertion: - - /* No sniffer should extend the frame chain; sniff based on what is - already certain. */ - gdb_assert (!frame->prev_p); - - This assert prohibits any sniffer from trying to get the previous - frame, as getting the previous frame is likely to depend on the next - frame, I can understand why this assertion is a good thing, and I'm in - no rush to alter this rule. - - The solution proposed here takes onboard feedback from both Pedro, and - Simon (see the links below). The get_prev_frame_if_no_cycle function - is renamed to get_prev_frame_maybe_check_cycle, and will now not do - cycle detection for inline frames, even when we spot a duplicate frame - it is still returned. This is fine, as, if the normal frame has a - duplicate frame-id then the inline frame will also have a duplicate - frame-id. And so, when we reject the inline frame, the duplicate - normal frame, which is previous to the inline frame, will also be - rejected. - - In inline-frame.c the call to get_prev_frame_always is no longer - nested inside the call to get_frame_id. There are reasons why - get_prev_frame_always can return nullptr, for example, if there is a - memory error while trying to get the previous frame, if this should - happen then we now give a more informative error message. - - Historical Links: - - Patch v2: https://sourceware.org/pipermail/gdb-patches/2021-June/180208.html - Feedback: https://sourceware.org/pipermail/gdb-patches/2021-July/180651.html - https://sourceware.org/pipermail/gdb-patches/2021-July/180663.html - - Patch v3: https://sourceware.org/pipermail/gdb-patches/2021-July/181029.html - Feedback: https://sourceware.org/pipermail/gdb-patches/2021-July/181035.html - - Additional input: https://sourceware.org/pipermail/gdb-patches/2021-September/182040.html - -2021-09-27 Tom de Vries - - [gdb/testsuite] Fix gdb.base/dcache-flush.exp - When running test-case gdb.base/dcache-flush.exp on ubuntu 18.04.5, I run into: - ... - (gdb) PASS: gdb.base/dcache-flush.exp: p var2 - info dcache^M - Dcache 4096 lines of 64 bytes each.^M - Contains data for Thread 0x7ffff7fc6b80 (LWP 3551)^M - Line 0: address 0x7fffffffd4c0 [47 hits]^M - Line 1: address 0x7fffffffd500 [31 hits]^M - Line 2: address 0x7fffffffd5c0 [7 hits]^M - Cache state: 3 active lines, 85 hits^M - (gdb) FAIL: gdb.base/dcache-flush.exp: check dcache before flushing - ... - The regexp expects "Contains data for process $decimal". - - This is another case of thread_db_target::pid_to_str being used. - - Fix this by updating the regexp. - - Tested on x86_64-linux. - -2021-09-27 Tom de Vries - - [gdb/testsuite] Test sw watchpoint in gdb.threads/process-dies-while-detaching.exp - The test-case gdb.threads/process-dies-while-detaching.exp takes about 20s - when using hw watchpoints, but when forcing sw watchpoints (using the patch - mentioned in PR28375#c0), the test-case takes instead 3m14s. - - Also, it show a FAIL: - ... - (gdb) continue^M - Continuing.^M - Cannot find user-level thread for LWP 10324: generic error^M - (gdb) FAIL: gdb.threads/process-dies-while-detaching.exp: single-process: - continue: watchpoint: continue - ... - for which PR28375 was filed. - - Modify the test-case to: - - add the hw/sw axis to the watchpoint testing, to ensure that we - observe the sw watchpoint behaviour also on can-use-hw-watchpoints - architectures. - - skip the hw breakpoint testing if not supported - - set the sw watchpoint later to avoid making the test - too slow. This still triggers the same PR, but now takes just 24s. - - This patch adds a KFAIL for PR28375. - - Tested on x86_64-linux. - -2021-09-27 Simon Marchi - - gdb: fix indentation in gdbtypes.c - Change-Id: I7bfbb9d349a1f474256800c45e28fe3b1de08771 - -2021-09-27 GDB Administrator - - Automatic date update in version.in - -2021-09-26 GDB Administrator - - Automatic date update in version.in - -2021-09-26 Peter Bergner - - PowerPC: Enable mfppr mfppr32, mtppr and mtppr32 extended mnemonics on POWER5 - SPR 896 and the mfppr mfppr32, mtppr and mtppr32 extended mnemonics were added - in ISA 2.03, so enable them on POWER5 and later. - - opcodes/ - * ppc-opc.c (powerpc_opcodes) : Enable - on POWER5 and later. - - gas/ - * testsuite/gas/ppc/power5.s: New test. - * testsuite/gas/ppc/power5.d: Likewise. - * testsuite/gas/ppc/ppc.exp: Run it. - * testsuite/gas/ppc/power7.s: Remove tests for mfppr, mfppr32, mtppr - and mtppr32. - * testsuite/gas/ppc/power7.d: Likewise. - -2021-09-25 Tom de Vries - - [gdb/testsuite] Minimize gdb restarts - Minimize gdb restarts, applying the following rules: - - don't use prepare_for_testing unless necessary - - don't use clean_restart unless necessary - - Also, if possible, replace build_for_executable + clean_restart - with prepare_for_testing for brevity. - - Touches 68 test-cases. - - Tested on x86_64-linux. - -2021-09-25 Alan Modra - - PR28346, segfault attempting to disassemble raw binary - Don't attempt to access elf_section_data for non-ELF sections. - - PR 28346 - * elf32-xtensa.c (xtensa_read_table_entries): Return zero entries - for non-ELF. - -2021-09-25 GDB Administrator - - Automatic date update in version.in - -2021-09-24 Hans-Peter Nilsson - - gas/testsuite/ld-elf/dwarf2-21.d: Pass -W - Required for the expected "CU:" to be emitted for long - source-paths. See binutils/dwarf.c: - - if (do_wide || strlen (directory) < 76) - printf (_("CU: %s/%s:\n"), directory, file_table[0].name); - else - printf ("%s:\n", file_table[0].name); - - See also commit 5f410aa50ce2c, "testsuite/ld-elf/pr26936.d: - Pass -W." - - gas/ChangeLog: - * testsuite/ld-elf/dwarf2-21.d: Pass -W. - -2021-09-24 Simon Marchi - - gdb: change thread_info::name to unique_xmalloc_ptr, add helper function - This started out as changing thread_info::name to a unique_xmalloc_ptr. - That showed that almost all users of that field had the same logic to - get a thread's name: use thread_info::name if non-nullptr, else ask the - target. Factor out this logic in a new thread_name free function. Make - the field private (rename to m_name) and add some accessors. - - Change-Id: Iebdd95f4cd21fbefc505249bd1d05befc466a2fc - -2021-09-24 Tom Tromey - - Move value_true to value.h - I noticed that value_true is declared in language.h and defined in - language.c. However, as part of the value API, I think it would be - better in one of those files. And, because it is very short, I - changed it to be an inline function in value.h. I've also removed a - comment from the implementation, on the basis that it seems obsolete - -- if the change it suggests was needed, it probably would have been - done by now; and if it is needed in the future, odds are it would be - done differently anyway. - - Finally, this patch also changes value_true and value_logical_not to - return a bool, and updates some uses. - -2021-09-24 Pedro Alves - - Make dcache multi-target-safe - By inspection, I noticed that this code in dcache.c is not - multi-target-aware: - - /* If this is a different inferior from what we've recorded, - flush the cache. */ - - if (inferior_ptid != dcache->ptid) - - This doesn't take into account that threads of different targets may - have the same ptid. - - Fixed by also storing/comparing the process_stratum_target. - - Tested on x86-64-linux-gnu, native and gdbserver. - - Change-Id: I4d9d74052c696b72d28cb1c77b697b911725c8d3 - -2021-09-24 Pedro Alves - - Fix 'FAIL: gdb.perf/disassemble.exp: python Disassemble().run()' - We currently have one FAIL while running "make check-perf": - - PerfTest::assemble, run ... - python Disassemble().run() - Traceback (most recent call last): - File "", line 1, in - File "/home/pedro/rocm/gdb/src/gdb/testsuite/gdb.perf/lib/perftest/perftest.py", line 64, in run - self.warm_up() - File "", line 25, in warm_up - gdb.error: No symbol "ada_evaluate_subexp" in current context. - Error while executing Python code. - (gdb) FAIL: gdb.perf/disassemble.exp: python Disassemble().run() - ... - - The gdb.perf/disassemble.exp testcase debugs GDB with itself, runs to - main, and then disassembles a few GDB functions. The problem is that - most(!) functions it is trying to disassemble are now gone... - - This commit fixes the issue by simply picking some other functions to - disassemble. - - It would perhaps be better to come up with some test program to - disassemble, one that would stay the same throughout the years, - instead of disassembling GDB itself. I don't know why that wasn't - done to begin with. I'll have to leave that for another rainy day, - though. - - gdb/testsuite/ - yyyy-mm-dd Pedro Alves - - * gdb.perf/disassemble.py (Disassemble::warm_up): Disassemble - evaluate_subexp_do_call instead of ada_evaluate_subexp. - (Disassemble::warm_up): Disassemble "captured_main", - "run_inferior_call" and "update_global_location_list" instead of - "evaluate_subexp_standard" and "c_parse_internal". - - Change-Id: I89d1cca89ce2e495dea5096e439685739cc0d3df - -2021-09-24 Pedro Alves - - Fix all PATH problems in testsuite/gdb.perf/ - Currently "make check-perf" triggers ~40 PATH messages in gdb.sum: - - ... - PATH: gdb.perf/backtrace.exp: python sys.path.insert(0, os.path.abspath("/home/pedro/rocm/gdb/build/gdb/../../src/gdb/testsuite/gdb.perf/lib")) - PATH: gdb.perf/backtrace.exp: python exec (open ('/home/pedro/rocm/gdb/build/gdb/testsuite/outputs/gdb.perf/backtrace/backtrace.py').read ()) - ... - - This commit fixes them. E.g. before/after gdb.sum diff: - - -PASS: gdb.perf/backtrace.exp: python import os, sys - -PASS: gdb.perf/backtrace.exp: python sys.path.insert(0, os.path.abspath("/home/pedro/rocm/gdb/build-master/gdb/../../src/gdb/testsuite/gdb.perf/lib")) - -PATH: gdb.perf/backtrace.exp: python sys.path.insert(0, os.path.abspath("/home/pedro/rocm/gdb/build-master/gdb/../../src/gdb/testsuite/gdb.perf/lib")) - -PASS: gdb.perf/backtrace.exp: python exec (open ('/home/pedro/rocm/gdb/build-master/gdb/testsuite/outputs/gdb.perf/backtrace/backtrace.py').read ()) - -PATH: gdb.perf/backtrace.exp: python exec (open ('/home/pedro/rocm/gdb/build-master/gdb/testsuite/outputs/gdb.perf/backtrace/backtrace.py').read ()) - +PASS: gdb.perf/backtrace.exp: setup perftest: python import os, sys - +PASS: gdb.perf/backtrace.exp: setup perftest: python sys.path.insert(0, os.path.abspath("${srcdir}/gdb.perf/lib")) - +PASS: gdb.perf/backtrace.exp: setup perftest: python exec (open ('${srcdir}/gdb.perf/backtrace.py').read ()) - - gdb/testsuite/ - yyyy-mm-dd Pedro Alves - - * lib/perftest.exp (PerfTest::_setup_perftest): Use - with_test_prefix. Add explicit test names to python invocations, - with "$srcdir" not expanded. - - Change-Id: I50a31b04b7abdea754139509e4a34ae9263118a4 - -2021-09-24 Pedro Alves - - Fix all DUPLICATE problems in testsuite/gdb.perf/ - Currently running "make check-perf" shows: - - ... - # of duplicate test names 6008 - ... - - All those duplicate test names come from gdb.perf/skip-command.exp. - This commit fixes them, using with_test_prefix. - - gdb/testsuite/ - yyyy-mm-dd Pedro Alves - - * gdb.perf/skip-command.exp (run_skip_bench): Wrap each for - iteration in with_test_prefix. - - Change-Id: I38501cf70bc6b60306ee7228996ee7bcd858dc1b - -2021-09-24 Tom Tromey - - Fix handling of DW_AT_data_bit_offset - A newer version of GCC will now emit member locations using just - DW_AT_data_bit_offset, like: - - <3><14fe>: Abbrev Number: 1 (DW_TAG_member) - <14ff> DW_AT_name : (indirect string, offset: 0x215e): nb_bytes - <1503> DW_AT_decl_file : 1 - <1503> DW_AT_decl_line : 10 - <1504> DW_AT_decl_column : 7 - <1505> DW_AT_type : <0x150b> - <1509> DW_AT_bit_size : 31 - <150a> DW_AT_data_bit_offset: 64 - - whereas earlier versions would emit something like: - - <3><164f>: Abbrev Number: 7 (DW_TAG_member) - <1650> DW_AT_name : (indirect string, offset: 0x218d): nb_bytes - <1654> DW_AT_decl_file : 1 - <1655> DW_AT_decl_line : 10 - <1656> DW_AT_decl_column : 7 - <1657> DW_AT_type : <0x165f> - <165b> DW_AT_byte_size : 4 - <165c> DW_AT_bit_size : 31 - <165d> DW_AT_bit_offset : 1 - <165e> DW_AT_data_member_location: 8 - - That is, DW_AT_data_member_location is not emitted any more. This is - a change due to the switch to DWARF 5 by default. - - This change pointed out an existing bug in gdb, namely that the - attr_to_dynamic_prop depends on the presence of - DW_AT_data_member_location. This patch moves the handling of - DW_AT_data_bit_offset into handle_data_member_location, and updates - attr_to_dynamic_prop to handle this new case. - - A new test case is included. This test fails with GCC 11, but passes - with an earlier version of GCC. - -2021-09-24 Tom de Vries - - [gdb/testsuite] Don't leave gdb instance running after function_range - A typical dwarf assembly test-case start like this: - ... - standard_testfile .c -debug.S - - set asm_file [standard_output_file $srcfile2] - Dwarf::assemble $asm_file { - ... - } - - if { [prepare_for_testing "failed to prepare" ${testfile} \ - [list $srcfile $asm_file] {nodebug}] } { - return -1 - } - ... - - When accidentally using build_for_executable instead of - prepare_for_testing (or intentionally using it but forgetting to add - clean_restart $binfile or some such) the mistake may not be caught, because - another gdb instance is still running, and we may silently end up testing - compiler-generated DWARF. - - This can be caused by something relatively obvious, like an earlier - prepare_for_testing or clean_restart, but also by something more obscure like - function_range, which may even be triggered by dwarf assembly like this: - ... - {MACRO_AT_func {main}} - ... - - Fix this by calling gdb_exit at the end of function_range. - - Also fix the fallout of that in test-case gdb.dwarf2/dw2-bad-elf.exp, where a - get_sizeof call used the gdb instance left lingering by function_range. - - [ A better and more complete fix would add a new proc get_exec_info, that would - be called at the start of the dwarf assembly body: - ... - Dwarf::assemble $asm_file { - get_exec_info {main foo} {int void*} - ... - that would: - - do a prepare_for_testing with $srcfile (roughtly equivalent to what - MACRO_AT_func does, - - call function_range for all functions main and foo, without starting a - new gdb instance - - set corresponding variables at the call-site: main_start, main_len, - main_end, foo_start, foo_len, foo_end. - - get size for types int and void* - - set corresponding variables at the call-site: int_size, void_ptr_size. - - do a gdb_exit. ] - - Tested on x86_64-linux. - -2021-09-24 Tom de Vries - - [gdb/testsuite] Use pie instead of -fpie/-pie - I noticed two test-cases where -fpie is used. Using the canonical pie option - will usually get one -fPIE instead. - - That choice is justified here in gdb_compile: - ... - # For safety, use fPIE rather than fpie. On AArch64, m68k, PowerPC - # and SPARC, fpie can cause compile errors due to the GOT exceeding - # a maximum size. On other architectures the two flags are - # identical (see the GCC manual). Note Debian9 and Ubuntu16.10 - # onwards default GCC to using fPIE. If you do require fpie, then - # it can be set using the pie_flag. - set flag "additional_flags=-fPIE" - ... - - There is no indication that using -fpie rather than -fPIE is on purpose, so - use pie instead. - - Tested on x86_64-linux. - -2021-09-24 Tom de Vries - - [gdb/testsuite] Factor out dump_info in gdb.testsuite/dump-system-info.exp - Factor out new proc dump_info in test-case gdb.testsuite/dump-system-info.exp, - and in the process: - - fix a few typos - - remove unnecessary "test -r /proc/cpuinfo" - - Tested on x86_64-linux. - - Co-Authored-By: Pedro Alves - -2021-09-24 Pedro Alves - - gdb/testsuite: Make it possible to use TCL variables in DWARF assembler loclists - It is currently not possible to use variables in locations lists. For - example, with: - - diff --git a/gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.exp b/gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.exp - index 6b4f5c8cbb8..cdbf948619f 100644 - --- a/gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.exp - +++ b/gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.exp - @@ -30,6 +30,8 @@ if {![dwarf2_support]} { - return 0 - } - - +set myconst 0x123456 - + - # Test with 32-bit and 64-bit DWARF. - foreach_with_prefix is_64 {false true} { - if { $is_64 } { - @@ -49,6 +51,7 @@ foreach_with_prefix is_64 {false true} { - global func1_addr func1_len - global func2_addr func2_len - global is_64 - + global myconst - - # The CU uses the DW_FORM_loclistx form to refer to the .debug_loclists - # section. - @@ -107,7 +110,7 @@ foreach_with_prefix is_64 {false true} { - list_ { - # When in func1. - start_length $func1_addr $func1_len { - - DW_OP_constu 0x123456 - + DW_OP_constu $myconst - DW_OP_stack_value - } - - we get: - - $ make check TESTS="*/loclists-multiple-cus.exp" - ... - gdb compile failed, build/gdb/testsuite/outputs/gdb.dwarf2/loclists-multiple-cus/loclists-multiple-cus-dw32.S: Assembler messages: - build/gdb/testsuite/outputs/gdb.dwarf2/loclists-multiple-cus/loclists-multiple-cus-dw32.S:78: Error: leb128 operand is an undefined symbol: $myconst - ... - - That means $myconst was copied literally to the generated assembly - file. - - This patch fixes it, by running subst on the location list body, in - the context of the caller. The fix is applied to both - Dwarf::loclists::table::list_::start_length and - Dwarf::loclists::table::list_::start_end. - - Reported-by: Zoran Zaric - - Change-Id: I615a64431857242d9f477d5699e3732df1b31322 - -2021-09-24 Tom de Vries - - [gdb/testsuite] Fix DUPLICATEs in gdb.dwarf2/implptr-64bit.exp - When running test-case gdb.dwarf2/implptr-64bit.exp with target board - unix/-m32, I noticed: - ... - DUPLICATE: gdb.dwarf2/implptr-64bit.exp: failed to prepare - ... - - Fix this by using with_test_prefix. - - Tested on x86_64-linux. - -2021-09-24 Tom de Vries - - [gdb/testsuite] Fix DUPLICATEs gdb.dwarf2/dw2-is-stmt.exp - Fix these DUPLICATEs by using with_test_prefix: - ... - DUPLICATE: gdb.dwarf2/dw2-is-stmt.exp: ensure we saw a valid line pattern, 1 - DUPLICATE: gdb.dwarf2/dw2-is-stmt.exp: ensure we saw a valid line pattern, 2 - ... - - Tested on x86_64-linux. - -2021-09-24 Tom de Vries - - [gdb/testsuite] Fix set $var val in gdb.dwarf2/dw2-is-stmt.exp - When doing a testrun with: - ... - $ make check RUNTESTFLAGS=$(cd $src/gdb/testsuite/; echo gdb.dwarf2/*.exp) - ... - I ran into: - ... - ERROR: tcl error sourcing gdb.dwarf2/dw2-is-stmt.exp. - ERROR: expected integer but got "dw2-abs-hi-pc-world.c" - while executing - "incr i" - ... - - The variable i is set in gdb.dwarf2/dw2-abs-hi-pc.exp, and leaks to - gdb.dwarf2/dw2-is-stmt.exp. It's not removed by gdb_cleanup_globals because i - is set as global variable by runtest.exp, which does: - ... - for { set i 0 } { $i < $argc } { incr i } { - ... - at toplevel but forgets to unset the variable. - - Fix this by removing '$' in front of the variable name when doing set: - ... - -set $i 0 - +set i 0 - ... - - Tested on x86_64-linux. - -2021-09-24 Tom de Vries - - [gdb/testsuite] Fix DUPLICATE in gdb.base/load-command.exp - Fix this duplicate: - ... - DUPLICATE: gdb.base/load-command.exp: check initial value of the_variable - ... - by using with_test_prefix. - - Tested on x86_64-linux. - -2021-09-24 Tom de Vries - - [gdb/testsuite] Use pie/nopie instead of ldflags=-pie/-no-pie - I noticed two test-case that use ldflags=-pie and ldflags-no-pie, instead of - the canonical pie and nopie options, which would typically also add - additional_flags=-fPIE respectively additional_flags=-fno-pie. - - There is no indication that this is on purpose, so replace these with pie and - nopie. - - Tested on x86_64-linux. - -2021-09-24 Tom de Vries - - [gdb/testsuite] Add gdb.testsuite/dump-system-info.exp - When interpreting the testsuite results, it's often relevant what kind of - machine the testsuite ran on. On a local machine one can just do - /proc/cpuinfo, but in case of running tests using a remote system - that distributes test runs to other remote systems that are not directly - accessible, that's not possible. - - Fix this by dumping /proc/cpuinfo into the gdb.log, as well as lsb_release -a - and uname -a. - - We could do this at the start of each test run, by putting it into unix.exp - or some such. However, this might be too verbose, so we choose to put it into - its own test-case, such that it get triggered in a full testrun, but not when - running one or a subset of tests. - - We put the test-case into the gdb.testsuite directory, which is currently the - only place in the testsuite where we do not test gdb. [ Though perhaps this - could be put into a new gdb.info directory, since the test-case doesn't - actually test the testsuite. ] - - Tested on x86_64-linux. - -2021-09-24 GDB Administrator - - Automatic date update in version.in - -2021-09-23 Tom Tromey - - Change pointer_type to a method of struct type - I noticed that pointer_type is declared in language.h and defined in - language.c. However, it really has to do with types, so it should - have been in gdbtypes.h all along. - - This patch changes it to be a method on struct type. And, I went - through uses of TYPE_IS_REFERENCE and updated many spots to use the - new method as well. (I didn't update ones that were in arch-specific - code, as I couldn't readily test that.) - -2021-09-23 Tom de Vries - - [gdb/testsuite] Support -fPIE/-fno-PIE/-pie/-no-pie in gdb_compile_rust - When running gdb.rust/*.exp test-cases with target board unix/-fPIE/-pie, I - run into: - ... - builtin_spawn -ignore SIGHUP rustc --color never gdb.rust/watch.rs \ - -g -lm -fPIE -pie -o outputs/gdb.rust/watch/watch^M - error: Unrecognized option: 'f'^M - ^M - compiler exited with status 1 - ... - - The problem is that -fPIE and -fpie are gcc options, but for rust we use - rustc, which has different compilation options. - - Fix this by translating the gcc options to rustc options in gdb_compile_rust, - similar to how that is done for ada in target_compile_ada_from_dir. - - Likewise for unix/-fno-PIE/-no-pie. - - Tested on x86_64-linux, with: - - native - - unix/-fPIE/-pie - - unix/-fno-PIE/-no-pie - specifically, on openSUSE Leap 15.2 both with package gcc-PIE: - - installed (making gcc default to PIE) - - uninstalled (making gcc default to non-PIE). - and rustc 1.52.1. - -2021-09-23 Tom de Vries - - [gdb/testsuite] Use pie instead of -fPIE -pie - Replace {additional_flags=-fPIE ldflags=-pie} with {pie}. - - This makes sure that the test-cases properly error out when using target board - unix/-fno-PIE/-no-pie. - - Tested on x86_64-linux. - -2021-09-23 Tom de Vries - - [gdb/testsuite] Fix probe test in gdb.base/break-interp.exp - When running test-case gdb.base/break-interp.exp on ubuntu 18.04.5, we have: - ... - (gdb) bt^M - #0 0x00007eff7ad5ae12 in ?? () from break-interp-LDprelinkNOdebugNO^M - #1 0x00007eff7ad71f50 in ?? () from break-interp-LDprelinkNOdebugNO^M - #2 0x00007eff7ad59128 in ?? () from break-interp-LDprelinkNOdebugNO^M - #3 0x00007eff7ad58098 in ?? () from break-interp-LDprelinkNOdebugNO^M - #4 0x0000000000000002 in ?? ()^M - #5 0x00007fff505d7a32 in ?? ()^M - #6 0x00007fff505d7a94 in ?? ()^M - #7 0x0000000000000000 in ?? ()^M - (gdb) FAIL: gdb.base/break-interp.exp: ldprelink=NO: ldsepdebug=NO: \ - first backtrace: dl bt - ... - - Using the backtrace, the test-case tries to establish that we're stopped in - dl_main. - - However, the backtrace only shows an address, because: - - the dynamic linker contains no minimal symbols and no debug info, and - - gdb is build without --with-separate-debug-dir so it can't find the - corresponding .debug file, which does contain the mimimal symbols and - debug info. - - As in "[gdb/testsuite] Improve probe detection in gdb.base/break-probes.exp", - fix this by doing info probes and grepping for the address. - - Tested on x86_64-linux. - -2021-09-23 Tom de Vries - - [gdb/testsuite] Improve probe detection in gdb.base/break-probes.exp - When running test-case gdb.base/break-probes.exp on ubuntu 18.04.5, we have: - ... - (gdb) run^M - Starting program: break-probes^M - Stopped due to shared library event (no libraries added or removed)^M - (gdb) bt^M - #0 0x00007ffff7dd6e12 in ?? () from /lib64/ld-linux-x86-64.so.2^M - #1 0x00007ffff7dedf50 in ?? () from /lib64/ld-linux-x86-64.so.2^M - #2 0x00007ffff7dd5128 in ?? () from /lib64/ld-linux-x86-64.so.2^M - #3 0x00007ffff7dd4098 in ?? () from /lib64/ld-linux-x86-64.so.2^M - #4 0x0000000000000001 in ?? ()^M - #5 0x00007fffffffdaac in ?? ()^M - #6 0x0000000000000000 in ?? ()^M - (gdb) UNSUPPORTED: gdb.base/break-probes.exp: probes not present on this system - ... - - Using the backtrace, the test-case tries to establish that we're stopped in - dl_main, which is used as proof that we're using probes. - - However, the backtrace only shows an address, because: - - the dynamic linker contains no minimal symbols and no debug info, and - - gdb is build without --with-separate-debug-dir so it can't find the - corresponding .debug file, which does contain the mimimal symbols and - debug info. - - Fix this by instead printing the pc and grepping for the value in the - info probes output: - ... - (gdb) p /x $pc^M - $1 = 0x7ffff7dd6e12^M - (gdb) info probes^M - Type Provider Name Where Object ^M - ... - stap rtld init_start 0x00007ffff7dd6e12 /lib64/ld-linux-x86-64.so.2 ^M - ... - (gdb) - ... - - Tested on x86_64-linux. - -2021-09-23 Tom de Vries - - [gdb/testsuite] Handle failing probe detection in gdb.base/break-probes.exp - When running test-case gdb.base/break-probes.exp on ubuntu 18.04.5, we have: - ... - (gdb) bt^M - #0 0x00007ffff7dd6e12 in ?? () from /lib64/ld-linux-x86-64.so.2^M - #1 0x00007ffff7dedf50 in ?? () from /lib64/ld-linux-x86-64.so.2^M - #2 0x00007ffff7dd5128 in ?? () from /lib64/ld-linux-x86-64.so.2^M - #3 0x00007ffff7dd4098 in ?? () from /lib64/ld-linux-x86-64.so.2^M - #4 0x0000000000000001 in ?? ()^M - #5 0x00007fffffffdaac in ?? ()^M - #6 0x0000000000000000 in ?? ()^M - (gdb) FAIL: gdb.base/break-probes.exp: ensure using probes - ... - - The test-case intends to emit an UNTESTED in this case, but fails to do so - because it tries to do it in a regexp clause in a gdb_test_multiple, which - doesn't trigger. Instead, a default clause triggers which produces the FAIL. - - Also the use of UNTESTED is not appropriate, and we should use UNSUPPORTED - instead. - - Fix this by silencing the FAIL, and emitting an UNSUPPORTED after the - gdb_test_multiple: - ... - if { ! $using_probes } { - + unsupported "probes not present on this system" - return -1 - } - ... - - Tested on x86_64-linux. - -2021-09-23 Tom de Vries - - [gdb/testsuite] Use early-out style in gdb.base/break-probes.exp - Reduce indentation and improve readability in test-case - gdb.base/break-probes.exp by replacing: - ... - if { } { - - } - ... - with: - ... - if { ! } { - return -1 - } - - ... - - Tested on x86_64-linux. - -2021-09-23 Pedro Alves - - Test that frame info/IDs are stable/consistent - This adds a testcase that tests that the unwinder produces consistent - frame info and frame IDs by making sure that "info frame" shows the - same result when stopped at a function (level == 0), compared to when - we find the same frame in the stack at a level > 0. - - E.g., on x86-64, right after running to main, we see: - - (gdb) info frame - Stack level 0, frame at 0x7fffffffd340: - rip = 0x555555555168 in main (gdb.base/backtrace.c:41); saved rip = 0x7ffff7dd90b3 - source language c. - Arglist at 0x7fffffffd330, args: - Locals at 0x7fffffffd330, Previous frame's sp is 0x7fffffffd340 - Saved registers: - rbp at 0x7fffffffd330, rip at 0x7fffffffd338 - (gdb) - - and then after continuing to a function called by main, and selecting - the "main" frame again, we see: - - (gdb) info frame - Stack level 3, frame at 0x7fffffffd340: - rip = 0x555555555172 in main (gdb.base/backtrace.c:41); saved rip = 0x7ffff7dd90b3 - caller of frame at 0x7fffffffd330 - source language c. - Arglist at 0x7fffffffd330, args: - Locals at 0x7fffffffd330, Previous frame's sp is 0x7fffffffd340 - Saved registers: - rbp at 0x7fffffffd330, rip at 0x7fffffffd338 - (gdb) - - The only differences should be in the stack level, the 'rip = ' - address, and the presence of the "caller of frame at" info. All the - rest should be the same. If it isn't, it probably means that the - frame base, the frame ID, etc. aren't stable & consistent. - - The testcase exercises both the DWARF and the heuristic unwinders, - using "maint set dwarf unwinder on/off". - - Tested on {x86-64 -m64, x86-64 -m32, Aarch64, Power8} GNU/Linux. - - Change-Id: I795001c82cc70d543d197415e3f80ce5dc7f3452 - -2021-09-23 Tom Tromey - - Change get_ada_task_ptid parameter type - get_ada_task_ptid currently takes a 'long' as its 'thread' parameter - type. However, on some platforms this is actually a pointer, and - using 'long' can sometimes end up with the value being sign-extended. - This sign extension can cause problems later, if the tid is then later - used as an address again. - - This patch changes the parameter type to ULONGEST and updates all the - uses. This approach preserves sign extension on the targets where it - is apparently intended, while avoiding it on others. - - Co-Authored-By: John Baldwin - -2021-09-23 Tom Tromey - - Change ptid_t::tid to ULONGEST - The ptid_t 'tid' member is normally used as an address in gdb -- both - bsd-uthread and ravenscar-thread use it this way. However, because - the type is 'long', this can cause problems with sign extension. - - This patch changes the type to ULONGEST to ensure that sign extension - does not occur. - -2021-09-23 Tom Tromey - - Remove defaulted 'tid' parameter to ptid_t constructor - I wanted to find, and potentially modify, all the spots where the - 'tid' parameter to the ptid_t constructor was used. So, I temporarily - removed this parameter and then rebuilt. - - In order to make it simpler to search through the "real" (nonzero) - uses of this parameter, something I knew I'd have to do multiple - times, I removed any ", 0" from constructor calls. - - Co-Authored-By: John Baldwin - -2021-09-23 Tom Tromey - - Style the "XXX" text in ptype/o - This patch changes gdb to use the 'highlight' style on the "XXX" text - in the output of ptype/o. - -2021-09-23 GDB Administrator - - Automatic date update in version.in - -2021-09-22 Tom de Vries - - [gdb/testsuite] Fix gdb.python/py-events.exp - With test-case gdb.python/py-events.exp on ubuntu 18.04.5 we run into: - ... - (gdb) info threads^M - Id Target Id Frame ^M - * 1 Thread 0x7ffff7fc3740 (LWP 31467) "py-events" do_nothing () at \ - src/gdb/testsuite/gdb.python/py-events-shlib.c:19^M - (gdb) FAIL: gdb.python/py-events.exp: get current thread - ... - - The info thread commands uses "Thread" instead of "process" because - libpthread is already loaded: - ... - new objfile name: /lib/x86_64-linux-gnu/libdl.so.2^M - [Thread debugging using libthread_db enabled]^M - Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".^M - event type: new_objfile^M - new objfile name: /lib/x86_64-linux-gnu/libpthread.so.0^M - ... - and consequently thread_db_target::pid_to_str is used. - - Fix this by parsing the "Thread" expression. - - Tested on x86_64-linux. - -2021-09-22 Tom de Vries - - [gdb] Add maint selftest -verbose option - The print_one_insn selftest in gdb/disasm-selftests.c contains: - ... - /* If you want to see the disassembled instruction printed to gdb_stdout, - set verbose to true. */ - static const bool verbose = false; - ... - - Make this parameter available in the maint selftest command using a new option - -verbose, such that we can do: - ... - (gdb) maint selftest -verbose print_one_insn - ... - - Tested on x86_64-linux. - -2021-09-22 Alan Modra - - dwarf2 sub-section test - This is a testcase for the bug fixed by commit 5b4846283c3d. When - running the testcase on ia64 targets I found timeouts along with lots - of memory being consumed, due to ia64 gas not tracking text - sub-sections. Trying to add nops for ".nop 16" in ".text 1" resulting - in them being added to subsegment 0, with no increase to subsegment 1 - size. This patch also fixes that problem. - - Note that the testcase fails on ft32-elf, mn10200-elf, score-elf, - tic5x-elf, and xtensa-elf. The first two are relocation errors, the - last three appear to be the .nop directive failing to emit the right - number of nops. I didn't XFAIL any of them. - - * config/tc-ia64.c (md): Add last_text_subseg. - (ia64_flush_insns, dot_endp): Use last_text_subseg. - (ia64_frob_label, md_assemble): Set last_text_subseg. - * testsuite/gas/elf/dwarf2-21.d, - * testsuite/gas/elf/dwarf2-21.s: New test. - * testsuite/gas/elf/elf.exp: Run it. - -2021-09-22 Alan Modra - - Fix x86 "FAIL: TLS -fno-pic -shared" - Fix a typo in commit 5d0869d9872a - - * testsuite/ld-i386/tlsnopic.rd: Typo fix. - -2021-09-22 GDB Administrator - - Automatic date update in version.in - -2021-09-21 Nick Clifton - - Change the linker's heuristic for computing the entry point for binaries so that shared libraries default to an entry point of 0. - * ldlang.c (lang_end): When computing the entry point, only - try the start address of the entry section when creating an - executable. - * ld.texi (Entry point): Update description of heuristic used to - choose the entry point. - testsuite/ld-alpha/tlspic.rd: Update expected entry point address. - testsuite/ld-arm/tls-gdesc-got.d: Likewise. - testsuite/ld-i386/tlsnopic.rd: Likewise. - testsuite/ld-ia64/tlspic.rd: Likewise. - testsuite/ld-sparc/gotop32.rd: Likewise. - testsuite/ld-sparc/gotop64.rd: Likewise. - testsuite/ld-sparc/tlssunnopic32.rd: Likewise. - testsuite/ld-sparc/tlssunnopic64.rd: Likewise. - testsuite/ld-sparc/tlssunpic32.rd: Likewise. - testsuite/ld-sparc/tlssunpic64.rd: Likewise. - testsuite/ld-tic6x/shlib-1.rd: Likewise. - testsuite/ld-tic6x/shlib-1b.rd: Likewise. - testsuite/ld-tic6x/shlib-1r.rd: Likewise. - testsuite/ld-tic6x/shlib-1rb.rd: Likewise. - testsuite/ld-tic6x/shlib-noindex.rd: Likewise. - testsuite/ld-x86-64/pr14207.d: Likewise. - testsuite/ld-x86-64/tlsdesc.rd: Likewise. - testsuite/ld-x86-64/tlspic.rd: Likewise. - testsuite/ld-x86-64/tlspic2.rd: Likewise. - -2021-09-21 Tom de Vries - - [gdb/testsuite] Handle supports_memtag in gdb.base/gdb-caching-proc.exp - In test-case gdb.base/gdb-caching-proc.exp, we run all procs declared with - gdb_caching_proc. Some of these require a gdb instance, some not. - - We could just do a clean_restart every time, but that would amount to 44 gdb - restarts. We try to minimize this by doing this only for the few procs that - need it, and hardcoding those in the test-case. - - For those procs, we do a clean_restart, execute the proc, and then do a - gdb_exit, to make sure the gdb instance doesn't linger such that we detect - procs that need a gdb instance but are not listed in the test-case. - - However, that doesn't work in the case of gnat_runtime_has_debug_info. This - proc doesn't require a gdb instance because it starts its own. But it doesn't - clean up the gdb instance, and since it's not listed, the test-case - doesn't clean up the gdb instance eiter. Consequently, the proc - supports_memtag (which should be listed, but isn't) uses the gdb instance - started by gnat_runtime_has_debug_info rather than throwing an error. Well, - unless gnat_runtime_has_debug_info fails before starting a gdb instance, in - which case we do run into the error. - - Fix this by: - - doing gdb_exit unconditionally - - fixing the resulting error by adding supports_memtag in the test-case to - the "needing gdb instance" list - - Tested on x86_64-linux. - -2021-09-21 Felix Willgerodt - - gdb, doc: Add ieee_half and bfloat16 to list of predefined target types. - For some reason these two weren't added to the list when they were orginally - added to GDB. - - gdb/doc/ChangeLog: - 2021-09-21 Felix Willgerodt - - * gdb.texinfo (Predefined Target Types): Mention ieee_half and bfloat16. - -2021-09-21 GDB Administrator - - Automatic date update in version.in - -2021-09-20 Tom de Vries - - [gdb/testsuite] Fix gdb.ada/interface.exp with gcc-9 - When running test-case gdb.ada/interface.exp with gcc-9, we run into: - ... - (gdb) info locals^M - s = (x => 1, y => 2, w => 3, h => 4)^M - r = (x => 1, y => 2, w => 3, h => 4)^M - (gdb) FAIL: gdb.ada/interface.exp: info locals - ... - - The failure is caused by the regexp expecting variable r followed by - variable s. - - Fix this by allowing variable s followed by variable r as well. - - Tested on x86_64-linux. - -2021-09-20 Tom de Vries - - [gdb/testsuite] Fix gdb.ada/mi_prot.exp - When running test-case gdb.ada/mi_prot.exp with gcc 8.5.0, we run into: - ... - (gdb) ^M - Expecting: ^(-stack-list-arguments --no-frame-filters 1[^M - ]+)?(\^done,stack=.*[^M - ]+[(]gdb[)] ^M - [ ]*) - -stack-list-arguments --no-frame-filters 1^M - ^done,stack-args=[frame={level="0",args=[{name="<_object>",value="(ceiling_priority =\ - > 97, local => 0)"},{name="v",value="5"},{name="<_objectO>",value="true"}]},frame={le\ - vel="1",args=[{name="v",value="5"},{name="<_objectO>",value="true"}]},frame={level="2\ - ",args=[]}]^M - (gdb) ^M - FAIL: gdb.ada/mi_prot.exp: -stack-list-arguments --no-frame-filters 1 (unexpected out\ - put) - ... - - Fix this by updating the regexp to expect "^done,stack-args=" instead of - "^done,stack=". - - Tested on x86_64-linux. - -2021-09-20 Tom de Vries - - [gdb/testsuite] Register test for each arch separately in register_test_foreach_arch - In gdb/disasm-selftests.c we have: - ... - selftests::register_test_foreach_arch ("print_one_insn", - selftests::print_one_insn_test); - ... - and we get: - ... - $ gdb -q -batch -ex "maint selftest print_one_insn" 2>&1 \ - | grep ^Running - Running selftest print_one_insn. - $ - ... - - Change the semantics register_test_foreach_arch such that a version of - print_one_insn is registered for each architecture, such that we have: - ... - $ gdb -q -batch -ex "maint selftest print_one_insn" 2>&1 \ - | grep ^Running - Running selftest print_one_insn::A6. - Running selftest print_one_insn::A7. - Running selftest print_one_insn::ARC600. - ... - $ - ... - - This makes it f.i. possible to do: - ... - $ gdb -q -batch a.out -ex "maint selftest print_one_insn::armv8.1-m.main" - Running selftest print_one_insn::armv8.1-m.main. - Self test failed: self-test failed at src/gdb/disasm-selftests.c:165 - Ran 1 unit tests, 1 failed - ... - - Tested on x86_64-linux with an --enable-targets=all build. - -2021-09-20 Tom de Vries - - [gdb] Change register_test to use std::function arg - Change register_test to use std::function arg, such that we can do: - ... - register_test (test_name, [=] () { SELF_CHECK (...); }); - ... - - Tested on x86_64-linux. - -2021-09-20 Tom de Vries - - [gdb/testsuite] Fix gdb.ada/big_packed_array.exp xfail for -m32 - With test-case gdb.ada/big_packed_array.exp and target board unix/-m32 I run - into: - ... - (gdb) print bad^M - $2 = (0 => 0 , 160)^M - (gdb) FAIL: gdb.ada/big_packed_array.exp: scenario=minimal: print bad - ... - - The problem is that while the variable is an array of 196 bits (== 24.5 bytes), - the debug information describes it as 25 unsigned char. This is PR - gcc/101643, and the test-case contains an xfail for this, which catches only: - ... - (gdb) print bad^M - $2 = (0 => 0 )^M - ... - - Fix this by updating the xfail pattern. - - Tested on x86_64-linux. - -2021-09-20 Simon Marchi - - gdbsupport/gdb_proc_service.h: use decltype instead of typeof - Bug 28341 shows that GDB fails to compile when built with -std=c++11. - I don't know much about the use case, but according to the author of the - bug: - - I encountered the scenario where CXX is set to "g++ -std=c++11" when - I try to compile binutils under GCC as part of the GCC 3-stage - compilation, which is common for building a cross-compiler. - - The author of the bug suggests using __typeof__ instead of typeof. But - since we're using C++, we might as well use decltype, which is standard. - This is what this patch does. - - The failure (and fix) can be observed by configuring GDB with CXX="g++ - -std=c++11": - - CXX linux-low.o - In file included from /home/simark/src/binutils-gdb/gdbserver/gdb_proc_service.h:22, - from /home/simark/src/binutils-gdb/gdbserver/linux-low.h:27, - from /home/simark/src/binutils-gdb/gdbserver/linux-low.cc:20: - /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/gdb_proc_service.h:177:50: error: expected constructor, destructor, or type conversion before (token - 177 | __attribute__((visibility ("default"))) typeof (SYM) SYM - | ^ - /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/gdb_proc_service.h:179:1: note: in expansion of macro PS_EXPORT - 179 | PS_EXPORT (ps_get_thread_area); - | ^~~~~~~~~ - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28341 - Change-Id: I84fbaae938209d8d935ca08dec9b7e6a0dd1bda0 - -2021-09-20 Andrew Burgess - - riscv: print .2byte or .4byte before an unknown instruction encoding - When the RISC-V disassembler encounters an unknown instruction, it - currently just prints the value of the bytes, like this: - - Dump of assembler code for function custom_insn: - 0x00010132 <+0>: addi sp,sp,-16 - 0x00010134 <+2>: sw s0,12(sp) - 0x00010136 <+4>: addi s0,sp,16 - 0x00010138 <+6>: 0x52018b - 0x0001013c <+10>: 0x9c45 - - My proposal, in this patch, is to change the behaviour to this: - - Dump of assembler code for function custom_insn: - 0x00010132 <+0>: addi sp,sp,-16 - 0x00010134 <+2>: sw s0,12(sp) - 0x00010136 <+4>: addi s0,sp,16 - 0x00010138 <+6>: .4byte 0x52018b - 0x0001013c <+10>: .2byte 0x9c45 - - Adding the .4byte and .2byte opcodes. The benefit that I see here is - that in the patched version of the tools, the disassembler output can - be fed back into the assembler and it should assemble to the same - binary format. Before the patch, the disassembler output is invalid - assembly. - - I've started a RISC-V specific test file under binutils so that I can - add a test for this change. - - binutils/ChangeLog: - - * testsuite/binutils-all/riscv/riscv.exp: New file. - * testsuite/binutils-all/riscv/unknown.d: New file. - * testsuite/binutils-all/riscv/unknown.s: New file. - - opcodes/ChangeLog: - - * riscv-dis.c (riscv_disassemble_insn): Print a .%dbyte opcode - before an unknown instruction, '%d' is replaced with the - instruction length. - -2021-09-20 Alan Modra - - Fix allocate_filenum last dir/file checks - * dwarf2dbg.c (allocate_filenum) Correct use of last_used_dir_len. - -2021-09-20 Alan Modra - - Re: PR28149, debug info with wrong file association - Fixes segfaults when building aarch64-linux kernel, due to only doing - part of the work necessary when allocating file numbers late. I'd - missed looping over subsegments, which resulted in some u.filename - entries left around and later interpreted as u.view. - - PR 28149 - * dwarf2dbg.c (purge_generated_debug): Iterate over subsegs too. - (dwarf2_finish): Call do_allocate_filenum for all subsegs too, - in a separate loop before subsegs are chained. - -2021-09-20 Alan Modra - - Move eelf_mipsel_haiki.c to ALL_64_EMULATION_SOURCES - --enable-targets=all on a 32-bit host results in a link failure with - undefined references due to elfxx-mips.c not being compiled. This - patch fixes that by putting eelf_mipsel_haiki.c in the correct - EMULATION_SOURCES Makefile variable. I've also added a bunch of - missing file dependencies and sorted a few things so that it's easier - to verify dependencies are present. - - * Makfile.am: Add missing haiku dependencies, sort. - (ALL_EMULATION_SOURCES): Sort. Move eelf_mipsel_haiku.c to.. - (ALL_64_EMULATION_SOURCES): ..here. Sort. - * Makfile.in: Regenerate. - -2021-09-20 GDB Administrator - - Automatic date update in version.in - -2021-09-19 H.J. Lu - - elf: Don't set version info on unversioned symbols - Don't set version info on unversioned symbols when seeing a hidden - versioned symbol after an unversioned definition and the default - versioned symbol. - - bfd/ - - PR ld/28348 - * elflink.c (elf_link_add_object_symbols): Don't set version info - on unversioned symbols. - - ld/ - - PR ld/28348 - * testsuite/ld-elf/pr28348.rd: New file. - * testsuite/ld-elf/pr28348.t: Likewise. - * testsuite/ld-elf/pr28348a.c: Likewise. - * testsuite/ld-elf/pr28348b.c: Likewise. - * testsuite/ld-elf/pr28348c.c: Likewise. - * testsuite/ld-elf/shared.exp: Run PR ld/28348 tests. - -2021-09-19 Mike Frysinger - - gdb: manual: update @inforef to @xref - The @inforef command is deprecated, and @xref does the samething. - Also had to update the text capitalization to match current manual. - Verified that info & HTML links work. - -2021-09-19 Weimin Pan - - CTF: multi-CU and archive support - Now gdb is capable of debugging executable, which consists of multiple - compilation units (CUs) with the CTF debug info. An executable could - potentially have one or more archives, which, in CTF context, contain - conflicting types. - - all changes were made in ctfread.c in which elfctf_build_psymtabs was - modified to handle archives, via the ctf archive iterator and its callback - build_ctf_archive_member and scan_partial_symbols was modified to scan - archives, which are treated as subfiles, to build the psymtabs. - - Also changes were made to handle CTF's data object section and function - info section which now share the same format of their contents - an array - of type IDs. New functions ctf_psymtab_add_stt_entries, which is called by - ctf_psymtab_add_stt_obj and ctf_psymtab_add_stt_func, and add_stt_entries, - which is called by add_stt_obj and add_stt_func when setting up psymtabs - and full symtab, respectively. - -2021-09-19 GDB Administrator - - Automatic date update in version.in - -2021-09-18 Tom de Vries - - [gdb/testsuite] Fix gdb.server/server-kill.exp with -m32 - When running test-case gdb.server/server-kill.exp with target board unix/-m32, - I run into: - ... - 0xf7fd6b20 in _start () from /lib/ld-linux.so.2^M - (gdb) Executing on target: kill -9 13082 (timeout = 300) - builtin_spawn -ignore SIGHUP kill -9 13082^M - bt^M - (gdb) FAIL: gdb.server/server-kill.exp: kill_pid_of=server: test_unwind_syms: bt - ... - - The test-case expects the backtrace command to trigger remote communication, - which then should result in a "Remote connection closed" or similar. - - However, no remote communication is triggered, because we hit the "Check that - this frame is unwindable" case in get_prev_frame_always_1. - - We don't hit this problem in the kill_pid_of=inferior case, because there we - run to main before doing the backtrace. - - Fix this by doing the same in the kill_pid_of=server case. - - Tested on x86_64-linux. - -2021-09-18 Tom de Vries - - [gdb/ada] Handle artificial local symbols - With current master and gcc 7.5.0/8.5.0, we have this timeout: - ... - (gdb) print s^M - Multiple matches for s^M - [0] cancel^M - [1] s at src/gdb/testsuite/gdb.ada/interface/foo.adb:20^M - [2] s at src/gdb/testsuite/gdb.ada/interface/foo.adb:?^M - > FAIL: gdb.ada/interface.exp: print s (timeout) - ... - - [ The FAIL doesn't reproduce with gcc 9.3.1. This difference in - behaviour bisects to gcc commit d70ba0c10de. - - The FAIL with earlier gcc bisects to gdb commit ba8694b650b. ] - - The FAIL is caused by gcc generating this debug info describing a named - artificial variable: - ... - <2><1204>: Abbrev Number: 31 (DW_TAG_variable) - <1205> DW_AT_name : s.14 - <1209> DW_AT_type : <0x1213> - <120d> DW_AT_artificial : 1 - <120d> DW_AT_location : 5 byte block: 91 e0 7d 23 18 \ - (DW_OP_fbreg: -288; DW_OP_plus_uconst: 24) - ... - - An easy way to fix this would be to simply not put named artificial variables - into the symbol table. However, that causes regressions for Ada. It relies - on being able to get the value from such variables, using a named reference. - - Fix this instead by marking the symbol as artificial, and: - - ignoring such symbols in ada_resolve_variable, which fixes the FAIL - - ignoring such ada symbols in do_print_variable_and_value, which prevents - them from showing up in "info locals" - - Note that a fix for the latter was submitted here ( - https://sourceware.org/pipermail/gdb-patches/2008-January/054994.html ), and - this patch borrows from it. - - Tested on x86_64-linux. - - Co-Authored-By: Joel Brobecker - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28180 - -2021-09-18 GDB Administrator - - Automatic date update in version.in - -2021-09-17 Alan Modra - - PR28149 part 2, purge generated line info - Mixing compiler generated line info with gas generated line info is - generally just confusing. Also .loc directives with non-zero view - fields might reference a previous .loc. It becomes a little more - tricky to locate that previous .loc if there might be gas generated - line info present too. Mind you, we turn off gas generation of line - info on seeing compiler generated line info, so any reference back - won't hit gas generated line info. At least, if the view info is - sane. Unfortunately, gas needs to handle mangled source. - - PR 28149 - * dwarf2dbg.c (purge_generated_debug): New function. - (dwarf2_directive_filename): Call the above. - (out_debug_line): Don't segfault after purging. - * testsuite/gas/i386/dwarf2-line-4.d: Update expected output. - * testsuite/gas/i386/dwarf4-line-1.d: Likewise. - * testsuite/gas/i386/dwarf5-line-1.d: Likewise. - * testsuite/gas/i386/dwarf5-line-2.d: Likewise. - -2021-09-17 Alan Modra - - PR28149, debug info with wrong file association - gcc-11 and gcc-12 pass -gdwarf-5 to gas, in order to prime gas for - DWARF 5 level debug info. Unfortunately it seems there are cases - where the compiler does not emit a .file or .loc dwarf debug directive - before any machine instructions. (Note that the .file directive - typically emitted as the first line of assembly output doesn't count as - a dwarf debug directive. The dwarf .file has a file number before the - file name string.) - - This patch delays allocation of file numbers for gas generated line - debug info until the end of assembly, thus avoiding any clashes with - compiler generated file numbers. Two fixes for test case source are - necessary; A .loc can't use a file number that hasn't already been - specified with .file. - - A followup patch will remove all the gas generated line info on - seeing a .file directive. - - PR 28149 - * dwarf2dbg.c (num_of_auto_assigned): Delete. - (current): Update initialisation. - (set_or_check_view): Replace all accesses to view with u.view. - (dwarf2_consume_line_info): Likewise. - (dwarf2_directive_loc): Likewise. Assert that we aren't generating - line info. - (dwarf2_gen_line_info_1): Don't call set_or_check_view on - gas generated line entries. - (dwarf2_gen_line_info): Set and track filenames for gas generated - line entries. Simplify generation of labels. - (get_directory_table_entry): Use filename_cmp when comparing dirs. - (do_allocate_filenum): New function. - (dwarf2_where): Set u.filename and filenum to -1 for gas generated - line entries. - (dwarf2_directive_filename): Remove num_of_auto_assigned handling. - (process_entries): Update view field access. Call - do_allocate_filenum. - * dwarf2dbg.h (struct dwarf2_line_info): Add filename field in - union aliasing view. - * testsuite/gas/i386/dwarf2-line-3.s: Add .file directive. - * testsuite/gas/i386/dwarf2-line-4.s: Likewise. - * testsuite/gas/i386/dwarf2-line-4.d: Update expected output. - * testsuite/gas/i386/dwarf4-line-1.d: Likewise. - * testsuite/gas/i386/dwarf5-line-1.d: Likewise. - * testsuite/gas/i386/dwarf5-line-2.d: Likewise. - -2021-09-17 Alan Modra - - [GOLD] PowerPC64 support for sym+addend GOT entries - Pass addends to all the GOT handling functions, plus remove some - extraneous asserts. - - PR 28192 - * powerpc.cc (Output_data_got_powerpc): Add addend parameter to - all methods creating got entries. - (Target_powerpc::Scan::local): Pass reloc addend to got handling - functions, and when creating dynamic got relocations. - (Target_powerpc::Scan::global): Likewise. - (Target_powerpc::Relocate::relocate): Likewise. Remove extraneous - assertions. - -2021-09-17 Alan Modra - - [GOLD] Got_entry::write addends - This takes care of writing out GOT entries with addends. The local - symbol case was already largely handled, except for passing the addend - to tls_offset_for_local which might need the addend in a - local_got_offset call. That's needed also in tls_offset_for_global. - - I'm assuming here that GOT entries for function symbols won't ever - have addends, and in particular that a GOT entry referencing PLT call - stub code won't want an offset into the code. - - PR 28192 - * output.cc (Output_data_got::Got_entry::write): Include addend - in global symbol value. Pass addend to tls_offset_for_*. - * powerpc.cc (Target_powerpc::do_tls_offset_for_local): Handle addend. - (Target_powerpc::do_tls_offset_for_global): Likewise. - * s390.cc (Target_s390::do_tls_offset_for_local): Likewise. - (Target_s390::do_tls_offset_for_global): Likewise. - * target.h (Target::tls_offset_for_local): Add addend param. - (Target::tls_offset_for_global): Likewise. - (Target::do_tls_offset_for_local): Likewise. - (Target::do_tls_offset_for_global): Likewise. - -2021-09-17 Alan Modra - - [GOLD] Output_data_got create entry method addends - This patch makes all the Output_data_got methods that create new - entries accept an optional addend. - - PR 28192 - * output.h (Output_data_got::add_global): Add optional addend - parameter. Update comment. Delete overload without addend. - (Output_data_got::add_global_plt): Likewise. - (Output_data_got::add_global_tls): Likewise. - (Output_data_got::add_global_with_rel): Likewise. - (Output_data_got::add_global_pair_with_rel): Likewise. - (Output_data_got::add_local_plt): Likewise. - (Output_data_got::add_local_tls): Likewise. - (Output_data_got::add_local_tls_pair): Likewise. - (Output_data_got::reserve_local): Likewise. - (Output_data_got::reserve_global): Likewise. - (Output_data_got::Got_entry): Include addend in global sym - constructor. Delete local sym constructor without addend. - * output.cc (Output_data_got::add_global): Add addend param, - pass to got handling methods. - (Output_data_got::add_global_plt): Likewise. - (Output_data_got::add_global_with_rel): Likewise. - (Output_data_got::add_global_pair_with_rel): Likewise. - (Output_data_got::add_local_plt): Likewise. - (Output_data_got::add_local_tls_pair): Likewise. - (Output_data_got::reserve_local): Likewise. - (Output_data_got::reserve_global): Likewise. - -2021-09-17 Alan Modra - - [GOLD] Output_data_got tidy - Some Output_data_got methods already have support for addends, but - were implemented as separate methods. This removes unnecessary code - duplication. - - Relobj::local_has_got_offset and others there get a similar treatment. - Comments are removed since it should be obvious without a comment, and - the existing comments are not precisely what the code does. For - example, a local_has_got_offset call without an addend does not return - whether the local symbol has *a* GOT offset of type GOT_TYPE, it - returns whether there is a GOT entry of type GOT_TYPE for the symbol - with addend of zero. - - PR 28192 - * output.h (Output_data_got::add_local): Make addend optional. - (Output_data_got::add_local_with_rel): Likewise. - (Output_data_got::add_local_pair_with_rel): Likewise. - * output.cc (Output_data_got::add_local): Delete overload - without addend. - (Output_data_got::add_local_with_rel): Likewise. - (Output_data_got::add_local_pair_with_rel): Likewise. - * object.h (Relobj::local_has_got_offset): Make addend optional. - Delete overload without addend later. Update comment. - (Relobj::local_got_offset): Likewise. - (Relobj::set_local_got_offset): Likewise. - -2021-09-17 Alan Modra - - [GOLD] Remove addend from Local_got_entry_key - This patch removes the addend from Local_got_entry_key, which is - unnecessary now that Got_offset_list has an addend. Note that it - might be advantageous to keep the addend in Local_got_entry_key when - linking objects containing a large number of section_sym+addend@got - relocations. I opted to save some memory by removing the field but - left the class there in case we might need to restore {sym,addend} - lookup. That's also why this change is split out from the - Got_offset_list change. - - PR 28192 - * object.h (Local_got_entry_key): Delete addend_ field. - Adjust constructor and methods to suit. - * object.cc (Sized_relobj::do_for_all_local_got_entries): - Update key. - -2021-09-17 Alan Modra - - [GOLD] Got_offset_list: addend field - This is the first in a series of patches aimed at supporting GOT - entries against symbol plus addend generally for PowerPC64 rather than - just section symbol plus addend as gold has currently. - - This patch adds an addend field to Got_offset_list, so that both local - and global symbols can have GOT entries with addend. - - PR 28192 - * object.h (Got_offset_list): Add addend_ field, init in both - constructors. Adjust all accessors to suit. - (Sized_relobj::do_local_has_got_offset): Adjust to suit. - (Sized_relobj::do_local_got_offset): Likewise. - (Sized_relobj::do_set_local_got_offset): Likewise. - * symtab.h (Symbol::has_got_offset): Add optional addend param. - (Symbol::got_offset, Symbol::set_got_offset): Likewise. - * incremental.cc (Local_got_offset_visitor::visit): Add unused - uint64_t parameter with FIXME. - (Global_got_offset_visitor::visit): Add unused uint64_t parameter. - -2021-09-17 Henry Castro - - Fix segfault when running ia16-elf-gdb - "A problem internal to GDB has been detected, - further debugging may prove unreliable." - - Segmentation fault - -2021-09-17 Nelson Chu - - RISC-V: Merged extension string tables and their version tables into one. - There are two main reasons for this patch, - - * In the past we had two extension tables, one is used to record all - supported extensions in bfd/elfxx-riscv.c, another is used to get the - default extension versions in gas/config/tc-riscv.c. It is hard to - maintain lots of tables in different files, but in fact we can merge - them into just one table. Therefore, we now define many riscv_supported_std* - tables, which record names and versions for all supported extensions. - We not only use these tables to initialize the riscv_ext_order, but - also use them to get the default versions of extensions, and decide if - the extensions should be enbaled by default. - - * We add a new filed `default_enable' for the riscv_supported_std* tables, - to decide if the extension should be enabled by default. For now if the - `default_enable' field of the extension is set to EXT_DEFAULT, then we - should enable the extension when the -march and elf architecture attributes - are not set. In the future, I suppose the `default_enable' can be set - to lots of EXT_, each vendor can decide to open which extensions, - when the target triple of vendor is chosen. - - The elf/linux regression tests of riscv-gnu-toolchain are passed. - - bfd/ - * elfnn-riscv.c (cpu-riscv.h): Removed sine it is included in - bfd/elfxx-riscv.h. - (riscv_merge_std_ext): Updated since the field of rpe is changed. - * elfxx-riscv.c (cpu-riscv.h): Removed. - (riscv_implicit_subsets): Added implicit extensions for g. - (struct riscv_supported_ext): Used to be riscv_ext_version. Moved - from gas/config/tc-riscv.c, and added new field `default_enable' to - decide if the extension should be enabled by default. - (EXT_DEFAULT): Defined for `default_enable' field. - (riscv_supported_std_ext): It used to return the supported standard - architecture string, but now we move ext_version_table from - gas/config/tc-riscv.c to here, and rename it to riscv_supported_std_ext. - Currently we not only use the table to initialize riscv_ext_order, but - also get the default versions of extensions, and decide if the extensions - should be enbaled by default. - (riscv_supported_std_z_ext): Likewise, but is used for z* extensions. - (riscv_supported_std_s_ext): Likewise, but is used for s* extensions. - (riscv_supported_std_h_ext): Likewise, but is used for h* extensions. - (riscv_supported_std_zxm_ext): Likewise, but is used for zxm* extensions. - (riscv_all_supported_ext): Includes all supported extension tables. - (riscv_known_prefixed_ext): Updated. - (riscv_valid_prefixed_ext): Updated. - (riscv_init_ext_order): Init the riscv_ext_order table according to - riscv_supported_std_ext. - (riscv_get_default_ext_version): Moved from gas/config/tc-riscv.c. - Get the versions of extensions from riscv_supported_std* tables. - (riscv_parse_add_subset): Updated. - (riscv_parse_std_ext): Updated. - (riscv_set_default_arch): Set the default subset list according to - the default_enable field of riscv_supported_*ext tables. - (riscv_parse_subset): If the input ARCH is NULL, then we call - riscv_set_default_arch to set the default subset list. - * elfxx-riscv.h (cpu-riscv.h): Included. - (riscv_parse_subset_t): Removed get_default_version field, and added - isa_spec field to replace it. - (extern riscv_supported_std_ext): Removed. - gas/ - * (bfd/cpu-riscv.h): Removed. - (struct riscv_ext_version): Renamed and moved to bfd/elfxx-riscv.c. - (ext_version_table): Likewise. - (riscv_get_default_ext_version): Likewise. - (ext_version_hash): Removed. - (init_ext_version_hash): Removed. - (riscv_set_arch): Updated since the field of rps is changed. Besides, - report error when the architecture string is empty. - (riscv_after_parse_args): Updated. - -2021-09-17 GDB Administrator - - Automatic date update in version.in - -2021-09-16 Tom de Vries - - [gdb/testsuite] Fix interrupted sleep in multi-threaded test-cases - When running test-case gdb.threads/continue-pending-status.exp with native, I - have: - ... - (gdb) continue^M - Continuing.^M - PASS: gdb.threads/continue-pending-status.exp: attempt 0: continue for ctrl-c - ^C^M - Thread 1 "continue-pendin" received signal SIGINT, Interrupt.^M - [Switching to Thread 0x7ffff7fc4740 (LWP 1276)]^M - 0x00007ffff758e4c0 in __GI___nanosleep () at nanosleep.c:27^M - 27 return SYSCALL_CANCEL (nanosleep, requested_time, remaining);^M - (gdb) PASS: gdb.threads/continue-pending-status.exp: attempt 0: caught interrupt - ... - but with target board unix/-m32, I run into: - ... - (gdb) continue^M - Continuing.^M - PASS: gdb.threads/continue-pending-status.exp: attempt 0: continue for ctrl-c - [Thread 0xf74aeb40 (LWP 31957) exited]^M - [Thread 0xf7cafb40 (LWP 31956) exited]^M - [Inferior 1 (process 31952) exited normally]^M - (gdb) Quit^M - ... - - The problem is that the sleep (300) call at the end of main is interrupted, - which causes the inferior to exit before the ctrl-c can be send. - - This problem is described at "Interrupted System Calls" in the docs, and the - suggested solution (using a sleep loop) indeed fixes the problem. - - Fix this instead using the more prevalent: - ... - alarm (300); - ... - while (1) sleep (1); - ... - which is roughly equivalent because the sleep is called at the end of main, - but slightly better because it guards against hangs from the start rather than - from the end of main. - - Likewise in gdb.base/watch_thread_num.exp. - - Likewise in gdb.btrace/enable-running.exp, but use the sleep loop there, - because the sleep is not called at the end of main. - - Tested on x86_64-linux. - -2021-09-16 Mike Frysinger - - gdb: manual: fix werrors typo - -2021-09-16 GDB Administrator - - Automatic date update in version.in - -2021-09-15 Tom de Vries - - [gdb/testsuite] Use function_range in gdb.dwarf2/dw2-abs-hi-pc.exp - When I run test-case gdb.dwarf2/dw2-abs-hi-pc.exp with gcc, we have: - ... - (gdb) break hello^M - Breakpoint 1 at 0x4004c0: file dw2-abs-hi-pc-hello.c, line 24.^M - (gdb) PASS: gdb.dwarf2/dw2-abs-hi-pc.exp: break hello - ... - but with clang, I run into: - ... - (gdb) break hello^M - Breakpoint 1 at 0x4004e4^M - (gdb) FAIL: gdb.dwarf2/dw2-abs-hi-pc.exp: break hello - ... - - The problem is that the CU and function both have an empty address range: - ... - <0>: Abbrev Number: 1 (DW_TAG_compile_unit) - <108> DW_AT_name : dw2-abs-hi-pc-hello.c - <123> DW_AT_low_pc : 0x4004e0 - <127> DW_AT_high_pc : 0x4004e0 - <1><12f>: Abbrev Number: 2 (DW_TAG_subprogram) - <131> DW_AT_name : hello - <13a> DW_AT_low_pc : 0x4004e0 - <13e> DW_AT_high_pc : 0x4004e0 - ... - - The address ranges are set like this in dw2-abs-hi-pc-hello-dbg.S: - ... - .4byte .hello_start /* DW_AT_low_pc */ - .4byte .hello_end /* DW_AT_high_pc */ - ... - where the labels refer to dw2-abs-hi-pc-hello.c: - ... - extern int v; - - asm (".hello_start: .globl .hello_start\n"); - void - hello (void) - { - asm (".hello0: .globl .hello0\n"); - v++; - asm (".hello1: .globl .hello1\n"); - } - asm (".hello_end: .globl .hello_end\n"); - ... - - Using asm labels in global scope is a known source of problems, as explained - in the comment of proc function_range in gdb/testsuite/lib/dwarf.exp. - - Fix this by using function_range instead. - - Tested on x86_64-linux with gcc and clang-7 and clang-12. - -2021-09-15 Claudiu Zissulescu - - arc: Fix got-weak linker test - Use regular expressions to fix the got-weak linker test. - - ld/ - * testsuite/got-weak.d: Update test. - -2021-09-15 Andrew Burgess - - bfd: fix incorrect type used in sizeof - Noticed in passing that we used 'sizeof (char **)' when calculating - the size of a list of 'char *' pointers. Of course, this isn't really - going to make a difference anywhere, but we may as well be correct. - - There should be no user visible changes after this commit. - - bfd/ChangeLog: - - * archures.c (bfd_arch_list): Use 'char *' instead of 'char **' - when calculating space for a string list. - -2021-09-15 Tom de Vries - - [gdb/doc] Fix typo in maint selftest entry - Fix typo "will by" -> "will be". - -2021-09-15 Tom de Vries - - [bfd] Ensure unique printable names for bfd archs - Remove duplicate entry in bfd_ft32_arch and bfd_rx_arch. - - Fix printable name for bfd_mach_n1: "nh1" -> "n1". - - PR 28336 - * cpu-ft32.c (arch_info_struct): Remove "ft32" entry. - * cpu-rx.c (arch_info_struct): Remove "rx" entry. - * cpu-nds32.c (bfd_nds32_arch): Fix printable name for bfd_mach_n1 - entry. - -2021-09-15 Alan Modra - - PR28328, dlltool ice - PR 28328 - * archive.c (bfd_ar_hdr_from_filesystem): Don't use bfd_set_input_error - here, our caller will do that. - -2021-09-15 GDB Administrator - - Automatic date update in version.in - -2021-09-14 Tom de Vries - - [gdb/testsuite] Fix gdb_load_no_complaints with gnu-debuglink - When running test-case gdb.dwarf2/dw2-ranges-psym-warning.exp with target - board gnu-debuglink I run into: - ... - (gdb) file dw2-ranges-psym-warning^M - Reading symbols from dw2-ranges-psym-warning...^M - Reading symbols from .debug/dw2-ranges-psym-warning.debug...^M - (gdb) FAIL: gdb.dwarf2/dw2-ranges-psym-warning.exp: No complaints - ... - - Fix this by updating the regexp in gdb_load_no_complaints. - - Tested on x86_64-linux. - -2021-09-14 Tom de Vries - - [gdb/symtab] Fix function range handling in psymtabs - Consider the test-case from this patch. - - We run into: - ... - (gdb) PASS: gdb.dwarf2/dw2-ranges-psym-warning.exp: continue - bt^M - warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M - ^M - warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M - ^M - warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M - ^M - warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M - ^M - warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M - ^M - warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M - ^M - read in psymtab, but not in symtab.)^M - ^M - )^M - (gdb) FAIL: gdb.dwarf2/dw2-ranges-psym-warning.exp: bt - ... - - This happens as follows. - - The function foo: - ... - <1><31>: Abbrev Number: 4 (DW_TAG_subprogram) - <33> DW_AT_name : foo - <37> DW_AT_ranges : 0x0 - ... - has these ranges: - ... - 00000000 00000000004004c1 00000000004004d2 - 00000000 00000000004004ae 00000000004004af - 00000000 - ... - which have a hole at at [0x4004af,0x4004c1). - - However, the address map of the partial symtabs incorrectly maps addresses - in the hole (such as 0x4004b6 in the backtrace) to the foo CU. - - The address map of the full symbol table of the foo CU however does not - contain the addresses in the hole, which is what the warning / internal error - complains about. - - Fix this by making sure that ranges of functions are read correctly. - - The patch adds a bit to struct partial_die_info, in this hole (shown for - x86_64-linux): - ... - /* 11: 7 | 4 */ unsigned int canonical_name : 1; - /* XXX 4-byte hole */ - /* 16 | 8 */ const char *raw_name; - ... - So there's no increase in size for 64-bit, but AFAIU there will be an increase - for 32-bit. - - Tested on x86_64-linux. - - gdb/ChangeLog: - - 2021-08-10 Tom de Vries - - PR symtab/28200 - * dwarf2/read.c (struct partial_die_info): Add has_range_info and - range_offset field. - (add_partial_subprogram): Handle pdi->has_range_info. - (partial_die_info::read): Set pdi->has_range_info. - - gdb/testsuite/ChangeLog: - - 2021-08-10 Tom de Vries - - PR symtab/28200 - * gdb.dwarf2/dw2-ranges-psym-warning-main.c: New test. - * gdb.dwarf2/dw2-ranges-psym-warning.c: New test. - * gdb.dwarf2/dw2-ranges-psym-warning.exp: New file. - -2021-09-14 Tom de Vries - - [gdb/symtab] Fix CU list in .debug_names for dummy CUs - With current trunk and target board cc-with-debug-names we have: - ... - (gdb) file dw2-ranges-psym^M - Reading symbols from dw2-ranges-psym...^M - warning: Section .debug_names in dw2-ranges-psym has abbreviation_table of \ - size 1 vs. written as 28, ignoring .debug_names.^M - (gdb) set complaints 0^M - (gdb) FAIL: gdb.dwarf2/dw2-ranges-psym.exp: No complaints - ... - - The executable has 8 compilation units: - ... - $ readelf -wi dw2-ranges-psym | grep @ - Compilation Unit @ offset 0x0: - Compilation Unit @ offset 0x2e: - Compilation Unit @ offset 0xa5: - Compilation Unit @ offset 0xc7: - Compilation Unit @ offset 0xd2: - Compilation Unit @ offset 0x145: - Compilation Unit @ offset 0x150: - Compilation Unit @ offset 0x308: - ... - of which the ones at 0xc7 and 0x145 are dummy CUs (that is, they do not - contain a single DIE), which were added by recent commit 5ef670d81fd - "[gdb/testsuite] Add dummy start and end CUs in dwarf assembly". - - The .debug_names section contains this CU table: - ... - [ 0] 0x0 - [ 1] 0x2e - [ 2] 0xa5 - [ 3] 0xd2 - [ 4] 0x150 - [ 5] 0x308 - [ 6] 0x1 - [ 7] 0x0 - ... - The last two entries are incorrect, and the entries for the dummy CUs are - missing. - - The last two entries are incorrect because here in write_debug_names we write - the dimension of the CU list as 8: - ... - /* comp_unit_count - The number of CUs in the CU list. */ - header.append_uint (4, dwarf5_byte_order, - per_objfile->per_bfd->all_comp_units.size () - - per_objfile->per_bfd->tu_stats.nr_tus); - ... - while the actual dimension of the CU list is 6. - - The discrepancy is caused by this code which skips the dummy CUs: - ... - for (int i = 0; i < per_objfile->per_bfd->all_comp_units.size (); ++i) - { - ... - /* CU of a shared file from 'dwz -m' may be unused by this main - file. It may be referenced from a local scope but in such - case it does not need to be present in .debug_names. */ - if (psymtab == NULL) - continue; - ... - because they have a null partial symtab. - - We can fix this by writing the actual dimension of the CU list, but that still - leaves the dummy CUs out of the CU list. The purpose of having these is to - delimit the end of preceding CUs. - - So, fix this by: - - removing the code that skips the dummy CUs (note that the same change - was done for .gdb_index in commit efba5c2319d '[gdb/symtab] Handle PU - without import in "save gdb-index"'. - - verifying that all units are represented in the CU/TU lists - - using the actual CU list size when writing the dimension of the CU list - (and likewise for the TU list). - - Tested on x86_64-linux with native and target board cc-with-debug-names. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28261 - -2021-09-14 Tom de Vries - - [gdb/testsuite] Generate .debug_aranges in gdb.dwarf2/locexpr-data-member-location.exp - When running test-case gdb.dwarf2/locexpr-data-member-location.exp with target - board cc-with-debug-names, all tests pass but we run into PR28261: - ... - (gdb) run ^M - Starting program: locexpr-data-member-location ^M - warning: Section .debug_names in locexpr-data-member-location-lib.so has \ - abbreviation_table of size 1 vs. written as 37, ignoring .debug_names.^M - ... - - Using a patch that fixes PR28261, the warning is gone, but we run into: - ... - FAIL: gdb.dwarf2/locexpr-data-member-location.exp: step into foo - ... - - This is due a missing .debug_aranges contribution for the CU declared in - gdb.dwarf2/locexpr-data-member-location.exp. - - Fix this by adding the missing .debug_aranges contribution. - - Tested on x86_64-linux. - -2021-09-14 Claudiu Zissulescu - - arc: Fix potential invalid pointer access when fixing got symbols. - When statically linking, it can arrive to an undefined weak symbol of - which its value cannot be determined. However, we are having pieces of - code which doesn't take this situation into account, leading to access - a structure which may not be initialized. Fix this situation and add a - test. - - bfd/ - xxxx-xx-xx Cupertino Miranda - Claudiu Zissulescu - - * arc-got.h (arc_static_sym_data): New structure. - (get_static_sym_data): New function. - (relocate_fix_got_relocs_for_got_info): Move the computation fo - symbol value and section to above introduced function, and use - this new function. - - ld/testsuite/ - xxxx-xx-xx Claudiu Zissulescu - - * ld-arc/got-weak.d: New file. - * ld-arc/got-weak.s: Likewise. - - - fix - -2021-09-14 Mike Frysinger - - sim: bfin: add support for SDL2 - This probably should have been ported long ago, but better late than - never. We keep support for both versions for now since both projects - tend to have long lifetimes. Maybe consider dropping SDL1 in another - ten years. - -2021-09-14 GDB Administrator - - Automatic date update in version.in - -2021-09-14 Tom Tromey - - Remove use of __CYGNUSCLIB__ - I found a check of __CYGNUSCLIB__ in dbxread.c. I think this is dead - code. This patch removes it. - -2021-09-13 Tom de Vries - - [gdb/testsuite] Check for valid test name - When running gdb.base/batch-exit-status.exp I noticed that the test name - contains a newline: - ... - PASS: gdb.base/batch-exit-status.exp: : No such file or directory\.^M - : No such file or directory\.: [lindex $result 2] == 0 - ... - - Check for this in ::CheckTestNames::check, such that we have a warning: - ... - PASS: gdb.base/batch-exit-status.exp: : No such file or directory\.^M - : No such file or directory\.: [lindex $result 2] == 0 - WARNING: Newline in test name - ... - - Tested on x86_64-linux. - -2021-09-13 Tom de Vries - - [gdb/tdep] Fix exec check in gdb_print_insn_arm - With a gdb build with --enable-targets=all we run into a KFAIL: - ... - KFAIL: gdb.gdb/unittest.exp: executable loaded: maintenance selftest, \ - failed none (PRMS: gdb/27891) - ... - due to: - ... - Running selftest print_one_insn.^M - Self test failed: arch armv8.1-m.main: self-test failed at \ - disasm-selftests.c:165^M - ... - - The test fails because we expect disassembling of one arm insn to consume 4 - bytes and produce (using verbose = true in disasm-selftests.c): - ... - arm mov r0, #0 - ... - but instead the disassembler uses thumb mode and only consumes 2 - bytes and produces: - ... - arm movs r0, r0 - ... - - The failure does not show up in the "no executable loaded" variant because - this code in gdb_print_insn_arm isn't triggered: - ... - if (current_program_space->exec_bfd () != NULL) - info->flags |= USER_SPECIFIED_MACHINE_TYPE; - ... - and consequently we do this in print_insn: - ... - if ((info->flags & USER_SPECIFIED_MACHINE_TYPE) == 0) - info->mach = bfd_mach_arm_unknown; - ... - and don't set force_thumb to true in select_arm_features. - - The code in gdb_print_insn_arm makes the assumption that the disassembly - architecture matches the exec architecture, which in this case is incorrect, - because the exec architecture is x86_64, and the disassembly architecture is - armv8.1-m.main. Fix that by explicitly checking it: - ... - if (current_program_space->exec_bfd () != NULL - && (current_program_space->exec_bfd ()->arch_info - == gdbarch_bfd_arch_info (gdbarch))) - ... - - This fixes the print_one_insn failure, so remove the KFAIL. - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=27891 - -2021-09-13 Tom de Vries - - [gdb/tdep] Reset force_thumb in parse_arm_disassembler_options - With a gdb build with --enable-targets=all, we have 2 arch-specific failures - in selftest print_one_insn: - ... - $ gdb -q -batch a.out -ex "maint selftest print_one_insn" 2>&1 \ - | grep "Self test failed: arch " - Self test failed: arch armv8.1-m.main: self-test failed at \ - disasm-selftests.c:165 - Self test failed: arch arm_any: self-test failed at disasm-selftests.c:165 - $ - ... - - During the first failed test, force_thumb is set to true, and remains so until - and during the second test, which causes the second failure. - - Fix this by resetting force_thumb to false in parse_arm_disassembler_options, - such that we get just one failure: - ... - $ gdb -q -batch a.out -ex "maint selftest print_one_insn" 2>&1 \ - | grep "Self test failed: arch " - Self test failed: arch armv8.1-m.main: self-test failed at \ - disasm-selftests.c:165 - $ - ... - - Tested on x86_64-linux. - -2021-09-13 Tom Tromey - - Fix no-Python build - A build without Python will currently fail, because - selftests::test_python uses gdb_python_initialized, which is only - conditionally defined. - - This patch fixes the build by making test_python also be conditionally - defined. I chose this approach because the selftest will fail if - Python is not enabled, so it didn't seem useful to leave it defined. - -2021-09-13 Nelson Chu - - RISC-V: Update the assembler insn testcase. - Since the 0x57 is preserved for the vadd.vv instruction in the integration - branch, remove it to make sure the testcase can work. - - gas/ - * testsuite/gas/riscv/insn.d: Remove 0x57 since it is preserved - for vadd.vv instruction. - * testsuite/gas/riscv/insn.s: Likewise. - -2021-09-13 Jan Beulich - - MIPS: don't use get_symbol_name() for section parsing. With s_change_section() later calling obj_elf_section(), it seems better to pre-parse the section name by the same function that will be used there. This way no differences in what is accepted will result. - gas * config/tc-mips.c (s_change_section): Use obj_elf_section_name to - parse the section name. - - ia64: don't use get_symbol_name() for section parsing. With cross_section() later calling obj_elf_section(), it seems better to pre-parse the section name by the same function that will be used there. This way no differences in what is accepted will result. - gas * config/tc-ia64.c (cross_section): Use obj_elf_section_name to - parse the section name. - -2021-09-13 Tom de Vries - - [gdb/testsuite] Fix gdb.gdb/selftest.exp - With a gdb build with CFLAGS "-O2 -g -flto=auto", I run into: - ... - #7 gdb_main (args=0x7fffffffd220) at src/gdb/main.c:1368^M - #8 main (argc=, argv=) at src/gdb/gdb.c:32^M - (gdb) FAIL: gdb.gdb/selftest.exp: backtrace through signal handler - ... - which means that this regexp in proc test_with_self fails: - ... - -re "#0.*(read|poll).*in main \\(.*\\) at .*gdb\\.c.*$gdb_prompt $" { - ... - - The problem is that gdb_main has been inlined into main, and consequently the - backtrace uses: - ... - #x ... - ... - instead of - ... - #x
in ... - ... - - Fix this by updating the regexp to not require "in" before " main". - - Tested on x86_64-linux. - -2021-09-13 Alan Modra - - Re: Deprecate a.out support for NetBSD targets - * config.bfd: Correct m68-*-*bsd* obsolete target match. - -2021-09-13 Tom de Vries - - [gdb/testsuite] Fix test name in gdb.base/batch-exit-status.exp - When running gdb.base/batch-exit-status.exp I noticed that the test name - contains a newline: - ... - PASS: gdb.base/batch-exit-status.exp: : No such file or directory\.^M - : No such file or directory\.: [lindex $result 2] == 0 - ... - - The mistake is that I passed an output regexp argument to a parameter - interpreted as testname prefix. Fix this by passing a testname prefix - instead. - - Add support for checking output, to be able to handle the output regexp - argument. - - Tested on x86_64-linux. - -2021-09-13 GDB Administrator - - Automatic date update in version.in - -2021-09-12 Tom de Vries - - [gdb/testsuite] Set sysroot earlier in local-board.exp - When running test-case gdb.base/batch-exit-status.exp for native, it passes. - But with target board cc-with-debug-names, we run into (added missing double - quotes for clarity): - ... - builtin_spawn $build/gdb/testsuite/../../gdb/gdb -nw -nx \ - -data-directory $build/gdb/testsuite/../data-directory \ - -iex "set height 0" -iex "set width 0" -ex "set sysroot" -batch ""^M - : No such file or directory.^M - PASS: gdb.base/batch-exit-status.exp: \ - : No such file or directory\.: [lindex $result 2] == 0 - FAIL: gdb.base/batch-exit-status.exp: \ - : No such file or directory\.: [lindex $result 3] == $expect_status - ... - - The difference between the passing and failing case is that with native we - have (leaving out set height/width for brevity): - ... - $ gdb -batch ""; echo $? - : No such file or directory. - 1 - ... - and with target board cc-with-debug-names: - ... - $ gdb -ex "set sysroot" -batch ""; echo $? - : No such file or directory. - 0 - ... - - The difference is expected. GDB returns the exit status of the last executed - command. In the former case that's 'file ""', which fails. In the latter case, - that's 'set sysroot', which succeeds. - - Fix this by setting sysroot using -iex instead of -ex in local-board.exp, such - that we have the expected: - ... - $ gdb -iex "set sysroot" -batch ""; echo $? - : No such file or directory. - 1 - ... - - Tested on x86_64-linux. - -2021-09-12 GDB Administrator - - Automatic date update in version.in - -2021-09-11 Mike Frysinger - - sim: run: change help short option to -h - It's unclear why -H was picked over the more standard -h, but since - -h is still not used, just change -H to -h to match pretty much every - other tool in the sourceware tree. - -2021-09-11 GDB Administrator - - Automatic date update in version.in - -2021-09-10 Tom de Vries - - [gdb/testsuite] Reimplement gdb.gdb/python-selftest.exp as unittest - The test-case gdb.gdb/python-selftest.exp: - - patches the gdb_python_initialized variable in gdb to 0 - - checks that the output of a python command is "Python not initialized" - - Reimplement gdb.gdb/python-selftest.exp as unittest, using: - - execute_command_to_string to capture the output - - try/catch to catch the "Python not initialized" exception. - - Tested on x86_64-linux. - -2021-09-10 Tom de Vries - - [gdb/testsuite] Fix DUPLICATE in gdb.base/global-var-nested-by-dso.exp - Fix DUPLICATE in gdb.base/global-var-nested-by-dso.exp by naming commands more - uniquely. - -2021-09-10 Tom de Vries - - [gdb/testsuite] Fix DUPLICATE in gdb.base/skip-solib.exp - Fix DUPLICATE in gdb.base/skip-solib.exp by using with_test_prefix. - - Also fix indentation style and long lines, remove outdated question/answer - bits, and use multi_line. - -2021-09-10 Tom de Vries - - [gdb/testsuite] Fix handling of nr_args < 3 in mi_gdb_test - The documentation of mi_gdb_test states that the command, pattern and message - arguments are mandatory: - ... - # mi_gdb_test COMMAND PATTERN MESSAGE [IPATTERN] -- send a command to gdb; - # test the result. - ... - - However, this is not checked, and when mi_gdb_test is called with less than 3 - arguments, it passes or fails silently. - - Fix this by using the following semantics: - - if there are 1 or 2 arguments, use the command as the message. - - if there is 1 argument, use ".*" as the pattern. - - if there are no or too much arguments, error out. - - Fix a PATH issue in gdb.mi/mi-logging.exp, introduced by using the command as - message. Fix a few other trivial-looking FAILs. - - There are 11 less trivial-looking FAILs left in gdb.mi in test-cases: - - mi-nsmoribund.exp - - mi-breakpoint-changed.exp - - mi-break.exp. - - Tested on x86_64-linux. - -2021-09-10 Tom de Vries - - [gdb/testsuite] Add string_list_to_regexp - A regexp pattern with escapes like this is hard to read: - ... - set re "~\"\[$\]$decimal = 1\\\\n\"\r\n\\^done" - ... - - We can make it more readable by spacing out parts (which allows us to also use - the curly braces where that's convenient): - ... - set re [list "~" {"} {[$]} $decimal " = 1" "\\\\" "n" {"} "\r\n" "\\^" "done"] - set re [join $re ""] - ... - or by using string_to_regexp: - ... - set re [list \ - [string_to_regexp {~"$}] \ - $decimal \ - [string_to_regexp " = 1\\n\"\r\n^done"]] - set re [join $re ""] - ... - Note: we have to avoid applying string_to_list to decimal, which is already a - regexp. - - Add a proc string_list_to_regexp to make it easy to do both: - ... - set re [list \ - [string_list_to_regexp ~ {"} $] \ - $decimal \ - [string_list_to_regexp " = 1" \\ n {"} \r\n ^ done]] - ... - - Also add a test-case gdb.testsuite/string_to_regexp.exp. - -2021-09-10 Tom de Vries - - [gdb/testsuite] Handle unrecognized command line option in gdb_compile_test - When running the gdb testsuite with gnatmake-4.8, I get many fails of the - following form: - ... - gcc: error: unrecognized command line option '-fgnat-encodings=all'^M - gnatmake: "gdb.ada/O2_float_param/foo.adb" compilation error^M - compiler exited with status 1 - compilation failed: gcc ... gdb.ada/O2_float_param/foo.adb - gcc: error: unrecognized command line option '-fgnat-encodings=all' - gnatmake: "gdb.ada/O2_float_param/foo.adb" compilation error - FAIL: gdb.ada/O2_float_param.exp: scenario=all: compilation foo.adb - ... - - Fix this by marking the test unsupported instead, such that we have: - ... - UNSUPPORTED: gdb.ada/O2_float_param.exp: scenario=all: compilation foo.adb \ - (unsupported option '-fgnat-encodings=all') - ... - - Tested on x86_64-linux. - -2021-09-10 Alan Modra - - PowerPC, sanity check r_offset in relocate_section - * elf32-ppc.c (offset_in_range): New function. - (ppc_elf_vle_split16): Sanity check r_offset before accessing - section contents. Return status. - (ppc_elf_relocate_section): Sanity check r_offset before - accessing section contents. Don't segfault on NULL howto. - - Re: gas: Use the directory name in .file 0 - PR gas/28266 - * testsuite/gas/elf/dwarf-5-file0-2.s: Use %object rather than - @object, .4byte instead of .long, and .asciz instead of .string. - -2021-09-10 Mike Frysinger - - etc: switch to automake - There's no content in here currently, so switching to automake is - pretty easy with a stub file. - - etc: rename configure.in to configure.ac - The .in name has been deprecated for a long time in favor of .ac. - -2021-09-10 H.J. Lu - - gas: Use the directory name in .file 0 - DWARF5 allows .file 0 to take an optional directory name. Set the entry - 0 of the directory table to the directory name in .file 0. - - PR gas/28266 - * dwarf2dbg.c (get_directory_table_entry): Add an argument for - the directory name in .file 0 and use it, instead of PWD. - (allocate_filenum): Pass NULL to get_directory_table_entry. - (allocate_filename_to_slot): Pass the incoming dirname to - get_directory_table_entry. - * testsuite/gas/elf/dwarf-5-file0-2.d: New file. - * testsuite/gas/elf/dwarf-5-file0-2.s: Likewise. - * testsuite/gas/elf/elf.exp: Run dwarf-5-file0-2. - -2021-09-10 GDB Administrator - - Automatic date update in version.in - -2021-09-09 Yoshinori Sato - - gdb: Enable target rx-*-*linux. - I added rx-*-linux in binutils few yaers ago. - But missing this changes, - -2021-09-09 Tom de Vries - - [gdb/testsuite] Fix gdb.base/coredump-filter-build-id.exp with older eu-unstrip - On openSUSE Leap 42.3 with eu-unstrip 0.158, we run into: - ... - (gdb) PASS: gdb.base/coredump-filter-build-id.exp: save corefile - First line of eu-unstrip: \ - 0x400000+0x202000 f4ae8502bd6a14770182382316bc595e9dc6f08b@0x400284 - - [exe] - FAIL: gdb.base/coredump-filter-build-id.exp: gcore dumped mapping with build-id - ... - - The test expects an actual file name instead of '[exe]', but that only got - introduced with eu-unstrip 0.161. Before it printed '[exe]' or '[pie]'. - - Fix this by updating the regexp. - - Tested on x86_64-linux. - -2021-09-09 Tom de Vries - - [gdb/testsuite] Fix various issues in gdb.mi/mi-sym-info.exp - I noticed this failure in gdb.mi/mi-sym-info.exp with gcc-4.8: - ... - FAIL: gdb.mi/mi-sym-info.exp: -symbol-info-functions --max-results 1 \ - (unexpected output) - ... - due to function f2 instead of f3 being listed. - - AFAICT, this is caused by a difference in debug info: - ... - $ readelf -wi outputs/gdb.mi/mi-sym-info/mi-sym-info1.o \ - | egrep "DW_AT_name.*: f[1-3]" - <72> DW_AT_name : f1 - DW_AT_name : f2 - DW_AT_name : f3 - ... - vs: - ... - $ readelf -wi outputs/gdb.mi/mi-sym-info/mi-sym-info1.o \ - | egrep "DW_AT_name.*: f[1-3]" - DW_AT_name : f3 - <123> DW_AT_name : f2 - <152> DW_AT_name : f1 - ... - and the command documentation does not mention an imposed order, so fix this - by allowing f2 as well. - - Doing this fix, it made sense to do a refactoring of adding f2_re and f3_re - variables, in order to write (?:$f2_re|$f3_re), and I applied the same pattern - overall. - - Furthermore, I found a silent FAIL due to calling mi_gdb_proc with 2 args, fix - by updating the regexp. - - Then I ran with clang and found another FAIL, fix by updating the regexp. - - Tested on x86_64-linux with gcc-4.8.5, gcc-7.5.0, gcc-11.2.1, clang-7.0.1 and - clang-12.0.1. - -2021-09-09 Tom de Vries - - [gdb/testsuite] Reimplement gdb.gdb/complaints.exp as unittest - When building gdb with "-Wall -O2 -g -flto=auto", I run into: - ... - (gdb) call clear_complaints()^M - No symbol "clear_complaints" in current context.^M - (gdb) FAIL: gdb.gdb/complaints.exp: clear complaints - ... - - The problem is that lto has optimized away the clear_complaints function - and consequently the selftest doesn't work. - - Fix this by reimplementing the selftest as a unit test. - - Factor out two new functions: - - void - execute_fn_to_ui_file (struct ui_file *file, std::function fn); - - std::string - execute_fn_to_string (std::function fn, bool term_out); - and use the latter to capture the complaints output. - - Tested on x86_64-linux. - -2021-09-09 Andrew Burgess - - gdb/python: remove all uses of Py_TPFLAGS_HAVE_ITER - Python 2 has a bit flag Py_TPFLAGS_HAVE_ITER which can be passed as - part of the tp_flags field when defining a new object type. This flag - is not defined in Python 3 and so we define it to 0 in - python-internal.h (when IS_PY3K is defined). - - The meaning of this flag is that the object has the fields tp_iter and - tp_iternext. Note the use of "has" here, the flag says nothing about - the values in those fields, just that the type object has the fields. - - In early versions of Python 2 these fields were no part of the - PyTypeObject struct, they were added in version 2.2 (see - https://docs.python.org/release/2.3/api/type-structs.html). And so, - there could be a some code compiled out there which has a PyTypeObject - structure within it that doesn't even have the tp_iter and tp_iternext - fields, attempting to access these fields would be undefined - behaviour. - - And so Python added the Py_TPFLAGS_HAVE_ITER flag. If the flag is - present then Python is free to access the tp_iter and tp_iternext - fields. - - If we consider GDB then we always assume that the tp_iter and - tp_iternext fields are part of PyTypeObject. If someone was crazy - enough to try and compile GDB against Python 2.1 then we'd get lots of - build errors saying that we were passing too many fields when - initializing PyTypeObject structures. And so, I claim, we can be sure - that GDB will always be compiled with a version of Python that has the - tp_iter and tp_iternext fields in PyTypeObject. - - Next we can look at the Py_TPFLAGS_DEFAULT flag. In Python 2, each - time additional fields are added to PyTypeObject a new Py_TPFLAGS_* - flag would be defined to indicate whether those flags are present or - not. And, those new flags would be added to Py_TPFLAGS_DEFAULT. And - so, in the latest version of Python 2 the Py_TPFLAGS_DEFAULT flag - includes Py_TPFLAGS_HAVE_ITER (see - https://docs.python.org/2.7/c-api/typeobj.html). - - In GDB we pass Py_TPFLAGS_DEFAULT as part of the tp_flags for all - objects we define. - - And so, in this commit, I propose to remove all uses of - Py_TPFLAGS_HAVE_ITER from GDB, it's simply not needed. - - There should be no user visible changes after this commit. - -2021-09-09 Mike Frysinger - - sim: accept -EB/-EL short options - Many GNU tools accept -EB/-EL as short options for selecting big & - little endian modes. While the sim has an -E option, it requires - spelling out "big" and "little". Adding support for -EB & -EL is - thus quite trivial, so lets round it out to be less annoying. - - sim: ppc: drop support for std-config.h overrides - Only the ppc arch supports this kind of source file override logic. - All the others expose knobs via configure flags, and for some of - these, the ppc code does as well. For others, it doesn't make sense - to ever change them. Since it's unlikely anyone is using this, drop - it all to simplify the code (and to get us a little closer to the - common sim code). - - sim: ppc: enable use of gnulib - All other sim arches are using this now, so finish up the logic in - the ppc arch to enable gnulib usage here too. - - sim: drop old O_NDELAY & FNBLOCK support - We use these older names inconsistently in the sim codebase, and time - has moved on long ago, so drop support for these non-standard names. - POSIX provides O_NONBLOCK for us, so use it everywhere. - -2021-09-09 Mike Frysinger - - sim: dv-sockser: enable for mingw targets too - We have enough functionality from gnulib now to build sockser on - all platforms. - - Non-blocking I/O is supported when F_GETFL/F_SETFL are unavailable, - but we can address that in a follow up commit. This mirrors what - is done in other places in the sim already. - -2021-09-09 Mike Frysinger - - sim: cgen: workaround Windows VOID define - The cgen framework provides a "VOID" type for code to use, but this - defines ends up conflicting with the standard Windows VOID define. - Since they actually define to the same thing ("void"), undef it here - to fix the Windows build. - - We might want to reconsider the need for "VOID" in cgen, but that - will take larger discussion & coordination with the cgen project. - -2021-09-09 Mike Frysinger - - sim: dv-sockser: move sim-main.h include after system includes - The sim-main.h header is a bit of a dumping ground. Every arch can - (and many do) define all sorts of weird & common names that end up - conflicting with system headers. So including it before the system - headers sets us up for pain. v850 is a good example of this -- when - building for mingw, we see weird failures: - - $ i686-w64-mingw32-gcc ... -c -o dv-sockser.o ../../../../sim/v850/../common/dv-sockser.c - In file included from ../../../../sim/v850/sim-main.h:11, - from ../../../../sim/v850/../common/dv-sockser.c:24: - ../../../../sim/v850/../common/sim-base.h:97:32: error: expected ')' before '->' token - 97 | # define STATE_CPU(sd, n) ((sd)->cpu[0]) - | ^~ - - While gcc is unhelpful at first, running it through the preprocessor - by hand shows more details: - - $ i686-w64-mingw32-gcc ... -E -dD -o dv-sockser.i ../../../../sim/v850/../common/dv-sockser.c - $ i686-w64-mingw32-gcc -c dv-sockser.i - In file included from /usr/i686-w64-mingw32/usr/include/minwindef.h:163, - from /usr/i686-w64-mingw32/usr/include/windef.h:9, - from /usr/i686-w64-mingw32/usr/include/windows.h:69, - from /usr/i686-w64-mingw32/usr/include/winsock2.h:23, - from ../../gnulib/import/sys/socket.h:684, - from ../../gnulib/import/netinet/in.h:43, - from ../../../../sim/v850/../common/dv-sockser.c:39: - /usr/i686-w64-mingw32/usr/include/winnt.h:4803:25: error: expected ')' before '->' token - 4803 | DWORD State; - | ^ - | ) - - This is because v850 sets up this common name: - - All of this needs cleaning up someday, but since the dv-sockser code - definitely should be fixed in this way, lets do that now and unblock - the v850 code. - -2021-09-09 Mike Frysinger - - sim: mips: delete unused PSIZE define - It's unclear what this define is for as it appears to be unused, and - has never been used in the history of the mips sim. Delete it to tidy - up, and to fix build errors for Windows targets that have a standard - "PSIZE" struct in their system headers. This doesn't show up yet as - most sim files don't include many system headers, but enabling sockser - code for mingw uncovers the conflict. - - Unfortunately the error produced by gcc is inscrutable, but running - it through the preprocessor manually manages to provide a pointer to - the underlying issue. - - $ i686-w64-mingw32-gcc ... -c -o dv-sockser.o ../../../../sim/mips/../common/dv-sockser.c - : error: expected identifier or '(' before numeric constant - In file included from /usr/i686-w64-mingw32/usr/include/windows.h:71, - from /usr/i686-w64-mingw32/usr/include/winsock2.h:23, - from ../../gnulib/import/sys/socket.h:684, - from ../../gnulib/import/netinet/in.h:43, - from ../../../../sim/mips/../common/dv-sockser.c:39: - /usr/i686-w64-mingw32/usr/include/wingdi.h:2934:59: error: unknown type name 'LPSIZE'; did you mean 'LPSIZEL'? - 2934 | WINGDIAPI WINBOOL WINAPI GetAspectRatioFilterEx(HDC hdc,LPSIZE lpsize); - | ^~~~~~ - | LPSIZEL - ... - - $ i686-w64-mingw32-gcc ... -E -dD -o dv-sockser.i ../../../../sim/mips/../common/dv-sockser.c - $ i686-w64-mingw32-gcc -c dv-sockser.i - In file included from /usr/i686-w64-mingw32/usr/include/windows.h:69, - from /usr/i686-w64-mingw32/usr/include/winsock2.h:23, - from ../../gnulib/import/sys/socket.h:684, - from ../../gnulib/import/netinet/in.h:43, - from ../../../../sim/mips/../common/dv-sockser.c:39: - /usr/i686-w64-mingw32/usr/include/windef.h:104:9: error: expected identifier or '(' before numeric constant - 104 | } SIZE,*PSIZE,*LPSIZE; - | ^~ - -2021-09-09 Mike Frysinger - - sim: ppc: switch to common warning flags - Now that the ppc code has been cleaned up enough to use the same set - of warning flags as the common code, delete the ppc-specific configure - logic so we can leverage what the common code already defined for us. - -2021-09-09 Tom de Vries - - sim: ppc: enable -Wpointer-sign warnings - When compiling with --enable-werror and CFLAGS="-O0 -g -Wall", we run into: - ... - src/sim/ppc/hw_memory.c: In function 'hw_memory_init_address': - src/sim/ppc/hw_memory.c:204:7: error: pointer targets in passing argument 4 \ - of 'device_find_integer_array_property' differ in signedness \ - [-Werror=pointer-sign] - &new_chunk->size); - ^ - ... - - Fix these by adding an explicit pointer cast. It's a bit ugly to use APIs - based on signed integers to read out unsigned values, but in practice, this - is par for the course in the ppc code. - - We already use signed APIs and assign the result to unsigned values a lot: - see how device_find_integer_property returns a signed integer (cell), but - then assign it to unsigned types. The array APIs are not used that often - which is why we don't see many warnings, and we disable warnings when we - assign signed integers to unsigned integers in general. - - The dtc/libfdt project (which is the standard in other projects) processes - the fdt blob as a series of bytes without any type information. Typing is - left to the caller. They have core APIs that read/write bytes, and a few - helper functions to cast/convert those bytes to the right value (e.g. u32). - In this ppc sim code, the core APIs use signed integers, and the callers - convert to unsigned, usually implicitly. - - We could add some core APIs to the ppc sim that deal with raw bytes and then - add some helpers to convert to the right type, but that seems like a lot of - lifting for what boils down to a cast, and is effectively equivalent to all - the implicit assignments we use elsewhere. Long term, a lot of the ppc code - should either get converted to existing sim common code, or we should stand - up proper APIs in the common code first, or use standard libraries to do all - the processing (e.g. libfdt). Either way, this device.c code would all get - deleted, and callers (like these hw_*.c files) would get converted. Which - is also why we go with a cast rather new (but largely unused) APIs. - -2021-09-09 Mike Frysinger - - sim: ppc: enable -Wmissing-declarations & -Wmissing-prototypes - This aligns with common code which already uses this flag. We have - to add another local prototype to fix the failure, and add another - local decl for the SIM_DESC type. Unwinding these will require a - lot more work & conversions in the process, so going with the decl - for now unblocks the warning unification. - -2021-09-09 Mike Frysinger - - sim: microblaze: replace custom basic types with common ones - The basic "byte" type conflicts with Windows headers, and we already - have common types that provide the right sizes. So replace these with - the common ones to avoid issues. - - CC dv-sockser.o - In file included from /usr/i686-w64-mingw32/usr/include/wtypes.h:8, - from /usr/i686-w64-mingw32/usr/include/winscard.h:10, - from /usr/i686-w64-mingw32/usr/include/windows.h:97, - from /usr/i686-w64-mingw32/usr/include/winsock2.h:23, - from ../../gnulib/import/sys/socket.h:684, - from ../../gnulib/import/netinet/in.h:43, - from .../build/sim/../../../sim/microblaze/../common/dv-sockser.c:39: - /usr/i686-w64-mingw32/usr/include/rpcndr.h:63:25: error: conflicting types for 'byte'; have 'unsigned char' - 63 | typedef unsigned char byte; - | ^~~~ - In file included from .../buildsim/../../../sim/microblaze/sim-main.h:21, - from .../buildsim/../../../sim/microblaze/../common/dv-sockser.c:24: - .../buildsim/../../../sim/microblaze/microblaze.h:94:25: note: previous declaration of 'byte' with type 'byte' {aka 'char'} - 94 | typedef char byte; - | ^~~~ - make: *** [Makefile:513: dv-sockser.o] Error 1 - -2021-09-09 Jim Wilson - - RISC-V: Pretty print values formed with lui and addiw. - The disassembler has support to pretty print values created by an lui/addi - pair, but there is no support for addiw. There is also no support for - c.addi and c.addiw. This patch extends the pretty printing support to - handle these 3 instructions in addition to addi. Existing testcases serve - as tests for the new feature. - - opcodes/ - * riscv-dis.c (maybe_print_address): New arg wide. Sign extend when - wide is true. - (print_insn_args): Fix calls to maybe_print_address. Add checks for - c.addi, c.addiw, and addiw, and call maybe_print_address for them. - - gas/ - * testsuite/gas/riscv/insn.d: Update for disassembler change. - * testsuite/gas/li32.d, testsuite/gas/li64.d: Likwise. - * testsuite/gas/lla64.d: Likewise. - -2021-09-09 Mike Frysinger - - sim: ppc: align format string settings with common code - This copies logic used in the common sim warning configure code to fix - build errors for mingw targets. Turning format warnings on triggers - a failure in the debug.c file, so apply a minor fix at the same time. - - sim: ppc: drop unnecessary config includes - This file is compiled for the --host & --build system which leads to - including the configure generated config.h in both environments. - This obviously doesn't work when the two targets don't look alike at - all and can cause build failures here (e.g. a mingw host & a linux - build). Since we don't actually need any config settings in this - very simple file, drop the includes entirely. - -2021-09-09 GDB Administrator - - Automatic date update in version.in - -2021-09-08 Mike Frysinger - - gnulib: import various network functions - Some sim ports use these to provide networking functionality via the - dv-sockser module or via direct emulation for a few ports. - - Gdb seems to build just fine still too. - -2021-09-08 Tom Tromey - - Fix unit test build on Windows - Like Tom de Vries' earlier patch to fix the no-CXX_STD_THREAD case in - maint.c, this patch fixes a similar problem in - parallel-for-selftests.c. This fixes a build failure on Windows. - -2021-09-08 Alan Modra - - PowerPC64, sanity check r_offset in relocate_section - This hardens the powerpc64 linker code transformations. - - * elf64-ppc.c (is_8byte_reloc, offset_in_range): New functions. - (ppc64_elf_relocate_section): Sanity check r_offset before - accessing section contents for various code transformations. - -2021-09-08 Alan Modra - - PowerPC64: Avoid useless work on R_PPC64_TPREL34 - _bfd_elf_ppc_at_tprel_transform doesn't handle prefix instructions, - and I'm not inclined to implement code editing for them. - - * elf64-ppc.c (ppc64_elf_relocate_section): Don't attempt tprel - transform for R_PPC64_TPREL34. - -2021-09-08 Andrew Burgess - - gdb: make thread_suspend_state::stop_pc optional - Currently the stop_pc field of thread_suspect_state is a CORE_ADDR and - when we want to indicate that there is no stop_pc available we set - this field back to a special value. - - There are actually two special values used, in post_create_inferior - the stop_pc is set to 0. This is a little unfortunate, there are - plenty of embedded targets where 0 is a valid pc value. The more - common special value for stop_pc though, is set in - thread_info::set_executing, where the value (~(CORE_ADDR) 0) is used. - - This commit changes things so that the stop_pc is instead a - gdb::optional. We can now explicitly reset the field to an - uninitialised state, we also have asserts that we don't read the - stop_pc when its in an uninitialised state (both in - gdbsupport/gdb_optional.h, when compiling with _GLIBCXX_DEBUG - defined, and in thread_info::stop_pc). - - One situation where a thread will not have a stop_pc value is when the - thread is stopped as a consequence of GDB being in all stop mode, and - some other thread stopped at an interesting event. When GDB brings - all the other threads to a stop those other threads will not have a - stop_pc set (thus avoiding an unnecessary read of the pc register). - - Previously, when GDB passed through handle_one (in infrun.c) the - threads executing flag was set to false and the stop_pc field was left - unchanged, i.e. it would (previous) have been left as ~0. - - Now, handle_one leaves the stop_pc with no value. - - This caused a problem when we later try to set these threads running - again, in proceed() we compare the current pc with the cached stop_pc. - If the thread was stopped via handle_one then the stop_pc would have - been left as ~0, and the compare (in proceed) would (likely) fail. - Now however, this compare tries to read the stop_pc when it has no - value and this would trigger an assert. - - To resolve this I've added thread_info::stop_pc_p() which returns true - if the thread has a cached stop_pc. We should only ever call - thread_info::stop_pc() if we know that there is a cached stop_pc, - however, this doesn't mean that every call to thread_info::stop_pc() - needs to be guarded with a call to thread_info::stop_pc_p(), in most - cases we know that the thread we are looking at stopped due to some - interesting event in that thread, and so, we know that the stop_pc is - valid. - - After running the testsuite I've seen no other situations where - stop_pc is read uninitialised. - - There should be no user visible changes after this commit. - -2021-09-08 Tom de Vries - - [gdb/build] Fix build with undefined CXX_STD_THREAD - When building gdb on openSUSE Leap 42.3, we trigger the case that - CXX_STD_THREAD is undefined, and run into: - ... - gdb/maint.c: In function 'void maintenance_show_worker_threads \ - (ui_file*, int, cmd_list_element*, const char*)': - gdb/maint.c:877:14: error: 'gdb::thread_pool' has not been declared - gdb::thread_pool::g_thread_pool->thread_count ()); - ^ - Makefile:1647: recipe for target 'maint.o' failed - make[1]: *** [maint.o] Error 1 - ... - - Fix this by handling the undefined CXX_STD_THREAD case in - maintenance_show_worker_threads, such that we get: - ... - $ gdb -q -batch -ex "maint show worker-thread" - The number of worker threads GDB can use is 0. - ... - - Tested on x86_64-linux. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28312 - -2021-09-08 Mike Frysinger - - sim: update configure target list - Fix sorting of the list, and update the globs to match the list used - in gdb's configure script. - - gdb: cris: enable sim integration - The sim side is already ready to go for cris, so wire it up. - - gdb: aarch64: enable sim integration - The sim side is already ready to go for aarch64, so wire it up. - - gdb: sim: consolidate configure settings - Moving all the sim settings to one section makes it easier to track, - and makes it easier to keep it aligned with the sim target tests. - The gdb logic was duplicating this when handling different OS targets - instead of having a single cpu check. Now it's more obvious that the - sim is tied to a cpu and not related to the OS. - -2021-09-08 GDB Administrator - - Automatic date update in version.in - -2021-09-07 Tom Tromey - - Remove unused declaration from gdbserver/win32-low.h - I noticed that gdbserver/win32-low.h has an unused declaration. This - code was changed a while ago, but this declaration slipped through. - This patch removes it. Tested by rebuilding. - -2021-09-07 Andrew Burgess - - gdb: make use of std::string in utils.c - Replace some of the manual string management (malloc/free) with - std::string when creating commands in utils.c. - - Things are a little bit messy as, creating the prefix commands (using - add_basic_prefix_cmd and add_show_prefix_cmd), doesn't copy the doc - string, while creating the actual set/show commands (using - add_setshow_enum_cmd) does copy the doc string. - - As a result, I have retained the use of xstrprintf when creating the - prefix command doc strings, but switched to using std::string when - creating the actual set/show commands. - - There should be no user visible changes after this commit. - -2021-09-07 Luis Machado - - Revert: [AArch64] MTE corefile support - bfd * elf.c (elfcore_make_memtag_note_section): New function. - (elfcore_grok_note): Handle NT_MEMTAG note types. - - binutils* readelf.c (get_note_type): Handle NT_MEMTAG note types. - - include * elf/common.h (NT_MEMTAG): New constant. - (NT_MEMTAG_TYPE_AARCH_MTE): New constant. - -2021-09-07 Andrew Burgess - - gdb: use bool instead of int in struct internal_problem - Change struct internal_problem (gdb/utils.c) to use bool instead of - int, update the 3 static instances of this structure that we create to - use true/false instead of 1/0. - - I've also updated the comments on struct internal_problem as the - existing comment doesn't seem to be referring to the structure, it - talks about returning something, which doesn't make sense in this - context. - - There should be no user visible changes after this commit. - -2021-09-07 Andrew Burgess - - gdb: make thread_info::executing private - Rename thread_info::executing to thread_info::m_executing, and make it - private. Add a new get/set member functions, and convert GDB to make - use of these. - - The only real change of interest in this patch is in thread.c where I - have deleted the helper function set_executing_thread, and now just - use the new set function thread_info::set_executing. However, the old - helper function set_executing_thread included some code to reset the - thread's stop_pc, so I moved this code into the new function - thread_info::set_executing. However, I don't believe there is - anywhere that this results in a change of behaviour, previously the - executing flag was always set true through a call to - set_executing_thread anyway. - -2021-09-07 Nick Clifton - - Fix an illegal memory access triggered by an atempt to disassemble a corrupt xtensa binary. - PR 28305 - * elf32-xtensa.c (elf_xtensa_do_reloc): Add check for put of range - reloc. - -2021-09-07 Andrew Burgess - - gdb/python: new function to add values into GDB's history - The guile API has (history-append! ) to add values into GDB's - history list. There is currently no equivalent in the Python API. - - This commit adds gdb.add_history() to the Python API, this - function takes a gdb.Value (or anything that can be passed to - the constructor of gdb.Value), and adds the value it represents to - GDB's history list. The index of the newly added value is returned. - -2021-09-07 Nick Clifton - - Fix illegal memory access triggered by an attempt to disassemble a corrupt RISC-V binary. - PR 28303 - * elfxx-riscv.c (riscv_elf_add_sub_reloc): Add check for out of - range relocs. - -2021-09-07 Tom de Vries - - [gdb/testsuite] Handle internal-error in gdb_unload - When reverting commit 5a20fadc841 and using gdb_unload instead of runto "bar" - to trigger the internal-error in test-case - gdb.dwarf2/locexpr-data-member-location.exp, we run into: - ... - ERROR: couldn't unload file in $gdb (timeout). - ... - and the test-case takes about 1 minute. - - Fix this by handling internal-error in gdb_unload, such that we have: - ... - ERROR: Couldn't unload file in $gdb (GDB internal error). - ERROR: Could not resync from internal error (eof) - ... - within 2 seconds. - - Tested on x86_64-linux. - -2021-09-07 Alan Modra - - PR28307, segfault in ppc64_elf_toc64_reloc - Adds missing bfd_reloc_offset_in_range checks to various relocation - special_functions. - - PR 28307 - * elf32-ppc.c (ppc_elf_addr16_ha_reloc): Range check reloc offset. - * elf64-ppc.c (ppc64_elf_ha_reloc, ppc64_elf_brtaken_reloc): Likewise. - (ppc64_elf_toc64_reloc, ppc64_elf_prefix_reloc): Likewise. - -2021-09-07 GDB Administrator - - Automatic date update in version.in - -2021-09-07 Tom de Vries - - [gdb/testsuite] Handle internal-error in gdb_run_cmd - When reverting commit 5a20fadc841 the test-case - gdb.dwarf2/locexpr-data-member-location.exp fails like this: - ... - FAIL: gdb.dwarf2/locexpr-data-member-location.exp: running to bar in runto \ - (GDB internal error) - ERROR: Could not resync from internal error (eof) - ... - and takes 1 minute to run. - - The long running time is caused by running into a timeout in gdb_run_cmd, at - this point: - ... - (gdb) run ^M - The program being debugged has been started already.^M - Start it from the beginning? (y or n) y^M - /home/vries/gdb_versions/devel/src/gdb/gdbtypes.c:5583: internal-error: \ - Unexpected type field location kind: 4^M - A problem internal to GDB has been detected,^M - further debugging may prove unreliable.^M - Quit this debugging session? (y or n) - ... - - Fix this by detecting the internal-error in gdb_run_cmd. We don't handle it - in gdb_run_cmd, but stash the gdb output back into the buffer using - -notransfer, and let the caller proc runto deal with it. - - After the fix, the test-case just takes 2 seconds. - - Tested on x86_64-linux. - -2021-09-06 Lancelot SIX - - gdb: rename gdb/testsuite/gdb.arch/riscv64-unwind-prologue-with-ld-lw.c - A previous commit added the - gdb.arch/riscv64-unwind-prologue-with-ld-lw.exp testcase, but one of its - associated file was named after a previous version of the test. - - This commit fixes this and makes sure that all the files linked to this - testcase share the same prefix in the name. - - Tested on riscv64 GNU/Linux. - -2021-09-06 Tom de Vries - - [gdb/testsuite] Handle eof in gdb_internal_error_resync - Before commit 5a20fadc841 the test-case - gdb.dwarf2/locexpr-data-member-location.exp fails like this: - ... - FAIL: gdb.dwarf2/locexpr-data-member-location.exp: running to bar in runto \ - (GDB internal error) - ERROR: : spawn id exp9 not open - while executing - "expect { - -i exp9 -timeout 10 - -re "Quit this debugging session\\? \\(y or n\\) $" { - send_gdb "n\n" answer - incr count - } - -re "Create ..." - ("uplevel" body line 1) - invoked from within - "uplevel $body" NONE : spawn id exp9 not open - ERROR: Could not resync from internal error (timeout) - ... - - Fix the: - ... - ERROR: : spawn id exp9 not open - ... - by handling eof in gdb_internal_error_resync, such that we have instead: - ... - FAIL: gdb.dwarf2/locexpr-data-member-location.exp: running to bar in runto \ - (GDB internal error) - ERROR: Could not resync from internal error (eof) - ... - - Tested on x86_64-linux. - -2021-09-06 Tom Tromey - - Remove some complaints.h includes - There are a few includes of complaints.h that aren't necessary. This - patch removes them. Tested by rebuilding. - -2021-09-06 Nick Clifton - - Fix an illegal memory access triggered by disassembling corrupt s390x binaries. - PR 28304 - * elfxx-score7.c (score_elf_gprel15_reloc): If there is no output bfd - treat the reloc as undefined. - - Fix potential use on an uninitialised vairable in the MCore assembler. - - Fix potential uninitialised variable in microblaze assembler code. - -2021-09-06 Yinjun Zhang - - Add a sanity check to the init_nfp6000_mecsr_sec() function in the NFP disassembler. - -2021-09-06 Alexandra Hájková - - gdbtypes.c: Add the case for FIELD_LOC_KIND_DWARF_BLOCK - The case for FIELD_LOC_KIND_DWARF_BLOCK was missing for - switch TYPE_FIELD_LOC_KIND. Thas caused an internal-error - under some circumstances. - - Fixes bug 28030. - -2021-09-06 GDB Administrator - - Automatic date update in version.in - -2021-09-05 GDB Administrator - - Automatic date update in version.in - -2021-09-04 Tom de Vries - - [gdb/testsuite] Check avx support in gdb.arch/amd64-disp-step-avx.exp - On a machine on Open Build Service I'm running into a SIGILL for test-case - gdb.arch/amd64-disp-step-avx.exp: - ... - Program received signal SIGILL, Illegal instruction.^M - test_rip_vex2 () at gdb.arch/amd64-disp-step-avx.S:40^M - 40 vmovsd ro_var(%rip),%xmm0^M - (gdb) FAIL: gdb.arch/amd64-disp-step-avx.exp: vex2: \ - continue to test_rip_vex2_end - ... - The SIGILL happens when trying to execute the first avx instruction in the - executable. - - I can't directly access the machine, but looking at the log for test-case - gdb.arch/i386-avx.exp, it seems that there's no avx support: - ... - Breakpoint 1, main (argc=1, argv=0x7fffffffd6b8) at gdb.arch/i386-avx.c:68^M - 68 if (have_avx ())^M - (gdb) print have_avx ()^M - $1 = 0^M - ... - - Fix this by: - - adding a gdb_caching_proc have_avx, similar to have_mpx, using the have_avx - function from gdb.arch/i386-avx.c - - using proc have_avx in both gdb/testsuite/gdb.arch/amd64-disp-step-avx.exp - and gdb/testsuite/gdb.arch/i386-avx.exp. - - Tested on my x86_64-linux laptop with avx support, where both test-cases pass. - - gdb/testsuite/ChangeLog: - - 2021-09-04 Tom de Vries - - PR testsuite/26950 - * gdb/testsuite/gdb.arch/i386-avx.c (main): Remove call to have_avx. - (have_avx): Move ... - * gdb/testsuite/lib/gdb.exp (have_avx): ... here. New proc. - * gdb/testsuite/gdb.arch/amd64-disp-step-avx.exp: Use have_avx. - * gdb/testsuite/gdb.arch/i386-avx.exp: Same. - -2021-09-04 Mike Frysinger - - gnulib: import sys_wait - A few sims use this to emulate process syscalls. - Gdb builds seem to still be fine. - -2021-09-04 GDB Administrator - - Automatic date update in version.in - -2021-09-03 Tom Tromey - - Use CORE_ADDR as return type from x86_dr_low_get_addr - On a Windows build locally, watchpoints started failing. I tracked - this down to x86_dr_low_get_addr returning an 'unsigned long'... in - this particular build, this is a 32-bit type, but the inferior is a - 64-bit program. - - This patch fixes the problem by changing the return type. No other - change is required, because this matches the function pointer in - struct x86_dr_low_type. - -2021-09-03 Kevin Buettner - - Test case reproducing PR28030 bug - The original reproducer for PR28030 required use of a specific - compiler version - gcc-c++-11.1.1-3.fc34 is mentioned in the PR, - though it seems probable that other gcc versions might also be able to - reproduce the bug as well. This commit introduces a test case which, - using the DWARF assembler, provides a reproducer which is independent - of the compiler version. (Well, it'll work with whatever compilers - the DWARF assembler works with.) - - To the best of my knowledge, it's also the first test case which uses - the DWARF assembler to provide debug info for a shared object. That - being the case, I provided more than the usual commentary which should - allow this case to be used as a template when a combo shared - library / DWARF assembler test case is required in the future. - - I provide some details regarding the bug in a comment near the - beginning of locexpr-dml.exp. - - This problem was difficult to reproduce; I found myself constantly - referring to the backtrace while trying to figure out what (else) I - might be missing while trying to create a reproducer. Below is a - partial backtrace which I include for posterity. - - #0 internal_error ( - file=0xc50110 "/ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/gdbtypes.c", line=5575, - fmt=0xc520c0 "Unexpected type field location kind: %d") - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdbsupport/errors.cc:51 - #1 0x00000000006ef0c5 in copy_type_recursive (objfile=0x1635930, - type=0x274c260, copied_types=0x30bb290) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/gdbtypes.c:5575 - #2 0x00000000006ef382 in copy_type_recursive (objfile=0x1635930, - type=0x274ca10, copied_types=0x30bb290) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/gdbtypes.c:5602 - #3 0x0000000000a7409a in preserve_one_value (value=0x24269f0, - objfile=0x1635930, copied_types=0x30bb290) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/value.c:2529 - #4 0x000000000072012a in gdbscm_preserve_values ( - extlang=0xc55720 , objfile=0x1635930, - copied_types=0x30bb290) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/guile/scm-value.c:94 - #5 0x00000000006a3f82 in preserve_ext_lang_values (objfile=0x1635930, - copied_types=0x30bb290) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/extension.c:568 - #6 0x0000000000a7428d in preserve_values (objfile=0x1635930) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/value.c:2579 - #7 0x000000000082d514 in objfile::~objfile (this=0x1635930, - __in_chrg=) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/objfiles.c:549 - #8 0x0000000000831cc8 in std::_Sp_counted_ptr::_M_dispose (this=0x1654580) - at /usr/include/c++/11/bits/shared_ptr_base.h:348 - #9 0x00000000004e6617 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release (this=0x1654580) at /usr/include/c++/11/bits/shared_ptr_base.h:168 - #10 0x00000000004e1d2f in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count (this=0x190bb88, __in_chrg=) - at /usr/include/c++/11/bits/shared_ptr_base.h:705 - #11 0x000000000082feee in std::__shared_ptr::~__shared_ptr (this=0x190bb80, __in_chrg=) - at /usr/include/c++/11/bits/shared_ptr_base.h:1154 - #12 0x000000000082ff0a in std::shared_ptr::~shared_ptr ( - this=0x190bb80, __in_chrg=) - at /usr/include/c++/11/bits/shared_ptr.h:122 - #13 0x000000000085ed7e in __gnu_cxx::new_allocator > >::destroy > (this=0x114bc00, - __p=0x190bb80) at /usr/include/c++/11/ext/new_allocator.h:168 - #14 0x000000000085e88d in std::allocator_traits > > >::destroy > (__a=..., - __p=0x190bb80) at /usr/include/c++/11/bits/alloc_traits.h:531 - #15 0x000000000085e50c in std::__cxx11::list, std::allocator > >::_M_erase (this=0x114bc00, __position= - std::shared_ptr (expired, weak count 1) = {get() = 0x1635930}) - at /usr/include/c++/11/bits/stl_list.h:1925 - #16 0x000000000085df0e in std::__cxx11::list, std::allocator > >::erase (this=0x114bc00, __position= - std::shared_ptr (expired, weak count 1) = {get() = 0x1635930}) - at /usr/include/c++/11/bits/list.tcc:158 - #17 0x000000000085c748 in program_space::remove_objfile (this=0x114bbc0, - objfile=0x1635930) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/progspace.c:210 - #18 0x000000000082d3ae in objfile::unlink (this=0x1635930) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/objfiles.c:487 - #19 0x000000000082e68c in objfile_purge_solibs () - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/objfiles.c:875 - #20 0x000000000092dd37 in no_shared_libraries (ignored=0x0, from_tty=1) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/solib.c:1236 - #21 0x00000000009a37fe in target_pre_inferior (from_tty=1) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/target.c:2496 - #22 0x00000000007454d6 in run_command_1 (args=0x0, from_tty=1, - run_how=RUN_NORMAL) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/infcmd.c:437 - - I'll note a few points regarding this backtrace: - - Frame #1 is where the internal error occurs. It's caused by an - unhandled case for FIELD_LOC_KIND_DWARF_BLOCK. The fix for this bug - adds support for this case. - - Frame #22 - it's a partial backtrace - shows that GDB is attempting to - (re)run the program. You can see the exact command sequence that was - used for reproducing this problem in the PR (at - https://sourceware.org/bugzilla/show_bug.cgi?id=28030), but in a - nutshell, after starting the program and advancing to the appropriate - source line, GDB was asked to step into libstdc++; a "finish" command - was issued, returning a value. The fact that a value was returned is - very important. GDB was then used to step back into libstdc++. A - breakpoint was set on a source line in the library after which a "run" - command was issued. - - Frame #19 shows a call to objfile_purge_solibs. It's aptly named. - - Frame #7 is a call to the destructor for one of the objfile solibs; it - turned out to be the one for libstdc++. - - Frames #6 thru #3 show various value preservation frames. If you look - at preserve_values() in gdb/value.c, the value history is preserved - first, followed by internal variables, followed by values for the - extension languages (python and guile). - -2021-09-03 Tom de Vries - - [gdb/testsuite] Add untested case in gdb.gdb/complaints.exp - When building gdb with "-Wall -O2 -g -flto=auto", I run into: - ... - (gdb) call clear_complaints()^M - No symbol "clear_complaints" in current context.^M - (gdb) FAIL: gdb.gdb/complaints.exp: clear complaints - ... - - The problem is that lto has optimized away clear_complaints, and consequently - the selftests cannot run. - - Fix this by: - - using info function to detect presence of clear_complaints - - handling the absence of clear_complaints by calling untested - ... - (gdb) UNTESTED: gdb.gdb/complaints.exp: \ - Cannot find clear_complaints, skipping test - ... - - Tested on x86_64-linux. - - gdb/testsuite/ChangeLog: - - 2021-09-03 Tom de Vries - - * gdb.gdb/complaints.exp: Use untested if clear_complaints cannot - be found. - -2021-09-03 Felix Willgerodt - - gdb: Enable finish command and inferior calls for _Float16 on amd64 and i386. - Values of type _Float16 and _Float16 _Complex can now be used on CPUs with - AVX512-FP16 support. Return values of those types are located in XMM0. - Compiler support for gcc and clang is in progress, see e.g.: - https://gcc.gnu.org/pipermail/gcc-patches/2021-July/574117.html - - gdb/ChangeLog: - 2021-07-21 Felix Willgerodt - - * amd64-tdep.c (amd64_classify): Classify _Float16 and - _Float16 _Complex as AMD64_SSE. - * i386-tdep.c (i386_extract_return_value): Read _Float16 and - _Float16 _Complex from xmm0. - - gdb/testsuite/ChangeLog: - 2021-07-21 Felix Willgerodt - - * gdb.arch/x86-avx512fp16-abi.c: New file. - * gdb.arch/x86-avx512fp16-abi.exp: New file. - -2021-09-03 Felix Willgerodt - - Add half support for AVX512 register view. - This adds support for the half datatype, FP16, to the AVX512 register printing. - - gdb/ChangeLog: - 2020-07-21 Felix Willgerodt - - * i386-tdep.c (i386_zmm_type) : New field. - (i386_ymm_type) : New field. - (i386_gdbarch_init): Add set_gdbarch_half_format. - * features/i386/64bit-avx512.xml: Add half type. - * features/i386/64bit-avx512.c: Regenerated. - * features/i386/64bit-sse.xml: Add half type. - * features/i386/64bit-sse.c: Regenerated. - - gdb/testsuite/ChangeLog: - 2021-07-21 Felix Willgerodt - - * gdb.arch/x86-avx512fp16.c: New file. - * gdb.arch/x86-avx512fp16.exp: New file. - * lib/gdb.exp (skip_avx512fp16_tests): New function. - -2021-09-03 Felix Willgerodt - - gdb, i386: Enable AVX512-bfloat16 for i386 targets. - Values of type bfloat16 can also be used on 32-bit targets, which was missed - in the original enablement. This also adjusts the testcase to pass with - "unix/-m32", where only the lower 8 AVX registers are available. - - gdb/ChangeLog: - 2021-07-21 Felix Willgerodt - - * features/i386/32bit-sse.xml: Add bfloat16 type. - * features/i386/32bit-sse.c: Regenerated. - - gdb/testsuite/ChangeLog: - 2021-07-21 Felix Willgerodt - - * gdb.arch/x86-avx512bf16.exp: Only use x/z/ymm 0-7. - -2021-09-03 Tom de Vries - - [gdb/testsuite] Add untested case in selftest_setup - When building gdb with "-Wall -O2 -g -flto=auto", I run into: - ... - FAIL: gdb.gdb/python-helper.exp: breakpoint in captured_main \ - (got interactive prompt) - FAIL: gdb.gdb/python-helper.exp: run until breakpoint at captured_main - WARNING: Couldn't test self - ... - and similar in gdb.gdb/selftest.exp. - - The first FAIL in more detail: - ... - (gdb) break captured_main^M - Function "captured_main" not defined.^M - Make breakpoint pending on future shared library load? (y or [n]) n^M - (gdb) FAIL: gdb.gdb/python-helper.exp: breakpoint in captured_main \ - (got interactive prompt) - ... - - The problem is that lto has optimized away the captured_main function - and consequently the selftests dependent on that cannot run. - - Fix this by: - - using gdb_breakpoint to detect failure to set the breakpoint - - handling the failure to set a breakpoint by calling untested - - not emitting the warning if we've already got untested - such that we have: - ... - (gdb) UNTESTED: gdb.gdb/python-helper.exp: Cannot set breakpoint at \ - captured_main, skipping testcase. - ... - - gdb/testsuite/ChangeLog: - - 2021-09-02 Tom de Vries - - * lib/selftest-support.exp: Emit untested when not being able to set - breakpoint. - -2021-09-03 Alan Modra - - ld testsuite tidy - Fixes a few issues: - 1) If you use "-fsanitize=address,undefined" in CFLAGS, the Makefile - attempt to trim off -fsanitize options left us with ",undefined". - 2) ld_compile adds CFLAGS_FOR_TARGET itself, no need to pass it. - 3) CFLAGS might be needed linking bootstrap test. - - * Makefile.am (CFLAGS_FOR_TARGET, CXXFLAGS_FOR_TARGET): Trim off - all -fsanitize=*. - * Makefile.in: Regenerate. - * testsuite/ld-bootstrap/bootstrap.exp: Use CFLAGS when linking. - * testsuite/ld-cdtest/cdtest.exp: Use CFLAGS_FOR_TARGET when - linking. - * testsuite/ld-auto-import/auto-import.exp: Don't pass - CFLAGS_FOR_TARGET to ld_compile. - * testsuite/ld-cygwin/exe-export.exp: Likewise. - * testsuite/ld-elfvers/vers.exp: Likewise. - * testsuite/ld-elfvsb/elfvsb.exp: Likewise. - * testsuite/ld-elfweak/elfweak.exp: Likewise. - * testsuite/ld-gc/gc.exp: Likewise. - * testsuite/ld-pe/pe-compile.exp: Likewise. - * testsuite/ld-pe/pe-run.exp: Likewise. - * testsuite/ld-pe/pe-run2.exp: Likewise. - * testsuite/ld-plugin/plugin.exp: Likewise. - * testsuite/ld-shared/shared.exp: Likewise. - * testsuite/ld-elfcomm/elfcomm.exp: Likewise, and don't allow - nios2 testing to trash CFLAGS_FOR_TARGET. - * testsuite/ld-scripts/crossref.exp: Don't pass options in - CC_FOR_TARGET, do so in CFLAGS_FOR_TARGET instead. - * testsuite/ld-srec/srec.exp: Likewise, and for CXX. - -2021-09-03 Alan Modra - - CC_FOR_TARGET et al - The top level Makefile, the ld Makefile and others, define - CC_FOR_TARGET to be a compiler for the binutils target machine. This - is the compiler that should be used for almost all tests with C - source. There are _FOR_TARGET versions of CFLAGS, CXX, and CXXFLAGS - too. This was all supposed to work with the testsuite .exp files - using CC for the target compiler, and CC_FOR_HOST for the host - compiler, with the makefiles passing CC=$CC_FOR_TARGET and - CC_FOR_HOST=$CC to the runtest invocation. - - One exception to the rule of using CC_FOR_TARGET is the native-only ld - bootstrap test, which uses the newly built ld to link a copy of - itself. Since the files being linked were created with the host - compiler, the boostrap test should use CC and CFLAGS, in case some - host compiler option provides needed libraries automatically. - However, bootstrap.exp used CC where it should have used CC_FOR_HOST. - I set about fixing that problem, then decided that playing games in - the makefiles with CC was a bad idea. Not only is it confusing, but - other dejagnu code knows about CC_FOR_TARGET. See dejagnu/target.exp. - - So this patch gets rid of the makefile variable renaming and changes - all the .exp files to use the correct _FOR_TARGET variables. - CC_FOR_HOST and CFLAGS_FOR_HOST disappear. A followup patch will - correct bootstrap.exp to use CFLAGS, and a number of other things I - noticed. - - binutils/ - * testsuite/lib/binutils-common.exp (run_dump_test): Use - CC_FOR_TARGET and CFLAGS_FOR_TARGET rather than CC and CFLAGS. - ld/ - * Makefile.am (check-DEJAGNU): Don't set CC to CC_FOR_TARGET - and similar. Pass variables with unchanged names. Don't set - CC_FOR_HOST or CFLAGS_FOR_HOST. - * Makefile.in: Regenerate. - * testsuite/config/default.exp: Update default CC and similar. - (compiler_supports, plug_opt): Use CC_FOR_TARGET. - * testsuite/ld-cdtest/cdtest.exp: Replace all uses of CC with - CC_FOR_TARGET, and similarly for CFLAGS, CXX and CXXFLAGS. - * testsuite/ld-auto-import/auto-import.exp: Likewise. - * testsuite/ld-cygwin/exe-export.exp: Likewise. - * testsuite/ld-elf/dwarf.exp: Likewise. - * testsuite/ld-elf/indirect.exp: Likewise. - * testsuite/ld-elf/shared.exp: Likewise. - * testsuite/ld-elfcomm/elfcomm.exp: Likewise. - * testsuite/ld-elfvers/vers.exp: Likewise. - * testsuite/ld-elfvsb/elfvsb.exp: Likewise. - * testsuite/ld-elfweak/elfweak.exp: Likewise. - * testsuite/ld-gc/gc.exp: Likewise. - * testsuite/ld-ifunc/ifunc.exp: Likewise. - * testsuite/ld-mn10300/mn10300.exp: Likewise. - * testsuite/ld-pe/pe-compile.exp: Likewise. - * testsuite/ld-pe/pe-run.exp: Likewise. - * testsuite/ld-pe/pe-run2.exp: Likewise. - * testsuite/ld-pie/pie.exp: Likewise. - * testsuite/ld-plugin/lto.exp: Likewise. - * testsuite/ld-plugin/plugin.exp: Likewise. - * testsuite/ld-scripts/crossref.exp: Likewise. - * testsuite/ld-selective/selective.exp: Likewise. - * testsuite/ld-sh/sh.exp: Likewise. - * testsuite/ld-shared/shared.exp: Likewise. - * testsuite/ld-srec/srec.exp: Likewise. - * testsuite/ld-undefined/undefined.exp: Likewise. - * testsuite/ld-unique/unique.exp: Likewise. - * testsuite/ld-x86-64/tls.exp: Likewise. - * testsuite/lib/ld-lib.exp: Likewise. - libctf/ - * Makefile.am (check-DEJAGNU): Don't set CC to CC_FOR_TARGET. - Pass CC and CC_FOR_TARGET. Don't set CC_FOR_HOST. - * Makefile.in: Regenerate. - * testsuite/config/default.exp: Update default CC and similar. - * testsuite/lib/ctf-lib.exp (run_native_host_cmd): Use CC rather - than CC_FOR_HOST. - (run_lookup_test): Use CC_FOR_TARGET and CFLAGS_FOR_TARGET. - -2021-09-03 Alan Modra - - pj: asan: out of bounds, ubsan: left shift of negative - * pj-dis.c: Include libiberty.h. - (print_insn_pj): Don't index op->arg past array bound. Don't - left shift negative int. - - ubsan: alpha: member access within null pointer - * elf64-alpha.c (elf64_alpha_relax_with_lituse): Avoid UB. - - ubsan: libctf: applying zero offset to null pointer - * ctf-open.c (init_symtab): Avoid ubsan error. - -2021-09-03 Alan Modra - - haiku tidy - --enable-maintainer-mode showed a number of files needing to be - regenerated, and in the case of ld/Makefile.in that the file was - regenerated by hand. Nothing to see here really. - - ld/ - * Makefile.am (ALL_64_EMULATION_SOURCES): Sort haiku entry. - * Makefile.in: Regenerate. - * po/BLD-POTFILES.in: Regenerate. - libctf/ - * configure: Regenerate. - zlib/ - * configure: Regenerate. - -2021-09-03 Fangrui Song - - gold: --export-dynamic-symbol: don't imply -u - to match GNU ld. - - gold/ - * archive.cc (Library_base::should_include_member): Don't handle - --export-dynamic-symbol. - * symtab.cc (Symbol_table::do_add_undefined_symbols_from_command_line): - Likewise. - -2021-09-03 GDB Administrator - - Automatic date update in version.in - -2021-09-02 Alexander von Gluck IV - - Add support for the haiku operating system. These are the os support patches we have been grooming and maintaining for quite a few years over on git.haiku-os.org. All of these architectures are working and most have been stable for quite some time. - -2021-09-02 Nick Clifton - - Fix the V850 assembler's generation of relocations for the st.b instruction. - PR 28292 - gas * config/tc-v850.c (handle_lo16): Also accept - BFD_RELOC_V850_LO16_SPLIT_OFFSET. - * testsuite/gas/v850/split-lo16.s: Add extra line. - * testsuite/gas/v850/split-lo16.d: Update expected disassembly. - - opcodes * v850-opc.c (D16): Use BFD_RELOC_V850_LO16_SPLIT_OFFSET in place - of BFD_RELOC_16. - -2021-09-02 Alan Modra - - SHT_SYMTAB_SHNDX handling - .symtab_shndx section contents is an array, one entry for each symbol - in .symtab, present when the number of symbols exceeds a little less - than 64k. Since the mapping is 1-1 with symbols there is no need to - keep both dest_index and destshndx_index in elf_sym_strtab. Instead, - just make sure that the shndx pointers to the swap functions are kept - NULL when .symtab_shndx does not exist. Also, strtabcount in the - linker's elf hash table is incremented in lock-step with the output - symcount, so that can disappear too. - -2021-09-02 Alan Modra - - PTR_ADD and NPTR_ADD for bfd.h - This defines a couple of macros used to avoid ubsan complaints about - calculations involving NULL pointers. PTR_ADD should be used in the - case where it is known that the offset is always zero with a NULL - pointer, and you'd like to know if a non-zero offset is ever used. - NPTR_ADD should be rarely used, but is defined for cases where a - non-zero offset is expected and should be ignored if the pointer is - NULL. - - bfd/ - * bfd-in.h (PTR_ADD, NPTR_ADD): Define. - * bfd-in2.h: Regenerate. - * elf-eh-frame.c (adjust_eh_frame_local_symbols): Avoid NULL - pointer calculations. - * elflink.c (_bfd_elf_strip_zero_sized_dynamic_sections): Likewise. - (bfd_elf_add_dt_needed_tag, elf_finalize_dynstr): Likewise. - (elf_link_add_object_symbols, elf_link_input_bfd): Likewise. - (bfd_elf_final_link, bfd_elf_gc_record_vtinherit): Likewise. - binutils/ - * objdump.c (disassemble_section): Use PTR_ADD for rel_ppend. - -2021-09-02 Alan Modra - - obstack.h __PTR_ALIGN vs. ubsan - Current ubsan complains on every use of __PTR_ALIGN (when ptrdiff_t is - as large as a pointer), due to making calculations relative to a NULL - pointer. This patch avoids the problem by extracting out and - simplifying __BPTR_ALIGN for the usual case. I've continued to use - ptrdiff_t here, where it might be better to throw away __BPTR_ALIGN - entirely and just assume uintptr_t exists. - - * obstack.h (__PTR_ALIGN): Expand and simplify __BPTR_ALIGN - rather than calculating relative to a NULL pointer. - -2021-09-02 GDB Administrator - - Automatic date update in version.in - -2021-09-01 Tom de Vries - - [gdb/testsuite] Fix dwo path in fission-*.S - [ Using $build for /home/vries/gdb_versions/devel/build to make things a bit - more readable. ] - - When using make check// to run test-case gdb.dwarf2/fission-base.exp: - ... - ( cd $build/gdb; make check//unix RUNTESTFLAGS="fission-base.exp" ) - ... - we run into: - ... - (gdb) file \ - $build/gdb/testsuite.unix/outputs/gdb.dwarf2/fission-base/fission-base^M - Reading symbols from \ - $build/gdb/testsuite.unix/outputs/gdb.dwarf2/fission-base/fission-base...^M - warning: Could not find DWO CU \ - $build/gdb/testsuite.1/outputs/gdb.dwarf2/fission-base/fission-base.dwo \ - (0x807060504030201) referenced by CU at offset 0xc7 [in module \ - $build/gdb/testsuite.unix/outputs/gdb.dwarf2/fission-base/fission-base]^M - ... - - The problem is that the executable refers to the dwo file using path name - $build/gdb/testsuite.1/outputs/gdb.dwarf2/fission-base/fission-base.dwo, - while the actual dwo file is at - $build/gdb/testsuite.unix/outputs/gdb.dwarf2/fission-base/fission-base.dwo. - - This is caused by this trick in fission-base.S: - ... - #define XSTR(s) STR(s) - #define STR(s) #s - ... - .asciz XSTR(DWO) # DW_AT_GNU_dwo_name - ... - and: - ... - $ echo | gcc -E -dD - | grep "define unix" - ... - - I used this trick to avoid doing additional_flags=-DDWO=\"$dwo\", since I was - concerned that there could be quoting issues. - - However, I've found other uses of this pattern, f.i. in - gdb/testsuite/gdb.base/corefile-buildid.exp: - ... - additional_flags=-DSHLIB_NAME=\"$dlopen_lib\"] - ... - - So, fix this by: - - using additional_flags=-DDWO=\"$dwo\" and - - using plain DWO instead of XSTR(DWO) - - Likewise in other gdb.dwarf2/fission*.exp test-cases. - - Tested on x86_64-linux, using make check//unix. - - gdb/testsuite/ChangeLog: - - 2021-09-01 Tom de Vries - - PR testsuite/28298 - * gdb.dwarf2/fission-base.S: Use DWO instead of XSTR(DWO). - * gdb.dwarf2/fission-loclists-pie.S: Same. - * gdb.dwarf2/fission-loclists.S: Same. - * gdb.dwarf2/fission-reread.S: Same. - * gdb.dwarf2/fission-base.exp: Use additional_flags=-DDWO=\"$dwo\". - * gdb.dwarf2/fission-loclists-pie.exp: Same. - * gdb.dwarf2/fission-loclists.exp: Same. - * gdb.dwarf2/fission-reread.exp: Same. - -2021-09-01 Tom de Vries - - [gdb/testsuite] Fix gdb.fortran/call-no-debug.exp symbol search - On openSUSE Tumbleweed I ran into: - ... - (gdb) ptype outstring_func.part^M - No symbol "outstring_func" in current context.^M - (gdb) FAIL: gdb.fortran/call-no-debug.exp: ptype outstring_func.part - ... - while on openSUSE Leap 15.2 I have instead: - ... - (gdb) ptype string_func_^M - type = ()^M - (gdb) PASS: gdb.fortran/call-no-debug.exp: ptype string_func_ - ... - - The difference is caused by the result for "info function string_func", which - is this for the latter: - ... - (gdb) info function string_func^M - All functions matching regular expression "string_func":^M - ^M - Non-debugging symbols:^M - 0x000000000040089c string_func_^M - ... - but this for the former: - ... - (gdb) info function string_func^M - All functions matching regular expression "string_func":^M - ^M - Non-debugging symbols:^M - 0x00000000004012bb string_func_^M - 0x00007ffff7bac5b0 outstring_func.part^M - 0x00007ffff7bb1a00 outstring_func.part^M - ... - - The extra symbols are part of glibc: - ... - $ nm /lib64/libc.so.6 | grep string_func - 00000000000695b0 t outstring_func.part.0 - 000000000006ea00 t outstring_func.part.0 - ... - - If glibc debug info is installed, we get instead: - ... - (gdb) info function string_func^M - All functions matching regular expression "string_func":^M - ^M - File /usr/src/debug/glibc-2.33-9.1.x86_64/stdio-common/vfprintf-internal.c:^M - 236: static int outstring_func(int, size_t, const unsigned int *, FILE *);^M - ^M - File vfprintf-internal.c:^M - 236: static int outstring_func(int, size_t, const unsigned char *, FILE *);^M - ^M - Non-debugging symbols:^M - 0x00000000004012bb string_func_^M - ... - and the FAIL doesn't trigger. - - Fix this by calling "info function string_func" before starting the exec, such - that only symbols of the exec are taken into account. - - Tested on x86_64-linux. - - gdb/testsuite/ChangeLog: - - 2021-09-01 Tom de Vries - - * gdb.fortran/call-no-debug.exp: Avoid shared lib symbols for - find_mangled_name calls. - -2021-09-01 Yinjun Zhang - - nfp: add validity check of island and me - AddressSanitizer detects heap-buffer-overflow when running - "objdump -D" for nfp .nffw files. - - PR 27854 - * nfp-dis.c (_NFP_ISLAND_MAX, _NFP_ME_MAX): Define. - (nfp_priv_data): ..and use here. - (_print_instrs): Sanity check island and menum. - -2021-09-01 Alan Modra - - PR28250, Null pointer dereference in debug_class_type_samep - Typo fix, obviously should be m1->variants != NULL, not - m1->variants == NULL. - - PR 28250 - * debug.c (debug_class_type_samep): Correct m1->variants test. - -2021-09-01 GDB Administrator - - Automatic date update in version.in - -2021-08-31 Simon Marchi - - gdb: remove breakpoint_find_if - Remove breakpoint_find_if, replace its sole usage with using - all_breakpoints directly instead. At the same time, change return - types to use bool. - - Change-Id: I9ec392236b4804b362d16ab563330b9c07311106 - -2021-08-31 Nick Clifton - - Update the how-to-make-a-release document so that a check for empty manual pages is included. cf PR 28144 - -2021-08-31 Nelson Chu - - RISC-V: Extend .insn directive to support hardcode encoding. - The .insn directive can let users use their own instructions, or - some new instruction, which haven't supported in the old binutils. - For example, if users want to use sifive cache instruction, they - cannot just write "cflush.d1.l1" in the assembly code, they should - use ".insn i SYSTEM, 0, x0, x10, -0x40". But the .insn directive - may not easy to use for some cases, and not so friendly to users. - Therefore, I believe most of the users will use ".word 0xfc050073", - to encode the instructions directly, rather than use .insn. But - once we have supported the mapping symbols, the .word directives - are marked as data, so disassembler won't dump them as instructions - as usual. I have discussed this with Kito many times, we all think - extend the .insn direcitve to support the hardcode encoding, is the - easiest way to resolve the problem. Therefore, there are two more - .insn formats are proposed as follows, - - (original) .insn , , , ... - .insn , - .insn - - The is string, and the and are constants. - - gas/ - * config/tc-riscv.c (riscv_ip_hardcode): Similar to riscv_ip, - but assembles an instruction according to the hardcode values - of .insn directive. - * doc/c-riscv.texi: Document two new .insn formats. - * testsuite/gas/riscv/insn-fail.d: New testcases. - * testsuite/gas/riscv/insn-fail.l: Likewise. - * testsuite/gas/riscv/insn-fail.s: Likewise. - * testsuite/gas/riscv/insn.d: Updated. - * testsuite/gas/riscv/insn.s: Likewise. - -2021-08-31 John Baldwin - - Use gdbfmt for vprintf_filtered. - gdbfmt was already used for printf_filtered, so using it for - vprintf_filtered is more consistent. - - As a result, all callers of vfprintf_maybe_filtered now use gdbfmt, so - the function can be simplified to assume the gdbfmt case and remove - the associated bool argument. Similary, vprintf_filtered is now a - simple wrapper around vfprintf_filtered. - -2021-08-31 GDB Administrator - - Automatic date update in version.in - -2021-08-30 John Baldwin - - fbsd-nat: Don't use '%jd' and '%ju' with printf_filtered. - The handler for 'info proc status' for native processes on FreeBSD - uses the 'j' size modifier along with uintmax_t / intmax_t casts to - output integer values for types such as off_t that are not aliases of - a basic C type such as 'int' or 'long'. printf_filtered does not - support the 'j' modifer, so this resulted in runtime errors in - practice: - - (gdb) info proc stat - process 8674 - Name: ls - State: T (stopped) - Parent process: 8673 - Process group: 8674 - Session id: 2779 - Unrecognized format specifier 'j' in printf - - Instead, use plongest and pulongest to generate the output strings of - these integer values. - -2021-08-30 Simon Marchi - - gdb: fix build error in unittests/parallel-for-selftests.c - We get this error when building GDB on some platforms. I get it using - g++-10 on Ubuntu 20.04 (installed using the distro package). It was - also reported by John Baldwin, using a clang that uses libc++. - - CXX unittests/parallel-for-selftests.o - cc1plus: warning: command line option '-Wmissing-prototypes' is valid for C/ObjC but not for C++ - /home/smarchi/src/binutils-gdb/gdb/unittests/parallel-for-selftests.c: In function 'void selftests::parallel_for::test(int)': - /home/smarchi/src/binutils-gdb/gdb/unittests/parallel-for-selftests.c:53:30: error: use of deleted function 'std::atomic::atomic(const std::atomic&)' - 53 | std::atomic counter = 0; - | ^ - In file included from /usr/include/c++/9/future:42, - from /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/thread-pool.h:29, - from /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/parallel-for.h:26, - from /home/smarchi/src/binutils-gdb/gdb/unittests/parallel-for-selftests.c:22: - /usr/include/c++/9/atomic:755:7: note: declared here - 755 | atomic(const atomic&) = delete; - | ^~~~~~ - /usr/include/c++/9/atomic:759:17: note: after user-defined conversion: 'constexpr std::atomic::atomic(std::atomic::__integral_type)' - 759 | constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { } - | ^~~~~~ - - I haven't dug to know why it does not happen everywhere, but this patch - fixes it by using the constructor to initialize the variable, rather - than the assignment operator. - - Change-Id: I6b27958171bf6187f6a875657395fd10441db7e6 - -2021-08-30 Nelson Chu - - RISC-V: PR28291, Fix the gdb fails that PR27916 caused. - * According to PR28291, we get the following unexpected gdb behavior, - - (gdb) disassemble 0x0,+4 - Dump of assembler code from 0x0 to 0x4: - 0x0000000000000000: - 0x0000000000000001: - 0x0000000000000002: - 0x0000000000000003: - End of assembler dump. - - * This patch should fix it to the right behavior, - - (gdb) disassemble 0x0,+4 - Dump of assembler code from 0x0 to 0x4: - 0x0000000000000000: Cannot access memory at address 0x0 - - opcodes/ - pr 28291 - * riscv-dis.c (print_insn_riscv): Return STATUS if it is not zero. - -2021-08-30 Tom Tromey - - Add some parallel_for_each tests - Tom de Vries noticed that a patch in the DWARF scanner rewrite series - caused a regression in parallel_for_each -- it started crashing in the - case where the number of threads is 0 (there was an unchecked use of - "n-1" that was used to size an array). - - He also pointed out that there were no tests of parallel_for_each. - This adds a few tests of parallel_for_each, primarily testing that - different settings for the number of threads will work. This test - catches the bug that he found in that series. - -2021-08-30 Tom Tromey - - Add a show function for "maint show worker-threads" - I wanted to see how many threads gdb thought it was using, but - "maint show worker-threads" only reported "unlimited". This patch - adds a show function so that it will now report the number of threads - gdb has started. - - Regression tested on x86-64 Fedora 34. - -2021-08-30 Tom de Vries - - [gdb/cli] Don't assert on empty string for core-file - With current gdb we run into: - ... - $ gdb -batch '' '' - : No such file or directory. - pathstuff.cc:132: internal-error: \ - gdb::unique_xmalloc_ptr gdb_abspath(const char*): \ - Assertion `path != NULL && path[0] != '\0'' failed. - ... - - Fix this by skipping the call to gdb_abspath in core_target_open in the - empty-string case, such that we have instead: - ... - $ gdb -batch '' '' - : No such file or directory. - : No such file or directory. - $ - ... - - Tested on x86_64-linux. - - gdb/ChangeLog: - - 2021-08-30 Tom de Vries - - PR cli/28290 - * gdb/corelow.c (core_target_open): Skip call to gdb_abspath in the - empty-string case. - - gdb/testsuite/ChangeLog: - - 2021-08-30 Tom de Vries - - PR cli/28290 - * gdb.base/batch-exit-status.exp: Add gdb '' and gdb '' '' tests. - -2021-08-30 Nelson Chu - - RISC-V: PR27916, Support mapping symbols. - Similar to ARM/AARCH64, we add mapping symbols in the symbol table, - to mark the start addresses of data and instructions. The $d means - data, and the $x means instruction. Then the disassembler uses these - symbols to decide whether we should dump data or instruction. - - Consider the mapping-04 test case, - $ cat tmp.s - .text - .option norelax - .option norvc - .fill 2, 4, 0x1001 - .byte 1 - .word 0 - .balign 8 - add a0, a0, a0 - .fill 5, 2, 0x2002 - add a1, a1, a1 - .data - .word 0x1 # No need to add mapping symbols. - .word 0x2 - - $ riscv64-unknown-elf-as tmp.s -o tmp.o - $ riscv64-unknown-elf-objdump -d tmp.o - - Disassembly of section .text: - - 0000000000000000 <.text>: - 0: 00001001 .word 0x00001001 # Marked $d, .fill directive. - 4: 00001001 .word 0x00001001 - 8: 00000001 .word 0x00000001 # .byte + part of .word. - c: 00 .byte 0x00 # remaining .word. - d: 00 .byte 0x00 # Marked $d, odd byte of alignment. - e: 0001 nop # Marked $x, nops for alignment. - 10: 00a50533 add a0,a0,a0 - 14: 20022002 .word 0x20022002 # Marked $d, .fill directive. - 18: 20022002 .word 0x20022002 - 1c: 2002 .short 0x2002 - 1e: 00b585b3 add a1,a1,a1 # Marked $x. - 22: 0001 nop # Section tail alignment. - 24: 00000013 nop - - * Use $d and $x to mark the distribution of data and instructions. - Alignments of code are recognized as instructions, since we usually - fill nops for them. - - * If the alignment have odd bytes, then we cannot just fill the nops - into the spaces. We always fill an odd byte 0x00 at the start of - the spaces. Therefore, add a $d mapping symbol for the odd byte, - to tell disassembler that it isn't an instruction. The behavior - is same as Arm and Aarch64. - - The elf/linux toolchain regressions all passed. Besides, I also - disable the mapping symbols internally, but use the new objudmp, the - regressions passed, too. Therefore, the new objudmp should dump - the objects corretly, even if they don't have any mapping symbols. - - bfd/ - pr 27916 - * cpu-riscv.c (riscv_elf_is_mapping_symbols): Define mapping symbols. - * cpu-riscv.h: extern riscv_elf_is_mapping_symbols. - * elfnn-riscv.c (riscv_maybe_function_sym): Do not choose mapping - symbols as a function name. - (riscv_elf_is_target_special_symbol): Add mapping symbols. - binutils/ - pr 27916 - * testsuite/binutils-all/readelf.s: Updated. - * testsuite/binutils-all/readelf.s-64: Likewise. - * testsuite/binutils-all/readelf.s-64-unused: Likewise. - * testsuite/binutils-all/readelf.ss: Likewise. - * testsuite/binutils-all/readelf.ss-64: Likewise. - * testsuite/binutils-all/readelf.ss-64-unused: Likewise. - gas/ - pr 27916 - * config/tc-riscv.c (make_mapping_symbol): Create a new mapping symbol. - (riscv_mapping_state): Decide whether to create mapping symbol for - frag_now. Only add the mapping symbols to text sections. - (riscv_add_odd_padding_symbol): Add the mapping symbols for the - riscv_handle_align, which have odd bytes spaces. - (riscv_check_mapping_symbols): Remove any excess mapping symbols. - (md_assemble): Marked as MAP_INSN. - (riscv_frag_align_code): Marked as MAP_INSN. - (riscv_init_frag): Add mapping symbols for frag, it usually called - by frag_var. Marked as MAP_DATA for rs_align and rs_fill, and - marked as MAP_INSN for rs_align_code. - (s_riscv_insn): Marked as MAP_INSN. - (riscv_adjust_symtab): Call riscv_check_mapping_symbols. - * config/tc-riscv.h (md_cons_align): Defined to riscv_mapping_state - with MAP_DATA. - (TC_SEGMENT_INFO_TYPE): Record mapping state for each segment. - (TC_FRAG_TYPE): Record the first and last mapping symbols for the - fragments. The first mapping symbol must be placed at the start - of the fragment. - (TC_FRAG_INIT): Defined to riscv_init_frag. - * testsuite/gas/riscv/mapping-01.s: New testcase. - * testsuite/gas/riscv/mapping-01a.d: Likewise. - * testsuite/gas/riscv/mapping-01b.d: Likewise. - * testsuite/gas/riscv/mapping-02.s: Likewise. - * testsuite/gas/riscv/mapping-02a.d: Likewise. - * testsuite/gas/riscv/mapping-02b.d: Likewise. - * testsuite/gas/riscv/mapping-03.s: Likewise. - * testsuite/gas/riscv/mapping-03a.d: Likewise. - * testsuite/gas/riscv/mapping-03b.d: Likewise. - * testsuite/gas/riscv/mapping-04.s: Likewise. - * testsuite/gas/riscv/mapping-04a.d: Likewise. - * testsuite/gas/riscv/mapping-04b.d: Likewise. - * testsuite/gas/riscv/mapping-norelax-04a.d: Likewise. - * testsuite/gas/riscv/mapping-norelax-04b.d: Likewise. - * testsuite/gas/riscv/no-relax-align.d: Updated. - * testsuite/gas/riscv/no-relax-align-2.d: Likewise. - include/ - pr 27916 - * opcode/riscv.h (enum riscv_seg_mstate): Added. - - opcodes/ - pr 27916 - * riscv-dis.c (last_map_symbol, last_stop_offset, last_map_state): - Added to dump sections with mapping symbols. - (riscv_get_map_state): Get the mapping state from the symbol. - (riscv_search_mapping_symbol): Check the sorted symbol table, and - then find the suitable mapping symbol. - (riscv_data_length): Decide which data size we should print. - (riscv_disassemble_data): Dump the data contents. - (print_insn_riscv): Handle the mapping symbols. - (riscv_symbol_is_valid): Marked mapping symbols as invalid. - -2021-08-30 Tom de Vries - - [gdb/testsuite] Improve argument syntax of proc arange - The current syntax of proc arange is: - ... - proc arange { arange_start arange_length {comment ""} {seg_sel ""} } { - ... - and a typical call looks like: - ... - arange $start $len - ... - - This style is somewhat annoying because if you want to specify the last - parameter, you need to give the default values of all the other optional ones - before as well: - ... - arange $start $len "" $seg_sel - ... - - Update the syntax to: - ... - proc arange { options arange_start arange_length } { - parse_options { - { comment "" } - { seg_sel "" } - } - ... - such that a typical call looks like: - ... - arange {} $start $len - ... - and a call using seg_sel looks like: - ... - arange { - seg_sel $seg_sel - } $start $len - ... - - Also update proc aranges, which already has an options argument, to use the - new proc parse_options. - - Tested on x86_64-linux. - - Co-Authored-By: Simon Marchi - -2021-08-30 GDB Administrator - - Automatic date update in version.in - -2021-08-29 GDB Administrator - - Automatic date update in version.in - -2021-08-28 H.J. Lu - - ld: Change indirect symbol from IR to undefined - bfd/ - - PR ld/28264 - * elflink.c (_bfd_elf_merge_symbol): Change indirect symbol from - IR to undefined. - - ld/ - - PR ld/28264 - * testsuite/ld-plugin/lto.exp: Run PR ld/28264 test. - * testsuite/ld-plugin/pr28264-1.d: New file. - * testsuite/ld-plugin/pr28264-2.d: Likewise. - * testsuite/ld-plugin/pr28264-3.d: Likewise. - * testsuite/ld-plugin/pr28264-4.d: Likewise. - * testsuite/ld-plugin/pr28264.c: Likewise. - * testsuite/ld-plugin/pr28264.ver: Likewise. - -2021-08-28 Alan Modra - - PR28264, ld.bfd crash on linking efivar with LTO - PR 28264 - PR 26978 - * linker.c (_bfd_generic_link_add_one_symbol ): Check - that string is non-NULL. - -2021-08-28 GDB Administrator - - Automatic date update in version.in - -2021-08-27 Tom de Vries - - [gdb/symtab] Don't write .gdb_index symbol table with empty entries - When comparing the sizes of the index files generated for shlib - outputs/gdb.dwarf2/dw2-zero-range/shr1.sl, I noticed a large difference - between .debug_names: - ... - $ gdb -q -batch $shlib -ex "save gdb-index -dwarf-5 ." - $ du -b -h shr1.sl.debug_names shr1.sl.debug_str - 61 shr1.sl.debug_names - 0 shr1.sl.debug_str - ... - and .gdb_index: - ... - $ gdb -q -batch $shlib -ex "save gdb-index ." - $ du -b -h shr1.sl.gdb-index - 8.2K shr1.sl.gdb-index - ... - - The problem is that the .gdb_index contains a non-empty symbol table with only - empty entries. - - Fix this by making the symbol table empty, such that we have instead: - ... - $ du -b -h shr1.sl.gdb-index - 184 shr1.sl.gdb-index - ... - - Tested on x86_64-linux. - -2021-08-27 Tom de Vries - - [gdb/testsuite] Generate .debug_aranges in gdb.dlang/watch-loc.exp - Before commit 5ef670d81fd "[gdb/testsuite] Add dummy start and end CUs in - dwarf assembly" we had in exec outputs/gdb.dlang/watch-loc/watch-loc a D - compilation unit at offset 0xc7: - ... - Compilation Unit @ offset 0xc7: - Length: 0x4c (32-bit) - Version: 4 - Abbrev Offset: 0x64 - Pointer Size: 8 - <0>: Abbrev Number: 2 (DW_TAG_compile_unit) - DW_AT_language : 19 (D) - ... - with a corresponding .debug_aranges entry: - ... - Offset into .debug_info: 0xc7 - Pointer Size: 4 - Segment Size: 0 - - Address Length - 004004a7 0000000b - 00000000 00000000 - ... - - After that commit we have a dummy CU at offset 0xc7 and the D compilation unit - at offset 0xd2: - ... - Compilation Unit @ offset 0xc7: - Length: 0x7 (32-bit) - Version: 4 - Abbrev Offset: 0x64 - Pointer Size: 8 - Compilation Unit @ offset 0xd2: - Length: 0x4c (32-bit) - Version: 4 - Abbrev Offset: 0x65 - Pointer Size: 8 - <0>
: Abbrev Number: 2 (DW_TAG_compile_unit) - DW_AT_language : 19 (D) - ... - while the .debug_aranges entry still points to 0xc7. - - The problem is that the test-case uses a hack (quoting from - commit 75f06e9dc59): - ... - [ Note: this is a non-trivial test-case. The file watch-loc-dw.S contains a - .debug_info section, but not an .debug_aranges section or any actual code. - The file watch-loc.c contains code and a .debug_aranges section, but no other - debug section. So, the intent for the .debug_aranges section in watch-loc.c - is to refer to a compilation unit in the .debug_info section in - watch-loc-dw.S. ] - ... - and adding the dummy CU caused that hack to stop working. - - Fix this by moving the generation of .debug_aranges from watch-loc.c to - watch-loc.exp, such that we have: - ... - Offset into .debug_info: 0xd2 - Pointer Size: 4 - Segment Size: 0 - - Address Length - 004004a7 0000000b - 00000000 00000000 - ... - - Tested on x86_64-linux. - -2021-08-27 Tom de Vries - - [gdb/testsuite] Generate .debug_aranges entry for dummy CU - A best practise for DWARF [1] is to generate .debug_aranges entries for CUs - even if they have no address range. - - Generate .debug_arange entries for the dummy CUs added by the DWARF assembler. - - Tested on x86_64-linux. - - [1] http://wiki.dwarfstd.org/index.php?title=Best_Practices - -2021-08-27 Tom de Vries - - [gdb/testsuite] Add .debug_aranges in more test-cases - A couple of test-cases fail when run with target board cc-with-debug-names due - to missing .debug_aranges entries for the CUs added by the dwarf assembler. - - Add a .debug_aranges entry for those CUs. - - Tested on x86_64-linux. - -2021-08-27 Tom de Vries - - [gdb/testsuite] Support .debug_aranges in dwarf assembly - Add a proc aranges such that we can generate .debug_aranges sections in dwarf - assembly using: - ... - cu { label cu_label } { - ... - } - - aranges {} cu_label { - arange $addr $len [] [$segment_selector] - } - ... - - Tested on x86_64-linux. - -2021-08-27 Tom de Vries - - [gdb/testsuite] Add label option to proc cu - We can use current dwarf assembly infrastructure to declare a label that marks - the start of the CU header: - ... - declare_labels header_start_cu_a - _section ".debug_info" - header_start_cu_a : cu {} { - } - _section ".debug_info" - header_start_cu_b : cu {} { - } - ... - on the condition that we switch to the .debug_info section before, which makes - this style of use fragile. - - Another way to achieve the same is to use the label as generated by the cu - proc itself: - ... - variable _cu_label - cu {} { - } - set header_start_cu_a $_cu_label - cu {} { - } - set header_start_cu_b $_cu_label - ... - but again that seems fragile given that adding a new CU inbetween will - silently result in the wrong value for the label. - - Add a label option to proc cu such that we can simply do: - ... - cu { label header_start_cu_a } { - } - cu { label header_start_cu_b } { - } - ... - - Tested on x86_64-linux. - -2021-08-27 GDB Administrator - - Automatic date update in version.in - -2021-08-26 Andrew Burgess - - gdb: remove some stray newlines in debug output - I spotted a couple of stray newlines that were left at the end of - debug message during conversion to the new debug output scheme. These - messages are part of the 'set debug lin-lwp 1' output. - -2021-08-26 GDB Administrator - - Automatic date update in version.in - -2021-08-25 GDB Administrator - - Automatic date update in version.in - -2021-08-24 Tom Tromey - - Fix two regressions caused by CU / TU merging - PR symtab/28160 and PR symtab/27893 concern GDB crashes in the test - suite when using the "fission" target board. They are both caused by - the patches that merge the list of CUs with the list of TUs (and to a - lesser degree by the patches to share DWARF data across objfiles), and - the underlying issue is the same: it turns out that reading a DWO can - cause new type units to be created. This means that the list of - dwarf2_per_cu_data objects depends on precisely which CUs have been - expanded. However, because the type units can be created while - expanding a CU means that the vector of CUs can expand while it is - being iterated over -- a classic mistake. Also, because a TU can be - added later, it means the resize_symtabs approach is incorrect. - - This patch fixes resize_symtabs by removing it, and having set_symtab - resize the vector on demand. It fixes the iteration problem by - introducing a safe (index-based) iterator and changing the relevant - spots to use it. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28160 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=27893 - -2021-08-24 Alan Modra - - Real programmers don't configure gcc using --with-ld - * testsuite/lib/ld-lib.exp (run_host_cmd): Give a clue as to why - gcc -B doesn't pick up the ld under test. - -2021-08-24 Alan Modra - - objdump -S test fail on mingw - FAIL: objdump -S - FAIL: objdump --source-comment - is seen on mingw for the simple reason that gcc adds a .exe suffix on - the output file if not already present. Fix that, and tidy some objcopy - tests. - - * testsuite/lib/binutils-common.exp (exeext): New proc. - * testsuite/binutils-all/objcopy.exp (exe, test_prog): Use it here. - (objcopy_remove_relocations_from_executable): Catch objcopy errors. - Only run on ELF targets. - * testsuite/binutils-all/objdump.exp (exe): Set variable. - (test_build_id_debuglink, test_objdump_S): Use exe file suffix. - -2021-08-24 James Bowman (FTDI-UK) - - FT32: Remove recursion in ft32_opcode - The function ft32_opcode used recursion. This could cause a stack - overflow. Replaced with a pair of non-recursive functions. - - PR 28169 - * ft32-dis.c: Formatting. - (ft32_opcode1): Split out from.. - (ft32_opcode): ..here. - -2021-08-24 GDB Administrator - - Automatic date update in version.in - -2021-08-23 Tom Tromey - - Fix a latent bug in dw2-ranges-overlap.exp - dw2-ranges-overlap.exp creates a program where a psymtab has two - address ranges, and a function without debug info whose address is - between these two ranges. Then it sets a breakpoint on this function - and runs to it, expecting that the language should remain "auto; c" - when stopped. - - However, this test case also has a "main" function described (briefly) - in the DWARF, and this function is given language C++. Also, a - breakpoint stop sets the current language to the language that was - used when setting the breakpoint. - - My new DWARF scanner decides that this "main" is the main program and - sets the current language to C++ at startup, causing this test to - fail. - - This patch fixes the test in a simple way, by introducing a new - function that takes the place of "main" in the DWARF. I think this - still exercises the original problem, but also avoids problems with my - branch. - - It seemed safe to me to submit this separately. - -2021-08-23 Tom de Vries - - [gdb] Fix 'not in executable format' error message - With trying to load a non-executable file into gdb, we run into PR26880: - ... - $ gdb -q -batch test.c - "0x7ffc87bfc8d0s": not in executable format: \ - file format not recognized - ... - - The problem is caused by using %ps in combination with the error function - (note that confusingly, it does work in combination with the warning - function). - - Fix this by using plain "%s" instead. - - Tested on x86_64-linux. - - gdb/ChangeLog: - - 2021-08-22 Tom de Vries - - PR gdb/26880 - * gdb/exec.c (exec_file_attach): Use %s instead of %ps in call to - error function. - - gdb/testsuite/ChangeLog: - - 2021-08-22 Tom de Vries - - PR gdb/26880 - * gdb.base/non-executable.exp: New file. - -2021-08-23 Tom de Vries - - [gdb/testsuite] Use compiler-generated instead of gas-generated stabs - The test-case gdb.dwarf2/dw2-ranges.exp is the only one in the gdb testsuite - that uses gas-generated stabs. - - While the use seems natural alongside the use of gas-generated dwarf in the - same test-case, there are a few known issues, filed on the gdb side as: - - PR symtab/12497 - "stabs: PIE relocation does not work" - - PR symtab/28221 - "[readnow, stabs] FAIL: gdb.dwarf2/dw2-ranges.exp: \ - info line func" - and on the gas side as: - - PR gas/28233 - "[gas, --gstabs] Generate stabs more similar to gcc" - - The test-case contains a KFAIL for PR12497, but it's outdated and fails to - trigger. - - The intention of the test-case is to test gas-generated dwarf, and using - gcc-generated stabs instead of gas-generated stabs works fine. - - Supporting compiler-generated stabs is already a corner-case for gdb, and - there's no current commitment/incentive to support/workaround gas-generated - stabs, which can be considered a corner-case of a corner-case. - - Work around these problem by using compiler-generated stabs in the test-case. - - Tested on x86_64-linux. - - gdb/testsuite/ChangeLog: - - 2021-08-22 Tom de Vries - - * gdb.dwarf2/dw2-ranges.exp: Use compiler-generated stabs. - -2021-08-23 Tom de Vries - - [gdb/testsuite] Add dummy start and end CUs in dwarf assembly - Say one compiles a hello.c: - ... - $ gcc -g hello.c - ... - - On openSUSE Leap 15.2 and Tumbleweed, the CU for hello.c is typically not the - first in .debug_info, nor the last, due to presence of debug information in - objects for sources like: - - ../sysdeps/x86_64/start.S - - init.c - - ../sysdeps/x86_64/crti.S - - elf-init.c - - ../sysdeps/x86_64/crtn.S. - - On other systems, say ubuntu 18.04.5, the CU for hello.c is typically the - first and the last in .debug_info. - - This difference has caused me to find some errors in the dwarf assembly - using openSUSE, that didn't show up on other platforms. - - Force the same situation on other platforms by adding a dummy start - and end CU. - - Tested on x86_64-linux. - - gdb/testsuite/ChangeLog: - - 2021-08-22 Tom de Vries - - PR testsuite/28235 - * lib/dwarf.exp (Dwarf::dummy_cu): New proc. - (Dwarf::assemble): Add dummy start and end CU. - -2021-08-23 Tom de Vries - - [gdb/testsuite] Fix dw2-ranges-psym.exp with -readnow - When running test-case gdb.dwarf2/dw2-ranges-psym.exp with target board - -readnow, I run into: - ... - (gdb) file dw2-ranges-psym^M - Reading symbols from dw2-ranges-psym...^M - Expanding full symbols from dw2-ranges-psym...^M - (gdb) set complaints 0^M - (gdb) FAIL: gdb.dwarf2/dw2-ranges-psym.exp: No complaints - ... - - The problem is that the regexp expects a gdb prompt immediately after the - "Reading symbols" line. - - Fix this by updating the regexp. - - Tested on x86_64-linux. - - gdb/testsuite/ChangeLog: - - 2021-08-22 Tom de Vries - - * lib/gdb.exp (gdb_load_no_complaints): Update regexp to allow - "Expanding full symbols" Line. - -2021-08-23 GDB Administrator - - Automatic date update in version.in - -2021-08-22 Mike Frysinger - - sim: m32r: add __linux__ hack for non-Linux hosts - The m32r Linux syscall emulation logic assumes the host environment - directly matches -- it's being run on 32-bit little endian Linux. - This breaks building for non-Linux systems, so put all the code in - __linux__ ifdef checks. This code needs a lot of love to make it - work everywhere, but let's at least unbreak it for non-Linux hosts. - -2021-08-22 GDB Administrator - - Automatic date update in version.in - -2021-08-21 GDB Administrator - - Automatic date update in version.in - -2021-08-20 Mike Frysinger - - sim: nltvals: switch output mode to a directory - In preparation for this script generating more files, change the output - argument to specify a directory. This drops the stdout behavior, but - since no one really runs this tool directly, it's not a big deal. - -2021-08-20 GDB Administrator - - Automatic date update in version.in - -2021-08-19 Simon Marchi - - gdb: use bool in notify_command_param_changed_p and do_set_command - Trivial patch to use bool instead of int. - - Change-Id: I9e5f8ee4305272a6671cbaaaf2f0484eff0d1ea5 - -2021-08-19 H.J. Lu - - x86: Put back 3 aborts in OP_E_memory - Put back 3 aborts where invalid lengths should have been filtered out. - - gas/ - - PR binutils/28247 - * testsuite/gas/i386/bad-bcast.s: Add a comment. - - opcodes/ - - PR binutils/28247 - * * i386-dis.c (OP_E_memory): Put back 3 aborts. - -2021-08-19 H.J. Lu - - x86: Avoid abort on invalid broadcast - Print "{bad}" on invalid broadcast instead of abort. - - gas/ - - PR binutils/28247 - * testsuite/gas/i386/bad-bcast.d: New file. - * testsuite/gas/i386/bad-bcast.s: Likewise. - * testsuite/gas/i386/i386.exp: Run bad-bcast. - - opcodes/ - - PR binutils/28247 - * i386-dis.c (OP_E_memory): Print "{bad}" on invalid broadcast - instead of abort. - -2021-08-19 Aaron Merey - - gdb/solib: Refactor scan_dyntag - scan_dyntag is unnecessarily duplicated in solib-svr4.c and solib-dsbt.c. - - Move this function to solib.c and rename it to gdb_bfd_scan_elf_dyntag. - Also add it to solib.h so it is included in both solib-svr4 and solib-dsbt. - -2021-08-19 GDB Administrator - - Automatic date update in version.in - -2021-08-18 Will Schmidt - - [gdb] [rs6000] Add ppc64_linux_gcc_target_options method. - Add a method to set the gcc target options for the ppc64 targets. - This change sets an empty value, which allows the gcc - default values (-mcmodel=medium) be used, instead of -mcmodel=large - which is set by the default_gcc_target_options hook. - - [gdb] [rs6000] Add ppc64*_gnu_triplet_regexp methods. - Add methods to set the target triplet so we can - find the proper gcc when our gcc is named of - the form powerpc64{le}--gcc or ppc64{le}--gcc. - -2021-08-18 Alan Modra - - Re: as: Replace the removed symbol with the versioned symbol - Some targets, typically embedded without shared libraries, replace the - relocation symbol with a section symbol (see tc_fix_adjustable). - Allow the test to pass for such targets. Fixes the following. - - avr-elf +FAIL: symver symver16 - d10v-elf +FAIL: symver symver16 - dlx-elf +FAIL: symver symver16 - ip2k-elf +FAIL: symver symver16 - m68k-elf +FAIL: symver symver16 - mcore-elf +FAIL: symver symver16 - pj-elf +FAIL: symver symver16 - s12z-elf +FAIL: symver symver16 - visium-elf +FAIL: symver symver16 - z80-elf +FAIL: symver symver16 - - PR gas/28157 - * testsuite/gas/symver/symver16.d: Relax reloc match. - -2021-08-18 Alan Modra - - [GOLD] PowerPC64 relocation overflow for -Os register save/restore funcs - Fixes a silly mistake in calculating the address of -Os out-of-line - register save/restore function copies. Copies of these linker defined - functions are added to stub sections when the original (in - target->savres_section) can't be reached. - - * powerpc.cc (Target_powerpc::Relocate::relocate): Correct address - calculation of out-of-line save/restore function copies. - -2021-08-18 Alan Modra - - Another ld script backtrack - * ldgram.y (length_spec): Throw away look-ahead NAME. - -2021-08-18 Mike Frysinger - - gdb: fix spacing on CCLD silent rules - - sim: nltvals: localize TARGET_ defines - Code should not be using these directly, instead they should be - resolving these dynamically via cb_host_to_target_errno maps. - Fix the Blackfin code and remove the defines out of the header - so no new code can rely on them. - -2021-08-18 Mike Frysinger - - sim: rename ChangeLog files to ChangeLog-2021 - Now that ChangeLog entries are no longer used for sim patches, - this commit renames all relevant sim ChangeLog to ChangeLog-2021, - similar to what we would do in the context of the "Start of New - Year" procedure. - - The purpose of this change is to avoid people merging ChangeLog - entries by mistake when applying existing commits that they are - currently working on. - - Also throw in a .gitignore entry to keep people from adding new - ChangeLog files anywhere in the sim tree. - -2021-08-18 GDB Administrator - - Automatic date update in version.in - -2021-08-17 Simon Marchi - - gdb: fix thread_step_over_chain_length - If I debug a single-thread program and look at the infrun debug logs, I - see: - - [infrun] start_step_over: stealing global queue of threads to step, length = 2 - - That makes no sense... turns out there's a buglet in - thread_step_over_chain_length, "num" should be initialized to 0. I - think this bug is a leftover from an earlier version of the code (not - merged upstream) that manually walked the list, where the first item was - implicitly counted (hence the 1). - - Change-Id: I0af03aa93509aed36528be5076894dc156a0b5ce - -2021-08-17 Shahab Vahedi - - opcodes: Fix the auxiliary register numbers for ARC HS - The numbers for the auxiliary registers "tlbindex" and - "tlbcommand" of ARCv2HS are incorrect. This patch makes - the following changes to correct that error. - - ,------------.-----------------.---------------. - | aux. reg. | old (incorrect) | new (correct) | - |------------+-----------------+---------------| - | tlbindex | 0x463 | 0x464 | - | tlbcommand | 0x464 | 0x465 | - `------------^-----------------^---------------' - - opcodes/ - 2021-08-17 Shahab Vahedi - - * arc-regs.h (DEF): Fix the register numbers. - -2021-08-17 H.J. Lu - - gdb: Don't assume r_ldsomap when r_version > 1 on Linux - The r_ldsomap field is specific to Solaris (part of librtld_db), and - should never be accessed for Linux. glibc is planning to add a field - to support multiple namespaces. But there will be no r_ldsomap when - r_version is bumped to 2. Add linux_[ilp32|lp64]_fetch_link_map_offsets - to set r_ldsomap_offset to -1 and use them for Linux targets. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28236 - -2021-08-17 H.J. Lu - - gdbserver: Check r_version < 1 for Linux debugger interface - Update gdbserver to check r_version < 1 instead of r_version != 1 so - that r_version can be bumped for a new field in the glibc debugger - interface to support multiple namespaces. Since so far, the gdbserver - only reads fields defined for r_version == 1, it is compatible with - r_version >= 1. - - All future glibc debugger interface changes will be backward compatible. - If there is ever the need for backward incompatible change to the glibc - debugger interface, a new DT_XXX element will be provided to access the - new incompatible interface. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=11839 - -2021-08-17 Andrea Corallo - - PATCH [4/4] arm: Add Tag_PACRET_use build attribute - bfd/ - 2021-07-06 Andrea Corallo - - * elf32-arm.c (elf32_arm_merge_eabi_attributes): Add - 'Tag_PACRET_use' case. - - binutils/ - 2021-07-06 Andrea Corallo - - * readelf.c (arm_attr_tag_PAC_extension): Declare. - (arm_attr_public_tags): Add 'PAC_extension' lookup. - - elfcpp/ - 2021-07-06 Andrea Corallo - - * arm.h: Define 'Tag_PACRET_use' enum. - - gas/ - 2021-07-06 Andrea Corallo - - * config/tc-arm.c (arm_convert_symbolic_attribute): Add - 'Tag_PACRET_use' to the attribute_table. - - include/ - 2021-07-06 Andrea Corallo - - * elf/arm.h (elf_arm_reloc_type): Add 'Tag_PACRET_use'. - -2021-08-17 Andrea Corallo - - PATCH [3/4] arm: Add Tag_BTI_use build attribute - bfd/ - 2021-07-06 Andrea Corallo - - * elf32-arm.c (elf32_arm_merge_eabi_attributes): Add - 'Tag_BTI_use' case. - - binutils/ - 2021-07-06 Andrea Corallo - - * readelf.c (arm_attr_tag_PAC_extension): Declare. - (arm_attr_public_tags): Add 'PAC_extension' lookup. - - elfcpp/ - 2021-07-06 Andrea Corallo - - * arm.h: Define 'Tag_BTI_use' enum. - - gas/ - 2021-07-06 Andrea Corallo - - * config/tc-arm.c (arm_convert_symbolic_attribute): Add - 'Tag_BTI_use' to the attribute_table. - - include/ - 2021-07-06 Andrea Corallo - - * elf/arm.h (elf_arm_reloc_type): Add 'Tag_BTI_use'. - -2021-08-17 Andrea Corallo - - PATCH [2/4] arm: Add Tag_BTI_extension build attribute - bfd/ - 2021-07-06 Andrea Corallo - - * elf32-arm.c (elf32_arm_merge_eabi_attributes): Add - 'Tag_BTI_extension' case. - - binutils/ - 2021-07-06 Andrea Corallo - - * readelf.c (arm_attr_tag_PAC_extension): Declare. - (arm_attr_public_tags): Add 'PAC_extension' lookup. - - elfcpp/ - 2021-07-06 Andrea Corallo - - * arm.h: Define 'Tag_BTI_extension' enum. - - gas/ - 2021-07-06 Andrea Corallo - - * config/tc-arm.c (arm_convert_symbolic_attribute): Add - 'Tag_BTI_extension' to the attribute_table. - - include/ - 2021-07-06 Andrea Corallo - - * elf/arm.h (elf_arm_reloc_type): Add 'Tag_BTI_extension'. - -2021-08-17 Andrea Corallo - - PATCH [1/4] arm: Add Tag_PAC_extension build attribute - bfd/ - 2021-07-06 Andrea Corallo - - * elf32-arm.c (elf32_arm_merge_eabi_attributes): Add - 'Tag_PAC_extension' case. - - binutils/ - 2021-07-06 Andrea Corallo - - * readelf.c (arm_attr_tag_PAC_extension): Declare. - (arm_attr_public_tags): Add 'PAC_extension' lookup. - - elfcpp/ - 2021-07-06 Andrea Corallo - - * arm.h: Define 'Tag_PAC_extension' enum. - - gas/ - 2021-07-06 Andrea Corallo - - * config/tc-arm.c (arm_convert_symbolic_attribute): Add - 'Tag_PAC_extension' to the attribute_table. - - include/ - 2021-07-06 Andrea Corallo - - * elf/arm.h (elf_arm_reloc_type): Add 'Tag_PAC_extension'. - -2021-08-17 H.J. Lu - - x86: Always run fp tests - Always run fp tests since the size of .tfloat, .ds.x, .dc.x and .dcb.x - directive outputs is always 10 bytes. There is no need for fp-elf32 nor - fp-elf64. - - PR gas/28230 - * testsuite/gas/i386/fp-elf32.d: Removed. - * testsuite/gas/i386/fp-elf64.d: Likewise. - * testsuite/gas/i386/fp.s: Remove NO_TFLOAT_PADDING codes. - * testsuite/gas/i386/i386.exp: Don't run fp-elf32 nor fp-elf64. - Always run fp. - -2021-08-17 GDB Administrator - - Automatic date update in version.in - -2021-08-16 H.J. Lu - - x86: Don't pad .tfloat directive output - .tfloat output should always be 10 bytes without padding, independent - of psABIs. In glibc, x86 assembly codes expect 10-byte .tfloat output. - This also reduces .ds.x output and .tfloat output with hex input from - 12 bytes to 10 bytes to match .tfloat output. - - PR gas/28230 - * NEWS: Mention changes of .ds.x output and .tfloat output with - hex input. - * config/tc-i386.c (x86_tfloat_pad): Removed. - * config/tc-i386.h (X_PRECISION_PAD): Changed to 0. - (x86_tfloat_pad): Removed. - * testsuite/gas/i386/fp.s: If NO_TFLOAT_PADDING isn't defined, - add explicit paddings after .tfloat, .ds.x, .dc.x and .dcb.x - directives. - * testsuite/gas/i386/i386.exp (ASFLAGS): Append - "--defsym NO_TFLOAT_PADDING=1" when running the fp test. - -2021-08-16 Tom Tromey - - Fix register regression in DWARF evaluator - On an internal test case, using an arm-elf target, commit ba5bc3e5a92 - ("Make DWARF evaluator return a single struct value") causes a - regression. (It doesn't happen for any of the other cross targets - that I test when importing upstream gdb.) - - I don't know if there's an upstream gdb test case showing the same - problem... I can only really run native tests with dejagnu AFAIK. - - The failure manifests like this: - - Breakpoint 1, file_1.export_1 (param_1=, str=...) at [...]/file_1.adb:5 - - Whereas when it works it looks like: - - Breakpoint 1, file_1.export_1 (param_1=99.0, str=...) at [...]/file_1.adb:5 - - The difference is that the new code uses the passed-in gdbarch, - whereas the old code used the frame's gdbarch, when handling - DWARF_VALUE_REGISTER. - - This patch restores the use of the frame's arch. - -2021-08-16 Tom Tromey - - Fix Ada regression due to DWARF expression series - Commit 0579205aec4 ("Simplify dwarf_expr_context class interface") - caused a regression in the internal AdaCore test suite. I didn't try - to reproduce this with the GDB test suite, but the test is identical - to gdb.dwarf2/dynarr-ptr.exp. - - The problem is that this change: - - case DW_OP_push_object_address: - /* Return the address of the object we are currently observing. */ - - if (this->data_view.data () == nullptr - - && this->obj_address == 0) - + if (this->m_addr_info == nullptr) - - ... slightly changes the logic here. In particular, it's possible for - the caller to pass in a non-NULL m_addr_info, but one that looks like: - - (top) p *this.m_addr_info - $15 = { - type = 0x29b7a70, - valaddr = { - m_array = 0x0, - m_size = 0 - }, - addr = 0, - next = 0x0 - } - - In this case, an additional check is needed. With the current code, - what happens instead is that the computation computes an incorrect - address -- but one that does not fail in read_memory, due to the - precise memory map of the embedded target in question. - - This patch restores the old logic. - -2021-08-16 Patrick Monnerat - - Notify observer of breakpoint auto-disabling - As breakpoint_modified observer is currently notified upon breakpoint stop - before handling auto-disabling when enable count is reached, the observer - is never notified of the disabling. - - The problem affects: - - The MI interpreter enabled= value when reporting =breakpoint-modified - - A Python event handler for breakpoint_modified using the "enabled" - member of its parameter - - insight: breakpoint GUI window is not properly updated upon auto-disable - - This patch moves the observer notification after the auto-disabling - code and implements corresponding tests for the MI and Python cases. - - Fixes https://sourceware.org/bugzilla/show_bug.cgi?id=23336 - - Change-Id: I0c50df4789334071e5390cb46b3ca0d4a7f83c61 - -2021-08-16 H.J. Lu - - as: Replace the removed symbol with the versioned symbol - When a symbol removed by .symver is used in relocation and there is one - and only one versioned symbol, don't remove the symbol. Instead, mark - it to be removed and replace the removed symbol used in relocation with - the versioned symbol before generating relocation. - - PR gas/28157 - * symbols.c (symbol_flags): Add removed. - (symbol_entry_find): Updated. - (symbol_mark_removed): New function. - (symbol_removed_p): Likewise. - * symbols.h (symbol_mark_removed): New prototype. - (symbol_removed_p): Likewise. - * write.c (write_relocs): Call obj_fixup_removed_symbol on - removed fixp->fx_addsy and fixp->fx_subsy if defined. - (set_symtab): Don't add a symbol if symbol_removed_p returns true. - * config/obj-elf.c (elf_frob_symbol): Don't remove the symbol - if it is used on relocation. Instead, mark it as to be removed - and issue an error if the symbol has more than one versioned name. - (elf_fixup_removed_symbol): New function. - * config/obj-elf.h (elf_fixup_removed_symbol): New prototype. - (obj_fixup_removed_symbol): New. - * testsuite/gas/symver/symver11.d: Updated expected error - message. - * testsuite/gas/symver/symver16.d: New file. - * testsuite/gas/symver/symver16.s: Likewise. - -2021-08-16 GDB Administrator - - Automatic date update in version.in - -2021-08-15 GDB Administrator - - Automatic date update in version.in - -2021-08-14 Alan Modra - - ld script fill pattern expression - It turns out we do need to backtrack when parsing after all. The - fill_opt component in the section rule swiches to EXPRESSION and back - to SCRIPT, and to find the end of an expression it is necessary to - look ahead one token. - - * ldgram.y (section): Throw away lookahead NAME token. - (overlay_section): Likewise. - * testsuite/ld-elf/overlay.t: Add fill pattern on overlays. - Test fill pattern before stupidly named normal sections too, - and before /DISCARD/. - -2021-08-14 GDB Administrator - - Automatic date update in version.in - -2021-08-13 Alan Modra - - ld lexer tidy, possibly break the world - This tidies the states in which ld lexer rules are enabled. - This change will quite likely trip over issues similar to those - mentioned in the new ldlex.l comments, so please test it out. - - * ldgram.y (wildcard_name): Remove now unnecessary components. - * ldlex.l: Restrict many rules' states. Remove -l expression - state rule. Comment on lookahead state madness and need for - /DISCARD/ in expression state. - -2021-08-13 Alan Modra - - ld script lower-case absolute and sizeof_headers - I think these happened by accident, so let's see what breaks if they - are removed. - - * ldlex.l: Remove lower case "absolute" and "sizeof_headers" - in non-mri mode. - * ld.texi: Remove sizeof_headers index. - * testsuite/ld-mmix/mmohdr1.ld: Use SIZEOF_HEADERS. - -2021-08-13 Alan Modra - - tidy mri script extern - MRI mode generally doesn't flip lexer states, so let's make MRI mode - "extern" not do so either. - - * ldgram.y (extern_name_list): Don't change lex state here. - (ifile_p1): Change state here on EXTERN instead. - -2021-08-13 Alan Modra - - Re: PR28217, Syntax error when memory region contains a hyphen - I discovered some more errors when tightening up the lexer rules. - Just because we INCLUDE a file doesn't mean we've switched states. - - PR 28217 - * ldgram.y (statement): Don't switch lexer state on INCLUDE. - (mri_script_command, ifile_p1, memory_spec, section): Likewise. - -2021-08-13 Lifang Xia - - PR28168: [CSKY] Fix stack overflow in disassembler - PR 28168: - Stack overflow with a large float. %f is not a goot choice for this. - %f should be replaced with %.7g. - - gas/ - * testsuite/gas/csky/pr28168.d: New testcase for PR 28168. - * testsuite/gas/csky/pr28168.s: Likewise. - * testsuite/gas/csky/v2_float_part2.d: Following the new format. - * opcodes/csky-dis.c (csky_output_operand): %.7g replaces %f. - -2021-08-13 Alan Modra - - PR28217, Syntax error when memory region contains a hyphen - The saga of commit 40726f16a8d7 continues. This attacks the problem - of switching between SCRIPT and EXPRESSION state lexing by removing - the need to do so for phdrs like ":text". Instead {WILDCHAR}* - matching, the reason why ":text" lexed as one token, is restricted to - within the braces of a section or overlay statement. The new WILD - lexer state is switched at the non-optional brace tokens, so - ldlex_backup is no longer needed. I've also removed the BOTH state, - which doesn't seem to be needed any more. Besides rules involving - error reporting, there was just one place where SCRIPT appeared - without BOTH, the {WILDCHAR}* rule, three where BOTH appears without - SCRIPT for tokens that only need EXPRESSION state, and two where BOTH - appears alongside INPUT_LIST. (Since I'm editing the wild and - filename rules, removing BOTH and adding WILD can also be seen as - renaming the old BOTH state to SCRIPT and renaming the old SCRIPT - state to WILD with a reduced scope.) - - As a followup, I'll look at removing EXPRESSION state from some lexer - rules that no longer need it due to this cleanup. - - PR 28217 - * ldgram.y (exp ): Use paren_script_name. - (section): Parse within braces of section in wild mode, and - after brace back in script mode. Remove ldlex_backup call. - Similarly for OVERLAY. - (overlay_section): Similarly. - (script_file): Replace ldlex_both with ldlex_script. - * ldlex.h (ldlex_wild): Declare. - (ldlex_both): Delete. - * ldlex.l (BOTH): Delete. Remove state from all rules. - (WILD): New state. Enable many tokens in this state. - Enable filename match in SCRIPT mode. Enable WILDCHAR match - in WILD state, disable in SCRIPT mode. - (ldlex_wild): New function. - * ldfile.c (ldfile_try_open_bfd): Replace ldlex_both call with - ldlex_script. - -2021-08-13 Alan Modra - - ns32k configury - Since ns32k-netbsd is as yet not removed, just marked obsolete, - the target should still be accepted with --enable-obsolete. - - I also enabled ns32k-openbsd in ld since there doesn't seem to be a - good reason why that target is not supported there but is elsewhere. - - bfd/ - * config.bfd: Allow ns32k-netbsd. - ld/ - * configure.tgt: Allow ns32k-openbsd. - -2021-08-13 GDB Administrator - - Automatic date update in version.in - -2021-08-13 Lancelot SIX - - gdb: riscv_scan_prologue: handle LD and LW instructions - While working on the testsuite, I ended up noticing that GDB fails to - produce a full backtrace from a thread waiting in pthread_join. When - selecting the waiting thread and using the 'bt' command, the following - result can be observed: - - (gdb) bt - #0 0x0000003ff7fccd20 in __futex_abstimed_wait_common64 () from /lib/riscv64-linux-gnu/libpthread.so.0 - #1 0x0000003ff7fc43da in __pthread_clockjoin_ex () from /lib/riscv64-linux-gnu/libpthread.so.0 - Backtrace stopped: frame did not save the PC - - On my platform, I do not have debug symbols for glibc, so I need to rely - on prologue analysis in order to unwind stack. - - Here is what the function prologue looks like: - - (gdb) disassemble __pthread_clockjoin_ex - Dump of assembler code for function __pthread_clockjoin_ex: - 0x0000003ff7fc42de <+0>: addi sp,sp,-144 - 0x0000003ff7fc42e0 <+2>: sd s5,88(sp) - 0x0000003ff7fc42e2 <+4>: auipc s5,0xd - 0x0000003ff7fc42e6 <+8>: ld s5,-2(s5) # 0x3ff7fd12e0 - 0x0000003ff7fc42ea <+12>: ld a5,0(s5) - 0x0000003ff7fc42ee <+16>: sd ra,136(sp) - 0x0000003ff7fc42f0 <+18>: sd s0,128(sp) - 0x0000003ff7fc42f2 <+20>: sd s1,120(sp) - 0x0000003ff7fc42f4 <+22>: sd s2,112(sp) - 0x0000003ff7fc42f6 <+24>: sd s3,104(sp) - 0x0000003ff7fc42f8 <+26>: sd s4,96(sp) - 0x0000003ff7fc42fa <+28>: sd s6,80(sp) - 0x0000003ff7fc42fc <+30>: sd s7,72(sp) - 0x0000003ff7fc42fe <+32>: sd s8,64(sp) - 0x0000003ff7fc4300 <+34>: sd s9,56(sp) - 0x0000003ff7fc4302 <+36>: sd a5,40(sp) - - As far as prologue analysis is concerned, the most interesting part is - done at address 0x0000003ff7fc42ee (<+16>): 'sd ra,136(sp)'. This stores - the RA (return address) register on the stack, which is the information - we are looking for in order to identify the caller. - - In the current implementation of the prologue scanner, GDB stops when - hitting 0x0000003ff7fc42e6 (<+8>) because it does not know what to do - with the 'ld' instruction. GDB thinks it reached the end of the - prologue but have not yet reached the important part, which explain - GDB's inability to unwind past this point. - - The section of the prologue starting at <+4> until <+12> is used to load - the stack canary[1], which will then be placed on the stack at <+36> at - the end of the prologue. - - In order to have the prologue properly handled, this commit proposes to - add support for the ld instruction in the RISC-V prologue scanner. - I guess riscv32 would use lw in such situation so this patch also adds - support for this instruction. - - With this patch applied, gdb is now able to unwind past pthread_join: - - (gdb) bt - #0 0x0000003ff7fccd20 in __futex_abstimed_wait_common64 () from /lib/riscv64-linux-gnu/libpthread.so.0 - #1 0x0000003ff7fc43da in __pthread_clockjoin_ex () from /lib/riscv64-linux-gnu/libpthread.so.0 - #2 0x0000002aaaaaa88e in bar() () - #3 0x0000002aaaaaa8c4 in foo() () - #4 0x0000002aaaaaa8da in main () - - I have had a look to see if I could reproduce this easily, but in my - simple testcases using '-fstack-protector-all', the canary is loaded - after the RA register is saved. I do not have a reliable way of - generating a prologue similar to the problematic one so I forged one - instead. - - The testsuite have been run on riscv64 ubuntu 21.01 with no regression - observed. - - [1] https://en.wikipedia.org/wiki/Buffer_overflow_protection#Canaries - -2021-08-12 Tom Tromey - - Update documentation to mention Pygments - Philippe Blain pointed out that the gdb documentation does not mention - that Pygments may be used for source highlighting. This patch updates - the docs to reflect how highlighting is actually done. - -2021-08-12 Simon Marchi - - gdb: make gdbarch_printable_names return a vector - I noticed that gdbarch_selftest::operator() leaked the value returned by - gdbarch_printable_names. Make gdbarch_printable_names return an - std::vector and update callers. That makes it easier for everyone - involved, less manual memory management. - - Change-Id: Ia8fc028bdb91f787410cca34f10bf3c5a6da1498 - -2021-08-12 Carl Love - - Improve forward progress test in python.exp - The test steps into func2 and than does an up to get back to the previous - frame. The test checks that the line number you are at after the up command - is greater than the line where the function was called from. The - assembly/codegen for the powerpc target includes a NOP after the - branch-link. - - func2 (); /* Break at func2 call site. / - 10000694: 59 00 00 48 bl 100006ec - 10000698: 00 00 00 60 nop - return 0; / Break to end. */ - 1000069c: 00 00 20 39 li r9,0 - - The PC at the instruction following the branch-link is 0x10000698 which - GDB.find_pc_line() maps to the same line number as the bl instruction. - GDB did move past the branch-link location thus making forward progress. - - The following proposed fix adds an additional PC check to see if forward - progress was made. The line test is changed from greater than to greater - than or equal. - -2021-08-12 Jiangshuai Li - - gdb:csky rm tdesc_has_registers in csky_register_name - As CSKY arch has not parsed target-description.xml in csky_gdbarch_init, - when a remote server, like csky-qemu or gdbserver, send a target-description.xml - to gdb, tdesc_has_registers will return ture, but tdesc_register_name (gdbarch, 0) - will return NULL, so a cmd "info registers r0" will not work. - - Function of parsing target-description.xml will be add later for CSKY arch, - now it is temporarily removed to allow me to do other supported tests. - - 2021-07-15 Jiangshuai Li - - * csky-tdep.c : not using tdesc funtions in csky_register_name - -2021-08-12 Alan Modra - - Re: gas: support NaN flavors - Fixes tic4x-coff FAIL: simple FP constants - - * testsuite/gas/all/float.s: Make NaN tests conditional on hasnan. - * testsuite/gas/all/gas.exp: Define hasnan. - -2021-08-12 GDB Administrator - - Automatic date update in version.in - -2021-08-11 H.J. Lu - - ld: Update the pass and fail strings of PR ld/28138 test - PR ld/28138 - * testsuite/ld-plugin/lto.exp: Update the pass and fail strings - of PR ld/28138 test to indicate which part of the test passed - and failed. - -2021-08-11 Darius Galis - - Fix a typo in the RX asse,bler. The Double-precision floating-point exception handling control register name is DECNT not DCENT. - * config/rx-parse.y (DECNT): Fixed typo. - * testsuite/gas/rx/dpopm.sm (DECNT): Fixed typo. - * testsuite/gas/rx/dpushm.sm (DECNT): Fixed typo. - * testsuite/gas/rx/macros.inc (DECNT): Fixed typo. - -2021-08-11 Nick Clifton - - Fix an internal error in the CSKY assembler when asked to resolve an overlarge constant. - PR 28215 - * config/tc-csky.c (md_apply_fix): Correctly handle a fixup that - involves an overlarge constant. - -2021-08-11 Luis Machado - - Add 3 new PAC-related ARM note types - The following patch synchronizes includes/objdump/readelf with the Linux - Kernel in terms of ARM regset notes. - - We're currently missing 3 of them: - - NT_ARM_PACA_KEYS - NT_ARM_PACG_KEYS - NT_ARM_PAC_ENABLED_KEYS - - We don't need GDB to bother with this at the moment, so this doesn't update - bfd/elf.c. If needed, we can do it in the future. - - binutils/ - - * readelf.c (get_note_type): Handle new ARM PAC notes. - - include/elf/ - - * common.h (NT_ARM_PACA_KEYS, NT_ARM_PACG_KEYS) - (NT_ARM_PAC_ENABLED_KEYS): New constants. - -2021-08-11 Nick Clifton - - Updated Portuguese translation for the binutils sub-directory. - -2021-08-11 John Ericson - - Deprecate a.out support for NetBSD targets. - As discussed previously, a.out support is now quite deprecated, and in - some cases removed, in both Binutils itself and NetBSD, so this legacy - default makes little sense. `netbsdelf*` and `netbsdaout*` still work - allowing the user to be explicit about there choice. Additionally, the - configure script warns about the change as Nick Clifton requested. - - One possible concern was the status of NetBSD on NS32K, where only a.out - was supported. But per [1] NetBSD has removed support, and if it were to - come back, it would be with ELF. The binutils implementation is - therefore marked obsolete, per the instructions in the last message. - - With that patch and this one applied, I have confirmed the following: - - --target=i686-unknown-netbsd - --target=i686-unknown-netbsdelf - builds completely - - --target=i686-unknown-netbsdaout - properly fails because target is deprecated. - - --target=vax-unknown-netbsdaout builds completely except for gas, where - the target is deprecated. - - [1]: https://mail-index.netbsd.org/tech-toolchain/2021/07/19/msg004025.html - --- - bfd/config.bfd | 43 +++++++++++++-------- - bfd/configure.ac | 5 +-- - binutils/testsuite/binutils-all/nm.exp | 2 +- - binutils/testsuite/lib/binutils-common.exp | 7 +--- - config/picflag.m4 | 4 +- - gas/configure.tgt | 9 +++-- - gas/testsuite/gas/arm/blx-bl-convert.d | 2 +- - gas/testsuite/gas/arm/blx-local-thumb.d | 2 +- - gas/testsuite/gas/sh/basic.exp | 2 +- - gdb/configure.host | 34 +++++++---------- - gdb/configure.tgt | 2 +- - gdb/testsuite/gdb.asm/asm-source.exp | 6 +-- - intl/configure | 2 +- - ld/configure.tgt | 44 +++++++++++----------- - ld/testsuite/ld-arm/arm-elf.exp | 4 +- - ld/testsuite/ld-elf/elf.exp | 2 +- - ld/testsuite/ld-elf/shared.exp | 4 +- - libiberty/configure | 4 +- - -2021-08-11 Andrew Burgess - - gdb: don't print backtrace when dumping core after an internal error - Currently, when GDB hits an internal error, and the user selects to - dump core, the recently added feature to write a backtrace to the - console will kick in, and print a backtrace as well as dumping the - core. - - This was certainly not my intention when adding the backtrace on fatal - signal functionality, this feature was intended to produce a backtrace - when GDB crashes due to some fatal signal, internal errors should have - continued to behave as they did before, unchanged. - - In this commit I set the signal disposition of SIGABRT back to SIG_DFL - just prior to the call to abort() that GDB uses to trigger the core - dump, this prevents GDB reaching the code that writes the backtrace to - the console. - - I've also added a test that checks we don't see a backtrace on the - console after an internal error. - -2021-08-11 Andrew Burgess - - gdb: register SIGBUS, SIGFPE, and SIGABRT handlers - Register handlers for SIGBUS, SIGFPE, and SIGABRT. All of these - signals are setup as fatal signals that will cause GDB to terminate. - However, by passing these signals through the handle_fatal_signal - function, a user can arrange to see a backtrace when GDB - terminates (see maint set backtrace-on-fatal-signal). - - In normal use of GDB there should be no user visible changes after - this commit. Only if GDB terminates with one of the above signals - will GDB change slightly, potentially printing a backtrace before - aborting. - - I've added new tests for SIGFPE, SIGBUS, and SIGABRT. - -2021-08-11 Andrew Burgess - - gdb: print backtrace on fatal SIGSEGV - This commit adds a new maintenance feature, the ability to print - a (limited) backtrace if GDB dies due to a fatal signal. - - The backtrace is produced using the backtrace and backtrace_symbols_fd - functions which are declared in the execinfo.h header, and both of - which are async signal safe. A configure check has been added to - check for these features, if they are not available then the new code - is not compiled into GDB and the backtrace will not be printed. - - The motivation for this new feature is to aid in debugging GDB in - situations where GDB has crashed at a users site, but the user is - reluctant to share core files, possibly due to concerns about what - might be in the memory image within the core file. Such a user might - be happy to share a simple backtrace that was written to stderr. - - The production of the backtrace is on by default, but can switched off - using the new commands: - - maintenance set backtrace-on-fatal-signal on|off - maintenance show backtrace-on-fatal-signal - - Right now, I have hooked this feature in to GDB's existing handling of - SIGSEGV only, but this will be extended to more signals in a later - commit. - - One additional change I have made in this commit is that, when we - decide GDB should terminate due to the fatal signal, we now - raise the same fatal signal rather than raising SIGABRT. - - Currently, this is only effecting our handling of SIGSEGV. So, - previously, if GDB hit a SEGV then we would terminate GDB with a - SIGABRT. After this commit we will terminate GDB with a SIGSEGV. - - This feels like an improvement to me, we should still get a core dump, - but in many shells, the user will see a more specific message once GDB - exits, in bash for example "Segmentation fault" rather than "Aborted". - - Finally then, here is an example of the output a user would see if GDB - should hit an internal SIGSEGV: - - Fatal signal: Segmentation fault - ----- Backtrace ----- - ./gdb/gdb[0x8078e6] - ./gdb/gdb[0x807b20] - /lib64/libpthread.so.0(+0x14b20)[0x7f6648c92b20] - /lib64/libc.so.6(__poll+0x4f)[0x7f66484d3a5f] - ./gdb/gdb[0x1540f4c] - ./gdb/gdb[0x154034a] - ./gdb/gdb[0x9b002d] - ./gdb/gdb[0x9b014d] - ./gdb/gdb[0x9b1aa6] - ./gdb/gdb[0x9b1b0c] - ./gdb/gdb[0x41756d] - /lib64/libc.so.6(__libc_start_main+0xf3)[0x7f66484041a3] - ./gdb/gdb[0x41746e] - --------------------- - A fatal error internal to GDB has been detected, further - debugging is not possible. GDB will now terminate. - - This is a bug, please report it. For instructions, see: - . - - Segmentation fault (core dumped) - - It is disappointing that backtrace_symbols_fd does not actually map - the addresses back to symbols, this appears, in part, to be due to GDB - not being built with -rdynamic as the manual page for - backtrace_symbols_fd suggests, however, even when I do add -rdynamic - to the build of GDB I only see symbols for some addresses. - - We could potentially look at alternative libraries to provide the - backtrace (e.g. libunwind) however, the solution presented here, which - is available as part of glibc is probably a good baseline from which - we might improve things in future. - -2021-08-11 Andrew Burgess - - gdb: rename async_init_signals to gdb_init_signals - The async_init_signals has, for some time, dealt with async and sync - signals, so removing the async prefix makes sense I think. - - Additionally, as pointed out by Pedro: - - ..... - - The comments relating to SIGTRAP and SIGQUIT within this function are - out of date. - - The comments for SIGTRAP talk about the signal disposition (SIG_IGN) - being passed to the inferior, meaning the signal disposition being - inherited by GDB's fork children. However, we now call - restore_original_signals_state prior to forking, so the comment on - SIGTRAP is redundant. - - The comments for SIGQUIT are similarly out of date, further, the - comment on SIGQUIT talks about problems with BSD4.3 and vfork, - however, we have not supported BSD4.3 for several years now. - - Given the above, it seems that changing the disposition of SIGTRAP is - no longer needed, so I've deleted the signal() call for SIGTRAP. - - Finally, the header comment on the function now called - gdb_init_signals was getting quite out of date, so I've updated it - to (hopefully) better reflect reality. - - There should be no user visible change after this commit. - -2021-08-11 Andrew Burgess - - gdb: register signal handler after setting up event token - This commit fixes the smallest of small possible bug related to signal - handling. If we look in async_init_signals we see code like this: - - signal (SIGQUIT, handle_sigquit); - sigquit_token = - create_async_signal_handler (async_do_nothing, NULL, "sigquit"); - - Then if we look in handle_sigquit we see code like this: - - mark_async_signal_handler (sigquit_token); - signal (sig, handle_sigquit); - - Finally, in mark_async_signal_handler we have: - - async_handler_ptr->ready = 1; - - Where async_handler_ptr will be sigquit_token. - - What this means is that if a SIGQUIT arrive in async_init_signals - after handle_sigquit has been registered, but before sigquit_token has - been initialised, then GDB will most likely crash. - - The chance of this happening is tiny, but fixing this is trivial, just - ensure we call create_async_signal_handler before calling signal, so - lets do that. - - There are no tests for this. Trying to land a signal in the right - spot is pretty hit and miss. I did try changing the current HEAD GDB - like this: - - signal (SIGQUIT, handle_sigquit); - raise (SIGQUIT); - sigquit_token = - create_async_signal_handler (async_do_nothing, NULL, "sigquit"); - - And confirmed that this did result in a crash, after my change I tried - this: - - sigquit_token = - create_async_signal_handler (async_do_nothing, NULL, "sigquit"); - signal (SIGQUIT, handle_sigquit); - raise (SIGQUIT); - - And GDB now starts up just fine. - - gdb/ChangeLog: - - * event-top.c (async_init_signals): For each signal, call signal - only after calling create_async_signal_handler. - -2021-08-11 Andrew Burgess - - gdb: terminate upon receipt of SIGFPE - GDB's SIGFPE handling is broken, this is PR gdb/16505 and - PR gdb/17891. - - We currently try to use an async event token to process SIGFPE. So, - when a SIGFPE arrives the signal handler calls - mark_async_signal_handler then returns, effectively ignoring the - signal (for now). - - The intention is that later the event loop will see that the async - token associated with SIGFPE has been marked and will call the async - handler, which just throws an error. - - The problem is that SIGFPE is not safe to ignore. Ignoring a - SIGFPE (unless it is generated artificially, e.g. by raise()) is - undefined behaviour, after ignoring the signal on many targets we - return to the instruction that caused the SIGFPE to be raised, which - immediately causes another SIGFPE to be raised, we get stuck in an - infinite loop. The behaviour is certainly true on x86-64. - - To view this behaviour I simply added some dummy code to GDB that - performed an integer divide by zero, compiled this on x86-64 - GNU/Linux, ran GDB and saw GDB hang. - - In this commit, I propose to remove all special handling of SIGFPE and - instead just let GDB make use of the default SIGFPE action, that is, - to terminate the process. - - The only user visible change here should be: - - - If a user sends a SIGFPE to GDB using something like kill, - previously GDB would just print an error and remain alive, now GDB - will terminate. This is inline with what happens if the user - sends GDB a SIGSEGV from kill though, so I don't see this as an - issue. - - - If a bug in GDB causes a real SIGFPE, previously the users GDB - session would hang. Now the GDB session will terminate. Again, - this is inline with what happens if GDB receives a SIGSEGV due to - an internal bug. - - In bug gdb/16505 there is mention that it would be nice if GDB did - more than just terminate when receiving a fatal signal. I haven't - done that in this commit, but later commits will move in that - direction. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=16505 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17891 - -2021-08-11 Alan Modra - - PR28198, Support # as linker script comment marker - PR 28198 - * ldlex.l: Combine rules for handling newline, whitespace and - comments. Extend # comment handling to all states. - -2021-08-11 Alan Modra - - ldgram.y tidies - I've been tripped up before thinking the "end" rule was the "END" - token. Let's use a better name. The formatting changes are for - consistency within rules, and making it a little easier to visually - separate tokens from mid-rule actions. - - * ldgram.y (separator): Rename from "end". Update uses. - (statement): Formatting. Move ';' match to beginning. - (paren_script_name): Formatting. Simplify. - (must_be_exp, section): Formatting. - -2021-08-11 Alan Modra - - Mention whitespace in script expressions - Inside an output section statement, ld's parser can't tell whether a - line - .+=4; - is an assignment to dot or a file named ".+=4". - - * ld.texi (expressions): Mention need for whitespace. - -2021-08-11 Matt Jacobson - - Add a -mno-dollar-line-separator command line option to the AVR assembler. - Some frontends, like the gcc Objective-C frontend, emit symbols with $ - characters in them. The AVR target code in gas treats $ as a line separator, - so the code doesn?t assemble correctly. - - Provide a machine-specific option to disable treating $ as a line separator. - - * config/tc-avr.c (enum options): Add option flag. - (struct option): Add option -mno-dollar-line-separator. - (md_parse_option): Adjust treatment of $ when option is present. - * config/tc-avr.h: Use avr_line_separator_chars. - -2021-08-11 Nick Clifton - - Fix typo in previous delta - -2021-08-11 Jan Beulich - - gas: fold IEEE encoding of -Inf with that of +Inf - The respective results differ only by the sign bits - there's no need to - have basically identical (partially even arch-specific) logic twice. - Simply set the sign bit at the end of encoding the various formats. - -2021-08-11 Jan Beulich - - gas: support NaN flavors - Like for infinity, there isn't just a single NaN. The sign bit may be - of interest and, going beyond infinity, whether the value is quiet or - signalling may be even more relevant to be able to encode. - - Note that an anomaly with x86'es double extended precision NaN values - gets taken care of at the same time: For all other formats a positive - value with all mantissa bits set was used, while here a negative value - with all non-significant mantissa bits clear was chose for an unknown - reason. - - For m68k, since I don't know their X_PRECISION floating point value - layout, a warning gets issued if any of the new flavors was attempted - to be encoded that way. However likely it may be that, given that the - code lives in a source file supposedly implementing IEEE-compliant - formats, the bit patterns of the individual words match x86'es, I didn't - want to guess so. And my very, very old paper doc doesn't even mention - floating point formats other than single and double. - -2021-08-11 Jan Beulich - - Arm64: leave .bfloat16 processing to common code - With x86 support having been implemented by extending atof-ieee.c, avoid - unnecessary code duplication in md_atof(). This will then also allow to - take advantage of adjustments made there without needing to mirror them - here. - - Arm32: leave more .bfloat16 processing to common code - With x86 support having been implemented by extending atof-ieee.c, avoid - unnecessary code duplication in md_atof(). This will then also allow to - take advantage of adjustments made there without needing to mirror them - here. - - gas: make 2nd argument of .dcb.* consistently optional - Unlike the forms consuming/producing integer data, the floating point - ones so far required the 2nd argument to be present, contrary to - documentation. To avoid code duplication, split float_length() out of - hex_float() (taking the opportunity to adjust error message wording). - -2021-08-11 Jan Beulich - - x86: introduce .bfloat16 directive - This is to be able to generate data acted upon by AVX512-BF16 and - AMX-BF16 insns. While not part of the IEEE standard, the format is - sufficiently standardized to warrant handling in config/atof-ieee.c. - Arm, where custom handling was implemented, may want to leverage this as - well. To be able to also use the hex forms supported for other floating - point formats, a small addition to the generic hex_float() is needed. - - Extend existing x86 testcases. - -2021-08-11 Jan Beulich - - x86: introduce .hfloat directive - This is to be able to generate data passed to {,V}CVTPH2PS and acted - upon by AVX512-FP16 insns. To be able to also use the hex forms - supported for other floating point formats, a small addition to the - generic hex_float() is needed. - - Extend existing x86 testcases. - -2021-08-11 Jan Beulich - - x86/ELF: fix .tfloat output with hex input - The ELF psABI-s are quite clear here: On 32-bit the data type is 12 - bytes long (with 2 bytes of trailing padding), while on 64-bit it is 16 - bytes long (with 6 bytes of padding). Make hex_float() capable of - handling such padding. - - Note that this brings the emitted data size of .dc.x / .dcb.x in line - also for non-ELF targets; so far they were different depending on input - format (dec vs hex). - - Extend the existing x86 testcases. - -2021-08-11 Jan Beulich - - x86/ELF: fix .ds.x output - The ELF psABI-s are quite clear here: On 32-bit the underlying data type - is 12 bytes long (with 2 bytes of trailing padding), while on 64-bit it - is 16 bytes long (with 6 bytes of padding). Make s_space() capable of - handling 'x' (and 'p') type floating point being other than 12 bytes - wide (also adjusting documentation). This requires duplicating the - definition of X_PRECISION in the target speciifc header; the compiler - would complain if this was out of sync with config/atof-ieee.c. - - Note that for now padding space doesn't get separated from actual - storage, which means that things will work correctly only for little- - endian cases, and which also means that by specifying large enough - numbers padding space can be set to non-zero. Since the logic is needed - for a single little-endian architecture only for now, I'm hoping that - this might be acceptable for the time being; otherwise the change will - become more intrusive. - - Note also that this brings the emitted data size of .ds.x vs .tfloat in - line for non-ELF targets as well; the issue will be even more obvious - when further taking into account a subsequent patch fixing .dc.x/.dcb.x - (where output sizes currently differ depending on input format). - - Extend existing x86 testcases. - -2021-08-11 Jan Beulich - - x86/ELF: fix .tfloat output - The ELF psABI-s are quite clear here: On 32-bit the data type is 12 - bytes long (with 2 bytes of trailing padding), while on 64-bit it is 16 - bytes long (with 6 bytes of padding). Make ieee_md_atof() capable of - handling such padding, and specify the needed padding for x86 (leaving - non-ELF targets alone for now). Split the existing x86 testcase. - - x86: have non-PE/COFF BEOS be recognized as ELF - BEOS, unless explicitly requesting *-*-beospe* targets, uses standard - ELF. None of the newly enabled tests in the testsuite fail for me. - -2021-08-11 Alan Modra - - PR28163, Segment fault in function rl78_special_reloc - Relocation offset checks were completely missing in the rl78 backend, - allowing a relocation to write over memory anywhere. This was true - for rl78_special_reloc, a function primarily used when applying debug - relocations, and in rl78_elf_relocate_section used by the linker. - - This patch fixes those problems by correcting inaccuracies in the - relocation howtos, then uses those howtos to sanity check relocation - offsets before applying relocations. In addition, the patch - implements overflow checking using the howto information rather than - the ad-hoc scheme implemented in relocate_section. I implemented the - overflow checking in rl78_special_reloc too. - - * elf32-rl78.c (RL78REL, RL78_OP_REL): Add mask parameter. - (rl78_elf_howto_table): Set destination masks. Correct size and - bitsize of DIR32_REV. Correct complain_on_overflow for many relocs - as per tests in relocate_section. Add RH_SFR. Correct bitsize - for RH_SADDR. Set size to 3 and bitsize to 0 for all OP relocs. - (check_overflow): New function. - (rl78_special_reloc): Check that reloc address is within section. - Apply relocations using reloc howto. Check for overflow. - (RANGE): Delete. - (rl78_elf_relocate_section): Sanity check r_offset. Perform - overflow checking using reloc howto. - -2021-08-11 GDB Administrator - - Automatic date update in version.in - -2021-08-10 Tom Tromey - - Ignore .debug_types when reading .debug_aranges - I noticed that the fission-reread.exp test case can cause a complaint - when run with --target_board=cc-with-debug-names: - - warning: Section .debug_aranges in [...]/fission-reread has duplicate debug_info_offset 0x0, ignoring .debug_aranges. - - The bug here is that this executable has both .debug_info and - .debug_types, and both have a CU at offset 0x0. This triggers the - duplicate warning. - - Because .debug_types doesn't provide any address ranges, these CUs can - be ignored. That is, this bug turns out to be another regression from - the info/types merger patch. - - This patch fixes the problem by having this loop igore type units. - fission-reread.exp is updated to test for the bug. - -2021-08-10 Tom Tromey - - Generalize addrmap dumping - While debugging another patch series, I wanted to dump an addrmap. I - came up with this patch, which generalizes the addrmap-dumping code - from psymtab.c and moves it to addrmap.c. psymtab.c is changed to use - the new code. - -2021-08-10 Simon Marchi - - gdb: iterate only on vfork parent threads in handle_vfork_child_exec_or_exit - I spotted what I think is a buglet in proceed_after_vfork_done. After a - vfork child exits or execs, we resume all the threads of the parent. To - do so, we iterate on all threads using iterate_over_threads with the - proceed_after_vfork_done callback. Each thread is resumed if the - following condition is true: - - if (thread->ptid.pid () == pid - && thread->state == THREAD_RUNNING - && !thread->executing - && !thread->stop_requested - && thread->stop_signal () == GDB_SIGNAL_0) - - where `pid` is the pid of the vfork parent. This is not multi-target - aware: since it only filters on pid, if there is an inferior with the - same pid in another target, we could end up resuming a thread of that - other inferior. The chances of the stars aligning for this to happen - are tiny, but still. - - Fix that by iterating only on the vfork parent's threads, instead of on - all threads. This is more efficient, as we iterate on just the required - threads (inferiors have their own thread list), and we can drop the pid - check. The resulting code is also more straightforward in my opinion, - so it's a win-win. - - Change-Id: I14647da72e2bf65592e82fbe6efb77a413a4be3a - -2021-08-10 Nick Clifton - - Updated Serbian and Russian translations for various sub-directories - -2021-08-10 George Barrett - - guile: fix smob exports - Before Guile v2.1 [1], calls to `scm_make_smob_type' implicitly added - the created class to the exports list of (oop goops); v2.1+ does not - implicitly create bindings in any modules. This means that the GDB - manual subsection documenting exported types is not quite right when GDB - is linked against Guile - - * guile/scm-gsmob.c (gdbscm_make_smob_type): Export registered - smob type from the current module. - - gdb/testsuite/ChangeLog: - - 2021-06-07 George Barrett - - * gdb.guile/scm-gsmob.exp (test exports): Add tests to make - sure the smob types currently listed in the GDB manual get - exported from the (gdb) module. - - Change-Id: I7dcd791276b48dfc9edb64fc71170bbb42a6f6e7 - -2021-08-10 GDB Administrator - - Automatic date update in version.in - -2021-08-09 Nick Clifton - - GAS: DWARF-5: Ensure that the 0'th entry in the directory table contains the current working directory. - * dwarf2dbg.c (get_directory_table_entry): Ensure that dir[0] - contains current working directory. - (out_dir_and_file_list): Likewise. - * testsuite/gas/elf/dwarf-5-dir0.s: New test source file. - * testsuite/gas/elf/dwarf-5-dir0.d: New test driver. - * testsuite/gas/elf/elf.exp: Run the new test. - * testsuite/gas/elf/dwarf-5-file0.d: Adjust expected output. - * testsuite/gas/i386/dwarf5-line-1.d: Likewise. - * testsuite/gas/i386/dwarf5-line-2.d: Likewise. - -2021-08-09 GDB Administrator - - Automatic date update in version.in - -2021-08-08 Tom Tromey - - Include objfiles.h in a few .c files - I found a few .c files that rely on objfiles.h, but that only include - it indirectly, via dwarf2/read.h -> psympriv.h. If that include is - removed (something my new DWARF indexer series does), then the build - will break. - - It seemed harmless and correct to add these includes now, making the - eventual series a little smaller. - -2021-08-08 GDB Administrator - - Automatic date update in version.in - -2021-08-07 Alan Modra - - PR28186, SEGV elf.c:7991:30 in _bfd_elf_fixup_group_sections - PR 28186 - * elf.c (_bfd_elf_fixup_group_sections): Don't segfault on - objcopy/strip with NULL output_section. - -2021-08-07 Alan Modra - - PR28176, rl78 complex reloc divide by zero - This is a bit more than just preventing the divide by zero. Most of - the patch is tidying up error reporting, so that for example, linking - an object file with a reloc stack underflow produces a linker error - rather than just displaying a message that might be ignored. - - PR 28176 - * elf32-rl78.c (RL78_STACK_PUSH, RL78_STACK_POP): Delete. - (rl78_stack_push, rl78_stack_pop): New inline functions. - (rl78_compute_complex_reloc): Add status and error message params. - Use new inline stack handling functions. Report stack overflow - or underflow, and divide by zero. - (rl78_special_reloc): Return status and error message from - rl78_compute_complex_reloc. - (rl78_elf_relocate_section): Similarly. Modernise reloc error - reporting. Delete unused bfd_reloc_other case. Don't assume - DIR24S_PCREL overflow is due to undefined function. - (rl78_offset_for_reloc): Adjust to suit rl78_compute_complex_reloc. - -2021-08-07 GDB Administrator - - Automatic date update in version.in - -2021-08-06 Tom de Vries - - [gdb/symtab] Recognize .gdb_index symbol table with empty entries as empty - When reading a .gdb_index that contains a non-empty symbol table with only - empty entries, gdb doesn't recognize it as empty. - - Fix this by recognizing that the constant pool is empty, and then setting the - symbol table to empty. - - Tested on x86_64-linux. - - gdb/ChangeLog: - - 2021-08-01 Tom de Vries - - PR symtab/28159 - * dwarf2/read.c (read_gdb_index_from_buffer): Handle symbol table - filled with empty entries. - - gdb/testsuite/ChangeLog: - - 2021-08-01 Tom de Vries - - PR symtab/28159 - * gdb.dwarf2/dw2-zero-range.exp: Remove kfail. - -2021-08-06 Tom Tromey - - Unconditionally define _initialize_addrmap - The way that init.c is generated does not allow for an initialization - function to be conditionally defined -- doing so will result in a link - error. - - This patch fixes a build problem that arises from such a conditional - definition. It can be reproduce with --disable-unit-tests. - -2021-08-06 Tom de Vries - - [gdb/symtab] Fix zero address complaint for shlib - In PR28004 the following warning / Internal error is reported: - ... - $ gdb -q -batch \ - -iex "set sysroot $(pwd -P)/repro" \ - ./repro/gdb \ - ./repro/core \ - -ex bt - ... - Program terminated with signal SIGABRT, Aborted. - #0 0x00007ff8fe8e5d22 in raise () from repro/usr/lib/libc.so.6 - [Current thread is 1 (LWP 1762498)] - #1 0x00007ff8fe8cf862 in abort () from repro/usr/lib/libc.so.6 - warning: (Internal error: pc 0x7ff8feb2c21d in read in psymtab, \ - but not in symtab.) - warning: (Internal error: pc 0x7ff8feb2c218 in read in psymtab, \ - but not in symtab.) - ... - #2 0x00007ff8feb2c21e in __gnu_debug::_Error_formatter::_M_error() const \ - [clone .cold] (warning: (Internal error: pc 0x7ff8feb2c21d in read in \ - psymtab, but not in symtab.) - - ) from repro/usr/lib/libstdc++.so.6 - ... - - The warning is about the following: - - in find_pc_sect_compunit_symtab we try to find the address - (0x7ff8feb2c218 / 0x7ff8feb2c21d) in the symtabs. - - that fails, so we try again in the partial symtabs. - - we find a matching partial symtab - - however, the partial symtab has a full symtab, so - we should have found a matching symtab in the first step. - - The addresses are: - ... - (gdb) info sym 0x7ff8feb2c218 - __gnu_debug::_Error_formatter::_M_error() const [clone .cold] in \ - section .text of repro/usr/lib/libstdc++.so.6 - (gdb) info sym 0x7ff8feb2c21d - __gnu_debug::_Error_formatter::_M_error() const [clone .cold] + 5 in \ - section .text of repro/usr/lib/libstdc++.so.6 - ... - which correspond to unrelocated addresses 0x9c218 and 0x9c21d: - ... - $ nm -C repro/usr/lib/libstdc++.so.6.0.29 | grep 000000000009c218 - 000000000009c218 t __gnu_debug::_Error_formatter::_M_error() const \ - [clone .cold] - ... - which belong to function __gnu_debug::_Error_formatter::_M_error() in - /build/gcc/src/gcc/libstdc++-v3/src/c++11/debug.cc. - - The partial symtab that is found for the addresses is instead the one for - /build/gcc/src/gcc/libstdc++-v3/src/c++98/bitmap_allocator.cc, which is - incorrect. - - This happens as follows. - - The bitmap_allocator.cc CU has DW_AT_ranges at .debug_rnglist offset 0x4b50: - ... - 00004b50 0000000000000000 0000000000000056 - 00004b5a 00000000000a4790 00000000000a479c - 00004b64 00000000000a47a0 00000000000a47ac - ... - - When reading the first range 0x0..0x56, it doesn't trigger the "start address - of zero" complaint here: - ... - /* A not-uncommon case of bad debug info. - Don't pollute the addrmap with bad data. */ - if (range_beginning + baseaddr == 0 - && !per_objfile->per_bfd->has_section_at_zero) - { - complaint (_(".debug_rnglists entry has start address of zero" - " [in module %s]"), objfile_name (objfile)); - continue; - } - ... - because baseaddr != 0, which seems incorrect given that when loading the - shared library individually in gdb (and consequently baseaddr == 0), we do see - the complaint. - - Consequently, we run into this case in dwarf2_get_pc_bounds: - ... - if (low == 0 && !per_objfile->per_bfd->has_section_at_zero) - return PC_BOUNDS_INVALID; - ... - which then results in this code in process_psymtab_comp_unit_reader being - called with cu_bounds_kind == PC_BOUNDS_INVALID, which sets the set_addrmap - argument to 1: - ... - scan_partial_symbols (first_die, &lowpc, &highpc, - cu_bounds_kind <= PC_BOUNDS_INVALID, cu); - ... - and consequently, the CU addrmap gets build using address info from the - functions. - - During that process, addrmap_set_empty is called with a range that includes - 0x9c218 and 0x9c21d: - ... - (gdb) p /x start - $7 = 0x9989c - (gdb) p /x end_inclusive - $8 = 0xb200d - ... - but it's called for a function at DIE 0x54153 with DW_AT_ranges at 0x40ae: - ... - 000040ae 00000000000b1ee0 00000000000b200e - 000040b9 000000000009989c 00000000000998c4 - 000040c3 - ... - and neither range includes 0x9c218 and 0x9c21d. - - This is caused by this code in partial_die_info::read: - ... - if (dwarf2_ranges_read (ranges_offset, &lowpc, &highpc, cu, - nullptr, tag)) - has_pc_info = 1; - ... - which pretends that the function is located at addresses 0x9989c..0xb200d, - which is indeed not the case. - - This patch fixes the first problem encountered: fix the "start address of - zero" complaint warning by removing the baseaddr part from the condition. - Same for dwarf2_ranges_process. - - The effect is that: - - the complaint is triggered, and - - the warning / Internal error is no longer triggered. - - This does not fix the observed problem in partial_die_info::read, which is - filed as PR28200. - - Tested on x86_64-linux. - - Co-Authored-By: Simon Marchi - - gdb/ChangeLog: - - 2021-07-29 Simon Marchi - Tom de Vries - - PR symtab/28004 - * gdb/dwarf2/read.c (dwarf2_rnglists_process, dwarf2_ranges_process): - Fix zero address complaint. - * gdb/testsuite/gdb.dwarf2/dw2-zero-range-shlib.c: New test. - * gdb/testsuite/gdb.dwarf2/dw2-zero-range.c: New test. - * gdb/testsuite/gdb.dwarf2/dw2-zero-range.exp: New file. - -2021-08-06 Alan Modra - - Re: Add tests for Intel AVX512_FP16 instructions - * testsuite/gas/i386/x86-64-avx512_fp16_pseudo_ops.d: Pass with - mingw section padding. - -2021-08-06 Alan Modra - - chew ubsan warning - It matters not at all if pc is incremented from its initial NULL - value, but avoid this silly runtime ubsan error. - - * doc/chew.c (perform): Avoid incrementing NULL pc. - -2021-08-06 Alan Modra - - bfd_reloc_offset_in_range overflow - This patch is more about the style of bounds checking we ought to use, - rather than a real problem. An overflow of "octet + reloc_size" can - only happen with huge sections which would certainly cause out of - memory errors. - - * reloc.c (bfd_reloc_offset_in_range): Avoid possible overflow. - -2021-08-06 Alan Modra - - PR28175, Segment fault in coff-tic30.c reloc_processing - The obj_convert table shouldn't be accessed without first checking the - index against the table size. - - PR 28175 - * coff-tic30.c (reloc_processing): Sanity check reloc symbol index. - * coff-z80.c (reloc_processing): Likewise. - * coff-z8k.c (reloc_processing): Likewise. - -2021-08-06 Alan Modra - - PR28173, nds32_elf_howto_table index out of bounds - Indexing the howto table was seriously broken by a missing entry, and - use of assertions about user input rather than testing the input. - - PR 28173 - * elf32-nds32.c (nds32_elf_howto_table): Add missing empty howto. - (bfd_elf32_bfd_reloc_type_table_lookup): Replace assertions with - range checks. Return NULL if unsupported reloc type. Remove - dead code. Take an unsigned int param. - (nds32_info_to_howto_rel): Test for NULL howto or howto name - return from lookup. Remove assertion. - (nds32_info_to_howto): Remove unnecessary ATTRIBUTE_UNUSED. - Test for NULL howto or howto name return from lookup. - -2021-08-06 Alan Modra - - PR28172, bfin_pcrel24_reloc heap-buffer-overflow - bfin pcrel24 relocs are weird, they apply to the reloc address minus - two. That means reloc addresses of 0 and 1 are invalid. Check that, - and fix other reloc range checking. - - PR 28172 - * elf32-bfin.c (bfin_pcrel24_reloc): Correct reloc range check. - (bfin_imm16_reloc, bfin_byte4_reloc, bfin_bfd_reloc): Likewise. - (bfin_final_link_relocate): Likewise. - -2021-08-06 GDB Administrator - - Automatic date update in version.in - -2021-08-05 Will Schmidt - - [PATCH] GDB Testsuite, update compile-cplus.exp - [PATCH] GDB Testsuite, update compile-cplus.exp - - Update the gdb.compile/compile-cplus.exp test to - handle errors generated when passing bad arguments - into the gdb-compile command. - This matches changes made to gdb.compile/compile.exp - in the past as part of - "Migrate rest of compile commands to new options framework" - e6ed716cd5514c08b9d7c469d185b1aa177dbc22 - -2021-08-05 Will Schmidt - - [gdb] Handle .TOC. sections during gdb-compile for rs6000 target. - [gdb] Handle .TOC. sections during gdb-compile for rs6000 target. - - When we encounter a .TOC. symbol in the object we are loading, - we need to associate this with the .toc section in order to - properly resolve other symbols in the object. IF a .toc section - is not found, iterate the sections until we find one with the - SEC_ALLOC flag. If that also fails, fall back to using - the *ABS* section, pointed to by bfd_abs_section_ptr. - -2021-08-05 Simon Marchi - - gdb/testsuite: gdb.base/attach.exp: expose bug when testing with native-extended-gdbserver - In gdb.base/attach.exp, proc do_attach_failure_tests, we attach to a - process. When then try to attach to the same process in another - inferior, expecting it to fail. We then come back to the first inferior - and try to kill it, to clean up the test. When using the - native-extended-gdbserver board, this "kill" test passes, even though it - didn't actually work: - - add-inferior - [New inferior 2] - Added inferior 2 on connection 1 (extended-remote localhost:2347) - (gdb) PASS: gdb.base/attach.exp: do_attach_failure_tests: add empty inferior 2 - inferior 2 - [Switching to inferior 2 [] ()] - (gdb) PASS: gdb.base/attach.exp: do_attach_failure_tests: switch to inferior 2 - attach 817032 - Attaching to process 817032 - Attaching to process 817032 failed - (gdb) PASS: gdb.base/attach.exp: do_attach_failure_tests: fail to attach again - inferior 1 - [Switching to inferior 1 [process 817032] (/home/simark/build/binutils-gdb/gdb/testsuite/outputs/gdb.base/attach/attach)] - [Switching to thread 1.1 (Thread 817032.817032)] - #0 main () at /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/attach.c:19 - 19 while (! should_exit) - (gdb) PASS: gdb.base/attach.exp: do_attach_failure_tests: switch to inferior 1 - kill - Kill the program being debugged? (y or n) y - Remote connection closed <==== That's unexpected - (gdb) PASS: gdb.base/attach.exp: do_attach_failure_tests: exit after attach failures - - When the second attach fails, gdbserver seems to break the connection - (it hangs up on the existing remote target) and start listening again - for incoming connections. This is documented in PR 19558 [1]. - - Make the expected output regexp for the kill command tighter (it - currently accepts anything). Use "set confirm off" so we don't have to - deal with the confirmation. And to be really sure the extended-remote - target still works, try to run the inferior again after killing. The - now tests are kfail'ed when the target is gdbserver. - - [1] https://sourceware.org/bugzilla/show_bug.cgi?id=19558 - - gdb/testsuite/ChangeLog: - - * gdb.base/attach.exp (do_attach_failure_tests): Make kill - regexp tighter, run inferior after killing it. Kfail when - target is gdbserver. - - Change-Id: I99c5cd3968ce2ec962ace35b016f842a243b7a0d - -2021-08-05 Simon Marchi - - gdb/testsuite: gdb.base/attach.exp: fix support check in test_command_line_attach_run - When running this test with the native-extended-gdbserver, we get: - - main () at /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/attach.c:19 - 19 while (! should_exit) - The program being debugged has been started already. - Start it from the beginning? (y or n) PASS: gdb.base/attach.exp: cmdline attach run: run to prompt - y - Don't know how to run. Try "help target". - (gdb) FAIL: gdb.base/attach.exp: cmdline attach run: run to main - - This test tests using both "-p " and "-ex start" on the command line, - making sure that we first attach and then run. - - Normally, after that "y", we should see the program running again. - However, a particuliarity of the native-extended-gdbserver is that it - uses "set auto-connect-native-target off" on the command line. The full - GDB command line is: - - ./gdb -nw -nx -data-directory /home/simark/build/binutils-gdb/gdb/testsuite/../data-directory \ - -iex set height 0 -iex set width 0 -ex set auto-connect-native-target off \ - -ex set sysroot -quiet -iex set height 0 -iex set width 0 --pid=536609 -ex start - - The attach succeeds. I guess it is done before "set - auto-connect-native-target off", or it somehow bypasses it. When the - "start" is executed, the native target is unpushed, while killing the - existing process, but not re-pushed, due to "set - auto-connect-native-target off". So we get that "Don't know how to run" - message. - - Really, I think it's a case of the test doing things incompatible with - the board, I think it should just be skipped. And as we can see with - the current code, there were some attempts at doing this, just using the - wrong checks: - - - isnative: this is a dejagnu proc which checks if the target board has - the same triplet as the build machine. In the case of - native-extended-gdbserver, it does. - - is_remote target: this checks whether the target board is remote, as - in executing on a different machin. native-extended-gdbserver is not - remote. - - Since the --pid option specifically attaches to a process using the - native target, change the test to use gdb_is_target_native instead. - - gdb/testsuite/ChangeLog: - - * gdb.base/attach.exp (test_command_line_attach_run): Use - gdb_is_target_native to check if test is supported. - - Change-Id: I762e127f39623889999dc9ed2185540a0951bfb0 - -2021-08-05 Simon Marchi - - gdb: target_waitstatus_to_string: print extra info for FORKED, VFORKED, EXECD - Print the extra information contained in target_waitstatus for these - events. For TARGET_WAITKIND_{FORKED,VFORKED}, the extra information is - contained in related_pid, and is the ptid of the new process. For - TARGET_WAITKIND_EXECD, it,s the exec'd path name in execd_pathname. - Print it using the same format used for TARGET_WAITKIND_STOPPED and - others. - - Here are sample outputs for all three events: - - [infrun] print_target_wait_results: target_wait (-1.0.0 [process -1], status) = - [infrun] print_target_wait_results: 726890.726890.0 [process 726890], - [infrun] print_target_wait_results: status->kind = vforked, related_pid = 726894.726894.0 - - [infrun] print_target_wait_results: target_wait (-1.0.0 [process -1], status) = - [infrun] print_target_wait_results: 727045.727045.0 [process 727045], - [infrun] print_target_wait_results: status->kind = forked, related_pid = 727049.727049.0 - - [infrun] print_target_wait_results: target_wait (-1.0.0 [process -1], status) = - [infrun] print_target_wait_results: 727119.727119.0 [process 727119], - [infrun] print_target_wait_results: status->kind = execd, execd_pathname = /usr/bin/ls - - Change-Id: I4416a74e3bf792a625a68bf26c51689e170f2184 - -2021-08-05 Simon Marchi - - gdb: use ptid_t::to_string in print_target_wait_results - The ptid_t::to_string method was introduced recently, to format a ptid_t - for debug purposes. It formats the ptid exactly as is done in - print_target_wait_results, so make print_target_wait_results use it. - - Change-Id: I0a81c8040d3e1858fb304cb28366b34d94eefe4d - -2021-08-05 Zoran Zaric - - Add as_lval argument to expression evaluator - There are cases where the result of the expression evaluation is - expected to be in a form of a value and not location description. - - One place that has this requirement is dwarf_entry_parameter_to_value - function, but more are expected in the future. Until now, this - requirement was fulfilled by extending the evaluated expression with - a DW_OP_stack_value operation at the end. - - New implementation, introduces a new evaluation argument instead. - - * dwarf2/expr.c (dwarf_expr_context::fetch_result): Add as_lval - argument. - (dwarf_expr_context::eval_exp): Add as_lval argument. - * dwarf2/expr.h (struct dwarf_expr_context): Add as_lval - argument to fetch_result and eval_exp methods. - * dwarf2/frame.c (execute_stack_op): Add as_lval argument. - * dwarf2/loc.c (dwarf_entry_parameter_to_value): Remove - DWARF expression extension. - (dwarf2_evaluate_loc_desc_full): Add as_lval argument support. - (dwarf2_evaluate_loc_desc): Add as_lval argument support. - (dwarf2_locexpr_baton_eval): Add as_lval argument support. - -2021-08-05 Zoran Zaric - - Simplify dwarf_expr_context class interface - Idea of this patch is to get a clean and simple public interface for - the dwarf_expr_context class, looking like: - - - constructor, - - destructor, - - push_address method and - - evaluate method. - - Where constructor should only ever require a target architecture - information. This information is held in per object file - (dwarf2_per_objfile) structure, so it makes sense to keep that - structure as a constructor argument. It also makes sense to get the - address size from that structure, but unfortunately that interface - doesn't exist at the moment, so the dwarf_expr_context class user - needs to provide that information. - - The push_address method is used to push a CORE_ADDR as a value on - top of the DWARF stack before the evaluation. This method can be - later changed to push any struct value object on the stack. - - The evaluate method is the method that evaluates a DWARF expression - and provides the evaluation result, in a form of a single struct - value object that describes a location. To do this, the method requires - a context of the evaluation, as well as expected result type - information. If the type information is not provided, the DWARF generic - type will be used instead. - - To avoid storing the gdbarch information in the evaluator object, that - information is now always acquired from the per_objfile object. - - All data members are now private and only visible to the evaluator - class, so a m_ prefix was added to all of their names to reflect that. - To make this distinction clear, they are also accessed through objects - this pointer, wherever that was not the case before. - - gdb/ChangeLog: - - * dwarf2/expr.c (dwarf_expr_context::dwarf_expr_context): Add - address size argument. - (dwarf_expr_context::read_mem): Change to use property_addr_info - structure. - (dwarf_expr_context::evaluate): New function. - (dwarf_expr_context::execute_stack_op): Change to use - property_addr_info structure. - * dwarf2/expr.h (struct dwarf_expr_context): New evaluate - declaration. Change eval and fetch_result method to private. - (dwarf_expr_context::gdbarch): Remove member. - (dwarf_expr_context::stack): Make private and add m_ prefix. - (dwarf_expr_context::addr_size): Make private and add - m_ prefix. - (dwarf_expr_context::recursion_depth): Make private and add - m_ prefix. - (dwarf_expr_context::max_recursion_depth): Make private and - add m_ prefix. - (dwarf_expr_context::len): Make private and add m_ prefix. - (dwarf_expr_context::data): Make private and add m_ prefix. - (dwarf_expr_context::initialized): Make private and add - m_ prefix. - (dwarf_expr_context::pieces): Make private and add m_ prefix. - (dwarf_expr_context::per_objfile): Make private and add - m_ prefix. - (dwarf_expr_context::frame): Make private and add m_ prefix. - (dwarf_expr_context::per_cu): Make private and add m_ prefix. - (dwarf_expr_context::addr_info): Make private and add - m_ prefix. - * dwarf2/frame.c (execute_stack_op): Change to call evaluate - method. - * dwarf2/loc.c (dwarf2_evaluate_loc_desc_full): Change to call - evaluate method. - (dwarf2_locexpr_baton_eval): Change to call evaluate method. - -2021-08-05 Zoran Zaric - - Make DWARF evaluator return a single struct value - The patch is addressing the issue of class users writing and reading - the internal data of the dwarf_expr_context class. - - At this point, all conditions are met for the DWARF evaluator to return - an evaluation result in a form of a single struct value object. - - gdb/ChangeLog: - - * dwarf2/expr.c (pieced_value_funcs): Chenge to static - function. - (allocate_piece_closure): Change to static function. - (dwarf_expr_context::fetch_result): New function. - * dwarf2/expr.h (struct piece_closure): Remove declaration. - (struct dwarf_expr_context): fetch_result new declaration. - fetch, fetch_address and fetch_in_stack_memory members move - to private. - (allocate_piece_closure): Remove. - * dwarf2/frame.c (execute_stack_op): Change to use - fetch_result. - * dwarf2/loc.c (dwarf2_evaluate_loc_desc_full): Change to use - fetch_result. - (dwarf2_locexpr_baton_eval): Change to use fetch_result. - * dwarf2/loc.h (invalid_synthetic_pointer): Expose function. - -2021-08-05 Zoran Zaric - - Make value_copy also copy the stack data member - Fixing a bug where the value_copy function did not copy the stack data - and initialized members of the struct value. This is needed for the - next patch where the DWARF expression evaluator is changed to return a - single struct value object. - - * value.c (value_copy): Change to also copy the stack data - and initialized members. - -2021-08-05 Zoran Zaric - - Move piece_closure and its support to expr.c - Following 5 patches series is trying to clean up the interface of the - DWARF expression evaluator class (dwarf_expr_context). - - After merging all expression evaluators into one class, the next - logical step is to make a clean user interface for that class. To do - that, we first need to address the issue of class users writing and - reading the internal data of the class directly. - - Fixing the case of writing is simple, it makes sense for an evaluator - instance to be per architecture basis. Currently, the best separation - seems to be per object file, so having that data (dwarf2_per_objfile) - as a constructor argument makes sense. It also makes sense to get the - address size from that object file, but unfortunately that interface - does not exist at the moment. - - Luckily, address size information is already available to the users - through other means. As a result, the address size also needs to be a - class constructor argument, at least until a better interface for - acquiring that information from an object file is implemented. - - The rest of the user written data comes down to a context of an - evaluated expression (compilation unit context, frame context and - passed in buffer context) and a source type information that a result - of evaluating expression is representing. So, it makes sense for all of - these to be arguments of an evaluation method. - - To address the problem of reading the dwarf_expr_context class - internal data, we first need to understand why it is implemented that - way? - - This is actualy a question of which existing class can be used to - represent both values and a location descriptions and why it is not - used currently? - - The answer is in a struct value class/structure, but the problem is - that before the evaluators were merged, only one evaluator had an - infrastructure to resolve composite and implicit pointer location - descriptions. - - After the merge, we are now able to use the struct value to represent - any result of the expression evaluation. It also makes sense to move - all infrastructure for those location descriptions to the expr.c file - considering that that is the only place using that infrastructure. - - What we are left with in the end is a clean public interface of the - dwarf_expr_context class containing: - - - constructor, - - destructor, - - push_address method and - - eval_exp method. - - The idea with this particular patch is to move piece_closure structure - and the interface that handles it (lval_funcs) to expr.c file. - - While implicit pointer location descriptions are still not useful in - the CFI context (of the AMD's DWARF standard extensions), the composite - location descriptions are certainly necessary to describe a results of - specific compiler optimizations. - - Considering that a piece_closure structure is used to represent both, - there was no benefit in splitting them. - - gdb/ChangeLog: - - * dwarf2/expr.c (struct piece_closure): Add from loc.c. - (allocate_piece_closure): Add from loc.c. - (bits_to_bytes): Add from loc.c. - (rw_pieced_value): Add from loc.c. - (read_pieced_value): Add from loc.c. - (write_pieced_value): Add from loc.c. - (check_pieced_synthetic_pointer): Add from loc.c. - (indirect_pieced_value): Add from loc.c. - (coerce_pieced_ref): Add from loc.c. - (copy_pieced_value_closure): Add from loc.c. - (free_pieced_value_closure): Add from loc.c. - (sect_variable_value): Add from loc.c. - * dwarf2/loc.c (sect_variable_value): Move to expr.c. - (struct piece_closure): Move to expr.c. - (allocate_piece_closure): Move to expr.c. - (bits_to_bytes): Move to expr.c. - (rw_pieced_value): Move to expr.c. - (read_pieced_value): Move to expr.c. - (write_pieced_value): Move to expr.c. - (check_pieced_synthetic_pointer): Move to expr.c. - (indirect_pieced_value): Move to expr.c. - (coerce_pieced_ref): Move to expr.c. - (copy_pieced_value_closure): Move to expr.c. - (free_pieced_value_closure): Move to expr.c. - -2021-08-05 Zoran Zaric - - Merge evaluate_for_locexpr_baton evaluator - The evaluate_for_locexpr_baton is the last derived class from the - dwarf_expr_context class. It's purpose is to support the passed in - buffer functionality. - - Although, it is not really necessary to merge this class with it's - base class, doing that simplifies new expression evaluator design. - - Considering that this functionality is going around the DWARF standard, - it is also reasonable to expect that with a new evaluator design and - extending the push object address functionality to accept any location - description, there will be no need to support passed in buffers. - - Alternatively, it would also makes sense to abstract the interaction - between the evaluator and a given resource in the near future. The - passed in buffer would then be a specialization of that abstraction. - - gdb/ChangeLog: - - * dwarf2/expr.c (dwarf_expr_context::read_mem): Merge with - evaluate_for_locexpr_baton implementation. - * dwarf2/loc.c (class evaluate_for_locexpr_baton): Remove - class. - (evaluate_for_locexpr_baton::read_mem): Move to - dwarf_expr_context. - (dwarf2_locexpr_baton_eval): Instantiate dwarf_expr_context - instead of evaluate_for_locexpr_baton class. - -2021-08-05 Zoran Zaric - - Remove empty frame and full evaluators - There are no virtual methods that require different specialization in - dwarf_expr_context class. This means that derived classes - dwarf_expr_executor and dwarf_evaluate_loc_desc are not needed any - more. - - As a result of this, the evaluate_for_locexpr_baton class base class - is now the dwarf_expr_context class. - - There might be a need for a better class hierarchy when we know more - about the direction of the future DWARF versions and gdb extensions, - but that is out of the scope of this patch series. - - gdb/ChangeLog: - - * dwarf2/frame.c (class dwarf_expr_executor): Remove class. - (execute_stack_op): Instantiate dwarf_expr_context instead of - dwarf_evaluate_loc_desc class. - * dwarf2/loc.c (class dwarf_evaluate_loc_desc): Remove class. - (dwarf2_evaluate_loc_desc_full): Instantiate dwarf_expr_context - instead of dwarf_evaluate_loc_desc class. - (struct evaluate_for_locexpr_baton): Derive from - dwarf_expr_context. - -2021-08-05 Zoran Zaric - - Inline get_reg_value method of dwarf_expr_context - The get_reg_value method is a small function that is only called once, - so it can be inlined to simplify the dwarf_expr_context class. - - gdb/ChangeLog: - - * dwarf2/expr.c (dwarf_expr_context::get_reg_value): Remove - method. - (dwarf_expr_context::execute_stack_op): Inline get_reg_value - method. - * dwarf2/expr.h (dwarf_expr_context::get_reg_value): Remove - method. - -2021-08-05 Zoran Zaric - - Move push_dwarf_reg_entry_value to expr.c - Following the idea of merging the evaluators, the - push_dwarf_reg_entry_value method can be moved from - dwarf_expr_executor and dwarf_evaluate_loc_desc classes - to their base class dwarf_expr_context. - - gdb/ChangeLog: - - * dwarf2/expr.c - (dwarf_expr_context::push_dwarf_reg_entry_value): Move from - dwarf_evaluate_loc_desc. - * dwarf2/frame.c - (dwarf_expr_executor::push_dwarf_reg_entry_value): Remove - method. - * dwarf2/loc.c (dwarf_expr_reg_to_entry_parameter): Expose - function. - (dwarf_evaluate_loc_desc::push_dwarf_reg_entry_value): Move to - dwarf_expr_context. - * dwarf2/loc.h (dwarf_expr_reg_to_entry_parameter): Expose - function. - -2021-08-05 Zoran Zaric - - Move read_mem to dwarf_expr_context - Following the idea of merging the evaluators, the read_mem method can - be moved from dwarf_expr_executor and dwarf_evaluate_loc_desc classes - to their base class dwarf_expr_context. - - gdb/ChangeLog: - - * dwarf2/expr.c (dwarf_expr_context::read_mem): Move from - dwarf_evaluate_loc_desc. - * dwarf2/frame.c (dwarf_expr_executor::read_mem): Remove - method. - * dwarf2/loc.c (dwarf_evaluate_loc_desc::read_mem): Move to - dwarf_expr_context. - -2021-08-05 Zoran Zaric - - Move get_object_address to dwarf_expr_context - Following the idea of merging the evaluators, the get_object_address - and can be moved from dwarf_expr_executor and dwarf_evaluate_loc_desc - classes to their base class dwarf_expr_context. - - gdb/ChangeLog: - - * dwarf2/expr.c (dwarf_expr_context::get_object_address): Move - from dwarf_evaluate_loc_desc. - (class dwarf_expr_context): Add object address member to - dwarf_expr_context. - * dwarf2/expr.h (dwarf_expr_context::get_frame_pc): Remove - method. - * dwarf2/frame.c (dwarf_expr_executor::get_object_address): - Remove method. - * dwarf2/loc.c (dwarf_evaluate_loc_desc::get_object_address): - move to dwarf_expr_context. - (class dwarf_evaluate_loc_desc): Move object address member to - dwarf_expr_context. - -2021-08-05 Zoran Zaric - - Move dwarf_call to dwarf_expr_context - Following the idea of merging the evaluators, the dwarf_call and - get_frame_pc method can be moved from dwarf_expr_executor and - dwarf_evaluate_loc_desc classes to their base class dwarf_expr_context. - Once this is done, the get_frame_pc can be replace with lambda - function. - - gdb/ChangeLog: - - * dwarf2/expr.c (dwarf_expr_context::dwarf_call): Move from - dwarf_evaluate_loc_desc. - (dwarf_expr_context::get_frame_pc): Replace with lambda. - * dwarf2/expr.h (dwarf_expr_context::get_frame_pc): Remove - method. - * dwarf2/frame.c (dwarf_expr_executor::dwarf_call): Remove - method. - (dwarf_expr_executor::get_frame_pc): Remove method. - * dwarf2/loc.c (dwarf_evaluate_loc_desc::get_frame_pc): Remove - method. - (dwarf_evaluate_loc_desc::dwarf_call): Move to - dwarf_expr_context. - (per_cu_dwarf_call): Inline function. - -2021-08-05 Zoran Zaric - - Move compilation unit info to dwarf_expr_context - This patch moves the compilation unit context information and support - from dwarf_expr_executor and dwarf_evaluate_loc_desc to - dwarf_expr_context evaluator. The idea is to report an error when a - given operation requires a compilation unit information to be resolved, - which is not available. - - With this change, it also makes sense to always acquire ref_addr_size - information from the compilation unit context, considering that all - DWARF operations that refer to that information require a compilation - unit context to be present during their evaluation. - - gdb/ChangeLog: - - * dwarf2/expr.c (ensure_have_per_cu): New function. - (dwarf_expr_context::dwarf_expr_context): Add compilation unit - context information. - (dwarf_expr_context::get_base_type): Move from - dwarf_evaluate_loc_desc. - (dwarf_expr_context::get_addr_index): Remove method. - (dwarf_expr_context::dwarf_variable_value): Remove method. - (dwarf_expr_context::execute_stack_op): Call compilation unit - context info check. Inline get_addr_index and - dwarf_variable_value methods. - * dwarf2/expr.h (struct dwarf_expr_context): Add compilation - context info. - (dwarf_expr_context::get_addr_index): Remove method. - (dwarf_expr_context::dwarf_variable_value): Remove method. - (dwarf_expr_context::ref_addr_size): Remove member. - * dwarf2/frame.c (dwarf_expr_executor::get_addr_index): Remove - method. - (dwarf_expr_executor::dwarf_variable_value): Remove method. - * dwarf2/loc.c (sect_variable_value): Expose function. - (dwarf_evaluate_loc_desc::get_addr_index): Remove method. - (dwarf_evaluate_loc_desc::dwarf_variable_value): Remove method. - (class dwarf_evaluate_loc_desc): Move compilation unit context - information to dwarf_expr_context class. - * dwarf2/loc.h (sect_variable_value): Expose function. - -2021-08-05 Zoran Zaric - - Remove get_frame_cfa from dwarf_expr_context - Following the idea of merging the evaluators, the get_frame_cfa method - can be moved from dwarf_expr_executor and dwarf_evaluate_loc_desc - classes to their base class dwarf_expr_context. Once this is done, - it becomes apparent that the method is only called once and it can be - inlined. - - It is also necessary to check if the frame context information was - provided before the DW_OP_call_frame_cfa operation is executed. - - gdb/ChangeLog: - - * dwarf2/expr.c (dwarf_expr_context::get_frame_cfa): Remove - method. - (dwarf_expr_context::execute_stack_op): Call frame context info - check for DW_OP_call_frame_cfa. Remove use of get_frame_cfa. - * dwarf2/expr.h (dwarf_expr_context::get_frame_cfa): Remove - method. - * dwarf2/frame.c (dwarf_expr_context::get_frame_cfa): Remove - method. - * dwarf2/loc.c (dwarf_expr_context::get_frame_cfa): Remove - method. - -2021-08-05 Zoran Zaric - - Move frame context info to dwarf_expr_context - Following 15 patches in this patch series is cleaning up the design of - the DWARF expression evaluator (dwarf_expr_context) to make future - extensions of that evaluator easier and cleaner to implement. - - There are three subclasses of the dwarf_expr_context class - (dwarf_expr_executor, dwarf_evaluate_loc_desc and - evaluate_for_locexpr_baton). Here is a short description of each class: - - - dwarf_expr_executor is evaluating a DWARF expression in a context - of a Call Frame Information. The overridden methods of this subclass - report an error if a specific DWARF operation, represented by that - method, is not allowed in a CFI context. The source code of this - subclass lacks the support for composite as well as implicit pointer - location description. - - - dwarf_evaluate_loc_desc can evaluate any expression with no - restrictions. All of the methods that this subclass overrides are - actually doing what they are intended to do. This subclass contains - a full support for all location description types. - - - evaluate_for_locexpr_baton subclass is a specialization of the - dwarf_evaluate_loc_desc subclass and it's function is to add - support for passed in buffers. This seems to be a way to go around - the fact that DWARF standard lacks a bit offset support for memory - location descriptions as well as using any location description for - the push object address functionality. - - It all comes down to this question: what is a function of a DWARF - expression evaluator? - - Is it to evaluate the expression in a given context or to check the - correctness of that expression in that context? - - Currently, the only reason why there is a dwarf_expr_executor subclass - is to report an invalid DWARF expression in a context of a CFI, but is - that what the evaluator is supposed to do considering that the evaluator - is not tied to a given DWARF version? - - There are more and more vendor and GNU extensions that are not part of - the DWARF standard, so is it that impossible to expect that some of the - extensions could actually lift the previously imposed restrictions of - the CFI context? Not to mention that every new DWARF version is lifting - some restrictions anyway. - - The thing that makes more sense for an evaluator to do, is to take the - context of an evaluation and checks the requirements of every operation - evaluated against that context. With this approach, the evaluator would - report an error only if parts of the context, necessary for the - evaluation, are missing. - - If this approach is taken, then the unification of the - dwarf_evaluate_loc_desc, dwarf_expr_executor and dwarf_expr_context - is the next logical step. This makes a design of the DWARF expression - evaluator cleaner and allows more flexibility when supporting future - vendor and GNU extensions. - - Additional benefit here is that now all evaluators have access to all - location description types, which means that a vendor extended CFI - rules could support composite location description as well. This also - means that a new evaluator interface can be changed to return a single - struct value (that describes the result of the evaluation) instead of - a caller poking around the dwarf_expr_context internal data for answers - (like it is done currently). - - This patch starts the merging process by moving the frame context - information and support from dwarf_expr_executor and - dwarf_evaluate_loc_desc to dwarf_expr_context evaluator. The idea - is to report an error when a given operation requires a frame - information to be resolved, if that information is not present. - - gdb/ChangeLog: - - * dwarf2/expr.c (ensure_have_frame): New function. - (read_addr_from_reg): Add from frame.c. - (dwarf_expr_context::dwarf_expr_context): Add frame info to - dwarf_expr_context. - (dwarf_expr_context::read_addr_from_reg): Remove. - (dwarf_expr_context::get_reg_value): Move from - dwarf_evaluate_loc_desc. - (dwarf_expr_context::get_frame_base): Move from - dwarf_evaluate_loc_desc. - (dwarf_expr_context::execute_stack_op): Call frame context info - check. Remove use of read_addr_from_reg method. - * dwarf2/expr.h (struct dwarf_expr_context): Add frame info - member, read_addr_from_reg, get_reg_value and get_frame_base - declaration. - (read_addr_from_reg): Move to expr.c. - * dwarf2/frame.c (read_addr_from_reg): Move to - dwarf_expr_context. - (dwarf_expr_executor::read_addr_from_reg): Remove. - (dwarf_expr_executor::get_frame_base): Remove. - (dwarf_expr_executor::get_reg_value): Remove. - (execute_stack_op): Use read_addr_from_reg function instead of - read_addr_from_reg method. - * dwarf2/loc.c (dwarf_evaluate_loc_desc::get_frame_base): Move - to dwarf_expr_context. - (dwarf_evaluate_loc_desc::get_reg_value): Move to - dwarf_expr_context. - (dwarf_evaluate_loc_desc::read_addr_from_reg): Remove. - (dwarf2_locexpr_baton_eval):Use read_addr_from_reg function - instead of read_addr_from_reg method. - -2021-08-05 Zoran Zaric - - Cleanup of the dwarf_expr_context constructor - Move the initial values for dwarf_expr_context class data members - to the class declaration in expr.h. - - gdb/ChangeLog: - - * dwarf2/expr.c (dwarf_expr_context::dwarf_expr_context): - Remove initial data members values. - * dwarf2/expr.h (dwarf_expr_context): Add initial values - to the class data members. - -2021-08-05 Zoran Zaric - - Replace the symbol needs evaluator with a parser - This patch addresses a design problem with the symbol_needs_eval_context - class. It exposes the problem by introducing two new testsuite test - cases. - - To explain the issue, I first need to explain the dwarf_expr_context - class that the symbol_needs_eval_context class derives from. - - The intention behind the dwarf_expr_context class is to commonize the - DWARF expression evaluation mechanism for different evaluation - contexts. Currently in gdb, the evaluation context can contain some or - all of the following information: architecture, object file, frame and - compilation unit. - - Depending on the information needed to evaluate a given expression, - there are currently three distinct DWARF expression evaluators: - -  - Frame: designed to evaluate an expression in the context of a call -    frame information (dwarf_expr_executor class). This evaluator doesn't -    need a compilation unit information. - -  - Location description: designed to evaluate an expression in the -    context of a source level information (dwarf_evaluate_loc_desc -    class). This evaluator expects all information needed for the -    evaluation of the given expression to be present. - -  - Symbol needs: designed to answer a question about the parts of the -    context information required to evaluate a DWARF expression behind a -    given symbol (symbol_needs_eval_context class). This evaluator -    doesn't need a frame information. - - The functional difference between the symbol needs evaluator and the - others is that this evaluator is not meant to interact with the actual - target. Instead, it is supposed to check which parts of the context - information are needed for the given DWARF expression to be evaluated by - the location description evaluator. - - The idea is to take advantage of the existing dwarf_expr_context - evaluation mechanism and to fake all required interactions with the - actual target, by returning back dummy values. The evaluation result is - returned as one of three possible values, based on operations found in a - given expression: - - - SYMBOL_NEEDS_NONE, - - SYMBOL_NEEDS_REGISTERS and - - SYMBOL_NEEDS_FRAME. - - The problem here is that faking results of target interactions can yield - an incorrect evaluation result. - - For example, if we have a conditional DWARF expression, where the - condition depends on a value read from an actual target, and the true - branch of the condition requires a frame information to be evaluated, - while the false branch doesn't, fake target reads could conclude that a - frame information is not needed, where in fact it is. This wrong - information would then cause the expression to be actually evaluated (by - the location description evaluator) with a missing frame information. - This would then crash the debugger. - - The gdb.dwarf2/symbol_needs_eval_fail.exp test introduces this - scenario, with the following DWARF expression: - -                    DW_OP_addr $some_variable -                    DW_OP_deref - -                    # conditional jump to DW_OP_bregx -                    DW_OP_bra 4 -                    DW_OP_lit0 - -                    # jump to DW_OP_stack_value -                    DW_OP_skip 3 -                    DW_OP_bregx $dwarf_regnum 0 -                    DW_OP_stack_value - - This expression describes a case where some variable dictates the - location of another variable. Depending on a value of some_variable, the - variable whose location is described by this expression is either read - from a register or it is defined as a constant value 0. In both cases, - the value will be returned as an implicit location description on the - DWARF stack. - - Currently, when the symbol needs evaluator fakes a memory read from the - address behind the some_variable variable, the constant value 0 is used - as the value of the variable A, and the check returns the - SYMBOL_NEEDS_NONE result. - - This is clearly a wrong result and it causes the debugger to crash. - - The scenario might sound strange to some people, but it comes from a - SIMD/SIMT architecture where $some_variable is an execution mask.  In - any case, it is a valid DWARF expression, and GDB shouldn't crash while - evaluating it. Also, a similar example could be made based on a - condition of the frame base value, where if that value is concluded to - be 0, the variable location could be defaulted to a TLS based memory - address. - - The gdb.dwarf2/symbol_needs_eval_timeout.exp test introduces a second - scenario. This scenario is a bit more abstract due to the DWARF - assembler lacking the CFI support, but it exposes a different - manifestation of the same problem. Like in the previous scenario, the - DWARF expression used in the test is valid: - -                        DW_OP_lit1 -                        DW_OP_addr $some_variable -                        DW_OP_deref - -                        # jump to DW_OP_fbreg -                        DW_OP_skip 4 -                        DW_OP_drop -                        DW_OP_fbreg 0 -                        DW_OP_dup -                        DW_OP_lit0 -                        DW_OP_eq - -                        # conditional jump to DW_OP_drop -                        DW_OP_bra -9 -                        DW_OP_stack_value - - Similarly to the previous scenario, the location of a variable A is an - implicit location description with a constant value that depends on a - value held by a global variable. The difference from the previous case - is that DWARF expression contains a loop instead of just one branch. The - end condition of that loop depends on the expectation that a frame base - value is never zero. Currently, the act of faking the target reads will - cause the symbol needs evaluator to get stuck in an infinite loop. - - Somebody could argue that we could change the fake reads to return - something else, but that would only hide the real problem. - - The general impression seems to be that the desired design is to have - one class that deals with parsing of the DWARF expression, while there - are virtual methods that deal with specifics of some operations. - - Using an evaluator mechanism here doesn't seem to be correct, because - the act of evaluation relies on accessing the data from the actual - target with the possibility of skipping the evaluation of some parts of - the expression. - - To better explain the proposed solution for the issue, I first need to - explain a couple more details behind the current design: - - There are multiple places in gdb that handle DWARF expression parsing - for different purposes. Some are in charge of converting the expression - to some other internal representation (decode_location_expression, - disassemble_dwarf_expression and dwarf2_compile_expr_to_ax), some are - analysing the expression for specific information - (compute_stack_depth_worker) and some are in charge of evaluating the - expression in a given context (dwarf_expr_context::execute_stack_op - and decode_locdesc). - - The problem is that all those functions have a similar (large) switch - statement that handles each DWARF expression operation. The result of - this is a code duplication and harder maintenance. - - As a step into the right direction to solve this problem (at least for - the purpose of a DWARF expression evaluation) the expression parsing was - commonized inside of an evaluator base class (dwarf_expr_context). This - makes sense for all derived classes, except for the symbol needs - evaluator (symbol_needs_eval_context) class. - - As described previously the problem with this evaluator is that if the - evaluator is not allowed to access the actual target, it is not really - evaluating. - - Instead, the desired function of a symbol needs evaluator seems to fall - more into expression analysis category. This means that a more natural - fit for this evaluator is to be a symbol needs analysis, similar to the - existing compute_stack_depth_worker analysis. - - Another problem is that using a heavyweight mechanism of an evaluator - to do an expression analysis seems to be an unneeded overhead. It also - requires a more complicated design of the parent class to support fake - target reads. - - The reality is that the whole symbol_needs_eval_context class can be - replaced with a lightweight recursive analysis function, that will give - more correct result without compromising the design of the - dwarf_expr_context class. The analysis treats the expression byte - stream as a DWARF operation graph, where each graph node can be - visited only once and each operation can decide if the frame context - is needed for their evaluation. - - The downside of this approach is adding of one more similar switch - statement, but at least this way the new symbol needs analysis will be - a lightweight mechnism and it will provide a correct result for any - given DWARF expression. - - A more desired long term design would be to have one class that deals - with parsing of the DWARF expression, while there would be a virtual - methods that deal with specifics of some DWARF operations. Then that - class would be used as a base for all DWARF expression parsing mentioned - at the beginning. - - This however, requires a far bigger changes that are out of the scope - of this patch series. - - The new analysis requires the DWARF location description for the - argc argument of the main function to change in the assembly file - gdb.python/amd64-py-framefilter-invalidarg.S. Originally, expression - ended with a 0 value byte, which was never reached by the symbol needs - evaluator, because it was detecting a stack underflow when evaluating - the operation before. The new approach does not simulate a DWARF - stack anymore, so the 0 value byte needs to be removed because it - makes the DWARF expression invalid. - - gdb/ChangeLog: - - * dwarf2/loc.c (class symbol_needs_eval_context): Remove. - (dwarf2_get_symbol_read_needs): New function. - (dwarf2_loc_desc_get_symbol_read_needs): Remove. - (locexpr_get_symbol_read_needs): Use - dwarf2_get_symbol_read_needs. - - gdb/testsuite/ChangeLog: - - * gdb.python/amd64-py-framefilter-invalidarg.S : Update argc - DWARF location expression. - * lib/dwarf.exp (_location): Handle DW_OP_fbreg. - * gdb.dwarf2/symbol_needs_eval.c: New file. - * gdb.dwarf2/symbol_needs_eval_fail.exp: New file. - * gdb.dwarf2/symbol_needs_eval_timeout.exp: New file. - -2021-08-05 Cui,Lili - - [PATCH 2/2] Add tests for Intel AVX512_FP16 instructions - Intel AVX512 FP16 instructions use maps 3, 5 and 6. Maps 5 and 6 use 3 bits - in the EVEX.mmm field (0b101, 0b110). Map 5 is for instructions that were FP32 - in map 1 (0Fxx). Map 6 is for instructions that were FP32 in map 2 (0F38xx). - There are some exceptions to this rule. Some things in map 1 (0Fxx) with imm8 - operands predated our current conventions; those instructions moved to map 3. - FP32 things in map 3 (0F3Axx) found new opcodes in map3 for FP16 because map3 - is very sparsely populated. Most of the FP16 instructions share opcodes and - prefix (EVEX.pp) bits with the related FP32 operations. - - Intel AVX512 FP16 instructions has new displacements scaling rules, please refer - to the public software developer manual for detail information. - - gas/ - - 2021-08-05 Igor Tsimbalist - H.J. Lu - Wei Xiao - Lili Cui - - * testsuite/gas/i386/i386.exp: Run FP16 tests. - * testsuite/gas/i386/avx512_fp16-intel.d: New test. - * testsuite/gas/i386/avx512_fp16-inval-bcast.l: Ditto. - * testsuite/gas/i386/avx512_fp16-inval-bcast.s: Ditto. - * testsuite/gas/i386/avx512_fp16.d: Ditto. - * testsuite/gas/i386/avx512_fp16.s: Ditto. - * testsuite/gas/i386/avx512_fp16_pseudo_ops.d: Ditto. - * testsuite/gas/i386/avx512_fp16_pseudo_ops.s: Ditto. - * testsuite/gas/i386/avx512_fp16_vl-intel.d: Ditto. - * testsuite/gas/i386/avx512_fp16_vl.d: Ditto. - * testsuite/gas/i386/avx512_fp16_vl.s: Ditto. - * testsuite/gas/i386/x86-64-avx512_fp16-intel.d: Ditto. - * testsuite/gas/i386/x86-64-avx512_fp16-inval-bcast.l: Ditto. - * testsuite/gas/i386/x86-64-avx512_fp16-inval-bcast.s: Ditto. - * testsuite/gas/i386/x86-64-avx512_fp16.d: Ditto. - * testsuite/gas/i386/x86-64-avx512_fp16.s: Ditto. - * testsuite/gas/i386/x86-64-avx512_fp16_pseudo_ops.d: Ditto. - * testsuite/gas/i386/x86-64-avx512_fp16_pseudo_ops.s: Ditto. - * testsuite/gas/i386/x86-64-avx512_fp16_vl-intel.d: Ditto. - * testsuite/gas/i386/x86-64-avx512_fp16_vl.d: Ditto. - * testsuite/gas/i386/x86-64-avx512_fp16_vl.s: Ditto. - * testsuite/gas/i386/x86-64-avx512_fp16-inval-register.l: Ditto. - * testsuite/gas/i386/x86-64-avx512_fp16-inval-register.s: Ditto. - * testsuite/gas/i386/x86-64-avx512_fp16-bad.d: Ditto. - * testsuite/gas/i386/x86-64-avx512_fp16-bad.s: Ditto. - * testsuite/gas/i386/x86-64-default-suffix-avx.d: Add new testcase. - * testsuite/gas/i386/x86-64-default-suffix.d: Ditto. - * testsuite/gas/i386/x86-64-default-suffix.s: Ditto. - * testsuite/gas/i386/xmmword.l: Ditto. - * testsuite/gas/i386/xmmword.s: Ditto. - -2021-08-05 Cui,Lili - - [PATCH 1/2] Enable Intel AVX512_FP16 instructions - Intel AVX512 FP16 instructions use maps 3, 5 and 6. Maps 5 and 6 use 3 bits - in the EVEX.mmm field (0b101, 0b110). Map 5 is for instructions that were FP32 - in map 1 (0Fxx). Map 6 is for instructions that were FP32 in map 2 (0F38xx). - There are some exceptions to this rule. Some things in map 1 (0Fxx) with imm8 - operands predated our current conventions; those instructions moved to map 3. - FP32 things in map 3 (0F3Axx) found new opcodes in map3 for FP16 because map3 - is very sparsely populated. Most of the FP16 instructions share opcodes and - prefix (EVEX.pp) bits with the related FP32 operations. - - Intel AVX512 FP16 instructions has new displacements scaling rules, please refer - to the public software developer manual for detail information. - - gas/ - - 2021-08-05 Igor Tsimbalist - H.J. Lu - Wei Xiao - Lili Cui - - * config/tc-i386.c (struct Broadcast_Operation): Adjust comment. - (cpu_arch): Add .avx512_fp16. - (cpu_noarch): Add noavx512_fp16. - (pte): Add evexmap5 and evexmap6. - (build_evex_prefix): Handle EVEXMAP5 and EVEXMAP6. - (check_VecOperations): Handle {1to32}. - (check_VecOperands): Handle CheckRegNumb. - (check_word_reg): Handle Toqword. - (i386_error): Add invalid_dest_and_src_register_set. - (match_template): Handle invalid_dest_and_src_register_set. - * doc/c-i386.texi: Document avx512_fp16, noavx512_fp16. - - opcodes/ - - 2021-08-05 Igor Tsimbalist - H.J. Lu - Wei Xiao - Lili Cui - - * i386-dis.c (EXwScalarS): New. - (EXxh): Ditto. - (EXxhc): Ditto. - (EXxmmqh): Ditto. - (EXxmmqdh): Ditto. - (EXEvexXwb): Ditto. - (DistinctDest_Fixup): Ditto. - (enum): Add xh_mode, evex_half_bcst_xmmqh_mode, evex_half_bcst_xmmqdh_mode - and w_swap_mode. - (enum): Add PREFIX_EVEX_0F3A08_W_0, PREFIX_EVEX_0F3A0A_W_0, - PREFIX_EVEX_0F3A26, PREFIX_EVEX_0F3A27, PREFIX_EVEX_0F3A56, - PREFIX_EVEX_0F3A57, PREFIX_EVEX_0F3A66, PREFIX_EVEX_0F3A67, - PREFIX_EVEX_0F3AC2, PREFIX_EVEX_MAP5_10, PREFIX_EVEX_MAP5_11, - PREFIX_EVEX_MAP5_1D, PREFIX_EVEX_MAP5_2A, PREFIX_EVEX_MAP5_2C, - PREFIX_EVEX_MAP5_2D, PREFIX_EVEX_MAP5_2E, PREFIX_EVEX_MAP5_2F, - 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_5C, PREFIX_EVEX_MAP5_5D, PREFIX_EVEX_MAP5_5E, - PREFIX_EVEX_MAP5_5F, PREFIX_EVEX_MAP5_78, PREFIX_EVEX_MAP5_79, - PREFIX_EVEX_MAP5_7A, PREFIX_EVEX_MAP5_7B, PREFIX_EVEX_MAP5_7C, - PREFIX_EVEX_MAP5_7D_W_0, PREFIX_EVEX_MAP6_13, PREFIX_EVEX_MAP6_56, - PREFIX_EVEX_MAP6_57, PREFIX_EVEX_MAP6_D6, PREFIX_EVEX_MAP6_D7 - (enum): Add EVEX_MAP5 and EVEX_MAP6. - (enum): Add 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_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, - (get_valid_dis386): Properly handle new instructions. - (intel_operand_size): Handle new modes. - (OP_E_memory): Ditto. - (OP_EX): Ditto. - * i386-dis-evex.h: Updated for AVX512_FP16. - * i386-dis-evex-mod.h: Updated for AVX512_FP16. - * i386-dis-evex-prefix.h: Updated for AVX512_FP16. - * i386-dis-evex-reg.h : Updated for AVX512_FP16. - * i386-dis-evex-w.h : Updated for AVX512_FP16. - * i386-gen.c (cpu_flag_init): Add CPU_AVX512_FP16_FLAGS, - and CPU_ANY_AVX512_FP16_FLAGS. Update CPU_ANY_AVX512F_FLAGS - and CPU_ANY_AVX512BW_FLAGS. - (cpu_flags): Add CpuAVX512_FP16. - (opcode_modifiers): Add DistinctDest. - * i386-opc.h (enum): (AVX512_FP16): New. - (i386_opcode_modifier): Add reqdistinctreg. - (i386_cpu_flags): Add cpuavx512_fp16. - (EVEXMAP5): Defined as a macro. - (EVEXMAP6): Ditto. - * i386-opc.tbl: Add Intel AVX512_FP16 instructions. - * i386-init.h: Regenerated. - * i386-tbl.h: Ditto. - -2021-08-05 Alan Modra - - PR28167, vms-alpha build_module_list - PR 28167 - * vms-alpha.c (build_module_list): Malloc and free section contents. - Don't read past end of section. - -2021-08-05 Alan Modra - - PR28166, _bfd_elf_mips_get_relocated_section_contents - Some of the code paths unpacking mips relocs left arelent->sym_ptr_ptr - uninitialised. - - PR 28166 - * elf64-mips.c (mips_elf64_slurp_one_reloc_table): Don't leave - sym_ptr_ptr uninitialised. - -2021-08-05 Alan Modra - - PR28165, buffer overflow in elf32-rx.c:rx_info_to_howto_rela - PR 28165 - * elf32-rx.c (rx_elf_howto_table): Add missing empty entries. - (rx_info_to_howto_rela): Assert rx_elf_howto_table is correct size. - Use actual size when sanity checking r_type. - -2021-08-05 Alan Modra - - Re: elf: Treat undefined version as hidden - Fix fallout in cris testsuite - - PR binutils/28158 - * ld-cris/libdso-1c.d: Update for version display change. - * ld-cris/libdso-15b.d: Likewise. - -2021-08-05 Andrew Burgess - - gdb/testsuite: update test gdb.base/step-over-syscall.exp - I was looking at PR gdb/19675 and the related test - gdb.base/step-over-syscall.exp. This test includes a call to kfail - when we are testing a displaced step over a clone syscall. - - While looking at the test I removed the call to kfail and ran the - test, and was surprised that the test passed. - - I ran the test a few times and it does sometimes fail, but mostly it - passed fine. - - PR gdb/19675 describes how, when we displaced step over a clone, the - new thread is created with a $pc in the displaced step buffer. GDB - then fails to "fix" this $pc (for the new thread), and the thread will - be set running with its current $pc value. This means that the new - thread will just start executing from whatever happens to be after the - displaced stepping buffer. - - In the original PR gdb/19675 bug report Yao Qi was seeing the new - thread cause a segfault, the problem is, what actually happens is - totally undefined. - - On my machine, I'm seeing the new thread reenter main, it then starts - trying to run the test again (in the new thread). This just happens - to be safe enough (in this simple test) that most of the time the - inferior doesn't crash. - - In this commit I try to make the test slightly more likely to fail by - doing a couple of things. - - First, I added a static variable to main, this is set true when the - first thread enters main, if a second thread ever enters main then I - force an abort. - - Second, when the test is finishing I want to ensure that the new - threads have had a chance to do "something bad" if they are going to. - So I added a global counter, as each thread starts successfully it - decrements the counter. The main thread does not proceed to the final - marker function (where GDB has placed a breakpoint) until all threads - have started successfully. This means that if the newly created - thread doesn't successfully enter clone_fn then the counter will never - reach zero and the test will timeout. - - With these two changes my hope is that the test should fail more - reliably, and so, I have also changed the test to call setup_kfail - before the specific steps that we expect to misbehave instead of just - calling kfail and skipping parts of the test completely. The benefit - of this is that if/when we fix GDB this test will start to KPASS and - we'll know to update this test to remove the setup_kfail call. - -2021-08-05 GDB Administrator - - Automatic date update in version.in - -2021-08-05 Lancelot SIX - - gdb: Use unwinder name in frame_info::to_string - While working on a stack unwinding issue using 'set debug frame on', I - noticed the frame_info::to_string method could be slightly improved. - - Unwinders have been given a name in - a154d838a70e96d888620c072e2d6ea8bdf044ca. Before this patch, frame_info - debug output prints the host address of the used unwinder, which is not - easy to interpret. This patch proposes to use the unwinder name - instead since we now have it. - - Before the patch: - - {level=1,type=NORMAL_FRAME,unwind=0x2ac1763ec0,pc=0x3ff7fc3460,id={stack=0x3ff7ea79b0,code=0x0000003ff7fc33ac,!special},func=0x3ff7fc33ac} - - With the patch: - - {level=1,type=NORMAL_FRAME,unwinder="riscv prologue",pc=0x3ff7fc3460,id={stack=0x3ff7ea79b0,code=0x0000003ff7fc33ac,!special},func=0x3ff7fc33ac} - - Tested on riscv64-linux-gnu. - -2021-08-04 Simon Marchi - - gdb/testsuite: fix gdb.base/info-macros.exp with clang - The test gdb.base/info-macros.exp says that it doesn't pass the "debug" - option to prepare_for_testing because that would cause -g to appear - after -g3 on the command line, and that would cause some gcc versions to - not include macro info. I don't know what gcc versions this refers to. - I tested with gcc 4.8, and that works fine with -g after -g3. - - The current state is problematic when testing with CC_FOR_TARGET=clang, - because then only -fdebug-macro is included. No -g switch if included, - meaning we get a binary without any debug info, and the test fails. - - One way to fix it would be to add "debug" to the options when the - compiler is clang. - - However, the solution I chose was to specify "debug" in any case, even - for gcc. Other macro tests such as gdb.base/macscp.exp do perfectly - fine with it. Also, this lets the test use the debug flag specified by - the board file. For example, we can test with GCC and DWARF 5, with: - - $ make check RUNTESTFLAGS="--target_board unix/gdb:debug_flags=-gdwarf-5" TESTS="gdb.base/info-macros.exp" - - With the hard-coded -g3, this wouldn't actually test with DWARF 5. - - Change-Id: I33fa92ee545007d3ae9c52c4bb2d5be6b5b698f1 - -2021-08-04 Simon Marchi - - gdb: avoid dereferencing empty str_offsets_base optional in dwarf_decode_macros - Since 4d7188abfdf2 ("gdbsupport: add debug assertions in - gdb::optional::get"), some macro-related tests fail on Ubuntu 20.04 with - the system gcc 9.3.0 compiler when building with _GLIBCXX_DEBUG. For - example, gdb.base/info-macros.exp results in: - - (gdb) break -qualified main - /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/gdb_optional.h:206: internal-error: T& gdb::optional::get() [with T = long unsigned int]: Assertion `this->has_value ()' failed. - - The binary contains DWARF 4 debug info and includes a pre-standard - (pre-DWARF 5) .debug_macro section. The CU doesn't have a - DW_AT_str_offsets_base attribute (which doesn't exist in DWARF 4). The - field dwarf2_cu::str_offsets_base is therefore empty. At - dwarf2/read.c:24138, we unconditionally read the value in the optional, - which triggers the assertion shown above. - - The same thing happens when building the test program with DWARF 5 with - the same gcc compiler, as that version of gcc doesn't use indirect - string forms, even with DWARF 5. So it still doesn't add a - DW_AT_str_offsets_base attribute on the CU. - - Fix that by propagating down a gdb::optional for the str - offsets base instead of ULONGEST. That value is only used in - dwarf_decode_macro_bytes, when encountering an "strx" macro operation - (DW_MACRO_define_strx or DW_MACRO_undef_strx). Add a check there that - we indeed have a value in the optional before reading it. This is - unlikely to happen, but could happen in theory with an erroneous file - that uses DW_MACRO_define_strx but does not provide a - DW_AT_str_offsets_base (in practice, some things would probably have - failed before and stopped processing of debug info). I tested the - complaint by inverting the condition and using a clang-compiled binary, - which uses the strx operators. This is the result: - - During symbol reading: use of DW_MACRO_define_strx with unknown string offsets base [in module /home/simark/build/binutils-gdb/gdb/testsuite/outputs/gdb.base/info-macros/info-macros] - - The test now passes cleanly with the setup mentioned above, and the - testsuite looks on par with how it was before 4d7188abfdf2. - - Change-Id: I7ebd2724beb7b9b4178872374c2a177aea696e77 - -2021-08-04 Simon Marchi - - gdb: fix typo in complaint in dwarf2/macro.c - I saw this complaint when my code had some bug, and spotted the typo. - Fix it, and while at it mention DW_MACRO as well (it would be confusing - to only see DW_MACINFO with a file that uses a DWARF 5 .debug_macro - section). I contemplated the idea of passing the knowledge of whether - we are dealing with a .debug_macro section or .debug_macinfo section, to - print only the right one. But in the end, I don't think that trouble is - necessary for a complaint nobody is going to see. - - Change-Id: I276ce8da65c3eac5304f64a1e246358ed29cdbbc - -2021-08-04 Simon Marchi - - gdb: fix warnings in bsd-kvm.c - Building on OpenBSD, I get warnings like: - - CXX bsd-kvm.o - /home/simark/src/binutils-gdb/gdb/bsd-kvm.c:241:18: error: ISO C++11 does not allow conversion from string literal to 'char *' [-Werror,-Wwritable-strings] - nl[0].n_name = "_dumppcb"; - ^ - - Silence those by adding casts. - - Change-Id: I2bef4eebcc306762a4e3e5b5c52f67ecf2820503 - -2021-08-04 Andreas Krebbel - - IBM Z: Remove lpswey parameter - opcodes/ - * s390-opc.c (INSTR_SIY_RD): New instruction format. - (MASK_SIY_RD): New instruction mask. - * s390-opc.txt: Change instruction format of lpswey to SIY_RD. - - gas/ - * testsuite/gas/s390/zarch-arch14.d: Remove last operand of - lpswey. - * testsuite/gas/s390/zarch-arch14.s: Likewise. - -2021-08-04 Alan Modra - - PR28162, segment fault in mips_elf_assign_gp - For the testcase in the PR, _bfd_mips_elf32_gprel16_reloc is passed a - NULL output_bfd. As expected for reloc special functions if called by - objdump or when final linking. The function attempts to find the - output by - output_bfd = symbol->section->output_section->owner; - That makes some sense, since when handling a gp-relative reloc we need - the relevant gp to which the symbol is relative. Possibly the gp - value can be one for a shared library? But that doesn't seem useful - or supported by the various abi docs and won't work as written. - Symbols defined in shared libraries have section->output_section - NULL, and what's more the code in mips_elf_assign_gp isn't set up to - look at shared library symbols. - - Also, if the symbol is a SHN_ABS one the owner of *ABS* section is - NULL, which will result in the testcase segfault. The only gp to - which an absolute symbol can be relative is the linker output bfd when - linking, or the input bfd when not. This patch arranges to do that - for all gp-relative reloc symbols. - - * elf32-mips.c (_bfd_mips_elf32_gprel16_reloc): Don't use the - section symbol to find the output bfd, use input_section. - (mips_elf_gprel32_reloc, mips16_gprel_reloc): Likewise. - * elf64-mips.c (mips_elf64_gprel16_reloc): Likewise. - (mips_elf64_literal_reloc, mips_elf64_gprel32_reloc): Likewise. - (mips16_gprel_reloc): Likewise. - -2021-08-04 Tom de Vries - - [gdb/symtab] Use lambda function instead of addrmap_foreach_check - Use a lambda function instead of addrmap_foreach_check, - which removes the need for static variables. - - Also remove unnecessary static on local var temp_obstack in test_addrmap. - - gdb/ChangeLog: - - 2021-08-04 Tom de Vries - - * addrmap.c (addrmap_foreach_check): Remove. - (array, val1, val2): Move ... - (test_addrmap): ... here. Remove static on temp_obstack. Use lambda - function instead of addrmap_foreach_check. - -2021-08-04 H.J. Lu - - elf: Treat undefined version as hidden - Since undefined version can't be used to resolve any references without - the original definition, treat it as hidden. - - bfd/ - - PR binutils/28158 - * elf.c (_bfd_elf_get_symbol_version_string): Treat undefined - version as hidden. - - ld/ - - PR binutils/28158 - * testsuite/ld-elf/linux-x86.exp: Run PR binutils/28158 tests. - * testsuite/ld-elf/pr28158-1.c: New file. - * testsuite/ld-elf/pr28158-2.S: Likewise. - * testsuite/ld-elf/pr28158.nd: Likewise. - * testsuite/ld-elf/pr28158.rd: Likewise. - * testsuite/ld-elf/pr28158.t: Likewise. - * testsuite/ld-elfvers/vers2.dsym: Updated. - * testsuite/ld-elfvers/vers3.dsym: Likewise. - * testsuite/ld-elfvers/vers6.dsym: Likewise. - * testsuite/ld-elfvers/vers19.dsym: Likewise. - * testsuite/ld-elfvers/vers22.dsym: Likewise. - * testsuite/ld-elfvers/vers23.dsym: Likewise. - * testsuite/ld-elfvers/vers23d.dsym: Likewise. - * testsuite/ld-elfvers/vers27d4.dsym: Likewise. - * testsuite/ld-elfvers/vers28c.dsym: Likewise. - -2021-08-04 Tom de Vries - - [gdb/symtab] Implement addrmap_mutable_find - Currently addrmap_mutable_find is not implemented: - ... - static void * - addrmap_mutable_find (struct addrmap *self, CORE_ADDR addr) - { - /* Not needed yet. */ - internal_error (__FILE__, __LINE__, - _("addrmap_find is not implemented yet " - "for mutable addrmaps")); - } - ... - - I implemented this because I needed it during debugging, to be able to do: - ... - (gdb) p ((dwarf2_psymtab *)addrmap_find (map, addr))->filename - ... - before and after a call to addrmap_set_empty. - - Since this is not used otherwise, added addrmap unit test. - - Build on x86_64-linux, tested by doing: - ... - $ gdb -q -batch -ex "maint selftest addrmap" - Running selftest addrmap. - Ran 1 unit tests, 0 failed - ... - - gdb/ChangeLog: - - 2021-08-03 Tom de Vries - - * gdb/addrmap.c (addrmap_mutable_find): Implement - [GDB_SELF_TESTS] (CHECK_ADDRMAP_FIND): New macro. - [GDB_SELF_TESTS] (core_addr, addrmap_foreach_check, test_addrmap) - (_initialize_addrmap): New function. - -2021-08-04 Clément Chigot - - gas: correctly output XCOFF tbss symbols with XTY_CM type. - Global tbss symbols weren't correctly handled and were generating - a symbol with XTY_SD instead of XTY_CM as expected. - - gas/ - * config/tc-ppc.c (ppc_frog_symbol): Generate a XTY_CM when - a symbol has a storage class of XMC_UL. - -2021-08-04 Clément Chigot - - gas: always add dummy symbols when creating XCOFF sections. - Most of the algorithms for XCOFF in tc-ppc.c assume that - the csects field of a ppc_xcoff_section isn't NULL. - This was already made for most of the sections with the creation - of a dummy symbol. - This patch simply mades it default when creating a xcoff_section. - - gas/ - * config/tc-ppc.c (ppc_init_xcoff_section): Always create - the dummy symbol. - (md_begin): Adjust ppc_init_xcoff_section call. - (ppc_comm): Likewise. - (ppc_change_csect): Likewise. - -2021-08-04 Alan Modra - - PR28156, rename.c doesn't compile with MinGW - Guard against lack of struct timespec definition. - - PR 28156 - * rename.c (get_stat_atime, get_stat_mtime): Don't compile - unless HAVE_UTIMENSAT is defined. - -2021-08-04 Alan Modra - - PR28155, Superfluous "the" in the man page - PR 28155 - * ld.texi (Options ): Correct grammar. - - revise PE IMAGE_SCN_LNK_NRELOC_OVFL test - * coffcode.h (coff_set_alignment_hook): Test that the resulting - reloc count is not less than 0xffff. - -2021-08-04 Simon Marchi - - gdb: follow-fork: push target and add thread in target_follow_fork - In the context of ROCm-gdb [1], the ROCm target sits on top of the - linux-nat target. when a process forks, it needs to carry over some - data from the forking inferior to the fork child inferior. Ideally, the - ROCm target would implement the follow_fork target_ops method, but there - are some small problems. This patch fixes these, which helps the ROCm - target, but also makes things more consistent and a bit nicer in - general, I believe. - - The main problem is: when follow-fork-mode is "parent", - target_follow_fork is called with the parent as the current inferior. - When it's "child", target_follow_fork is called with the child as the - current inferior. This means that target_follow_fork is sometimes - called on the parent's target stack and sometimes on the child's target - stack. - - The parent's target stack may contain targets above the process target, - such as the ROCm target. So if follow-fork-child is "parent", the ROCm - target would get notified of the fork and do whatever is needed. But - the child's target stack, at that moment, only contains the exec and - process target copied over from the parent. The child's target stack is - set up by follow_fork_inferior, before calling target_follow_fork. In - that case, the ROCm target wouldn't get notified of the fork. - - For consistency, I think it would be good to always call - target_follow_fork on the parent inferior's target stack. I think it - makes sense as a way to indicate "this inferior has called fork, do - whatever is needed". The desired outcome of the fork (whether an - inferior is created for the child, do we need to detach from the child) - can be indicated by passed parameter. - - I therefore propose these changes: - - - make follow_fork_inferior always call target_follow_fork with the - parent as the current inferior. That lets all targets present on the - parent's target stack do some fork-related handling and push - themselves on the fork child's target stack if needed. - - For this purpose, pass the child inferior down to target_follow_fork - and follow_fork implementations. This is nullptr if no inferior is - created for the child, because we want to detach from it. - - - as a result, in follow_fork_inferior, detach from the parent inferior - (if needed) only after the target_follow_fork call. This is needed - because we want to call target_follow_fork before the parent's - target stack is torn down. - - - hand over to the targets in the parent's target stack (including the - process target) the responsibility to push themselves, if needed, to - the child's target stack. Also hand over the responsibility to the - process target, at the same time, to create the child's initial - thread (just like we do for follow_exec). - - - pass the child inferior to exec_on_vfork, so we don't need to swap - the current inferior between parent and child. Nothing in - exec_on_vfork depends on the current inferior, after this change. - - Although this could perhaps be replaced with just having the exec - target implement follow_fork and push itself in the child's target - stack, like the process target does... We would just need to make - sure the process target calls beneath()->follow_fork(...). I'm not - sure about this one. - - gdb/ChangeLog: - - * target.h (struct target_ops) : Add inferior* - parameter. - (target_follow_fork): Likewise. - * target.c (default_follow_fork): Likewise. - (target_follow_fork): Likewise. - * fbsd-nat.h (class fbsd_nat_target) : Likewise. - (fbsd_nat_target::follow_fork): Likewise, and call - inf_ptrace_target::follow_fork. - * linux-nat.h (class linux_nat_target) : Likewise. - * linux-nat.c (linux_nat_target::follow_fork): Likewise, and - call inf_ptrace_target::follow_fork. - * obsd-nat.h (obsd_nat_target) : Likewise. - * obsd-nat.c (obsd_nat_target::follow_fork): Likewise, and call - inf_ptrace_target::follow_fork. - * remote.c (class remote_target) : Likewise. - (remote_target::follow_fork): Likewise, and call - process_stratum_target::follow_fork. - * process-stratum-target.h (class process_stratum_target) - : New. - * process-stratum-target.c - (process_stratum_target::follow_fork): New. - * target-delegates.c: Re-generate. - - [1] https://github.com/ROCm-Developer-Tools/ROCgdb - - Change-Id: I460bd0af850f0485e8aed4b24c6d8262a4c69929 - -2021-08-04 GDB Administrator - - Automatic date update in version.in - -2021-08-03 Carl Love - - Fixes for mi-fortran-modules.exp fixes - Output has additional information for a given filename. - - gdb/testsuite/ChangeLog - * gdb.mi/mi-fortran-modules.exp (system_modules_pattern, - system_module_symbols_pattern): Add check for additional symbols - on the line - -2021-08-03 Simon Marchi - - gdbsupport: add debug assertions in gdb::optional::get - The libstdc++ version of optional contains some runtime checks enabled - when _GLIBCXX_DEBUG is defined. I think it would be useful if our - version contained similar checks. - - Add checks in the two `get` methods, also conditional on _GLIBCXX_DEBUG. - I think it's simpler to use that macro rather than introducing a new - GDB-specific one, as I think that if somebody is interested in enabling - these runtime checks, they'll also be interested in enabling the - libstdc++ runtime checks (and vice-versa). - - I implemented these checks using gdb_assert. Note that gdb_assert - throws (after querying the user), and we are in noexcept methods. That - means that std::terminate / abort will immediately be called. I think - this is ok, since if those were "real" _GLIBCXX_DEBUG checks, abort - would be called straight away. - - If I add a dummy failure, it looks like so: - - $ ./gdb -q -nx --data-directory=data-directory - /home/simark/src/binutils-gdb/gdb/../gdbsupport/gdb_optional.h:206: internal-error: T& gdb::optional::get() [with T = int]: Assertion `this->has_value ()' failed. - A problem internal to GDB has been detected, - further debugging may prove unreliable. - Quit this debugging session? (y or n) n - [1] 658767 abort (core dumped) ./gdb -q -nx --data-directory=data-directory - - Change-Id: Iadfdcd131425bd2ca6a2de30d7b22e9b3cc67793 - -2021-08-03 Alok Kumar Sharma - - [gdb/testsuite] templates.exp to accept clang++ output - Please consider below testcase with intended error. - `````````` - constexpr const char cstring[] = "Eta"; - template class Column {}; - using quick = Column; // cstring without '&' - - void lookup() { - quick c1; - c1.ls(); - } - `````````` - It produces below error. - `````````` - no member named 'ls' in 'Column<&cstring, double>'. - `````````` - Please note that error message contains '&' for cstring, which is absent - in actual program. - Clang++ does not generate & in such cases and this should also be - accepted as correct output. - - gdb/testsuite/ChangeLog: - - * gdb.cp/templates.exp: Accept different but correct output - from the Clang++ compiled binary also. - -2021-08-03 GDB Administrator - - Automatic date update in version.in - -2021-08-02 Tom Tromey - - Handle compiler-generated suffixes in Ada names - The compiler may add a suffix to a mangled name. A typical example - would be splitting a function and creating a ".cold" variant. - - This patch changes Ada decoding (aka demangling) to handle these - suffixes. It also changes the encoding process to handle them as - well. - - A symbol like "function.cold" will now be displayed to the user as - "function[cold]". The "." is not simply preserved because that is - already used in Ada. - -2021-08-02 Tom Tromey - - Remove uses of fprintf_symbol_filtered - I believe that many calls to fprintf_symbol_filtered are incorrect. - In particular, there are some that pass a symbol's print name, like: - - fprintf_symbol_filtered (gdb_stdout, sym->print_name (), - current_language->la_language, DMGL_ANSI); - - fprintf_symbol_filtered uses the "demangle" global to decide whether - or not to demangle -- but print_name does this as well. This can lead - to double-demangling. Normally this could be innocuous, except I also - plan to change Ada demangling in a way that causes this to fail. - -2021-08-02 Tom Tromey - - Handle type qualifier for enumeration name - Pierre-Marie noticed that the Ada expression "TYPE'(NAME)" resolved - incorrectly when "TYPE" was an enumeration type. Here, "NAME" should - be unambiguous. - - This patch fixes this problem. Note that the patch is not perfect -- - it does not give an error if TYPE is an enumeration type but NAME is - not an enumerator but does have some other meaning in scope. Fixing - this proved difficult, and so I've left it out. - -2021-08-02 Tom Tromey - - Remove the type_qualifier global - The type_qualifier global is no longer needed in the Ada expression - parser, so this removes it. - -2021-08-02 Tom Tromey - - Defer Ada character literal resolution - In Ada, an enumeration type can use a character literal as one of the - enumerators. The Ada expression parser handles the appropriate - conversion. - - It turns out, though, that this conversion was handled incorrectly. - For an expression like TYPE'(EXP), the conversion would be done for - any such literal appearing in EXP -- but only the outermost such - expression should really be affected. - - This patch defers the conversion until the resolution phase, fixing - the bug. - -2021-08-02 Tom Tromey - - Refactor Ada resolution - In a subsequent patch, it will be convenient if an Ada expression - operation can supply its own replacement object. This patch refactors - Ada expression resolution to make this possible. - - Remove add_symbols_from_enclosing_procs - I noticed that add_symbols_from_enclosing_procs is empty, and can be - removed. The one caller, ada_add_local_symbols, can also be - simplified, removing some code that, I think, was an incorrect attempt - to handle nested functions. - -2021-08-02 Tom Tromey - - Avoid crash in varobj deletion - PR varobj/28131 points out a crash in the varobj deletion code. It - took a while to reproduce this, but essentially what happens is that a - top-level varobj deletes its root object, then deletes the "dynamic" - object. However, deletion of the dynamic object may cause - ~py_varobj_iter to run, which in turn uses gdbpy_enter_varobj: - - gdbpy_enter_varobj::gdbpy_enter_varobj (const struct varobj *var) - : gdbpy_enter (var->root->exp->gdbarch, var->root->exp->language_defn) - { - } - - However, because var->root has already been destroyed, this is - invalid. - - I've added a new test case. This doesn't reliably crash, but the - problem can easily be seen under valgrind (and, I presume, with ASAN, - though I did not try this). - - Tested on x86-64 Fedora 32. I also propose putting this on the GDB 11 - branch, with a suitable ChangeLog entry of course. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28131 - -2021-08-02 Tom de Vries - - [gdb/testsuite] Fix gdb.dwarf2/dw2-using-debug-str.exp with cc-with-dwz-m - When running with target board cc-with-dwz-m, we run into: - ... - (gdb) file dw2-using-debug-str-no-debug-str^M - Reading symbols from dw2-using-debug-str-no-debug-str...^M - (gdb) FAIL: gdb.dwarf2/dw2-using-debug-str.exp: file dw2-using-debug-str - ... - - With native, the .debug_str section is present in the - dw2-using-debug-str executable, and removed from the - dw2-using-debug-str-no-debug-str executable. When loading the latter, a dwarf - error is triggered. - - With cc-with-dwz-m, the .debug_str section is not present in the - dw2-using-debug-str executable, because it's already moved to - .tmp/dw2-using-debug-str.dwz. Consequently, the removal has no effect, and no - dwarf error is triggered, which causes the FAIL. - - The same problem arises with target board cc-with-gnu-debuglink. - - Fix this by detecting whether the .debug_str section is missing, and skipping - the remainder of the test-case. - - Tested on x86_64-linux. - - gdb/testsuite/ChangeLog: - - 2021-08-02 Tom de Vries - - * gdb.dwarf2/dw2-using-debug-str.exp: Handle missing .debug_str - section in dw2-using-debug-str. - -2021-08-02 Tom de Vries - - [gdb/testsuite] Fix gdb.dwarf2/dw2-using-debug-str.exp with cc-with-gdb-index - When running with target board cc-with-gdb-index, we run into: - ... - (gdb) file dw2-using-debug-str-no-debug-str^M - Reading symbols from dw2-using-debug-str-no-debug-str...^M - Dwarf Error: DW_FORM_strp used without required section^M - (gdb) FAIL: gdb.dwarf2/dw2-using-debug-str.exp: file dw2-using-debug-str - ... - - The test expects the dwarf error, but has no matching pattern for the entire - output. - - Fix this by updating the regexp. - - Tested on x86_64-linux. - - gdb/testsuite/ChangeLog: - - 2021-08-02 Tom de Vries - - * gdb.dwarf2/dw2-using-debug-str.exp: Update regexp to match - cc-with-gdb-index output. - -2021-08-02 Tom de Vries - - [gdb/testsuite] Fix gdb.dwarf2/per-bfd-sharing.exp with cc-with-gdb-index - When running with target board cc-with-gdb-index, we run into: - ... - rm: cannot remove '/tmp/tmp.JmYTeiuFjj/*.gdb-index': \ - No such file or directory^M - FAIL: gdb.dwarf2/per-bfd-sharing.exp: \ - couldn't remove files in temporary cache dir - ... - - Fix this, as in gdb.base/index-cache.exp, by only FAILing when - $expecting_index_cache_use. - - Tested on x86_64-linux. - - gdb/testsuite/ChangeLog: - - 2021-08-02 Tom de Vries - - * gdb.dwarf2/per-bfd-sharing.exp: Only expect index-cache files - when $expecting_index_cache_use. - -2021-08-02 Tom de Vries - - [gdb/testsuite] Fix gdb.dwarf2/gdb-index-nodebug.exp with cc-with-gdb-index - When running with target board cc-with-gdb-index, we run into: - ... - (gdb) save gdb-index .^M - Error while writing index for `gdb-index-nodebug': \ - Cannot use an index to create the index^M - (gdb) FAIL: gdb.dwarf2/gdb-index-nodebug.exp: try to save gdb index - ... - - Fix this by detecting an already present index, and marking the test - unsupported. - - Tested on x86_64-linux. - - gdb/testsuite/ChangeLog: - - 2021-08-02 Tom de Vries - - * gdb.dwarf2/gdb-index-nodebug.exp: Mark unsupported when index - already present. - -2021-08-02 Tom de Vries - - [gdb/testsuite] Fix gdb.dwarf2/fission-relative-dwo.exp with cc-with-gdb-index - When running with target board cc-with-gdb-index, we run into: - ... - gdb compile failed, warning: Could not find DWO CU \ - fission-relative-dwo.dwo(0x1234) referenced by CU at offset 0xc7 \ - [in module outputs/gdb.dwarf2/fission-relative-dwo/.tmp/fission-relative-dwo] - UNTESTED: gdb.dwarf2/fission-relative-dwo.exp: fission-relative-dwo.exp - ERROR: failed to compile fission-relative-dwo - ... - - The problem is that: - - the .dwo file is found relative to the executable, and - - cc-with-tweaks.sh moves the executable to a temp dir, but not - the .dwo file. - - Fix this by copying the .dwo file alongside the executable in the temp dir. - - Verified changes using shellcheck. - - Tested on x86_64-linux. - - gdb/ChangeLog: - - 2021-08-02 Tom de Vries - - * contrib/cc-with-tweaks.sh: Copy .dwo files alongside executable. - -2021-08-02 Shahab Vahedi - - gdb: Make the builtin "boolean" type an unsigned type - When printing the fields of a register that is of a custom struct type, - the "unpack_bits_as_long ()" function is used: - - do_val_print (...) - cp_print_value_fields (...) - value_field_bitfield (...) - unpack_value_bitfield (...) - unpack_bits_as_long (...) - - This function may sign-extend the extracted field while returning it: - - val >>= lsbcount; - - if (...) - { - valmask = (((ULONGEST) 1) << bitsize) - 1; - val &= valmask; - if (!field_type->is_unsigned ()) - if (val & (valmask ^ (valmask >> 1))) - val |= ~valmask; - } - - return val; - - lsbcount: Number of lower bits to get rid of. - bitsize: The bit length of the field to be extracted. - val: The register value. - field_type: The type of field that is being handled. - - While the logic here is correct, there is a problem when it is - handling "field_type"s of "boolean". Those types are NOT marked - as "unsigned" and therefore they end up being sign extended. - Although this is not a problem for "false" (0), it definitely - causes trouble for "true". - - This patch constructs the builtin boolean type as such that it is - marked as an "unsigned" entity. - - The issue tackled here was first encountered for arc-elf32 target - running on an x86_64 machine. The unit-test introduced in this change - has passed for all the targets (--enable-targets=all) running on the - same x86_64 host. - - Fixes: https://sourceware.org/PR28104 - -2021-08-02 GDB Administrator - - Automatic date update in version.in - -2021-08-01 Tom de Vries - - [gdb/testsuite] Fix gdb.base/maint.exp with cc-with-gdb-index - With target board cc-with-gdb-index we run into: - ... - FAIL: gdb.base/maint.exp: maint print statistics - ... - - The output that is checked is: - ... - Statistics for 'maint':^M - Number of "minimal" symbols read: 53^M - Number of "full" symbols read: 40^M - Number of "types" defined: 60^M - Number of symbol tables: 7^M - Number of symbol tables with line tables: 2^M - Number of symbol tables with blockvectors: 2^M - Number of read CUs: 2^M - Number of unread CUs: 5^M - Total memory used for objfile obstack: 20320^M - Total memory used for BFD obstack: 4064^M - Total memory used for string cache: 4064^M - ... - and the regexp doesn't match because it expects the "Number of read/unread - CUs" lines in a different place. - - Fix this by updating the regexp. - - Tested on x86_64-linux. - - gdb/testsuite/ChangeLog: - - 2021-08-01 Tom de Vries - - * gdb.base/maint.exp: Update "maint print statistics" to match - output with target board cc-with-gdb-index. - -2021-08-01 Tom de Vries - - [gdb/testsuite] Fix gdb.base/index-cache.exp with cc-with-gdb-index - With target board cc-with-gdb-index we run into: - ... - FAIL: gdb.base/index-cache.exp: couldn't remove files in temporary cache dir - ... - - The problem is that there are no files to remove, because the index cache - isn't used, as indicated by $expecting_index_cache_use. - - Fix this by only FAILing when $expecting_index_cache_use. - - Tested on x86_64-linux. - - gdb/testsuite/ChangeLog: - - 2021-08-01 Tom de Vries - - * gdb.base/index-cache.exp: - -2021-08-01 GDB Administrator - - Automatic date update in version.in - -2021-07-31 GDB Administrator - - Automatic date update in version.in - -2021-07-30 Tom Tromey - - Use iterator_range in more places - This changes a couple of spots to replace custom iterator range - classes with a specialization of iterator_range. - - Regression tested on x86-64 Fedora 34. - -2021-07-30 Tom Tromey - - Replace exception_print_same with operator!= - I noticed that exception_print_same is only used in a single spot, and - it seemed to be better as an operator!= method attached to - gdb_exception. - - Regression tested on x86-64 Fedora 34. - -2021-07-30 Tom de Vries - - [gdb/build] Disable attribute nonnull - With trunk gcc (12.0) we're running into a -Werror=nonnull-compare build - breaker in gdb, which caused a broader review of the usage of the nonnull - attribute. - - The current conclusion is that it's best to disable this. This is explained - at length in the gdbsupport/common-defs.h comment. - - Tested by building with trunk gcc. - - gdb/ChangeLog: - - 2021-07-29 Tom de Vries - - * gdbsupport/common-defs.h (ATTRIBUTE_NONNULL): Disable. - -2021-07-30 Clément Chigot - - gas: ensure XCOFF DWARF subsection are initialized to 0 - debug_abbrev doesn't use end_exp to compute its size. However, it must - be NULL. Otherwise, ppc_xcoff_end might try to access uninitialized - memory. - - gas/ - * config/tc-ppc.c (ppc_dwsect): Use XCNEW instead of XNEW when creating - a new subsection. - -2021-07-30 Clément Chigot - - bfd: ensure that symbols targeted by DWARF relocations are kept in XCOFF - This patch improves XCOFF garbage collector pass, in order to keep - symbols being referenced only by special sections like DWARF sections. - - bfd/ - * xcofflink.c (xcoff_mark): Replace SEC_MARK by gc_mark. - Look through relocations even if xcoff_section_data is NULL. - (xcoff_sweep): Check if any sections of a file is kept before - adding its special sections. - Call xcoff_mark for special sessions being kept instead of just - marking them. - (SEC_MARK): Remove - (xcoff_mark_symbol): Replace SEC_MARK by gc_mark. - (xcoff_keep_symbol_p): Likewise. - (bfd_xcoff_size_dynamic_sections): Likewise. - (xcoff_find_tc0): Likewise. - -2021-07-30 Clément Chigot - - bfd: avoid a crash when debug_section isn't created in XCOFF - bfd/ - * xcofflink.c (bfd_xcoff_size_dynamic_sections): - Add check to know if debug_section is initialized. - -2021-07-30 Alan Modra - - readelf: catch archive_file_size of -1 - Fuzzers might put -1 in arhdr.ar_size. If the size is rounded up to - and even number of bytes we get zero. - - * readelf.c (process_archive): Don't round up archive_file_size. - Do round up next_arhdr_offset calculation. - -2021-07-30 Alan Modra - - reloc_upper_bound size calculations - Section reloc_count is an unsigned int. Adding one for a NULL - terminator to an array of arelent pointers can wrap the count to - zero. Avoid that by doing the addition as longs. - - * coffgen.c (coff_get_reloc_upper_bound): Don't overflow unsigned - int expression. - * elf.c (_bfd_elf_get_reloc_upper_bound): Likewise. - * elf64-sparc.c (elf64_sparc_get_reloc_upper_bound): Likewise. - * mach-o.c (bfd_mach_o_get_reloc_upper_bound): Likewise. - * vms-alpha.c (alpha_vms_get_reloc_upper_bound): Likewise. - -2021-07-30 Alan Modra - - Sanity check _bfd_coff_read_string_table - * coffgen.c (_bfd_coff_read_string_table): Catch overflows - when calculating string table file location. - -2021-07-30 Alan Modra - - IMAGE_SCN_LNK_NRELOC_OVFL - From microsoft docs: It is an error if IMAGE_SCN_LNK_NRELOC_OVFL is - set and there are fewer than 0xffff relocations in the section. - - * coffcode.h (coff_set_alignment_hook): Sanity check overflow - reloc count. - -2021-07-30 Simon Marchi - - gdb: fix nr_bits gdb_assert in append_flags_type_field - The assertion - - gdb_assert (nr_bits >= 1 && nr_bits <= type_bitsize); - - is not correct. Well, it's correct in that we do want the number of - bits to be in the range [1, type_bitsize]. But we don't check anywhere - that the end of the specified flag is within the containing type. - - The following code should generate a failed assertion, as the flag goes - past the 32 bits of the underlying type, but it's currently not caught: - - static void - test_print_flag (gdbarch *arch) - { - type *flags_type = arch_flags_type (arch, "test_type", 32); - type *field_type = builtin_type (arch)->builtin_uint32; - append_flags_type_field (flags_type, 31, 2, field_type, "invalid"); - } - - (You can test this by registering it as a selftest using - selftests::register_test_foreach_arc and running.) - - Change the assertion to verify that the end bit is within the range of - the underlying type. This implicitly verifies that nr_bits is not - too big as well, so we don't need a separate assertion for that. - - Change-Id: I9be79e5fd7a5917bf25b03b598727e6274c892e8 - Co-Authored-By: Tony Tye - -2021-07-30 GDB Administrator - - Automatic date update in version.in - -2021-07-29 John Baldwin - - obsd-nat: Report both thread and PID in ::pid_to_str. - This improves the output of info threads when debugging multiple - inferiors (e.g. after a fork with detach_on_fork disabled). - -2021-07-29 John Baldwin - - obsd-nat: Various fixes for fork following. - - Don't use #ifdef's on ptrace ops. obsd-nat.h didn't include - , so the virtual methods weren't always overridden - causing the fork following to not work. In addition, the thread and - fork code is intertwined in ::wait and and the lack of #ifdef's - there already assumed both were present. Finally, both of these - ptrace ops have been present in OpenBSD for at least 10 years. - - - Move duplicated code to enable PTRACE_FORK event reporting to a - single function and invoke it on new child processes reported via - PTRACE_FORK. - - - Don't return early from PTRACE_FORK handling, but instead reset - wptid to the correct ptid if the child reports its event before the - parent. This allows the ptid fixup code to add thread IDs if the - first event for a process is a PTRACE_FORK event. This also - properly returns ptid's with thread IDs when reporting PTRACE_FORK - events. - - - Handle detach_fork by skipping the PT_DETACH. - -2021-07-29 John Baldwin - - obsd-nat: Various fixes to obsd_nat_target::wait. - - Call inf_ptrace_target::wait instead of duplicating the code. - Replace a check for WIFSTOPPED on the returned status from waitpid - by checking for TARGET_WAITKIND_STOPPED in the parsed status as is - done in fbsd_nat_target::wait. - - - Don't use inferior_ptid when deciding if a new process is a child vs - parent of the fork. Instead, use find_inferior_pid and assume that - if an inferior already exists, the pid in question is the parent; - otherwise, the pid is the child. - - - Don't use inferior_ptid when deciding if the ptid of the process - needs to be updated with an LWP ID, or if this is a new thread. - Instead, use the approach from fbsd-nat which is to check if a ptid - without an LWP exists and if so update the ptid of that thread - instead of adding a new thread. - -2021-07-29 John Baldwin - - x86-bsd-nat: Only define gdb_ptrace when using debug registers. - This fixes an unused function warning on OpenBSD which does not - support PT_GETDBREGS. - -2021-07-29 John Baldwin - - Don't compile x86 debug register support on OpenBSD. - Simon Marchi tried gdb on OpenBSD, and it immediately segfaults when - running a program. Simon tracked down the problem to x86_dr_low.get_status - being nullptr at this point: - - (lldb) print x86_dr_low.get_status - (unsigned long (*)()) $0 = 0x0000000000000000 - (lldb) bt - * thread #1, stop reason = step over - * frame #0: 0x0000033b64b764aa gdb`x86_dr_stopped_data_address(state=0x0000033d7162a310, addr_p=0x00007f7ffffc5688) at x86-dregs.c:645:12 - frame #1: 0x0000033b64b766de gdb`x86_dr_stopped_by_watchpoint(state=0x0000033d7162a310) at x86-dregs.c:687:10 - frame #2: 0x0000033b64ea5f72 gdb`x86_stopped_by_watchpoint() at x86-nat.c:206:10 - frame #3: 0x0000033b64637fbb gdb`x86_nat_target::stopped_by_watchpoint(this=0x0000033b65252820) at x86-nat.h:100:12 - frame #4: 0x0000033b64d3ff11 gdb`target_stopped_by_watchpoint() at target.c:468:46 - frame #5: 0x0000033b6469b001 gdb`watchpoints_triggered(ws=0x00007f7ffffc61c8) at breakpoint.c:4790:32 - frame #6: 0x0000033b64a8bb8b gdb`handle_signal_stop(ecs=0x00007f7ffffc61a0) at infrun.c:6072:29 - frame #7: 0x0000033b64a7e3a7 gdb`handle_inferior_event(ecs=0x00007f7ffffc61a0) at infrun.c:5694:7 - frame #8: 0x0000033b64a7c1a0 gdb`fetch_inferior_event() at infrun.c:4090:5 - frame #9: 0x0000033b64a51921 gdb`inferior_event_handler(event_type=INF_REG_EVENT) at inf-loop.c:41:7 - frame #10: 0x0000033b64a827c9 gdb`infrun_async_inferior_event_handler(data=0x0000000000000000) at infrun.c:9384:3 - frame #11: 0x0000033b6465bd4f gdb`check_async_event_handlers() at async-event.c:335:4 - frame #12: 0x0000033b65070917 gdb`gdb_do_one_event() at event-loop.cc:216:10 - frame #13: 0x0000033b64af0db1 gdb`start_event_loop() at main.c:421:13 - frame #14: 0x0000033b64aefe9a gdb`captured_command_loop() at main.c:481:3 - frame #15: 0x0000033b64aed5c2 gdb`captured_main(data=0x00007f7ffffc6470) at main.c:1353:4 - frame #16: 0x0000033b64aed4f2 gdb`gdb_main(args=0x00007f7ffffc6470) at main.c:1368:7 - frame #17: 0x0000033b6459d787 gdb`main(argc=5, argv=0x00007f7ffffc6518) at gdb.c:32:10 - frame #18: 0x0000033b6459d521 gdb`___start + 321 - - On BSDs, get_status is set in _initialize_x86_bsd_nat, but only if - HAVE_PT_GETDBREGS is defined. PT_GETDBREGS doesn't exist on OpenBSD, so - get_status (and the other fields of x86_dr_low) are left as nullptr. - - OpenBSD doesn't support getting or setting the x86 debug registers, so - fix by omitting debug register support entirely on OpenBSD: - - - Change x86bsd_nat_target to only inherit from x86_nat_target if - PT_GETDBREGS is supported. - - - Don't include x86-nat.o and nat/x86-dregs.o for OpenBSD/amd64. They - were already omitted for OpenBSD/i386. - -2021-07-29 Carl Love - - Fix for gdb.tui/tui-layout-asm.exp - The width of the window is too narrow to display the entire assembly line. - The width of the columns in the window changes as the test walks thru the - terminal window output. The column change results in the first and second - reads of the same line to differ thus causing the test to fail. Increasing - the width of the window keeps the column width consistent thru the test. - - If the test fails, the added check prints an message to the log file if - the failure may be due to the window being too narrow. - - gdb/testsuite/ChangeLog - - * gdb.tui/tui-layout-asm.exp: Replace window width of 80 with the - tui_asm_window_width variable for the width. Add if - count_whitespace check. - (count_whitespace): New proc - -2021-07-29 George Barrett - - guile/scm-math: indentation fixes - Changes the indenting of a few expressions in - vlscm_convert_typed_number to be better in line with the prevailing - code style. - - gdb/ChangeLog: - - 2021-07-30 George Barrett - - * guile/scm-math.c (vlscm_convert_typed_number): Fix the - indentation of calls to gdbscm_make_out_of_range_error. - - Change-Id: I7463998b77c17a00e88058e89b52fa029ee40e03 - -2021-07-29 George Barrett - - guile: fix make-value with pointer type - Calling the `make-value' procedure with an integer value and a pointer - type for the #:type argument triggers a failed assertion in - `get_unsigned_type_max', as that function doesn't consider pointers to - be an unsigned type. This commit fixes the issue by adding a separate - code path for pointers. - - As previously suggested, range checking is done using a new helper - function in gdbtypes. - - gdb/ChangeLog: - - 2021-07-30 George Barrett - - * gdbtypes.h (get_pointer_type_max): Add declaration. - * gdbtypes.c (get_pointer_type_max): Add definition for new - helper function. - * guile/scm-math.c (vlscm_convert_typed_number): Add code path - for handling conversions to pointer types without failing an - assert. - - gdb/testsuite/ChangeLog: - - 2021-07-30 George Barrett - - * gdb.guile/scm-math.exp (test_value_numeric_ops): Add test - for creating pointers with make-value. - (test_make_pointer_value, test_pointer_numeric_range): Add - test procedures containing checks for integer-to-pointer - validation. - - Change-Id: I9994dd1c848840a3d995f745e6d72867732049f0 - -2021-07-29 George Barrett - - gdbtypes: return value from get_unsigned_type_max - Changes the signature of get_unsigned_type_max to return the computed - value rather than returning void and writing the value into a pointer - passed by the caller. - - gdb/ChangeLog: - - 2021-07-30 George Barrett - - * gdbtypes.h (get_unsigned_type_max): Change signature to - return the result instead of accepting a pointer argument in - which to store the result. - * gdbtypes.c (get_unsigned_type_max): Likewise. - * guile/scm-math.c (vlscm_convert_typed_number): Update caller - of get_unsigned_type_max. - (vlscm_integer_fits_p): Likewise. - - Change-Id: Ibb1bf0c0fa181fac7853147dfde082a7d1ae2323 - -2021-07-29 Clément Chigot - - gas: improve C_BSTAT and C_STSYM symbols handling on XCOFF - A C_BSTAT debug symbol specifies the beginning of a static block. - Its n_value is the index of the csect containing static symbols. - A C_STSYM debug symbol represents the stabstring of a statically - allocated symbol. Its n_value is the offset in the csect pointed - by the containing C_BSTAT. - - These two special n_value were not correctly handled both when - generating object files with gas or when reading them with objdump. - This patch tries to improve that and, above all, to allow gas-generated - object files with such symbols to be accepted by AIX ld. - - bfd/ - * coff-bfd.c (bfd_coff_get_syment): Adjust n_value of symbols - having fix_value = 1 in order to be an index and not a memory - offset. - * coffgen.c (coff_get_symbol_info): Likewize. - (coff_print_symbol): Likewize. - - gas/ - * config/tc-ppc.c (ppc_frob_label): Don't change within if - already set. - (ppc_stabx): Remove workaround changing exp.X_add_symbol's - within. - * config/tc-ppc.h (struct ppc_tc_sy): Update comments. - * symbols.c (resolve_symbol_value): Remove symbol update - when final_val is 0 and it's an AIX debug symbol. - * testsuite/gas/ppc/aix.exp: Add new tests. - * testsuite/gas/ppc/xcoff-stsym-32.d: New test. - * testsuite/gas/ppc/xcoff-stsym-64.d: New test. - * testsuite/gas/ppc/xcoff-stsym.s: New test. - -2021-07-29 George Barrett - - Guile: temporary breakpoints - Adds API to the Guile bindings for creating temporary breakpoints and - querying whether an existing breakpoint object is temporary. This is - effectively a transliteration of the Python implementation. - - It's worth noting that the added `is_temporary' flag is ignored in the - watchpoint registration path. This replicates the behaviour of the - Python implementation, but might be a bit surprising for users. - - gdb/ChangeLog: - - 2021-06-09 George Barrett - - * guile/scm-breakpoint.c (gdbscm_breakpoint_object::spec): Add - is_temporary field. - (temporary_keyword): Add keyword object for make-breakpoint - argument parsing. - (gdbscm_make_breakpoint): Accept #:temporary keyword argument - and store the value in the allocated object's - spec.is_temporary. - (gdbscm_register_breakpoint_x): Pass the breakpoint's - spec.is_temporary value to create_breakpoint. - (gdbscm_breakpoint_temporary): Add breakpoint-temporary? - procedure implementation. - (breakpoint_functions::make-breakpoint): Update documentation - string and fix a typo. - (breakpoint_functions::breakpoint-temporary?): Add - breakpoint-temporary? procedure. - (gdbscm_initialize_breakpoints): Initialise temporary_keyword - variable. - NEWS (Guile API): Mention new temporary breakpoints API. - - gdb/doc/ChangeLog: - - 2021-06-09 George Barrett - - * guile.texi (Breakpoints In Guile): Update make-breakpoint - documentation to reflect new #:temporary argument. - Add documentation for new breakpoint-temporary? procedure. - - gdb/testsuite/ChangeLog: - - 2021-06-09 George Barrett - - * gdb.guile/scm-breakpoint.exp: Add additional tests for - temporary breakpoints. - - Change-Id: I2de332ee7c256f5591d7141ab3ad50d31b871d17 - -2021-07-29 GDB Administrator - - Automatic date update in version.in - -2021-07-28 Simon Marchi - - gdb: clean up some things in features/Makefile - Clean up some things I noticed: - - - we generate a regformats/microblaze-with-stack-protect.dat file. I - don't think this is used. It could be used by a GDBserver built for - Microblaze, but GDBserver isn't ported to Microblaze. So I don't - think that's used at all. Remove the entry in features/Makefile and - the file itself. - - - There are a bunch of *-expedite values in features/Makefile for - architectures for which we don't generate dat files. AFAIK, these - *-expedite values are only used when generating dat files. Remove - those that are not necessary. - - - 32bit-segments.xml is not listed in the Makfile, but it's used. This - means that it wouldn't get re-generated if we were to change how C - files are generated from the XML. It looks like it was simply - forgotten, add it. - - Change-Id: I112d00db317102270e1df924473c37122ccb6c3a - -2021-07-28 H.J. Lu - - x86: Simplify check for distinct TMM register operands - If any pair of operands in AMX instructions with 3 TMM register operands - are the same, the instruction will UD. Don't call register_number to - check for distinct TMM register operands since all TMM register operands - have the same size. - - * config/tc-i386.c (check_VecOperands): Remove register_number - call when checking for distinct TMM register operands. - -2021-07-28 H.J. Lu - - ld: Run tmpdir/pr28138 only for native build - * PR ld/28138 - * testsuite/ld-plugin/lto.exp: Run tmpdir/pr28138 only for - native build. - -2021-07-28 H.J. Lu - - bfd: Close the file descriptor if there is no archive fd - Close the file descriptor if there is no archive plugin file descriptor - to avoid running out of file descriptors on thin archives with many - archive members. - - bfd/ - - PR ld/28138 - * plugin.c (bfd_plugin_close_file_descriptor): Close the file - descriptor there is no archive plugin file descriptor. - - ld/ - - PR ld/28138 - * testsuite/ld-plugin/lto.exp: Run ld/28138 tests. - * testsuite/ld-plugin/pr28138.c: New file. - * testsuite/ld-plugin/pr28138-1.c: Likewise. - * testsuite/ld-plugin/pr28138-2.c: Likewise. - * testsuite/ld-plugin/pr28138-3.c: Likewise. - * testsuite/ld-plugin/pr28138-4.c: Likewise. - * testsuite/ld-plugin/pr28138-5.c: Likewise. - * testsuite/ld-plugin/pr28138-6.c: Likewise. - * testsuite/ld-plugin/pr28138-7.c: Likewise. - -2021-07-28 H.J. Lu - - ld: Report error reason when a library cannot be found - With "ulimit -n 20", report: - - ld: cannot find -lgcc: Too many open files - - instead of - - ld: cannot find -lgcc - - * ldfile.c (ldfile_open_file): Rport error reason when a library - cannot be found. - -2021-07-28 Sergei Trofimovich - - texi2pod.pl: add no-op --no-split option support [PR28144] - Change 2faf902da ("generate single html manual page by default") - added use of --no-split option to makeinfo. binutils reuses - makeinfo options for texi2pod.pl wrapper. Unsupported option - led to silent manpage truncation. - - The change adds no-op option support. - - etc/ - - * texi2pod.pl: Handle no-op --no-split option. - -2021-07-28 Andrew Burgess - - gdb: fix missing space in some info variables output - Fixes PR gdb/28121. When a user declares an array like this: - - int * const foo_1[3]; - - And in GDB the user does this: - - (gdb) info variables foo - All variables matching regular expression "foo": - - File test.c: - 1: int * constfoo_1[3]; - - Notice the missing space between 'const' and 'foo_1'. This is fixed - in c_type_print_varspec_prefix (c-typeprint.c) by passing through the - flag that indicates if a trailing space is needed, rather than hard - coding the flag to false as we currently do. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28121 - -2021-07-28 Tom de Vries - - [gdb/symtab] Fix unhandled dwarf expression opcode with gcc-11 -gdwarf-5 - [ I've confused things by forgetting to add -gdwarf-4 in $subject of - commit 0057a7ee0d9 "[gdb/testsuite] Add KFAILs for gdb.ada FAILs with - gcc-11". So I'm adding here -gdwarf-5 in $subject, even though -gdwarf-5 is - the default for gcc-11. I keep getting confused because of working with a - system gcc-11 compiler that was patched to switch the default back to - -gdwarf-4. ] - - When running test-case gdb.ada/arrayptr.exp with gcc-11 (and default - -gdwarf-5), I run into: - ... - (gdb) print pa_ptr.all^M - Unhandled dwarf expression opcode 0xff^M - (gdb) FAIL: gdb.ada/arrayptr.exp: scenario=all: print pa_ptr.all - ... - - What happens is that pa_ptr: - ... - <2><1523>: Abbrev Number: 3 (DW_TAG_variable) - <1524> DW_AT_name : pa_ptr - <1529> DW_AT_type : <0x14fa> - ... - has type: - ... - <2><14fa>: Abbrev Number: 2 (DW_TAG_typedef) - <14fb> DW_AT_name : foo__packed_array_ptr - <1500> DW_AT_type : <0x1504> - <2><1504>: Abbrev Number: 4 (DW_TAG_pointer_type) - <1505> DW_AT_byte_size : 8 - <1505> DW_AT_type : <0x1509> - ... - which is a pointer to a subrange: - ... - <2><1509>: Abbrev Number: 12 (DW_TAG_subrange_type) - <150a> DW_AT_lower_bound : 0 - <150b> DW_AT_upper_bound : 0x3fffffffffffffffff - <151b> DW_AT_name : foo__packed_array - <151f> DW_AT_type : <0x15cc> - <1523> DW_AT_artificial : 1 - <1><15cc>: Abbrev Number: 5 (DW_TAG_base_type) - <15cd> DW_AT_byte_size : 16 - <15ce> DW_AT_encoding : 7 (unsigned) - <15cf> DW_AT_name : long_long_long_unsigned - <15d3> DW_AT_artificial : 1 - ... - with upper bound of form DW_FORM_data16. - - In gdb/dwarf/attribute.h we have: - ... - /* Return non-zero if ATTR's value falls in the 'constant' class, or - zero otherwise. When this function returns true, you can apply - the constant_value method to it. - ... - DW_FORM_data16 is not considered as constant_value cannot handle - that. */ - bool form_is_constant () const; - ... - so instead we have attribute::form_is_block (DW_FORM_data16) == true. - - Then in attr_to_dynamic_prop for the upper bound, we get a PROC_LOCEXPR - instead of a PROP_CONST and end up trying to evaluate the constant - 0x3fffffffffffffffff as if it were a locexpr, which causes the - "Unhandled dwarf expression opcode 0xff". - - In contrast, with -gdwarf-4 we have: - ... - <164c> DW_AT_upper_bound : 18 byte block: \ - 9e 10 ff ff ff ff ff ff ff ff 3f 0 0 0 0 0 0 0 \ - (DW_OP_implicit_value 16 byte block: \ - ff ff ff ff ff ff ff ff 3f 0 0 0 0 0 0 0 ) - ... - - Fix the dwarf error by translating the DW_FORM_data16 constant into a - PROC_LOCEXPR, effectively by prepending 0x9e 0x10, such that we have same - result as with -gdwarf-4: - ... - (gdb) print pa_ptr.all^M - That operation is not available on integers of more than 8 bytes.^M - (gdb) KFAIL: gdb.ada/arrayptr.exp: scenario=all: print pa_ptr.all \ - (PRMS: gdb/20991) - ... - - Tested on x86_64-linux, with gcc-11 and target board - unix/gdb:debug_flags=-gdwarf-5. - - gdb/ChangeLog: - - 2021-07-25 Tom de Vries - - * dwarf2/read.c (attr_to_dynamic_prop): Handle DW_FORM_data16. - -2021-07-28 will schmidt - - Externalize the _bfd_set_gp_value function - This change adds an external-visible wrapper for the _bfd_set_gp_value - function. This is a prerequisite for some gdb patches that better - handle powerpc64le relocations against ".TOC.". - - * bfd.c (bfd_set_gp_value): New externally visible wrapper - for _bfd_set_gp_value. - * bfd-in2.h: Regenerate. - -2021-07-28 Alan Modra - - PowerPC: ignore sticky options for .machine - PowerPC gas and objdump for a long time have allowed certain -m/-M - options that extend a base cpu with extra functional units to be - specified before the base cpu. For example, "-maltivec -mpower4" is - the same as "-mpower4 -maltivec". See - https://sourceware.org/pipermail/binutils/2008-January/054935.html - - It doesn't make as much sense that .machine keep any of these - "sticky" flags when handling a new base cpu. See gcc PR101393. I - think that instead .machine ought to override the command line. - That's what this patch does. It is still possible to extend cpu - functionality with .machine. For example the following can be - assembled when selecting a basic -mppc on the command line: - .machine power5 - .machine altivec - frin 1,2 - lvsr 3,4,5 - Here, ".machine altivec" extends the ".machine power5" so that both - the power5 "frin" instruction and the altivec "lvsr" instruction are - enabled. Swapping the two ".machine" directives would result in - failure to assemble "lvsr". - - This change will expose some assembly errors, such as the one in - glibc/sysdeps/powerpc/powerpc64/tst-ucontext-ppc64-vscr.c, a file - compiled with -maltivec but containing - asm volatile (".machine push;\n" - ".machine \"power5\";\n" - "vspltisb %0,0;\n" - "vspltisb %1,-1;\n" - "vpkuwus %0,%0,%1;\n" - "mfvscr %0;\n" - "stvx %0,0,%2;\n" - ".machine pop;" - : "=v" (v0), "=v" (v1) - : "r" (vscr_ptr) - : "memory"); - It's just wrong to choose power5 for a bunch of altivec instructions - and in fact all of those .machine directives are unnecessary. - - * config/tc-ppc.c (ppc_machine): Don't use command line - sticky options. - -2021-07-28 GDB Administrator - - Automatic date update in version.in - -2021-07-27 Tom de Vries - - [gdb/testsuite] Add xfail for PR gcc/101643 - With gcc 8.5.0 I run into: - ... - (gdb) print bad^M - $2 = (0 => 0 )^M - (gdb) FAIL: gdb.ada/big_packed_array.exp: scenario=minimal: print bad - ... - while with gcc 9.3.1 we have instead: - ... - (gdb) print bad^M - $2 = (false )^M - (gdb) PASS: gdb.ada/big_packed_array.exp: scenario=minimal: print bad - ... - - This is caused by gcc PR, which I've filed at - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101643 "[debug, ada] packed array - not described as packed". - - Fix by marking this as XFAIL. - - Tested on x86_64-linux. - - gdb/ChangeLog: - - 2021-07-27 Tom de Vries - - PR testsuite/26904 - * gdb/testsuite/gdb.ada/big_packed_array.exp: Add xfail. - -2021-07-27 Tom de Vries - - [gdb/testsuite] Add xfail for PR gcc/101633 - With gcc 7.5.0, I run into: - ... - (gdb) print objects^M - $1 = ((tag => object, values => ()), (tag => unused))^M - (gdb) FAIL: gdb.ada/array_of_variant.exp: scenario=minimal: print entire array - ... - while with gcc 8.5.0 we have: - ... - (gdb) print objects^M - $1 = ((tag => object, values => (2, 2, 2, 2, 2)), (tag => unused))^M - (gdb) PASS: gdb.ada/array_of_variant.exp: scenario=minimal: print entire array - ... - - This is due to a gcc PR, which I've filed at - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101633 "Bug 101633 - [debug] - DW_TAG_subrange_type missing DW_AT_upper_bound". - - Fix by marking this and related FAILs as XFAIL. - - Tested on x86_64-linux. - - gdb/ChangeLog: - - 2021-07-27 Tom de Vries - - PR testsuite/26903 - * gdb/testsuite/gdb.ada/array_of_variant.exp: Add xfails. - -2021-07-27 Andrew Burgess - - gdb: remove VALUE_FRAME_ID and fix another frame debug issue - This commit was originally part of this patch series: - - (v1): https://sourceware.org/pipermail/gdb-patches/2021-May/179357.html - (v2): https://sourceware.org/pipermail/gdb-patches/2021-June/180208.html - (v3): https://sourceware.org/pipermail/gdb-patches/2021-July/181028.html - - However, that series is being held up in review, so I wanted to break - out some of the non-related fixes in order to get these merged. - - This commit addresses two semi-related issues, both of which are - problems exposed by using 'set debug frame on'. - - The first issue is in frame.c in get_prev_frame_always_1, and was - introduced by this commit: - - commit a05a883fbaba69d0f80806e46a9457727fcbe74c - Date: Tue Jun 29 12:03:50 2021 -0400 - - gdb: introduce frame_debug_printf - - This commit replaced fprint_frame with frame_info::to_string. - However, the former could handle taking a nullptr while the later, a - member function, obviously requires a non-nullptr in order to make the - function call. In one place we are not-guaranteed to have a - non-nullptr, and so, there is the possibility of triggering undefined - behaviour. - - The second issue addressed in this commit has existed for a while in - GDB, and would cause this assertion: - - gdb/frame.c:622: internal-error: frame_id get_frame_id(frame_info*): Assertion `fi->this_id.p != frame_id_status::COMPUTING' failed. - - We attempt to get the frame_id for a frame while we are computing the - frame_id for that same frame. - - What happens is that when GDB stops we create a frame_info object for - the sentinel frame (frame #-1) and then we attempt to unwind this - frame to create a frame_info object for frame #0. - - In the test case used here to expose the issue we have created a - Python frame unwinder. In the Python unwinder we attemt to read the - program counter register. - - Reading this register will initially create a lazy register value. - The frame-id stored in the lazy register value will be for the - sentinel frame (lazy register values hold the frame-id for the frame - from which the register will be unwound). - - However, the Python unwinder does actually want to examine the value - of the program counter, and so the lazy register value is resolved - into a non-lazy value. This sends GDB into value_fetch_lazy_register - in value.c. - - Now, inside this function, if 'set debug frame on' is in effect, then - we want to print something like: - - frame=%d, regnum=%d(%s), .... - - Where 'frame=%d' will be the relative frame level of the frame for - which the register is being fetched, so, in this case we would expect - to see 'frame=0', i.e. we are reading a register as it would be in - frame #0. But, remember, the lazy register value actually holds the - frame-id for frame #-1 (the sentinel frame). - - So, to get the frame_info for frame #0 we used to call: - - frame = frame_find_by_id (VALUE_FRAME_ID (val)); - - Where VALUE_FRAME_ID is: - - #define VALUE_FRAME_ID(val) (get_prev_frame_id_by_id (VALUE_NEXT_FRAME_ID (val))) - - That is, we start with the frame-id for the next frame as obtained by - VALUE_NEXT_FRAME_ID, then call get_prev_frame_id_by_id to get the - frame-id of the previous frame. - - The get_prev_frame_id_by_id function finds the frame_info for the - given frame-id (in this case frame #-1), calls get_prev_frame to get - the previous frame, and then calls get_frame_id. - - The problem here is that calling get_frame_id requires that we know - the frame unwinder, so then have to try each frame unwinder in turn, - which would include the Python unwinder.... which is where we started, - and thus we have a loop! - - To prevent this loop GDB has an assertion in place, which is what - actually triggers. - - Solving the assertion failure is pretty easy, if we consider the code - in value_fetch_lazy_register and get_prev_frame_id_by_id then what we - do is: - - 1. Start with a frame_id taken from a value, - 2. Lookup the corresponding frame, - 3. Find the previous frame, - 4. Get the frame_id for that frame, and - 5. Lookup the corresponding frame - 6. Print the frame's level - - Notice that steps 3 and 5 give us the exact same result, step 4 is - just wasted effort. We could shorten this process such that we drop - steps 4 and 5, thus: - - 1. Start with a frame_id taken from a value, - 2. Lookup the corresponding frame, - 3. Find the previous frame, - 6. Print the frame's level - - This will give the exact same frame as a result, and this is what I - have done in this patch by removing the use of VALUE_FRAME_ID from - value_fetch_lazy_register. - - Out of curiosity I looked to see how widely VALUE_FRAME_ID was used, - and saw it was only used in one other place in valops.c:value_assign, - where, once again, we take the result of VALUE_FRAME_ID and pass it to - frame_find_by_id, thus introducing a redundant frame_id lookup. - - I don't think the value_assign case risks triggering the assertion - though, as we are unlikely to call value_assign while computing the - frame_id for a frame, however, we could make value_assign slightly - more efficient, with no real additional complexity, by removing the - use of VALUE_FRAME_ID. - - So, in this commit, I completely remove VALUE_FRAME_ID, and replace it - with a use of VALUE_NEXT_FRAME_ID, followed by a direct call to - get_prev_frame_always, this should make no difference in either case, - and resolves the assertion issue from value.c. - - As I said, this patch was originally part of another series, the - original test relied on the fixes in that original series. However, I - was able to create an alternative test for this issue by enabling - frame debug within an existing test script. - - This commit probably fixes bug PR gdb/27938, though the bug doesn't - have a reproducer attached so it is not possible to know for sure. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=27938 - -2021-07-27 Chenghua Xu - - Correct gs264e bfd_mach in mips_arch_choices. - opcodes/ - * mips-dis.c (mips_arch_choices): Correct gs264e bfd_mach. - -2021-07-27 Roland McGrath - - Fix ld test case that assumes --enable-textrel-check - ld/ - * testsuite/ld-x86-64/x86-64.exp (Build textrel-1): Use --warn-textrel. - -2021-07-27 GDB Administrator - - Automatic date update in version.in - -2021-07-27 H.J. Lu - - bfd: Set error to bfd_error_malformed_archive only if unset - When reading an archive member, set error to bfd_error_malformed_archive - on open_nested_file failure only if the error is unset. - - PR ld/28138 - * archive.c (_bfd_get_elt_at_filepos): Don't set error to - bfd_error_malformed_archive if it has been set. - -2021-07-26 Carl Love - - Fix for mi-reverse.exp - This test fails on PPC64 because PPC64 prints the value of 3.5 with - more significant digits than on Intel. The patch updates the regular - expression to allow for more significant digits on the constant. - - gdb/testsuite/ChangeLog - - * gdb.mi/mi-reverse.exp: mi_execute_to exec-step reverse add check - for additional digits. - -2021-07-26 Tom Tromey - - Fix the Windows build - The gdb build was broken on Windows after the patch to change - get_inferior_cwd. This patch fixes the build. - -2021-07-26 Shahab Vahedi - - gdb: Fix numerical field extraction for target description "flags" - The "val_print_type_code_flags ()" function is responsible for - extraction of fields for "flags" data type. These data types are - used when describing a custom register type in a target description - XML. The logic used for the extraction though is not sound: - - unsigned field_len = TYPE_FIELD_BITSIZE (type, field); - ULONGEST field_val - = val >> (TYPE_FIELD_BITPOS (type, field) - field_len + 1); - - TYPE_FIELD_BITSIZE: The bit length of the field to be extracted. - TYPE_FIELD_BITPOS: The starting position of the field; 0 is LSB. - val: The register value. - - Imagine you have a field that starts at position 1 and its length - is 4 bits. According to the third line of the code snippet the - shifting right would become "val >> -2", or "val >> 0xfff...fe" - to be precise. That will result in a "field_val" of 0. - - The correct extraction should be: - - ULONGEST field_val = val >> TYPE_FIELD_BITPOS (type, field); - - The rest of the algorithm that masks out the higher bits is OK. - - Co-Authored-By: Simon Marchi - -2021-07-26 Andrea Corallo - - PATCH [10/10] arm: Alias 'ra_auth_code' to r12 for pacbti. - gas/ - 2021-06-11 Andrea Corallo - - * config/tc-arm.c (reg_names): Alias 'ra_auth_code' to r12. - -2021-07-26 Andrea Corallo - - PATCH [9/10] arm: add 'pacg' instruction for Armv8.1-M pacbti extension - gas/ - 2021-06-11 Andrea Corallo - - * config/tc-arm.c (T16_32_TAB): Add '_pacg'. - (do_t_pacbti_pacg): New function. - (insns): Define 'pacg' insn. - * testsuite/gas/arm/armv8_1-m-pacbti.d: Add 'pacg' test. - * testsuite/gas/arm/armv8_1-m-pacbti.s: Likewise. - - opcodes/ - 2021-06-11 Andrea Corallo - - * arm-dis.c (thumb32_opcodes): Add 'pacg'. - -2021-07-26 Andrea Corallo - - PATCH [8/10] arm: add 'autg' instruction for Armv8.1-M pacbti extension - gas/ - 2021-06-11 Andrea Corallo - - * config/tc-arm.c (T16_32_TAB): Add '_autg'. - (insns): Define 'autg' insn. - * testsuite/gas/arm/armv8_1-m-pacbti.d: Add autg test. - * testsuite/gas/arm/armv8_1-m-pacbti.s: Likewise. - - opcodes/ - 2021-06-11 Andrea Corallo - - * arm-dis.c (thumb32_opcodes): Add 'autg'. - -2021-07-26 Andrea Corallo - - PATCH [7/10] arm: add 'bxaut' instruction for Armv8.1-M pacbti extension - gas/ - 2021-06-11 Andrea Corallo - - * config/tc-arm.c (T16_32_TAB): Add '_bxaut'. - (do_t_pacbti_nonop): New function. - (insns): Define 'bxaut' insn. - * testsuite/gas/arm/armv8_1-m-pacbti.d: Add 'bxaut' test. - * testsuite/gas/arm/armv8_1-m-pacbti.s: Likewise. - - opcodes/ - 2021-06-11 Andrea Corallo - - * arm-dis.c (thumb32_opcodes): Add 'bxaut'. - -2021-07-26 Andrea Corallo - - PATCH [6/10] arm: Add -march=armv8.1-m.main+pacbti flag - gas/ - 2021-06-11 Andrea Corallo - - * config/tc-arm.c (pacbti_ext): Define. - (BAD_PACBTI): New macro. - (armv8_1m_main_ext_table): Add 'pacbti' extension. - - include/ - 2021-06-11 Andrea Corallo - - * opcode/arm.h (ARM_EXT3_PACBTI, ARM_AEXT3_V8_1M_MAIN_PACBTI): New - macro. - -2021-07-26 Andrea Corallo - - PATCH [5/10] arm: Extend again arm_feature_set struct to provide more bits - include/ - 2021-06-11 Andrea Corallo - - * opcode/arm.h (arm_feature_set): Extend 'core' field. - (ARM_CPU_HAS_FEATURE, ARM_FSET_CPU_SUBSET, ARM_CPU_IS_ANY) - (ARM_MERGE_FEATURE_SETS, ARM_CLEAR_FEATURE, ARM_FEATURE_EQUAL) - (ARM_FEATURE_ZERO, ARM_FEATURE_CORE_EQUAL): Account for - 'core[2]'. - (ARM_FEATURE_CORE_HIGH_HIGH): New macro. - -2021-07-26 Andrea Corallo - - PATCH [4/10] arm: add 'pac' instruction for Armv8.1-M pacbti extension - gas/ - 2021-06-11 Andrea Corallo - - * config/tc-arm.c (T16_32_TAB): Add '_pac'. - (insns): Add 'pac' insn. - * testsuite/gas/arm/armv8_1-m-pacbti-bad.l: Add pac tests. - * testsuite/gas/arm/armv8_1-m-pacbti-bad.s: Likewise. - * testsuite/gas/arm/armv8_1-m-pacbti.d: Likewise. - * testsuite/gas/arm/armv8_1-m-pacbti.s: Likewise. - - opcodes/ - 2021-06-11 Andrea Corallo - - * arm-dis.c (thumb32_opcodes): Add 'pac'. - -2021-07-26 Andrea Corallo - - PATCH [3/10] arm: add 'aut' instruction for Armv8.1-M pacbti extension - gas/ - 2021-06-11 Andrea Corallo - - * config/tc-arm.c (insns): Add 'aut.' - (T16_32_TAB): Add '_aut'. - * testsuite/gas/arm/armv8_1-m-pacbti-bad.l: Add 'aut' tests. - * testsuite/gas/arm/armv8_1-m-pacbti-bad.s: Likewise. - * testsuite/gas/arm/armv8_1-m-pacbti.d: Likewise. - * testsuite/gas/arm/armv8_1-m-pacbti.s: Likewise. - - opcodes/ - 2021-06-11 Andrea Corallo - - * arm-dis.c (thumb32_opcodes): Add 'aut'. - -2021-07-26 Andrea Corallo - - PATCH [2/10] arm: add 'pacbti' instruction for Armv8.1-M pacbti extension - gas/ - 2021-06-11 Andrea Corallo - - * config/tc-arm.c - (enum operand_parse_code): Add OP_SP and OP_R12. - (parse_operands): Add switch cases for OP_SP and OP_R12. - (T16_32_TAB): Add '_pacbti'. - (do_t_pacbti): New function. - (insns): Add 'pacbti'. - * testsuite/gas/arm/armv8_1-m-pacbti-bad.d: New file. - * testsuite/gas/arm/armv8_1-m-pacbti-bad.l: Likewise. - * testsuite/gas/arm/armv8_1-m-pacbti-bad.s: Likewise. - * testsuite/gas/arm/armv8_1-m-pacbti.d: Add 'pacbti' to testcase. - * testsuite/gas/arm/armv8_1-m-pacbti.s: Likewise. - - opcodes/ - 2021-06-11 Andrea Corallo - - * arm-dis.c (thumb32_opcodes): Add 'pacbti' instruction. - -2021-07-26 Andrea Corallo - - PATCH [1/10] arm: add 'bti' instruction for Armv8.1-M pacbti extension - gas/ - 2021-06-11 Andrea Corallo - - * config/tc-arm.c (insns): Add 'bti' insn. - * testsuite/gas/arm/armv8_1-m-pacbti.d: New file. - * testsuite/gas/arm/armv8_1-m-pacbti.s: Likewise. - - opcodes/ - 2021-06-11 Andrea Corallo - - * arm-dis.c (thumb32_opcodes): Add bti instruction. - -2021-07-26 Andrew Burgess - - gdb: move remaining ChangeLogs to legacy files - In commit: - - commit f069ea46a03ae868581d1c852da28e979ea1245a - Date: Sat Jul 3 16:29:08 2021 -0700 - - Rename gdb/ChangeLog to gdb/ChangeLog-2021 - - The gdb/ChangeLog file was renamed, but all of the other ChangeLog - files relating to gdb were left in place. - - As I understand things, the no ChangeLogs policy applies to all the - GDB related directories, so this commit renames all of the remaining - GDB related ChangeLog files. - - As with the original commit, the intention behind this commit is to - hopefully stop people merging ChangeLog entries by mistake. - - The renames carried out in this commit are: - - gdb/doc/ChangeLog -> gdb/doc/ChangeLog-1991-2021 - gdb/stubs/ChangeLog -> gdb/stubs/ChangeLog-2012-2020 - gdb/testsuite/ChangeLog -> gdb/testsuite/ChangeLog-2014-2021 - gdbserver/ChangeLog -> gdbserver/ChangeLog-2002-2021 - gdbsupport/ChangeLog -> gdbsupport/ChangeLog-2020-2021 - -2021-07-26 Tankut Baris Aktemur - - gdb/mi: handle no condition argument case for -break-condition - As reported in PR gdb/28076 [1], passing no condition argument to the - -break-condition command (e.g.: "-break-condition 2") should clear the - condition for breakpoint 2, just like CLI's "condition 2", but instead - an error message is returned: - - ^error,msg="-break-condition: Missing the and/or argument" - - The current implementation of the -break-condition command's argument - handling (79aabb7308c "gdb/mi: add a '--force' flag to the - '-break-condition' command") was done according to the documentation, - where the condition argument seemed mandatory. However, the - -break-condition command originally (i.e. before the 79aabb7308c - patch) used the CLI's "cond" command, and back then not passing a - condition argument was clearing out the condition. So, this is a - regression in terms of the behavior. - - Fix the argument handling of the -break-condition command to allow not - having a condition argument, and also update the document to make the - behavior clear. Also add test cases to test the scenarios which were - previously not covered. - - [1] https://sourceware.org/bugzilla/show_bug.cgi?id=28076 - -2021-07-26 GDB Administrator - - Automatic date update in version.in - -2021-07-25 GDB Administrator - - Automatic date update in version.in - -2021-07-24 Alan Modra - - Revert: PowerPC: Don't generate unused section symbols - Blindly following x86 broke linux kernel builds. - - bfd/ - * elf32-ppc.c (TARGET_KEEP_UNUSED_SECTION_SYMBOLS): Define as true. - * elf64-ppc.c (TARGET_KEEP_UNUSED_SECTION_SYMBOLS): Likewise. - gas/ - * testsuite/gas/ppc/power4.d: Adjust for section sym change. - * testsuite/gas/ppc/test1elf32.d: Likewise. - * testsuite/gas/ppc/test1elf64.d: Likewise. - ld/ - * testsuite/ld-powerpc/tlsexe.r: Adjust for section sym change. - * testsuite/ld-powerpc/tlsexe32.r: Likewise. - * testsuite/ld-powerpc/tlsexe32no.r: Likewise. - * testsuite/ld-powerpc/tlsexeno.r: Likewise. - * testsuite/ld-powerpc/tlsexenors.r: Likewise. - * testsuite/ld-powerpc/tlsexers.r: Likewise. - * testsuite/ld-powerpc/tlsexetoc.r: Likewise. - * testsuite/ld-powerpc/tlsexetocrs.r: Likewise. - * testsuite/ld-powerpc/tlsget.d: Likewise. - * testsuite/ld-powerpc/tlsget.wf: Likewise. - * testsuite/ld-powerpc/tlsget2.d: Likewise. - * testsuite/ld-powerpc/tlsget2.wf: Likewise. - * testsuite/ld-powerpc/tlsso.r: Likewise. - * testsuite/ld-powerpc/tlsso32.r: Likewise. - * testsuite/ld-powerpc/tlstocso.r: Likewise. - -2021-07-24 Alan Modra - - Re: ld script expression parsing - Commit 40726f16a8d7 broke references to sections within ADDR(), and - overlays with weird section names. - - * ldgram.y (paren_script_name): New rule. - (exp): Use it for ALIGNOF, SIZEOF, ADDR, and LOADADDR. Similarly - ensure script mode parsing for section name in SEGMENT_START. - (overlay_section): Delete unnecessary ldlex_script call. Backup - on a lookahead NAME parsed in expression mode. - * testsuite/ld-elf/overlay.s: Add more sections. - * testsuite/ld-elf/overlay.t: Test '-' in section names. - -2021-07-24 Frederic Cambus - - Update the NetBSD system call table to match NetBSD-current. - Generated from sys/sys/syscall.h revision 1.319. - - We can safely remove the _lwp_gettid syscall, which was never exposed - in libc and never made it into a release. - - gdb/ChangeLog: - - 2021-07-23 Frederic Cambus - - * syscalls/netbsd.xml: Regenerate. - -2021-07-24 GDB Administrator - - Automatic date update in version.in - -2021-07-23 Simon Marchi - - gdb/testsuite: test get/set value of unregistered Guile parameter - When creating a parameter in Guile, you have to create it using - make-parameter and then register it with GDB with register-parameter!. - In between, it's still possible (though not documented) to set the - parameter's value. I broke this use case by mistake while writing this - series, so thought it would be good to have a test for it. - - I suppose that people could use this "feature" to give their parameter - an initial value, even though make-parameter has an initial-value - parameter for this. Nevertheless, changing this behavior could break - some scripts, which is why I think it's important for it to be tested. - - Change-Id: I5b2103e3cec0cfdcccf7ffb00eb05fed8626e66d - -2021-07-23 Simon Marchi - - gdb: remove cmd_list_element::function::sfunc - I don't understand what the sfunc function type in - cmd_list_element::function is for. Compared to cmd_simple_func_ftype, - it has an extra cmd_list_element parameter, giving the callback access - to the cmd_list_element for the command being invoked. This allows - registering the same callback with many commands, and alter the behavior - using the cmd_list_element's context. - - From the comment in cmd_list_element, it sounds like at some point it - was the callback function type for set and show functions, hence the - "s". But nowadays, it's used for many more commands that need to access - the cmd_list_element object (see add_catch_command for example). - - I don't really see the point of having sfunc at all, since do_sfunc is - just a trivial shim that changes the order of the arguments. All - commands using sfunc could just as well set cmd_list_element::func to - their callback directly. - - Therefore, remove the sfunc field in cmd_list_element and everything - that goes with it. Rename cmd_const_sfunc_ftype to cmd_func_ftype and - use it for cmd_list_element::func, as well as for the add_setshow - commands. - - Change-Id: I1eb96326c9b511c293c76996cea0ebc51c70fac0 - -2021-07-23 Simon Marchi - - gdb: rename cfunc to simple_func - After browsing the CLI code for quite a while and trying really hard, I - reached the conclusion that I can't give a meaningful explanation of - what "sfunc" and "cfunc" functions are, in cmd_list_element. I don't - see a logic at all. That makes it very difficult to do any kind of - change. Unless somebody can make sense out of all that, I'd like to try - to retro-fit some logic in the cmd_list_element callback function code - so that we can understand what is going on, do some cleanups and add new - features. - - The first change is about "cfunc". I can't figure out what the "c" in - cfunc means. It's not const, because there's already "const" in - "cmd_const_cfunc_ftype", and the previous "cmd_cfunc_ftype" had nothing - const.. It's not "cmd" or "command", because there's already "cmd" in - "cmd_const_cfunc_ftype". - - The "main" command callback, cmd_list_element::func, has three - parameters, whereas cfunc has two. It is missing the cmd_list_element - parameter. So the only reason I see for cfunc to exist is to be a shim - between the three and two parameter versions. Most commands don't need - to receive the cmd_list_element object, so adding it everywhere would be - long and would just add more unnecessary boilerplate. So since this is - the "simple" version of the callback, compared to the "full", I suggest - renaming cmd_const_cfunc_ftype into cmd_simple_func_ftype, as well as - everything (like the utility functions) that goes with it. - - Change-Id: I4e46cacfd77a66bc1cbf683f6a362072504b7868 - -2021-07-23 Simon Marchi - - gdb: make inferior::m_terminal an std::string - Same idea as the previous patch, but for m_terminal. - - Change-Id: If9367d5db8c976a4336680adca4ea5bc31ab64d2 - -2021-07-23 Simon Marchi - - gdb: make inferior::m_cwd an std::string - Same idea as the previous patch, but for m_cwd. - - To keep things consistent across the board, change get_inferior_cwd as - well, which is shared with GDBserver. So update the related GDBserver - code too. - - Change-Id: Ia2c047fda738d45f3d18bc999eb67ceb8400ce4e - -2021-07-23 Simon Marchi - - gdb: make inferior::m_args an std::string - With the current code, both a NULL pointer and an empty string can mean - "no arguments". We don't need this distinction. Changing to a string - has the advantage that there is now a single state for that (an empty - string), which makes the code a bit simpler in my opinion. - - Change-Id: Icdc622820f7869478791dbaa84b4a1c7fec21ced - -2021-07-23 Simon Marchi - - gdb: add setter/getter for inferior cwd - Add cwd/set_cwd to the inferior class, remove set_inferior_args. - Keep get_inferior_args, because it is used from fork_inferior, in shared - code. The cwd could eventually be passed as a parameter eventually, - though, I think that would be cleaner. - - Change-Id: Ifb72ea865d7e6f9a491308f0d5c1595579d8427e - -2021-07-23 Simon Marchi - - gdb: add setter/getter for inferior arguments - Add args/set_args to the inferior class, remove the set_inferior_args - and get_inferior_args functions, that would just be wrappers around - them. - - Change-Id: If87d52f3402ce08be26c32897ae8915d9f6d1ea3 - -2021-07-23 Simon Marchi - - gdb: remove inferior::{argc,argv} - There are currently two states that the inferior args can be stored. - The main one is the `args` field, where they are stored as a single - string. The other one is the `argc`/`argv` fields. - - This last one is only used for arguments passed in GDB's - command line. And the only outcome is that when get_inferior_args is - called, `argc`/`argv` are serialized into `args`. So really, - `argc`/`argv` is just a staging area before moving the arguments in - `args`. - - Simplify this by only keeping the `args` field. Change - set_inferior_args_vector to immediately serialize the arguments into - `args`, work that would be done in get_inferior_args later anyway. - - The only time where this work would be "wasted" is when the user passes - some arguments on the command line, but does not end up running the - program. But that just seems unlikely. And it's not that much work. - - Change-Id: Ica0b9859397c095f6530350c8fb3c36905f2044a - -2021-07-23 Simon Marchi - - gdb: un-share set_inferior_cwd declaration - The declaration of set_inferior_cwd is currently shared between gdb and - gdbserver, in gdbsupport/common-inferior.h. It doesn't need to be, as - set_inferior_cwd is not called from common code. Only get_inferior_cwd - needs to. - - The motivation for this is that a future patch will change the prototype - of set_inferior_cwd in gdb, and I don't want to change it for gdbserver - unnecessarily. I see this as a good cleanup in any case, to reduce to - just the essential what is shared between GDB and GDBserver. - - Change-Id: I3127d27d078f0503ebf5ccc6fddf14f212426a73 - -2021-07-23 Simon Marchi - - gdb.base/setshow.exp: fix duplicate test name - Fix: - - DUPLICATE: gdb.base/setshow.exp: test_setshow_args: show args - - by giving some explicit test names. - - Change-Id: I2a738d3d3675ab9b45929e71f5aee0ea6bf92072 - -2021-07-23 Simon Marchi - - gdb.base/setshow.exp: split in procs - Split in multiple procs, one per topic, and start with a fresh GDB in - each. I find it easier to work on a test with multiple smaller - independent test procedures. For example, it's possible to comment all - but one when working on one. It's also easier to add things without - having to think about the impact on existing tests, and vice-versa. - - Change-Id: I19691eed8f9bcb975b2eeff7577cac66251bcbe2 - -2021-07-23 Simon Marchi - - gdb.base/setshow.exp: use save_vars to save/restore gdb_prompt - Using save_vars is a bit better than what we have now, as it ensures the - variable gets restored if the code within it throws an error. - - Change-Id: I3bd6836e5b7efb61b078acadff1a1c8182c19a27 - -2021-07-23 Simon Marchi - - gdb/testsuite: split gdb.python/py-parameter.exp in procs - Split the file into multiple independent test procs, where each proc - starts with a fresh GDB. I find it easier to understand what a test is - doing when each part of the test is isolated and self-contained. It - makes it easier to comment out some parts of the test while working / - debugging a specific part. It also makes it easier to add new things - (which a subsequent patch will do) without fear of impacting another part - of the test. - - Change-Id: I8b4d52ac82b1492d79b679e13914ed177d8a836d - -2021-07-23 Carl Love - - Fix for gdb.python/py-breakpoint.exp - Not all systems have hardware breakpoint support. Add a check - to see if the system supports hardware breakpoints. - - gdb/testsuite/ChangeLog - - * gdb.python/py-breakpoint.exp (test_hardware_breakpoints): Add - check for hardware breakpoint support. - -2021-07-23 Andrew Burgess - - gdb/testsuite: don't error when trying to unset last_spawn_tty_name - In spawn_capture_tty_name (lib/gdb.exp) we either set or unset - last_spawn_tty_name depending on whether spawn_out(slave,name) exists - or not. - - One situation that might cause spawn_out(slave,name) to not exists is - if the spawn function is called with the argument -leaveopen, which is - how it is called when processes are created as part of a pipeline, the - created process has no tty, instead its output is written to a file - descriptor. - - If a pipeline is created consisting of multiple processes then there - will be multiple sequential calls to spawn, all using -leaveopen. The - first of these calls is fine, spawn_out(slave,name) is not set, and so - in spawn_capture_tty_name we unset last_spawn_tty_name. However, on - the second call to spawn, spawn_out(slave,name) is still not set and - so in spawn_capture_tty_name we again try to unset - last_spawn_tty_name, this now throws an error (as last_spawn_tty_name - is already unset). - - Fix this issue by using -nocomplain with the call to unset in - spawn_capture_tty_name. - - Before this commit I was seeing gdb.base/gnu-debugdata.exp report 1 - pass, and 1 unsupported test. After this commit I now see 16 passes - from this test script. - - I have also improved the code that used to do this: - - if { [info exists spawn_out] } { - set ::last_spawn_tty_name $spawn_out(slave,name) - } else { - ... - } - - The problem here is that we check for the existence of spawn_out, and - then unconditionally read spawn_out(slave,name). A situation could - arise where some other element of spawn_out is set, - e.g. spawn_out(foo), in which case we would enter the if block and try - to read a non-existent variable. After this commit we now check - specifically for spawn_out(slave,name). - - Finally, it is worth noting that before this issue was fixed runtest - itself, or rather the expect process behind runtest, would segfault - while exiting. I haven't looked at all into what the problem is here - that caused expect to crash, as fixing the bug in GDB's testing - scripts made the segfault go away. - -2021-07-23 Jan Beulich - - x86: express unduly set rounding control bits in disassembly - While EVEX.L'L are indeed ignored when EVEX.b stands for just SAE, - EVEX.b itself is not ignored when an insn permits neither rounding - control nor SAE. - - While changing this aspect of EVEX.b handling, also alter unduly set - embedded broadcast: Don't call BadOp(), screwing up subsequent - disassembly, but emit "{bad}" instead. - -2021-07-23 GDB Administrator - - Automatic date update in version.in - -2021-07-22 Tom de Vries - - [gdb/testsuite] Fix FAILs due to PR gcc/101575 - When running test-case gdb.ada/formatted_ref.exp with gcc-11 and target board - unix/gdb:debug_flags=-gdwarf-4 we run into: - ... - (gdb) print/x s^M - No definition of "s" in current context.^M - (gdb) FAIL: gdb.ada/formatted_ref.exp: print/x s - ... - which is caused by "runto defs.adb:20" taking us to defs__struct1IP: - ... - (gdb) break defs.adb:20^M - Breakpoint 1 at 0x402cfd: defs.adb:20. (2 locations)^M - (gdb) run ^M - Starting program: formatted_ref ^M - ^M - Breakpoint 1, defs__struct1IP () at defs.adb:20^M - 20 return s.x; -- Set breakpoint marker here.^M - (gdb) print s1'access^M - ... - instead of the expected defs.f1: - ... - (gdb) break defs.adb:20^M - Breakpoint 1 at 0x402d0e: file defs.adb, line 20.^M - (gdb) run ^M - Starting program: formatted_ref ^M - ^M - Breakpoint 1, defs.f1 (s=...) at defs.adb:20^M - 20 return s.x; -- Set breakpoint marker here.^M - ... - - This is caused by incorrect line info due to gcc PR 101575 - "[gcc-11, - -gdwarf-4] Missing .file directive causes invalid line info". - - Fix this by when landing in defs__struct1IP: - - xfailing the runto, and - - issuing a continue to land in defs.f1. - - Likewise in a few other test-cases. - - Tested on x86_64-linux, with: - - system gcc. - - gcc-11 and target boards unix/gdb:debug_flags=-gdwarf-4 and - unix/gdb:debug_flags=-gdwarf-5. - - gdb/testsuite/ChangeLog: - - 2021-07-22 Tom de Vries - - * gdb.ada/formatted_ref.exp: Add xfail for PR gcc/101575. - * gdb.ada/iwide.exp: Same. - * gdb.ada/pkd_arr_elem.exp: Same. - -2021-07-22 Jan Beulich - - x86: drop dq{b,d}_mode - Their sole use is for {,V}EXTRACTPS / {,V}P{EXT,INS}RB respectively; for - consistency also limit use of dqw_mode to Jdqw. 64-bit disassembly - reflecting REX.W / VEX.W is not in line with the assembler's opcode - table having NoRex64 / VexWIG in all respective templates, i.e. assembly - input isn't being honored there either. Obviously the 0FC5 encodings of - {,V}PEXTRW then also need adjustment for consistency reasons. - - x86: drop vex_scalar_w_dq_mode - It has only a single use and can easily be represented by dq_mode - instead. Plus its handling in intel_operand_size() was duplicating - that of vex_vsib_{d,q}_w_dq_mode anyway. - - x86: drop xmm_m{b,w,d,q}_mode - They're effectively redundant with {b,w,d,q}_mode. - - x86: fold duplicate vector register printing code - The bulk of OP_XMM() can be easily reused also for OP_EX(). Break the - shared logic out of the function, and invoke the new helper from both - places. - - x86: drop vex_mode and vex_scalar_mode - These are fully redundant with, respectively, x_mode and scalar_mode. - - x86: correct EVEX.V' handling outside of 64-bit mode - Unlike the high bit of VEX.vvvv / EVEX.vvvv, EVEX.V' is not ignored - outside of 64-bit mode. Oddly enough there already are tests for these - cases, but their expectations were wrong. (This may have been based on - an old SDM version, where the restriction wasn't properly spelled out.) - - x86: fold duplicate code in MOVSXD_Fixup() - There's no need to have two paths printing the "xd" mnemonic suffix. - - x86: fold duplicate register printing code - What so far was OP_E_register() can be easily reused also for OP_G(). - Add suitable parameters to the function and move the invocation of - swap_operand() to OP_E(). Adjust MOVSXD's first operand: There never was - a need to use movsxd_mode there, and its use gets in the way of the code - folding. - - x86-64: properly bounds-check %bnd in OP_G() - The restriction to %bnd0-%bnd3 requires to also check REX.R is clear, - just like OP_E_Register() also includes REX.B in its check. - - x86-64: generalize OP_G()'s EVEX.R' handling - EVEX.R' is invalid to be clear not only for mask registers, but also for - GPRs - IOW everything handled in this function. - -2021-07-22 Jan Beulich - - x86: correct VCVT{,U}SI2SD rounding mode handling - With EVEX.W clear the instruction doesn't ignore the rounding mode, but - (like for other insns without rounding semantics) EVEX.b set causes #UD. - Hence the handling of EVEX.W needs to be done when processing - evex_rounding_64_mode, not at the decode stages. - - Derive a new 64-bit testcase from the 32-bit one to cover the different - EVEX.W treatment in both cases. - -2021-07-22 Jan Beulich - - x86: drop OP_Mask() - By moving its vex.r check there it becomes fully redundant with OP_G(). - -2021-07-22 GDB Administrator - - Automatic date update in version.in - -2021-07-21 Tom de Vries - - [gdb/testsuite] Fix gdb.cp/step-and-next-inline.exp with gcc-11 - When running test-case gdb.cp/step-and-next-inline.exp with gcc-11, I run - into: - ... - KPASS: gdb.cp/step-and-next-inline.exp: no_header: next step 1 \ - (PRMS symtab/25507) - FAIL: gdb.cp/step-and-next-inline.exp: no_header: next step 2 - KPASS: gdb.cp/step-and-next-inline.exp: no_header: next step 3 \ - (PRMS symtab/25507) - ... - - [ Note that I get the same result with gcc-11 and target board - unix/gdb:debug_flags=-gdwarf-4, so this is not a dwarf 4 vs 5 issue. ] - - With gcc-10, I have this trace: - ... - 64 get_alias_set (&xx); - get_alias_set (t=0x601038 ) at step-and-next-inline.cc:51 - 51 if (t != NULL - 40 if (t->x != i) - 52 && TREE_TYPE (t).z != 1 - 43 return x; - 53 && TREE_TYPE (t).z != 2 - 43 return x; - 54 && TREE_TYPE (t).z != 3) - 43 return x; - main () at step-and-next-inline.cc:65 - 65 return 0; - ... - and with gcc-11, I have instead: - ... - 64 get_alias_set (&xx); - get_alias_set (t=0x601038 ) at step-and-next-inline.cc:51 - 51 if (t != NULL - 52 && TREE_TYPE (t).z != 1 - 43 return x; - 53 && TREE_TYPE (t).z != 2 - 43 return x; - 54 && TREE_TYPE (t).z != 3) - 43 return x; - main () at step-and-next-inline.cc:65 - 65 return 0; - ... - and with clang-10, I have instead: - ... - 64 get_alias_set (&xx); - get_alias_set (t=0x601034 ) at step-and-next-inline.cc:51 - 51 if (t != NULL - 52 && TREE_TYPE (t).z != 1 - 53 && TREE_TYPE (t).z != 2 - 54 && TREE_TYPE (t).z != 3) - 51 if (t != NULL - 57 } - main () at step-and-next-inline.cc:65 - 65 return 0; - ... - - The test-case tries to verify that we don't step into inlined function - tree_check (lines 40-43) (so, with the clang trace we get that right). - - The test-case then tries to kfail the problems when using gcc, but this is - done in such a way that the testing still gets out of sync after a failure. - That is: the "next step 2" check that is supposed to match - "TREE_TYPE (t).z != 2" is actually matching "TREE_TYPE (t).z != 1": - ... - (gdb) next^M - 52 && TREE_TYPE (t).z != 1^M - (gdb) PASS: gdb.cp/step-and-next-inline.exp: no_header: next step 2 - ... - - Fix this by issuing extra nexts to arrive at the required lines. - - Tested on x86_64-linux, with gcc-8, gcc-9, gcc-10, gcc-11, clang-8, clang-10 - and clang-12. - - gdb/testsuite/ChangeLog: - - 2021-07-20 Tom de Vries - - * gdb.cp/step-and-next-inline.cc (tree_check, get_alias_set, main): - Tag closing brace with comment. - * gdb.cp/step-and-next-inline.h: Update to keep identical with - step-and-next-inline.cc. - * gdb.cp/step-and-next-inline.exp: Issue extra next when required. - -2021-07-21 Nick Clifton - - Updated Russian translation for the bfd library - -2021-07-21 Luca Boccassi - - Allows linker scripts to set the SEC_READONLY flag. - * ld.texi: Document new output section type. - * ldgram.y: Add new token. - * ldlang.c: Handle the new flag. - * ldlang.h: Add readonly_section to list of section types. - * ldlex.l: Add a new identifier. - * testsuite/ld-scripts/output-section-types.t: New example linker script. - * testsuite/ld-scripts/output-section-types.d: Test driver. - * testsyute/ld-scripts/script.exp: Run the new test. - -2021-07-21 Tom de Vries - - [gdb/testsuite] Fix FAILs due to PR gcc/101452 - When running test-case gdb.base/ptype-offsets.exp with gcc-11 (with -gdwarf-5 - default) or gcc-10 with target board unix/gdb:debug_flags=-gdwarf-5 we run - into this regression: - ... - (gdb) ptype/o static_member^M - /* offset | size */ type = struct static_member {^M - - static static_member Empty;^M - /* 0 | 4 */ int abc;^M - ^M - /* total size (bytes): 4 */^M - }^M - -(gdb) PASS: gdb.base/ptype-offsets.exp: ptype/o static_member - +(gdb) FAIL: gdb.base/ptype-offsets.exp: ptype/o static_member - ... - - This is caused by missing debug info, which I filed as gcc PR101452 - "[debug, - dwarf-5] undefined static member removed by - -feliminate-unused-debug-symbols". - - It's not clear yet whether this is a bug or a feature, but work around this in - the test-cases by: - - defining the static member - - adding additional_flags=-fno-eliminate-unused-debug-types. - - Tested on x86_64-linux. - - gdb/testsuite/ChangeLog: - - 2021-07-20 Tom de Vries - - * lib/gdb.exp (gcc_major_version): New proc. - * gdb.base/ptype-offsets.cc: Define static member static_member::Empty. - * gdb.cp/templates.exp: Define static member using -DGCC_BUG. - * gdb.cp/m-static.exp: Add - additional_flags=-fno-eliminate-unused-debug-types. - * gdb.cp/pr-574.exp: Same. - * gdb.cp/pr9167.exp: Same. - -2021-07-21 Tom de Vries - - [gdb/testsuite] Add KFAILs for gdb.ada FAILs with gcc-11 - With gcc-11 we run into: - ... - (gdb) print pa_ptr.all^M - That operation is not available on integers of more than 8 bytes.^M - (gdb) KFAIL: gdb.ada/arrayptr.exp: scenario=all: print pa_ptr.all (PRMS: gdb/20991) - ... - - This is due to PR exp/20991 - "__int128 type support". Mark this and similar - FAILs as KFAIL. - - Also mark this FAIL: - .... - (gdb) print pa_ptr(3)^M - cannot subscript or call something of type `foo__packed_array_ptr'^M - (gdb) FAIL: gdb.ada/arrayptr.exp: scenario=minimal: print pa_ptr(3) - ... - as a KFAIL for PR ada/28115 - "Support packed array encoded as - DW_TAG_subrange_type". - - Tested on x86_64-linux, with gcc-10 and gcc-11. - - gdb/testsuite/ChangeLog: - - 2021-07-21 Tom de Vries - - * gdb.ada/arrayptr.exp: Add KFAILs for PR20991 and PR28115. - * gdb.ada/exprs.exp: Add KFAILs for PR20991. - * gdb.ada/packed_array_assign.exp: Same. - -2021-07-21 Alan Modra - - as_bad_subtract - Many places report errors of the nature "can't resolve a - b". - This provides a utility function to report such errors consistently. - I removed the section reporting and quotes around symbol names while I - was at it. Compare - ifunc-2.s:4: Error: can't resolve `bar1' {.text.1 section} - `foo1' {.text.1 section} - with - ifunc-2.s:4: Error: can't resolve bar1 - foo1 - - In many cases the section names don't help the user very much in - figuring out what went wrong, and the quotes if present arguably ought - to be placed around the entire expression: - can't resolve `bar1 - foo1' - - The patch also tidies some tc_get_reloc functions that leak memory on - error paths. - - * write.h (as_bad_subtract): Declare. - * write.c (as_bad_subtract): New function. - (fixup_segment): Use as_bad_subtract. - * config/tc-arc.c (md_apply_fix): Likewise. - * config/tc-avr.c (md_apply_fix, tc_gen_reloc): Likewise. - * config/tc-cris.c (md_apply_fix): Likewise. - * config/tc-d10v.c (md_apply_fix): Likewise. - * config/tc-d30v.c (md_apply_fix): Likewise. - * config/tc-ft32.c (md_apply_fix): Likewise. - * config/tc-h8300.c (tc_gen_reloc): Likewise. - * config/tc-m68hc11.c (md_apply_fix): Likewise. - * config/tc-mmix.c (mmix_frob_file): Likewise. - * config/tc-mn10200.c (tc_gen_reloc): Likewise. - * config/tc-nds32.c (nds32_apply_fix): Likewise. - * config/tc-pru.c (md_apply_fix): Likewise. - * config/tc-riscv.c (md_apply_fix): Likewise. - * config/tc-s12z.c (md_apply_fix): Likewise. - * config/tc-s390.c (md_apply_fix): Likewise. - * config/tc-tilegx.c (md_apply_fix): Likewise. - * config/tc-tilepro.c (md_apply_fix): Likewise. - * config/tc-v850.c (md_apply_fix): Likewise. - * config/tc-vax.c (md_apply_fix): Likewise. - * config/tc-xc16x.c (tc_gen_reloc): Likewise. - * config/tc-xgate.c (md_apply_fix): Likewise. - * config/tc-xstormy16.c (xstormy16_md_apply_fix): Likewise. - * config/tc-xtensa.c (md_apply_fix): Likewise. - * config/tc-z80.c (tc_gen_reloc): Likewise. - * config/tc-spu.c (md_apply_fix): Likewise. - (tc_gen_reloc): Delete dead code. Free memory on error. - * config/tc-cr16.c (tc_gen_reloc): Use as_bad_subtract. Free - on error. - * config/tc-crx.c (tc_gen_reloc): Likewise. - * config/tc-ppc.c (tc_gen_reloc): Likewise. - * testsuite/gas/i386/ifunc-2.l: Adjust to suit changed error message. - * testsuite/gas/mips/lui-2.l: Likewise. - * testsuite/gas/tic6x/reloc-bad-1.l: Likewise. - -2021-07-21 John Ericson - - Remove `netbsdpe` support - netbsdpe was deprecated in c2ce831330e10dab4703094491f80b6b9a5c2289. - Since then, a release has passed (2.37), and it was marked obselete in - 5c9cbf07f3f972ecffe13d858010b3179df17b32. Unless I am mistaken, that - means we can now remove support altogether. - - All branches in the "active" code are remove, and the target is - additionally marked as obsolete next to the other removed ones for - libbfd and gdb. - - Per [1] from the NetBSD toolchain list, PE/COFF support was removed a - decade ago. Furthermore, the sole mention of this target in the binutils - commit history was in 2002. Together, I'm led to believe this target - hasn't seen much attention in quite a while. - - [1]: https://mail-index.netbsd.org/tech-toolchain/2021/06/16/msg003996.html - - bfd/ - * config.bfd: Remove netbsdpe entry. - binutils/ - * configure.ac: Remove netbsdpe entry. - * testsuite/lib/binutils-common.exp (is_pecoff_format): Likewise. - * configure: Regenerate. - gas/ - * configure.tgt: Remove netbsdpe entry. - gdb/ - * configure.tgt: Add netbsdpe to removed targets. - ld/ - * configure.tgt: Remove netbsdpe entry. - * testsuite/ld-bootstrap/bootstrap.exp: Likewise. - -2021-07-21 GDB Administrator - - Automatic date update in version.in - -2021-07-20 Alan Modra - - PR28106, build of 2.37 fails on FreeBSD and Clang - https://en.cppreference.com/w/cpp/types/NULL says NULL might be - defined as nullptr. - https://en.cppreference.com/w/cpp/language/reinterpret_cast says - reinterpret_cast can't be used on nullptr. - - PR gold/28106 - PR gold/27815 - * gc.h (gc_process_relocs): Use static_cast in Section_id constructor. - -2021-07-20 Luis Machado - - Fix printing of non-address types when memory tagging is enabled - When the architecture supports memory tagging, we handle - pointer/reference types in a special way, so we can validate tags and - show mismatches. - - Unfortunately, the currently implementation errors out when the user - prints non-address values: composite types, floats, references, member - functions and other things. - - Vector registers: - - (gdb) p $v0 - Value can't be converted to integer. - - Non-existent internal variables: - - (gdb) p $foo - Value can't be converted to integer. - - The same happens for complex types and printing struct/union types. - - There are a few problems here. - - The first one is that after print_command_1 evaluates the expression - to print, the tag validation code call value_as_address - unconditionally, without making sure we have have a suitable type - where it makes to sense to call it. That results in value_as_address - (if it isn't given a pointer-like type) trying to treat the value as - an integer and convert it to an address, which #1 - doesn't make sense - (i.e., no sense in validating tags after "print 1"), and throws for - non-integer-convertible types. We fix this by making sure we have a - pointer or reference type first, and only if so then proceed to check - if the address-like value has tags. - - The second is that we're calling value_as_address even if we have an - optimized out or unavailable value, which throws, because the value's - contents aren't fully accessible/readable. This error currently - escapes out and aborts the print. This case is fixed by checking for - optimized out / unavailable explicitly. - - Third, the tag checking process does not gracefully handle exceptions. - If any exception is thrown from the tag validation code, we abort the - print. E.g., the target may fail to access tags via a running thread. - Or the needed /proc files aren't available. Or some other untold - reason. This is a bit too rigid. This commit changes print_command_1 - to catch errors, print them, and still continue with the normal - expression printing path instead of erroring out and printing nothing - useful. - - With this patch, printing works correctly again: - - (gdb) p $v0 - $1 = {d = {f = {2.0546950501119882e-81, 2.0546950501119882e-81}, u = {3399988123389603631, 3399988123389603631}, s = { - 3399988123389603631, 3399988123389603631}}, s = {f = {1.59329203e-10, 1.59329203e-10, 1.59329203e-10, 1.59329203e-10}, u = { - 791621423, 791621423, 791621423, 791621423}, s = {791621423, 791621423, 791621423, 791621423}}, h = {bf = {1.592e-10, - 1.592e-10, 1.592e-10, 1.592e-10, 1.592e-10, 1.592e-10, 1.592e-10, 1.592e-10}, f = {0.11224, 0.11224, 0.11224, 0.11224, 0.11224, - 0.11224, 0.11224, 0.11224}, u = {12079, 12079, 12079, 12079, 12079, 12079, 12079, 12079}, s = {12079, 12079, 12079, 12079, - 12079, 12079, 12079, 12079}}, b = {u = {47 }, s = {47 }}, q = {u = { - 62718710765820030520700417840365121327}, s = {62718710765820030520700417840365121327}}} - (gdb) p $foo - $2 = void - (gdb) p 2 + 2i - $3 = 2 + 2i - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28110 - -2021-07-20 Nelson Chu - - RISC-V: Minor updates for architecture parser. - * Two add subset functions is redundant. Keep the riscv_add_implicit_subset, - and renamed it to riscv_add_subset. Besides, if the subset is added in order, - then we just add it at the tail of the subset list. - - * Removed the "-march:" prefix from the error messages. Since not only the - -march= option will use the parser, but also the architecture elf attributes, - the default architecture setting and linker will use the same parser. - - * Use a function, riscv_parse_check_conflicts, to check the conflicts - of extensions, including the rv64e and rv32q. - - The rv32emc-elf/rv32i-elf/rv32gc-linux/rv64gc-elf/rv64gc-linux regressions - are tested and passed. - - bfd/ - * elfxx-riscv.c (riscv_lookup_subset): Check the subset tail list - first. If the subset is added in order, then we can just add it to - the tail without searching the whole list. - (riscv_add_subset): Replaced by riscv_add_implicit_subset. - (riscv_add_implicit_subset): Renamed to riscv_add_subset. - (riscv_parse_add_subset): Updated. - (riscv_parsing_subset_version): Removed the "-march:" prefix from - the error message. - (riscv_parse_prefixed_ext): Likewise. - (riscv_parse_std_ext): Likewise. And move the rve check - to riscv_parse_check_conflicts. - (riscv_parse_check_conflicts): New function used to check conflicts. - (riscv_parse_subset): Updated. - gas/ - * testsuite/gas/riscv/march-fail-base-02.l: Updated. - * testsuite/gas/riscv/march-fail-unknown-std.l: Likewise. - -2021-07-20 GDB Administrator - - Automatic date update in version.in - -2021-07-19 Simon Marchi - - gdb: set current thread in btrace_compute_ftrace_{bts,pt} - As documented in bug 28086, test gdb.btrace/enable-new-thread.exp - started failing with commit 0618ae414979 ("gdb: optimize - all_matching_threads_iterator"): - - (gdb) record btrace^M - (gdb) PASS: gdb.btrace/enable-new-thread.exp: record btrace - break 24^M - Breakpoint 2 at 0x555555555175: file /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.btrace/enable-new-thread.c, line 24.^M - (gdb) continue^M - Continuing.^M - /home/smarchi/src/binutils-gdb/gdb/inferior.c:303: internal-error: inferior* find_inferior_pid(process_stratum_target*, int): Assertion `pid != 0' failed.^M - A problem internal to GDB has been detected,^M - further debugging may prove unreliable.^M - Quit this debugging session? (y or n) FAIL: gdb.btrace/enable-new-thread.exp: continue to breakpoint: cont to bp.1 (GDB internal error) - - Note that I only see the failure if GDB is compiled without libipt - support. This is because GDB then makes use BTS instead of PT, so - exercises different code paths. - - I think that the commit above just exposed an existing problem. The - stack trace of the internal error is: - - #8 0x0000561cb81e404e in internal_error (file=0x561cb83aa2f8 "/home/smarchi/src/binutils-gdb/gdb/inferior.c", line=303, fmt=0x561cb83aa099 "%s: Assertion `%s' failed.") at /home/smarchi/src/binutils-gdb/gdbsupport/errors.cc:55 - #9 0x0000561cb7b5c031 in find_inferior_pid (targ=0x561cb8aafb60 , pid=0) at /home/smarchi/src/binutils-gdb/gdb/inferior.c:303 - #10 0x0000561cb7b5c102 in find_inferior_ptid (targ=0x561cb8aafb60 , ptid=...) at /home/smarchi/src/binutils-gdb/gdb/inferior.c:317 - #11 0x0000561cb7f1d1c3 in find_thread_ptid (targ=0x561cb8aafb60 , ptid=...) at /home/smarchi/src/binutils-gdb/gdb/thread.c:487 - #12 0x0000561cb7f1b921 in all_matching_threads_iterator::all_matching_threads_iterator (this=0x7ffc4ee34678, filter_target=0x561cb8aafb60 , filter_ptid=...) at /home/smarchi/src/binutils-gdb/gdb/thread-iter.c:125 - #13 0x0000561cb77bc462 in filtered_iterator::filtered_iterator (this=0x7ffc4ee34670) at /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/filtered-iterator.h:42 - #14 0x0000561cb77b97cb in all_non_exited_threads_range::begin (this=0x7ffc4ee34650) at /home/smarchi/src/binutils-gdb/gdb/thread-iter.h:243 - #15 0x0000561cb7d8ba30 in record_btrace_target::record_is_replaying (this=0x561cb8aa6250 , ptid=...) at /home/smarchi/src/binutils-gdb/gdb/record-btrace.c:1411 - #16 0x0000561cb7d8bb83 in record_btrace_target::xfer_partial (this=0x561cb8aa6250 , object=TARGET_OBJECT_MEMORY, annex=0x0, readbuf=0x7ffc4ee34c58 "\260g\343N\374\177", writebuf=0x0, offset=140737352774277, len=1, xfered_len=0x7ffc4ee34ad8) at /home/smarchi/src/binutils-gdb/gdb/record-btrace.c:1437 - #17 0x0000561cb7ef73a9 in raw_memory_xfer_partial (ops=0x561cb8aa6250 , readbuf=0x7ffc4ee34c58 "\260g\343N\374\177", writebuf=0x0, memaddr=140737352774277, len=1, xfered_len=0x7ffc4ee34ad8) at /home/smarchi/src/binutils-gdb/gdb/target.c:1504 - #18 0x0000561cb7ef77da in memory_xfer_partial_1 (ops=0x561cb8aa6250 , object=TARGET_OBJECT_CODE_MEMORY, readbuf=0x7ffc4ee34c58 "\260g\343N\374\177", writebuf=0x0, memaddr=140737352774277, len=1, xfered_len=0x7ffc4ee34ad8) at /home/smarchi/src/binutils-gdb/gdb/target.c:1635 - #19 0x0000561cb7ef78b5 in memory_xfer_partial (ops=0x561cb8aa6250 , object=TARGET_OBJECT_CODE_MEMORY, readbuf=0x7ffc4ee34c58 "\260g\343N\374\177", writebuf=0x0, memaddr=140737352774277, len=1, xfered_len=0x7ffc4ee34ad8) at /home/smarchi/src/binutils-gdb/gdb/target.c:1664 - #20 0x0000561cb7ef7ba4 in target_xfer_partial (ops=0x561cb8aa6250 , object=TARGET_OBJECT_CODE_MEMORY, annex=0x0, readbuf=0x7ffc4ee34c58 "\260g\343N\374\177", writebuf=0x0, offset=140737352774277, len=1, xfered_len=0x7ffc4ee34ad8) at /home/smarchi/src/binutils-gdb/gdb/target.c:1721 - #21 0x0000561cb7ef8503 in target_read_partial (ops=0x561cb8aa6250 , object=TARGET_OBJECT_CODE_MEMORY, annex=0x0, buf=0x7ffc4ee34c58 "\260g\343N\374\177", offset=140737352774277, len=1, xfered_len=0x7ffc4ee34ad8) at /home/smarchi/src/binutils-gdb/gdb/target.c:1974 - #22 0x0000561cb7ef861f in target_read (ops=0x561cb8aa6250 , object=TARGET_OBJECT_CODE_MEMORY, annex=0x0, buf=0x7ffc4ee34c58 "\260g\343N\374\177", offset=140737352774277, len=1) at /home/smarchi/src/binutils-gdb/gdb/target.c:2014 - #23 0x0000561cb7ef809f in target_read_code (memaddr=140737352774277, myaddr=0x7ffc4ee34c58 "\260g\343N\374\177", len=1) at /home/smarchi/src/binutils-gdb/gdb/target.c:1869 - #24 0x0000561cb7937f4d in gdb_disassembler::dis_asm_read_memory (memaddr=140737352774277, myaddr=0x7ffc4ee34c58 "\260g\343N\374\177", len=1, info=0x7ffc4ee34e88) at /home/smarchi/src/binutils-gdb/gdb/disasm.c:139 - #25 0x0000561cb80ab66d in fetch_data (info=0x7ffc4ee34e88, addr=0x7ffc4ee34c59 "g\343N\374\177") at /home/smarchi/src/binutils-gdb/opcodes/i386-dis.c:194 - #26 0x0000561cb80ab7e2 in ckprefix () at /home/smarchi/src/binutils-gdb/opcodes/i386-dis.c:8628 - #27 0x0000561cb80adbd8 in print_insn (pc=140737352774277, info=0x7ffc4ee34e88) at /home/smarchi/src/binutils-gdb/opcodes/i386-dis.c:9587 - #28 0x0000561cb80abe4f in print_insn_i386 (pc=140737352774277, info=0x7ffc4ee34e88) at /home/smarchi/src/binutils-gdb/opcodes/i386-dis.c:8894 - #29 0x0000561cb7744a19 in default_print_insn (memaddr=140737352774277, info=0x7ffc4ee34e88) at /home/smarchi/src/binutils-gdb/gdb/arch-utils.c:1029 - #30 0x0000561cb7b33067 in i386_print_insn (pc=140737352774277, info=0x7ffc4ee34e88) at /home/smarchi/src/binutils-gdb/gdb/i386-tdep.c:4013 - #31 0x0000561cb7acd8f4 in gdbarch_print_insn (gdbarch=0x561cbae2fb60, vma=140737352774277, info=0x7ffc4ee34e88) at /home/smarchi/src/binutils-gdb/gdb/gdbarch.c:3478 - #32 0x0000561cb793a32d in gdb_disassembler::print_insn (this=0x7ffc4ee34e80, memaddr=140737352774277, branch_delay_insns=0x0) at /home/smarchi/src/binutils-gdb/gdb/disasm.c:795 - #33 0x0000561cb793a5b0 in gdb_print_insn (gdbarch=0x561cbae2fb60, memaddr=140737352774277, stream=0x561cb8ac99f8 , branch_delay_insns=0x0) at /home/smarchi/src/binutils-gdb/gdb/disasm.c:850 - #34 0x0000561cb793a631 in gdb_insn_length (gdbarch=0x561cbae2fb60, addr=140737352774277) at /home/smarchi/src/binutils-gdb/gdb/disasm.c:859 - #35 0x0000561cb77f53f4 in btrace_compute_ftrace_bts (tp=0x561cbba11210, btrace=0x7ffc4ee35188, gaps=...) at /home/smarchi/src/binutils-gdb/gdb/btrace.c:1107 - #36 0x0000561cb77f55f5 in btrace_compute_ftrace_1 (tp=0x561cbba11210, btrace=0x7ffc4ee35180, cpu=0x0, gaps=...) at /home/smarchi/src/binutils-gdb/gdb/btrace.c:1527 - #37 0x0000561cb77f5705 in btrace_compute_ftrace (tp=0x561cbba11210, btrace=0x7ffc4ee35180, cpu=0x0) at /home/smarchi/src/binutils-gdb/gdb/btrace.c:1560 - #38 0x0000561cb77f583b in btrace_add_pc (tp=0x561cbba11210) at /home/smarchi/src/binutils-gdb/gdb/btrace.c:1589 - #39 0x0000561cb77f5a86 in btrace_enable (tp=0x561cbba11210, conf=0x561cb8ac6878 ) at /home/smarchi/src/binutils-gdb/gdb/btrace.c:1629 - #40 0x0000561cb7d88d26 in record_btrace_enable_warn (tp=0x561cbba11210) at /home/smarchi/src/binutils-gdb/gdb/record-btrace.c:294 - #41 0x0000561cb7c603dc in std::__invoke_impl (__f=@0x561cbb6c4878: 0x561cb7d88cdc ) at /usr/include/c++/10/bits/invoke.h:60 - #42 0x0000561cb7c5e5a6 in std::__invoke_r (__fn=@0x561cbb6c4878: 0x561cb7d88cdc ) at /usr/include/c++/10/bits/invoke.h:153 - #43 0x0000561cb7c5dc92 in std::_Function_handler::_M_invoke(std::_Any_data const&, thread_info*&&) (__functor=..., __args#0=@0x7ffc4ee35310: 0x561cbba11210) at /usr/include/c++/10/bits/std_function.h:291 - #44 0x0000561cb7f2600f in std::function::operator()(thread_info*) const (this=0x561cbb6c4878, __args#0=0x561cbba11210) at /usr/include/c++/10/bits/std_function.h:622 - #45 0x0000561cb7f23dc8 in gdb::observers::observable::notify (this=0x561cb8ac5aa0 , args#0=0x561cbba11210) at /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/observable.h:150 - #46 0x0000561cb7f1c436 in add_thread_silent (targ=0x561cb8aafb60 , ptid=...) at /home/smarchi/src/binutils-gdb/gdb/thread.c:263 - #47 0x0000561cb7f1c479 in add_thread_with_info (targ=0x561cb8aafb60 , ptid=..., priv=0x561cbb3f7ab0) at /home/smarchi/src/binutils-gdb/gdb/thread.c:272 - #48 0x0000561cb7bfa1d0 in record_thread (info=0x561cbb0413a0, tp=0x0, ptid=..., th_p=0x7ffc4ee35610, ti_p=0x7ffc4ee35620) at /home/smarchi/src/binutils-gdb/gdb/linux-thread-db.c:1380 - #49 0x0000561cb7bf7a2a in thread_from_lwp (stopped=0x561cba81db20, ptid=...) at /home/smarchi/src/binutils-gdb/gdb/linux-thread-db.c:429 - #50 0x0000561cb7bf7ac5 in thread_db_notice_clone (parent=..., child=...) at /home/smarchi/src/binutils-gdb/gdb/linux-thread-db.c:447 - #51 0x0000561cb7bdc9a2 in linux_handle_extended_wait (lp=0x561cbae25720, status=4991) at /home/smarchi/src/binutils-gdb/gdb/linux-nat.c:1981 - #52 0x0000561cb7bdf0f3 in linux_nat_filter_event (lwpid=435403, status=198015) at /home/smarchi/src/binutils-gdb/gdb/linux-nat.c:2920 - #53 0x0000561cb7bdfed6 in linux_nat_wait_1 (ptid=..., ourstatus=0x7ffc4ee36398, target_options=...) at /home/smarchi/src/binutils-gdb/gdb/linux-nat.c:3202 - #54 0x0000561cb7be0b68 in linux_nat_target::wait (this=0x561cb8aafb60 , ptid=..., ourstatus=0x7ffc4ee36398, target_options=...) at /home/smarchi/src/binutils-gdb/gdb/linux-nat.c:3440 - #55 0x0000561cb7bfa2fc in thread_db_target::wait (this=0x561cb8a9acd0 , ptid=..., ourstatus=0x7ffc4ee36398, options=...) at /home/smarchi/src/binutils-gdb/gdb/linux-thread-db.c:1412 - #56 0x0000561cb7d8e356 in record_btrace_target::wait (this=0x561cb8aa6250 , ptid=..., status=0x7ffc4ee36398, options=...) at /home/smarchi/src/binutils-gdb/gdb/record-btrace.c:2547 - #57 0x0000561cb7ef996d in target_wait (ptid=..., status=0x7ffc4ee36398, options=...) at /home/smarchi/src/binutils-gdb/gdb/target.c:2608 - #58 0x0000561cb7b6d297 in do_target_wait_1 (inf=0x561cba6d8780, ptid=..., status=0x7ffc4ee36398, options=...) at /home/smarchi/src/binutils-gdb/gdb/infrun.c:3640 - #59 0x0000561cb7b6d43e in operator() (__closure=0x7ffc4ee36190, inf=0x561cba6d8780) at /home/smarchi/src/binutils-gdb/gdb/infrun.c:3701 - #60 0x0000561cb7b6d7b2 in do_target_wait (ecs=0x7ffc4ee36370, options=...) at /home/smarchi/src/binutils-gdb/gdb/infrun.c:3720 - #61 0x0000561cb7b6e67d in fetch_inferior_event () at /home/smarchi/src/binutils-gdb/gdb/infrun.c:4069 - #62 0x0000561cb7b4659b in inferior_event_handler (event_type=INF_REG_EVENT) at /home/smarchi/src/binutils-gdb/gdb/inf-loop.c:41 - #63 0x0000561cb7be25f7 in handle_target_event (error=0, client_data=0x0) at /home/smarchi/src/binutils-gdb/gdb/linux-nat.c:4227 - #64 0x0000561cb81e4ee2 in handle_file_event (file_ptr=0x561cbae24e10, ready_mask=1) at /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:575 - #65 0x0000561cb81e5490 in gdb_wait_for_event (block=0) at /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:701 - #66 0x0000561cb81e41be in gdb_do_one_event () at /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:212 - #67 0x0000561cb7c18096 in start_event_loop () at /home/smarchi/src/binutils-gdb/gdb/main.c:421 - #68 0x0000561cb7c181e0 in captured_command_loop () at /home/smarchi/src/binutils-gdb/gdb/main.c:481 - #69 0x0000561cb7c19d7e in captured_main (data=0x7ffc4ee366a0) at /home/smarchi/src/binutils-gdb/gdb/main.c:1353 - #70 0x0000561cb7c19df0 in gdb_main (args=0x7ffc4ee366a0) at /home/smarchi/src/binutils-gdb/gdb/main.c:1368 - #71 0x0000561cb7693186 in main (argc=11, argv=0x7ffc4ee367b8) at /home/smarchi/src/binutils-gdb/gdb/gdb.c:32 - - At frame 45, the new_thread observable is fired. At this moment, the - new thread isn't the current thread, inferior_ptid is null_ptid. I - think this is ok: the new_thread observable doesn't give any guarantee - on the global context when observers are invoked. Frame 35, - btrace_compute_ftrace_bts, calls gdb_insn_length. gdb_insn_length - doesn't have a thread_info or other parameter what could indicate where - to read memory from, it implicitly uses the global context - (inferior_ptid). - - So we reach the all_non_exited_threads_range in - record_btrace_target::record_is_replaying with a null inferior_ptid. - The previous implemention of all_non_exited_threads_range didn't care, - but the new one does. The problem of calling gdb_insn_length and - ultimately trying to read memory with a null inferior_ptid already - existed, but the commit mentioned above made it visible. - - Something between frames 40 (record_btrace_enable_warn) and 35 - (btrace_compute_ftrace_bts) needs to be switching the global context to - make TP the current thread. Since btrace_compute_ftrace_bts takes the - thread_info to work with as a parameter, that typically means that it - doesn't require its caller to also set the global current context - (current thread) when calling. If it needs to call other functions - that do require the global current thread to be set, then it needs to - temporarily change the current thread while calling these other - functions. Therefore, switch and restore the current thread in - btrace_compute_ftrace_bts. - - By inspection, it looks like btrace_compute_ftrace_pt may also call - functions sensitive to the global context: it installs the - btrace_pt_readmem_callback callback in the PT instruction decoder. When - this function gets called, inferior_ptid must be set appropriately. Add - a switch and restore in there too. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28086 - Change-Id: I407fbfe41aab990068bd102491aa3709b0a034b3 - -2021-07-19 GDB Administrator - - Automatic date update in version.in - -2021-07-18 Nick Clifton - - Move pending-obsolesence targets onto the obsolete list. - * config.bfd: Move pending obsoletion targets to obsolete list. - - Update how-to-make-a-release checklist with latest changes from 2.37 release - -2021-07-18 Michael Krasnyk - - PR28098 Skip R_*_NONE relocation entries with zero r_sym without counting - PR gold/28098 - * reloc.cc (Track_relocs::advance): Skip R_*_NONE relocation entries - with r_sym of zero without counting in advance method. - -2021-07-18 Simon Marchi - - gdb: convert nat/x86-dregs.c macros to functions - I'm debugging why GDB crashes on OpenBSD/amd64, turns out it's because - x86_dr_low.get_status is nullptr. It would have been useful to be able - to break on x86_dr_low_get_status, so I thought it would be a good - reason to convert these function-like macros into functions. - - Change-Id: Ic200b50ef8455b4697bc518da0fa2bb704cf4721 - -2021-07-18 GDB Administrator - - Automatic date update in version.in - -2021-07-17 Tom Tromey - - Fix file-name handling regression with DWARF index - When run with the gdb-index or debug-names target boards, dup-psym.exp - fails. This came up for me because my new DWARF scanner reuses this - part of the existing index code, and so it registers as a regression. - This is PR symtab/25834. - - Looking into this, I found that the DWARF index code here is fairly - different from the psymtab code. I don't think there's a deep reason - for this, and in fact, it seemed to me that the index code could - simply mimic what the psymtab code already does. - - That is what this patch implements. The DW_AT_name and DW_AT_comp_dir - are now stored in the quick file names table. This may require - allocating a quick file names table even when DW_AT_stmt_list does not - exist. Then, the functions that work with this data are changed to - use find_source_or_rewrite, just as the psymbol code does. Finally, - line_header::file_full_name is removed, as it is no longer needed. - - Currently, the index maintains a hash table of "quick file names". - The hash table uses a deletion function to free the "real name" - components when necessary. There's also a second such function to - implement the forget_cached_source_info method. - - This bug fix patch will create a quick file name object even when - there is no DW_AT_stmt_list, meaning that the object won't be entered - in the hash table. So, this patch changes the memory management - approach so that the entries are cleared when the per-BFD object is - destroyed. (A dwarf2_per_cu_data destructor is not introduced, - because we have been avoiding adding a vtable to that class.) - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=25834 - -2021-07-17 Tom Tromey - - Check for debug-types in map_symbol_filenames - map_symbol_filenames can skip type units -- in fact I think it has to, - due to the assertion at the top of dw2_get_file_names. This may be a - regression due to the TU/CU unification patch, I did not check. - - Simplify DWARF file name caching - The DWARF index file name caching code only records when a line table - has been read and the reading failed. However, the code would be - simpler if it recorded any attempt, which is what this patch - implements. - - Introduce find_source_or_rewrite - The final bug fix in this series would duplicate the logic in - psymtab_to_fullname, so this patch extracts the body of this function - into a new function. - - Simplify file_and_directory storage management - file_and_directory carries a std::string in case the compilation - directory is computed, but a subsequent patch wants to preserve this - string without also having to maintain the storage for it. So, this - patch arranges for the compilation directory string to be stored in - the per-BFD string bcache instead. - - Pass file_and_directory through DWARF line-decoding code - This patch removes the redundant "comp_unit" parameter from - compute_include_file_name, and arranges to pass a file_and_directory - object from the readers down to this function. It also changes the - partial symtab reader to use find_file_and_directory, rather than - reimplement this functionality by hand. - - Rename and refactor psymtab_include_file_name - In order to fix an index-related regression, I want to use - psymtab_include_file_name in the DWARF index file-handling code. This - patch renames this function and changes it to no longer require a - partial symtab to be passed in. A subsequent patch will further - refactor this code to remove the redundant parameter (which was always - there but is now more obvious). - -2021-07-17 Sergey Belyashov - - Add basic Z80 CPU support - Supported ISAs: - - Z80 (all undocumented instructions) - - Z180 - - eZ80 (Z80 mode only) - - Datasheets: - Z80: https://www.zilog.com/manage_directlink.php?filepath=docs/z80/um0080&extn=.pdf - Z180: https://www.zilog.com/manage_directlink.php?filepath=docs/z180/ps0140&extn=.pdf - eZ80: http://www.zilog.com/force_download.php?filepath=YUhSMGNEb3ZMM2QzZHk1NmFXeHZaeTVqYjIwdlpHOWpjeTlWVFRBd056Y3VjR1Jt - - To debug Z80 programs using GDB you must configure and embed - z80-stub.c to your program (SDCC compiler is required). Or - you may use some simulator with GDB support. - - gdb/ChangeLog: - - * Makefile.in (ALL_TARGET_OBS): Add z80-tdep.c. - * NEWS: Mention z80 support. - * configure.tgt: Handle z80*. - * features/Makefile (XMLTOC): Add z80.xml. - * features/z80-cpu.xml: New. - * features/z80.c: Generate. - * features/z80.xml: New. - * z80-tdep.c: New file. - * z80-tdep.h: New file. - - gdb/stubs/ChangeLog: - - * z80-stub.c: New file. - - Change-Id: Id0b7a6e210c3f93c6853c5e3031b7bcee47d0db9 - -2021-07-17 Simon Marchi - - gdb: make all_inferiors_safe actually work - The test gdb.threads/fork-plus-threads.exp fails since 08bdefb58b78 - ("gdb: make inferior_list use intrusive_list"): - - FAIL: gdb.threads/fork-plus-threads.exp: detach-on-fork=off: only inferior 1 left - - Looking at the log, we see that we are left with a bunch of inferiors in - the detach-on-fork=off case: - - info inferiors^M - Num Description Connection Executable ^M - * 1 /fork-plus-threads ^M - 2 /fork-plus-threads ^M - 3 /fork-plus-threads ^M - 4 /fork-plus-threads ^M - 5 /fork-plus-threads ^M - 6 /fork-plus-threads ^M - 7 /fork-plus-threads ^M - 8 /fork-plus-threads ^M - 9 /fork-plus-threads ^M - 10 /fork-plus-threads ^M - 11 /fork-plus-threads ^M - (gdb) FAIL: gdb.threads/fork-plus-threads.exp: detach-on-fork=off: only inferior 1 left - - when we expect to have just one. The problem is prune_inferiors not - pruning inferiors. And this is caused by all_inferiors_safe not - actually iterating on inferiors. The current implementation: - - inline all_inferiors_safe_range - all_inferiors_safe () - { - return {}; - } - - default-constructs an all_inferiors_safe_range, which default-constructs - an all_inferiors_safe_iterator as its m_begin field, which - default-constructs a all_inferiors_iterator. A default-constructed - all_inferiors_iterator is an end iterator, which means we have - constructed an (end,end) all_inferiors_safe_range. - - We actually need to pass down the list on which we want to iterator - (that is the inferior_list global), so that all_inferiors_iterator's - first constructor is chosen. We also pass nullptr as the proc_target - filter. In this case, we don't do any filtering, but if in the future - all_inferiors_safe needed to allow filtering on process target (like - all_inferiors does), we could pass down a process target pointer. - - basic_safe_iterator's constructor needs to be changed to allow - constructing the wrapped iterator with multiple arguments, not just one. - - With this, gdb.threads/fork-plus-threads.exp is passing once again for - me. - - Change-Id: I650552ede596e3590c4b7606ce403690a0278a01 - -2021-07-17 GDB Administrator - - Automatic date update in version.in - -2021-07-16 Lancelot SIX - - gdb: Support stepping out from signal handler on riscv*-linux - Currently, gdb cannot step outside of a signal handler on RISC-V - platforms. This causes multiple failures in gdb.base/sigstep.exp: - - FAIL: gdb.base/sigstep.exp: continue to handler, nothing in handler, step from handler: leave handler (timeout) - FAIL: gdb.base/sigstep.exp: continue to handler, si+advance in handler, step from handler: leave handler (timeout) - FAIL: gdb.base/sigstep.exp: continue to handler, nothing in handler, next from handler: leave handler (timeout) - FAIL: gdb.base/sigstep.exp: continue to handler, si+advance in handler, next from handler: leave handler (timeout) - FAIL: gdb.base/sigstep.exp: stepi from handleri: leave signal trampoline - FAIL: gdb.base/sigstep.exp: nexti from handleri: leave signal trampoline - - === gdb Summary === - - # of expected passes 587 - # of unexpected failures 6 - - This patch adds support for stepping outside of a signal handler on - riscv*-*-linux*. - - Implementation is heavily inspired from mips_linux_syscall_next_pc and - surroundings as advised by Pedro Alves. - - After this patch, all tests in gdb.base/sigstep.exp pass. - - Build and tested on riscv64-linux-gnu. - -2021-07-16 Lancelot SIX - - gdb/testsuite: Declare that riscv*-*-linux* cannot hardware_single_step - Many tests fail in gdb/testsuite/gdb.base/sigstep.exp on - riscv64-linux-gnu. Those tests check that when stepping, if the - debuggee received a signal it should step inside the signal handler. - - This feature requires hardware support for single stepping (or at least - kernel support), but none are available on riscv*-linux-gnu hosts, at - the moment at least. - - This patch adds RISC-V to the list of configurations that does not - have hardware single step capability, disabling tests relying on such - feature. - - Tested on riscv64-linux-gnu. - -2021-07-16 Tom Tromey - - Document quick_symbol_functions::expand_symtabs_matching invariant - While working on my series to replace the DWARF psymbol reader, I - noticed that the expand_symtabs_matching has an undocumented - invariant. I think that, if this invariant is not followed, then GDB - will crash. So, this patch documents this in the relevant spots and - introduces some asserts to make it clear. - - Regression tested on x86-64 Fedora 32. - -2021-07-16 Tom Tromey - - Fix array stride bug - Investigation of using the Python API with an Ada program showed that - an array of dynamic types was not being handled properly. I tracked - this down to an oddity of how array strides are handled. - - In gdb, an array stride can be attached to the range type, via the - range_bounds object. However, the stride can also be put into the - array's first field. From create_range_type_with_stride: - - else if (bit_stride > 0) - TYPE_FIELD_BITSIZE (result_type, 0) = bit_stride; - - It's hard to be sure why this is done, but I would guess a combination - of historical reasons plus a desire (mentioned in a comment somewhere) - to avoid modifying the range type. - - This patch fixes the problem by changing type::bit_stride to - understand this convention. It also fixes one spot that reproduces - this logic. - - Regression tested on x86-64 Fedora 32. - -2021-07-16 Giulio Benetti - - or1k: fix pc-relative relocation against dynamic on PC relative 26 bit relocation. - bfd * elf32-or1k.c (or1k_elf_relocate_section): Use a separate entry - in switch case R_OR1K_INSN_REL_26 where we need to check for - !SYMBOL_CALLS_LOCAL() instead of !SYMBOL_REFERENCES_LOCAL(). - -2021-07-16 Nick Clifton - - Updated Swedish translation for the binutils sub-directory - -2021-07-16 GDB Administrator - - Automatic date update in version.in - -2021-07-15 Tom Tromey - - Avoid expression parsing crash with unknown language - PR gdb/28093 points out that gdb crashes when language is set to - "unknown" and expression parsing is attempted. At first I thought - this was a regression due to the expression rewrite, but it turns out - that older versions crash as well. - - This patch avoids the crash by changing the default expression parser - to throw an exception. I think this is preferable -- the current - behavior of silently doing nothing does not really make sense. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28093 - -2021-07-15 Simon Marchi - - gdb: pass child_ptid and fork kind to target_ops::follow_fork - This is a small cleanup I think would be nice, that I spotted while - doing the following patch. - - gdb/ChangeLog: - - * target.h (struct target_ops) : Add ptid and - target_waitkind parameters. - (target_follow_fork): Likewise. - * target.c (default_follow_fork): Likewise. - (target_follow_fork): Likewise. - * fbsd-nat.h (class fbsd_nat_target) : Likewise. - * fbsd-nat.c (fbsd_nat_target::follow_fork): Likewise. - * linux-nat.h (class linux_nat_target) : Likewise. - * linux-nat.c (linux_nat_target::follow_fork): Likewise. - * obsd-nat.h (class obsd_nat_target) : Likewise. - * obsd-nat.c (obsd_nat_target::follow_fork): Likewise. - * remote.c (class remote_target) : Likewise. - * target-debug.h (target_debug_print_target_waitkind): New. - * target-delegates.c: Re-generate. - - Change-Id: I5421a542f2e19100a22b74cc333d2b235d0de3c8 - -2021-07-15 Simon Marchi - - gdb: call post_create_inferior at end of follow_fork_inferior - GDB doesn't handle well the case of an inferior using the JIT interface - to register JIT-ed objfiles and forking. If an inferior registers a - code object using the JIT interface and then forks, the child process - conceptually has the same code object loaded, so GDB should look it up - and learn about it (it currently doesn't). - - To achieve this, I think it would make sense to have the - inferior_created observable called when an inferior is created due to a - fork in follow_fork_inferior. The inferior_created observable is - currently called both after starting a new inferior and after attaching - to an inferior, allowing various sub-components to learn about that new - executing inferior. We can see handling a fork child just like - attaching to it, so any work done when attaching should also be done in - the case of a fork child. - - Instead of just calling the inferior_created observable, this patch - makes follow_fork_inferior call the whole post_create_inferior function. - This way, the attach and follow-fork code code paths are more alike. - - Given that post_create_inferior calls solib_create_inferior_hook, - follow_fork_inferior doesn't need to do it itself, so those calls to - solib_create_inferior_hook are removed. - - One question you may have: why not just call post_create_inferior at the - places where solib_create_inferior_hook is currently called, instead of - after target_follow_fork? - - - there's something fishy for the second solib_create_inferior_hook - call site: at this point we have switched the current program space - to the child's, but not the current inferior nor the current thread. - So solib_create_inferior_hook (and everything under, including - check_for_thread_db, for example) is called with inferior 1 as the - current inferior and inferior 2's program space as the current - program space. I think that's wrong, because at this point we are - setting up inferior 2, and all that code relies on the current - inferior. We could just add a switch_to_thread call before it to - make inferior 2 the current one, but there are other problems (see - below). - - - solib_create_inferior_hook is currently not called on the - `follow_child && detach_fork` path. I think we need to call it, - because we still get a new inferior in that case (even though we - detach the parent). If we only call post_create_inferior where - solib_create_inferior_hook used to be called, then the JIT - subcomponent doesn't get informed about the new inferior, and that - introduces a failure in the new gdb.base/jit-elf-fork.exp test. - - - if we try to put the post_create_inferior just after the - switch_to_thread that was originally at line 662, or just before the - call to target_follow_fork, we introduce a subtle failure in - gdb.threads/fork-thread-pending.exp. What happens then is that - libthread_db gets loaded (somewhere under post_create_inferior) - before the linux-nat target learns about the LWPs (which happens in - linux_nat_target::follow_fork). As a result, the ALL_LWPS loop in - try_thread_db_load_1 doesn't see the child LWP, and the thread-db - target doesn't have the chance to fill in thread_info::priv. A bit - later, when the test does "info threads", and - thread_db_target::pid_to_str is called, the thread-db target doesn't - recognize the thread as one of its own, and delegates the request to - the target below. Because the pid_to_str output is not the expected - one, the test fails. - - This tells me that we need to call the process target's follow_fork - first, to make the process target create the necessary LWP and thread - structures. Then, we can call post_create_inferior to let the other - components of GDB do their thing. - - But then you may ask: check_for_thread_db is already called today, - somewhere under solib_create_inferior_hook, and that is before - target_follow_fork, why don't we see this ordering problem!? Well, - because of the first bullet point: when check_for_thread_db / - thread_db_load are called, the current inferior is (erroneously) - inferior 1, the parent. Because libthread_db is already loaded for - the parent, thread_db_load early returns. check_for_thread_db later - gets called by linux_nat_target::follow_fork. At this point, the - current inferior is the correct one and the child's LWP exists, so - all is well. - - Since we now call post_create_inferior after target_follow_fork, which - calls the inferior_created observable, which calls check_for_thread_db, - I don't think linux_nat_target needs to explicitly call - check_for_thread_db itself, so that is removed. - - In terms of testing, this patch adds a new gdb.base/jit-elf-fork.exp - test. It makes an inferior register a JIT code object and then fork. - It then verifies that whatever the detach-on-fork and follow-fork-child - parameters are, GDB knows about the JIT code object in all the inferiors - that survive the fork. It verifies that the inferiors can unload that - code object. - - There isn't currently a way to get visibility into GDB's idea of the JIT - code objects for each inferior. For the purpose of this test, add the - "maintenance info jit" command. There isn't much we can print about the - JIT code objects except their load address. So the output looks a bit - bare, but it's good enough for the test. - - gdb/ChangeLog: - - * NEWS: Mention "maint info jit" command. - * infrun.c (follow_fork_inferior): Don't call - solib_create_inferior_hook, call post_create_inferior if a new - inferior was created. - * jit.c (maint_info_jit_cmd): New. - (_initialize_jit): Register new command. - * linux-nat.c (linux_nat_target::follow_fork): Don't call - check_for_thread_db. - * linux-nat.h (check_for_thread_db): Remove declaration. - * linux-thread-db.c (check_thread_signals): Make static. - - gdb/doc/ChangeLog: - - * gdb.texinfo (Maintenance Commands): Mention "maint info jit". - - gdb/testsuite/ChangeLog: - - * gdb.base/jit-elf-fork-main.c: New test. - * gdb.base/jit-elf-fork-solib.c: New test. - * gdb.base/jit-elf-fork.exp: New test. - - Change-Id: I9a192e55b8a451c00e88100669283fc9ca60de5c - -2021-07-15 Libor Bukata - - [gdb/procfs.c] Fix build failure in find_stop_signal - It fixes a regression caused by commit - 1edb66d856c82c389edfd7610143236a68c76846 where thread_info::suspend was - made private. - - The public thread_info API has to be used to get stop signal and avoid - build failures. - - gdb/ChangeLog: - - 2021-07-14 Libor Bukata - - * gdb/procfs.c (find_stop_signal): Use thread_info API. - - Change-Id: I53bc57a05cd0eca5f28ef0726d6faeeb306e7904 - -2021-07-15 GDB Administrator - - Automatic date update in version.in - -2021-07-14 H.J. Lu - - x86: Add int1 as one byte opcode 0xf1 - Also change the x86 disassembler to disassemble 0xf1 as int1, instead of - icebp. - - gas/ - - PR gas/28088 - * testsuite/gas/i386/opcode.s: Add int1. - * testsuite/gas/i386/x86-64-opcode.s: Add int1, int3 and int. - * testsuite/gas/i386/opcode-intel.d: Updated. - * testsuite/gas/i386/opcode-suffix.d: Likewise. - * testsuite/gas/i386/opcode.d: Likewise. - * testsuite/gas/i386/x86-64-opcode.d: Likewise. - - opcodes/ - - PR gas/28088 - * i386-dis.c (dis386): Replace icebp with int1. - * i386-opc.tbl: Add int1. - * i386-tbl.h: Regenerate. - -2021-07-14 Alan Modra - - gas: default TC_VALIDATE_FIX_SUB to 0 - gas/write.c provides a fallback TC_VALIDATE_FIX_SUB define that can be - a problem for some targets, the problem being that a non-zero - definition of TC_VALIDATE_FIX_SUB says that some uses of fx_subsy are - OK, in effect that the target will handle fx_subsy in md_apply_fix - and/or tc_gen_reloc. A lot of targets don't have the necessary - md_apply_fix and tc_gen_reloc support. So a safer default is to - disallow fx_subsy by default. - - I've had a good look over target usage of fx_subsy, and think I've - caught all the cases where targets need TC_VALIDATE_FIX_SUB. Possible - failures would be limited to alpha, microblaze, ppc and s390 (the - targets that define UNDEFINED_DIFFERENCE_OK), or targets that generate - fixups with BFD_RELOC_GPREL32/16 and use a syntax explicitly showing - a difference expression. - - * write.c (TC_VALIDATE_FIX_SUB): Default to 0. - * config/tc-hppa.h (TC_VALIDATE_FIX_SUB): Define. - * config/tc-microblaze.h (TC_VALIDATE_FIX_SUB): Define. - * config/tc-alpha.h (TC_VALIDATE_FIX_SUB): Define for ECOFF. - * config/tc-ppc.h (TC_VALIDATE_FIX_SUB): Don't define for ELF. - Do define for XCOFF. - -2021-07-14 Clément Chigot - - objdump: add DWARF support for AIX - DWARF sections have special names on AIX which need be handled - by objdump in order to correctly print them. - This patch also adds the correlation in bfd for future uses. - - bfd/ - * libxcoff.h (struct xcoff_dwsect_name): Add DWARF name. - * coff-rs6000.c (xcoff_dwsect_names): Update. - * coffcode.h (sec_to_styp_flags): Likewise. - (coff_new_section_hook): Likewise. - binutils/ - * dwarf.h (struct dwarf_section): Add XCOFF name. - * dwarf.c (struct dwarf_section_display): Update. - * objdump.c (load_debug_section): Add XCOFF name handler. - (dump_dwarf_section): Likewise. - gas/ - * config/tc-ppc.c (ppc_change_debug_section): Update to - match new name's field. - -2021-07-14 Tom de Vries - - [gdb/testsuite] Fix gdb.base/gold-gdb-index.exp - When running test-case gdb.base/gold-gdb-index.exp on openSUSE Tumbleweed, - I run into: - ... - FAIL: gdb.base/gold-gdb-index.exp: maint info symtabs - ... - - This is due to a dummy .gdb_index: - ... - Contents of the .gdb_index section: - - Version 7 - - CU table: - - TU table: - - Address table: - - Symbol table: - ... - - The dummy .gdb_index is ignored when loading the symbols, and instead partial - symbols are used. Consequently, we get the same result as if we'd removed - -Wl,--gdb-index from the compilation. - - Presumably, gold fails to generate a proper .gdb_index because it lacks - DWARF5 support. - - Anyway, without a proper .gdb_index we can't test the gdb behaviour we're - trying to excercise. Fix this by detecting whether we actually used a - .gdb_index for symbol loading. - - Tested on x86_64-linux. - - gdb/testsuite/ChangeLog: - - 2021-07-14 Tom de Vries - - * lib/gdb.exp (have_index): New proc. - * gdb.base/gold-gdb-index.exp: Use have_index. - -2021-07-14 Tom de Vries - - [gdb/testsuite] Add missing skip_tui_tests - When building gdb with --disable-tui, we run into: - ... - (gdb) frame apply all -- -^M - Undefined command: "-". Try "help".^M - (gdb) ERROR: Undefined command "frame apply all -- -". - UNRESOLVED: gdb.base/options.exp: test-frame-apply: frame apply all -- - - ... - - Fix this by detecting whether tui is supported, and skipping the tui-related - tests otherwise. Same in some gdb.tui test-cases. - - Tested on x86_64-linux. - - gdb/testsuite/ChangeLog: - - 2021-07-13 Tom de Vries - - * gdb.base/options.exp: Skip tui-related tests when tui is not - supported. - * gdb.python/tui-window-disabled.exp: Same. - * gdb.python/tui-window.exp: Same. - -2021-07-14 GDB Administrator - - Automatic date update in version.in - -2021-07-13 Lancelot SIX - - Use /bin/sh as shebang in gdb/make-init-c - While testing the NixOS[1] packaging for gdb-11.0.90.tar.xz, I got the - following error: - - [...] - CXX aarch32-tdep.o - CXX gdb.o - GEN init.c - /nix/store/26a78ync552m8j4sbjavhvkmnqir8c9y-bash-4.4-p23/bin/bash: ./make-init-c: /usr/bin/env: bad interpreter: No such file or directory - make[2]: *** [Makefile:1866: stamp-init] Error 126 - make[2]: *** Waiting for unfinished jobs.... - make[2]: Leaving directory '/build/gdb-11.0.90/gdb' - make[1]: *** [Makefile:9814: all-gdb] Error 2 - make[1]: Leaving directory '/build/gdb-11.0.90' - make: *** [Makefile:903: all] Error 2 - builder for '/nix/store/xs8my3rrc3l4kdlbpx0azh6q0v0jxphr-gdb-gdb-11.0.90.drv' failed with exit code 2 - error: build of '/nix/store/xs8my3rrc3l4kdlbpx0azh6q0v0jxphr-gdb-gdb-11.0.90.drv' failed - - In the nix build environment, /usr/bin/env is not present, only /bin/sh - is. This patch makes sure that gdb/make-init-c uses '/bin/sh' as - interpreter as this is the only one available on this platform. - - I do not think this change will cause regressions on any other - configuration. - - [1] https://nixos.org/ - - gdb/Changelog - - * make-init-c: Use /bin/sh as shebang. - -2021-07-13 John Baldwin - - arm-fbsd-nat: Use fetch_register_set and store_register_set. - - aarch64-fbsd-nat: Use fetch_register_set and store_register_set. - - riscv-fbsd-nat: Use fetch_register_set and store_register_set. - - fbsd-nat: Add helper functions to fetch and store register sets. - In particular, this supports register sets described by a regcache_map - which are fetched and stored with dedicated ptrace operations. These - functions are intended to be used in architecture-specific - fetch_registers and store_registers target methods. - - Add regcache_map_supplies helper routine. - This helper can be used in the fetch_registers and store_registers - target methods to determine if a register set includes a specific - register. - -2021-07-13 Pedro Alves - - Avoid letting exceptions escape gdb_bfd_iovec_fileio_close (PR gdb/28080) - Before PR gdb/28080 was fixed by the previous patch, GDB was crashing - like this: - - (gdb) detach - Detaching from program: target:/any/program, process 3671843 - Detaching from process 3671843 - Ending remote debugging. - [Inferior 1 (process 3671843) detached] - In main - terminate called after throwing an instance of 'gdb_exception_error' - Aborted (core dumped) - - Here's the exception above being thrown: - - (top-gdb) bt - #0 throw_error (error=TARGET_CLOSE_ERROR, fmt=0x555556035588 "Remote connection closed") at src/gdbsupport/common-exceptions.cc:222 - #1 0x0000555555bbaa46 in remote_target::readchar (this=0x555556a11040, timeout=10000) at src/gdb/remote.c:9440 - #2 0x0000555555bbb9e5 in remote_target::getpkt_or_notif_sane_1 (this=0x555556a11040, buf=0x555556a11058, forever=0, expecting_notif=0, is_notif=0x0) at src/gdb/remote.c:9928 - #3 0x0000555555bbbda9 in remote_target::getpkt_sane (this=0x555556a11040, buf=0x555556a11058, forever=0) at src/gdb/remote.c:10030 - #4 0x0000555555bc0e75 in remote_target::remote_hostio_send_command (this=0x555556a11040, command_bytes=13, which_packet=14, remote_errno=0x7fffffffcfd0, attachment=0x0, attachment_len=0x0) at src/gdb/remote.c:12137 - #5 0x0000555555bc1b6c in remote_target::remote_hostio_close (this=0x555556a11040, fd=8, remote_errno=0x7fffffffcfd0) at src/gdb/remote.c:12455 - #6 0x0000555555bc1bb4 in remote_target::fileio_close (During symbol reading: .debug_line address at offset 0x64f417 is 0 [in module build/gdb/gdb] - this=0x555556a11040, fd=8, remote_errno=0x7fffffffcfd0) at src/gdb/remote.c:12462 - #7 0x0000555555c9274c in target_fileio_close (fd=3, target_errno=0x7fffffffcfd0) at src/gdb/target.c:3365 - #8 0x000055555595a19d in gdb_bfd_iovec_fileio_close (abfd=0x555556b9f8a0, stream=0x555556b11530) at src/gdb/gdb_bfd.c:439 - #9 0x0000555555e09e3f in opncls_bclose (abfd=0x555556b9f8a0) at src/bfd/opncls.c:599 - #10 0x0000555555e0a2c7 in bfd_close_all_done (abfd=0x555556b9f8a0) at src/bfd/opncls.c:847 - #11 0x0000555555e0a27a in bfd_close (abfd=0x555556b9f8a0) at src/bfd/opncls.c:814 - #12 0x000055555595a9d3 in gdb_bfd_close_or_warn (abfd=0x555556b9f8a0) at src/gdb/gdb_bfd.c:626 - #13 0x000055555595ad29 in gdb_bfd_unref (abfd=0x555556b9f8a0) at src/gdb/gdb_bfd.c:715 - #14 0x0000555555ae4730 in objfile::~objfile (this=0x555556515540, __in_chrg=) at src/gdb/objfiles.c:573 - #15 0x0000555555ae955a in std::_Sp_counted_ptr::_M_dispose (this=0x555556c20db0) at /usr/include/c++/9/bits/shared_ptr_base.h:377 - #16 0x000055555572b7c8 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release (this=0x555556c20db0) at /usr/include/c++/9/bits/shared_ptr_base.h:155 - #17 0x00005555557263c3 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count (this=0x555556bf0588, __in_chrg=) at /usr/include/c++/9/bits/shared_ptr_base.h:730 - #18 0x0000555555ae745e in std::__shared_ptr::~__shared_ptr (this=0x555556bf0580, __in_chrg=) at /usr/include/c++/9/bits/shared_ptr_base.h:1169 - #19 0x0000555555ae747e in std::shared_ptr::~shared_ptr (this=0x555556bf0580, __in_chrg=) at /usr/include/c++/9/bits/shared_ptr.h:103 - #20 0x0000555555b1c1dc in __gnu_cxx::new_allocator > >::destroy > (this=0x5555564cdd60, __p=0x555556bf0580) at /usr/include/c++/9/ext/new_allocator.h:153 - #21 0x0000555555b1bb1d in std::allocator_traits > > >::destroy > (__a=..., __p=0x555556bf0580) at /usr/include/c++/9/bits/alloc_traits.h:497 - #22 0x0000555555b1b73e in std::__cxx11::list, std::allocator > >::_M_erase (this=0x5555564cdd60, __position=std::shared_ptr (expired, weak count 1) = {get() = 0x555556515540}) at /usr/include/c++/9/bits/stl_list.h:1921 - #23 0x0000555555b1afeb in std::__cxx11::list, std::allocator > >::erase (this=0x5555564cdd60, __position=std::shared_ptr (expired, weak count 1) = {get() = 0x555556515540}) at /usr/include/c++/9/bits/list.tcc:158 - #24 0x0000555555b19576 in program_space::remove_objfile (this=0x5555564cdd20, objfile=0x555556515540) at src/gdb/progspace.c:210 - #25 0x0000555555ae4502 in objfile::unlink (this=0x555556515540) at src/gdb/objfiles.c:487 - #26 0x0000555555ae5a12 in objfile_purge_solibs () at src/gdb/objfiles.c:875 - #27 0x0000555555c09686 in no_shared_libraries (ignored=0x0, from_tty=1) at src/gdb/solib.c:1236 - #28 0x00005555559e3f5f in detach_command (args=0x0, from_tty=1) at src/gdb/infcmd.c:2769 - - Note frame #14: - - #14 0x0000555555ae4730 in objfile::~objfile (this=0x555556515540, __in_chrg=) at src/gdb/objfiles.c:573 - - That's a dtor, thus noexcept. That's the reason for the - std::terminate. - - The previous patch fixed things such that the exception above isn't - thrown anymore. However, it's possible that e.g., the remote - connection drops just while a user types "nosharedlibrary", or some - other reason that leads to objfile::~objfile, and then we end up the - same std::terminate problem. - - Also notice that frames #9-#11 are BFD frames: - - #9 0x0000555555e09e3f in opncls_bclose (abfd=0x555556bc27e0) at src/bfd/opncls.c:599 - #10 0x0000555555e0a2c7 in bfd_close_all_done (abfd=0x555556bc27e0) at src/bfd/opncls.c:847 - #11 0x0000555555e0a27a in bfd_close (abfd=0x555556bc27e0) at src/bfd/opncls.c:814 - - BFD is written in C and thus throwing exceptions over such frames may - either not clean up properly, or, may abort if bfd is not compiled - with -fasynchronous-unwind-tables (x86-64 defaults that on, but not - all GCC ports do). - - Thus frame #8 seems like a good place to swallow exceptions. More so - since in this spot we already ignore target_fileio_close return - errors. That's what this commit does. Without the previous fix, we'd - see: - - (gdb) detach - Detaching from program: target:/any/program, process 2197701 - Ending remote debugging. - [Inferior 1 (process 2197701) detached] - warning: cannot close "target:/lib64/ld-linux-x86-64.so.2": Remote connection closed - - Note it prints a warning, which would still be a regression compared - to GDB 10, if it weren't for the previous fix. - - gdb/ChangeLog: - yyyy-mm-dd Pedro Alves - - PR gdb/28080 - * gdb_bfd.c (gdb_bfd_close_warning): New. - (gdb_bfd_iovec_fileio_close): Wrap target_fileio_close in - try/catch and print warning on exception. - (gdb_bfd_close_or_warn): Use gdb_bfd_close_warning. - - Change-Id: Ic7a26ddba0a4444e3377b0e7c1c89934a84545d7 - -2021-07-13 Pedro Alves - - Fix detach with target remote (PR gdb/28080) - Commit 408f66864a1a823591b26420410c982174c239a2 ("detach in all-stop - with threads running") regressed "detach" with "target remote": - - (gdb) detach - Detaching from program: target:/any/program, process 3671843 - Detaching from process 3671843 - Ending remote debugging. - [Inferior 1 (process 3671843) detached] - In main - terminate called after throwing an instance of 'gdb_exception_error' - Aborted (core dumped) - - Here's the exception above being thrown: - - (top-gdb) bt - #0 throw_error (error=TARGET_CLOSE_ERROR, fmt=0x555556035588 "Remote connection closed") at src/gdbsupport/common-exceptions.cc:222 - #1 0x0000555555bbaa46 in remote_target::readchar (this=0x555556a11040, timeout=10000) at src/gdb/remote.c:9440 - #2 0x0000555555bbb9e5 in remote_target::getpkt_or_notif_sane_1 (this=0x555556a11040, buf=0x555556a11058, forever=0, expecting_notif=0, is_notif=0x0) at src/gdb/remote.c:9928 - #3 0x0000555555bbbda9 in remote_target::getpkt_sane (this=0x555556a11040, buf=0x555556a11058, forever=0) at src/gdb/remote.c:10030 - #4 0x0000555555bc0e75 in remote_target::remote_hostio_send_command (this=0x555556a11040, command_bytes=13, which_packet=14, remote_errno=0x7fffffffcfd0, attachment=0x0, attachment_len=0x0) at src/gdb/remote.c:12137 - #5 0x0000555555bc1b6c in remote_target::remote_hostio_close (this=0x555556a11040, fd=8, remote_errno=0x7fffffffcfd0) at src/gdb/remote.c:12455 - #6 0x0000555555bc1bb4 in remote_target::fileio_close (During symbol reading: .debug_line address at offset 0x64f417 is 0 [in module build/gdb/gdb] - this=0x555556a11040, fd=8, remote_errno=0x7fffffffcfd0) at src/gdb/remote.c:12462 - #7 0x0000555555c9274c in target_fileio_close (fd=3, target_errno=0x7fffffffcfd0) at src/gdb/target.c:3365 - #8 0x000055555595a19d in gdb_bfd_iovec_fileio_close (abfd=0x555556b9f8a0, stream=0x555556b11530) at src/gdb/gdb_bfd.c:439 - #9 0x0000555555e09e3f in opncls_bclose (abfd=0x555556b9f8a0) at src/bfd/opncls.c:599 - #10 0x0000555555e0a2c7 in bfd_close_all_done (abfd=0x555556b9f8a0) at src/bfd/opncls.c:847 - #11 0x0000555555e0a27a in bfd_close (abfd=0x555556b9f8a0) at src/bfd/opncls.c:814 - #12 0x000055555595a9d3 in gdb_bfd_close_or_warn (abfd=0x555556b9f8a0) at src/gdb/gdb_bfd.c:626 - #13 0x000055555595ad29 in gdb_bfd_unref (abfd=0x555556b9f8a0) at src/gdb/gdb_bfd.c:715 - #14 0x0000555555ae4730 in objfile::~objfile (this=0x555556515540, __in_chrg=) at src/gdb/objfiles.c:573 - #15 0x0000555555ae955a in std::_Sp_counted_ptr::_M_dispose (this=0x555556c20db0) at /usr/include/c++/9/bits/shared_ptr_base.h:377 - #16 0x000055555572b7c8 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release (this=0x555556c20db0) at /usr/include/c++/9/bits/shared_ptr_base.h:155 - #17 0x00005555557263c3 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count (this=0x555556bf0588, __in_chrg=) at /usr/include/c++/9/bits/shared_ptr_base.h:730 - #18 0x0000555555ae745e in std::__shared_ptr::~__shared_ptr (this=0x555556bf0580, __in_chrg=) at /usr/include/c++/9/bits/shared_ptr_base.h:1169 - #19 0x0000555555ae747e in std::shared_ptr::~shared_ptr (this=0x555556bf0580, __in_chrg=) at /usr/include/c++/9/bits/shared_ptr.h:103 - #20 0x0000555555b1c1dc in __gnu_cxx::new_allocator > >::destroy > (this=0x5555564cdd60, __p=0x555556bf0580) at /usr/include/c++/9/ext/new_allocator.h:153 - #21 0x0000555555b1bb1d in std::allocator_traits > > >::destroy > (__a=..., __p=0x555556bf0580) at /usr/include/c++/9/bits/alloc_traits.h:497 - #22 0x0000555555b1b73e in std::__cxx11::list, std::allocator > >::_M_erase (this=0x5555564cdd60, __position=std::shared_ptr (expired, weak count 1) = {get() = 0x555556515540}) at /usr/include/c++/9/bits/stl_list.h:1921 - #23 0x0000555555b1afeb in std::__cxx11::list, std::allocator > >::erase (this=0x5555564cdd60, __position=std::shared_ptr (expired, weak count 1) = {get() = 0x555556515540}) at /usr/include/c++/9/bits/list.tcc:158 - #24 0x0000555555b19576 in program_space::remove_objfile (this=0x5555564cdd20, objfile=0x555556515540) at src/gdb/progspace.c:210 - #25 0x0000555555ae4502 in objfile::unlink (this=0x555556515540) at src/gdb/objfiles.c:487 - #26 0x0000555555ae5a12 in objfile_purge_solibs () at src/gdb/objfiles.c:875 - #27 0x0000555555c09686 in no_shared_libraries (ignored=0x0, from_tty=1) at src/gdb/solib.c:1236 - #28 0x00005555559e3f5f in detach_command (args=0x0, from_tty=1) at src/gdb/infcmd.c:2769 - - So frame #28 already detached the remote process, and then we're - purging the shared libraries. GDB had opened remote shared libraries - via the target: sysroot, so it tries closing them. GDBserver is - tearing down already, so remote communication breaks down and we close - the remote target and throw TARGET_CLOSE_ERROR. - - Note frame #14: - - #14 0x0000555555ae4730 in objfile::~objfile (this=0x555556515540, __in_chrg=) at src/gdb/objfiles.c:573 - - That's a dtor, thus noexcept. That's the reason for the - std::terminate. - - Stepping back a bit, why do we still have open remote files if we've - managed to detach already, and, we're debugging with "target remote"? - The reason is that commit 408f66864a1a823591b26420410c982174c239a2 - makes detach_command hold a reference to the target, so the remote - target won't be finally closed until frame #28 returns. It's closing - the target that invalidates target file I/O handles. - - This commit fixes the issue by not relying on target_close to - invalidate the target file I/O handles, instead invalidate them - immediately in remote_unpush_target. So when GDB purges the solibs, - and we end up in target_fileio_close (frame #7 above), there's nothing - to do, and we don't try to talk with the remote target anymore. - - The regression isn't seen when testing with - --target_board=native-gdbserver, because that does "set sysroot" to - disable the "target:" sysroot, for test run speed reasons. So this - commit adds a testcase that explicitly tests detach with "set sysroot - target:". - - gdb/ChangeLog: - yyyy-mm-dd Pedro Alves - - PR gdb/28080 - * remote.c (remote_unpush_target): Invalidate file I/O target - handles. - * target.c (fileio_handles_invalidate_target): Make extern. - * target.h (fileio_handles_invalidate_target): Declare. - - gdb/testsuite/ChangeLog: - yyyy-mm-dd Pedro Alves - - PR gdb/28080 - * gdb.base/detach-sysroot-target.exp: New. - * gdb.base/detach-sysroot-target.c: New. - - Reported-By: Jonah Graham - - Change-Id: I851234910172f42a1b30e731161376c344d2727d - -2021-07-13 Tom de Vries - - [gdb/testsuite] Fix check-libthread-db.exp FAILs with glibc 2.33 - When running test-case gdb.threads/check-libthread-db.exp on openSUSE - Tumbleweed with glibc 2.33, I get: - ... - (gdb) maint check libthread-db^M - Running libthread_db integrity checks:^M - Got thread 0x7ffff7c79b80 => 9354 => 0x7ffff7c79b80; errno = 0 ... OK^M - libthread_db integrity checks passed.^M - (gdb) FAIL: gdb.threads/check-libthread-db.exp: user-initiated check: \ - libpthread.so not initialized (pattern 2) - ... - - The test-case expects instead: - ... - Got thread 0x0 => 9354 => 0x0 ... OK^M - ... - which is what I get on openSUSE Leap 15.2 with glibc 2.26, and what is - described in the test-case like this: - ... - # libthread_db should fake a single thread with th_unique == NULL. - ... - - Using a breakpoint on check_thread_db_callback we can compare the two - scenarios, and find that in the latter case we hit this code in glibc function - iterate_thread_list in nptl_db/td_ta_thr_iter.c: - ... - if (next == 0 && fake_empty) - { - /* __pthread_initialize_minimal has not run. There is just the main - thread to return. We cannot rely on its thread register. They - sometimes contain garbage that would confuse us, left by the - kernel at exec. So if it looks like initialization is incomplete, - we only fake a special descriptor for the initial thread. */ - td_thrhandle_t th = { ta, 0 }; - return callback (&th, cbdata_p) != 0 ? TD_DBERR : TD_OK; - } - ... - while in the former case we don't because this preceding statement doesn't - result in next == 0: - ... - err = DB_GET_FIELD (next, ta, head, list_t, next, 0); - ... - - Note that the comment mentions __pthread_initialize_minimal, but in both cases - it has already run before we hit the callback, so it's possible the comment is - no longer accurate. - - The change in behaviour bisect to glibc commit 1daccf403b "nptl: Move stack - list variables into _rtld_global", which moves the initialization of stack - list variables such as __stack_user to an earlier moment, which explains well - enough the observed difference. - - Fix this by updating the regexp patterns to agree with what libthread-db is - telling us. - - Tested on x86_64-linux, both with glibc 2.33 and 2.26. - - gdb/testsuite/ChangeLog: - - 2021-07-07 Tom de Vries - - PR testsuite/27690 - * gdb.threads/check-libthread-db.exp: Update patterns for glibc 2.33. - -2021-07-13 Felix Willgerodt - - gdb, dwarf: Don't follow the parent of a subprogram to get a prefix. - During prefix resolution, if the parent is a subprogram, there is no need - to go to the parent of the subprogram. The DIE will be local. - - For a program like: - ~~~ - class F1 - { - public: - int a; - int - vvv () - { - class F2 - { - int f; - }; - F2 abcd; - return 1; - } - }; - ~~~ - - The class F2 should not be seen as a member of F1. - - Before: - ~~~ - (gdb) ptype abcd - type = class F1::F2 { - private: - int f; - } - ~~~ - - After: - ~~~ - (gdb) ptype abcd - type = class F2 { - private: - int f; - } - ~~~ - - gdb/ChangeLog: - 2021-06-23 Felix Willgerodt - - * dwarf2/read.c (determine_prefix): Return an empty prefix if the - parent is a subprogram. - - gdb/testsuite/ChangeLog: - 2021-06-23 Felix Willgerodt - - * gdb.cp/nested-class-func-class.cc: New file. - * gdb.cp/nested-class-func-class.exp: New file. - -2021-07-13 Simon Marchi - - gdb: disable commit-resumed on -exec-interrupt --thread-group - As reported in PR gdb/28077, we hit an internal error when using - -exec-interrupt with --thread-group: - - info threads - &"info threads\n" - ~" Id Target Id Frame \n" - ~"* 1 process 403312 \"loop\" (running)\n" - ^done - (gdb) - -exec-interrupt --thread-group i1 - ~"/home/simark/src/binutils-gdb/gdb/target.c:3768: internal-error: void target_stop(ptid_t): Assertion `!proc_target->commit_resumed_state' failed.\nA problem internal to GDB has been detected,\nfurther debugging may prove unreliable.\nQuit this debugging session? (y or n) " - - This is because this code path never disables commit-resumed (a - requirement for calling target_stop, as documented in - process_stratum_target::»commit_resumed_state) before calling - target_stop. - - The other 3 code paths in mi_cmd_exec_interrupt use interrupt_target_1, - which does it. But the --thread-group code path uses its own thing - which doesn't do it. Fix this by adding a scoped_disable_commit_resumed - in this code path. - - Calling -exec-interrupt with --thread-group is apparently not tested at - the moment (which is why this bug could creep in). Add a new test for - that. The test runs two inferiors and tries to interrupt them with - "-exec-interrupt --thread-group X". - - This will need to be merged in the gdb-11-branch, so here are ChangeLog - entries: - - gdb/ChangeLog: - - * mi/mi-main.c (mi_cmd_exec_interrupt): Use - scoped_disable_commit_resumed in the --thread-group case. - - gdb/testsuite/ChangeLog: - - * gdb.mi/interrupt-thread-group.c: New. - * gdb.mi/interrupt-thread-group.exp: New. - - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28077 - Change-Id: I615efefcbcaf2c15d47caf5e4b9d82854b2a2fcb - -2021-07-13 Nelson Chu - - RISC-V: Enable elf attributes when default configure option isn't set. - Since gcc commit, 3c70b3ca1ef58f302bf8c16d9e7c7bb8626408bf, we now enable - elf attributes for all riscv targets by default in gcc. Therefore, I - think binutils should have the same behavior, in case users are writing - assembly files. If --enable-default-riscv-attribute isn't set, then we - enable the elf attributes for all riscv targets by default. - - ChangLog: - - binutils/ - - * testsuite/binutils-all/readelf.s: Add comments for riscv. - * testsuite/binutils-all/readelf.s-64: Likewise. - * testsuite/binutils-all/readelf.s-64-unused: Likewise. - * testsuite/binutils-all/readelf.ss: Likewise. - * testsuite/binutils-all/readelf.ss-64: Likewise. - * testsuite/binutils-all/readelf.ss-64-unused: Likewise. - - gas/ - - * configure.ac: If --enable-default-riscv-attribute isn't set, - then we enable the elf attributes for all riscv targets by - default. - * configure: Regenerated. - -2021-07-13 John Ericson - - Fix some dangling references to `netbsd-tdep` - These files were renamed in 1b71cfcfdc3e13a655fefa6566b5564cec044c10, - but evidentially a few dangling references were left behind. This causes - builds to fail: - - $ ./configure --target i686-netbsdelf - $ make - make: *** No rule to make target 'nbsd-tdep.c', needed by 'nbsd-tdep.o'. Stop. - -2021-07-13 Simon Marchi - - gdb: optimize all_matching_threads_iterator - all_matching_threads_iterator is used extensively in some pretty fast - paths, often under the all_non_exited_threads function. - - If a filter target and thread-specific ptid are given, it iterates on - all threads of all inferiors of that target, to ultimately yield exactly - on thread. And this happens quite often, which means we unnecessarily - spend time iterating on threads to find the one we are looking for. The - same thing happens if an inferior-specific ptid is given, although there - the iterator yields all the threads of that inferior. - - In those cases, the callers of all_non_exited_threads could have - different behaviors depending on the kind of ptid, to avoid this - inefficiency, but that would be very tedious. Using - all_non_exited_threads has the advantage that one simple implementation - can work seamlessly on multiple threads or on one specific thread, just - by playing with the ptid. - - Instead, optimize all_matching_threads_iterator directly to detect these - different cases and limiting what we iterate on to just what we need. - - - if filter_ptid is minus_one_ptid, do as we do now: filter inferiors - based on filter_target, iterate on all of the matching inferiors' - threads - - if filter_ptid is a pid-only ptid (then a filter_target must - necessarily be given), look up that inferior and iterate on all its - threads - - otherwise, filter_ptid is a thread-specific ptid, so look up that - specific thread and "iterate" only on it - - For the last case, what was an iteration on all threads of the filter - target now becomes a call to find_thread_ptid, which is quite efficient - now thanks to inferior::ptid_thread_map. - - gdb/ChangeLog: - - * thread-iter.h (class all_matching_threads_iterator) - : Use default. - : New. - : Initialize. - : Remove. - * thread-iter.c (all_matching_threads_iterator::m_inf_matches): - Don't filter on m_filter_ptid. - (all_matching_threads_iterator::all_matching_threads_iterator): - Choose path based on filter_ptid (all threads, all threads of - inferior, single thread). - (all_matching_threads_iterator::advance): Likewise. - - Change-Id: Ic6a19845f5f760fa1b8eac8145793c0ff431bbc9 - -2021-07-13 Simon Marchi - - gdb: maintain ptid -> thread map, optimize find_thread_ptid - When debugging a large number of threads (thousands), looking up a - thread by ptid_t using the inferior::thread_list linked list can add up. - - Add inferior::thread_map, an std::unordered_map indexed by ptid_t, and - change the find_thread_ptid function to look up a thread using - std::unordered_map::find, instead of iterating on all of the - inferior's threads. This should make it faster to look up a thread - from its ptid. - - Change-Id: I3a8da0a839e18dee5bb98b8b7dbeb7f3dfa8ae1c - Co-Authored-By: Pedro Alves - -2021-07-13 Simon Marchi - - gdb: optimize selection of resumed thread with pending event - Consider a case where many threads (thousands) keep hitting a breakpoint - whose condition evaluates to false. random_pending_event_thread is - responsible for selecting a thread from an inferior among all that are - resumed with a pending wait status. It is currently implemented by - walking the inferior's thread list twice: once to count the number of - candidates and once to select a random one. - - Since we now maintain a per target list of resumed threads with pending - event, we can implement this more efficiently by walking that list and - selecting the first thread that matches the criteria - (random_pending_event_thread looks for an thread from a specific - inferior, and possibly a filter ptid). It will be faster especially in - the common case where there isn't any resumed thread with pending - event. Currently, we have to iterate the thread list to figure this - out. With this patch, the list of resumed threads with pending event - will be empty, so it's quick to figure out. - - The random selection is kept, but is moved to - process_stratum_target::random_resumed_with_pending_wait_status. The - same technique is used: do a first pass to count the number of - candidates, and do a second pass to select a random one. But given that - the list of resumed threads with pending wait statuses will generally be - short, or at least shorter than the full thread list, it should be - quicker. - - Note that this isn't completely true, in case there are multiple - inferiors on the same target. Imagine that inferior A has 10k resumed - threads with pending wait statuses, and random_pending_event_thread is - called with inferior B. We'll need to go through the list that contains - inferior A's threads to realize that inferior B has no resumed threads - with pending wait status. But I think that this is a corner / - pathological case. And a possible fix for this situation would be to - make random_pending_event_thread work per-process-target, rather than - per-inferior. - - Change-Id: I1b71d01beaa500a148b5b9797745103e13917325 - -2021-07-13 Simon Marchi - - gdb: optimize check for resumed threads with pending wait status in maybe_set_commit_resumed_all_targets - Consider a test case where many threads (thousands) keep hitting a - breakpoint whose condition evaluates to false. - maybe_set_commit_resumed_all_targets is called at each handled event, - when the scoped_disable_commit_resumed object in fetch_inferior_event is - reset_and_commit-ed. One particularly expensive check in there is - whether the target has at least one resumed thread with a pending wait - status (in which case, we don't want to commit the resumed threads, as - we want to consume this status first). It is currently implemented as - walking all threads of the target. - - Since we now maintain a per-target list of resumed threads with pending - status, we can do this check efficiently, by checking whether that list - is empty or not. - - Add the process_stratum_target::has_resumed_with_pending_wait_status - method for this, and use it in maybe_set_commit_resumed_all_targets. - - Change-Id: Ia1595baa1b358338f94fc3cb3af7f27092dad5b6 - -2021-07-13 Simon Marchi - - gdb: maintain per-process-target list of resumed threads with pending wait status - Looking up threads that are both resumed and have a pending wait - status to report is something that we do quite often in the fast path - and is expensive if there are many threads, since it currently requires - walking whole thread lists. - - The first instance is in maybe_set_commit_resumed_all_targets. This is - called after handling each event in fetch_inferior_event, to see if we - should ask targets to commit their resumed threads or not. If at least - one thread is resumed but has a pending wait status, we don't ask the - targets to commit their resumed threads, because we want to consume and - handle the pending wait status first. - - The second instance is in random_pending_event_thread, where we want to - select a random thread among all those that are resumed and have a - pending wait status. This is called every time we try to consume - events, to see if there are any pending events that we we want to - consume, before asking the targets for more events. - - To allow optimizing these cases, maintain a per-process-target list of - threads that are resumed and have a pending wait status. - - In maybe_set_commit_resumed_all_targets, we'll be able to check in O(1) - if there are any such threads simply by checking whether the list is - empty. - - In random_pending_event_thread, we'll be able to use that list, which - will be quicker than iterating the list of threads, especially when - there are no resumed with pending wait status threads. - - About implementation details: using the new setters on class - thread_info, it's relatively easy to maintain that list. Any time the - "resumed" or "pending wait status" property is changed, we check whether - that should cause the thread to be added or removed from the list. - - In set_thread_exited, we try to remove the thread from the list, because - keeping an exited thread in that list would make no sense (especially if - the thread is freed). My first implementation assumed that a process - stratum target was always present when set_thread_exited is called. - That's however, not the case: in some cases, targets unpush themselves - from an inferior and then call "exit_inferior", which exits all the - threads. If the target is unpushed before set_thread_exited is called - on the threads, it means we could mistakenly leave some threads in the - list. I tried to see how hard it would be to make it such that targets - have to exit all threads before unpushing themselves from the inferior - (that would seem logical to me, we don't want threads belonging to an - inferior that has no process target). That seemed quite difficult and - not worth the time at the moment. Instead, I changed - inferior::unpush_target to remove all threads of that inferior from the - list. - - As of this patch, the list is not used, this is done in the subsequent - patches. - - The debug messages in process-stratum-target.c need to print some ptids. - However, they can't use target_pid_to_str to print them without - introducing a dependency on the current inferior (the current inferior - is used to get the current target stack). For debug messages, I find it - clearer to print the spelled out ptid anyway (the pid, lwp and tid - values). Add a ptid_t::to_string method that returns a string - representation of the ptid that is meant for debug messages, a bit like - we already have frame_id::to_string. - - Change-Id: Iad8f93db2d13984dd5aa5867db940ed1169dbb67 - -2021-07-13 Simon Marchi - - gdb: make thread_info::suspend private, add getters / setters - A following patch will want to take some action when a pending wait - status is set on or removed from a thread. Add a getter and a setter on - thread_info for the pending waitstatus, so that we can add some code in - the setter later. - - The thing is, the pending wait status field is in the - thread_suspend_state, along with other fields that we need to backup - before and restore after the thread does an inferior function call. - Therefore, make the thread_suspend_state member private - (thread_info::suspend becomes thread_info::m_suspend), and add getters / - setters for all of its fields: - - - pending wait status - - stop signal - - stop reason - - stop pc - - For the pending wait status, add the additional has_pending_waitstatus - and clear_pending_waitstatus methods. - - I think this makes the thread_info interface a bit nicer, because we - now access the fields as: - - thread->stop_pc () - - rather than - - thread->suspend.stop_pc - - The stop_pc field being in the `suspend` structure is an implementation - detail of thread_info that callers don't need to be aware of. - - For the backup / restore of the thread_suspend_state structure, add - save_suspend_to and restore_suspend_from methods. You might wonder why - `save_suspend_to`, as opposed to a simple getter like - - thread_suspend_state &suspend (); - - I want to make it clear that this is to be used only for backing up and - restoring the suspend state, _not_ to access fields like: - - thread->suspend ()->stop_pc - - Adding some getters / setters allows adding some assertions. I find - that this helps understand how things are supposed to work. Add: - - - When getting the pending status (pending_waitstatus method), ensure - that there is a pending status. - - When setting a pending status (set_pending_waitstatus method), ensure - there is no pending status. - - There is one case I found where this wasn't true - in - remote_target::process_initial_stop_replies - which needed adjustments - to respect that contract. I think it's because - process_initial_stop_replies is kind of (ab)using the - thread_info::suspend::waitstatus to store some statuses temporarily, for - its internal use (statuses it doesn't intent on leaving pending). - - process_initial_stop_replies pulls out stop replies received during the - initial connection using target_wait. It always stores the received - event in `evthread->suspend.waitstatus`. But it only sets - waitstatus_pending_p, if it deems the event interesting enough to leave - pending, to be reported to the core: - - if (ws.kind != TARGET_WAITKIND_STOPPED - || ws.value.sig != GDB_SIGNAL_0) - evthread->suspend.waitstatus_pending_p = 1; - - It later uses this flag a bit below, to choose which thread to make the - "selected" one: - - if (selected == NULL - && thread->suspend.waitstatus_pending_p) - selected = thread; - - And ultimately that's used if the user-visible mode is all-stop, so that - we print the stop for that interesting thread: - - /* In all-stop, we only print the status of one thread, and leave - others with their status pending. */ - if (!non_stop) - { - thread_info *thread = selected; - if (thread == NULL) - thread = lowest_stopped; - if (thread == NULL) - thread = first; - - print_one_stopped_thread (thread); - } - - But in any case (all-stop or non-stop), print_one_stopped_thread needs - to access the waitstatus value of these threads that don't have a - pending waitstatus (those that had TARGET_WAITKIND_STOPPED + - GDB_SIGNAL_0). This doesn't work with the assertions I've - put. - - So, change the code to only set the thread's wait status if it is an - interesting one that we are going to leave pending. If the thread - stopped due to a non-interesting event (TARGET_WAITKIND_STOPPED + - GDB_SIGNAL_0), don't store it. Adjust print_one_stopped_thread to - understand that if a thread has no pending waitstatus, it's because it - stopped with TARGET_WAITKIND_STOPPED + GDB_SIGNAL_0. - - The call to set_last_target_status also uses the pending waitstatus. - However, given that the pending waitstatus for the thread may have been - cleared in print_one_stopped_thread (and that there might not even be a - pending waitstatus in the first place, as explained above), it is no - longer possible to do it at this point. To fix that, move the call to - set_last_target_status in print_one_stopped_thread. I think this will - preserve the existing behavior, because set_last_target_status is - currently using the current thread's wait status. And the current - thread is the last one for which print_one_stopped_thread is called. So - by calling set_last_target_status in print_one_stopped_thread, we'll get - the same result. set_last_target_status will possibly be called - multiple times, but only the last call will matter. It just means - possibly more calls to set_last_target_status, but those are cheap. - - Change-Id: Iedab9653238eaf8231abcf0baa20145acc8b77a7 - -2021-07-13 Simon Marchi - - gdb: add setter / getter for thread_info resumed state - A following patch will want to do things when a thread's resumed state - changes. Make the `resumed` field private (renamed to `m_resumed`) and - add a getter and a setter for it. The following patch in question will - therefore be able to add some code to the setter. - - Change-Id: I360c48cc55a036503174313261ce4e757d795319 - -2021-07-13 Simon Marchi - - gdb: use intrusive list for step-over chain - The threads that need a step-over are currently linked using an - hand-written intrusive doubly-linked list, so that seems a very good - candidate for intrusive_list, convert it. - - For this, we have a use case of appending a list to another one (in - start_step_over). Based on the std::list and Boost APIs, add a splice - method. However, only support splicing the other list at the end of the - `this` list, since that's all we need. - - Add explicit default assignment operators to - reference_to_pointer_iterator, which are otherwise implicitly deleted. - This is needed because to define thread_step_over_list_safe_iterator, we - wrap reference_to_pointer_iterator inside a basic_safe_iterator, and - basic_safe_iterator needs to be able to copy-assign the wrapped - iterator. The move-assignment operator is therefore not needed, only - the copy-assignment operator is. But for completeness, add both. - - Change-Id: I31b2ff67c7b78251314646b31887ef1dfebe510c - -2021-07-13 Pedro Alves - - gdb: make inferior_list use intrusive_list - Change inferior_list, the global list of inferiors, to use - intrusive_list. I think most other changes are somewhat obvious - fallouts from this change. - - There is a small change in behavior in scoped_mock_context. Before this - patch, constructing a scoped_mock_context would replace the whole - inferior list with only the new mock inferior. Tests using two - scoped_mock_contexts therefore needed to manually link the two inferiors - together, as the second scoped_mock_context would bump the first mock - inferior from the thread list. With this patch, a scoped_mock_context - adds its mock inferior to the inferior list on construction, and removes - it on destruction. This means that tests run with mock inferiors in the - inferior list in addition to any pre-existing inferiors (there is always - at least one). There is no possible pid clash problem, since each - scoped mock inferior uses its own process target, and pids are per - process target. - - Co-Authored-By: Simon Marchi - Change-Id: I7eb6a8f867d4dcf8b8cd2dcffd118f7270756018 - -2021-07-13 Pedro Alves - - gdb: introduce intrusive_list, make thread_info use it - GDB currently has several objects that are put in a singly linked list, - by having the object's type have a "next" pointer directly. For - example, struct thread_info and struct inferior. Because these are - simply-linked lists, and we don't keep track of a "tail" pointer, when - we want to append a new element on the list, we need to walk the whole - list to find the current tail. It would be nice to get rid of that - walk. Removing elements from such lists also requires a walk, to find - the "previous" position relative to the element being removed. To - eliminate the need for that walk, we could make those lists - doubly-linked, by adding a "prev" pointer alongside "next". It would be - nice to avoid the boilerplate associated with maintaining such a list - manually, though. That is what the new intrusive_list type addresses. - - With an intrusive list, it's also possible to move items out of the - list without destroying them, which is interesting in our case for - example for threads, when we exit them, but can't destroy them - immediately. We currently keep exited threads on the thread list, but - we could change that which would simplify some things. - - Note that with std::list, element removal is O(N). I.e., with - std::list, we need to walk the list to find the iterator pointing to - the position to remove. However, we could store a list iterator - inside the object as soon as we put the object in the list, to address - it, because std::list iterators are not invalidated when other - elements are added/removed. However, if you need to put the same - object in more than one list, then std::list doesn't work. - You need to instead use std::list, which is less efficient - for requiring extra memory allocations. For an example of an object - in multiple lists, see the step_over_next/step_over_prev fields in - thread_info: - - /* Step-over chain. A thread is in the step-over queue if these are - non-NULL. If only a single thread is in the chain, then these - fields point to self. */ - struct thread_info *step_over_prev = NULL; - struct thread_info *step_over_next = NULL; - - The new intrusive_list type gives us the advantages of an intrusive - linked list, while avoiding the boilerplate associated with manually - maintaining it. - - intrusive_list's API follows the standard container interface, and thus - std::list's interface. It is based the API of Boost's intrusive list, - here: - - https://www.boost.org/doc/libs/1_73_0/doc/html/boost/intrusive/list.html - - Our implementation is relatively simple, while Boost's is complicated - and intertwined due to a lot of customization options, which our version - doesn't have. - - The easiest way to use an intrusive_list is to make the list's element - type inherit from intrusive_node. This adds a prev/next pointers to - the element type. However, to support putting the same object in more - than one list, intrusive_list supports putting the "node" info as a - field member, so you can have more than one such nodes, one per list. - - As a first guinea pig, this patch makes the per-inferior thread list use - intrusive_list using the base class method. - - Unlike Boost's implementation, ours is not a circular list. An earlier - version of the patch was circular: the intrusive_list type included an - intrusive_list_node "head". In this design, a node contained pointers - to the previous and next nodes, not the previous and next elements. - This wasn't great for when debugging GDB with GDB, as it was difficult - to get from a pointer to the node to a pointer to the element. With the - design proposed in this patch, nodes contain pointers to the previous - and next elements, making it easy to traverse the list by hand and - inspect each element. - - The intrusive_list object contains pointers to the first and last - elements of the list. They are nullptr if the list is empty. - Each element's node contains a pointer to the previous and next - elements. The first element's previous pointer is nullptr and the last - element's next pointer is nullptr. Therefore, if there's a single - element in the list, both its previous and next pointers are nullptr. - To differentiate such an element from an element that is not linked into - a list, the previous and next pointers contain a special value (-1) when - the node is not linked. This is necessary to be able to reliably tell - if a given node is currently linked or not. - - A begin() iterator points to the first item in the list. An end() - iterator contains nullptr. This makes iteration until end naturally - work, as advancing past the last element will make the iterator contain - nullptr, making it equal to the end iterator. If the list is empty, - a begin() iterator will contain nullptr from the start, and therefore be - immediately equal to the end. - - Iterating on an intrusive_list yields references to objects (e.g. - `thread_info&`). The rest of GDB currently expects iterators and ranges - to yield pointers (e.g. `thread_info*`). To bridge the gap, add the - reference_to_pointer_iterator type. It is used to define - inf_threads_iterator. - - Add a Python pretty-printer, to help inspecting intrusive lists when - debugging GDB with GDB. Here's an example of the output: - - (top-gdb) p current_inferior_.m_obj.thread_list - $1 = intrusive list of thread_info = {0x61700002c000, 0x617000069080, 0x617000069400, 0x61700006d680, 0x61700006eb80} - - It's not possible with current master, but with this patch [1] that I - hope will be merged eventually, it's possible to index the list and - access the pretty-printed value's children: - - (top-gdb) p current_inferior_.m_obj.thread_list[1] - $2 = (thread_info *) 0x617000069080 - (top-gdb) p current_inferior_.m_obj.thread_list[1].ptid - $3 = { - m_pid = 406499, - m_lwp = 406503, - m_tid = 0 - } - - Even though iterating the list in C++ yields references, the Python - pretty-printer yields pointers. The reason for this is that the output - of printing the thread list above would be unreadable, IMO, if each - thread_info object was printed in-line, since they contain so much - information. I think it's more useful to print pointers, and let the - user drill down as needed. - - [1] https://sourceware.org/pipermail/gdb-patches/2021-April/178050.html - - Co-Authored-By: Simon Marchi - Change-Id: I3412a14dc77f25876d742dab8f44e0ba7c7586c0 - -2021-07-13 GDB Administrator - - Automatic date update in version.in - -2021-07-12 Tucker - - Add the SEC_ELF_OCTETS flag to debug sections created by the assembler. - PR 28054 - gas * config/obj-elf.c (obj_elf_change_section): Set the - SEF_ELF_OCTETS flag on debug sections. - -2021-07-12 Tom de Vries - - [gdb/testsuite] Fix gdb.btrace/tsx.exp on system with tsx disabled in microcode - Recently I started to see this fail with trunk: - ... - (gdb) record instruction-history^M - 1 0x00000000004004ab : call 0x4004b7 ^M - 2 0x00000000004004c6 : mov $0x1,%eax^M - 3 0x00000000004004cb : ret ^M - (gdb) FAIL: gdb.btrace/tsx.exp: speculation indication - ... - - This is due to an intel microcode update (1) that disables Intel TSX by default. - - Fix this by updating the pattern. - - Tested on x86_64-linux, with both gcc 7.5.0 and clang 12.0.1. - - [1] https://www.intel.com/content/www/us/en/support/articles/000059422/processors.html - - gdb/testsuite/ChangeLog: - - 2021-07-12 Tom de Vries - - PR testsuite/28057 - * gdb.btrace/tsx.exp: Add pattern for system with tsx disabled in - microcode. - -2021-07-12 Nick Clifton - - Updated French translation for the binutils sub-directory - - Fix a translation problem for the text generated by readelf at the start of a dump of a dynamic section. - PR 28072 - binutils * readelf.c (process_dynamic_section): Use ngettext to help with translation of header text. - -2021-07-12 Tom de Vries - - [gdb/testsuite] Fix gdb.mi/mi-info-sources.exp for extra debug info - When running test-case gdb.mi/mi-info-sources.exp, I run into: - ... - Running src/gdb/testsuite/gdb.mi/mi-info-sources.exp ... - ERROR: internal buffer is full. - ... - due to extra debug info from the shared libraries. - - Fix this by using "nosharedlibrary". - - Then I run into these FAILs: - ... - FAIL: gdb.mi/mi-info-sources.exp: debug_read=false: \ - -file-list-exec-source-files (unexpected output) - FAIL: gdb.mi/mi-info-sources.exp: debug_read=true: \ - -file-list-exec-source-files (unexpected output) - FAIL: gdb.mi/mi-info-sources.exp: debug_read=true: \ - -file-list-exec-source-files --group-by-objfile, look for \ - mi-info-sources.c (unexpected output) - FAIL: gdb.mi/mi-info-sources.exp: debug_read=true: \ - -file-list-exec-source-files --group-by-objfile, look for \ - mi-info-sources-base.c (unexpected output) - ... - due to openSUSE executables which have debug info for objects from sources - like sysdeps/x86_64/crtn.S. - - Fix these by updating the patterns, and adding "maint expand-symtabs" to - reliably get fully-read objfiles. - - Then I run into FAILs when using the readnow target board. Fix these by - skipping the relevant tests. - - Then I run into FAILs when using the cc-with-gnu-debuglink board. Fix these - by updating the patterns. - - Tested on x86_64-linux, with native, check-read1, readnow, cc-with-gdb-index, - cc-with-debug-names, cc-with-gnu-debuglink, cc-with-dwz, cc-with-dwz-m. - - gdb/testsuite/ChangeLog: - - 2021-07-05 Tom de Vries - - * lib/mi-support.exp (mi_readnow): New proc. - * gdb.mi/mi-info-sources.exp: Use nosharedlibrary. Update patterns. - Skip tests for readnow. Use "maint expand-symtabs". - -2021-07-12 Tankut Baris Aktemur - - testsuite: fix whitespace problems in gdb.mi/mi-break.exp - Replace leading 8-spaces with tab and remove trailing space in - gdb.mi/mi-break.exp. - -2021-07-12 GDB Administrator - - Automatic date update in version.in - -2021-07-11 GDB Administrator - - Automatic date update in version.in - -2021-07-10 Alan Modra - - Tidy commit 49910fd88dcd - Pointer range checking is UB if the values compared are outside the - underlying array elements (plus one). - - * dwarf2.c (read_address): Remove accidental commit. - (read_ranges): Compare offset rather than pointers. - -2021-07-10 Alan Modra - - PR28069, assertion fail in dwarf.c:display_discr_list - We shouldn't be asserting on anything to do with leb128 values, or - reporting file and line numbers when something unexpected happens. - leb128 data is of indeterminate length, perfect for fuzzer mayhem. - It would only make sense to assert or report dwarf.c/readelf.c source - lines if the code had already sized and sanity checked the leb128 - values. - - After removing the assertions, the testcase then gave: - - <37> DW_AT_discr_list : 5 byte block: 0 0 0 0 0 (label 0, label 0, label 0, label 0, - readelf: Warning: corrupt discr_list - unrecognized discriminant byte 0x5 - - <3d> DW_AT_encoding : 0 (void) - <3e> DW_AT_identifier_case: 0 (case_sensitive) - <3f> DW_AT_virtuality : 0 (none) - <40> DW_AT_decimal_sign: 5 (trailing separate) - - So the DW_AT_discr_list was showing more data than just the 5 byte - block. That happened due to "end" pointing a long way past the end of - block, and uvalue decrementing past zero on one of the leb128 bytes. - - PR 28069 - * dwarf.c (display_discr_list): Remove assertions. Delete "end" - parameter, use initial "data" pointer as the end. Formatting. - Don't count down bytes as they are read. - (read_and_display_attr_value): Adjust display_discr_list call. - (read_and_print_leb128): Don't pass __FILE__ and __LINE__ to - report_leb_status. - * dwarf.h (report_leb_status): Don't report file and line - numbers. Delete file and lnum parameters, - (READ_ULEB, READ_SLEB): Adjust. - -2021-07-10 GDB Administrator - - Automatic date update in version.in - -2021-07-09 H.J. Lu - - ld/NEWS: Clarify -z [no]indirect-extern-access - -z [no]indirect-extern-access are only for x86 ELF linker. - -2021-07-09 H.J. Lu - - elf: Limits 2 GNU_PROPERTY_1_NEEDED tests to Linux/x86 - Run property-1_needed-1b.d and property-1_needed-1c.d, which pass - -z [no]indirect-extern-access to linker, only run for Linux/x86 targets. - - * testsuite/ld-elf/property-1_needed-1b.d: Only run for - Linux/x86 targets. - * testsuite/ld-elf/property-1_needed-1c.d: Likewise. - -2021-07-09 H.J. Lu - - elf: Add GNU_PROPERTY_1_NEEDED check - If GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS is set on any input - relocatable files: - - 1. Don't generate copy relocations. - 2. Turn off extern_protected_data since it implies - GNU_PROPERTY_NO_COPY_ON_PROTECTED. - 3. Treate reference to protected symbols with indirect external access - as local. - 4. Set GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS on output. - 5. When generating executable, clear this bit when there are non-GOT or - non-PLT relocations in input relocatable files without the bit set. - 6. Add -z [no]indirect-extern-access to control indirect external access. - - bfd/ - - * elf-bfd (elf_obj_tdata): Add has_indirect_extern_access. - (elf_has_indirect_extern_access): New. - * elf-properties.c (_bfd_elf_parse_gnu_properties): Set - elf_has_indirect_extern_access and elf_has_no_copy_on_protected - when seeing GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS. - (elf_write_gnu_propertie): Add an argument to pass link_info. - Set needed_1_p for GNU_PROPERTY_1_NEEDED in memory. - (_bfd_elf_link_setup_gnu_properties): Handle - GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS for - -z indirect-extern-access. Set nocopyreloc to true and - extern_protected_data to false for indirect external access. - (_bfd_elf_convert_gnu_properties): Updated. - * elf32-i386.c (elf_i386_check_relocs): Set - non_got_ref_without_indirect_extern_access on legacy non-GOT or - non-PLT references. - * elf64-x86-64.c (elf_x86_64_check_relocs): Likewise. - * elflink.c (_bfd_elf_symbol_refs_local_p): Return true for - STV_PROTECTED symbols with indirect external access. - * elfxx-x86.c (_bfd_x86_elf_adjust_dynamic_symbol): Clear - indirect_extern_access for legacy non-GOT/non-PLT references. - * elfxx-x86.h (elf_x86_link_hash_entry): Add - non_got_ref_without_indirect_extern_access. - - include/ - - * bfdlink.h (bfd_link_info): Add indirect_extern_access and - needed_1_p. Change nocopyreloc to int. - - ld/ - - * NEWS: Mention -z [no]indirect-extern-access - * ld.texi: Document -z [no]indirect-extern-access - * ldmain.c (main): Initialize link_info.indirect_extern_access - to -1. - * emulparams/extern_protected_data.sh: Support - -z [no]indirect-extern-access. - * testsuite/ld-elf/indirect-extern-access-1.rd: New file - * testsuite/ld-elf/indirect-extern-access-1a.c: Likewise. - * testsuite/ld-elf/indirect-extern-access-1b.c: Likewise. - * testsuite/ld-elf/indirect-extern-access-2.rd: Likewise. - * testsuite/ld-elf/indirect-extern-access-2a.c: Likewise. - * testsuite/ld-elf/indirect-extern-access-2b.c: Likewise. - * testsuite/ld-elf/indirect-extern-access-3.rd: Likewise. - * testsuite/ld-elf/indirect-extern-access.S: Likewise. - * testsuite/ld-elf/property-1_needed-1b.d: Likewise. - * testsuite/ld-elf/property-1_needed-1c.d: Likewise. - * testsuite/ld-x86-64/indirect-extern-access.rd: Likewise. - * testsuite/ld-x86-64/protected-data-1.h: Likewise. - * testsuite/ld-x86-64/protected-data-1a.c: Likewise. - * testsuite/ld-x86-64/protected-data-1b.c: Likewise. - * testsuite/ld-x86-64/protected-data-2a.S: Likewise. - * testsuite/ld-x86-64/protected-data-2b.S: Likewise. - * testsuite/ld-x86-64/protected-func-2a.S: Likewise. - * testsuite/ld-x86-64/protected-func-2b.S: Likewise. - * testsuite/ld-x86-64/protected-func-2c.c: Likewise. - * testsuite/ld-elf/linux-x86.exp: Run test with - GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS. - * testsuite/ld-x86-64/x86-64.exp: Run tests for protected - function and data with indirect external access. - -2021-07-09 H.J. Lu - - elf: Add GNU_PROPERTY_1_NEEDED - Add GNU_PROPERTY_1_NEEDED: - - #define GNU_PROPERTY_1_NEEDED GNU_PROPERTY_UINT32_OR_LO - - to indicate the needed properties by the object file. - - Add GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS: - - #define GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS (1U << 0) - - to indicate that the object file requires canonical function pointers and - cannot be used with copy relocation. - - binutils/ - - * readelf.c (decode_1_needed): New. - (print_gnu_property_note): Handle GNU_PROPERTY_1_NEEDED. - - include/ - - * elf/common.h (GNU_PROPERTY_1_NEEDED): New. - (GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS): Likewise. - - ld/ - - * testsuite/ld-elf/property-1_needed-1a.d: New file. - * testsuite/ld-elf/property-1_needed-1.s: Likewise. - -2021-07-09 GDB Administrator - - Automatic date update in version.in - -2021-07-09 Lancelot SIX - - Remove unused parameter in maybe_software_singlestep - While working around, I noticed that the last parameter of - maybe_software_singlestep is never used. This path removes - it. - - Built on x86_64-linux-gnu and riscv64-linux-gnu. - - gdb/ChangeLog: - - * infrun.c (maybe_software_singlestep): Remove unused PC - parameter. - (resume_1): Update calls to maybe_software_singlestep. - -2021-07-08 H.J. Lu - - x86-64: Disallow PC reloc against weak undefined symbols in PIE - Disallow PC relocations against weak undefined symbols in PIE since they - can lead to non-zero address at run-time. - - bfd/ - - PR ld/21782 - * elf64-x86-64.c (elf_x86_64_relocate_section): Disallow PC - relocations against weak undefined symbols in PIE. - - ld/ - - PR ld/21782 - * testsuite/ld-x86-64/pie3.d: Expect linker error. - -2021-07-08 H.J. Lu - - ld: Limit cache size and add --max-cache-size=SIZE - When link_info.keep_memory is true, linker caches the relocation - information and symbol tables of input files in memory. When there - are many input files with many relocations, we may run out of memory. - Add --max-cache-size=SIZE to set the maximum cache size. - - bfd/ - - PR ld/18028 - * bfd.c (bfd): Add alloc_size. - * elf-bfd.h (_bfd_elf_link_info_read_relocs): New. - * elf32-i386.c (elf_i386_check_relocs): Use _bfd_link_keep_memory. - Update cache_size. - * elf64-x86-64.c (elf_x86_64_check_relocs): Likewise. - * elflink.c (_bfd_elf_link_read_relocs): Renamed to ... - (_bfd_elf_link_info_read_relocs): This. Update cache_size. - (_bfd_elf_link_read_relocs): New. - (_bfd_elf_link_check_relocs): Call _bfd_elf_link_info_read_relocs - instead of _bfd_elf_link_read_relocs. - (elf_link_add_object_symbols): Likewise. - (elf_link_input_bfd): Likewise. - (init_reloc_cookie_rels): Likewise. - (init_reloc_cookie): Update cache_size. Call - _bfd_elf_link_info_read_relocs instead of - _bfd_elf_link_read_relocs. - (link_info_ok): New. - (elf_gc_smash_unused_vtentry_relocs): Updated. Call - _bfd_elf_link_info_read_relocs instead of - _bfd_elf_link_read_relocs. - (bfd_elf_gc_sections): Use link_info_ok. Pass &link_info_ok - to elf_gc_smash_unused_vtentry_relocs. - * libbfd-in.h (_bfd_link_keep_memory): New. - * linker.c (_bfd_link_keep_memory): New. - * opncls.c (bfd_alloc): Update alloc_size. - * bfd-in2.h: Regenerated. - * libbfd.h: Likewise. - - include/ - - PR ld/18028 - * bfdlink.h (bfd_link_info): Add cache_size and max_cache_size. - - ld/ - - PR ld/18028 - * NEWS: Mention --max-cache-size=SIZE. - * ld.texi: Document --max-cache-size=SIZE. - * ldlex.h (option_values): Add OPTION_MAX_CACHE_SIZE. - * ldmain.c: (main): Set link_info.max_cache_size to -1. - * lexsup.c (ld_options): Add --max-cache-size=SIZE. - (parse_args): Support OPTION_MAX_CACHE_SIZE. - * testsuite/ld-bootstrap/bootstrap.exp: Add test for - --max-cache-size=-1. - -2021-07-08 Simon Marchi - - gdb: don't set Linux-specific displaced stepping methods in s390_gdbarch_init - According to bug 28056, running an s390x binary gives: - - (gdb) run - Starting program: /usr/bin/ls - /home/ubuntu/tmp/gdb-11.0.90.20210705/gdb/linux-tdep.c:2550: internal-error: displaced_step_prepare_status linux_displaced_step_prepare(gdbarch*, thread_info*, CORE_ADDR&): Assertion `gdbarch_data->num_disp_step_buffers > 0' failed. - - This is because the s390 architecture registers some Linux-specific - displaced stepping callbacks in the OS-agnostic s390_gdbarch_init: - - set_gdbarch_displaced_step_prepare (gdbarch, linux_displaced_step_prepare); - set_gdbarch_displaced_step_finish (gdbarch, linux_displaced_step_finish); - set_gdbarch_displaced_step_restore_all_in_ptid - (gdbarch, linux_displaced_step_restore_all_in_ptid); - - But then the Linux-specific s390_linux_init_abi_any passes - num_disp_step_buffers=0 to linux_init_abi: - - linux_init_abi (info, gdbarch, 0); - - The problem happens when linux_displaced_step_prepare is called for the - first time. It tries to allocate the displaced stepping buffers, but - sees that the number of displaced stepping buffers for that architecture - is 0, which is unexpected / invalid. - - s390_gdbarch_init should not register the linux_* callbacks, that is - expected to be done by linux_init_abi. If debugging a bare-metal s390 - program, or an s390 program on another OS GDB doesn't know about, we - wouldn't want to use them. We would either register no callbacks, if - displaced stepping isn't supported, or register a different set of - callbacks if we wanted to support displaced stepping in those cases. - - The commit that refactored the displaced stepping machinery and - introduced these set_gdbarch_displaced_step_* calls is 187b041e2514 - ("gdb: move displaced stepping logic to gdbarch, allow starting - concurrent displaced steps"). However, even before that, - s390_gdbarch_init did: - - set_gdbarch_displaced_step_location (gdbarch, linux_displaced_step_location); - - ... which already seemed wrong. The Linux-specific callback was used - even for non-Linux system. Maybe that was on purpose, because it would - also happen to work in some other non-Linux case, or maybe it was simply - a mistake. I'll assume that this was a small mistake when - s390-tdep.{h,c} where factored out of s390-linux-tdep.c, in d6e589456475 - ("s390: Split up s390-linux-tdep.c into two files"). - - Fix this by removing the setting of these displaced step callbacks from - s390_gdbarch_init. Instead, pass num_disp_step_buffers=1 to - linux_init_abi, in s390_linux_init_abi_any. Doing so will cause - linux_init_abi to register these same callbacks. It will also mean that - when debugging a bare-metal s390 executable or an executable on another - OS that GDB doesn't know about, gdbarch_displaced_step_prepare won't be - set, so displaced stepping won't be used. - - This patch will need to be merged in the gdb-11-branch, since this is a - GDB 11 regression, so here's the ChangeLog entry: - - gdb/ChangeLog: - - * s390-linux-tdep.c (s390_linux_init_abi_any): Pass 1 (number - of displaced stepping buffers to linux_init_abi. - * s390-tdep.c (s390_gdbarch_init): Don't set the Linux-specific - displaced-stepping gdbarch callbacks. - - Change-Id: Ieab2f8990c78fde845ce7378d6fd4ee2833800d5 - Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28056 - -2021-07-08 Simon Marchi - - gdb/Makefile.in: remove testsuite from SUBDIRS - When distclean-ing a configured / built gdb directory, like so: - - $ ./configure && make all-gdb && make distclean - - The distclean operation fails with: - - Missing testsuite/Makefile - - If we look at the SUBDIRS variable in the generated gdb/Makefile, - testsuite is there twice: - - SUBDIRS = doc testsuite data-directory testsuite - - So we try distclean-ing the testsuite directory twice. The second time, - gdb/testsuite/Makefile doesn't exist, so it fails. - - The first "testsuite" comes from the @subdirs@ replacement, because of - the `AC_CONFIG_SUBDIRS` macro in gdb/configure.ac. The second one is - hard-coded in gdb/Makefile.in: - - SUBDIRS = doc @subdirs@ data-directory testsuite - - The hard-coded was added by: - - bdbbcd577460 ("Always build 'all' in gdb/testsuite") - - which came after `testsuite` was removed from @subdirs@ by: - - f99d1d37496f ("Remove gdb/testsuite/configure") - - My commit a100a94530eb ("gdb/testsuite: restore configure script") - should have removed the hard-coded `testsuite`, since it added it back - as a "subdir", but I missed it because I only looked f99d1d37496f to - write my patch. - - Fix this by removing the hard-coded one. - - This patch should be pushed to both master and gdb-11-branch, hence the - ChangeLog entry: - - gdb/ChangeLog: - - * Makefile.in (SUBDIRS): Remove testsuite. - - Change-Id: I63e5590b1a08673c646510b3ecc74600eae9f92d - -2021-07-08 Nick Clifton - - Updated Portuguese translation for the BFD sub-directory - -2021-07-08 Tom de Vries - - [gdb/testsuite] Fix gdb.guile/scm-breakpoint.exp with guile 3.0 - When running test-case gdb.guile/scm-breakpoint.exp on openSUSE Tumbleweed - with guile 3.0, I run into: - ... - (gdb) guile (define cp (make-breakpoint "syscall" #:type BP_CATCHPOINT))^M - ERROR: In procedure make-breakpoint:^M - In procedure gdbscm_make_breakpoint: unsupported breakpoint type in \ - position 3: "BP_CATCHPOINT"^M - Error while executing Scheme code.^M - (gdb) FAIL: gdb.guile/scm-breakpoint.exp: test_catchpoints: \ - create a catchpoint via the api - ... - - The same test passes on openSUSE Leap 15.2 with guile 2.0, where the second - line of the error message starts with the same prefix as the first: - ... - ERROR: In procedure gdbscm_make_breakpoint: unsupported breakpoint type in \ - position 3: "BP_CATCHPOINT"^M - ... - - I observe the same difference in many other tests, f.i.: - ... - (gdb) gu (print (value-add i '()))^M - ERROR: In procedure value-add:^M - In procedure gdbscm_value_add: Wrong type argument in position 2: ()^M - Error while executing Scheme code.^M - (gdb) PASS: gdb.guile/scm-math.exp: catch error in guile type conversion - ... - but it doesn't cause FAILs anywhere else. - - Fix this by updating the regexp to make the "ERROR: " prefix optional. - - Tested on x86_64-linux, with both guile 2.0 and 3.0. - - gdb/testsuite/ChangeLog: - - 2021-07-07 Tom de Vries - - * gdb.guile/scm-breakpoint.exp: Make additional "ERROR: " prefix in - exception printing optional. - -2021-07-08 Mike Frysinger - - sim: erc32: use libsim.a for common objects - We're starting to move more objects to the common build that sis did - not need before, so linking them is causing problems (when common - objects end up needing symbols from non-common objects). Switch it - to the libsim.a archive which will allow the link to pull out only - what it needs. - -2021-07-08 GDB Administrator - - Automatic date update in version.in - -2021-07-07 Nick Clifton - - Remove an accidental change to elfcode.h included as part of commit 6e0dfbf420. - PR 27659 - * elfcode.h (elf_swap_symbol_out): Revert accidental change that - removed an abort if the shndx pointer is NULL. - -2021-07-07 H.J. Lu - - ld: Check archive only for archive member - Since plugin_maybe_claim calls bfd_close on the original input BFD if it - isn't an archive member, pass NULL to bfd_plugin_close_file_descriptor - to indicate that the BFD isn't an archive member. - - bfd/ - - PR ld/18028 - * plugin.c (bfd_plugin_close_file_descriptor): Check archive - only of abfd != NULL. - (try_claim): Pass NULL to bfd_plugin_close_file_descriptor if - it isn't an archive member. - - ld/ - - PR ld/18028 - * plugin.c (plugin_input_file): Add comments for abfd and ibfd. - (plugin_object_p): Set input->ibfd to NULL if it isn't an - archive member. - -2021-07-07 Andreas Krebbel - - Add changelog entries for last commit - -2021-07-07 Andreas Krebbel - - IBM Z: Add another arch14 instruction - opcodes/ - - * opcodes/s390-opc.txt: Add qpaci. - - gas/ - - * testsuite/gas/s390/zarch-arch14.d: Add qpaci. - * testsuite/gas/s390/zarch-arch14.s: Add qpaci. - -2021-07-07 Rainer Orth - - Fix Solaris gprof build with --disable-nls - gprof fails to compile on Solaris 10 and 11.3 with --disable-nls: - - In file included from /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/gprof.h:33, - from /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/basic_blocks.c:24: - /usr/include/libintl.h:45:14: error: expected identifier or '(' before 'const' - 45 | extern char *dcgettext(const char *, const char *, const int); - | ^~~~~~~~~ - /usr/include/libintl.h:46:14: error: expected identifier or '(' before 'const' - 46 | extern char *dgettext(const char *, const char *); - | ^~~~~~~~ - /usr/include/libintl.h:47:14: error: expected identifier or '(' before 'const' - 47 | extern char *gettext(const char *); - | ^~~~~~~ - /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/../bfd/sysdep.h:165:33: - error: expected identifier or '(' before 'do' - 165 | # define textdomain(Domainname) do {} while (0) - | ^~ - /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/../bfd/sysdep.h:165:39: - error: expected identifier or '(' before 'while' - 165 | # define textdomain(Domainname) do {} while (0) - | ^~~~~ - /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/../bfd/sysdep.h:166:46: - error: expected identifier or '(' before 'do' - 166 | # define bindtextdomain(Domainname, Dirname) do {} while (0) - | ^~ - /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/../bfd/sysdep.h:166:52: - error: expected identifier or '(' before 'while' - 166 | # define bindtextdomain(Domainname, Dirname) do {} while (0) - | ^~~~~ - /usr/include/libintl.h:55:14: error: expected identifier or '(' before 'unsigned' - 55 | extern char *dcngettext(const char *, const char *, - | ^~~~~~~~~~ - /usr/include/libintl.h:57:14: error: expected identifier or '(' before 'unsigned' - 57 | extern char *dngettext(const char *, const char *, - | ^~~~~~~~~ - /usr/include/libintl.h:59:14: error: expected identifier or '(' before 'unsigned' - 59 | extern char *ngettext(const char *, const char *, unsigned long int); - | ^~~~~~~~ - - This is a known issue already partially fixed in binutils/sysdep.h. For - gprof, the same fix needs to be applied in bfd/sysdep.h, as the - following patch does. Tested on i386-pc-solaris2.10 and - i386-pc-solaris2.11. - - 2021-07-06 Rainer Orth - - bfd: - * sysdep.h [!ENABLE_NLS]: Prevent inclusion of on - Solaris. - -2021-07-07 Rainer Orth - - Check for strnlen declaration to fix Solaris 10 build - binutils currently fails to compile on Solaris 10: - - /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/bfd/opncls.c: In function 'bfd_get_debug_link_info_1': - /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/bfd/opncls.c:1231:16: error: implicit declaration of function 'strnlen' [-Werror=implicit-function-declaration] - 1231 | crc_offset = strnlen (name, size) + 1; - | ^~~~~~~ - /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/bfd/opncls.c:1231:16: error: incompatible implicit declaration of built-in function 'strnlen' [-Werror] - /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/bfd/opncls.c: In function 'bfd_get_alt_debug_link_info': - /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/bfd/opncls.c:1319:20: error: incompatible implicit declaration of built-in function 'strnlen' [-Werror] - 1319 | buildid_offset = strnlen (name, size) + 1; - | ^~~~~~~ - - and in a couple of other places. The platform lacks strnlen, and while - libiberty.h can provide a fallback declaration, the necessary configure - test isn't run. - - Fixed with the following patch. Tested on i386-pc-solaris2.10. - - 2021-07-06 Rainer Orth - - bfd: - * configure.ac: Check for strnlen declaration. - * configure, config.in: Regenerate. - - binutils: - * configure.ac: Check for strnlen declaration. - * configure, config.in: Regenerate. - -2021-07-07 Nick Clifton - - Fix problems translating messages when a percentage sign appears at the end of a string. - PR 28051 - gas * config/tc-i386.c (offset_in_range): Reformat error messages in - order to fix problems when translating. - (md_assemble): Likewise. - * messages.c (as_internal_value_out_of_range): Likewise. - * read.c (emit_expr_with_reloc): Likewise. - * testsuite/gas/all/overflow.l Change expected output format. - * po/gas.pot: Regenerate. - - bfd * coff-rs6000.c (xcoff_reloc_type_tls): Reformat error messages in - order to fix problems when translating. - * cofflink.c (_bfd_coff_write_global_sym): Likewise. - * elfnn-aarch64.c (_bfd_aarch64_erratum_843419_branch_to_stub): - Likewise. - * po/bfd.pot: Regenerate. - -2021-07-07 GDB Administrator - - Automatic date update in version.in - -2021-07-06 Simon Marchi - - gdb: introduce iterator_range, remove next_adapter - I was always a bit confused by next_adapter, because it kind of mixes - the element type and the iterator type. In reality, it is not much more - than a class that wraps two iterators (begin and end). However, it - assumes that: - - - you can construct the begin iterator by passing a pointer to the - first element of the iterable - - you can default-construct iterator to make the end iterator - - I think that by generalizing it a little bit, we can re-use it at more - places. - - Rename it to "iterator_range". I think it describes a bit better: it's - a range made by wrapping a begin and end iterator. Move it to its own - file, since it's not related to next_iterator anymore. - - iterator_range has two constructors. The variadic one, where arguments - are forwarded to construct the underlying begin iterator. The end - iterator is constructed through default construction. This is a - generalization of what we have today. - - There is another constructor which receives already constructed begin - and end iterators, useful if the end iterator can't be obtained by - default-construction. Or, if you wanted to make a range that does not - end at the end of the container, you could pass any iterator as the - "end". - - This generalization allows removing some "range" classes, like - all_inferiors_range. These classes existed only to pass some arguments - when constructing the begin iterator. With iterator_range, those same - arguments are passed to the iterator_range constructed and then - forwarded to the constructed begin iterator. - - There is a small functional difference in how iterator_range works - compared to next_adapter. next_adapter stored the pointer it received - as argument and constructeur an iterator in the `begin` method. - iterator_range constructs the begin iterator and stores it as a member. - Its `begin` method returns a copy of that iterator. - - With just iterator_range, uses of next_adapter would be replaced - with: - - using foo_iterator = next_iterator; - using foo_range = iterator_range; - - However, I added a `next_range` wrapper as a direct replacement for - next_adapter. IMO, next_range is a slightly better name than - next_adapter. - - The rest of the changes are applications of this new class. - - gdbsupport/ChangeLog: - - * next-iterator.h (class next_adapter): Remove. - * iterator-range.h: New. - - gdb/ChangeLog: - - * breakpoint.h (bp_locations_range): Remove. - (bp_location_range): New. - (struct breakpoint) : Adjust type. - (breakpoint_range): Use iterator_range. - (tracepoint_range): Use iterator_range. - * breakpoint.c (breakpoint::locations): Adjust return type. - * gdb_bfd.h (gdb_bfd_section_range): Use iterator_range. - * gdbthread.h (all_threads_safe): Pass argument to - all_threads_safe_range. - * inferior-iter.h (all_inferiors_range): Use iterator_range. - (all_inferiors_safe_range): Use iterator_range. - (all_non_exited_inferiors_range): Use iterator_range. - * inferior.h (all_inferiors, all_non_exited_inferiors): Pass - inferior_list as argument. - * objfiles.h (struct objfile) : Remove. - : Return compunit_symtab_range. - * progspace.h (unwrapping_objfile_iterator) - : Take parameter by value. - (unwrapping_objfile_range): Use iterator_range. - (struct program_space) : Define with "using". - : Adjust. - : Define with "using". - : Adjust. - : Return so_list_range, define here. - * progspace.c (program_space::solibs): Remove. - * psymtab.h (class psymtab_storage) : - New. - : Use iterator_range. - * solist.h (so_list_range): New. - * symtab.h (compunit_symtab_range): - New. - (symtab_range): New. - (compunit_filetabs): Change to a function. - * thread-iter.h (inf_threads_range, - inf_non_exited_threads_range, safe_inf_threads_range, - all_threads_safe_range): Use iterator_range. - * top.h (ui_range): New. - (all_uis): Use ui_range. - - Change-Id: Ib7a9d2a3547f45f01aa1c6b24536ba159db9b854 - -2021-07-06 Simon Marchi - - gdb/testsuite: restore configure script - Commit f99d1d37496f ("Remove gdb/testsuite/configure") removed - gdb/testsuite/configure, as anything gdb/testsuite/configure did could - be done by gdb/configure. - - There is however one use case that popped up when this changed - propagated to downstream consumers, to run the testsuite on an already - built GDB. In the workflow of ROCm-GDB at AMD, a GDB package is built - in a CI job. This GDB package is then tested on different machines / - hardware configurations as part of other CI jobs. To achieve this, - those CI jobs only configure the testsuite directory and run "make - check" with an appropriate board file. - - In light of this use case, the way I see it is that gdb/testsuite could - be considered its own project. It could be stored in a completely - different repo if we want to, it just happens to be stored inside gdb/. - - Since the only downside of having gdb/testsuite/configure is that it - takes a few more seconds to run, but on the other hand it's quite useful - for some people, I propose re-adding it. - - In a sense, this is revert of f99d1d37496f, but it's not a direct - git-revert, as some things have changed since. - - gdb/ChangeLog: - - * configure.ac: Remove things that were moved from - testsuite/configure.ac. - * configure: Re-generate. - - gdb/testsuite/ChangeLog: - - * configure.ac: Restore. - * configure: Re-generate. - * aclocal.m4: Re-generate. - * Makefile.in (distclean): Add config.status. - (Makefile): Adjust paths. - (lib/pdtrace): Adjust paths. - (config.status): Add. - - Change-Id: Ic38c79485e1835712d9c99649c9dfb59667254f1 - -2021-07-06 Joel Brobecker - - Rename gdb/ChangeLog to gdb/ChangeLog-2021 - Now that ChangeLog entries are no longer used for GDB patches, - this commit renames the file gdb/ChangeLog to gdb/ChangeLog-2021, - similar to what we would do in the context of the "Start of New - Year" procedure. - - The purpose of this change is to avoid people merging ChangeLog - entries by mistake when applying existing commits that they are - currently working on. - -2021-07-06 Dan Streetman - - sim: ppc: add missing empty targets - These are copied from sim/common/Make-common.in. - - On ppc the build fails without at least the 'info' target, e.g.: - - Making info in ppc - make[4]: Entering directory '/<>/gdb-10.2.2974.g5b45e89f56d+21.10.20210510155809/build/default/sim/ppc' - make[4]: *** No rule to make target 'info'. Stop. - -2021-07-06 Yuri Chornoivan - - PR 28053: Fix spelling mistakes: usupported -> unsupported and relocatation -> relocation. - -2021-07-06 Michael Matz - - elf/riscv: Fix relaxation with aliases [PR28021] - the fix for PR22756 only changed behaviour for hidden aliases, - but the same situation exists for non-hidden aliases: sym_hashes[] - can contain multiple entries pointing to the same symbol structure - leading to relaxation adjustment to be applied twice. - - Fix this by testing for duplicates for everything that looks like it - has a version. - - PR ld/28021 - - bfd/ - * elfnn-riscv.c (riscv_relax_delete_bytes): Check for any - versioning. - - ld/ - * testsuite/ld-riscv-elf/relax-twice.ver: New. - * testsuite/ld-riscv-elf/relax-twice-1.s: New. - * testsuite/ld-riscv-elf/relax-twice-2.s: New. - * testsuite/ld-riscv-elf/ld-riscv-elf.exp - (run_relax_twice_test): New, and call it. - -2021-07-06 Pedro Alves - Qingchuan Shi - - Update gdb performance testsuite to be compatible with Python 3.8 - Running "make check-perf" on a system with Python 3.8 (e.g., Ubuntu - 20.04) runs into this Python problem: - - Traceback (most recent call last): - File "", line 1, in - File "/home/pedro/rocm/gdb/src/gdb/testsuite/gdb.perf/lib/perftest/perftest.py", line 65, in run - self.execute_test() - File "", line 35, in execute_test - File "/home/pedro/rocm/gdb/src/gdb/testsuite/gdb.perf/lib/perftest/measure.py", line 45, in measure - m.start(id) - File "/home/pedro/rocm/gdb/src/gdb/testsuite/gdb.perf/lib/perftest/measure.py", line 102, in start - self.start_time = time.clock() - AttributeError: module 'time' has no attribute 'clock' - Error while executing Python code. - (gdb) FAIL: gdb.perf/single-step.exp: python SingleStep(1000).run() - - ... many times over. - - The problem is that the testsuite is using time.clock(), deprecated in - Python 3.3 and finaly removed in Python 3.8. The guidelines say to - use time.perf_counter() or time.process_time() instead depending on - requirements. Looking at the current description of those functions, - at: - - https://docs.python.org/3.10/library/time.html - - we have: - - time.perf_counter() -> float - - Return the value (in fractional seconds) of a performance - counter, i.e. a clock with the highest available resolution to - measure a short duration. It does include time elapsed during - sleep and is system-wide. (...) - - time.process_time() -> float - - Return the value (in fractional seconds) of the sum of the - system and user CPU time of the current process. It does not - include time elapsed during sleep. It is process-wide by - definition. (...) - - I'm thinking that it's just best to record both instead of picking - one. So this patch replaces the MeasurementCpuTime measurement class - with two new classes -- MeasurementPerfCounter and - MeasurementProcessTime. Correspondingly, this changes the reports in - testsuite/perftest.log -- we have two new "perf_counter" and - "process_time" measurements and the "cpu_time" measurement is gone. I - don't suppose breaking backward compatibility here is a big problem. - I suspect no one is really tracking long term performance using the - perf testsuite today. And if they are, it shouldn't be hard to adjust. - - For backward compatility, with Python < 3.3, both perf_counter and - process_time use the old time.clock. - - gdb/testsuite/ChangeLog: - yyyy-mm-dd Qingchuan Shi - Pedro Alves - - * gdb.perf/lib/perftest/perftest.py: Import sys. - (time.perf_counter, time.process_time): Map to time.clock on - Python < 3.3. - (MeasurementCpuTime): Delete, replaced by... - (MeasurementPerfCounter, MeasurementProcessTime): .. these two new - classes. - * gdb.perf/lib/perftest/perftest.py: Import MeasurementPerfCounter - and MeasurementProcessTime instead of MeasurementCpuTime. - (TestCaseWithBasicMeasurements): Use MeasurementPerfCounter and - MeasurementProcessTime instead of MeasurementCpuTime. - - - Change-Id: Ia850c05d5ce57d2dada70ba5b0061f566444aa2b - -2021-07-06 Pedro Alves - - gdb.perf/: FAIL on Python errors, avoid "ERROR: internal buffer is full" - Currently, if you run make check-perf on a system with Python 3.8, - tests seen to PASS, but they actually test a lot less than intended, - due to: - - PerfTest::assemble, run ... - python BackTrace(64).run() - Traceback (most recent call last): - File "", line 1, in - File "/home/pedro/rocm/gdb/src/gdb/testsuite/gdb.perf/lib/perftest/perftest.py", line 65, in run - self.execute_test() - File "", line 49, in execute_test - File "/home/pedro/rocm/gdb/src/gdb/testsuite/gdb.perf/lib/perftest/measure.py", line 45, in measure - m.start(id) - File "/home/pedro/rocm/gdb/src/gdb/testsuite/gdb.perf/lib/perftest/measure.py", line 102, in start - self.start_time = time.clock() - AttributeError: module 'time' has no attribute 'clock' - Error while executing Python code. - (gdb) PASS: gdb.perf/backtrace.exp: python BackTrace(64).run() - - And then, after fixing the above Python compatibility issues (which - will be a separate patch), I get 86 instances of overflowing expect's - buffer, like: - - ERROR: internal buffer is full. - UNRESOLVED: gdb.perf/single-step.exp: python SingleStep(1000).run() - - This patch fixes both problems by adding & using a gdb_test_python_run - routine that: - - - checks for Python errors - - consumes output line by line - - gdb/testsuite/ChangeLog: - yyyy-mm-dd Pedro Alves - - * gdb.perf/backtrace.exp: Use gdb_test_python_run. - * gdb.perf/disassemble.exp: Use gdb_test_python_run. - * gdb.perf/single-step.exp: Use gdb_test_python_run. - * gdb.perf/skip-command.exp: Use gdb_test_python_run. - * gdb.perf/skip-prologue.exp: Use gdb_test_python_run. - * gdb.perf/solib.exp: Use gdb_test_python_run. - * gdb.perf/template-breakpoints.exp: Use gdb_test_python_run. - * lib/perftest.exp (gdb_test_python_run): New. - - Change-Id: I007af36f164b3f4cda41033616eaaa4e268dfd2f - -2021-07-06 Tom de Vries - - [gdb/testsuite] Remove read1 timeout factor from gdb.base/info-macros.exp - At the moment some check-read1 timeouts are handled like this in - gdb.base/info-macros.exp: - ... - gdb_test_multiple_with_read1_timeout_factor 10 "$test" $testname { - -re "$r1$r2$r3" { - pass $testname - } - -re ".*#define TWO.*\r\n$gdb_prompt" { - fail $testname - } - -re ".*#define THREE.*\r\n$gdb_prompt" { - fail $testname - } - -re ".*#define FOUR.*\r\n$gdb_prompt" { - fail $testname - } - } - ... - which is not ideal. - - We could use gdb_test_lines, but it currently doesn't support verifying - the absence of regexps, which is done using the clauses above calling fail. - - Fix this by using gdb_test_lines and adding a -re-not syntax to - gdb_test_lines, such that we can do: - ... - gdb_test_lines $test $testname $r1.*$r2 \ - -re-not "#define TWO" \ - -re-not "#define THREE" \ - -re-not "#define FOUR" - ... - - Tested on x86_64-linux, whith make targets check and check-read1. - - Also observed that check-read1 execution time is reduced from 6m35s to 13s. - - gdb/testsuite/ChangeLog: - - 2021-07-06 Tom de Vries - - * gdb.base/info-macros.exp: Replace use of - gdb_test_multiple_with_read1_timeout_factor with gdb_test_lines. - (gdb_test_multiple_with_read1_timeout_factor): Remove. - * lib/gdb.exp (gdb_test_lines): Add handling or -re-not . - -2021-07-06 Nelson Chu - - RISC-V: Fix the build broken with -Werror. - ChangeLog: - - bfd/ - - * elfnn-riscv.c(riscv_elf_additional_program_headers): Removed the - unused variable s. - (riscv_elf_modify_segment_map): Added ATTRIBUTE_UNUSED for the - unused parameter info. - -2021-07-06 Tom de Vries - - [gdb/symtab] Fix skipping of import of C++ CU - Tom Tromey observed that when changing the language in - gdb.dwarf2/imported-unit-bp.exp from c to c++, the test failed. - - This is due to this code in process_imported_unit_die: - ... - /* We're importing a C++ compilation unit with tag DW_TAG_compile_unit - into another compilation unit, at root level. Regard this as a hint, - and ignore it. */ - if (die->parent && die->parent->parent == NULL - && per_cu->unit_type == DW_UT_compile - && per_cu->lang == language_cplus) - return; - ... - which should have a partial symtabs counterpart. - - Add the missing counterpart in process_psymtab_comp_unit. - - Tested on x86_64-linux (openSUSE Leap 15.2), no regressions for config: - - using default gcc version 7.5.0 - (with 5 unexpected FAILs) - - gcc 10.3.0 and target board - unix/-flto/-O0/-flto-partition=none/-ffat-lto-objects - (with 1000 unexpected FAILs) - - gdb/ChangeLog: - - 2021-07-06 Tom de Vries - - * dwarf2/read.c (scan_partial_symbols): Skip top-level imports of - c++ CU. - * testsuite/gdb.dwarf2/imported-unit-bp.exp: Moved to ... - * testsuite/gdb.dwarf2/imported-unit-bp.exp.tcl: ... here. - * testsuite/gdb.dwarf2/imported-unit-bp-c++.exp: New test. - * testsuite/gdb.dwarf2/imported-unit-bp-c.exp: New test. - * testsuite/gdb.dwarf2/imported-unit.exp: Update. - -2021-07-06 Kito Cheng - - RISC-V: Add PT_RISCV_ATTRIBUTES and add it to PHDR. - We added PT_RISCV_ATTRIBUTES to program header to make - .riscv.attribute easier to find in dynamic loader or kernel. - - Ref: - https://github.com/riscv/riscv-elf-psabi-doc/pull/71 - - ChangeLog: - - bfd/ - - * elfnn-riscv.c(RISCV_ATTRIBUTES_SECTION_NAME): New. - (riscv_elf_additional_program_headers): Ditto. - (riscv_elf_modify_segment_map): Ditto. - (elf_backend_additional_program_headers): Ditto. - (elf_backend_modify_segment_map): Ditto. - (elf_backend_obj_attrs_section): Use RISCV_ATTRIBUTES_SECTION_NAME - rather than string literal. - - binutils/ - - * readelf.c(get_riscv_segment_type): New. - (get_segment_type): Handle EM_RISCV. - - include/ - - * elf/riscv.h (PT_RISCV_ATTRIBUTES): New. - * testsuite/ld-elf/orphan-region.ld: Discard .riscv.attributes - section for simplify testcase. - * testsuite/ld-riscv-elf/attr-phdr.d: New. - * testsuite/ld-riscv-elf/attr-phdr.s: Ditto. - * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Add attr-phdr to - testcase. - -2021-07-06 Alan Modra - - Re: PR28055, segfault in bpf special reloc function - PR 28055 - * elf64-bpf.c (bpf_elf_generic_reloc): Add missing ATTRIBUTE_UNUSED. - -2021-07-06 GDB Administrator - - Automatic date update in version.in - -2021-07-05 Tom Tromey - - Simplify debug_names index writing - This changes the .debug_names writer to find the TU indices in the - main loop over all CUs and TUs. (An earlier patch applied this same - treatment to the .gdb_index writer.) - - Simplify gdb_index writing - write_gdbindex writes the CUs first, then walks the signatured type - hash table to write out the TUs. However, now that CUs and TUs are - unified in the DWARF reader, it's simpler to handle both of these in - the same loop. - - Minor cleanup to addrmap_index_data::previous_valid - This changes addrmap_index_data::previous_valid to a bool, and - initializes it inline. - -2021-07-05 Tom Tromey - - Fix oddity in write_gdbindex - My recent patch to unify CUs and TUs introduced an oddity in - write_gdbindex. Here, we pass 'i' to recursively_write_psymbols, but - we must instead pass 'counter', to handle the situation where a TU is - mixed in with the CUs. - - I am not sure a test case for this is possible. I think it can only - happen when using DWARF 5, where a TU appears in .debug_info. - However, this situation is already not handled correctly by - .gdb_index. I filed a bug about this. - -2021-07-05 Tom Tromey - - Fix warning in symtab.c - The compiler gives this warning when building symtab.c: - - ../../binutils-gdb/gdb/symtab.c:4247:28: warning: 'to_match' may be used uninitialized in this function [-Wmaybe-uninitialized] - - This patch fixes the warning by adding a gdb_assert_not_reached. - -2021-07-05 H.J. Lu - - ld: Cache and reuse the IR archive file descriptor - Linker plugin_object_p opens the IR archive for each IR archive member. - For GCC plugin, plugin_object_p closes the archive file descriptor. But - for LLVM plugin, the archive file descriptor remains open. If there are - 3000 IR archive members, there are 3000 file descriptors for them. We - can run out of file descriptors petty easily. - - 1. Add archive_plugin_fd and archive_plugin_fd_open_count to bfd so that - we can cache and reuse the IR archive file descriptor for all IR archive - members in the archive. - 2. Add bfd_plugin_close_file_descriptor to properly close the IR archive - file descriptor. - - bfd/ - - PR ld/28040 - * archive.c (_bfd_archive_close_and_cleanup): Close the archive - plugin file descriptor if needed. - * bfd.c (bfd): Add archive_plugin_fd and - archive_plugin_fd_open_count. - * opncls.c (_bfd_new_bfd): Initialize to -1. - * plugin.c (bfd_plugin_open_input): Cache and reuse the archive - plugin file descriptor. - (bfd_plugin_close_file_descriptor): New function. - (try_claim): Call bfd_plugin_close_file_descriptor. - * plugin.h (bfd_plugin_close_file_descriptor): New. - * bfd-in2.h: Regenerated. - - ld/ - - PR ld/28040 - * plugin.c (plugin_input_file): Add ibfd. - (release_plugin_file_descriptor): New function. - (release_input_file): Call release_plugin_file_descriptor to - close input->fd. - (plugin_object_p): Call release_plugin_file_descriptor to close - input->fd. Also call release_plugin_file_descriptor if not - claimed. - * testsuite/config/default.exp (RANLIB): New. - * testsuite/ld-plugin/lto.exp: Run ranlib test. - -2021-07-05 Nick Clifton - - Restore the libiberty component of commit 50ad1254d5030d0804cbf89c758359ae202e8d55. - This commit has not yet been applied to the master sources in the gcc repository. - It was submitted here: https://gcc.gnu.org/pipermail/gcc-patches/2021-July/574405.html - The commit allows options to be set for the AR and RANLIB programs used when building libiberty, which in turn allows building with LTO enabled. - - Updated translations (mainly Ukranian and French) triggered by creation of 2.37 branch. - -2021-07-05 Tom de Vries - - [gdb/testsuite] Fix fail in gdb.fortran/ptype-on-functions.exp with gcc-7 - Since commit 05b85772061 "gdb/fortran: Add type info of formal parameter for - clang" I see: - ... - (gdb) ptype say_string^M - type = void (character*(*), integer(kind=4))^M - (gdb) FAIL: gdb.fortran/ptype-on-functions.exp: ptype say_string - ... - - The part of the commit causing the fail is: - ... - gdb_test "ptype say_string" \ - - "type = void \\(character\\*\\(\\*\\), integer\\(kind=\\d+\\)\\)" - + "type = void \\(character\[^,\]+, $integer8\\)" - ... - which fails to take into account that for gcc-7 and before, the type for - string length of a string argument is int, not size_t. - - Fix this by allowing both $integer8 and $integer4. - - Tested on x86_64-linux, with gcc-7 and gcc-10. - - gdb/testsuite/ChangeLog: - - 2021-07-05 Tom de Vries - - * gdb.fortran/ptype-on-functions.exp: Allow both $integer8 and - $integer4 for size of string length. - -2021-07-05 Simon Marchi - - gdb: fall back on sigpending + sigwait if sigtimedwait is not available - The macOS platform does not provide sigtimedwait, so we get: - - CXX compile/compile.o - In file included from /Users/smarchi/src/binutils-gdb/gdb/compile/compile.c:46: - /Users/smarchi/src/binutils-gdb/gdb/../gdbsupport/scoped_ignore_signal.h:69:4: error: use of undeclared identifier 'sigtimedwait' - sigtimedwait (&set, nullptr, &zero_timeout); - ^ - - An alternative to sigtimedwait with a timeout of 0 is to use sigpending, - to first check which signals are pending, and then sigwait, to consume - them. Since that's slightly more expensive (2 syscalls instead of 1), - keep using sigtimedwait for the platforms that provide it, and fall back - to sigpending + sigwait for the others. - - gdbsupport/ChangeLog: - - * scoped_ignore_signal.h (struct scoped_ignore_signal) - <~scoped_ignore_signal>: Use sigtimedwait if HAVE_SIGTIMEDWAIT - is defined, else use sigpending + sigwait. - - Change-Id: I2a72798337e81dd1bbd21214736a139dd350af87 - Co-Authored-By: John Baldwin - -2021-07-05 Simon Marchi - - gdbsupport/common.m4: check for sigtimedwait - The next patch will make the use of sigtimedwait conditional to whether - the platform provides it. Start by adding a configure check for it. - - gdbsupport/ChangeLog: - - * common.m4 (GDB_AC_COMMON): Check for sigtimedwait. - * config.in, configure: Re-generate. - - gdb/ChangeLog: - - * config.in, configure: Re-generate. - - gdbserver/ChangeLog: - - * config.in, configure: Re-generate. - - Change-Id: Ic7613fe14521b966b4d991bbcd0933ab14629c05 - -2021-07-05 Alan Modra - - Re: opcodes: constify & local meps macros - Commit f375d32b35ce changed a generated file. Edit the source instead. - - * mep.opc (macros): Make static and const. - (lookup_macro): Return and use const pointer. - (expand_macro): Make mac param const. - (expand_string): Make pmacro const. - -2021-07-05 Alan Modra - - PR28055, segfault in bpf special reloc function - The testcase in this PR tickled two bugs fixed here. output_bfd is - NULL when a reloc special_function is called for final linking and - when called from bfd_generic_get_relocated_section_contents. Clearly - using output_bfd is wrong as it results in segfaults. Not only that, - the endianness of the reloc field really should be that of the input. - The second bug was not checking that the entire reloc field was - contained in the section contents. - - PR 28055 - * elf64-bpf.c (bpf_elf_generic_reloc): Use correct bfd for bfd_put - and bfd_put_32 calls. Correct section limit checks. - -2021-07-05 Alan Modra - - PR28047, readelf crash due to assertion failure - DW_FORM_ref1, DW_FORM_ref2, DW_FORM_ref4, DW_FORM_ref1, and - DW_FORM_ref_udata are all supposed to be within the containing unit. - - PR 28047 - * dwarf.c (get_type_abbrev_from_form): Add cu_end parameter. - Check DW_FORM_ref1 etc. arg against cu_end rather than end of - section. Adjust all callers. - -2021-07-05 GDB Administrator - - Automatic date update in version.in - -2021-07-04 Simon Marchi - - gdb: return early if no execution in darwin_solib_create_inferior_hook - When loading a file using the file command on macOS, we get: - - $ ./gdb -nx --data-directory=data-directory -q -ex "file ./test" - Reading symbols from ./test... - Reading symbols from /Users/smarchi/build/binutils-gdb/gdb/test.dSYM/Contents/Resources/DWARF/test... - /Users/smarchi/src/binutils-gdb/gdb/thread.c:72: internal-error: struct thread_info *inferior_thread(): Assertion `current_thread_ != nullptr' failed. - A problem internal to GDB has been detected, - further debugging may prove unreliable. - Quit this debugging session? (y or n) - - The backtrace is: - - * frame #0: 0x0000000101fcb826 gdb`internal_error(file="/Users/smarchi/src/binutils-gdb/gdb/thread.c", line=72, fmt="%s: Assertion `%s' failed.") at errors.cc:52:3 - frame #1: 0x00000001018a2584 gdb`inferior_thread() at thread.c:72:3 - frame #2: 0x0000000101469c09 gdb`get_current_regcache() at regcache.c:421:31 - frame #3: 0x00000001015f9812 gdb`darwin_solib_get_all_image_info_addr_at_init(info=0x0000603000006d00) at solib-darwin.c:464:34 - frame #4: 0x00000001015f7a04 gdb`darwin_solib_create_inferior_hook(from_tty=1) at solib-darwin.c:515:5 - frame #5: 0x000000010161205e gdb`solib_create_inferior_hook(from_tty=1) at solib.c:1200:3 - frame #6: 0x00000001016d8f76 gdb`symbol_file_command(args="./test", from_tty=1) at symfile.c:1650:7 - frame #7: 0x0000000100abab17 gdb`file_command(arg="./test", from_tty=1) at exec.c:555:3 - frame #8: 0x00000001004dc799 gdb`do_const_cfunc(c=0x000061100000c340, args="./test", from_tty=1) at cli-decode.c:102:3 - frame #9: 0x00000001004ea042 gdb`cmd_func(cmd=0x000061100000c340, args="./test", from_tty=1) at cli-decode.c:2160:7 - frame #10: 0x00000001018d4f59 gdb`execute_command(p="t", from_tty=1) at top.c:674:2 - frame #11: 0x0000000100eee430 gdb`catch_command_errors(command=(gdb`execute_command(char const*, int) at top.c:561), arg="file ./test", from_tty=1, do_bp_actions=true)(char const*, int), char const*, int, bool) at main.c:523:7 - frame #12: 0x0000000100eee902 gdb`execute_cmdargs(cmdarg_vec=0x00007ffeefbfeba0 size=1, file_type=CMDARG_FILE, cmd_type=CMDARG_COMMAND, ret=0x00007ffeefbfec20) at main.c:618:9 - frame #13: 0x0000000100eed3a4 gdb`captured_main_1(context=0x00007ffeefbff780) at main.c:1322:3 - frame #14: 0x0000000100ee810d gdb`captured_main(data=0x00007ffeefbff780) at main.c:1343:3 - frame #15: 0x0000000100ee8025 gdb`gdb_main(args=0x00007ffeefbff780) at main.c:1368:7 - frame #16: 0x00000001000044f1 gdb`main(argc=6, argv=0x00007ffeefbff8a0) at gdb.c:32:10 - frame #17: 0x00007fff20558f5d libdyld.dylib`start + 1 - - The solib_create_inferior_hook call in symbol_file_command was added by - commit ea142fbfc9c1 ("Fix breakpoints on file reloads for PIE - binaries"). It causes solib_create_inferior_hook to be called while - the inferior is not running, which darwin_solib_create_inferior_hook - does not expect. darwin_solib_get_all_image_info_addr_at_init, in - particular, assumes that there is a current thread, as it tries to get - the current thread's regcache. - - Fix it by adding a target_has_execution check and returning early. Note - that there is a similar check in svr4_solib_create_inferior_hook. - - gdb/ChangeLog: - - * solib-darwin.c (darwin_solib_create_inferior_hook): Return - early if no execution. - - Change-Id: Ia11dd983a1e29786e5ce663d0fcaa6846dc611bb - -2021-07-04 GDB Administrator - - Automatic date update in version.in - -2021-07-03 H.J. Lu - - gprof: Regenerate configure - * configure: Regenerated. - -2021-07-03 Joel Brobecker - - Update NEWS post GDB 11 branch creation. - gdb/ChangeLog: - - * NEWS: Create a new section for the next release branch. - Rename the section of the current branch, now that it has - been cut. - -2021-07-03 Joel Brobecker - - Bump version to 12.0.50.DATE-git. - Now that the GDB 11 branch has been created, we can - bump the version number. - - gdb/ChangeLog: - - GDB 11 branch created (4b51505e33441c6165e7789fa2b6d21930242927): - * version.in: Bump version to 12.0.50.DATE-git. - - gdb/testsuite/ChangeLog: - - * gdb.base/default.exp: Change $_gdb_major to 12. - -2021-07-03 Tom Tromey - - Use 'bool' more idiomatically in dwarf_decode_lines - I noticed a couple of spots related to dwarf_decode_lines where the - 'include_p' field was not being used idiomatically -- it is of type - bool now, so treat it as such. - - gdb/ChangeLog - 2021-07-03 Tom Tromey - - * dwarf2/read.c (lnp_state_machine::record_line): Use 'true'. - (dwarf_decode_lines): Remove '=='. - -2021-07-03 Nick Clifton - - More minor updates to the how-to-make-a-release documentation - - Update version number and regenerate files - - Add markers for 2.37 branch diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 3e5d8411c13..56c858e6ce4 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,26 +1,26 @@ -2023-07-30 Nick Clifton +2023-07-24 Johannes Schauer Marin Rodrigues - This is the 2.41 release. - * configure: Regenerate. - * development.sh: Set variables to false. - * po/bfd.pot: Regenerate. - * version.m4: Set version number to 2.41. + * peXXigen.c (_bfd_XXi_only_swap_filehdr_out): If inserting a + timestamp, use the value held in the SOURCE_DATE_EPOCH environment + variable, if it is defined. -2023-07-24 Nick Clifton +2023-07-24 Jose E. Marchesi - Import from mainline: - * elfnn-loongarch.c (RELOCATE_CALC_PC32_HI20): Redefined. - (RELOCATE_CALC_PC64_HI32): Redefined. + * reloc.c: New reloc BFD_RELOC_BPF_DISPCALL32. + * elf64-bpf.c (bpf_reloc_type_lookup): Handle the new reloc. + * libbfd.h (bfd_reloc_code_real_names): Regenerate. - * elfxx-loongarch.c (reloc_bits_pcrel20_s2): Delete. - (reloc_bits_b16): Delete. - (reloc_bits_b21): Delete. - (reloc_bits_b26): Delete. - (reloc_sign_bits): New. +2023-07-09 Fangrui Song + + PR 30592 + * section.c: Define SEC_ELF_LARGE. + * bfd-in2.h: Regenerate. + * elf64-x86-64.c (elf_x86_64_section_flags, elf_x86_64_fake_sections, + elf_x86_64_copy_private_section_data): New. 2023-07-03 Nick Clifton - * version.m4: Update version number to 2.40.90. + * version.m4: Update version number to 2.41.50. * configure: Regenerate. * bfd/po/bfd.pot: Regenerate. diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index b34c8ef9fc9..5f49807d7f2 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -625,6 +625,9 @@ typedef struct bfd_section TMS320C54X only. */ #define SEC_TIC54X_BLOCK 0x10000000 + /* This section has the SHF_X86_64_LARGE flag. This is ELF x86-64 only. */ +#define SEC_ELF_LARGE 0x10000000 + /* Conditionally link this section; do not link if there are no references found to any symbol in the section. This is for TI TMS320C54X only. */ @@ -7145,6 +7148,8 @@ assembler and not (currently) written to any object files. */ /* Linux eBPF relocations. */ BFD_RELOC_BPF_64, BFD_RELOC_BPF_DISP32, + BFD_RELOC_BPF_DISPCALL32, + BFD_RELOC_BPF_DISP16, /* Adapteva EPIPHANY - 8 bit signed pc-relative displacement */ BFD_RELOC_EPIPHANY_SIMM8, diff --git a/bfd/bpf-reloc.def b/bfd/bpf-reloc.def index b1be2eb66f6..31f761d291d 100644 --- a/bfd/bpf-reloc.def +++ b/bfd/bpf-reloc.def @@ -72,3 +72,18 @@ 0xffffffff, /* src_mask */ 0xffffffff, /* dst_mask */ true) /* pcrel_offset */ + + /* 16-bit PC-relative address in load instructions. */ + BPF_HOWTO (R_BPF_GNU_64_16, /* type */ + 0, /* rightshift */ + 2, /* size */ + 16, /* bitsize */ + true, /* pc_relative */ + 16, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + bpf_elf_generic_reloc, /* special_function */ + "R_BPF_GNU_64_16", /* name */ + true, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ + true) /* pcrel_offset */ diff --git a/bfd/coffcode.h b/bfd/coffcode.h index 62720255b7f..6c8080c841e 100644 --- a/bfd/coffcode.h +++ b/bfd/coffcode.h @@ -3176,8 +3176,9 @@ coff_compute_section_file_positions (bfd * abfd) created and not just improve performances with gdb. */ - if ((!strcmp (current->name, _TEXT) - || !strcmp (current->name, _DATA)) + if ((current->flags & SEC_LOAD) != 0 + && (!strcmp (current->name, _TEXT) + || !strcmp (current->name, _DATA)) && (previous == NULL || strcmp(previous->name, _TDATA))) { bfd_vma align = 4096; @@ -3190,7 +3191,8 @@ coff_compute_section_file_positions (bfd * abfd) sofar += align + vma_off - sofar_off; } #endif - if (previous != NULL) + if (previous != NULL + && (previous->flags & SEC_LOAD) != 0) previous->size += sofar - old_sofar; } @@ -4695,7 +4697,7 @@ coff_slurp_symbol_table (bfd * abfd) #endif #ifdef RS6000COFF_C case C_HIDEXT: -#if ! defined _AIX52 && ! defined AIX_WEAK_SUPPORT +#ifndef AIX_WEAK_SUPPORT case C_AIX_WEAKEXT: #endif #endif @@ -5021,7 +5023,7 @@ coff_classify_symbol (bfd *abfd, #endif #ifdef RS6000COFF_C case C_HIDEXT: -#if ! defined _AIX52 && ! defined AIX_WEAK_SUPPORT +#ifndef AIX_WEAK_SUPPORT case C_AIX_WEAKEXT: #endif #endif diff --git a/bfd/config.bfd b/bfd/config.bfd index bdee53957c0..3b39ff36c00 100644 --- a/bfd/config.bfd +++ b/bfd/config.bfd @@ -1098,18 +1098,6 @@ case "${targ}" in targ_selvecs="rs6000_xcoff64_aix_vec" want64=true ;; - powerpc-*-haiku*) - targ_defvec=powerpc_elf32_vec - targ_selvecs="rs6000_xcoff_vec powerpc_elf32_le_vec pef_vec pef_xlib_vec powerpc_xcoff_vec powerpc_boot_vec" - targ_cflags=-D__HAIKU_TARGET__ - ;; -#ifdef BFD64 - powerpc64-*-aix5.[01]) - targ_defvec=rs6000_xcoff64_aix_vec - targ_selvecs="rs6000_xcoff_vec" - want64=true - ;; -#endif powerpc-*-aix[5-9]* | rs6000-*-aix[5-9]*) targ_cflags=-DAIX_WEAK_SUPPORT targ_defvec=rs6000_xcoff_vec @@ -1117,6 +1105,11 @@ case "${targ}" in want64=true ;; #ifdef BFD64 + powerpc64-*-aix5.[01]) + targ_defvec=rs6000_xcoff64_aix_vec + targ_selvecs="rs6000_xcoff_vec" + want64=true + ;; powerpc64-*-aix[5-9]*) targ_cflags=-DAIX_WEAK_SUPPORT targ_defvec=rs6000_xcoff64_aix_vec @@ -1176,6 +1169,11 @@ case "${targ}" in targ_selvecs="rs6000_xcoff_vec powerpc_elf32_le_vec powerpc_boot_vec" targ64_selvecs="powerpc_elf64_vec powerpc_elf64_le_vec" ;; + powerpc-*-haiku*) + targ_defvec=powerpc_elf32_vec + targ_selvecs="rs6000_xcoff_vec powerpc_elf32_le_vec pef_vec pef_xlib_vec powerpc_xcoff_vec powerpc_boot_vec" + targ_cflags=-D__HAIKU_TARGET__ + ;; powerpc-*-kaos*) targ_defvec=powerpc_elf32_vec targ_selvecs="powerpc_elf32_le_vec powerpc_boot_vec" diff --git a/bfd/configure b/bfd/configure index 910af3ce6d8..3d6ec5721f1 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.41. +# Generated by GNU Autoconf 2.69 for bfd 2.41.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.41' -PACKAGE_STRING='bfd 2.41' +PACKAGE_VERSION='2.41.50' +PACKAGE_STRING='bfd 2.41.50' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1400,7 +1400,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.41 to adapt to many kinds of systems. +\`configure' configures bfd 2.41.50 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1471,7 +1471,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of bfd 2.41:";; + short | recursive ) echo "Configuration of bfd 2.41.50:";; esac cat <<\_ACEOF @@ -1608,7 +1608,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -bfd configure 2.41 +bfd configure 2.41.50 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2202,7 +2202,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.41, which was +It was created by bfd $as_me 2.41.50, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3184,7 +3184,7 @@ fi # Define the identity of the package. PACKAGE='bfd' - VERSION='2.41' + VERSION='2.41.50' cat >>confdefs.h <<_ACEOF @@ -16103,7 +16103,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.41, which was +This file was extended by bfd $as_me 2.41.50, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -16169,7 +16169,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.41 +bfd config.status 2.41.50 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/bfd/development.sh b/bfd/development.sh index c0da031ca3c..f638a577c28 100644 --- a/bfd/development.sh +++ b/bfd/development.sh @@ -16,7 +16,7 @@ # along with this program. If not, see . # Controls whether to enable development-mode features by default. -development=false +development=true # Indicate whether this is a release branch. -experimental=false +experimental=true diff --git a/bfd/elf64-bpf.c b/bfd/elf64-bpf.c index 65418d1d740..aefad7da5ac 100644 --- a/bfd/elf64-bpf.c +++ b/bfd/elf64-bpf.c @@ -88,7 +88,10 @@ bpf_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED, case BFD_RELOC_BPF_64: return &bpf_elf_howto_table[ (int) R_BPF_64_64_IDX]; case BFD_RELOC_BPF_DISP32: + case BFD_RELOC_BPF_DISPCALL32: return &bpf_elf_howto_table[ (int) R_BPF_64_32_IDX]; + case BFD_RELOC_BPF_DISP16: + return &bpf_elf_howto_table[ (int) R_BPF_GNU_64_16_IDX]; default: /* Pacify gcc -Wall. */ diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index f926464d812..e7a0a9166f5 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -5281,6 +5281,39 @@ elf_x86_64_merge_symbol (struct elf_link_hash_entry *h, return true; } +static bool +elf_x86_64_section_flags (const Elf_Internal_Shdr *hdr) +{ + if ((hdr->sh_flags & SHF_X86_64_LARGE) != 0) + hdr->bfd_section->flags |= SEC_ELF_LARGE; + + return true; +} + +static bool +elf_x86_64_fake_sections (bfd *abfd ATTRIBUTE_UNUSED, + Elf_Internal_Shdr *hdr, asection *sec) +{ + if (sec->flags & SEC_ELF_LARGE) + hdr->sh_flags |= SHF_X86_64_LARGE; + + return true; +} + +static bool +elf_x86_64_copy_private_section_data (bfd *ibfd, asection *isec, + bfd *obfd, asection *osec) +{ + if (!_bfd_elf_copy_private_section_data (ibfd, isec, obfd, osec)) + return false; + + /* objcopy --set-section-flags without "large" drops SHF_X86_64_LARGE. */ + if (ibfd != obfd) + elf_section_flags (osec) &= ~SHF_X86_64_LARGE; + + return true; +} + static int elf_x86_64_additional_program_headers (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED) @@ -5408,6 +5441,8 @@ elf_x86_64_special_sections[]= #define elf_info_to_howto elf_x86_64_info_to_howto +#define bfd_elf64_bfd_copy_private_section_data \ + elf_x86_64_copy_private_section_data #define bfd_elf64_bfd_reloc_type_lookup elf_x86_64_reloc_type_lookup #define bfd_elf64_bfd_reloc_name_lookup \ elf_x86_64_reloc_name_lookup @@ -5448,6 +5483,8 @@ elf_x86_64_special_sections[]= elf_x86_64_merge_symbol #define elf_backend_special_sections \ elf_x86_64_special_sections +#define elf_backend_section_flags elf_x86_64_section_flags +#define elf_backend_fake_sections elf_x86_64_fake_sections #define elf_backend_additional_program_headers \ elf_x86_64_additional_program_headers #define elf_backend_setup_gnu_properties \ @@ -5564,6 +5601,8 @@ elf64_x86_64_copy_solaris_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUS #undef ELF_TARGET_OS #undef ELF_OSABI +#define bfd_elf32_bfd_copy_private_section_data \ + elf_x86_64_copy_private_section_data #define bfd_elf32_bfd_reloc_type_lookup \ elf_x86_64_reloc_type_lookup #define bfd_elf32_bfd_reloc_name_lookup \ diff --git a/bfd/elfnn-loongarch.c b/bfd/elfnn-loongarch.c index e9c408b2dff..70a666283af 100644 --- a/bfd/elfnn-loongarch.c +++ b/bfd/elfnn-loongarch.c @@ -1538,7 +1538,7 @@ elfNN_allocate_ifunc_dynrelocs (struct elf_link_hash_entry *h, void *inf) /* Allocate space in .plt, .got and associated reloc sections for ifunc dynamic relocs. */ -static bool +static int elfNN_allocate_local_ifunc_dynrelocs (void **slot, void *inf) { struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) *slot; @@ -1700,7 +1700,7 @@ loongarch_elf_size_dynamic_sections (bfd *output_bfd, /* Allocate .plt and .got entries, and space for local ifunc symbols. */ htab_traverse (htab->loc_hash_table, - (void *) elfNN_allocate_local_ifunc_dynrelocs, info); + elfNN_allocate_local_ifunc_dynrelocs, info); /* Don't allocate .got.plt section if there are no PLT. */ if (htab->elf.sgotplt && htab->elf.sgotplt->size == GOTPLT_HEADER_SIZE @@ -4040,12 +4040,6 @@ 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 *rela_dyn = bfd_get_section_by_name (output_bfd, ".rela.dyn"); - struct bfd_link_order *lo = NULL; - Elf_Internal_Rela *slot = NULL, *last_slot = NULL; - - if (rela_dyn) - lo = rela_dyn->map_head.link_order; if (h->plt.offset != MINUS_ONE) { @@ -4055,7 +4049,6 @@ loongarch_elf_finish_dynamic_symbol (bfd *output_bfd, uint32_t plt_entry[PLT_ENTRY_INSNS]; bfd_byte *loc; Elf_Internal_Rela rela; - asection *rela_sec = NULL; if (htab->elf.splt) { @@ -4113,26 +4106,7 @@ loongarch_elf_finish_dynamic_symbol (bfd *output_bfd, + h->root.u.def.section->output_section->vma + h->root.u.def.section->output_offset); - /* Find the space after dyn sort. */ - while (slot == last_slot || slot->r_offset != 0) - { - if (slot != last_slot) - { - slot++; - continue; - } - - BFD_ASSERT (lo != NULL); - rela_sec = lo->u.indirect.section; - lo = lo->next; - - slot = (Elf_Internal_Rela *)rela_sec->contents; - last_slot = (Elf_Internal_Rela *)(rela_sec->contents + - rela_sec->size); - } - - bed->s->swap_reloca_out (output_bfd, &rela, (bfd_byte *)slot); - rela_sec->reloc_count++; + loongarch_elf_append_rela (output_bfd, relplt, &rela); } else { @@ -4299,7 +4273,7 @@ loongarch_finish_dyn (bfd *output_bfd, struct bfd_link_info *info, bfd *dynobj, /* Finish up local dynamic symbol handling. We set the contents of various dynamic sections here. */ -static bool +static int elfNN_loongarch_finish_local_dynamic_symbol (void **slot, void *inf) { struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) *slot; @@ -4308,6 +4282,33 @@ elfNN_loongarch_finish_local_dynamic_symbol (void **slot, void *inf) return loongarch_elf_finish_dynamic_symbol (info->output_bfd, info, h, NULL); } +/* Value of struct elf_backend_data->elf_backend_output_arch_local_syms, + this function is called before elf_link_sort_relocs. + So relocation R_LARCH_IRELATIVE for local ifunc can be append to + .rela.dyn (.rela.got) by loongarch_elf_append_rela. */ + +static bool +elf_loongarch_output_arch_local_syms + (bfd *output_bfd ATTRIBUTE_UNUSED, + struct bfd_link_info *info, + void *flaginfo ATTRIBUTE_UNUSED, + int (*func) (void *, const char *, + Elf_Internal_Sym *, + asection *, + struct elf_link_hash_entry *) ATTRIBUTE_UNUSED) +{ + struct loongarch_elf_link_hash_table *htab = loongarch_elf_hash_table (info); + if (htab == NULL) + return false; + + /* Fill PLT and GOT entries for local STT_GNU_IFUNC symbols. */ + htab_traverse (htab->loc_hash_table, + elfNN_loongarch_finish_local_dynamic_symbol, + info); + + return true; +} + static bool loongarch_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) @@ -4386,10 +4387,6 @@ loongarch_elf_finish_dynamic_sections (bfd *output_bfd, elf_section_data (output_section)->this_hdr.sh_entsize = GOT_ENTRY_SIZE; } - /* Fill PLT and GOT entries for local STT_GNU_IFUNC symbols. */ - htab_traverse (htab->loc_hash_table, - (void *) elfNN_loongarch_finish_local_dynamic_symbol, info); - return true; } @@ -4654,6 +4651,8 @@ elf_loongarch64_hash_symbol (struct elf_link_hash_entry *h) #define elf_backend_size_dynamic_sections loongarch_elf_size_dynamic_sections #define elf_backend_relocate_section loongarch_elf_relocate_section #define elf_backend_finish_dynamic_symbol loongarch_elf_finish_dynamic_symbol +#define elf_backend_output_arch_local_syms \ + elf_loongarch_output_arch_local_syms #define elf_backend_finish_dynamic_sections \ loongarch_elf_finish_dynamic_sections #define elf_backend_object_p loongarch_elf_object_p diff --git a/bfd/elfxx-loongarch.c b/bfd/elfxx-loongarch.c index 2d299050c12..f27c9fdba6a 100644 --- a/bfd/elfxx-loongarch.c +++ b/bfd/elfxx-loongarch.c @@ -1711,10 +1711,12 @@ reloc_sign_bits (bfd *abfd, reloc_howto_type *howto, bfd_vma *fix_val) { case R_LARCH_SOP_POP_32_S_0_10_10_16_S2: case R_LARCH_B26: - /* Perform insn bits field. 25:16>>16, 15:0<<10. */ + /* Perform insn bits field. 15:0<<10, 25:16>>16. */ val = ((val & 0xffff) << 10) | ((val >> 16) & 0x3ff); break; + case R_LARCH_SOP_POP_32_S_0_5_10_16_S2: case R_LARCH_B21: + /* Perform insn bits field. 15:0<<10, 20:16>>16. */ val = ((val & 0xffff) << 10) | ((val >> 16) & 0x1f); break; default: diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c index b34898af8c9..ba5165766b2 100644 --- a/bfd/elfxx-riscv.c +++ b/bfd/elfxx-riscv.c @@ -1132,6 +1132,8 @@ static struct riscv_implicit_subset riscv_implicit_subsets[] = {"zvl256b", "zvl128b", check_implicit_always}, {"zvl128b", "zvl64b", check_implicit_always}, {"zvl64b", "zvl32b", check_implicit_always}, + {"zcd", "d", check_implicit_always}, + {"zcf", "f", check_implicit_always}, {"zfa", "f", check_implicit_always}, {"d", "f", check_implicit_always}, {"zfh", "zfhmin", check_implicit_always}, @@ -1173,6 +1175,9 @@ static struct riscv_implicit_subset riscv_implicit_subsets[] = {"zvksg", "zvkg", check_implicit_always}, {"zvksc", "zvks", check_implicit_always}, {"zvksc", "zvbc", check_implicit_always}, + {"zcf", "zca", check_implicit_always}, + {"zcd", "zca", check_implicit_always}, + {"zcb", "zca", check_implicit_always}, {"smaia", "ssaia", check_implicit_always}, {"smstateen", "ssstateen", check_implicit_always}, {"smepmp", "zicsr", check_implicit_always}, @@ -1307,6 +1312,10 @@ static struct riscv_supported_ext riscv_supported_std_z_ext[] = {"zvl32768b", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {"zvl65536b", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {"ztso", ISA_SPEC_CLASS_DRAFT, 0, 1, 0 }, + {"zca", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, + {"zcb", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, + {"zcf", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, + {"zcd", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {NULL, 0, 0, 0, 0} }; @@ -1942,6 +1951,13 @@ riscv_parse_check_conflicts (riscv_parse_subset_t *rps) rps->error_handler (_("rv%d does not support the `q' extension"), xlen); no_conflict = false; } + if (riscv_lookup_subset (rps->subset_list, "zcf", &subset) + && xlen > 32) + { + rps->error_handler + (_("rv%d does not support the `zcf' extension"), xlen); + no_conflict = false; + } if (riscv_lookup_subset (rps->subset_list, "zfinx", &subset) && riscv_lookup_subset (rps->subset_list, "f", &subset)) { @@ -2387,13 +2403,16 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps, case INSN_CLASS_Q: return riscv_subset_supports (rps, "q"); case INSN_CLASS_C: - return riscv_subset_supports (rps, "c"); + return (riscv_subset_supports (rps, "c") + || riscv_subset_supports (rps, "zca")); case INSN_CLASS_F_AND_C: return (riscv_subset_supports (rps, "f") - && riscv_subset_supports (rps, "c")); + && (riscv_subset_supports (rps, "c") + || riscv_subset_supports (rps, "zcf"))); case INSN_CLASS_D_AND_C: return (riscv_subset_supports (rps, "d") - && riscv_subset_supports (rps, "c")); + && (riscv_subset_supports (rps, "c") + || riscv_subset_supports (rps, "zcd"))); case INSN_CLASS_F_INX: return (riscv_subset_supports (rps, "f") || riscv_subset_supports (rps, "zfinx")); @@ -2482,10 +2501,6 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps, return riscv_subset_supports (rps, "zvkg"); case INSN_CLASS_ZVKNED: return riscv_subset_supports (rps, "zvkned"); - case INSN_CLASS_ZVKNHA: - return riscv_subset_supports (rps, "zvknha"); - case INSN_CLASS_ZVKNHB: - return riscv_subset_supports (rps, "zvknhb"); case INSN_CLASS_ZVKNHA_OR_ZVKNHB: return (riscv_subset_supports (rps, "zvknha") || riscv_subset_supports (rps, "zvknhb")); @@ -2493,6 +2508,17 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps, return riscv_subset_supports (rps, "zvksed"); case INSN_CLASS_ZVKSH: return riscv_subset_supports (rps, "zvksh"); + case INSN_CLASS_ZCB: + return riscv_subset_supports (rps, "zcb"); + case INSN_CLASS_ZCB_AND_ZBB: + return (riscv_subset_supports (rps, "zcb") + && riscv_subset_supports (rps, "zbb")); + case INSN_CLASS_ZCB_AND_ZBA: + return (riscv_subset_supports (rps, "zcb") + && riscv_subset_supports (rps, "zba")); + case INSN_CLASS_ZCB_AND_ZMMUL: + return (riscv_subset_supports (rps, "zcb") + && riscv_subset_supports (rps, "zmmul")); case INSN_CLASS_SVINVAL: return riscv_subset_supports (rps, "svinval"); case INSN_CLASS_H: @@ -2572,21 +2598,27 @@ riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps, 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"; + if (!riscv_subset_supports (rps, "f")) + { + if (!riscv_subset_supports (rps, "c") + && !riscv_subset_supports (rps, "zcf")) + return _("f' and `c', or `f' and `zcf"); + else + return "f"; + } else - return "c"; + return _("c' or `zcf"); 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"; + if (!riscv_subset_supports (rps, "d")) + { + if (!riscv_subset_supports (rps, "c") + && !riscv_subset_supports (rps, "zcd")) + return _("d' and `c', or `d' and `zcd"); + else + return "d"; + } else - return "c"; + return _("c' or `zcd"); case INSN_CLASS_F_INX: return _("f' or `zfinx"); case INSN_CLASS_D_INX: @@ -2689,14 +2721,20 @@ riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps, return _("zvkg"); case INSN_CLASS_ZVKNED: return _("zvkned"); - case INSN_CLASS_ZVKNHA: - return _("zvknha"); - case INSN_CLASS_ZVKNHB: - return _("zvknhb"); + case INSN_CLASS_ZVKNHA_OR_ZVKNHB: + return _("zvknha' or `zvknhb"); case INSN_CLASS_ZVKSED: return _("zvksed"); case INSN_CLASS_ZVKSH: return _("zvksh"); + case INSN_CLASS_ZCB: + return "zcb"; + case INSN_CLASS_ZCB_AND_ZBA: + return _("zcb' and `zba"); + case INSN_CLASS_ZCB_AND_ZBB: + return _("zcb' and `zbb"); + case INSN_CLASS_ZCB_AND_ZMMUL: + return _("zcb' and `zmmul', or `zcb' and `m"); case INSN_CLASS_SVINVAL: return "svinval"; case INSN_CLASS_H: diff --git a/bfd/libbfd.h b/bfd/libbfd.h index d4fb3107597..1fc88a88861 100644 --- a/bfd/libbfd.h +++ b/bfd/libbfd.h @@ -3346,6 +3346,8 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD", "BFD_RELOC_BPF_64", "BFD_RELOC_BPF_DISP32", + "BFD_RELOC_BPF_DISPCALL32", + "BFD_RELOC_BPF_DISP16", "BFD_RELOC_EPIPHANY_SIMM8", "BFD_RELOC_EPIPHANY_SIMM24", "BFD_RELOC_EPIPHANY_HIGH", diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c index da53f349dd0..cdd89f80330 100644 --- a/bfd/peXXigen.c +++ b/bfd/peXXigen.c @@ -838,7 +838,20 @@ _bfd_XXi_only_swap_filehdr_out (bfd * abfd, void * in, void * out) /* Use a real timestamp by default, unless the no-insert-timestamp option was chosen. */ if ((pe_data (abfd)->timestamp) == -1) - H_PUT_32 (abfd, time (0), filehdr_out->f_timdat); + { + time_t now; + char *source_date_epoch; + + /* If the SOURCE_DATE_EPOCH environment variable is + defined then use that as the time, otherwise use + the current time. */ + source_date_epoch = getenv ("SOURCE_DATE_EPOCH"); + if (source_date_epoch) + now = (time_t) strtoll (source_date_epoch, NULL, 10); + else + now = time (NULL); + H_PUT_32 (abfd, now, filehdr_out->f_timdat); + } else H_PUT_32 (abfd, pe_data (abfd)->timestamp, filehdr_out->f_timdat); diff --git a/bfd/po/bfd.pot b/bfd/po/bfd.pot index 7c09d657b91..d324c0617e9 100644 --- a/bfd/po/bfd.pot +++ b/bfd/po/bfd.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2023-07-30 14:35+0100\n" +"POT-Creation-Date: 2023-07-03 11:38+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -69,7 +69,7 @@ msgstr "" #. Unknown relocation. #: aoutx.h:4400 coff-alpha.c:601 coff-alpha.c:1521 coff-mips.c:356 -#: coff-rs6000.c:3048 coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:262 +#: coff-rs6000.c:3029 coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:262 #: 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:1063 #: elf32-bfin.c:4686 elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467 @@ -95,7 +95,7 @@ msgstr "" #: elf64-ia64-vms.c:3426 elf64-mips.c:3965 elf64-mips.c:3981 elf64-mmix.c:1264 #: elf64-nfp.c:151 elf64-ppc.c:1031 elf64-ppc.c:1385 elf64-ppc.c:1394 #: elf64-s390.c:328 elf64-s390.c:378 elf64-x86-64.c:269 elfn32-mips.c:3799 -#: elfxx-ia64.c:324 elfxx-loongarch.c:1568 elfxx-riscv.c:980 elfxx-sparc.c:589 +#: elfxx-ia64.c:324 elfxx-loongarch.c:1574 elfxx-riscv.c:980 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:3821 @@ -307,32 +307,32 @@ msgstr "" msgid "%pB: unsupported swap_aux_out for storage class %#x" msgstr "" -#: coff-rs6000.c:3138 +#: coff-rs6000.c:3119 #, c-format msgid "%pB: TOC reloc at %# to symbol `%s' with no TOC entry" msgstr "" -#: coff-rs6000.c:3262 coff64-rs6000.c:848 +#: coff-rs6000.c:3243 coff64-rs6000.c:848 #, c-format msgid "Unable to find the stub entry targeting %s" msgstr "" -#: coff-rs6000.c:3377 +#: coff-rs6000.c:3358 #, c-format msgid "%pB: TLS relocation at 0x% over non-TLS symbol %s (0x%x)\n" msgstr "" -#: coff-rs6000.c:3390 +#: coff-rs6000.c:3371 #, c-format msgid "%pB: TLS local relocation at 0x% over imported symbol %s\n" msgstr "" -#: coff-rs6000.c:3796 +#: coff-rs6000.c:3777 #, c-format msgid "%pB: relocation (%d) at 0x% has wrong r_rsize (0x%x)\n" msgstr "" -#: coff-rs6000.c:4058 coff64-rs6000.c:2031 +#: coff-rs6000.c:4039 coff64-rs6000.c:2031 #, c-format msgid "%pB: symbol `%s' has unrecognized smclas %d" msgstr "" @@ -397,13 +397,13 @@ msgstr "" msgid "R_AMD64_IMAGEBASE with __ImageBase undefined" msgstr "" -#: coff-z80.c:351 coff-z8k.c:214 elf32-nds32.c:13189 elfxx-mips.c:13515 +#: coff-z80.c:351 coff-z8k.c:214 elf32-nds32.c:13189 elfxx-mips.c:13513 #: reloc.c:8495 reloc16.c:314 #, c-format msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n" msgstr "" -#: coff-z80.c:477 coff-z8k.c:378 elfxx-mips.c:13525 reloc.c:8505 +#: coff-z80.c:477 coff-z8k.c:378 elfxx-mips.c:13523 reloc.c:8505 #, c-format msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n" msgstr "" @@ -938,7 +938,7 @@ msgstr "" #: elf32-moxie.c:292 elf32-msp430.c:1510 elf32-nds32.c:6097 elf32-or1k.c:1901 #: elf32-score.c:2738 elf32-score7.c:2549 elf32-spu.c:5089 #: elf32-tilepro.c:3376 elf32-v850.c:2298 elf32-visium.c:684 -#: elf32-xstormy16.c:934 elf64-mmix.c:1545 elfxx-mips.c:10653 +#: elf32-xstormy16.c:934 elf64-mmix.c:1545 elfxx-mips.c:10651 #: elfxx-tilegx.c:3746 msgid "internal error: unsupported relocation error" msgstr "" @@ -1111,7 +1111,7 @@ msgstr "" msgid "%pB: invalid string offset %u >= % for section `%s'" msgstr "" -#: elf.c:517 elf32-arm.c:17730 elfnn-aarch64.c:8291 elfnn-loongarch.c:4430 +#: elf.c:517 elf32-arm.c:17730 elfnn-aarch64.c:8291 elfnn-loongarch.c:4391 #, c-format msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section" msgstr "" @@ -1558,7 +1558,7 @@ msgid "" msgstr "" #: elf32-arc.c:938 elf32-iq2000.c:844 elf32-m32c.c:889 elf32-m68hc1x.c:1390 -#: elf32-ppc.c:3856 elf64-sparc.c:737 elfxx-mips.c:15687 +#: elf32-ppc.c:3856 elf64-sparc.c:737 elfxx-mips.c:15685 #, c-format msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)" msgstr "" @@ -2356,7 +2356,7 @@ msgstr "" #. Ignore init flag - it may not be set, despite the flags field containing valid data. #: elf32-bfin.c:4728 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:16373 +#: elfxx-mips.c:16371 #, c-format msgid "private flags = %lx:" msgstr "" @@ -3774,12 +3774,12 @@ msgstr "" #: elf32-sh.c:5013 #, c-format -msgid "%X%H: relocation to \"%s\" references a different segment\n" +msgid "%X%C: relocation to \"%s\" references a different segment\n" msgstr "" #: elf32-sh.c:5020 #, c-format -msgid "%H: warning: relocation to \"%s\" references a different segment\n" +msgid "%C: warning: relocation to \"%s\" references a different segment\n" msgstr "" #: elf32-sh.c:5488 elf32-sh.c:5570 @@ -4036,7 +4036,7 @@ 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:2710 -#: elfnn-aarch64.c:9999 elfnn-loongarch.c:4356 elfnn-riscv.c:3458 +#: elfnn-aarch64.c:9999 elfnn-loongarch.c:4317 elfnn-riscv.c:3458 #, c-format msgid "discarded output section: `%pA'" msgstr "" @@ -4893,7 +4893,7 @@ msgid "" "%pB(%pA+%#): misaligned symbol `%s' (%#) for relocation %s" msgstr "" -#: elf64-sparc.c:134 elfcode.h:1593 +#: elf64-sparc.c:134 elfcode.h:1582 #, c-format msgid "%pB(%pA): relocation %d has invalid symbol index %ld" msgstr "" @@ -5041,17 +5041,17 @@ msgstr "" msgid "warning: %pB has a corrupt string table index" msgstr "" -#: elfcode.h:838 +#: elfcode.h:837 #, c-format msgid "warning: %pB has a program header with invalid alignment" msgstr "" -#: elfcode.h:1050 +#: elfcode.h:1039 #, c-format msgid "%pB: %pA+%: relocation addend % too large" msgstr "" -#: elfcode.h:1313 +#: elfcode.h:1302 #, c-format msgid "%pB: version count (%) does not match symbol count (%ld)" msgstr "" @@ -5418,27 +5418,28 @@ msgstr "" msgid "error: %pB: " msgstr "" -#: elfxx-loongarch.c:1584 +#: elfxx-loongarch.c:1590 #, c-format msgid "%pB: unsupported relocation type %s" msgstr "" -#: elfxx-loongarch.c:1613 +#: elfxx-loongarch.c:1619 #, c-format msgid "%pB: unsupported bfd relocation type %#x" msgstr "" -#: elfxx-loongarch.c:1632 +#: elfxx-loongarch.c:1638 #, c-format msgid "%pB: unsupported relocation type name %s" msgstr "" -#: elfxx-loongarch.c:1685 +#: elfxx-loongarch.c:1689 #, c-format msgid "%pB: relocation %s right shift %d error 0x%lx" msgstr "" -#: elfxx-loongarch.c:1699 +#: elfxx-loongarch.c:1699 elfxx-loongarch.c:1735 elfxx-loongarch.c:1770 +#: elfxx-loongarch.c:1807 #, c-format msgid "%pB: relocation %s overflow 0x%lx" msgstr "" @@ -5471,533 +5472,533 @@ msgstr "" msgid "%X%H: unsupported branch between ISA modes\n" msgstr "" -#: elfxx-mips.c:7345 +#: elfxx-mips.c:7344 #, c-format msgid "" "%pB: incorrect `.reginfo' section size; expected %, got %" msgstr "" -#: elfxx-mips.c:7389 +#: elfxx-mips.c:7388 #, c-format msgid "%pB: warning: bad `%s' option size %u smaller than its header" msgstr "" -#: elfxx-mips.c:7625 +#: elfxx-mips.c:7624 #, c-format msgid "%pB: warning: truncated `%s' option" msgstr "" -#: elfxx-mips.c:8449 elfxx-mips.c:8575 +#: elfxx-mips.c:8447 elfxx-mips.c:8573 #, c-format msgid "" "%pB: warning: cannot determine the target function for stub section `%s'" msgstr "" -#: elfxx-mips.c:8707 +#: elfxx-mips.c:8705 #, c-format msgid "%pB: malformed reloc detected for section %s" msgstr "" -#: elfxx-mips.c:8807 +#: elfxx-mips.c:8805 #, c-format msgid "%pB: GOT reloc at %# not expected in executables" msgstr "" -#: elfxx-mips.c:8947 +#: elfxx-mips.c:8945 #, c-format msgid "%pB: CALL16 reloc at %# not against global symbol" msgstr "" -#: elfxx-mips.c:9250 +#: elfxx-mips.c:9248 #, c-format msgid "" "%X%H: relocation %s against `%s' cannot be used when making a shared object; " "recompile with -fPIC\n" msgstr "" -#: elfxx-mips.c:9376 +#: elfxx-mips.c:9374 #, c-format msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported" msgstr "" -#: elfxx-mips.c:9379 +#: elfxx-mips.c:9377 #, c-format msgid "non-dynamic symbol %s in dynamic symbol table" msgstr "" -#: elfxx-mips.c:9599 +#: elfxx-mips.c:9597 #, c-format msgid "non-dynamic relocations refer to dynamic symbol %s" msgstr "" -#: elfxx-mips.c:10534 +#: elfxx-mips.c:10532 #, c-format msgid "" "%pB: can't find matching LO16 reloc against `%s' for %s at %# in " "section `%pA'" msgstr "" -#: elfxx-mips.c:10674 +#: elfxx-mips.c:10672 msgid "" "small-data section exceeds 64KB; lower small-data size limit (see option -G)" msgstr "" -#: elfxx-mips.c:10693 +#: elfxx-mips.c:10691 msgid "cannot convert a jump to JALX for a non-word-aligned address" msgstr "" -#: elfxx-mips.c:10696 +#: elfxx-mips.c:10694 msgid "jump to a non-word-aligned address" msgstr "" -#: elfxx-mips.c:10697 +#: elfxx-mips.c:10695 msgid "jump to a non-instruction-aligned address" msgstr "" -#: elfxx-mips.c:10700 +#: elfxx-mips.c:10698 msgid "cannot convert a branch to JALX for a non-word-aligned address" msgstr "" -#: elfxx-mips.c:10702 +#: elfxx-mips.c:10700 msgid "branch to a non-instruction-aligned address" msgstr "" -#: elfxx-mips.c:10704 +#: elfxx-mips.c:10702 msgid "PC-relative load from unaligned address" msgstr "" -#: elfxx-mips.c:11004 +#: elfxx-mips.c:11002 #, c-format msgid "" "%pB: `%pA' entry VMA of %# outside the 32-bit range supported; " "consider using `-Ttext-segment=...'" msgstr "" -#: elfxx-mips.c:11119 elfxx-mips.c:11706 +#: elfxx-mips.c:11117 elfxx-mips.c:11704 #, c-format msgid "%pB: `%pA' offset of % from `%pA' beyond the range of ADDIUPC" msgstr "" -#: elfxx-mips.c:11678 +#: elfxx-mips.c:11676 #, c-format msgid "" "%pB: `%pA' start VMA of %# outside the 32-bit range supported; " "consider using `-Ttext-segment=...'" msgstr "" -#: elfxx-mips.c:13424 reloc.c:8417 +#: elfxx-mips.c:13422 reloc.c:8417 #, c-format msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n" msgstr "" -#: elfxx-mips.c:13534 reloc.c:8514 +#: elfxx-mips.c:13532 reloc.c:8514 #, c-format msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n" msgstr "" -#: elfxx-mips.c:14736 +#: elfxx-mips.c:14734 #, c-format msgid "%pB: unknown architecture %s" msgstr "" -#: elfxx-mips.c:15264 +#: elfxx-mips.c:15262 #, c-format msgid "%pB: illegal section name `%pA'" msgstr "" -#: elfxx-mips.c:15541 +#: elfxx-mips.c:15539 #, c-format msgid "%pB: warning: linking abicalls files with non-abicalls files" msgstr "" -#: elfxx-mips.c:15558 +#: elfxx-mips.c:15556 #, c-format msgid "%pB: linking 32-bit code with 64-bit code" msgstr "" -#: elfxx-mips.c:15590 elfxx-mips.c:15656 elfxx-mips.c:15671 +#: elfxx-mips.c:15588 elfxx-mips.c:15654 elfxx-mips.c:15669 #, c-format msgid "%pB: linking %s module with previous %s modules" msgstr "" -#: elfxx-mips.c:15614 +#: elfxx-mips.c:15612 #, c-format msgid "%pB: ABI mismatch: linking %s module with previous %s modules" msgstr "" -#: elfxx-mips.c:15639 +#: elfxx-mips.c:15637 #, c-format msgid "%pB: ASE mismatch: linking %s module with previous %s modules" msgstr "" -#: elfxx-mips.c:15773 +#: elfxx-mips.c:15771 #, 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:15779 +#: elfxx-mips.c:15777 #, c-format msgid "" "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %s" msgstr "" -#: elfxx-mips.c:15785 +#: elfxx-mips.c:15783 #, c-format msgid "" "warning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %d" msgstr "" -#: elfxx-mips.c:15799 +#: elfxx-mips.c:15797 #, c-format msgid "warning: %pB uses %s (set by %pB), %pB uses %s" msgstr "" -#: elfxx-mips.c:15818 +#: elfxx-mips.c:15816 #, c-format msgid "warning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %d" msgstr "" -#: elfxx-mips.c:15830 +#: elfxx-mips.c:15828 #, c-format msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %s" msgstr "" -#: elfxx-mips.c:15839 +#: elfxx-mips.c:15837 #, c-format msgid "" "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %" "d" msgstr "" -#: elfxx-mips.c:15901 +#: elfxx-mips.c:15899 #, c-format msgid "%pB: endianness incompatible with that of the selected emulation" msgstr "" -#: elfxx-mips.c:15915 +#: elfxx-mips.c:15913 #, c-format msgid "%pB: ABI is incompatible with that of the selected emulation" msgstr "" -#: elfxx-mips.c:15968 +#: elfxx-mips.c:15966 #, c-format msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags" msgstr "" -#: elfxx-mips.c:15973 +#: elfxx-mips.c:15971 #, c-format msgid "" "%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags" msgstr "" -#: elfxx-mips.c:15977 +#: elfxx-mips.c:15975 #, c-format msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags" msgstr "" -#: elfxx-mips.c:15984 +#: elfxx-mips.c:15982 #, c-format msgid "" "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags" msgstr "" -#: elfxx-mips.c:15988 +#: elfxx-mips.c:15986 #, c-format msgid "" "%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)" msgstr "" -#: elfxx-mips.c:16179 +#: elfxx-mips.c:16177 msgid "-mips32r2 -mfp64 (12 callee-saved)" msgstr "" -#: elfxx-mips.c:16241 elfxx-mips.c:16252 +#: elfxx-mips.c:16239 elfxx-mips.c:16250 msgid "None" msgstr "" -#: elfxx-mips.c:16243 elfxx-mips.c:16312 +#: elfxx-mips.c:16241 elfxx-mips.c:16310 msgid "Unknown" msgstr "" -#: elfxx-mips.c:16323 +#: elfxx-mips.c:16321 #, c-format msgid "Hard or soft float\n" msgstr "" -#: elfxx-mips.c:16326 +#: elfxx-mips.c:16324 #, c-format msgid "Hard float (double precision)\n" msgstr "" -#: elfxx-mips.c:16329 +#: elfxx-mips.c:16327 #, c-format msgid "Hard float (single precision)\n" msgstr "" -#: elfxx-mips.c:16332 +#: elfxx-mips.c:16330 #, c-format msgid "Soft float\n" msgstr "" -#: elfxx-mips.c:16335 +#: elfxx-mips.c:16333 #, c-format msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n" msgstr "" -#: elfxx-mips.c:16338 +#: elfxx-mips.c:16336 #, c-format msgid "Hard float (32-bit CPU, Any FPU)\n" msgstr "" -#: elfxx-mips.c:16341 +#: elfxx-mips.c:16339 #, c-format msgid "Hard float (32-bit CPU, 64-bit FPU)\n" msgstr "" -#: elfxx-mips.c:16344 +#: elfxx-mips.c:16342 #, c-format msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n" msgstr "" -#: elfxx-mips.c:16376 +#: elfxx-mips.c:16374 #, c-format msgid " [abi=O32]" msgstr "" -#: elfxx-mips.c:16378 +#: elfxx-mips.c:16376 #, c-format msgid " [abi=O64]" msgstr "" -#: elfxx-mips.c:16380 +#: elfxx-mips.c:16378 #, c-format msgid " [abi=EABI32]" msgstr "" -#: elfxx-mips.c:16382 +#: elfxx-mips.c:16380 #, c-format msgid " [abi=EABI64]" msgstr "" -#: elfxx-mips.c:16384 +#: elfxx-mips.c:16382 #, c-format msgid " [abi unknown]" msgstr "" -#: elfxx-mips.c:16386 +#: elfxx-mips.c:16384 #, c-format msgid " [abi=N32]" msgstr "" -#: elfxx-mips.c:16388 +#: elfxx-mips.c:16386 #, c-format msgid " [abi=64]" msgstr "" -#: elfxx-mips.c:16390 +#: elfxx-mips.c:16388 #, c-format msgid " [no abi set]" msgstr "" -#: elfxx-mips.c:16415 +#: elfxx-mips.c:16413 #, c-format msgid " [unknown ISA]" msgstr "" -#: elfxx-mips.c:16435 +#: elfxx-mips.c:16433 #, c-format msgid " [not 32bitmode]" msgstr "" -#: elfxx-riscv.c:1660 +#: elfxx-riscv.c:1657 #, c-format msgid "x ISA extension `%s' must be set with the versions" msgstr "" -#: elfxx-riscv.c:1666 +#: elfxx-riscv.c:1663 #, c-format msgid "cannot find default versions of the ISA extension `%s'" msgstr "" -#: elfxx-riscv.c:1772 +#: elfxx-riscv.c:1769 #, c-format msgid "%s: first ISA extension must be `e', `i' or `g'" msgstr "" -#: elfxx-riscv.c:1796 +#: elfxx-riscv.c:1793 #, c-format msgid "%s: unknown standard ISA extension or prefix class `%c'" msgstr "" -#: elfxx-riscv.c:1832 +#: elfxx-riscv.c:1829 #, c-format msgid "%s: invalid prefixed ISA extension `%s' ends with p" msgstr "" -#: elfxx-riscv.c:1856 +#: elfxx-riscv.c:1853 #, c-format msgid "%s: unknown prefixed ISA extension `%s'" msgstr "" -#: elfxx-riscv.c:1880 +#: elfxx-riscv.c:1877 #, c-format msgid "%s: prefixed ISA extension must separate with _" msgstr "" -#: elfxx-riscv.c:1934 +#: elfxx-riscv.c:1931 #, c-format msgid "rv%d does not support the `e' extension" msgstr "" -#: elfxx-riscv.c:1942 +#: elfxx-riscv.c:1939 #, c-format msgid "rv%d does not support the `q' extension" msgstr "" -#: elfxx-riscv.c:1949 +#: elfxx-riscv.c:1946 msgid "`zfinx' is conflict with the `f/d/q/zfh/zfhmin' extension" msgstr "" -#: elfxx-riscv.c:1970 +#: elfxx-riscv.c:1967 msgid "zvl*b extensions need to enable either `v' or `zve' extension" msgstr "" -#: elfxx-riscv.c:2032 +#: elfxx-riscv.c:2029 #, c-format msgid "%s: ISA string cannot contain uppercase letters" msgstr "" -#: elfxx-riscv.c:2060 +#: elfxx-riscv.c:2057 #, c-format msgid "%s: ISA string must begin with rv32 or rv64" msgstr "" -#: elfxx-riscv.c:2286 +#: elfxx-riscv.c:2283 #, c-format msgid "invalid ISA extension ends with p in .option arch `%s'" msgstr "" -#: elfxx-riscv.c:2309 +#: elfxx-riscv.c:2306 #, c-format msgid "unknown ISA extension `%s' in .option arch `%s'" msgstr "" -#: elfxx-riscv.c:2320 +#: elfxx-riscv.c:2317 #, c-format msgid "cannot + or - base extension `%s' in .option arch `%s'" msgstr "" -#: elfxx-riscv.c:2528 elfxx-riscv.c:2730 +#: elfxx-riscv.c:2525 elfxx-riscv.c:2727 msgid "internal: unreachable INSN_CLASS_*" msgstr "" -#: elfxx-riscv.c:2561 +#: elfxx-riscv.c:2558 msgid "m' or `zmmul" msgstr "" -#: elfxx-riscv.c:2577 +#: elfxx-riscv.c:2574 msgid "f' and `c" msgstr "" -#: elfxx-riscv.c:2585 +#: elfxx-riscv.c:2582 msgid "d' and `c" msgstr "" -#: elfxx-riscv.c:2591 +#: elfxx-riscv.c:2588 msgid "f' or `zfinx" msgstr "" -#: elfxx-riscv.c:2593 +#: elfxx-riscv.c:2590 msgid "d' or `zdinx" msgstr "" -#: elfxx-riscv.c:2595 +#: elfxx-riscv.c:2592 msgid "q' or `zqinx" msgstr "" -#: elfxx-riscv.c:2597 +#: elfxx-riscv.c:2594 msgid "zfh' or `zhinx" msgstr "" -#: elfxx-riscv.c:2601 +#: elfxx-riscv.c:2598 msgid "zfhmin' or `zhinxmin" msgstr "" -#: elfxx-riscv.c:2612 +#: elfxx-riscv.c:2609 msgid "zfhmin' and `d', or `zhinxmin' and `zdinx" msgstr "" -#: elfxx-riscv.c:2623 +#: elfxx-riscv.c:2620 msgid "zfhmin' and `q', or `zhinxmin' and `zqinx" msgstr "" -#: elfxx-riscv.c:2629 +#: elfxx-riscv.c:2626 msgid "d' and `zfa" msgstr "" -#: elfxx-riscv.c:2637 +#: elfxx-riscv.c:2634 msgid "q' and `zfa" msgstr "" -#: elfxx-riscv.c:2645 +#: elfxx-riscv.c:2642 msgid "zfh' and `zfa" msgstr "" -#: elfxx-riscv.c:2665 +#: elfxx-riscv.c:2662 msgid "zbb' or `zbkb" msgstr "" -#: elfxx-riscv.c:2667 +#: elfxx-riscv.c:2664 msgid "zbc' or `zbkc" msgstr "" -#: elfxx-riscv.c:2675 +#: elfxx-riscv.c:2672 msgid "zknd' or `zkne" msgstr "" -#: elfxx-riscv.c:2681 +#: elfxx-riscv.c:2678 msgid "v' or `zve64x' or `zve32x" msgstr "" -#: elfxx-riscv.c:2683 +#: elfxx-riscv.c:2680 msgid "v' or `zve64d' or `zve64f' or `zve32f" msgstr "" -#: elfxx-riscv.c:2685 +#: elfxx-riscv.c:2682 msgid "zvbb" msgstr "" -#: elfxx-riscv.c:2687 +#: elfxx-riscv.c:2684 msgid "zvbc" msgstr "" -#: elfxx-riscv.c:2689 +#: elfxx-riscv.c:2686 msgid "zvkg" msgstr "" -#: elfxx-riscv.c:2691 +#: elfxx-riscv.c:2688 msgid "zvkned" msgstr "" -#: elfxx-riscv.c:2693 +#: elfxx-riscv.c:2690 msgid "zvknha" msgstr "" -#: elfxx-riscv.c:2695 +#: elfxx-riscv.c:2692 msgid "zvknhb" msgstr "" -#: elfxx-riscv.c:2697 +#: elfxx-riscv.c:2694 msgid "zvksed" msgstr "" -#: elfxx-riscv.c:2699 +#: elfxx-riscv.c:2696 msgid "zvksh" msgstr "" -#: elfxx-riscv.c:2703 +#: elfxx-riscv.c:2700 msgid "h" msgstr "" @@ -9100,7 +9101,7 @@ msgstr "" msgid "Internal error: unreachable." msgstr "" -#: elfnn-loongarch.c:3848 elfnn-riscv.c:4766 +#: elfnn-loongarch.c:3809 elfnn-riscv.c:4766 #, c-format msgid "" "%pB(%pA+%#): % bytes required for alignment to %-" diff --git a/bfd/reloc.c b/bfd/reloc.c index fbc67ac7280..07d35e45c8b 100644 --- a/bfd/reloc.c +++ b/bfd/reloc.c @@ -7753,6 +7753,10 @@ ENUM BFD_RELOC_BPF_64 ENUMX BFD_RELOC_BPF_DISP32 +ENUMX + BFD_RELOC_BPF_DISPCALL32 +ENUMX + BFD_RELOC_BPF_DISP16 ENUMDOC Linux eBPF relocations. diff --git a/bfd/section.c b/bfd/section.c index 73770294e56..e9af59dfd15 100644 --- a/bfd/section.c +++ b/bfd/section.c @@ -359,6 +359,9 @@ CODE_FRAGMENT . TMS320C54X only. *} .#define SEC_TIC54X_BLOCK 0x10000000 . +. {* This section has the SHF_X86_64_LARGE flag. This is ELF x86-64 only. *} +.#define SEC_ELF_LARGE 0x10000000 +. . {* Conditionally link this section; do not link if there are no . references found to any symbol in the section. This is for TI . TMS320C54X only. *} diff --git a/bfd/version.h b/bfd/version.h index 352e6813bbf..bf956a9dfef 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 20230730 +#define BFD_VERSION_DATE 20230802 #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 d8dfc1ce1ca..435efecb1cd 100644 --- a/bfd/version.m4 +++ b/bfd/version.m4 @@ -1 +1 @@ -m4_define([BFD_VERSION], [2.41]) +m4_define([BFD_VERSION], [2.41.50]) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 01406cfa2a5..65cff807bec 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,7 +1,26 @@ -2023-07-30 Nick Clifton +2023-07-30 Jose E. Marchesi - This is the 2.41 release. - * configure: Regenerate. + * readelf.c (get_machine_flags): Recognize and pretty print BPF + machine flags. + +2023-07-24 Johannes Schauer Marin Rodrigues + + * doc/binutils.texi (objcopy): Document change in behaviour of + objcopy's --preserve-dates command line option. + +2023-07-09 Fangrui Song + + PR 30592 + * NEWS: Mention the new feature for objcopy. + * doc/binutils.texi: Mention "large". + * objcopy.c (parse_flags): Parse "large". + (check_new_section_flags): Error if "large" is used with a + non-x86-64 ELF target. + * testsuite/binutils-all/x86-64/large-sections.d: New. + * testsuite/binutils-all/x86-64/large-sections.s: New. + * testsuite/binutils-all/x86-64/large-sections-i386.d: New. + * testsuite/binutils-all/x86-64/large-sections-2.d: New. + * testsuite/binutils-all/x86-64/large-sections-2-x32.d: New. 2023-07-03 Nick Clifton diff --git a/binutils/NEWS b/binutils/NEWS index 563062c6904..d64cae009eb 100644 --- a/binutils/NEWS +++ b/binutils/NEWS @@ -1,5 +1,8 @@ -*- text -*- +* objcopy --set-section-flags now supports "large" to set SHF_X86_64_LARGE + for ELF x86-64 objects. + Changes in 2.41: * The MIPS port now supports the Sony Interactive Entertainment Allegrex diff --git a/binutils/README-how-to-make-a-release b/binutils/README-how-to-make-a-release index a9917927d02..aaf770418ae 100644 --- a/binutils/README-how-to-make-a-release +++ b/binutils/README-how-to-make-a-release @@ -34,6 +34,10 @@ How to perform a release. directories and the top level Makefile and configure files. Also consider updating the toplevel libtool files. +------------------------------------------------- +How to create the release branch. +------------------------------------------------- + Approx time to complete from here: 2 hours .... 2.5 If you have not built from the sources recently then now is the @@ -52,8 +56,8 @@ Approx time to complete from here: 2 hours .... 4. Create the release branch using: - git branch binutils-2_41-branch - git push origin binutils-2_41-branch + git branch binutils-2_42-branch + git push origin binutils-2_42-branch If you get a message like: @@ -85,8 +89,8 @@ Approx time to complete from here: 2 hours .... ask Joel Brobecker . 7. Rename the current HEAD version entry in Bugzilla, and create a - new one. E.g. rename "2.41 (HEAD)" to 2.41, and create - "2.42 (HEAD)": + new one. E.g. rename "2.42 (HEAD)" to 2.42, and create + "2.43 (HEAD)": https://sourceware.org/bugzilla/editversions.cgi?product=binutils @@ -99,13 +103,13 @@ Approx time to complete from here: 2 hours .... and the version number on the MAINLINE should be set to 2.41.50 - ie half way to 2.42 release. - So the branch bfd/version.m4 has: + So the BRANCH bfd/version.m4 has: - m4_define([BFD_VERSION], [2.40.90]) + m4_define([BFD_VERSION], [2.41.90]) - and the mainline has: + and the MAINLINE has: - m4_define([BFD_VERSION], [2.41.50]) + m4_define([BFD_VERSION], [2.42.50]) Regenerate various files on both branch and HEAD by configuring with "--enable-maintainer-mode --enable-gold --enable-shared" and then building @@ -137,21 +141,21 @@ Approx time to complete from here: 2 hours .... xz -9 binutils-.tar eg: - touch -d 2023-06-01 binutils-2.40.90/gas/doc/.dirstamp - tar rvf binutils-2.40.90.tar binutils-2.40.90/gas/doc/.ditstamp - rm binutils-2.40.90.tar.xz - xz -9 binutils-2.40.90.tar + touch -d 2024-01-01 binutils-2.41.90/gas/doc/.dirstamp + tar rvf binutils-2.41.90.tar binutils-2.41.90/gas/doc/.dirstamp + rm binutils-2.41.90.tar.xz + xz -9 binutils-2.41.90.tar ...END OF FIXME c. Build a test target using this tarball. - cp binutils-2.40.90.tar.xz /dev/shm + cp binutils-2.41.90.tar.xz /dev/shm pushd /dev/shm - tar xvf binutils-2.40.90.tar.xz + tar xvf binutils-2.41.90.tar.xz mkdir build cd build - ../binutils-2.40.90/configure --quiet --enable-gold + ../binutils-2.41.90/configure --quiet --enable-gold make popd @@ -173,11 +177,11 @@ Approx time to complete from here: 2 hours .... ------------------------------------------------------------------------ Dear Translation Project - The 2.40 release branch has been created for the GNU Binutils project. + The 2.42 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.39.90.tar.xz + https://sourceware.org/pub/binutils/snapshots/binutils-2.41.90.tar.xz We hope to make the official release of the sources on the although that could change if there are important bugs that need to @@ -188,7 +192,7 @@ Dear Translation Project binutils mailing list. Set a date for when the release will actually happen. Something like: ------------------------------------------------------------------------- + Hi Everyone, The branch has now been created: @@ -219,25 +223,39 @@ Hi Everyone, architectures... ============================================================================== +============================================================================== -When the time comes to actually make the release.... +For the next few weeks, monitor the mailing list for new translations +and respond to any requests to have patches applied to the branch. +============================================================================== +============================================================================== + +Then, a couple of weeks later ... + +------------------------------------------------- +How to create the release. +------------------------------------------------- 20. Make sure that the branch sources still build, test and install correctly. Make sure that the sources are clean, without any patch files (.reg .orig *~) left over. cd + git pull git clean -fdx + cd + make 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.40.90" becomes "2.41". NB/ Not: "2.41.00" + value. Eg "2.41.90" becomes "2.42". NB/ Not: "2.42.00" b. Change bfd/development.sh to set all values to "false". c. Regenerate the configure and makefiles. And *info* files. + cd make all-gas all-ld all-binutils all-gprof all-gold all-gprofng all-libctf make info @@ -259,7 +277,7 @@ When the time comes to actually make the release.... need to agree to have it there. e. Add ChangeLog entries for all of the updates and add a - "this-is-the-2.41-release" comment and commit. + "this-is-the-2.42-release" comment and commit. git add . git commit @@ -281,7 +299,11 @@ When the time comes to actually make the release.... DEVO_SUPPORT variable in the src-release.sh script. If they are needed then add them. - Create the release tarballs: + PARANOIA: Check that there are no pending commits: + + git status + + Then create the release tarballs: ./src-release.sh -b -g -l -x binutils @@ -326,14 +348,15 @@ When the time comes to actually make the release.... [optional: add "-u XXXXX" to sign with a gpg key] enter a tag message such as: "Official GNU Binutils 2.4x release" - git tag -a binutils-2_41 -u DD9E3C4F <=== Be careful to get the tag right + git tag -a -u + git tag -a binutils-2_42 -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. Then push the release: - git push origin binutils-2_41 + git push origin binutils-2_42 If you get an error message along the lines of: "Invalid revision range ..." @@ -341,7 +364,7 @@ When the time comes to actually make the release.... 27. Upload the tarballs to ftp.gnu.org. - for A in bz2 gz lz xz ; do gnupload --to ftp.gnu.org:binutils binutils-2.41.tar.$A ; done + gnupload --to ftp.gnu.org:binutils binutils-2.42.tar.* Be prepared to provide the password for the key, if you signed the binaries. @@ -369,7 +392,7 @@ When the time comes to actually make the release.... 29. Update web pages. For sourceware.org: Create a new documentation folder on the sourceware.org web - pages as /sourceware/www/sourceware/htdocs/binutils/docs-2.3x. + pages as /sourceware/www/sourceware/htdocs/binutils/docs-2.4x. sftp sourceware.org cd /sourceware/www/sourceware/htdocs/binutils @@ -378,9 +401,9 @@ When the time comes to actually make the release.... mkdir as mkdir bfd mkdir binutils - mkdir gprof + mkdir gprof [NB/ gprofng is not needed] mkdir ld - cd ../docs-2.3(x-1) + cd ../docs-2.4(x-1) get index.html Update the (local copy of the) index.html file to point to the @@ -412,7 +435,7 @@ When the time comes to actually make the release.... put bfd.pdf cd binutils - lcd ../../binutils/binutils <=== NB/ Path not like others + lcd ../../binutils/binutils_html <=== NB/ Path not like others put * cd .. lcd ../doc <=== Also not like the others @@ -473,7 +496,7 @@ Hi FSF Webmasters, https://www.gnu.org/software/binutils/binutils.html be updated to indicate that there is now a newer version available - (2.3x). I have already updated the related page on the sourceware + (2.4x). I have already updated the related page on the sourceware website so this might be useful as a template: https://sourceware.org/binutils/ @@ -536,7 +559,7 @@ Cheers date suffix keeps the version lower than the trunk version. Regenerate files. Commit these changes. - 33. Email the binutils list telling everyone that the 2.34 branch + 33. Email the binutils list telling everyone that the 2.4x branch is now open for business as usual and that patches no longer need special approval. @@ -544,7 +567,7 @@ Cheers any pending obsolete targets into the definitely obsolete section. Create a changelog entry and commit. - + Sit back and relax, you are all done. -------------------------------------------------------------------------- How to perform a POINT release. -------------------------------------------------------------------------- diff --git a/binutils/bucomm.h b/binutils/bucomm.h index 0c11c0b868d..b70879078ee 100644 --- a/binutils/bucomm.h +++ b/binutils/bucomm.h @@ -76,12 +76,6 @@ extern void set_times (const char *, const struct stat *); extern int smart_rename (const char *, const char *, int, struct stat *, bool); - -/* In libiberty. */ -void *xmalloc (size_t); - -void *xrealloc (void *, size_t); - #if __GNUC__ >= 7 #define _mul_overflow(a, b, res) __builtin_mul_overflow (a, b, res) #else diff --git a/binutils/configure b/binutils/configure index e0bf7f1e887..2b7462b4022 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.41. +# Generated by GNU Autoconf 2.69 for binutils 2.41.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.41' -PACKAGE_STRING='binutils 2.41' +PACKAGE_VERSION='2.41.50' +PACKAGE_STRING='binutils 2.41.50' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1401,7 +1401,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.41 to adapt to many kinds of systems. +\`configure' configures binutils 2.41.50 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1472,7 +1472,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of binutils 2.41:";; + short | recursive ) echo "Configuration of binutils 2.41.50:";; esac cat <<\_ACEOF @@ -1631,7 +1631,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -binutils configure 2.41 +binutils configure 2.41.50 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2099,7 +2099,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.41, which was +It was created by binutils $as_me 2.41.50, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3081,7 +3081,7 @@ fi # Define the identity of the package. PACKAGE='binutils' - VERSION='2.41' + VERSION='2.41.50' cat >>confdefs.h <<_ACEOF @@ -14542,7 +14542,6 @@ _ACEOF fi -all_targets=false BUILD_SRCONV= BUILD_DLLTOOL= DLLTOOL_DEFS= @@ -14559,140 +14558,137 @@ od_vectors= for targ in $target $canon_targets do - if test "x$targ" = "xall"; then - all_targets=true + case $targ in + all | *-*-hms*) BUILD_SRCONV='$(SRCONV_PROG)' - BUILD_MISC="${BUILD_MISC} "'bin2c$(EXEEXT_FOR_BUILD)' - BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' - BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' + ;; + esac + + case $targ in + all | spu-*-*) + BUILD_MISC='bin2c$(EXEEXT_FOR_BUILD)' + ;; + esac + + case $targ in + powerpc*-*-linux* | powerpc*-*-elf* | powerpc*-*-eabi*) + BUILD_INSTALL_MISC=embedspu + ;; + esac + + case $targ in + mep-*) + OBJDUMP_DEFS="-DSKIP_ZEROES=256 -DSKIP_ZEROES_AT_END=0" + ;; + powerpc*-aix5.[01]) + ;; + powerpc*-aix[5-9].*) + OBJDUMP_DEFS="-DAIX_WEAK_SUPPORT" + ;; + esac + + case $targ in + aarch64-*-mingw*) BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' if test -z "$DLLTOOL_DEFAULT"; then - DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_I386" + DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_AARCH64" + fi + DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_AARCH64" + BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' + BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' + BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)' + ;; + arm-wince-pe* | arm-*-wince | arm*-*-cegcc* | arm*-*-mingw32ce*) + BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' + if test -z "$DLLTOOL_DEFAULT"; then + DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_ARM_WINCE" + fi + DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM_WINCE -DDLLTOOL_ARM" + BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' + BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' + ;; + arm-*-pe*) + BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' + if test -z "$DLLTOOL_DEFAULT"; then + DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_ARM" + fi + DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM" + BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' + BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' + ;; + i[3-7]86-*-pe* | i[3-7]86-*-cygwin* | i[3-7]86-*-mingw32** | all) + BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' + if test -z "$DLLTOOL_DEFAULT"; then + DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_I386" fi DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_I386" + BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' + BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)' - od_vectors="$od_vectors objdump_private_desc_xcoff objdump_private_desc_pe" - else - case $targ in - *-*-hms*) BUILD_SRCONV='$(SRCONV_PROG)' ;; - esac - - case $targ in - aarch64-*-mingw*) - BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' - if test -z "$DLLTOOL_DEFAULT"; then - DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_AARCH64" - fi - DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_AARCH64" - BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' - BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' - BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)' - ;; - arm-wince-pe* | arm-*-wince | arm*-*-cegcc* | arm*-*-mingw32ce*) - BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' - if test -z "$DLLTOOL_DEFAULT"; then - DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_ARM_WINCE" - fi - DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM_WINCE -DDLLTOOL_ARM" - BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' - BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' - ;; - arm-*-pe*) - BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' - if test -z "$DLLTOOL_DEFAULT"; then - DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_ARM" - fi - DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM" - BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' - BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' - ;; - x86_64-*-mingw* | x86_64-*-cygwin*) - BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' - if test -z "$DLLTOOL_DEFAULT"; then - DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_MX86_64" - fi - DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MX86_64" - BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' - BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' - BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)' - ;; - i[3-7]86-*-pe* | i[3-7]86-*-cygwin* | i[3-7]86-*-mingw32**) - BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' - if test -z "$DLLTOOL_DEFAULT"; then + ;; + i[3-7]86-*-interix) + BUILD_DLLTOOL='$(DLLTOOL_PROG)' + if test -z "$DLLTOOL_DEFAULT"; then DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_I386" - fi - DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_I386" - BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' - BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' - BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)' - ;; - i[3-7]86-*-interix) - BUILD_DLLTOOL='$(DLLTOOL_PROG)' - if test -z "$DLLTOOL_DEFAULT"; then - DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_I386" - fi - DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_I386" - ;; - powerpc*-aix5.[01]) - ;; - powerpc*-aix[5-9].*) - OBJDUMP_DEFS="-DAIX_WEAK_SUPPORT" - ;; - powerpc*-*-linux* | powerpc*-*-elf* | powerpc*-*-eabi*) - case "$BUILD_INSTALL_MISC" in - *embedspu*) ;; - *) BUILD_INSTALL_MISC="${BUILD_INSTALL_MISC} embedspu" - esac - ;; - sh*-*-pe) - BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' - if test -z "$DLLTOOL_DEFAULT"; then - DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_SH" - fi - DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_SH" - BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' - BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' - ;; - spu-*-*) - BUILD_MISC="${BUILD_MISC} "'bin2c$(EXEEXT_FOR_BUILD)' - ;; - mcore-*-pe) - BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' - if test -z "$DLLTOOL_DEFAULT"; then + fi + DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_I386" + ;; + mcore-*-pe) + BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' + if test -z "$DLLTOOL_DEFAULT"; then DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_MCORE" - fi - DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MCORE" - BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' - BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' - ;; - mcore-*-elf) - BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' - if test -z "$DLLTOOL_DEFAULT"; then + fi + DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MCORE" + BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' + BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' + ;; + mcore-*-elf) + BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' + if test -z "$DLLTOOL_DEFAULT"; then DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_MCORE_ELF" - fi - DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MCORE_ELF" - ;; - mep-*) - OBJDUMP_DEFS="-DSKIP_ZEROES=256 -DSKIP_ZEROES_AT_END=0" - ;; - esac + fi + DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MCORE_ELF" + ;; + sh*-*-pe) + BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' + if test -z "$DLLTOOL_DEFAULT"; then + DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_SH" + fi + DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_SH" + BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' + BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' + ;; + x86_64-*-mingw* | x86_64-*-cygwin*) + BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' + if test -z "$DLLTOOL_DEFAULT"; then + DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_MX86_64" + fi + DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MX86_64" + BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' + BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' + BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)' + ;; + esac - # Add objdump private vectors. - case $targ in - avr-*-*) - od_vectors="$od_vectors objdump_private_desc_elf32_avr" - ;; - powerpc*-*-aix* | rs6000-*-aix*) - od_vectors="$od_vectors objdump_private_desc_xcoff" - ;; - *-*-pe* | *-*-cygwin* | *-*-mingw*) - od_vectors="$od_vectors objdump_private_desc_pe" - ;; - *-*-darwin*) - od_vectors="$od_vectors objdump_private_desc_mach_o" - ;; - esac - fi + # Add objdump private vectors. + case $targ in + all) + od_vectors="objdump_private_desc_elf32_avr objdump_private_desc_xcoff\ + objdump_private_desc_pe objdump_private_desc_mach_o" + ;; + avr-*-*) + od_vectors="$od_vectors objdump_private_desc_elf32_avr" + ;; + powerpc*-*-aix* | rs6000-*-aix*) + od_vectors="$od_vectors objdump_private_desc_xcoff" + ;; + *-*-pe* | *-*-cygwin* | *-*-mingw*) + od_vectors="$od_vectors objdump_private_desc_pe" + ;; + *-*-darwin*) + od_vectors="$od_vectors objdump_private_desc_mach_o" + ;; + esac done # Uniq objdump private vector, build objdump target ofiles. @@ -15332,7 +15328,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.41, which was +This file was extended by binutils $as_me 2.41.50, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -15398,7 +15394,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.41 +binutils config.status 2.41.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 b5798bf755f..30cd7b9ed1e 100644 --- a/binutils/configure.ac +++ b/binutils/configure.ac @@ -319,7 +319,6 @@ fi AC_CHECK_HEADER(iconv.h) AM_ICONV -all_targets=false BUILD_SRCONV= BUILD_DLLTOOL= DLLTOOL_DEFS= @@ -336,148 +335,143 @@ od_vectors= for targ in $target $canon_targets do - if test "x$targ" = "xall"; then - all_targets=true + case $targ in + all | *-*-hms*) BUILD_SRCONV='$(SRCONV_PROG)' - BUILD_MISC="${BUILD_MISC} "'bin2c$(EXEEXT_FOR_BUILD)' - BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' - BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' + ;; + esac + + case $targ in + all | spu-*-*) + BUILD_MISC='bin2c$(EXEEXT_FOR_BUILD)' + ;; + esac + + case $targ in + powerpc*-*-linux* | powerpc*-*-elf* | powerpc*-*-eabi*) + BUILD_INSTALL_MISC=embedspu + ;; + esac + + case $targ in + mep-*) + OBJDUMP_DEFS="-DSKIP_ZEROES=256 -DSKIP_ZEROES_AT_END=0" + ;; +changequote(,)dnl + powerpc*-aix5.[01]) + ;; + powerpc*-aix[5-9].*) +changequote([,])dnl + OBJDUMP_DEFS="-DAIX_WEAK_SUPPORT" + ;; + esac + + case $targ in + aarch64-*-mingw*) BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' if test -z "$DLLTOOL_DEFAULT"; then - DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_I386" + DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_AARCH64" + fi + DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_AARCH64" + BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' + BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' + BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)' + ;; + arm-wince-pe* | arm-*-wince | arm*-*-cegcc* | arm*-*-mingw32ce*) + BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' + if test -z "$DLLTOOL_DEFAULT"; then + DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_ARM_WINCE" + fi + DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM_WINCE -DDLLTOOL_ARM" + BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' + BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' + ;; + arm-*-pe*) + BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' + if test -z "$DLLTOOL_DEFAULT"; then + DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_ARM" + fi + DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM" + BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' + BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' + ;; +changequote(,)dnl + i[3-7]86-*-pe* | i[3-7]86-*-cygwin* | i[3-7]86-*-mingw32** | all) +changequote([,])dnl + BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' + if test -z "$DLLTOOL_DEFAULT"; then + DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_I386" fi DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_I386" + BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' + BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)' - od_vectors="$od_vectors objdump_private_desc_xcoff objdump_private_desc_pe" - else - case $targ in - *-*-hms*) BUILD_SRCONV='$(SRCONV_PROG)' ;; - esac - - case $targ in - aarch64-*-mingw*) - BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' - if test -z "$DLLTOOL_DEFAULT"; then - DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_AARCH64" - fi - DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_AARCH64" - BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' - BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' - BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)' - ;; - arm-wince-pe* | arm-*-wince | arm*-*-cegcc* | arm*-*-mingw32ce*) - BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' - if test -z "$DLLTOOL_DEFAULT"; then - DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_ARM_WINCE" - fi - DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM_WINCE -DDLLTOOL_ARM" - BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' - BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' - ;; - arm-*-pe*) - BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' - if test -z "$DLLTOOL_DEFAULT"; then - DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_ARM" - fi - DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM" - BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' - BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' - ;; - x86_64-*-mingw* | x86_64-*-cygwin*) - BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' - if test -z "$DLLTOOL_DEFAULT"; then - DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_MX86_64" - fi - DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MX86_64" - BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' - BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' - BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)' - ;; + ;; changequote(,)dnl - i[3-7]86-*-pe* | i[3-7]86-*-cygwin* | i[3-7]86-*-mingw32**) + i[3-7]86-*-interix) changequote([,])dnl - BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' - if test -z "$DLLTOOL_DEFAULT"; then + BUILD_DLLTOOL='$(DLLTOOL_PROG)' + if test -z "$DLLTOOL_DEFAULT"; then DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_I386" - fi - DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_I386" - BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' - BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' - BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)' - ;; -changequote(,)dnl - i[3-7]86-*-interix) -changequote([,])dnl - BUILD_DLLTOOL='$(DLLTOOL_PROG)' - if test -z "$DLLTOOL_DEFAULT"; then - DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_I386" - fi - DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_I386" - ;; -changequote(,)dnl - powerpc*-aix5.[01]) -changequote([,])dnl - ;; -changequote(,)dnl - powerpc*-aix[5-9].*) -changequote([,])dnl - OBJDUMP_DEFS="-DAIX_WEAK_SUPPORT" - ;; - powerpc*-*-linux* | powerpc*-*-elf* | powerpc*-*-eabi*) - case "$BUILD_INSTALL_MISC" in - *embedspu*) ;; - *) BUILD_INSTALL_MISC="${BUILD_INSTALL_MISC} embedspu" - esac - ;; - sh*-*-pe) - BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' - if test -z "$DLLTOOL_DEFAULT"; then - DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_SH" - fi - DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_SH" - BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' - BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' - ;; - spu-*-*) - BUILD_MISC="${BUILD_MISC} "'bin2c$(EXEEXT_FOR_BUILD)' - ;; - mcore-*-pe) - BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' - if test -z "$DLLTOOL_DEFAULT"; then + fi + DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_I386" + ;; + mcore-*-pe) + BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' + if test -z "$DLLTOOL_DEFAULT"; then DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_MCORE" - fi - DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MCORE" - BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' - BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' - ;; - mcore-*-elf) - BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' - if test -z "$DLLTOOL_DEFAULT"; then + fi + DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MCORE" + BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' + BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' + ;; + mcore-*-elf) + BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' + if test -z "$DLLTOOL_DEFAULT"; then DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_MCORE_ELF" - fi - DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MCORE_ELF" - ;; - mep-*) - OBJDUMP_DEFS="-DSKIP_ZEROES=256 -DSKIP_ZEROES_AT_END=0" - ;; - esac + fi + DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MCORE_ELF" + ;; + sh*-*-pe) + BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' + if test -z "$DLLTOOL_DEFAULT"; then + DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_SH" + fi + DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_SH" + BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' + BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' + ;; + x86_64-*-mingw* | x86_64-*-cygwin*) + BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' + if test -z "$DLLTOOL_DEFAULT"; then + DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_MX86_64" + fi + DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_MX86_64" + BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' + BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' + BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)' + ;; + esac - # Add objdump private vectors. - case $targ in - avr-*-*) - od_vectors="$od_vectors objdump_private_desc_elf32_avr" - ;; - powerpc*-*-aix* | rs6000-*-aix*) - od_vectors="$od_vectors objdump_private_desc_xcoff" - ;; - *-*-pe* | *-*-cygwin* | *-*-mingw*) - od_vectors="$od_vectors objdump_private_desc_pe" - ;; - *-*-darwin*) - od_vectors="$od_vectors objdump_private_desc_mach_o" - ;; - esac - fi + # Add objdump private vectors. + case $targ in + all) + od_vectors="objdump_private_desc_elf32_avr objdump_private_desc_xcoff\ + objdump_private_desc_pe objdump_private_desc_mach_o" + ;; + avr-*-*) + od_vectors="$od_vectors objdump_private_desc_elf32_avr" + ;; + powerpc*-*-aix* | rs6000-*-aix*) + od_vectors="$od_vectors objdump_private_desc_xcoff" + ;; + *-*-pe* | *-*-cygwin* | *-*-mingw*) + od_vectors="$od_vectors objdump_private_desc_pe" + ;; + *-*-darwin*) + od_vectors="$od_vectors objdump_private_desc_mach_o" + ;; + esac done # Uniq objdump private vector, build objdump target ofiles. diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi index 8314cb57562..9f80f398c9d 100644 --- a/binutils/doc/binutils.texi +++ b/binutils/doc/binutils.texi @@ -1626,6 +1626,11 @@ commands. If the input was '12345678' then the outputs would be Set the access and modification dates of the output file to be the same as those of the input file. +This option also copies the date stored in a PE format file's header, +unless the SOURCE_DATE_EPOCH environment variable is defined. If it +is defined then this variable will be used as the date stored in the +header, interpreted as the number of seconds since the Unix epoch. + @item -D @itemx --enable-deterministic-archives @cindex deterministic archives @@ -1745,13 +1750,14 @@ Set the flags for any sections matching @var{sectionpattern}. The @var{flags} argument is a comma separated string of flag names. The recognized names are @samp{alloc}, @samp{contents}, @samp{load}, @samp{noload}, @samp{readonly}, @samp{code}, @samp{data}, @samp{rom}, -@samp{exclude}, @samp{share}, and @samp{debug}. You can set the -@samp{contents} flag for a section which does not have contents, but it -is not meaningful to clear the @samp{contents} flag of a section which -does have contents--just remove the section instead. Not all flags are -meaningful for all object file formats. In particular the -@samp{share} flag is only meaningful for COFF format files and not for -ELF format files. +@samp{exclude}, @samp{share}, @samp{debug}, and @samp{large}. +You can set the @samp{contents} flag for a section which does not have +contents, but it is not meaningful to clear the @samp{contents} flag of a +section which does have contents--just remove the section instead. Not all +flags are meaningful for all object file formats. In particular the +@samp{share} flag is only meaningful for COFF format files and not for ELF +format files. The ELF x86-64 specific flag @samp{large} corresponds to +SHF_X86_64_LARGE. @item --set-section-alignment @var{sectionpattern}=@var{align} Set the alignment for any sections matching @var{sectionpattern}. diff --git a/binutils/objcopy.c b/binutils/objcopy.c index 3569b890c7d..b2b7ab6ab7e 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -803,6 +803,7 @@ parse_flags (const char *s) PARSE_FLAG ("contents", SEC_HAS_CONTENTS); PARSE_FLAG ("merge", SEC_MERGE); PARSE_FLAG ("strings", SEC_STRINGS); + PARSE_FLAG ("large", SEC_ELF_LARGE); #undef PARSE_FLAG else { @@ -812,8 +813,10 @@ parse_flags (const char *s) strncpy (copy, s, len); copy[len] = '\0'; non_fatal (_("unrecognized section flag `%s'"), copy); - fatal (_("supported flags: %s"), - "alloc, load, noload, readonly, debug, code, data, rom, exclude, share, contents, merge, strings"); + fatal (_ ("supported flags: %s"), + "alloc, load, noload, readonly, debug, code, data, rom, " + "exclude, contents, merge, strings, (COFF specific) share, " + "(ELF x86-64 specific) large"); } s = snext; @@ -2618,7 +2621,7 @@ merge_gnu_build_notes (bfd * abfd, } static flagword -check_new_section_flags (flagword flags, bfd * abfd, const char * secname) +check_new_section_flags (flagword flags, bfd *abfd, const char * secname) { /* Only set the SEC_COFF_SHARED flag on COFF files. The same bit value is used by ELF targets to indicate @@ -2631,6 +2634,19 @@ check_new_section_flags (flagword flags, bfd * abfd, const char * secname) bfd_get_filename (abfd), secname); flags &= ~ SEC_COFF_SHARED; } + + /* Report a fatal error if 'large' is used with a non-x86-64 ELF target. + Suppress the error for non-ELF targets to allow -O binary and formats that + use the bit value SEC_ELF_LARGE for other purposes. */ + if ((flags & SEC_ELF_LARGE) != 0 + && bfd_get_flavour (abfd) == bfd_target_elf_flavour + && get_elf_backend_data (abfd)->elf_machine_code != EM_X86_64) + { + fatal (_ ("%s[%s]: 'large' flag is ELF x86-64 specific"), + bfd_get_filename (abfd), secname); + flags &= ~SEC_ELF_LARGE; + } + return flags; } @@ -3599,9 +3615,11 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target, } *list, *l; bfd **ptr = &obfd->archive_head; bfd *this_element; - char *dir; + char *dir = NULL; char *filename; + list = NULL; + /* PR 24281: It is not clear what should happen when copying a thin archive. One part is straight forward - if the output archive is in a different directory from the input archive then any relative paths in the library @@ -3620,7 +3638,7 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target, bfd_set_error (bfd_error_invalid_operation); bfd_nonfatal_message (NULL, ibfd, NULL, _("sorry: copying thin archives is not currently supported")); - return; + goto cleanup_and_exit; } /* Make a temp directory to hold the contents. */ @@ -3638,8 +3656,6 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target, if (deterministic) obfd->flags |= BFD_DETERMINISTIC_OUTPUT; - list = NULL; - this_element = bfd_openr_next_archived_file (ibfd, NULL); if (!bfd_set_format (obfd, bfd_get_format (ibfd))) @@ -3781,44 +3797,46 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target, } *ptr = NULL; + cleanup_and_exit: filename = xstrdup (bfd_get_filename (obfd)); if (!(status == 0 ? bfd_close : bfd_close_all_done) (obfd)) { + if (!status) + bfd_nonfatal_message (filename, NULL, NULL, NULL); status = 1; - bfd_nonfatal_message (filename, NULL, NULL, NULL); } free (filename); filename = xstrdup (bfd_get_filename (ibfd)); if (!bfd_close (ibfd)) { + if (!status) + bfd_nonfatal_message (filename, NULL, NULL, NULL); status = 1; - bfd_nonfatal_message (filename, NULL, NULL, NULL); } free (filename); - cleanup_and_exit: /* Delete all the files that we opened. */ - { - struct name_list * next; + struct name_list *next; + for (l = list; l != NULL; l = next) + { + if (l->obfd == NULL) + rmdir (l->name); + else + { + bfd_close (l->obfd); + unlink (l->name); + } + free ((char *) l->name); + next = l->next; + free (l); + } - for (l = list; l != NULL; l = next) - { - if (l->obfd == NULL) - rmdir (l->name); - else - { - bfd_close (l->obfd); - unlink (l->name); - } - free ((char *) l->name); - next = l->next; - free (l); - } - } - - rmdir (dir); - free (dir); + if (dir) + { + rmdir (dir); + free (dir); + } } /* The top-level control. */ @@ -3917,7 +3935,8 @@ copy_file (const char *input_filename, const char *output_filename, int ofd, if (obfd == NULL) { - close (ofd); + if (ofd >= 0) + close (ofd); bfd_nonfatal_message (output_filename, NULL, NULL, NULL); bfd_close (ibfd); status = 1; @@ -3950,7 +3969,8 @@ copy_file (const char *input_filename, const char *output_filename, int ofd, if (obfd == NULL) { - close (ofd); + if (ofd >= 0) + close (ofd); bfd_nonfatal_message (output_filename, NULL, NULL, NULL); bfd_close (ibfd); status = 1; @@ -4141,13 +4161,25 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg) flags = p->flags | (flags & (SEC_HAS_CONTENTS | SEC_RELOC)); flags = check_new_section_flags (flags, obfd, bfd_section_name (isection)); } - else if (strip_symbols == STRIP_NONDEBUG - && (flags & (SEC_ALLOC | SEC_GROUP)) != 0 - && !is_nondebug_keep_contents_section (ibfd, isection)) + else { - flagword clr = SEC_HAS_CONTENTS | SEC_LOAD | SEC_GROUP; + flagword clr = 0; - if (bfd_get_flavour (obfd) == bfd_target_elf_flavour) + /* For --extract-symbols where section sizes are zeroed, clear + SEC_LOAD to indicate to coff_compute_section_file_positions that + section sizes should not be adjusted for ALIGN_SECTIONS_IN_FILE. + We don't want to clear SEC_HAS_CONTENTS as that will result + in symbols being classified as 'B' by nm. */ + if (extract_symbol) + clr = SEC_LOAD; + /* If only keeping debug sections then we'll be keeping section + sizes in headers but making the sections have no contents. */ + else if (strip_symbols == STRIP_NONDEBUG + && (flags & (SEC_ALLOC | SEC_GROUP)) != 0 + && !is_nondebug_keep_contents_section (ibfd, isection)) + clr = SEC_HAS_CONTENTS | SEC_LOAD | SEC_GROUP; + + if (clr && bfd_get_flavour (obfd) == bfd_target_elf_flavour) { /* PR 29532: Copy group sections intact as otherwise we end up with empty groups. This prevents separate debug info files from @@ -4155,7 +4187,7 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg) originally contained groups. */ if (flags & SEC_GROUP) clr = SEC_LOAD; - else + if ((clr & SEC_HAS_CONTENTS) != 0) make_nobits = true; /* Twiddle the input section flags so that it seems to diff --git a/binutils/od-elf32_avr.c b/binutils/od-elf32_avr.c index cc24919160f..19da74a7c65 100644 --- a/binutils/od-elf32_avr.c +++ b/binutils/od-elf32_avr.c @@ -270,25 +270,26 @@ elf32_avr_dump_mem_usage (bfd *abfd) "Device: %s\n\n", device.name); /* Text size */ - printf ("Program:%8lu bytes", text_usage); + printf ("Program:%8" PRIu64 " bytes", (uint64_t) text_usage); if (device.flash_size > 0) - printf (" (%2.1f%% Full)", ((float) text_usage / device.flash_size) * 100); + printf (" (%2.1f%% Full)", (double) text_usage / device.flash_size * 100); printf ("\n(.text + .data + .bootloader)\n\n"); /* Data size */ - printf ("Data: %8lu bytes", data_usage); + printf ("Data: %8" PRIu64 " bytes", (uint64_t) data_usage); if (device.ram_size > 0) - printf (" (%2.1f%% Full)", ((float) data_usage / device.ram_size) * 100); + printf (" (%2.1f%% Full)", (double) data_usage / device.ram_size * 100); printf ("\n(.data + .bss + .noinit)\n\n"); /* EEPROM size */ if (eeprom_usage > 0) { - printf ("EEPROM: %8lu bytes", eeprom_usage); + printf ("EEPROM: %8" PRIu64 " bytes", (uint64_t) eeprom_usage); if (device.eeprom_size > 0) - printf (" (%2.1f%% Full)", ((float) eeprom_usage / device.eeprom_size) * 100); + printf (" (%2.1f%% Full)", + (double) eeprom_usage / device.eeprom_size * 100); printf ("\n(.eeprom)\n\n"); } @@ -315,12 +316,12 @@ elf32_avr_dump_avr_prop (bfd *abfd) for (i = 0; i < r_list->record_count; ++i) { - printf (" %d %s @ %s + %#08lx (%#08lx)\n", + printf (" %d %s @ %s + %#08" PRIx64" (%#08" PRIx64 ")\n", i, avr_elf32_property_record_name (&r_list->records [i]), r_list->records [i].section->name, - r_list->records [i].offset, - (bfd_section_vma (r_list->records [i].section) + (uint64_t) r_list->records [i].offset, + ((uint64_t) bfd_section_vma (r_list->records [i].section) + r_list->records [i].offset)); switch (r_list->records [i].type) { diff --git a/binutils/od-macho.c b/binutils/od-macho.c index 17253d4f70b..c2bd7d38a89 100644 --- a/binutils/od-macho.c +++ b/binutils/od-macho.c @@ -23,6 +23,7 @@ #include #include #include "safe-ctype.h" +#include "libiberty.h" #include "bfd.h" #include "objdump.h" #include "bucomm.h" diff --git a/binutils/od-xcoff.c b/binutils/od-xcoff.c index 92d17e99fbf..e6b2f08c245 100644 --- a/binutils/od-xcoff.c +++ b/binutils/od-xcoff.c @@ -23,6 +23,7 @@ #include #include #include "safe-ctype.h" +#include "libiberty.h" #include "bfd.h" #include "objdump.h" #include "bucomm.h" diff --git a/binutils/po/binutils.pot b/binutils/po/binutils.pot index d1550ec657f..2c333449534 100644 --- a/binutils/po/binutils.pot +++ b/binutils/po/binutils.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2023-07-03 11:32+0100\n" +"POT-Creation-Date: 2023-07-03 11:41+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/binutils/readelf.c b/binutils/readelf.c index 97d72d0b95f..4ecff4c3933 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -168,6 +168,7 @@ #include "elf/xtensa.h" #include "elf/z80.h" #include "elf/loongarch.h" +#include "elf/bpf.h" #include "getopt.h" #include "libiberty.h" @@ -1061,6 +1062,8 @@ guess_is_rela (unsigned int e_machine) case EM_ARC: case EM_ARC_COMPACT: case EM_ARC_COMPACT2: + case EM_ARC_COMPACT3: + case EM_ARC_COMPACT3_64: case EM_AVR: case EM_AVR_OLD: case EM_BLACKFIN: @@ -1738,6 +1741,8 @@ dump_relocations (Filedata *filedata, case EM_ARC: case EM_ARC_COMPACT: case EM_ARC_COMPACT2: + case EM_ARC_COMPACT3: + case EM_ARC_COMPACT3_64: rtype = elf_arc_reloc_type (type); break; @@ -2968,9 +2973,9 @@ get_machine_name (unsigned e_machine) case EM_NFP: return "Netronome Flow Processor"; case EM_VE: return "NEC Vector Engine"; case EM_CSKY: return "C-SKY"; - case EM_ARC_COMPACT3_64: return "Synopsys ARCv2.3 64-bit"; + case EM_ARC_COMPACT3_64: return "Synopsys ARCv3 64-bit processor"; case EM_MCS6502: return "MOS Technology MCS 6502 processor"; - case EM_ARC_COMPACT3: return "Synopsys ARCv2.3 32-bit"; + case EM_ARC_COMPACT3: return "Synopsys ARCv3 32-bit processor"; case EM_KVX: return "Kalray VLIW core of the MPPA processor family"; case EM_65816: return "WDC 65816/65C816"; case EM_LOONGARCH: return "LoongArch"; @@ -3715,6 +3720,14 @@ get_machine_flags (Filedata * filedata, unsigned e_flags, unsigned e_machine) default: break; + case EM_ARC_COMPACT3: + strcat (buf, ", HS5x"); + break; + + case EM_ARC_COMPACT3_64: + strcat (buf, ", HS6x"); + break; + case EM_ARC_COMPACT2: case EM_ARC_COMPACT: decode_ARC_machine_flags (e_flags, e_machine, buf); @@ -4179,6 +4192,11 @@ get_machine_flags (Filedata * filedata, unsigned e_flags, unsigned e_machine) strcat (buf, ", no delay"); break; + case EM_BPF: + sprintf (buf + strlen (buf), ", CPU Version: %u", + e_flags & EF_BPF_CPUVER); + break; + case EM_SPARCV9: if (e_flags & EF_SPARC_32PLUS) strcat (buf, ", v8+"); @@ -4983,6 +5001,8 @@ get_section_type_name (Filedata * filedata, unsigned int sh_type) case EM_ARC: case EM_ARC_COMPACT: case EM_ARC_COMPACT2: + case EM_ARC_COMPACT3: + case EM_ARC_COMPACT3_64: result = get_arc_section_type_name (sh_type); break; case EM_MIPS: @@ -14324,6 +14344,8 @@ is_32bit_abs_reloc (Filedata * filedata, unsigned int reloc_type) return reloc_type == 1; /* R_ARC_32. */ case EM_ARC_COMPACT: case EM_ARC_COMPACT2: + case EM_ARC_COMPACT3: + case EM_ARC_COMPACT3_64: return reloc_type == 4; /* R_ARC_32. */ case EM_ARM: return reloc_type == 2; /* R_ARM_ABS32 */ @@ -14518,6 +14540,8 @@ is_32bit_pcrel_reloc (Filedata * filedata, unsigned int reloc_type) return reloc_type == 10; /* R_ALPHA_SREL32. */ case EM_ARC_COMPACT: case EM_ARC_COMPACT2: + case EM_ARC_COMPACT3: + case EM_ARC_COMPACT3_64: return reloc_type == 49; /* R_ARC_32_PCREL. */ case EM_ARM: return reloc_type == 3; /* R_ARM_REL32 */ @@ -14584,6 +14608,8 @@ is_64bit_abs_reloc (Filedata * filedata, unsigned int reloc_type) { case EM_AARCH64: return reloc_type == 257; /* R_AARCH64_ABS64. */ + case EM_ARC_COMPACT3_64: + return reloc_type == 5; /* R_ARC_64. */ case EM_ALPHA: return reloc_type == 2; /* R_ALPHA_REFQUAD. */ case EM_IA_64: @@ -14687,6 +14713,8 @@ is_16bit_abs_reloc (Filedata * filedata, unsigned int reloc_type) case EM_ARC: case EM_ARC_COMPACT: case EM_ARC_COMPACT2: + case EM_ARC_COMPACT3: + case EM_ARC_COMPACT3_64: return reloc_type == 2; /* R_ARC_16. */ case EM_ADAPTEVA_EPIPHANY: return reloc_type == 5; @@ -14969,6 +14997,8 @@ is_none_reloc (Filedata * filedata, unsigned int reloc_type) case EM_ARC: /* R_ARC_NONE. */ case EM_ARC_COMPACT2: /* R_ARC_NONE. */ case EM_ARC_COMPACT: /* R_ARC_NONE. */ + case EM_ARC_COMPACT3: /* R_ARC_NONE. */ + case EM_ARC_COMPACT3_64: /* R_ARC_NONE. */ case EM_ARM: /* R_ARM_NONE. */ case EM_CRIS: /* R_CRIS_NONE. */ case EM_FT32: /* R_FT32_NONE. */ @@ -22302,6 +22332,8 @@ process_arch_specific (Filedata * filedata) case EM_ARC: case EM_ARC_COMPACT: case EM_ARC_COMPACT2: + case EM_ARC_COMPACT3: + case EM_ARC_COMPACT3_64: return process_attributes (filedata, "ARC", SHT_ARC_ATTRIBUTES, display_arc_attribute, display_generic_attribute); diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp index 1145835d8b7..41070c3e0de 100644 --- a/binutils/testsuite/binutils-all/objcopy.exp +++ b/binutils/testsuite/binutils-all/objcopy.exp @@ -1028,7 +1028,11 @@ proc keep_debug_symbols_for_elf_relocatable { prog flags test } { {[^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 + # PR 30699: Some debug sections can be in a group, so + # exclude sections whose name includes "debug_" + if { ! [regexp {debug_} $name] } { + lappend non_debug_sections $name + } } set got $rest } @@ -1086,6 +1090,7 @@ switch [copy_setup] { untested $test5 if [is_elf_format] { untested $test6 + untested $test7 } } "3" { diff --git a/configure.ac b/configure.ac index 2f74092671d..e95a9ed116e 100644 --- a/configure.ac +++ b/configure.ac @@ -141,7 +141,7 @@ host_libs="intl libiberty opcodes bfd readline tcl tk itcl libgui zlib libbacktr # binutils, gas and ld appear in that order because it makes sense to run # "make check" in that particular order. # If --enable-gold is used, "gold" may replace "ld". -host_tools="flex bison binutils gas ld fixincludes gcc cgen sid sim gdb gdbserver gprof etc expect dejagnu m4 utils guile fastjar gnattools libcc1 gotools c++tools" +host_tools="texinfo flex bison binutils gas ld fixincludes gcc cgen sid sim gdb gdbserver gprof etc expect dejagnu m4 utils guile fastjar gnattools libcc1 gotools c++tools" # these libraries are built for the target environment, and are built after # the host libraries and the host tools (which may be a cross compiler) diff --git a/gas/ChangeLog b/gas/ChangeLog index 597650d322a..26d7dc1623b 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,20 +1,168 @@ -2023-07-30 Nick Clifton +2023-07-30 Jose E. Marchesi - This is the 2.41 release. - * configure: Regenerate. - * po/gas.pot: Regenerate. + * config/tc-bpf.h (elf_tc_final_processing): Define. + * config/tc-bpf.c (bpf_elf_final_processing): New function. - modified: gold/po/gold.pot - modified: gprof/configure - modified: gprofng/configure - modified: gprofng/doc/version.texi - modified: gprofng/libcollector/configure - modified: ld/configure - modified: ld/po/ld.pot - modified: libiberty/functions.texi - modified: opcodes/configure - modified: opcodes/po/opcodes.pot - modified: src-release.sh +2023-07-30 Jose E. Marchesi + + * config/tc-bpf.c (signed_overflow): Copy function from + tc-aarch64.c. + (encode_insn): Check for overflow in constant immediates. + (add_relaxed_insn): Pass relax argument to encode_insn. + (add_fixed_insn): Likewise. + * testsuite/gas/bpf/disp16-overflow.d: New file. + * testsuite/gas/bpf/disp16-overflow.s: Likewise. + * testsuite/gas/bpf/disp16-overflow.l: Likewise. + * testsuite/gas/bpf/disp32-overflow.d: Likewise. + * testsuite/gas/bpf/disp32-overflow.s: Likewise. + * testsuite/gas/bpf/disp32-overflow.l: Likewise. + * testsuite/gas/bpf/imm32-overflow.d: Likewise. + * testsuite/gas/bpf/imm32-overflow.s: Likewise. + * testsuite/gas/bpf/imm32-overflow.l: Likewise. + * testsuite/gas/bpf/offset16-overflow.d: Likewise. + * testsuite/gas/bpf/offset16-overflow.s: Likewise. + * testsuite/gas/bpf/offset16-overflow.l: Likewise. + * testsuite/gas/bpf/disp16-overflow-relax.d: Likewise. + * testsuite/gas/bpf/disp16-overflow-relax.l: Likewise. + * testsuite/gas/bpf/disp16-overflow-relax.s: Likewise. + * testsuite/gas/bpf/jump-relax-jump-be.d: New file. + * testsuite/gas/bpf/bpf.exp: Run new tests. + +2023-07-28 Jose E. Marchesi + + PR gas/30690 + * config/tc-bpf.c (struct bpf_insn): Add fields is_relaxable and + relaxed_exp. + (enum options): Add OPTION_NO_RELAX. + (md_longopts): Likewise for -mno-relax. + (do_relax): New global. + (md_parse_option): Handle OPTION_NO_RELAX. + (RELAX_BRANCH_ENCODE): Define. + (RELAX_BRANCH_P): Likewise. + (RELAX_BRANCH_LENGTH): Likewise. + (RELAX_BRANCH_CONST): Likewise. + (RELAX_BRANCH_UNCOND): Likewise. + (relaxed_branch_length): New function. + (md_estimate_size_before_relax): Likewise. + (read_insn_word): Likewise. + (encode_int16): Likewise. + (encode_int32): Likewise. + (write_insn_bytes): Likewise. + (md_convert_frag): Likewise. + (encode_insn): Likewise. + (install_insn_fixups): Likewise. + (add_fixed_insn): Likewise. + (add_relaxed_insn): Likewise. + (md_assemble): Move instruction encoding logic to the above + new functions. + * testsuite/gas/bpf/jump-relax-ja.d: New test. + * testsuite/gas/bpf/jump-relax-ja-be.d: Likewise. + * testsuite/gas/bpf/jump-relax-ja.s: And corresponding source. + * testsuite/gas/bpf/jump-relax-jump.d: New test. + * testsuite/gas/bpf/jump-relax-jump-be.d: Likewise. + * testsuite/gas/bpf/jump-relax-jump.s: And corresponding source. + * testsuite/gas/bpf/bpf.exp: Run new tests. + * doc/c-bpf.texi (BPF Options): Document -mno-relax. + +2023-07-26 Jose E. Marchesi + + * testsuite/gas/bpf/alu.s: Add test for NEGI and NEG32I. + * testsuite/gas/bpf/alu32.s: Likewise. + * testsuite/gas/bpf/alu-pseudoc.s: Likewise. + * testsuite/gas/bpf/alu32-pseudoc.s: Likewise. + * testsuite/gas/bpf/alu.d: Add expected results. + * testsuite/gas/bpf/alu-be.d: Likewise. + * testsuite/gas/bpf/alu-pseudoc.d: Likewise. + * testsuite/gas/bpf/alu-be-pseudoc.d: Likewise. + * testsuite/gas/bpf/alu32.d: Likewise. + * testsuite/gas/bpf/alu32-be.d: Likewise. + * testsuite/gas/bpf/alu32-be-pseudoc.d: Likewise. + +2023-07-26 Jose E. Marchesi + + * testsuite/gas/bpf/alu.s: The register neg instruction gets only + one argument. + * testsuite/gas/bpf/alu32-be-pseudoc.d: Likewise. + * testsuite/gas/bpf/alu32-pseudoc.d: Likewise. + * testsuite/gas/bpf/alu32-pseudoc.s: Likewise. + * testsuite/gas/bpf/alu-pseudoc.d: Likewise. + * testsuite/gas/bpf/alu-be-pseudoc.d: Likewise. + * testsuite/gas/bpf/alu-pseudoc.s: Likewise. + * testsuite/gas/bpf/alu-be.d: Likewise. + * testsuite/gas/bpf/alu.d: Likewise. + * testsuite/gas/bpf/alu32-be.d: Likewise. + * testsuite/gas/bpf/alu32.d: Likewise. + * testsuite/gas/bpf/alu32.s: Likewise. + * doc/c-bpf.texi (BPF Instructions): Update accordingly. + +2023-07-24 Jose E. Marchesi + + * doc/c-bpf.texi (BPF Instructions): Document BSWAP* instructions. + * testsuite/gas/bpf/alu.s: Test BSWAP{16,32,64} instructions. + * testsuite/gas/bpf/alu.d: Likewise. + * testsuite/gas/bpf/alu-be.d: Likewise. + * testsuite/gas/bpf/alu-pseudoc.s: Likewise. + * testsuite/gas/bpf/alu-pseudoc.d: Likewise. + * testsuite/gas/bpf/alu-be-pseudoc.d: Likewise. + +2023-07-24 Jose E. Marchesi + + * doc/c-bpf.texi (BPF Instructions): The pseudoc syntax for MOVS* + doesn't use `s=' but `='. + +2023-07-24 Jose E. Marchesi + + * doc/c-bpf.texi (BPF Instructions): Fix pseudoc syntax for MOVS* + and LDXS* instructions. + * testsuite/gas/bpf/mem-pseudoc.d: Likewise. + * testsuite/gas/bpf/mem-be-pseudoc.d: Likewise. + * testsuite/gas/bpf/mem-pseudoc.s: Likewise. + * testsuite/gas/bpf/alu-pseudoc.s: Likewise. + * testsuite/gas/bpf/alu-pseudoc.d: Likewise. + * testsuite/gas/bpf/alu-be-pseudoc.d: Likewise. + * testsuite/gas/bpf/alu32-pseudoc.s: Likewise. + * testsuite/gas/bpf/alu32-pseudoc.d: Likewise. + * testsuite/gas/bpf/alu32-be-pseudoc.d: Likewise. + +2023-07-24 Jose E. Marchesi + + * config/tc-bpf.c (struct bpf_insn): New field `id'. + (md_assemble): Save the ids of successfully parsed instructions + and use the new BFD_RELOC_BPF_DISPCALL32 whenever appropriate. + (md_apply_fix): Adapt to the new BFD reloc. + * testsuite/gas/bpf/jump.s: Test JAL. + * testsuite/gas/bpf/jump.d: Likewise. + * testsuite/gas/bpf/jump-pseudoc.d: Likewise. + * testsuite/gas/bpf/jump-be.d: Likewise. + * testsuite/gas/bpf/jump-be-pseudoc.d: Likewise. + * doc/c-bpf.texi (BPF Instructions): Document new instruction + jal/gotol. + Document new operand type disp32. + +2023-07-21 Jose E. Marchesi + + * testsuite/gas/bpf/mem.s: Add signed load instructions. + * testsuite/gas/bpf/mem-pseudoc.s: Likewise. + * testsuite/gas/bpf/mem.d: Likewise. + * testsuite/gas/bpf/mem-pseudoc.d: Likewise. + * testsuite/gas/bpf/mem-be.d: Likewise. + * doc/c-bpf.texi (BPF Instructions): Document the signed load + instructions. + +2023-07-21 Jose E. Marchesi + + * testsuite/gas/bpf/alu.s: Test movs instructions. + * testsuite/gas/bpf/alu-pseudoc.s: Likewise. + * testsuite/gas/bpf/alu32.s: Likewise for movs32 instruction. + * testsuite/gas/bpf/alu32-pseudoc.s: Likewise. + * testsuite/gas/bpf/alu.d: Add expected results. + * testsuite/gas/bpf/alu32.d: Likewise. + * testsuite/gas/bpf/alu-be.d: Likewise. + * testsuite/gas/bpf/alu32-be.d: Likewise. + * testsuite/gas/bpf/alu-pseudoc.d: Likewise. + * testsuite/gas/bpf/alu32-pseudoc.d: Likewise. + * testsuite/gas/bpf/alu-be-pseudoc.d: Likewise. + * testsuite/gas/bpf/alu32-be-pseudoc.d: Likewise. 2023-07-03 Nick Clifton diff --git a/gas/Makefile.in b/gas/Makefile.in index 427f42dfa3a..b56cd9a29a9 100644 --- a/gas/Makefile.in +++ b/gas/Makefile.in @@ -2230,7 +2230,7 @@ de-stage3: doc/asconfig.texi: doc/$(CONFIG).texi doc/$(am__dirstamp) $(AM_V_at)rm -f doc/asconfig.texi - $(AM_V_GEN)cp -p $(srcdir)/doc/$(CONFIG).texi doc/asconfig.texi + $(AM_V_GEN)cp $(srcdir)/doc/$(CONFIG).texi doc/asconfig.texi && touch -m -r $(srcdir)/doc/$(CONFIG).texi doc/asconfig.texi $(AM_V_at)chmod u+w doc/asconfig.texi # Maintenance diff --git a/gas/NEWS b/gas/NEWS index 59bdd30aaaa..1ed043511eb 100644 --- a/gas/NEWS +++ b/gas/NEWS @@ -1,5 +1,15 @@ -*- text -*- +* Add support for Intel PBNDKB instructions. + +* Add support for Intel SM4 instructions. + +* Add support for Intel SM3 instructions. + +* Add support for Intel SHA512 instructions. + +* Add support for Intel AVX-VNNI-INT16 instructions. + Changes in 2.41: * Add support for Intel FRED instructions. diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c index 753a929fb14..dc05b35ee99 100644 --- a/gas/config/obj-elf.c +++ b/gas/config/obj-elf.c @@ -1088,8 +1088,9 @@ obj_elf_attach_to_group (int dummy ATTRIBUTE_UNUSED) if (elf_group_name (now_seg)) { - as_warn (_("section %s already has a group (%s)"), - bfd_section_name (now_seg), elf_group_name (now_seg)); + if (strcmp (elf_group_name (now_seg), gname) != 0) + as_warn (_("section %s already has a group (%s)"), + bfd_section_name (now_seg), elf_group_name (now_seg)); return; } diff --git a/gas/config/tc-arc.c b/gas/config/tc-arc.c index 8d16cb57088..d9b13a0388e 100644 --- a/gas/config/tc-arc.c +++ b/gas/config/tc-arc.c @@ -49,7 +49,7 @@ && (SUB_OPCODE (x) == 0x28)) #ifndef TARGET_WITH_CPU -#define TARGET_WITH_CPU "arc700" +#define TARGET_WITH_CPU "hs38_linux" #endif /* TARGET_WITH_CPU */ #define ARC_GET_FLAG(s) (*symbol_get_tc (s)) diff --git a/gas/config/tc-bpf.c b/gas/config/tc-bpf.c index 3b86f9c89cb..b4566d89ddf 100644 --- a/gas/config/tc-bpf.c +++ b/gas/config/tc-bpf.c @@ -22,42 +22,46 @@ #include "as.h" #include "subsegs.h" #include "symcat.h" -#include "opcodes/bpf-desc.h" -#include "opcodes/bpf-opc.h" -#include "cgen.h" +#include "opcode/bpf.h" #include "elf/common.h" #include "elf/bpf.h" #include "dwarf2dbg.h" +#include "libiberty.h" #include -const char comment_chars[] = ";"; +/* Data structure representing a parsed BPF instruction. */ + +struct bpf_insn +{ + enum bpf_insn_id id; + int size; /* Instruction size in bytes. */ + bpf_insn_word opcode; + uint8_t dst; + uint8_t src; + expressionS offset16; + expressionS imm32; + expressionS imm64; + expressionS disp16; + expressionS disp32; + + unsigned int has_dst : 1; + unsigned int has_src : 1; + unsigned int has_offset16 : 1; + unsigned int has_disp16 : 1; + unsigned int has_disp32 : 1; + unsigned int has_imm32 : 1; + unsigned int has_imm64 : 1; + + unsigned int is_relaxable : 1; + expressionS *relaxed_exp; +}; + +const char comment_chars[] = ";#"; const char line_comment_chars[] = "#"; const char line_separator_chars[] = "`"; const char EXP_CHARS[] = "eE"; const char FLT_CHARS[] = "fFdD"; -static const char *invalid_expression; -static char pseudoc_lex[256]; -static const char symbol_chars[] = -"_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - -static const char arithm_op[] = "+-/<>%&|^"; - -static void init_pseudoc_lex (void); - -#define LEX_IS_SYMBOL_COMPONENT 1 -#define LEX_IS_WHITESPACE 2 -#define LEX_IS_NEWLINE 3 -#define LEX_IS_ARITHM_OP 4 -#define LEX_IS_STAR 6 -#define LEX_IS_CLSE_BR 7 -#define LEX_IS_OPEN_BR 8 -#define LEX_IS_EQUAL 9 -#define LEX_IS_EXCLA 10 - -#define ST_EOI 100 -#define MAX_TOKEN_SZ 100 - /* Like s_lcomm_internal in gas/read.c but the alignment string is allowed to be optional. */ @@ -110,18 +114,16 @@ const pseudo_typeS md_pseudo_table[] = -/* ISA handling. */ -static CGEN_BITSET *bpf_isa; - - - /* Command-line options processing. */ enum options { OPTION_LITTLE_ENDIAN = OPTION_MD_BASE, OPTION_BIG_ENDIAN, - OPTION_XBPF + OPTION_XBPF, + OPTION_DIALECT, + OPTION_ISA_SPEC, + OPTION_NO_RELAX, }; struct option md_longopts[] = @@ -129,6 +131,9 @@ struct option md_longopts[] = { "EL", no_argument, NULL, OPTION_LITTLE_ENDIAN }, { "EB", no_argument, NULL, OPTION_BIG_ENDIAN }, { "mxbpf", no_argument, NULL, OPTION_XBPF }, + { "mdialect", required_argument, NULL, OPTION_DIALECT}, + { "misa-spec", required_argument, NULL, OPTION_ISA_SPEC}, + { "mno-relax", no_argument, NULL, OPTION_NO_RELAX}, { NULL, no_argument, NULL, 0 }, }; @@ -136,18 +141,39 @@ size_t md_longopts_size = sizeof (md_longopts); const char * md_shortopts = ""; +/* BPF supports little-endian and big-endian variants. The following + global records what endianness to use. It can be configured using + command-line options. It defaults to the host endianness + initialized in md_begin. */ + +static int set_target_endian = 0; extern int target_big_endian; -/* Whether target_big_endian has been set while parsing command-line - arguments. */ -static int set_target_endian = 0; +/* Whether to relax branch instructions. Default is yes. Can be + changed using the -mno-relax command line option. */ -static int target_xbpf = 0; +static int do_relax = 1; -static int set_xbpf = 0; +/* The ISA specification can be one of BPF_V1, BPF_V2, BPF_V3, BPF_V4 + or BPF_XPBF. The ISA spec to use can be configured using + command-line options. It defaults to the latest BPF spec. */ + +static int isa_spec = BPF_V4; + +/* The assembler supports two different dialects: "normal" syntax and + "pseudoc" syntax. The dialect to use can be configured using + command-line options. */ + +enum target_asm_dialect +{ + DIALECT_NORMAL, + DIALECT_PSEUDOC +}; + +static int asm_dialect = DIALECT_NORMAL; int -md_parse_option (int c, const char * arg ATTRIBUTE_UNUSED) +md_parse_option (int c, const char * arg) { switch (c) { @@ -156,12 +182,39 @@ md_parse_option (int c, const char * arg ATTRIBUTE_UNUSED) target_big_endian = 1; break; case OPTION_LITTLE_ENDIAN: - set_target_endian = 1; + set_target_endian = 0; target_big_endian = 0; break; + case OPTION_DIALECT: + if (strcmp (arg, "normal") == 0) + asm_dialect = DIALECT_NORMAL; + else if (strcmp (arg, "pseudoc") == 0) + asm_dialect = DIALECT_PSEUDOC; + else + as_fatal (_("-mdialect=%s is not valid. Expected normal or pseudoc"), + arg); + break; + case OPTION_ISA_SPEC: + if (strcmp (arg, "v1") == 0) + isa_spec = BPF_V1; + else if (strcmp (arg, "v2") == 0) + isa_spec = BPF_V2; + else if (strcmp (arg, "v3") == 0) + isa_spec = BPF_V3; + else if (strcmp (arg, "v4") == 0) + isa_spec = BPF_V4; + else if (strcmp (arg, "xbpf") == 0) + isa_spec = BPF_XBPF; + else + as_fatal (_("-misa-spec=%s is not valid. Expected v1, v2, v3, v4 o xbpf"), + arg); + break; case OPTION_XBPF: - set_xbpf = 1; - target_xbpf = 1; + /* This is an alias for -misa-spec=xbpf. */ + isa_spec = BPF_XBPF; + break; + case OPTION_NO_RELAX: + do_relax = 0; break; default: return 0; @@ -175,43 +228,22 @@ md_show_usage (FILE * stream) { fprintf (stream, _("\nBPF options:\n")); fprintf (stream, _("\ - --EL generate code for a little endian machine\n\ - --EB generate code for a big endian machine\n\ - -mxbpf generate xBPF instructions\n")); +BPF options:\n\ + -EL generate code for a little endian machine\n\ + -EB generate code for a big endian machine\n\ + -mdialect=DIALECT set the assembly dialect (normal, pseudoc)\n\ + -misa-spec set the BPF ISA spec (v1, v2, v3, v4, xbpf)\n\ + -mxbpf alias for -misa-spec=xbpf\n")); } - -static void -init_pseudoc_lex (void) -{ - const char *p; - - for (p = symbol_chars; *p; ++p) - pseudoc_lex[(unsigned char) *p] = LEX_IS_SYMBOL_COMPONENT; - - pseudoc_lex[' '] = LEX_IS_WHITESPACE; - pseudoc_lex['\t'] = LEX_IS_WHITESPACE; - pseudoc_lex['\r'] = LEX_IS_WHITESPACE; - pseudoc_lex['\n'] = LEX_IS_NEWLINE; - pseudoc_lex['*'] = LEX_IS_STAR; - pseudoc_lex[')'] = LEX_IS_CLSE_BR; - pseudoc_lex['('] = LEX_IS_OPEN_BR; - pseudoc_lex[']'] = LEX_IS_CLSE_BR; - pseudoc_lex['['] = LEX_IS_OPEN_BR; - - for (p = arithm_op; *p; ++p) - pseudoc_lex[(unsigned char) *p] = LEX_IS_ARITHM_OP; - - pseudoc_lex['='] = LEX_IS_EQUAL; - pseudoc_lex['!'] = LEX_IS_EXCLA; -} +/* This function is called once, at assembler startup time. This + should set up all the tables, etc that the MD part of the assembler + needs. */ void md_begin (void) { - /* Initialize the `cgen' interface. */ - /* If not specified in the command line, use the host endianness. */ if (!set_target_endian) @@ -223,50 +255,15 @@ md_begin (void) #endif } - /* If not specified in the command line, use eBPF rather - than xBPF. */ - if (!set_xbpf) - target_xbpf = 0; - - /* Set the ISA, which depends on the target endianness. */ - bpf_isa = cgen_bitset_create (ISA_MAX); - if (target_big_endian) - { - if (target_xbpf) - cgen_bitset_set (bpf_isa, ISA_XBPFBE); - else - cgen_bitset_set (bpf_isa, ISA_EBPFBE); - } - else - { - if (target_xbpf) - cgen_bitset_set (bpf_isa, ISA_XBPFLE); - else - cgen_bitset_set (bpf_isa, ISA_EBPFLE); - } - /* Ensure that lines can begin with '*' in BPF store pseudoc instruction. */ lex_type['*'] |= LEX_BEGIN_NAME; - /* Set the machine number and endian. */ - gas_cgen_cpu_desc = bpf_cgen_cpu_open (CGEN_CPU_OPEN_ENDIAN, - target_big_endian ? - CGEN_ENDIAN_BIG : CGEN_ENDIAN_LITTLE, - CGEN_CPU_OPEN_INSN_ENDIAN, - CGEN_ENDIAN_LITTLE, - CGEN_CPU_OPEN_ISAS, - bpf_isa, - CGEN_CPU_OPEN_END); - bpf_cgen_init_asm (gas_cgen_cpu_desc); - - /* This is a callback from cgen to gas to parse operands. */ - cgen_set_parse_operand_fn (gas_cgen_cpu_desc, gas_cgen_parse_operand); - /* Set the machine type. */ bfd_default_set_arch_mach (stdoutput, bfd_arch_bpf, bfd_mach_bpf); - init_pseudoc_lex(); } +/* Round up a section size to the appropriate boundary. */ + valueT md_section_align (segT segment, valueT size) { @@ -275,6 +272,20 @@ md_section_align (segT segment, valueT size) return ((size + (1 << align) - 1) & -(1 << align)); } +/* Return non-zero if the indicated VALUE has overflowed the maximum + range expressible by an signed number with the indicated number of + BITS. */ + +static bool +signed_overflow (offsetT value, unsigned bits) +{ + offsetT lim; + if (bits >= sizeof (offsetT) * 8) + return false; + lim = (offsetT) 1 << (bits - 1); + return (value < -lim || value >= lim); +} + /* Functions concerning relocs. */ @@ -310,34 +321,194 @@ md_number_to_chars (char * buf, valueT val, int n) } arelent * -tc_gen_reloc (asection *sec, fixS *fix) +tc_gen_reloc (asection *sec ATTRIBUTE_UNUSED, fixS *fixP) { - return gas_cgen_tc_gen_reloc (sec, fix); -} + bfd_reloc_code_real_type r_type = fixP->fx_r_type; + arelent *reloc; -/* Return the bfd reloc type for OPERAND of INSN at fixup FIXP. This - is called when the operand is an expression that couldn't be fully - resolved. Returns BFD_RELOC_NONE if no reloc type can be found. - *FIXP may be modified if desired. */ + reloc = XNEW (arelent); -bfd_reloc_code_real_type -md_cgen_lookup_reloc (const CGEN_INSN *insn ATTRIBUTE_UNUSED, - const CGEN_OPERAND *operand, - fixS *fixP) -{ - switch (operand->type) + if (fixP->fx_pcrel) + { + r_type = (r_type == BFD_RELOC_8 ? BFD_RELOC_8_PCREL + : r_type == BFD_RELOC_16 ? BFD_RELOC_16_PCREL + : r_type == BFD_RELOC_24 ? BFD_RELOC_24_PCREL + : r_type == BFD_RELOC_32 ? BFD_RELOC_32_PCREL + : r_type == BFD_RELOC_64 ? BFD_RELOC_64_PCREL + : r_type); + } + + reloc->howto = bfd_reloc_type_lookup (stdoutput, r_type); + + if (reloc->howto == (reloc_howto_type *) NULL) { - case BPF_OPERAND_IMM64: - return BFD_RELOC_BPF_64; - case BPF_OPERAND_DISP32: - fixP->fx_pcrel = 1; - return BFD_RELOC_BPF_DISP32; - default: - break; + as_bad_where (fixP->fx_file, fixP->fx_line, + _("relocation is not supported")); + return NULL; } - return BFD_RELOC_NONE; + + //XXX gas_assert (!fixP->fx_pcrel == !reloc->howto->pc_relative); + + reloc->sym_ptr_ptr = XNEW (asymbol *); + *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixP->fx_addsy); + + /* Use fx_offset for these cases. */ + if (fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY + || fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT) + reloc->addend = fixP->fx_offset; + else + reloc->addend = fixP->fx_addnumber; + + reloc->address = fixP->fx_frag->fr_address + fixP->fx_where; + return reloc; } + +/* Relaxations supported by this assembler. */ + +#define RELAX_BRANCH_ENCODE(uncond, constant, length) \ + ((relax_substateT) \ + (0xc0000000 \ + | ((uncond) ? 1 : 0) \ + | ((constant) ? 2 : 0) \ + | ((length) << 2))) + +#define RELAX_BRANCH_P(i) (((i) & 0xf0000000) == 0xc0000000) +#define RELAX_BRANCH_LENGTH(i) (((i) >> 2) & 0xff) +#define RELAX_BRANCH_CONST(i) (((i) & 2) != 0) +#define RELAX_BRANCH_UNCOND(i) (((i) & 1) != 0) + + +/* Compute the length of a branch seuqence, and adjust the stored + length accordingly. If FRAG is NULL, the worst-case length is + returned. */ + +static unsigned +relaxed_branch_length (fragS *fragp, asection *sec, int update) +{ + int length, uncond; + + if (!fragp) + return 8 * 3; + + uncond = RELAX_BRANCH_UNCOND (fragp->fr_subtype); + length = RELAX_BRANCH_LENGTH (fragp->fr_subtype); + + if (uncond) + /* Length is the same for both JA and JAL. */ + length = 8; + else + { + if (RELAX_BRANCH_CONST (fragp->fr_subtype)) + { + int64_t val = fragp->fr_offset; + + if (val < -32768 || val > 32767) + length = 8 * 3; + else + length = 8; + } + else if (fragp->fr_symbol != NULL + && S_IS_DEFINED (fragp->fr_symbol) + && !S_IS_WEAK (fragp->fr_symbol) + && sec == S_GET_SEGMENT (fragp->fr_symbol)) + { + offsetT val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset; + + /* Convert to 64-bit words, minus one. */ + val = (val - 8) / 8; + + /* See if it fits in the signed 16-bits field. */ + if (val < -32768 || val > 32767) + length = 8 * 3; + else + length = 8; + } + else + /* Use short version, and let the linker relax instead, if + appropriate and if supported. */ + length = 8; + } + + if (update) + fragp->fr_subtype = RELAX_BRANCH_ENCODE (uncond, + RELAX_BRANCH_CONST (fragp->fr_subtype), + length); + + return length; +} + +/* Estimate the size of a variant frag before relaxing. */ + +int +md_estimate_size_before_relax (fragS *fragp, asection *sec) +{ + return (fragp->fr_var = relaxed_branch_length (fragp, sec, true)); +} + +/* Read a BPF instruction word from BUF. */ + +static uint64_t +read_insn_word (bfd_byte *buf) +{ + return bfd_getb64 (buf); +} + +/* Write the given signed 16-bit value in the given BUFFER using the + target endianness. */ + +static void +encode_int16 (int16_t value, char *buffer) +{ + uint16_t val = value; + + if (target_big_endian) + { + buffer[0] = (val >> 8) & 0xff; + buffer[1] = val & 0xff; + } + else + { + buffer[1] = (val >> 8) & 0xff; + buffer[0] = val & 0xff; + } +} + +/* Write the given signed 32-bit value in the given BUFFER using the + target endianness. */ + +static void +encode_int32 (int32_t value, char *buffer) +{ + uint32_t val = value; + + if (target_big_endian) + { + buffer[0] = (val >> 24) & 0xff; + buffer[1] = (val >> 16) & 0xff; + buffer[2] = (val >> 8) & 0xff; + buffer[3] = val & 0xff; + } + else + { + buffer[3] = (val >> 24) & 0xff; + buffer[2] = (val >> 16) & 0xff; + buffer[1] = (val >> 8) & 0xff; + buffer[0] = value & 0xff; + } +} + +/* Write a BPF instruction to BUF. */ + +static void +write_insn_bytes (bfd_byte *buf, char *bytes) +{ + int i; + + for (i = 0; i < 8; ++i) + md_number_to_chars ((char *) buf + i, (valueT) bytes[i], 1); +} + /* *FRAGP has been relaxed to its final size, and now needs to have the bytes inside it modified to conform to the new size. @@ -348,35 +519,258 @@ md_cgen_lookup_reloc (const CGEN_INSN *insn ATTRIBUTE_UNUSED, void md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT sec ATTRIBUTE_UNUSED, - fragS *fragP ATTRIBUTE_UNUSED) + fragS *fragp ATTRIBUTE_UNUSED) { - as_fatal (_("convert_frag called")); -} + bfd_byte *buf = (bfd_byte *) fragp->fr_literal + fragp->fr_fix; + expressionS exp; + fixS *fixp; + bpf_insn_word word; + int disp_is_known = 0; + int64_t disp_to_target = 0; -int -md_estimate_size_before_relax (fragS *fragP ATTRIBUTE_UNUSED, - segT segment ATTRIBUTE_UNUSED) -{ - as_fatal (_("estimate_size_before_relax called")); - return 0; + uint64_t code; + + gas_assert (RELAX_BRANCH_P (fragp->fr_subtype)); + + /* Expression to be used in any resulting relocation in the relaxed + instructions. */ + exp.X_op = O_symbol; + exp.X_add_symbol = fragp->fr_symbol; + exp.X_add_number = fragp->fr_offset; + + gas_assert (fragp->fr_var == RELAX_BRANCH_LENGTH (fragp->fr_subtype)); + + /* Read an instruction word from the instruction to be relaxed, and + get the code. */ + word = read_insn_word (buf); + code = (word >> 60) & 0xf; + + /* Determine whether the 16-bit displacement to the target is known + at this point. */ + if (RELAX_BRANCH_CONST (fragp->fr_subtype)) + { + disp_to_target = fragp->fr_offset; + disp_is_known = 1; + } + else if (fragp->fr_symbol != NULL + && S_IS_DEFINED (fragp->fr_symbol) + && !S_IS_WEAK (fragp->fr_symbol) + && sec == S_GET_SEGMENT (fragp->fr_symbol)) + { + offsetT val = S_GET_VALUE (fragp->fr_symbol) + fragp->fr_offset; + /* Convert to 64-bit blocks minus one. */ + disp_to_target = (val - 8) / 8; + disp_is_known = 1; + } + + /* The displacement should fit in a signed 32-bit number. */ + if (disp_is_known && signed_overflow (disp_to_target, 32)) + as_bad_where (fragp->fr_file, fragp->fr_line, + _("signed instruction operand out of range, shall fit in 32 bits")); + + /* Now relax particular jump instructions. */ + if (code == BPF_CODE_JA) + { + /* Unconditional jump. + JA d16 -> JAL d32 */ + + gas_assert (RELAX_BRANCH_UNCOND (fragp->fr_subtype)); + + if (disp_is_known) + { + if (disp_to_target >= -32768 && disp_to_target <= 32767) + { + /* 16-bit disp is known and in range. Install a fixup + for the disp16 if the branch value is not constant. + This will be resolved by the assembler and units + converted. */ + + if (!RELAX_BRANCH_CONST (fragp->fr_subtype)) + { + /* Install fixup for the JA. */ + reloc_howto_type *reloc_howto + = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_BPF_DISP16); + if (!reloc_howto) + abort(); + + fixp = fix_new_exp (fragp, buf - (bfd_byte *) fragp->fr_literal, + bfd_get_reloc_size (reloc_howto), + &exp, + reloc_howto->pc_relative, + BFD_RELOC_BPF_DISP16); + fixp->fx_file = fragp->fr_file; + fixp->fx_line = fragp->fr_line; + } + } + else + { + /* 16-bit disp is known and not in range. Turn the JA + into a JAL with a 32-bit displacement. */ + char bytes[8]; + + bytes[0] = ((BPF_CLASS_JMP32|BPF_CODE_JA|BPF_SRC_K) >> 56) & 0xff; + bytes[1] = (word >> 48) & 0xff; + bytes[2] = 0; /* disp16 high */ + bytes[3] = 0; /* disp16 lo */ + encode_int32 ((int32_t) disp_to_target, bytes + 4); + + write_insn_bytes (buf, bytes); + } + } + else + { + /* The displacement to the target is not known. Do not + relax. The linker will maybe do it if it chooses to. */ + + reloc_howto_type *reloc_howto = NULL; + + gas_assert (!RELAX_BRANCH_CONST (fragp->fr_subtype)); + + /* Install fixup for the JA. */ + reloc_howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_BPF_DISP16); + if (!reloc_howto) + abort (); + + fixp = fix_new_exp (fragp, buf - (bfd_byte *) fragp->fr_literal, + bfd_get_reloc_size (reloc_howto), + &exp, + reloc_howto->pc_relative, + BFD_RELOC_BPF_DISP16); + fixp->fx_file = fragp->fr_file; + fixp->fx_line = fragp->fr_line; + } + + buf += 8; + } + else + { + /* Conditional jump. + JXX d16 -> JXX +1; JA +1; JAL d32 */ + + gas_assert (!RELAX_BRANCH_UNCOND (fragp->fr_subtype)); + + if (disp_is_known) + { + if (disp_to_target >= -32768 && disp_to_target <= 32767) + { + /* 16-bit disp is known and in range. Install a fixup + for the disp16 if the branch value is not constant. + This will be resolved by the assembler and units + converted. */ + + if (!RELAX_BRANCH_CONST (fragp->fr_subtype)) + { + /* Install fixup for the branch. */ + reloc_howto_type *reloc_howto + = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_BPF_DISP16); + if (!reloc_howto) + abort(); + + fixp = fix_new_exp (fragp, buf - (bfd_byte *) fragp->fr_literal, + bfd_get_reloc_size (reloc_howto), + &exp, + reloc_howto->pc_relative, + BFD_RELOC_BPF_DISP16); + fixp->fx_file = fragp->fr_file; + fixp->fx_line = fragp->fr_line; + } + + buf += 8; + } + else + { + /* 16-bit disp is known and not in range. Turn the JXX + into a sequence JXX +1; JA +1; JAL d32. */ + + char bytes[8]; + + /* First, set the 16-bit offset in the current + instruction to 1. */ + + if (target_big_endian) + bfd_putb16 (1, buf + 2); + else + bfd_putl16 (1, buf + 2); + buf += 8; + + /* Then, write the JA + 1 */ + + bytes[0] = 0x05; /* JA */ + bytes[1] = 0x0; + encode_int16 (1, bytes + 2); + bytes[4] = 0x0; + bytes[5] = 0x0; + bytes[6] = 0x0; + bytes[7] = 0x0; + write_insn_bytes (buf, bytes); + buf += 8; + + /* Finally, write the JAL to the target. */ + + bytes[0] = ((BPF_CLASS_JMP32|BPF_CODE_JA|BPF_SRC_K) >> 56) & 0xff; + bytes[1] = 0; + bytes[2] = 0; + bytes[3] = 0; + encode_int32 ((int32_t) disp_to_target, bytes + 4); + write_insn_bytes (buf, bytes); + buf += 8; + } + } + else + { + /* The displacement to the target is not known. Do not + relax. The linker will maybe do it if it chooses to. */ + + reloc_howto_type *reloc_howto = NULL; + + gas_assert (!RELAX_BRANCH_CONST (fragp->fr_subtype)); + + /* Install fixup for the conditional jump. */ + reloc_howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_BPF_DISP16); + if (!reloc_howto) + abort (); + + fixp = fix_new_exp (fragp, buf - (bfd_byte *) fragp->fr_literal, + bfd_get_reloc_size (reloc_howto), + &exp, + reloc_howto->pc_relative, + BFD_RELOC_BPF_DISP16); + fixp->fx_file = fragp->fr_file; + fixp->fx_line = fragp->fr_line; + buf += 8; + } + } + + gas_assert (buf == (bfd_byte *)fragp->fr_literal + + fragp->fr_fix + fragp->fr_var); + + fragp->fr_fix += fragp->fr_var; } -void -md_apply_fix (fixS *fixP, valueT *valP, segT seg) -{ - /* Some fixups for instructions require special attention. This is - handled in the code block below. */ - if ((int) fixP->fx_r_type >= (int) BFD_RELOC_UNUSED) - { - int opindex = (int) fixP->fx_r_type - (int) BFD_RELOC_UNUSED; - const CGEN_OPERAND *operand = cgen_operand_lookup_by_num (gas_cgen_cpu_desc, - opindex); - char *where; +/* Apply a fixS (fixup of an instruction or data that we didn't have + enough info to complete immediately) to the data in a frag. */ - switch (operand->type) +void +md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED) +{ + char *where = fixP->fx_frag->fr_literal + fixP->fx_where; + + switch (fixP->fx_r_type) + { + case BFD_RELOC_BPF_DISP16: + /* Convert from bytes to number of 64-bit words to the target, + minus one. */ + *valP = (((long) (*valP)) - 8) / 8; + break; + case BFD_RELOC_BPF_DISPCALL32: + case BFD_RELOC_BPF_DISP32: + /* Convert from bytes to number of 64-bit words to the target, + minus one. */ + *valP = (((long) (*valP)) - 8) / 8; + + if (fixP->fx_r_type == BFD_RELOC_BPF_DISPCALL32) { - case BPF_OPERAND_DISP32: /* eBPF supports two kind of CALL instructions: the so called pseudo calls ("bpf to bpf") and external calls ("bpf to kernel"). @@ -396,1522 +790,852 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg) Note that the CALL instruction has only one operand, so this code is executed only once per instruction. */ - where = fixP->fx_frag->fr_literal + fixP->fx_where + 1; - where[0] = target_big_endian ? 0x01 : 0x10; - /* Fallthrough. */ - case BPF_OPERAND_DISP16: - /* The PC-relative displacement fields in jump instructions - shouldn't be in bytes. Instead, they hold the number of - 64-bit words to the target, _minus one_. */ - *valP = (((long) (*valP)) - 8) / 8; + md_number_to_chars (where + 1, target_big_endian ? 0x01 : 0x10, 1); + } + break; + case BFD_RELOC_16_PCREL: + /* Convert from bytes to number of 64-bit words to the target, + minus one. */ + *valP = (((long) (*valP)) - 8) / 8; + break; + default: + break; + } + + if (fixP->fx_addsy == (symbolS *) NULL) + fixP->fx_done = 1; + + if (fixP->fx_done) + { + /* We're finished with this fixup. Install it because + bfd_install_relocation won't be called to do it. */ + switch (fixP->fx_r_type) + { + case BFD_RELOC_8: + md_number_to_chars (where, *valP, 1); + break; + case BFD_RELOC_16: + md_number_to_chars (where, *valP, 2); + break; + case BFD_RELOC_32: + md_number_to_chars (where, *valP, 4); + break; + case BFD_RELOC_64: + md_number_to_chars (where, *valP, 8); + break; + case BFD_RELOC_BPF_DISP16: + md_number_to_chars (where + 2, (uint16_t) *valP, 2); + break; + case BFD_RELOC_BPF_DISP32: + case BFD_RELOC_BPF_DISPCALL32: + md_number_to_chars (where + 4, (uint32_t) *valP, 4); + break; + case BFD_RELOC_16_PCREL: + md_number_to_chars (where + 2, (uint32_t) *valP, 2); + break; + default: + as_bad_where (fixP->fx_file, fixP->fx_line, + _("internal error: can't install fix for reloc type %d (`%s')"), + fixP->fx_r_type, bfd_get_reloc_code_name (fixP->fx_r_type)); + break; + } + } + + /* Tuck `value' away for use by tc_gen_reloc. + See the comment describing fx_addnumber in write.h. + This field is misnamed (or misused :-). */ + fixP->fx_addnumber = *valP; +} + + +/* Instruction writing routines. */ + +/* Encode a BPF instruction in the given buffer BYTES. Non-constant + immediates are encoded as zeroes. */ + +static void +encode_insn (struct bpf_insn *insn, char *bytes, int relaxed) +{ + uint8_t src, dst; + + /* Zero all the bytes. */ + memset (bytes, 0, 16); + + /* First encode the opcodes. Note that we have to handle the + endianness groups of the BPF instructions: 8 | 4 | 4 | 16 | + 32. */ + if (target_big_endian) + { + /* code */ + bytes[0] = (insn->opcode >> 56) & 0xff; + /* regs */ + bytes[1] = (insn->opcode >> 48) & 0xff; + /* offset16 */ + bytes[2] = (insn->opcode >> 40) & 0xff; + bytes[3] = (insn->opcode >> 32) & 0xff; + /* imm32 */ + bytes[4] = (insn->opcode >> 24) & 0xff; + bytes[5] = (insn->opcode >> 16) & 0xff; + bytes[6] = (insn->opcode >> 8) & 0xff; + bytes[7] = insn->opcode & 0xff; + } + else + { + /* code */ + bytes[0] = (insn->opcode >> 56) & 0xff; + /* regs */ + bytes[1] = (((((insn->opcode >> 48) & 0xff) & 0xf) << 4) + | (((insn->opcode >> 48) & 0xff) & 0xf)); + /* offset16 */ + bytes[3] = (insn->opcode >> 40) & 0xff; + bytes[2] = (insn->opcode >> 32) & 0xff; + /* imm32 */ + bytes[7] = (insn->opcode >> 24) & 0xff; + bytes[6] = (insn->opcode >> 16) & 0xff; + bytes[5] = (insn->opcode >> 8) & 0xff; + bytes[4] = insn->opcode & 0xff; + } + + /* Now the registers. */ + src = insn->has_src ? insn->src : 0; + dst = insn->has_dst ? insn->dst : 0; + + if (target_big_endian) + bytes[1] = ((dst & 0xf) << 4) | (src & 0xf); + else + bytes[1] = ((src & 0xf) << 4) | (dst & 0xf); + + /* Now the immediates that are known to be constant. */ + + if (insn->has_imm32 && insn->imm32.X_op == O_constant) + { + int64_t imm = insn->imm32.X_add_number; + + if (signed_overflow (imm, 32)) + as_bad (_("signed immediate out of range, shall fit in 32 bits")); + else + encode_int32 (insn->imm32.X_add_number, bytes + 4); + } + + if (insn->has_disp32 && insn->disp32.X_op == O_constant) + { + int64_t disp = insn->disp32.X_add_number; + + if (signed_overflow (disp, 32)) + as_bad (_("signed pc-relative offset out of range, shall fit in 32 bits")); + else + encode_int32 (insn->disp32.X_add_number, bytes + 4); + } + + if (insn->has_offset16 && insn->offset16.X_op == O_constant) + { + int64_t offset = insn->offset16.X_add_number; + + if (signed_overflow (offset, 16)) + as_bad (_("signed pc-relative offset out of range, shall fit in 16 bits")); + else + encode_int16 (insn->offset16.X_add_number, bytes + 2); + } + + if (insn->has_disp16 && insn->disp16.X_op == O_constant) + { + int64_t disp = insn->disp16.X_add_number; + + if (!relaxed && signed_overflow (disp, 16)) + as_bad (_("signed pc-relative offset out of range, shall fit in 16 bits")); + else + encode_int16 (insn->disp16.X_add_number, bytes + 2); + } + + if (insn->has_imm64 && insn->imm64.X_op == O_constant) + { + uint64_t imm64 = insn->imm64.X_add_number; + + if (target_big_endian) + { + bytes[12] = (imm64 >> 56) & 0xff; + bytes[13] = (imm64 >> 48) & 0xff; + bytes[14] = (imm64 >> 40) & 0xff; + bytes[15] = (imm64 >> 32) & 0xff; + bytes[4] = (imm64 >> 24) & 0xff; + bytes[5] = (imm64 >> 16) & 0xff; + bytes[6] = (imm64 >> 8) & 0xff; + bytes[7] = imm64 & 0xff; + } + else + { + bytes[15] = (imm64 >> 56) & 0xff; + bytes[14] = (imm64 >> 48) & 0xff; + bytes[13] = (imm64 >> 40) & 0xff; + bytes[12] = (imm64 >> 32) & 0xff; + bytes[7] = (imm64 >> 24) & 0xff; + bytes[6] = (imm64 >> 16) & 0xff; + bytes[5] = (imm64 >> 8) & 0xff; + bytes[4] = imm64 & 0xff; + } + } +} + +/* Install the fixups in INSN in their proper location in the + specified FRAG at the location pointed by WHERE. */ + +static void +install_insn_fixups (struct bpf_insn *insn, fragS *frag, long where) +{ + if (insn->has_imm64) + { + switch (insn->imm64.X_op) + { + case O_symbol: + case O_subtract: + case O_add: + { + reloc_howto_type *reloc_howto; + int size; + + reloc_howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_BPF_64); + if (!reloc_howto) + abort (); + + size = bfd_get_reloc_size (reloc_howto); + + fix_new_exp (frag, where, + size, &insn->imm64, reloc_howto->pc_relative, + BFD_RELOC_BPF_64); + break; + } + case O_constant: + /* Already handled in encode_insn. */ break; default: - break; + abort (); } } - /* And now invoke CGEN's handler, which will eventually install - *valP into the corresponding operand. */ - gas_cgen_md_apply_fix (fixP, valP, seg); -} - -/* - The BPF pseudo grammar: - - instruction : bpf_alu_insn - | bpf_alu32_insn - | bpf_jump_insn - | bpf_load_store_insn - | bpf_load_store32_insn - | bpf_non_generic_load - | bpf_endianness_conv_insn - | bpf_64_imm_load_insn - | bpf_atomic_insn - ; - - bpf_alu_insn : BPF_REG bpf_alu_operator register_or_imm32 - ; - - bpf_alu32_insn : BPF_REG32 bpf_alu_operator register32_or_imm32 - ; - - bpf_jump_insn : BPF_JA offset - | IF BPF_REG bpf_jump_operator register_or_imm32 BPF_JA offset - | IF BPF_REG32 bpf_jump_operator register_or_imm32 BPF_JA offset - | BPF_CALL offset - | BPF_EXIT - ; - - bpf_load_store_insn : BPF_REG CHR_EQUAL bpf_size_cast BPF_CHR_OPEN_BR \ - register_and_offset BPF_CHR_CLSE_BR - | bpf_size_cast register_and_offset CHR_EQUAL BPF_REG - ; - - bpf_load_store32_insn : BPF_REG CHR_EQUAL bpf_size_cast BPF_CHR_OPEN_BR \ - register32_and_offset BPF_CHR_CLSE_BR - | bpf_size_cast register_and_offset CHR_EQUAL BPF_REG32 - ; - - bpf_non_generic_load : BPF_REG_R0 CHR_EQUAL bpf_size_cast BPF_LD BPF_CHR_OPEN_BR \ - imm32 BPF_CHR_CLSE_BR - ; - - bpf_endianness_conv_insn : BPF_REG_N bpf_endianness_mnem BPF_REG_N - ; - - bpf_64_imm_load_insn : BPF_REG imm64 BPF_LL - ; - - bpf_atomic_insn : BPF_LOCK bpf_size_cast_32_64 register_and_offset BPF_ADD BPF_REG - - register_and_offset : BPF_CHR_OPEN_BR BPF_REG offset BPF_CHR_CLSE_BR - ; - - register32_and_offset : BPF_CHR_OPEN_BR BPF_REG32 offset BPF_CHR_CLSE_BR - ; - - bpf_size_cast : CHR_START BPF_CHR_OPEN_BR bpf_size CHR_START BPF_CHR_CLSE_BR - ; - - bpf_size_cast_32_64 : CHR_START BPF_CHR_OPEN_BR bpf_size_cast_32_64 CHR_STAR BPF_CHR_CLSE_BR - ; - - bpf_size_32_64 : BPF_CAST_U32 - | BPF_CAST_U64 - ; - - bpf_size : BPF_CAST_U8 - | BPF_CAST_U16 - | BPF_CAST_U32 - | BPF_CAST_U64 - ; - - bpf_jump_operator : BPF_JEQ - | BPF_JGT - | BPF_JGE - | BPF_JNE - | BPF_JSGT - | BPF_JSGE - | BPF_JLT - | BPF_JLE - | BPF_JSLT - | BPF_JSLE - ; - - bpf_alu_operator : BPF_ADD - | BPF_SUB - | BPF_MUL - | BPF_DIV - | BPF_OR - | BPF_AND - | BPF_LSH - | BPF_RSH - | BPF_NEG - | BPF_MOD - | BPF_XOR - | BPF_ARSH - | CHR_EQUAL - ; - - bpf_endianness_mnem : BPF_LE16 - | BPF_LE32 - | BPF_LE64 - | BPF_BE16 - | BPF_BE32 - | BPF_BE64 - ; - - offset : BPF_EXPR - | BPF_SYMBOL - ; - - register_or_imm32 : BPF_REG - | expression - ; - - register32_or_imm32 : BPF_REG32 - | expression - ; - - imm32 : BPF_EXPR - | BPF_SYMBOL - ; - - imm64 : BPF_EXPR - | BPF_SYMBOL - ; - - register_or_expression : BPF_EXPR - | BPF_REG - ; - - BPF_EXPR : GAS_EXPR - -*/ - -enum bpf_token_type - { - /* Keep grouped to quickly access. */ - BPF_ADD, - BPF_SUB, - BPF_MUL, - BPF_DIV, - BPF_OR, - BPF_AND, - BPF_LSH, - BPF_RSH, - BPF_MOD, - BPF_XOR, - BPF_MOV, - BPF_ARSH, - BPF_NEG, - - BPF_REG, - - BPF_IF, - BPF_GOTO, - - /* Keep grouped to quickly access. */ - BPF_JEQ, - BPF_JGT, - BPF_JGE, - BPF_JLT, - BPF_JLE, - BPF_JSET, - BPF_JNE, - BPF_JSGT, - BPF_JSGE, - BPF_JSLT, - BPF_JSLE, - - BPF_SYMBOL, - BPF_CHR_CLSE_BR, - BPF_CHR_OPEN_BR, - - /* Keep grouped to quickly access. */ - BPF_CAST_U8, - BPF_CAST_U16, - BPF_CAST_U32, - BPF_CAST_U64, - - /* Keep grouped to quickly access. */ - BPF_LE16, - BPF_LE32, - BPF_LE64, - BPF_BE16, - BPF_BE32, - BPF_BE64, - - BPF_LOCK, - - BPF_IND_CALL, - BPF_LD, - BPF_LL, - BPF_EXPR, - BPF_UNKNOWN, - }; - -static int -valid_expr (const char *e, const char **end_expr) -{ - invalid_expression = NULL; - char *hold = input_line_pointer; - expressionS exp; - - input_line_pointer = (char *) e; - deferred_expression (&exp); - *end_expr = input_line_pointer; - input_line_pointer = hold; - - return invalid_expression == NULL; -} - -static char * -build_bpf_non_generic_load (char *src, enum bpf_token_type cast, - const char *imm32) -{ - char *bpf_insn; - static const char *cast_rw[] = {"b", "h", "w", "dw"}; - - bpf_insn = xasprintf ("%s%s%s %s%s%s%s", - "ld", - src ? "ind" : "abs", - cast_rw[cast - BPF_CAST_U8], - src ? "%" : "", - src ? src : "", - src ? "," : "", - imm32); - return bpf_insn; -} - -static char * -build_bpf_atomic_insn (char *dst, char *src, - enum bpf_token_type atomic_insn, - enum bpf_token_type cast, - const char *offset) -{ - char *bpf_insn; - static const char *cast_rw[] = {"w", "dw"}; - static const char *mnem[] = {"xadd"}; - - bpf_insn = xasprintf ("%s%s [%%%s%s%s],%%%s", mnem[atomic_insn - BPF_ADD], - cast_rw[cast - BPF_CAST_U32], dst, - *offset != '+' ? "+" : "", - offset, src); - return bpf_insn; -} - -static char * -build_bpf_jmp_insn (char *dst, char *src, - char *imm32, enum bpf_token_type op, - const char *sym, const char *offset) -{ - char *bpf_insn; - static const char *mnem[] = + if (insn->has_imm32) { - "jeq", "jgt", "jge", "jlt", - "jle", "jset", "jne", "jsgt", - "jsge", "jslt", "jsle" - }; + switch (insn->imm32.X_op) + { + case O_symbol: + case O_subtract: + case O_add: + case O_uminus: + { + reloc_howto_type *reloc_howto; + int size; - const char *in32 = (*dst == 'w' ? "32" : ""); + reloc_howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32); + if (!reloc_howto) + abort (); - *dst = 'r'; - if (src) - *src = 'r'; + size = bfd_get_reloc_size (reloc_howto); - bpf_insn = xasprintf ("%s%s %%%s,%s%s,%s", - mnem[op - BPF_JEQ], in32, dst, - src ? "%" : "", - src ? src : imm32, - offset ? offset : sym); - return bpf_insn; -} + fix_new_exp (frag, where + 4, + size, &insn->imm32, reloc_howto->pc_relative, + BFD_RELOC_32); + break; + } + case O_constant: + /* Already handled in encode_insn. */ + break; + default: + abort (); + } + } -static char * -build_bpf_arithm_insn (char *dst, char *src, - int load64, const char *imm32, - enum bpf_token_type type) -{ - char *bpf_insn; - static const char *mnem[] = + if (insn->has_disp32) { - "add", "sub", "mul", "div", - "or", "and", "lsh", "rsh", - "mod", "xor", "mov", "arsh", - "neg", - }; - const char *in32 = (*dst == 'w' ? "32" : ""); + switch (insn->disp32.X_op) + { + case O_symbol: + case O_subtract: + case O_add: + { + reloc_howto_type *reloc_howto; + int size; + unsigned int bfd_reloc + = (insn->id == BPF_INSN_CALL + ? BFD_RELOC_BPF_DISPCALL32 + : BFD_RELOC_BPF_DISP32); - *dst = 'r'; - if (src) - *src = 'r'; + reloc_howto = bfd_reloc_type_lookup (stdoutput, bfd_reloc); + if (!reloc_howto) + abort (); + + size = bfd_get_reloc_size (reloc_howto); + + fix_new_exp (frag, where, + size, &insn->disp32, reloc_howto->pc_relative, + bfd_reloc); + break; + } + case O_constant: + /* Already handled in encode_insn. */ + break; + default: + abort (); + } + } + + if (insn->has_offset16) + { + switch (insn->offset16.X_op) + { + case O_symbol: + case O_subtract: + case O_add: + { + reloc_howto_type *reloc_howto; + int size; + + /* XXX we really need a new pc-rel offset in bytes + relocation for this. */ + reloc_howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_BPF_DISP16); + if (!reloc_howto) + abort (); + + size = bfd_get_reloc_size (reloc_howto); + + fix_new_exp (frag, where, + size, &insn->offset16, reloc_howto->pc_relative, + BFD_RELOC_BPF_DISP16); + break; + } + case O_constant: + /* Already handled in encode_insn. */ + break; + default: + abort (); + } + } + + if (insn->has_disp16) + { + switch (insn->disp16.X_op) + { + case O_symbol: + case O_subtract: + case O_add: + { + reloc_howto_type *reloc_howto; + int size; + + reloc_howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_BPF_DISP16); + if (!reloc_howto) + abort (); + + size = bfd_get_reloc_size (reloc_howto); + + fix_new_exp (frag, where, + size, &insn->disp16, reloc_howto->pc_relative, + BFD_RELOC_BPF_DISP16); + break; + } + case O_constant: + /* Already handled in encode_insn. */ + break; + default: + abort (); + } + } - if (type == BPF_NEG) - bpf_insn = xasprintf ("%s%s %%%s", mnem[type - BPF_ADD], in32, dst); - else if (load64) - bpf_insn = xasprintf ("%s %%%s,%s", "lddw", dst, imm32); - else - bpf_insn = xasprintf ("%s%s %%%s,%s%s", mnem[type - BPF_ADD], - in32, dst, - src ? "%" : "", - src ? src: imm32); - return bpf_insn; } -static char * -build_bpf_endianness (char *dst, enum bpf_token_type endianness) -{ - char *bpf_insn; - static const char *size[] = {"16", "32", "64"}; - int be = 1; - - if (endianness == BPF_LE16 - || endianness == BPF_LE32 - || endianness == BPF_LE64) - be = 0; - else - gas_assert (endianness == BPF_BE16 || endianness == BPF_BE32 || endianness == BPF_BE64); - - bpf_insn = xasprintf ("%s %%%s,%s", be ? "endbe" : "endle", - dst, be ? size[endianness - BPF_BE16] : size[endianness - BPF_LE16]); - return bpf_insn; -} - -static char * -build_bpf_load_store_insn (char *dst, char *src, - enum bpf_token_type cast, - const char *offset, int isload) -{ - char *bpf_insn; - static const char *cast_rw[] = {"b", "h", "w", "dw"}; - - *dst = *src = 'r'; - if (isload) - bpf_insn = xasprintf ("%s%s %%%s,[%%%s%s%s]", "ldx", - cast_rw[cast - BPF_CAST_U8], dst, src, - *offset != '+' ? "+" : "", - offset); - else - bpf_insn = xasprintf ("%s%s [%%%s%s%s],%%%s", "stx", - cast_rw[cast - BPF_CAST_U8], dst, - *offset != '+' ? "+" : "", - offset, src); - return bpf_insn; -} - -static int -look_for_reserved_word (const char *token, enum bpf_token_type *type) +/* Add a new insn to the list of instructions. */ + +static void +add_fixed_insn (struct bpf_insn *insn) { + char *this_frag = frag_more (insn->size); + char bytes[16]; int i; - static struct - { - const char *name; - enum bpf_token_type type; - } reserved_words[] = - { - { - .name = "if", - .type = BPF_IF - }, - { - .name = "goto", - .type = BPF_GOTO - }, - { - .name = "le16", - .type = BPF_LE16 - }, - { - .name = "le32", - .type = BPF_LE32 - }, - { - .name = "le64", - .type = BPF_LE64 - }, - { - .name = "be16", - .type = BPF_BE16 - }, - { - .name = "be32", - .type = BPF_BE32 - }, - { - .name = "be64", - .type = BPF_BE64 - }, - { - .name = "lock", - .type = BPF_LOCK - }, - { - .name = "callx", - .type = BPF_IND_CALL - }, - { - .name = "skb", - .type = BPF_LD - }, - { - .name = "ll", - .type = BPF_LL - }, - { - .name = NULL, - } - }; - for (i = 0; reserved_words[i].name; ++i) - if (*reserved_words[i].name == *token - && !strcmp (reserved_words[i].name, token)) - { - *type = reserved_words[i].type; - return 1; - } + /* First encode the known parts of the instruction, including + opcodes and constant immediates, and write them to the frag. */ + encode_insn (insn, bytes, 0 /* relax */); + for (i = 0; i < insn->size; ++i) + md_number_to_chars (this_frag + i, (valueT) bytes[i], 1); - return 0; + /* Now install the instruction fixups. */ + install_insn_fixups (insn, frag_now, + this_frag - frag_now->fr_literal); } -static int -is_register (const char *token, int len) +/* Add a new relaxable to the list of instructions. */ + +static void +add_relaxed_insn (struct bpf_insn *insn, expressionS *exp) { - if (token[0] == 'r' || token[0] == 'w') - if ((len == 2 && isdigit (token[1])) - || (len == 3 && token[1] == '1' && token[2] == '0')) - return 1; + char bytes[16]; + int i; + char *this_frag; + unsigned worst_case = relaxed_branch_length (NULL, NULL, 0); + unsigned best_case = insn->size; - return 0; + /* We only support relaxing branches, for the moment. */ + relax_substateT subtype + = RELAX_BRANCH_ENCODE (insn->id == BPF_INSN_JAR, + exp->X_op == O_constant, + worst_case); + + frag_grow (worst_case); + this_frag = frag_more (0); + + /* First encode the known parts of the instruction, including + opcodes and constant immediates, and write them to the frag. */ + encode_insn (insn, bytes, 1 /* relax */); + for (i = 0; i < insn->size; ++i) + md_number_to_chars (this_frag + i, (valueT) bytes[i], 1); + + /* Note that instruction fixups will be applied once the frag is + relaxed, in md_convert_frag. */ + frag_var (rs_machine_dependent, + worst_case, best_case, + subtype, exp->X_add_symbol, exp->X_add_number /* offset */, + NULL); } -static enum bpf_token_type -is_cast (const char *token) -{ - static const char *cast_rw[] = {"u8", "u16", "u32", "u64"}; - unsigned int i; + +/* Parse an operand expression. Returns the first character that is + not part of the expression, or NULL in case of parse error. - for (i = 0; i < ARRAY_SIZE (cast_rw); ++i) - if (!strcmp (token, cast_rw[i])) - return BPF_CAST_U8 + i; + See md_operand below to see how exp_parse_failed is used. */ - return BPF_UNKNOWN; -} - -static enum bpf_token_type -get_token (const char **insn, char *token, size_t *tlen) -{ -#define GET() \ - (*str == '\0' \ - ? EOF \ - : *(unsigned char *)(str++)) - -#define UNGET() (--str) - -#define START_EXPR() \ - do \ - { \ - if (expr == NULL) \ - expr = str - 1; \ - } while (0) - -#define SCANNER_SKIP_WHITESPACE() \ - do \ - { \ - do \ - ch = GET (); \ - while (ch != EOF \ - && ((ch) == ' ' || (ch) == '\t')); \ - if (ch != EOF) \ - UNGET (); \ - } while (0) - - const char *str = *insn; - int ch, ch2 = 0; - enum bpf_token_type ttype = BPF_UNKNOWN; - size_t len = 0; - const char *expr = NULL; - const char *end_expr = NULL; - int state = 0; - int return_token = 0; - - while (1) - { - ch = GET (); - - if (ch == EOF || len > MAX_TOKEN_SZ) - break; - - switch (pseudoc_lex[(unsigned char) ch]) - { - case LEX_IS_WHITESPACE: - SCANNER_SKIP_WHITESPACE (); - return_token = 1; - - switch (state) - { - case 12: /* >' ' */ - ttype = BPF_JGT; - break; - - case 17: /* ==' ' */ - ttype = BPF_JEQ; - break; - - case 18: /* <' ' */ - ttype = BPF_JLT; - break; - - case 20: /* &' ' */ - ttype = BPF_JSET; - break; - - case 22: /* s<' '*/ - ttype = BPF_JSLT; - break; - - case 14: /* s> ' ' */ - ttype = BPF_JSGT; - break; - - case 16: /* =' ' */ - ttype = BPF_MOV; - break; - - default: - return_token = 0; - } - break; - - case LEX_IS_EXCLA: - token[len++] = ch; - state = 21; - break; - - case LEX_IS_ARITHM_OP: - if (state == 16) - { - /* ='-' is handle as '=' */ - UNGET (); - ttype = BPF_MOV; - return_token = 1; - break; - } - - START_EXPR(); - token[len++] = ch; - switch (ch) - { -#define BPF_ARITHM_OP(op, type) \ - case (op): \ - state = 6; \ - ttype = (type); \ - break; - - BPF_ARITHM_OP('+', BPF_ADD); - BPF_ARITHM_OP('-', BPF_SUB); - BPF_ARITHM_OP('*', BPF_MUL); - BPF_ARITHM_OP('/', BPF_DIV); - BPF_ARITHM_OP('|', BPF_OR); - BPF_ARITHM_OP('%', BPF_MOD); - BPF_ARITHM_OP('^', BPF_XOR); - - case '&': - state = 20; /* '&' */ - break; - - case '<': - switch (state) - { - case 0: - state = 18; /* '<' */ - break; - - case 18: - state = 19; /* <'<' */ - break; - - case 8: - state = 22; /* s'<' */ - break; - } - break; - - case '>': - switch (state) - { - case 0: - state = 12; /* '>' */ - break; - - case 12: - state = 13; /* >'>' */ - break; - - case 8: - state = 14; /* s'>' */ - break; - - case 14: - state = 15; /* s>'>' */ - break; - } - break; - } - break; - - case LEX_IS_STAR: - switch (state) - { - case 0: - token[len++] = ch; - START_EXPR (); - state = 2; /* '*', It could be the fist cast char. */ - break; - - case 16: /* ='*' Not valid token. */ - ttype = BPF_MOV; - return_token = 1; - UNGET (); - break; - - case 4: /* *(uXX'*' */ - token[len++] = ch; - state = 5; - break; - } - break; - - case LEX_IS_OPEN_BR: - START_EXPR (); - token[len++] = ch; - return_token = 1; - - switch (state) - { - case 2: - state = 3; /* *'(' second char of a cast or expr. */ - return_token = 0; - break; - - case 6: - if (valid_expr (expr, &end_expr)) - { - len = end_expr - expr; - memcpy (token, expr, len); - ttype = BPF_EXPR; - str = end_expr; - } - else - { - len = 0; - while (*invalid_expression) - token[len++] = *invalid_expression++; - - token[len] = 0; - ttype = BPF_UNKNOWN; - } - break; - - default: - ttype = BPF_CHR_OPEN_BR; - SCANNER_SKIP_WHITESPACE (); - ch2 = GET (); - - if ((isdigit (ch2) || ch2 == '(') - && valid_expr (expr, &end_expr)) - { - len = end_expr - expr; - memcpy (token, expr, len); - ttype = BPF_EXPR; - str = end_expr; - } - else - UNGET (); - } - break; - - case LEX_IS_CLSE_BR: - token[len++] = ch; - - if (state == 0) - { - ttype = BPF_CHR_CLSE_BR; - return_token = 1; - } - else if (state == 5) /* *(uXX*')' */ - return_token = 1; - break; - - case LEX_IS_EQUAL: - token[len++] = ch; - return_token = 1; - - switch (state) - { - case 0: - state = 16; /* '=' */ - return_token = 0; - break; - - case 16: - state = 17; /* ='=' */ - return_token = 0; - break; - - case 2: /* *'=' */ - ttype = BPF_MUL; - break; - - case 10: /* s>>'=' */ - ttype = BPF_ARSH; - break; - - case 12: /* >'=' */ - ttype = BPF_JGE; - break; - - case 13: /* >>'=' */ - ttype = BPF_RSH; - break; - - case 14: /* s>'=' */ - ttype = BPF_JSGE; - break; - - case 15: /* s>>'=' */ - ttype = BPF_ARSH; - break; - - case 18: /* <'=' */ - ttype = BPF_JLE; - break; - - case 19: /* <<'=' */ - ttype = BPF_LSH; - break; - - case 20: /* &'=' */ - ttype = BPF_AND; - break; - - case 21: /* !'=' */ - ttype = BPF_JNE; - break; - - case 22: /* s<'=' */ - ttype = BPF_JSLE; - break; - } - break; - - case LEX_IS_SYMBOL_COMPONENT: - return_token = 1; - - switch (state) - { - case 17: /* =='sym' */ - ttype = BPF_JEQ; - break; - - case 12: /* >'sym' */ - ttype = BPF_JGT; - break; - - case 18: /* <'sym' */ - ttype = BPF_JLT; - break; - - case 20: /* &'sym' */ - ttype = BPF_JSET; - break; - - case 14: /*s>'sym' */ - ttype = BPF_JSGT; - break; - - case 22: /* s<'sym' */ - ttype = BPF_JSLT; - break; - - case 16: /* ='sym' */ - ttype = BPF_MOV; - break; - - default: - return_token = 0; - } - - if (return_token) - { - UNGET (); - break; - } - - START_EXPR (); - token[len++] = ch; - - while ((ch2 = GET ()) != EOF) - { - int type; - - type = pseudoc_lex[(unsigned char) ch2]; - if (type != LEX_IS_SYMBOL_COMPONENT) - break; - token[len++] = ch2; - } - - if (ch2 != EOF) - UNGET (); - - if (state == 0) - { - if (len == 1 && ch == 's') - state = 8; /* signed instructions: 's' */ - else - { - ttype = BPF_SYMBOL; - if (is_register (token, len)) - ttype = BPF_REG; - else if (look_for_reserved_word (token, &ttype)) - ; - else if ((pseudoc_lex[(unsigned char) *token] == LEX_IS_ARITHM_OP - || *token == '(' || isdigit(*token)) - && valid_expr (expr, &end_expr)) - { - len = end_expr - expr; - token[len] = '\0'; - ttype = BPF_EXPR; - str = end_expr; - } - - return_token = 1; - } - } - else if (state == 3) /* *('sym' */ - { - if ((ttype = is_cast (&token[2])) != BPF_UNKNOWN) - state = 4; /* *('uXX' */ - else - { - ttype = BPF_EXPR; - return_token = 1; - } - } - else if (state == 6) - { - if (ttype == BPF_SUB) /* neg */ - { - if (is_register (&token[1], len - 1)) - ttype = BPF_NEG; - else if (valid_expr(expr, &end_expr)) - { - len = end_expr - expr; - memcpy(token, expr, len); - ttype = BPF_EXPR; - str = end_expr; - } - else - { - len = 0; - while (*invalid_expression) - token[len++] = *invalid_expression++; - token[len] = 0; - ttype = BPF_UNKNOWN; - } - } - else if (valid_expr (expr, &end_expr)) - { - len = end_expr - expr; - memcpy(token, expr, len); - ttype = BPF_EXPR; - str = end_expr; - } - else - ttype = BPF_UNKNOWN; - - return_token = 1; - } - break; - } - - if (return_token) - { - *tlen = len; - *insn = str; - break; - } - } - - return ttype; - -#undef GET -#undef UNGET -#undef START_EXPR -#undef SCANNER_SKIP_WHITESPACE -#undef BPF_ARITHM_OP -} - -/* - The parser represent a FSM for the grammar described above. So for example - the following rule: - - ` bpf_alu_insn : BPF_REG bpf_alu_operator register_or_imm32' - - Is parser as follows: - - 1. It starts in state 0. - - 2. Consumes next token, e.g: `BPF_REG' and set `state' variable to a - particular state to helps to identify, in this case, that a register - token has been read, a comment surrounded by a single quote in the - pseudo-c token is added along with the new `state' value to indicate - what the scanner has read, e.g.: - - state = 6; // dst_reg = str_cast ( 'src_reg' - - So, in `state 6' the scanner has consumed: a destination register - (BPF_REG), an equal character (BPF_MOV), a cast token (BPF_CAST), an - open parenthesis (BPF_CHR_OPEN_BR) and the source register (BPF_REG). - - 3. If the accumulated tokens represent a complete BPF pseudo-c syntax - instruction then, a validation of the terms is made, for example: if - the registers have the same sizes (32/64 bits), if a specific - destination register must be used, etc., after that, a builder: - build_bfp_{non_generic_load,atomic_insn,jmp_insn,arithm_insn,endianness,load_store_insn} - is invoked, internally, it translates the BPF pseudo-c instruction to - a BPF GAS instruction using the previous terms recollected by the - scanner. - - 4. If a successful build of BPF GAS instruction was done, a final - state is set to `ST_EOI' (End Of Instruction) meaning that is not - expecting for more tokens in such instruction. Otherwise if the - conditions to calling builder are not satisfied an error is emitted - and `parse_err' is set. -*/ +static int exp_parse_failed = 0; static char * -bpf_pseudoc_to_normal_syntax (const char *str, char **errmsg) +parse_expression (char *s, expressionS *exp) { -#define syntax_err(format, ...) \ - do \ - { \ - if (! parse_err) \ - { \ - parse_err = 1; \ - errbuf = xasprintf (format, ##__VA_ARGS__); \ - } \ - } while (0) + char *saved_input_line_pointer = input_line_pointer; + char *saved_s = s; - enum bpf_token_type ttype; - enum bpf_token_type bpf_endianness = BPF_UNKNOWN, - bpf_atomic_insn; - enum bpf_token_type bpf_jmp_op = BPF_JEQ; /* Arbitrary. */ - enum bpf_token_type bpf_cast = BPF_CAST_U8; /* Arbitrary. */ - enum bpf_token_type bpf_arithm_op = BPF_ADD; /* Arbitrary. */ - char *bpf_insn = NULL; - char *errbuf = NULL; - char src_reg[3] = {0}; - char dst_reg[3] = {0}; - char str_imm32[40] = {0}; - char str_offset[40] = {0}; - char str_symbol[MAX_TOKEN_SZ] = {0}; - char token[MAX_TOKEN_SZ] = {0}; - int state = 0; - int parse_err = 0; - size_t tlen; + exp_parse_failed = 0; + input_line_pointer = s; + expression (exp); + s = input_line_pointer; + input_line_pointer = saved_input_line_pointer; - while (*str) + switch (exp->X_op == O_absent || exp_parse_failed) + return NULL; + + /* The expression parser may consume trailing whitespaces. We have + to undo that since the instruction templates may be expecting + these whitespaces. */ + { + char *p; + for (p = s - 1; p >= saved_s && *p == ' '; --p) + --s; + } + + return s; +} + +/* Parse a BPF register name and return the corresponding register + number. Return NULL in case of parse error, or a pointer to the + first character in S that is not part of the register name. */ + +static char * +parse_bpf_register (char *s, char rw, uint8_t *regno) +{ + if (asm_dialect == DIALECT_NORMAL) { - ttype = get_token (&str, token, &tlen); - if (ttype == BPF_UNKNOWN || state == ST_EOI) + rw = 'r'; + if (*s != '%') + return NULL; + s += 1; + + if (*s == 'f' && *(s + 1) == 'p') { - syntax_err ("unexpected token: '%s'", token); - break; + *regno = 10; + s += 2; + return s; } - - switch (ttype) - { - case BPF_UNKNOWN: - case BPF_LL: - break; - - case BPF_REG: - switch (state) - { - case 0: - memcpy (dst_reg, token, tlen); - state = 1; /* 'dst_reg' */ - break; - - case 3: - /* dst_reg bpf_op 'src_reg' */ - memcpy (src_reg, token, tlen); - if (*dst_reg == *src_reg) - bpf_insn = build_bpf_arithm_insn (dst_reg, src_reg, 0, - NULL, bpf_arithm_op); - else - { - syntax_err ("different register sizes: '%s', '%s'", - dst_reg, src_reg); - break; - } - state = ST_EOI; - break; - - case 5: - memcpy (src_reg, token, tlen); - state = 6; /* dst_reg = str_cast ( 'src_reg' */ - break; - - case 9: - memcpy (dst_reg, token, tlen); - state = 10; /* str_cast ( 'dst_reg' */ - break; - - case 11: - /* str_cast ( dst_reg offset ) = 'src_reg' */ - memcpy (src_reg, token, tlen); - bpf_insn = build_bpf_load_store_insn (dst_reg, src_reg, - bpf_cast, str_offset, 0); - state = ST_EOI; - break; - - case 14: - memcpy (dst_reg, token, tlen); - state = 15; /* if 'dst_reg' */ - break; - - case 16: - memcpy (src_reg, token, tlen); - state = 17; /* if dst_reg jmp_op 'src_reg' */ - break; - - case 24: - /* dst_reg = endianness src_reg */ - memcpy (src_reg, token, tlen); - if (*dst_reg == 'r' && !strcmp (dst_reg, src_reg)) - bpf_insn = build_bpf_endianness (dst_reg, bpf_endianness); - else - syntax_err ("invalid operand for instruction: '%s'", token); - - state = ST_EOI; - break; - - case 28: - memcpy (dst_reg, token, tlen); - state = 29; /* lock str_cast ( 'dst_reg' */ - break; - - case 32: - { - /* lock str_cast ( dst_reg offset ) atomic_insn 'src_reg' */ - int with_offset = *str_offset != '\0'; - - memcpy (src_reg, token, tlen); - if ((bpf_cast != BPF_CAST_U32 - && bpf_cast != BPF_CAST_U64) - || *dst_reg != 'r' - || *src_reg != 'r') - syntax_err ("invalid wide atomic instruction"); - else - bpf_insn = build_bpf_atomic_insn (dst_reg, src_reg, bpf_atomic_insn, - bpf_cast, with_offset ? str_offset : str_symbol); - } - - state = ST_EOI; - break; - - case 33: - /* callx 'dst_reg' */ - bpf_insn = xasprintf ("%s %%%s", "call", token); - state = ST_EOI; - break; - - case 35: - memcpy (src_reg, token, tlen); - state = 36; /* dst_reg = str_cast skb [ 'src_reg' */ - break; - } - break; - - case BPF_MOV: - case BPF_ADD: - case BPF_SUB: - case BPF_MUL: - case BPF_DIV: - case BPF_OR: - case BPF_AND: - case BPF_LSH: - case BPF_RSH: - case BPF_MOD: - case BPF_XOR: - case BPF_ARSH: - case BPF_NEG: - switch (state) - { - case 1: - state = 3; /* dst_reg 'arith_op' */ - bpf_arithm_op = ttype; - break; - - case 3: - if (ttype == BPF_NEG) - { - /* reg = -reg */ - bpf_arithm_op = ttype; - memcpy (src_reg, token + 1, tlen - 1); - if (strcmp (dst_reg, src_reg)) - { - syntax_err ("found: '%s', expected: -%s", token, dst_reg); - break; - } - - bpf_insn = build_bpf_arithm_insn (dst_reg, src_reg, 0, - NULL, bpf_arithm_op); - state = ST_EOI; - } - break; - - case 23: - memcpy (src_reg, token, tlen); - state = 11; /* str_cast ( dst_reg offset ) '=' */ - break; - - case 12: - if (ttype == BPF_MOV) - state = 13; /* str_cast ( dst_reg offset ) '=' */ - break; - - case 31: - bpf_atomic_insn = ttype; - state = 32; /* lock str_cast ( dst_reg offset ) 'atomic_insn' */ - break; - - default: - syntax_err ("unexpected '%s'", token); - state = ST_EOI; - } - break; - - case BPF_CAST_U8: - case BPF_CAST_U16: - case BPF_CAST_U32: - case BPF_CAST_U64: - bpf_cast = ttype; - switch (state) - { - case 3: - state = 4; /* dst_reg = 'str_cast' */ - break; - - case 0: - state = 8; /* 'str_cast' */ - break; - - case 26: - state = 27; /* lock 'str_cast' */ - break; - } - break; - - case BPF_CHR_OPEN_BR: - switch (state) - { - case 4: - state = 5; /* dst_reg = str_cast '(' */ - break; - - case 8: - state = 9; /* str_cast '(' */ - break; - - case 27: - state = 28; /* lock str_cast '(' */ - break; - - case 34: - state = 35; /* dst_reg = str_cast skb '[' */ - break; - } - break; - - case BPF_CHR_CLSE_BR: - switch (state) - { - case 7: - /* dst_reg = str_cast ( imm32 ')' */ - bpf_insn = build_bpf_load_store_insn (dst_reg, src_reg, - bpf_cast, str_imm32, 1); - state = ST_EOI; - break; - - case 11: - state = 12; /* str_cast ( dst_reg imm32 ')' */ - break; - - case 21: - /* dst_reg = str_cast ( src_reg offset ')' */ - bpf_insn = build_bpf_load_store_insn (dst_reg, src_reg, - bpf_cast, str_offset, 1); - state = ST_EOI; - break; - - case 22: - state = 23; /* str_cast ( dst_reg offset ')' */ - break; - - case 30: - state = 31; /* lock str_cast ( dst_reg offset ')' */ - break; - - case 37: - /* dst_reg = str_cast skb [ src_reg imm32 ']' */ - if (*dst_reg != 'w' && !strcmp ("r0", dst_reg)) - bpf_insn = build_bpf_non_generic_load (*src_reg != '\0' ? src_reg : NULL, - bpf_cast, str_imm32); - else - syntax_err ("invalid register operand: '%s'", dst_reg); - - state = ST_EOI; - break; - } - break; - - case BPF_EXPR: - switch (state) - { - case 3: - { - /* dst_reg bpf_arithm_op 'imm32' */ - int load64 = 0; - - memcpy (str_imm32, token, tlen); - memset (token, 0, tlen); - - if ((ttype = get_token (&str, token, &tlen)) == BPF_LL - && bpf_arithm_op == BPF_MOV) - load64 = 1; - else if (ttype != BPF_UNKNOWN) - syntax_err ("unexpected token: '%s'", token); - - if (load64 && *dst_reg == 'w') - syntax_err ("unexpected register size: '%s'", dst_reg); - - if (! parse_err) - bpf_insn = build_bpf_arithm_insn (dst_reg, NULL, load64, - str_imm32, bpf_arithm_op); - state = ST_EOI; - } - break; - - case 18: - { - /* if dst_reg jmp_op src_reg goto 'offset' */ - int with_src = *src_reg != '\0'; - - memcpy (str_offset, token, tlen); - if (with_src && *dst_reg != *src_reg) - syntax_err ("different register size: '%s', '%s'", - dst_reg, src_reg); - else - bpf_insn = build_bpf_jmp_insn (dst_reg, with_src ? src_reg : NULL, - with_src ? NULL: str_imm32, - bpf_jmp_op, NULL, str_offset); - state = ST_EOI; - } - break; - - case 19: - /* goto 'offset' */ - memcpy (str_offset, token, tlen); - bpf_insn = xasprintf ("%s %s", "ja", str_offset); - state = ST_EOI; - break; - - case 6: - memcpy (str_offset, token, tlen); - state = 21; /* dst_reg = str_cast ( src_reg 'offset' */ - break; - - case 10: - memcpy (str_offset, token, tlen); - state = 22; /* str_cast ( dst_reg 'offset' */ - break; - - case 16: - memcpy (str_imm32, token, tlen); - state = 25; /* if dst_reg jmp_op 'imm32' */ - break; - - case 29: - memcpy (str_offset, token, tlen); - state = 30; /* lock str_cast ( dst_reg 'offset' */ - break; - - case 34: - /* dst_reg = str_cast skb 'imm32' */ - if (*dst_reg != 'w' && !strcmp ("r0", dst_reg)) - { - memcpy (str_imm32, token, tlen); - bpf_insn = build_bpf_non_generic_load (*src_reg != '\0' ? src_reg : NULL, - bpf_cast, str_imm32); - } - else - syntax_err ("invalid register operand: '%s'", dst_reg); - - state = ST_EOI; - break; - - case 36: - memcpy (str_imm32, token, tlen); - state = 37; /* dst_reg = str_cast skb [ src_reg 'imm32' */ - break; - } - break; - - case BPF_IF: - if (state == 0) - state = 14; - break; - - case BPF_JSGT: - case BPF_JSLT: - case BPF_JSLE: - case BPF_JSGE: - case BPF_JGT: - case BPF_JGE: - case BPF_JLE: - case BPF_JSET: - case BPF_JNE: - case BPF_JLT: - case BPF_JEQ: - if (state == 15) - { - bpf_jmp_op = ttype; - state = 16; /* if dst_reg 'jmp_op' */ - } - break; - - case BPF_GOTO: - switch (state) - { - case 17: - case 25: - state = 18; /* if dst_reg jmp_op src_reg|imm32 'goto' */ - break; - - case 0: - state = 19; - break; - } - break; - - case BPF_SYMBOL: - switch (state) - { - case 18: - { - /* if dst_reg jmp_op src_reg goto 'sym' */ - int with_src = *src_reg != '\0'; - - memcpy (str_symbol, token, tlen); - if (with_src && *dst_reg != *src_reg) - syntax_err ("different register size: '%s', '%s'", - dst_reg, src_reg); - else - bpf_insn = build_bpf_jmp_insn (dst_reg, with_src ? src_reg : NULL, - with_src ? NULL: str_imm32, - bpf_jmp_op, str_symbol, NULL); - state = ST_EOI; - } - break; - - case 19: - /* goto 'sym' */ - memcpy (str_symbol, token, tlen); - bpf_insn = xasprintf ("%s %s", "ja", str_symbol); - state = ST_EOI; - break; - - case 0: - state = ST_EOI; - break; - - case 3: - { - /* dst_reg arithm_op 'sym' */ - int load64 = 0; - - memcpy (str_symbol, token, tlen); - memset (token, 0, tlen); - - if ((ttype = get_token (&str, token, &tlen)) == BPF_LL - && bpf_arithm_op == BPF_MOV) - load64 = 1; - else if (ttype != BPF_UNKNOWN) - syntax_err ("unexpected token: '%s'", token); - - if (load64 && *dst_reg == 'w') - syntax_err ("unexpected register size: '%s'", dst_reg); - - if (! parse_err) - bpf_insn = build_bpf_arithm_insn (dst_reg, NULL, load64, - str_symbol, bpf_arithm_op); - state = ST_EOI; - } - break; - } - break; - - case BPF_LE16: - case BPF_LE32: - case BPF_LE64: - case BPF_BE16: - case BPF_BE32: - case BPF_BE64: - bpf_endianness = ttype; - state = 24; /* dst_reg = 'endianness' */ - break; - - case BPF_LOCK: - state = 26; - break; - - case BPF_IND_CALL: - state = 33; - break; - - case BPF_LD: - state = 34; /* dst_reg = str_cast 'skb' */ - break; - } - - memset (token, 0, tlen); } - if (state != ST_EOI) - syntax_err ("incomplete instruction"); + if (*s != rw) + return NULL; + s += 1; - *errmsg = errbuf; - return bpf_insn; + if (*s == '1') + { + if (*(s + 1) == '0') + { + *regno = 10; + s += 2; + } + else + { + *regno = 1; + s += 1; + } + } + else if (*s >= '0' && *s <= '9') + { + *regno = *s - '0'; + s += 1; + } -#undef syntax_err + return s; } +/* Collect a parse error message. */ + +static int partial_match_length = 0; +static char *errmsg = NULL; + +static void +parse_error (int length, const char *fmt, ...) +{ + if (length > partial_match_length) + { + va_list args; + + free (errmsg); + va_start (args, fmt); + errmsg = xvasprintf (fmt, args); + va_end (args); + partial_match_length = length; + } +} + +/* Assemble a machine instruction in STR and emit the frags/bytes it + assembles to. */ + void -md_assemble (char *str) +md_assemble (char *str ATTRIBUTE_UNUSED) { - const CGEN_INSN *insn; - char *errmsg; - char *a_errmsg; - CGEN_FIELDS fields; - char *normal; + /* There are two different syntaxes that can be used to write BPF + instructions. One is very conventional and like any other + assembly language where each instruction is conformed by an + instruction mnemonic followed by its operands. This is what we + call the "normal" syntax. The other syntax tries to look like C + statements. We have to support both syntaxes in this assembler. -#if CGEN_INT_INSN_P - CGEN_INSN_INT buffer[CGEN_MAX_INSN_SIZE / sizeof (CGEN_INT_INSN_P)]; -#else - unsigned char buffer[CGEN_MAX_INSN_SIZE]; -#endif + One of the many nuisances introduced by this eccentricity is that + in the pseudo-c syntax it is not possible to hash the opcodes + table by instruction mnemonic, because there is none. So we have + no other choice than to try to parse all instruction opcodes + until one matches. This is slow. - gas_cgen_init_parse (); - insn = bpf_cgen_assemble_insn (gas_cgen_cpu_desc, str, &fields, - buffer, &errmsg); - if (insn == NULL) + Another problem is that emitting detailed diagnostics becomes + tricky, since the lack of mnemonic means it is not clear what + instruction was intended by the user, and we cannot emit + diagnostics for every attempted template. So if an instruction + is not parsed, we report the diagnostic corresponding to the + partially parsed instruction that was matched further. */ + + unsigned int idx = 0; + struct bpf_insn insn; + const struct bpf_opcode *opcode; + + /* Initialize the global diagnostic variables. See the parse_error + function above. */ + partial_match_length = 0; + errmsg = NULL; + +#define PARSE_ERROR(...) parse_error (s - str, __VA_ARGS__) + + while ((opcode = bpf_get_opcode (idx++)) != NULL) { - normal = bpf_pseudoc_to_normal_syntax (str, &a_errmsg); - if (normal) - { - insn = bpf_cgen_assemble_insn (gas_cgen_cpu_desc, normal, &fields, - buffer, &a_errmsg); - xfree (normal); - } + const char *p; + char *s; + const char *template + = (asm_dialect == DIALECT_PSEUDOC ? opcode->pseudoc : opcode->normal); - if (insn == NULL) - { - as_bad ("%s", errmsg); - if (a_errmsg) - { - as_bad ("%s", a_errmsg); - xfree (a_errmsg); - } - return; - } + /* Do not try to match opcodes with a higher version than the + selected ISA spec. */ + if (opcode->version > isa_spec) + continue; + + memset (&insn, 0, sizeof (struct bpf_insn)); + insn.size = 8; + for (s = str, p = template; *p != '\0';) + { + if (*p == ' ') + { + /* Expect zero or more spaces. */ + while (*s != '\0' && (*s == ' ' || *s == '\t')) + s += 1; + p += 1; + } + else if (*p == '%') + { + if (*(p + 1) == '%') + { + if (*s != '%') + { + PARSE_ERROR ("expected '%%'"); + break; + } + p += 2; + s += 1; + } + else if (*(p + 1) == 'w') + { + /* Expect zero or more spaces. */ + while (*s != '\0' && (*s == ' ' || *s == '\t')) + s += 1; + p += 2; + } + else if (*(p + 1) == 'W') + { + /* Expect one or more spaces. */ + if (*s != ' ' && *s != '\t') + { + PARSE_ERROR ("expected white space, got '%s'", + s); + break; + } + while (*s != '\0' && (*s == ' ' || *s == '\t')) + s += 1; + p += 2; + } + else if (strncmp (p, "%dr", 3) == 0) + { + uint8_t regno; + char *news = parse_bpf_register (s, 'r', ®no); + + if (news == NULL || (insn.has_dst && regno != insn.dst)) + { + if (news != NULL) + PARSE_ERROR ("expected register r%d, got r%d", + insn.dst, regno); + else + PARSE_ERROR ("expected register name, got '%s'", s); + break; + } + s = news; + insn.dst = regno; + insn.has_dst = 1; + p += 3; + } + else if (strncmp (p, "%sr", 3) == 0) + { + uint8_t regno; + char *news = parse_bpf_register (s, 'r', ®no); + + if (news == NULL || (insn.has_src && regno != insn.src)) + { + if (news != NULL) + PARSE_ERROR ("expected register r%d, got r%d", + insn.dst, regno); + else + PARSE_ERROR ("expected register name, got '%s'", s); + break; + } + s = news; + insn.src = regno; + insn.has_src = 1; + p += 3; + } + else if (strncmp (p, "%dw", 3) == 0) + { + uint8_t regno; + char *news = parse_bpf_register (s, 'w', ®no); + + if (news == NULL || (insn.has_dst && regno != insn.dst)) + { + if (news != NULL) + PARSE_ERROR ("expected register r%d, got r%d", + insn.dst, regno); + else + PARSE_ERROR ("expected register name, got '%s'", s); + break; + } + s = news; + insn.dst = regno; + insn.has_dst = 1; + p += 3; + } + else if (strncmp (p, "%sw", 3) == 0) + { + uint8_t regno; + char *news = parse_bpf_register (s, 'w', ®no); + + if (news == NULL || (insn.has_src && regno != insn.src)) + { + if (news != NULL) + PARSE_ERROR ("expected register r%d, got r%d", + insn.dst, regno); + else + PARSE_ERROR ("expected register name, got '%s'", s); + break; + } + s = news; + insn.src = regno; + insn.has_src = 1; + p += 3; + } + else if (strncmp (p, "%i32", 4) == 0 + || strncmp (p, "%I32", 4) == 0) + { + if (p[1] == 'I') + { + while (*s == ' ' || *s == '\t') + s += 1; + if (*s != '+' && *s != '-') + { + PARSE_ERROR ("expected `+' or `-', got `%c'", *s); + break; + } + } + + s = parse_expression (s, &insn.imm32); + if (s == NULL) + { + PARSE_ERROR ("expected signed 32-bit immediate"); + break; + } + insn.has_imm32 = 1; + p += 4; + } + else if (strncmp (p, "%o16", 4) == 0) + { + while (*s == ' ' || *s == '\t') + s += 1; + if (*s != '+' && *s != '-') + { + PARSE_ERROR ("expected `+' or `-', got `%c'", *s); + break; + } + + s = parse_expression (s, &insn.offset16); + if (s == NULL) + { + PARSE_ERROR ("expected signed 16-bit offset"); + break; + } + insn.has_offset16 = 1; + p += 4; + } + else if (strncmp (p, "%d16", 4) == 0) + { + s = parse_expression (s, &insn.disp16); + if (s == NULL) + { + PARSE_ERROR ("expected signed 16-bit displacement"); + break; + } + insn.has_disp16 = 1; + insn.is_relaxable = 1; + p += 4; + } + else if (strncmp (p, "%d32", 4) == 0) + { + s = parse_expression (s, &insn.disp32); + if (s == NULL) + { + PARSE_ERROR ("expected signed 32-bit displacement"); + break; + } + insn.has_disp32 = 1; + p += 4; + } + else if (strncmp (p, "%i64", 4) == 0) + { + s = parse_expression (s, &insn.imm64); + if (s == NULL) + { + PARSE_ERROR ("expected signed 64-bit immediate"); + break; + } + insn.has_imm64 = 1; + insn.size = 16; + p += 4; + } + else + as_fatal (_("invalid %%-tag in BPF opcode '%s'\n"), template); + } + else + { + /* Match a literal character. */ + if (*s != *p) + { + if (*s == '\0') + PARSE_ERROR ("expected '%c'", *p); + else if (*s == '%') + { + /* This is to workaround a bug in as_bad. */ + char tmp[3]; + + tmp[0] = '%'; + tmp[1] = '%'; + tmp[2] = '\0'; + + PARSE_ERROR ("expected '%c', got '%s'", *p, tmp); + } + else + PARSE_ERROR ("expected '%c', got '%c'", *p, *s); + break; + } + p += 1; + s += 1; + } + } + + if (*p == '\0') + { + /* Allow white spaces at the end of the line. */ + while (*s != '\0' && (*s == ' ' || *s == '\t')) + s += 1; + if (*s == '\0') + /* We parsed an instruction successfully. */ + break; + PARSE_ERROR ("extra junk at end of line"); + } } - gas_cgen_finish_insn (insn, buffer, CGEN_FIELDS_BITSIZE (&fields), - 0, /* zero to ban relaxable insns. */ - NULL); /* NULL so results not returned here. */ + if (opcode == NULL) + { + as_bad (_("unrecognized instruction `%s'"), str); + if (errmsg != NULL) + { + as_bad ("%s", errmsg); + free (errmsg); + } + + return; + } + insn.id = opcode->id; + insn.opcode = opcode->opcode; + +#undef PARSE_ERROR + + /* Generate the frags and fixups for the parsed instruction. */ + if (do_relax && isa_spec >= BPF_V4 && insn.is_relaxable) + { + expressionS *relaxable_exp = NULL; + + if (insn.has_disp16) + relaxable_exp = &insn.disp16; + else + abort (); + + add_relaxed_insn (&insn, relaxable_exp); + } + else + add_fixed_insn (&insn); + + /* Emit DWARF2 debugging information. */ + dwarf2_emit_insn (insn.size); } +/* Parse an operand that is machine-specific. */ + void md_operand (expressionS *expressionP) { - invalid_expression = input_line_pointer - 1; - gas_cgen_md_operand (expressionP); + /* If this hook is invoked it means GAS failed to parse a generic + expression. We should inhibit the as_bad in expr.c, so we can fail + while parsing instruction alternatives. To do that, we change the + expression to not have an O_absent. But then we also need to set + exp_parse_failed to parse_expression above does the right thing. */ + ++input_line_pointer; + expressionP->X_op = O_constant; + expressionP->X_add_number = 0; + exp_parse_failed = 1; } - symbolS * md_undefined_symbol (char *name ATTRIBUTE_UNUSED) { @@ -1929,3 +1653,38 @@ md_atof (int type, char *litP, int *sizeP) { return ieee_md_atof (type, litP, sizeP, false); } + + +/* Determine whether the equal sign in the given string corresponds to + a BPF instruction, i.e. when it is not to be considered a symbol + assignment. */ + +bool +bpf_tc_equal_in_insn (int c ATTRIBUTE_UNUSED, char *str ATTRIBUTE_UNUSED) +{ + uint8_t regno; + + /* Only pseudo-c instructions can have equal signs, and of these, + all that could be confused with a symbol assignment all start + with a register name. */ + if (asm_dialect == DIALECT_PSEUDOC) + { + char *w = parse_bpf_register (str, 'w', ®no); + char *r = parse_bpf_register (str, 'r', ®no); + + if ((w != NULL && *w == '\0') + || (r != NULL && *r == '\0')) + return 1; + } + + return 0; +} + +/* Some special processing for a BPF ELF file. */ + +void +bpf_elf_final_processing (void) +{ + /* Annotate the BPF ISA version in the ELF flag bits. */ + elf_elfheader (stdoutput)->e_flags |= (isa_spec & EF_BPF_CPUVER); +} diff --git a/gas/config/tc-bpf.h b/gas/config/tc-bpf.h index db604dbe8bc..9fb71eddd14 100644 --- a/gas/config/tc-bpf.h +++ b/gas/config/tc-bpf.h @@ -37,7 +37,6 @@ /* .-foo gets turned into PC relative relocs. */ #define DIFF_EXPR_OK 1 -#define GAS_CGEN_PCREL_R_TYPE(R_TYPE) gas_cgen_pcrel_r_type (R_TYPE) /* Call md_pcrel_from_section(), not md_pcrel_from(). */ #define MD_PCREL_FROM_SECTION(FIXP, SEC) md_pcrel_from_section (FIXP, SEC) @@ -52,4 +51,8 @@ a jump to offset 0 means jump to the next instruction. */ #define md_single_noop_insn "ja 0" -#define TC_EQUAL_IN_INSN(c, s) 1 +#define TC_EQUAL_IN_INSN(c, s) bpf_tc_equal_in_insn ((c), (s)) +extern bool bpf_tc_equal_in_insn (int, char *); + +#define elf_tc_final_processing bpf_elf_final_processing +extern void bpf_elf_final_processing (void); diff --git a/gas/config/tc-d10v.c b/gas/config/tc-d10v.c index b09bbe156b6..7ca3b2c85cf 100644 --- a/gas/config/tc-d10v.c +++ b/gas/config/tc-d10v.c @@ -1391,8 +1391,8 @@ find_opcode (struct d10v_opcode *opcode, expressionS myops[]) || myops[i].X_add_number == OPERAND_CONTROL + 12 || myops[i].X_add_number == OPERAND_CONTROL + 13 || myops[i].X_add_number == OPERAND_CONTROL + 15)) - as_warn (_("cr%ld is a reserved control register"), - myops[i].X_add_number - OPERAND_CONTROL); + as_warn (_("cr%d is a reserved control register"), + (int) myops[i].X_add_number - OPERAND_CONTROL); } return opcode; } diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index de35ee2a2c6..e35e2660ed5 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -1151,6 +1151,11 @@ static const arch_entry cpu_arch[] = SUBARCH (rmpquery, RMPQUERY, ANY_RMPQUERY, false), SUBARCH (fred, FRED, ANY_FRED, false), SUBARCH (lkgs, LKGS, ANY_LKGS, false), + SUBARCH (avx_vnni_int16, AVX_VNNI_INT16, ANY_AVX_VNNI_INT16, false), + SUBARCH (sha512, SHA512, ANY_SHA512, false), + SUBARCH (sm3, SM3, ANY_SM3, false), + SUBARCH (sm4, SM4, ANY_SM4, false), + SUBARCH (pbndkb, PBNDKB, PBNDKB, false), }; #undef SUBARCH @@ -4563,6 +4568,90 @@ optimize_encoding (void) i.types[j].bitfield.disp8 = fits_in_disp8 (i.op[j].disps->X_add_number); } + else if (optimize_for_space + && i.tm.base_opcode == 0x29 + && i.tm.opcode_space == SPACE_0F38 + && i.operands == i.reg_operands + && i.op[0].regs == i.op[1].regs + && (!i.tm.opcode_modifier.vex + || !(i.op[0].regs->reg_flags & RegRex)) + && !is_evex_encoding (&i.tm)) + { + /* Optimize: -Os: + pcmpeqq %xmmN, %xmmN -> pcmpeqd %xmmN, %xmmN + vpcmpeqq %xmmN, %xmmN, %xmmM -> vpcmpeqd %xmmN, %xmmN, %xmmM (N < 8) + vpcmpeqq %ymmN, %ymmN, %ymmM -> vpcmpeqd %ymmN, %ymmN, %ymmM (N < 8) + */ + i.tm.opcode_space = SPACE_0F; + i.tm.base_opcode = 0x76; + } + else if (((i.tm.base_opcode >= 0x64 + && i.tm.base_opcode <= 0x66 + && i.tm.opcode_space == SPACE_0F) + || (i.tm.base_opcode == 0x37 + && i.tm.opcode_space == SPACE_0F38)) + && i.operands == i.reg_operands + && i.op[0].regs == i.op[1].regs + && !is_evex_encoding (&i.tm)) + { + /* Optimize: -O: + pcmpgt[bwd] %mmN, %mmN -> pxor %mmN, %mmN + pcmpgt[bwdq] %xmmN, %xmmN -> pxor %xmmN, %xmmN + vpcmpgt[bwdq] %xmmN, %xmmN, %xmmM -> vpxor %xmmN, %xmmN, %xmmM (N < 8) + vpcmpgt[bwdq] %xmmN, %xmmN, %xmmM -> vpxor %xmm0, %xmm0, %xmmM (N > 7) + vpcmpgt[bwdq] %ymmN, %ymmN, %ymmM -> vpxor %ymmN, %ymmN, %ymmM (N < 8) + vpcmpgt[bwdq] %ymmN, %ymmN, %ymmM -> vpxor %ymm0, %ymm0, %ymmM (N > 7) + */ + i.tm.opcode_space = SPACE_0F; + i.tm.base_opcode = 0xef; + if (i.tm.opcode_modifier.vex && (i.op[0].regs->reg_flags & RegRex)) + { + if (i.operands == 2) + { + gas_assert (i.tm.opcode_modifier.sse2avx); + + i.operands = 3; + i.reg_operands = 3; + i.tm.operands = 3; + + i.op[2].regs = i.op[0].regs; + i.types[2] = i.types[0]; + i.flags[2] = i.flags[0]; + i.tm.operand_types[2] = i.tm.operand_types[0]; + + i.tm.opcode_modifier.sse2avx = 0; + } + i.op[0].regs -= i.op[0].regs->reg_num + 8; + i.op[1].regs = i.op[0].regs; + } + } + else if (optimize_for_space + && i.tm.base_opcode == 0x59 + && i.tm.opcode_space == SPACE_0F38 + && i.operands == i.reg_operands + && i.tm.opcode_modifier.vex + && !(i.op[0].regs->reg_flags & RegRex) + && i.op[0].regs->reg_type.bitfield.xmmword + && i.vec_encoding != vex_encoding_vex3) + { + /* Optimize: -Os: + vpbroadcastq %xmmN, %xmmM -> vpunpcklqdq %xmmN, %xmmN, %xmmM (N < 8) + */ + i.tm.opcode_space = SPACE_0F; + i.tm.base_opcode = 0x6c; + i.tm.opcode_modifier.vexvvvv = 1; + + ++i.operands; + ++i.reg_operands; + ++i.tm.operands; + + i.op[2].regs = i.op[0].regs; + i.types[2] = i.types[0]; + i.flags[2] = i.flags[0]; + i.tm.operand_types[2] = i.tm.operand_types[0]; + + swap_2_operands (1, 2); + } } /* Return non-zero for load instruction. */ diff --git a/gas/config/tc-m68hc11.c b/gas/config/tc-m68hc11.c index 270ddf999ce..e1872310bd8 100644 --- a/gas/config/tc-m68hc11.c +++ b/gas/config/tc-m68hc11.c @@ -1574,7 +1574,8 @@ fixup8 (expressionS *oper, int mode, int opmode) { static char trap_id_warn_once = 0; - as_bad (_("Trap id `%ld' is out of range."), oper->X_add_number); + as_bad (_("Trap id `%" PRId64 "' is out of range."), + (int64_t) oper->X_add_number); if (trap_id_warn_once == 0) { trap_id_warn_once = 1; @@ -1585,7 +1586,8 @@ fixup8 (expressionS *oper, int mode, int opmode) if (!(mode & M6812_OP_TRAP_ID) && !check_range (oper->X_add_number, mode)) { - as_bad (_("Operand out of 8-bit range: `%ld'."), oper->X_add_number); + as_bad (_("Operand out of 8-bit range: `%" PRId64 "'."), + (int64_t) oper->X_add_number); } number_to_chars_bigendian (f, oper->X_add_number & 0x0FF, 1); } @@ -1641,8 +1643,8 @@ fixup16 (expressionS *oper, int mode, int opmode ATTRIBUTE_UNUSED) { if (!check_range (oper->X_add_number, mode)) { - as_bad (_("Operand out of 16-bit range: `%ld'."), - oper->X_add_number); + as_bad (_("Operand out of 16-bit range: `%" PRId64 "'."), + (int64_t) oper->X_add_number); } number_to_chars_bigendian (f, oper->X_add_number & 0x0FFFF, 2); } @@ -1689,8 +1691,8 @@ fixup24 (expressionS *oper, int mode, int opmode ATTRIBUTE_UNUSED) { if (!check_range (oper->X_add_number, mode)) { - as_bad (_("Operand out of 16-bit range: `%ld'."), - oper->X_add_number); + as_bad (_("Operand out of 16-bit range: `%" PRId64 "'."), + (int64_t) oper->X_add_number); } number_to_chars_bigendian (f, oper->X_add_number & 0x0FFFFFF, 3); } @@ -1736,8 +1738,8 @@ fixup8_xg (expressionS *oper, int mode, int opmode) else { if (!(check_range (oper->X_add_number, mode))) - as_bad (_("Operand out of 8-bit range: `%ld'."), - oper->X_add_number); + as_bad (_("Operand out of 8-bit range: `%" PRId64 "'."), + (int64_t) oper->X_add_number); number_to_chars_bigendian (f, oper->X_add_number & 0x0FF, 1); } } diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c index 297bb9b2a81..aaf8b9be64f 100644 --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -337,7 +337,8 @@ riscv_set_arch (const char *s) riscv_reset_subsets_list_arch_str (); riscv_set_rvc (false); - if (riscv_subset_supports (&riscv_rps_as, "c")) + if (riscv_subset_supports (&riscv_rps_as, "c") + || riscv_subset_supports (&riscv_rps_as, "zca")) riscv_set_rvc (true); if (riscv_subset_supports (&riscv_rps_as, "ztso")) @@ -1425,6 +1426,18 @@ validate_riscv_insn (const struct riscv_opcode *opc, int length) goto unknown_validate_operand; } break; + case 'c': + switch (*++oparg) + { + /* byte immediate operators, load/store byte insns. */ + case 'h': used_bits |= ENCODE_ZCB_HALFWORD_UIMM (-1U); break; + /* halfword immediate operators, load/store halfword insns. */ + case 'b': used_bits |= ENCODE_ZCB_BYTE_UIMM (-1U); break; + case 'f': break; + default: + goto unknown_validate_operand; + } + break; default: goto unknown_validate_operand; } @@ -3558,6 +3571,47 @@ riscv_ip (char *str, struct riscv_cl_insn *ip, expressionS *imm_expr, goto unknown_riscv_ip_operand; } break; + + case 'c': + switch (*++oparg) + { + case 'h': /* Immediate field for c.lh/c.lhu/c.sh. */ + /* Handle cases, such as c.sh rs2', (rs1'). */ + if (riscv_handle_implicit_zero_offset (imm_expr, asarg)) + continue; + if (my_getSmallExpression (imm_expr, imm_reloc, asarg, p) + || imm_expr->X_op != O_constant + || !VALID_ZCB_HALFWORD_UIMM ((valueT) imm_expr->X_add_number)) + break; + ip->insn_opcode |= ENCODE_ZCB_HALFWORD_UIMM (imm_expr->X_add_number); + goto rvc_imm_done; + + case 'b': /* Immediate field for c.lbu/c.sb. */ + /* Handle cases, such as c.lbu rd', (rs1'). */ + if (riscv_handle_implicit_zero_offset (imm_expr, asarg)) + continue; + if (my_getSmallExpression (imm_expr, imm_reloc, asarg, p) + || imm_expr->X_op != O_constant + || !VALID_ZCB_BYTE_UIMM ((valueT) imm_expr->X_add_number)) + break; + ip->insn_opcode |= ENCODE_ZCB_BYTE_UIMM (imm_expr->X_add_number); + goto rvc_imm_done; + + case 'f': /* Operand for matching immediate 255. */ + if (my_getSmallExpression (imm_expr, imm_reloc, asarg, p) + || imm_expr->X_op != O_constant + || imm_expr->X_add_number != 255) + break; + /* This operand is used for matching immediate 255, and + we do not write anything to encoding by this operand. */ + asarg = expr_parse_end; + imm_expr->X_op = O_absent; + continue; + + default: + goto unknown_riscv_ip_operand; + } + break; default: goto unknown_riscv_ip_operand; } @@ -4322,7 +4376,8 @@ s_riscv_option (int x ATTRIBUTE_UNUSED) riscv_reset_subsets_list_arch_str (); riscv_set_rvc (false); - if (riscv_subset_supports (&riscv_rps_as, "c")) + if (riscv_subset_supports (&riscv_rps_as, "c") + || riscv_subset_supports (&riscv_rps_as, "zca")) riscv_set_rvc (true); if (riscv_subset_supports (&riscv_rps_as, "ztso")) diff --git a/gas/config/tc-s390.c b/gas/config/tc-s390.c index 955851946f9..765a9a2e6bd 100644 --- a/gas/config/tc-s390.c +++ b/gas/config/tc-s390.c @@ -2291,25 +2291,25 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED) We are only prepared to turn a few of the operands into relocs. */ fixP->fx_offset = value; - if (operand->bits == 12 && operand->shift == 20) + if (operand->bits == 12 && operand->shift == 20 && !fixP->fx_pcrel) { fixP->fx_size = 2; fixP->fx_where += 2; fixP->fx_r_type = BFD_RELOC_390_12; } - else if (operand->bits == 12 && operand->shift == 36) + else if (operand->bits == 12 && operand->shift == 36 && !fixP->fx_pcrel) { fixP->fx_size = 2; fixP->fx_where += 4; fixP->fx_r_type = BFD_RELOC_390_12; } - else if (operand->bits == 20 && operand->shift == 20) + else if (operand->bits == 20 && operand->shift == 20 && !fixP->fx_pcrel) { fixP->fx_size = 4; fixP->fx_where += 2; fixP->fx_r_type = BFD_RELOC_390_20; } - else if (operand->bits == 8 && operand->shift == 8) + else if (operand->bits == 8 && operand->shift == 8 && !fixP->fx_pcrel) { fixP->fx_size = 1; fixP->fx_where += 1; @@ -2334,6 +2334,12 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED) fixP->fx_offset += 2; fixP->fx_pcrel_adjust = 2; } + else if (fixP->fx_pcrel) + { + fixP->fx_r_type = BFD_RELOC_16_PCREL; + fixP->fx_offset += 2; + fixP->fx_pcrel_adjust = 2; + } else fixP->fx_r_type = BFD_RELOC_16; } diff --git a/gas/config/tc-sh.c b/gas/config/tc-sh.c index bc0380a4961..634d5dcde41 100644 --- a/gas/config/tc-sh.c +++ b/gas/config/tc-sh.c @@ -1222,6 +1222,10 @@ static char * get_operands (sh_opcode_info *info, char *args, sh_operand_info *operand) { char *ptr = args; + + operand[0].type = 0; + operand[1].type = 0; + operand[2].type = 0; if (info->arg[0]) { /* The pre-processor will eliminate whitespace in front of '@' @@ -1234,9 +1238,7 @@ get_operands (sh_opcode_info *info, char *args, sh_operand_info *operand) if (info->arg[1]) { if (*ptr == ',') - { - ptr++; - } + ptr++; get_operand (&ptr, operand + 1); /* ??? Hack: psha/pshl have a varying operand number depending on the type of the first operand. We handle this by having the @@ -1247,27 +1249,10 @@ get_operands (sh_opcode_info *info, char *args, sh_operand_info *operand) if (info->arg[2] && operand[0].type != A_IMM) { if (*ptr == ',') - { - ptr++; - } + ptr++; get_operand (&ptr, operand + 2); } - else - { - operand[2].type = 0; - } } - else - { - operand[1].type = 0; - operand[2].type = 0; - } - } - else - { - operand[0].type = 0; - operand[1].type = 0; - operand[2].type = 0; } return ptr; } diff --git a/gas/config/tc-sparc.c b/gas/config/tc-sparc.c index eada5e5a0da..c273bd75c08 100644 --- a/gas/config/tc-sparc.c +++ b/gas/config/tc-sparc.c @@ -4992,3 +4992,4 @@ sparc_cfi_emit_pcrel_expr (expressionS *exp, unsigned int nbytes) emit_expr_with_reloc (exp, nbytes, "disp"); sparc_no_align_cons = 0; } + diff --git a/gas/config/tc-vax.c b/gas/config/tc-vax.c index 36defe4765c..50adf532a15 100644 --- a/gas/config/tc-vax.c +++ b/gas/config/tc-vax.c @@ -2683,8 +2683,9 @@ md_assemble (char *instruction_string) } else { - as_warn (_("A bignum/flonum may not be a displacement: 0x%lx used"), - (expP->X_add_number = 0x80000000L)); + as_warn (_("A bignum/flonum may not be a displacement: 0x%" + PRIx64 " used"), + (uint64_t) (expP->X_add_number = 0x80000000L)); /* Chosen so luser gets the most offset bits to patch later. */ } expP->X_add_number = floatP->low[0] diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c index 550c8256e3f..fd3ed067659 100644 --- a/gas/config/tc-xtensa.c +++ b/gas/config/tc-xtensa.c @@ -7869,8 +7869,9 @@ dump_litpools (void) count++; litfrag = litfrag->fr_next; } - printf(" %ld <%d:%d> (%d) [%d]: ", - lpf->addr, lpf->priority, lpf->original_priority, + printf(" %" PRId64 " <%d:%d> (%d) [%d]: ", + (int64_t) lpf->addr, + lpf->priority, lpf->original_priority, lpf->fragP->fr_line, count); /* dump_frag(lpf->fragP); */ } diff --git a/gas/config/tc-z80.c b/gas/config/tc-z80.c index 577c58479da..398c7f31c57 100644 --- a/gas/config/tc-z80.c +++ b/gas/config/tc-z80.c @@ -1143,10 +1143,11 @@ emit_data_val (expressionS * val, int size) 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); + && is_overflow (val->X_add_number, size * 8)) + as_warn ( _("%d-bit overflow (%+" PRId64 ")"), size * 8, + (int64_t) val->X_add_number); for (i = 0; i < size; ++i) - p[i] = (char)(val->X_add_number >> (i*8)); + p[i] = (val->X_add_number >> (i * 8)) & 0xff; return; } @@ -1250,9 +1251,11 @@ emit_byte (expressionS * val, bfd_reloc_code_real_type r_type) if ((val->X_add_number < -128) || (val->X_add_number >= 128)) { if (r_type == BFD_RELOC_Z80_DISP8) - as_bad (_("index overflow (%+ld)"), val->X_add_number); + as_bad (_("index overflow (%+" PRId64 ")"), + (int64_t) val->X_add_number); else - as_bad (_("offset overflow (%+ld)"), val->X_add_number); + as_bad (_("offset overflow (%+" PRId64 ")"), + (int64_t) val->X_add_number); } } else diff --git a/gas/configure b/gas/configure index 1fc3a54b21f..aff5aec4625 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.41. +# Generated by GNU Autoconf 2.69 for gas 2.41.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.41' -PACKAGE_STRING='gas 2.41' +PACKAGE_VERSION='2.41.50' +PACKAGE_STRING='gas 2.41.50' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1381,7 +1381,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.41 to adapt to many kinds of systems. +\`configure' configures gas 2.41.50 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1452,7 +1452,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of gas 2.41:";; + short | recursive ) echo "Configuration of gas 2.41.50:";; esac cat <<\_ACEOF @@ -1600,7 +1600,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -gas configure 2.41 +gas configure 2.41.50 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2011,7 +2011,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.41, which was +It was created by gas $as_me 2.41.50, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2990,7 +2990,7 @@ fi # Define the identity of the package. PACKAGE='gas' - VERSION='2.41' + VERSION='2.41.50' cat >>confdefs.h <<_ACEOF @@ -12107,6 +12107,8 @@ $as_echo "#define STRICTCOFF 1" >>confdefs.h microblaze*) ;; + ppc-*-aix5.[01]*) + ;; ppc-*-aix[5-9].*) $as_echo "#define AIX_WEAK_SUPPORT 1" >>confdefs.h @@ -12296,7 +12298,6 @@ cat >>confdefs.h <<_ACEOF _ACEOF fi - using_cgen=yes ;; epiphany | fr30 | ip2k | iq2000 | lm32 | m32r | or1k) using_cgen=yes @@ -14909,7 +14910,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.41, which was +This file was extended by gas $as_me 2.41.50, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -14975,7 +14976,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.41 +gas config.status 2.41.50 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/gas/configure.ac b/gas/configure.ac index b79586d6390..c3bd1178d41 100644 --- a/gas/configure.ac +++ b/gas/configure.ac @@ -272,6 +272,8 @@ for this_target in $target $canon_targets ; do ;; changequote(,)dnl + ppc-*-aix5.[01]*) + ;; ppc-*-aix[5-9].*) changequote([,])dnl AC_DEFINE(AIX_WEAK_SUPPORT, 1, @@ -449,7 +451,6 @@ changequote([,])dnl if test $this_target = $target ; then AC_DEFINE_UNQUOTED(DEFAULT_ARCH, "${arch}", [Default architecture.]) fi - using_cgen=yes ;; epiphany | fr30 | ip2k | iq2000 | lm32 | m32r | or1k) using_cgen=yes diff --git a/gas/doc/c-bpf.texi b/gas/doc/c-bpf.texi index 0756796adc9..6b43c77d5a0 100644 --- a/gas/doc/c-bpf.texi +++ b/gas/doc/c-bpf.texi @@ -15,15 +15,15 @@ @cindex BPF support @menu -* BPF Options:: Options -* BPF Syntax:: Syntax -* BPF Directives:: Machine Directives -* BPF Opcodes:: Opcodes -* BPF Pseudo-C Syntax:: Alternative Pseudo-C Assembly Syntax +* BPF Options:: BPF specific command-line options. +* BPF Special Characters:: Comments and statements. +* BPF Registers:: Register names. +* BPF Directives:: Machine directives. +* BPF Instructions:: Machine instructions. @end menu @node BPF Options -@section Options +@section BPF Options @cindex BPF options (none) @cindex options for BPF (none) @@ -38,76 +38,85 @@ This option specifies that the assembler should emit big-endian eBPF. @item -EL This option specifies that the assembler should emit little-endian eBPF. + +@cindex @option{-mdialect} command-line options, BPF +@item -mdialect=@var{dialect} +This option specifies the assembly language dialect to recognize while +assembling. The assembler supports @option{normal} and +@option{pseudoc}. + +@cindex @option{-misa-spec} command-line options, BPF +@item -misa-spec=@var{spec} +This option specifies the version of the BPF instruction set to use +when assembling. The BPF ISA versions supported are @option{v1} @option{v2}, @option{v3} and @option{v4}. + +The value @option{xbpf} can be specified to recognize extra +instructions that are used by GCC for testing purposes. But beware +this is not valid BPF. + +@cindex @option{-mno-relax} command-line options, BPF +@item -mno-relax +This option tells the assembler to not relax instructions. @end table Note that if no endianness option is specified in the command line, the host endianness is used. @c man end -@node BPF Syntax -@section Syntax -@menu -* BPF-Chars:: Special Characters -* BPF-Regs:: Register Names -* BPF-Pseudo-Maps:: Pseudo map fds -@end menu - -@node BPF-Chars -@subsection Special Characters +@node BPF Special Characters +@section BPF Special Characters @cindex line comment character, BPF @cindex BPF line comment character -The presence of a @samp{;} on a line indicates the start of a comment -that extends to the end of the current line. If a @samp{#} appears as -the first character of a line, the whole line is treated as a comment. +The presence of a @samp{;} or a @samp{#} on a line indicates the start +of a comment that extends to the end of the current line. @cindex statement separator, BPF Statements and assembly directives are separated by newlines. -@node BPF-Regs -@subsection Register Names +@node BPF Registers +@section BPF Registers @cindex BPF register names @cindex register names, BPF The eBPF processor provides ten general-purpose 64-bit registers, which are read-write, and a read-only frame pointer register: +@noindent +In normal syntax: + @table @samp @item %r0 .. %r9 General-purpose registers. @item %r10 -Frame pointer register. +@itemx %fp +Read-only frame pointer register. @end table -Some registers have additional names, to reflect their role in the -eBPF ABI: +All BPF registers are 64-bit long. However, in the Pseudo-C syntax +registers can be referred using different names, which actually +reflect the kind of instruction they appear on: + +@noindent +In pseudoc syntax: @table @samp -@item %a -This is @samp{%r0}. -@item %ctx -This is @samp{%r6}. -@item %fp -This is @samp{%r10}. +@item r0..r9 +General-purpose register in an instruction that operates on its value +as if it was a 64-bit value. +@item w0..w9 +General-purpose register in an instruction that operates on its value +as if it was a 32-bit value. +@item r10 +Read-only frame pointer register. @end table -@node BPF-Pseudo-Maps -@subsection Pseudo Maps - -@cindex pseudo map fd, BPF -The @samp{LDDW} instruction can take a literal pseudo map file -descriptor as its second argument. This uses the syntax -@samp{%map_fd(N)} where @samp{N} is a signed number. - -For example, to load the address of the pseudo map with file -descriptor @samp{2} in register @samp{r1} we would do: - -@smallexample - lddw %r1, %map_fd(2) -@end smallexample +@noindent +Note that in the Pseudo-C syntax register names are not preceded by +@code{%} characters. @node BPF Directives -@section Machine Directives +@section BPF Directives @cindex machine directives, BPF @@ -128,8 +137,8 @@ The @code{.word} directive produces a 32 bit value. The @code{.dword} directive produces a 64 bit value. @end table -@node BPF Opcodes -@section Opcodes +@node BPF Instructions +@section BPF Instructions @cindex BPF opcodes @cindex opcodes for BPF @@ -137,10 +146,10 @@ In the instruction descriptions below the following field descriptors are used: @table @code -@item %d -Destination general-purpose register whose role is to be destination -of an operation. -@item %s +@item rd +Destination general-purpose register whose role is to be the +destination of an operation. +@item rs Source general-purpose register whose role is to be the source of an operation. @item disp16 @@ -150,104 +159,284 @@ minus one. 32-bit signed PC-relative offset, measured in number of 64-bit words, minus one. @item offset16 -Signed 16-bit immediate. +Signed 16-bit immediate representing an offset in bytes. +@item disp16 +Signed 16-bit immediate representing a displacement to a target, +measured in number of 64-bit words @emph{minus one}. +@item disp32 +Signed 32-bit immediate representing a displacement to a target, +measured in number of 64-bit words @emph{minus one}. @item imm32 Signed 32-bit immediate. @item imm64 Signed 64-bit immediate. @end table -@subsubsection Arithmetic instructions +@subsection Arithmetic instructions The destination register in these instructions act like an accumulator. +Note that in pseudoc syntax these instructions should use @code{r} +registers. + @table @code -@item add %d, (%s|imm32) +@item add rd, rs +@itemx add rd, imm32 +@itemx rd += rs +@itemx rd += imm32 64-bit arithmetic addition. -@item sub %d, (%s|imm32) + +@item sub rd, rs +@itemx sub rd, rs +@itemx rd -= rs +@itemx rd -= imm32 64-bit arithmetic subtraction. -@item mul %d, (%s|imm32) + +@item mul rd, rs +@itemx mul rd, imm32 +@itemx rd *= rs +@itemx rd *= imm32 64-bit arithmetic multiplication. -@item div %d, (%s|imm32) + +@item div rd, rs +@itemx div rd, imm32 +@itemx rd /= rs +@itemx rd /= imm32 64-bit arithmetic integer division. -@item mod %d, (%s|imm32) + +@item mod rd, rs +@itemx mod rd, imm32 +@itemx rd %= rs +@itemx rd %= imm32 64-bit integer remainder. -@item and %d, (%s|imm32) + +@item and rd, rs +@itemx and rd, imm32 +@itemx rd &= rs +@itemx rd &= imm32 64-bit bit-wise ``and'' operation. -@item or %d, (%s|imm32) + +@item or rd, rs +@itemx or rd, imm32 +@itemx rd |= rs +@itemx rd |= imm32 64-bit bit-wise ``or'' operation. -@item xor %d, (%s|imm32) + +@item xor rd, imm32 +@itemx xor rd, rs +@itemx rd ^= rs +@itemx rd ^= imm32 64-bit bit-wise exclusive-or operation. -@item lsh %d, (%s|imm32) -64-bit left shift, by @code{%s} or @code{imm32} bits. -@item rsh %d, (%s|imm32) -64-bit right logical shift, by @code{%s} or @code{imm32} bits. -@item arsh %d, (%s|imm32) -64-bit right arithmetic shift, by @code{%s} or @code{imm32} bits. -@item neg %d + +@item lsh rd, rs +@itemx ldh rd, imm32 +@itemx rd <<= rs +@itemx rd <<= imm32 +64-bit left shift, by @code{rs} or @code{imm32} bits. + +@item rsh %d, %s +@itemx rsh rd, imm32 +@itemx rd >>= rs +@itemx rd >>= imm32 +64-bit right logical shift, by @code{rs} or @code{imm32} bits. + +@item arsh rd, rs +@itemx arsh rd, imm32 +@itemx rd s>>= rs +@itemx rd s>>= imm32 +64-bit right arithmetic shift, by @code{rs} or @code{imm32} bits. + +@item neg rd +@itemx neg rd, imm32 +@itemx rd = - rd +@itemx rd = - imm32 64-bit arithmetic negation. -@item mov %d, (%s|imm32) -Move the 64-bit value of @code{%s} in @code{%d}, or load @code{imm32} -in @code{%d}. + +Note that in the @code{rd = - imm32} syntax there must be at least +one white space between @code{-} and @code{imm32}. Otherwise the +instruction is parsed as a @code{mov rd, imm32} instruction with a +negative 32-bit immediate. This is a consequence of a syntactic +ambiguity in the pseudoc syntax. + +@item mov rd, rs +@itemx mov rd, imm32 +@itemx rd = rs +@itemx rd = imm32 +Move the 64-bit value of @code{rs} in @code{rd}, or load @code{imm32} +in @code{rd}. + +@item movs rd, rs, 8 +@itemx rd = (s8) rs +Move the sign-extended 8-bit value in @code{rs} to @code{rd}. + +@item movs rd, rs, 16 +@itemx rd = (s16) rs +Move the sign-extended 16-bit value in @code{rs} to @code{rd}. + +@item movs rd, rs, 32 +@itemx rd = (s32) rs +Move the sign-extended 32-bit value in @code{rs} to @code{rd}. @end table -@subsubsection 32-bit arithmetic instructions +@subsection 32-bit arithmetic instructions The destination register in these instructions act as an accumulator. +Note that in pseudoc syntax these instructions should use @code{w} +registers. It is not allowed to mix @code{w} and @code{r} registers +in the same instruction. + @table @code -@item add32 %d, (%s|imm32) +@item add32 rd, rs +@itemx add32 rd, imm32 +@itemx rd += rs +@itemx rd += imm32 32-bit arithmetic addition. -@item sub32 %d, (%s|imm32) + +@item sub32 rd, rs +@itemx sub32 rd, imm32 +@itemx rd -= rs +@itemx rd += imm32 32-bit arithmetic subtraction. -@item mul32 %d, (%s|imm32) + +@item mul32 rd, rs +@itemx mul32 rd, imm32 +@itemx rd *= rs +@itemx rd *= imm32 32-bit arithmetic multiplication. -@item div32 %d, (%s|imm32) + +@item div32 rd, rs +@itemx div32 rd, imm32 +@itemx rd /= rs +@itemx rd /= imm32 32-bit arithmetic integer division. -@item mod32 %d, (%s|imm32) + +@item mod32 rd, rs +@itemx mod32 rd, imm32 +@itemx rd %= rs +@itemx rd %= imm32 32-bit integer remainder. -@item and32 %d, (%s|imm32) + +@item and32 rd, rs +@itemx and32 rd, imm32 +@itemx rd &= rs +@itemx rd &= imm32 32-bit bit-wise ``and'' operation. -@item or32 %d, (%s|imm32) + +@item or32 rd, rs +@itemx or32 rd, imm32 +@itemx rd |= rs +@itemx rd |= imm32 32-bit bit-wise ``or'' operation. -@item xor32 %d, (%s|imm32) + +@item xor32 rd, rs +@itemx xor32 rd, imm32 +@itemx rd ^= rs +@itemx rd ^= imm32 32-bit bit-wise exclusive-or operation. -@item lsh32 %d, (%s|imm32) -32-bit left shift, by @code{%s} or @code{imm32} bits. -@item rsh32 %d, (%s|imm32) -32-bit right logical shift, by @code{%s} or @code{imm32} bits. -@item arsh32 %d, (%s|imm32) -32-bit right arithmetic shift, by @code{%s} or @code{imm32} bits. -@item neg32 %d + +@item lsh32 rd, rs +@itemx lsh32 rd, imm32 +@itemx rd <<= rs +@itemx rd <<= imm32 +32-bit left shift, by @code{rs} or @code{imm32} bits. + +@item rsh32 rd, rs +@itemx rsh32 rd, imm32 +@itemx rd >>= rs +@itemx rd >>= imm32 +32-bit right logical shift, by @code{rs} or @code{imm32} bits. + +@item arsh32 rd, rs +@itemx arsh32 rd, imm32 +@itemx rd s>>= rs +@itemx rd s>>= imm32 +32-bit right arithmetic shift, by @code{rs} or @code{imm32} bits. + +@item neg32 rd +@itemx neg32 rd, imm32 +@itemx rd = - rd +@itemx rd = - imm32 32-bit arithmetic negation. -@item mov32 %d, (%s|imm32) -Move the 32-bit value of @code{%s} in @code{%d}, or load @code{imm32} -in @code{%d}. + +Note that in the @code{rd = - imm32} syntax there must be at least +one white space between @code{-} and @code{imm32}. Otherwise the +instruction is parsed as a @code{mov32 rd, imm32} instruction with a +negative 32-bit immediate. This is a consequence of a syntactic +ambiguity in the pseudoc syntax. + +@item mov32 rd, rs +@itemx mov32 rd, imm32 +@itemx rd = rs +@itemx rd = imm32 +Move the 32-bit value of @code{rs} in @code{rd}, or load @code{imm32} +in @code{rd}. + +@item mov32s rd, rs, 8 +@itemx rd = (s8) rs +Move the sign-extended 8-bit value in @code{rs} to @code{rd}. + +@item mov32s rd, rs, 16 +@itemx rd = (s16) rs +Move the sign-extended 16-bit value in @code{rs} to @code{rd}. + +@item mov32s rd, rs, 32 +@itemx rd = (s32) rs +Move the sign-extended 32-bit value in @code{rs} to @code{rd}. @end table -@subsubsection Endianness conversion instructions +@subsection Endianness conversion instructions @table @code -@item endle %d, (16|32|64) -Convert the 16-bit, 32-bit or 64-bit value in @code{%d} to -little-endian. -@item endbe %d, (16|32|64) -Convert the 16-bit, 32-bit or 64-bit value in @code{%d} to big-endian. +@item endle rd, 16 +@itemx endle rd, 32 +@itemx endle rd, 64 +@itemx rd = le16 rd +@itemx rd = le32 rd +@itemx rd = le64 rd +Convert the 16-bit, 32-bit or 64-bit value in @code{rd} to +little-endian and store it back in @code{rd}. +@item endbe %d, 16 +@itemx endbe %d, 32 +@itemx endbe %d, 64 +@itemx rd = be16 rd +@itemx rd = be32 rd +@itemx rd = be64 rd +Convert the 16-bit, 32-bit or 64-bit value in @code{rd} to big-endian +and store it back in @code{rd}. @end table -@subsubsection 64-bit load and pseudo maps +@subsection Byte swap instructions @table @code -@item lddw %d, imm64 -Load the given signed 64-bit immediate, or pseudo map descriptor, to -the destination register @code{%d}. -@item lddw %d, %map_fd(N) -Load the address of the given pseudo map fd @emph{N} to the -destination register @code{%d}. +@item bswap rd, 16 +@itemx rd = bswap16 rd +Swap the least-significant 16-bit word in @code{rd} with the +most-significant 16-bit word. + +@item bswap rd, 32 +@itemx rd = bswap32 rd +Swap the least-significant 32-bit word in @code{rd} with the +most-significant 32-bit word. + +@item bswap rd, 64 +@itemx rd = bswap64 rd +Swap the least-significant 64-bit word in @code{rd} with the +most-significant 64-bit word. @end table -@subsubsection Load instructions for socket filters + +@subsection 64-bit load and pseudo maps + +@table @code +@item lddw rd, imm64 +@itemx rd = imm64 ll +Load the given signed 64-bit immediate to the destination register +@code{rd}. +@end table + +@subsection Load instructions for socket filters The following instructions are intended to be used in socket filters, and are therefore not general-purpose: they make assumptions on the @@ -259,29 +448,43 @@ Absolute loads: @table @code @item ldabsdw imm32 +@itemx r0 = *(u64 *) skb[imm32] Absolute 64-bit load. + @item ldabsw imm32 +@itemx r0 = *(u32 *) skb[imm32] Absolute 32-bit load. + @item ldabsh imm32 +@itemx r0 = *(u16 *) skb[imm32] Absolute 16-bit load. + @item ldabsb imm32 +@itemx r0 = *(u8 *) skb[imm32] Absolute 8-bit load. @end table Indirect loads: @table @code -@item ldinddw %s, imm32 +@item ldinddw rs, imm32 +@itemx r0 = *(u64 *) skb[rs + imm32] Indirect 64-bit load. -@item ldindw %s, imm32 + +@item ldindw rs, imm32 +@itemx r0 = *(u32 *) skb[rs + imm32] Indirect 32-bit load. -@item ldindh %s, imm32 + +@item ldindh rs, imm32 +@itemx r0 = *(u16 *) skb[rs + imm32] Indirect 16-bit load. + @item ldindb %s, imm32 +@itemx r0 = *(u8 *) skb[rs + imm32] Indirect 8-bit load. @end table -@subsubsection Generic load/store instructions +@subsection Generic load/store instructions General-purpose load and store instructions are provided for several word sizes. @@ -289,43 +492,84 @@ word sizes. Load to register instructions: @table @code -@item ldxdw %d, [%s+offset16] +@item ldxdw rd, [rs + offset16] +@itemx rd = *(u64 *) (rs + offset16) Generic 64-bit load. -@item ldxw %d, [%s+offset16] + +@item ldxw rd, [rs + offset16] +@itemx rd = *(u32 *) (rs + offset16) Generic 32-bit load. -@item ldxh %d, [%s+offset16] + +@item ldxh rd, [rs + offset16] +@itemx rd = *(u16 *) (rs + offset16) Generic 16-bit load. -@item ldxb %d, [%s+offset16] + +@item ldxb rd, [rs + offset16] +@itemx rd = *(u8 *) (rs + offset16) Generic 8-bit load. @end table +Signed load to register instructions: + +@table @code +@item ldxsdw rd, [rs + offset16] +@itemx rd = *(s64 *) (rs + offset16) +Generic 64-bit signed load. + +@item ldxsw rd, [rs + offset16] +@itemx rd = *(s32 *) (rs + offset16) +Generic 32-bit signed load. + +@item ldxsh rd, [rs + offset16] +@itemx rd = *(s16 *) (rs + offset16) +Generic 16-bit signed load. + +@item ldxsb rd, [rs + offset16] +@itemx rd = *(s8 *) (rs + offset16) +Generic 8-bit signed load. +@end table + Store from register instructions: @table @code -@item stxdw [%d+offset16], %s +@item stxdw [rd + offset16], %s +@itemx *(u64 *) (rd + offset16) Generic 64-bit store. -@item stxw [%d+offset16], %s + +@item stxw [rd + offset16], %s +@itemx *(u32 *) (rd + offset16) Generic 32-bit store. -@item stxh [%d+offset16], %s + +@item stxh [rd + offset16], %s +@itemx *(u16 *) (rd + offset16) Generic 16-bit store. -@item stxb [%d+offset16], %s + +@item stxb [rd + offset16], %s +@itemx *(u8 *) (rd + offset16) Generic 8-bit store. @end table Store from immediates instructions: @table @code -@item stddw [%d+offset16], imm32 +@item stdw [rd + offset16], imm32 +@itemx *(u64 *) (rd + offset16) = imm32 Store immediate as 64-bit. -@item stdw [%d+offset16], imm32 + +@item stw [rd + offset16], imm32 +@itemx *(u32 *) (rd + offset16) = imm32 Store immediate as 32-bit. -@item stdh [%d+offset16], imm32 + +@item sth [rd + offset16], imm32 +@itemx *(u16 *) (rd + offset16) = imm32 Store immediate as 16-bit. -@item stdb [%d+offset16], imm32 + +@item stb [rd + offset16], imm32 +@itemx *(u8 *) (rd + offset16) = imm32 Store immediate as 8-bit. @end table -@subsubsection Jump instructions +@subsection Jump instructions eBPF provides the following compare-and-jump instructions, which compare the values of the two given registers, or the values of a @@ -333,29 +577,78 @@ register and an immediate, and perform a branch in case the comparison holds true. @table @code -@item ja %d,(%s|imm32),disp16 +@item ja disp16 +@itemx goto disp16 Jump-always. -@item jeq %d,(%s|imm32),disp16 + +@item jal disp32 +@itemx gotol disp32 +Jump-always, long range. + +@item jeq rd, rs, disp16 +@itemx jeq rd, imm32, disp16 +@itemx if rd == rs goto disp16 +@itemx if rd == imm32 goto disp16 Jump if equal, unsigned. -@item jgt %d,(%s|imm32),disp16 + +@item jgt rd, rs, disp16 +@itemx jgt rd, imm32, disp16 +@itemx if rd > rs goto disp16 +@itemx if rd > imm32 goto disp16 Jump if greater, unsigned. -@item jge %d,(%s|imm32),disp16 + +@item jge rd, rs, disp16 +@itemx jge rd, imm32, disp16 +@itemx if rd >= rs goto disp16 +@itemx if rd >= imm32 goto disp16 Jump if greater or equal. -@item jlt %d,(%s|imm32),disp16 + +@item jlt rd, rs, disp16 +@itemx jlt rd, imm32, disp16 +@itemx if rd < rs goto disp16 +@itemx if rd < imm32 goto disp16 Jump if lesser. -@item jle %d,(%s|imm32),disp16 + +@item jle rd , rs, disp16 +@itemx jle rd, imm32, disp16 +@itemx if rd <= rs goto disp16 +@itemx if rd <= imm32 goto disp16 Jump if lesser or equal. -@item jset %d,(%s|imm32),disp16 + +@item jset rd, rs, disp16 +@itemx jset rd, imm32, disp16 +@itemx if rd & rs goto disp16 +@itemx if rd & imm32 goto disp16 Jump if signed equal. -@item jne %d,(%s|imm32),disp16 + +@item jne rd, rs, disp16 +@itemx jne rd, imm32, disp16 +@itemx if rd != rs goto disp16 +@itemx if rd != imm32 goto disp16 Jump if not equal. -@item jsgt %d,(%s|imm32),disp16 + +@item jsgt rd, rs, disp16 +@itemx jsgt rd, imm32, disp16 +@itemx if rd s> rs goto disp16 +@itemx if rd s> imm32 goto disp16 Jump if signed greater. -@item jsge %d,(%s|imm32),disp16 + +@item jsge rd, rs, disp16 +@itemx jsge rd, imm32, disp16 +@itemx if rd s>= rd goto disp16 +@itemx if rd s>= imm32 goto disp16 Jump if signed greater or equal. -@item jslt %d,(%s|imm32),disp16 + +@item jslt rd, rs, disp16 +@itemx jslt rd, imm32, disp16 +@itemx if rd s< rs goto disp16 +@itemx if rd s< imm32 goto disp16 Jump if signed lesser. -@item jsle %d,(%s|imm32),disp16 + +@item jsle rd, rs, disp16 +@itemx jsle rd, imm32, disp16 +@itemx if rd s<= rs goto disp16 +@itemx if rd s<= imm32 goto disp16 Jump if signed lesser or equal. @end table @@ -363,7 +656,8 @@ A call instruction is provided in order to perform calls to other eBPF functions, or to external kernel helpers: @table @code -@item call (disp32|imm32) +@item call disp32 +@item call imm32 Jump and link to the offset @emph{disp32}, or to the kernel helper function identified by @emph{imm32}. @end table @@ -375,203 +669,221 @@ Finally: Terminate the eBPF program. @end table -@subsubsection Atomic instructions +@subsection 32-bit jump instructions -Atomic exchange-and-add instructions are provided in two flavors: one -for swapping 64-bit quantities and another for 32-bit quantities. +eBPF provides the following compare-and-jump instructions, which +compare the 32-bit values of the two given registers, or the values of +a register and an immediate, and perform a branch in case the +comparison holds true. + +These instructions are only available in BPF v3 or later. @table @code -@item xadddw [%d+offset16],%s -Exchange-and-add a 64-bit value at the specified location. -@item xaddw [%d+offset16],%s -Exchange-and-add a 32-bit value at the specified location. +@item jeq32 rd, rs, disp16 +@itemx jeq32 rd, imm32, disp16 +@itemx if rd == rs goto disp16 +@itemx if rd == imm32 goto disp16 +Jump if equal, unsigned. + +@item jgt32 rd, rs, disp16 +@itemx jgt32 rd, imm32, disp16 +@itemx if rd > rs goto disp16 +@itemx if rd > imm32 goto disp16 +Jump if greater, unsigned. + +@item jge32 rd, rs, disp16 +@itemx jge32 rd, imm32, disp16 +@itemx if rd >= rs goto disp16 +@itemx if rd >= imm32 goto disp16 +Jump if greater or equal. + +@item jlt32 rd, rs, disp16 +@itemx jlt32 rd, imm32, disp16 +@itemx if rd < rs goto disp16 +@itemx if rd < imm32 goto disp16 +Jump if lesser. + +@item jle32 rd , rs, disp16 +@itemx jle32 rd, imm32, disp16 +@itemx if rd <= rs goto disp16 +@itemx if rd <= imm32 goto disp16 +Jump if lesser or equal. + +@item jset32 rd, rs, disp16 +@itemx jset32 rd, imm32, disp16 +@itemx if rd & rs goto disp16 +@itemx if rd & imm32 goto disp16 +Jump if signed equal. + +@item jne32 rd, rs, disp16 +@itemx jne32 rd, imm32, disp16 +@itemx if rd != rs goto disp16 +@itemx if rd != imm32 goto disp16 +Jump if not equal. + +@item jsgt32 rd, rs, disp16 +@itemx jsgt32 rd, imm32, disp16 +@itemx if rd s> rs goto disp16 +@itemx if rd s> imm32 goto disp16 +Jump if signed greater. + +@item jsge32 rd, rs, disp16 +@itemx jsge32 rd, imm32, disp16 +@itemx if rd s>= rd goto disp16 +@itemx if rd s>= imm32 goto disp16 +Jump if signed greater or equal. + +@item jslt32 rd, rs, disp16 +@itemx jslt32 rd, imm32, disp16 +@itemx if rd s< rs goto disp16 +@itemx if rd s< imm32 goto disp16 +Jump if signed lesser. + +@item jsle32 rd, rs, disp16 +@itemx jsle32 rd, imm32, disp16 +@itemx if rd s<= rs goto disp16 +@itemx if rd s<= imm32 goto disp16 +Jump if signed lesser or equal. @end table -@node BPF Pseudo-C Syntax -@section BPF Pseudo-C Syntax +@subsection Atomic instructions -This assembler supports another syntax to denote BPF instructions, -which is an alternative to the normal looking syntax documented above. -This alternatative syntax, which we call @dfn{pseudo-C syntax}, is -supported by the LLVM/clang integrated assembler. +Atomic exchange instructions are provided in two flavors: one for +compare-and-swap, one for unconditional exchange. -This syntax is very unconventional, but we need to support it in order -to support inline assembly in existing BPF programs. +@table @code +@item acmp [rd + offset16], rs +@itemx r0 = cmpxchg_64 (rd + offset16, r0, rs) +Atomic compare-and-swap. Compares value in @code{r0} to value +addressed by @code{rd + offset16}. On match, the value addressed by +@code{rd + offset16} is replaced with the value in @code{rs}. +Regardless, the value that was at @code{rd + offset16} is +zero-extended and loaded into @code{r0}. -Note that the assembler is able to parse sources in which both -syntaxes coexist: some instructions can use the usual assembly like -syntax, whereas some other instructions in the same file can use the -pseudo-C syntax. - -@subsubsection Pseudo-C Register Names - -All BPF registers are 64-bit long. However, in the Pseudo-C syntax -registers can be referred using different names, which actually -reflect the kind of instruction they appear on: - -@table @samp -@item r0..r9 -General-purpose register in an instruction that operates on its value -as if it was a 64-bit value. -@item w0..w9 -General-purpose register in an instruction that operates on its value -as if it was a 32-bit value. +@item axchg [rd + offset16], rs +@itemx rs = xchg_64 (rd + offset16, rs) +Atomic exchange. Atomically exchanges the value in @code{rs} with +the value addressed by @code{rd + offset16}. @end table @noindent -Note that in the Pseudo-C syntax register names are not preceded by -@code{%} characters. - -@subsubsection Arithmetic instructions - -In all the instructions below, the operations are 64-bit or 32-bit -depending on the names used to refer to the registers. For example -@code{r3 += r2} will perform 64-bit addition, whereas @code{w3 += w2} -will perform 32-bit addition. Mixing register prefixes is an error, -for example @code{r3 += w2}. +The following instructions provide atomic arithmetic operations. @table @code -@item dst_reg += (imm32|src_reg) -Arithmetic addition. -@item dst_reg -= (imm32|src_reg) -Arithmetic subtraction. -@item dst_reg *= (imm32|src_reg) -Arithmetic multiplication. -@item dst_reg /= (imm32|src_reg) -Arithmetic integer unsigned division. -@item dst_reg %= (imm32|src_reg) -Arithmetic integer unsigned remainder. -@item dst_reg &= (imm32|src_reg) -Bit-wise ``and'' operation. -@item dst_reg |= (imm32|src_reg) -Bit-wise ``or'' operation. -@item dst_reg ^= (imm32|src_reg) -Bit-wise exclusive-or operation. -@item dst_reg <<= (imm32|src_reg) -Left shift, by whatever specified number of bits. -@item dst_reg >>= (imm32|src_reg) -Right logical shift, by whatever specified number of bits. -@item dst_reg s>>= (imm32|src_reg) -Right arithmetic shift, by whatever specified number of bits. -@item dst_reg = (imm32|src_reg) -Move the value in @code{imm32} or @code{src_reg} in @code{dst_reg}. -@item dst_reg = -dst_reg -Arithmetic negation. +@item aadd [rd + offset16], rs +@itemx lock *(u64 *)(rd + offset16) = rs +Atomic add instruction. + +@item aor [rd + offset16], rs +@itemx lock *(u64 *) (rd + offset16) |= rs +Atomic or instruction. + +@item aand [rd + offset16], rs +@itemx lock *(u64 *) (rd + offset16) &= rs +Atomic and instruction. + +@item axor [rd + offset16], rs +@itemx lock *(u64 *) (rd + offset16) ^= rs +Atomic xor instruction. @end table -@subsubsection Endianness conversion instructions +@noindent +The following variants perform fetching before the atomic operation. @table @code -@item dst_reg = le16 src_reg -Convert the 16-bit value in @code{src_reg} to little-endian. -@item dst_reg = le32 src_reg -Convert the 32-bit value in @code{src_reg} to little-endian. -@item dst_reg = le64 src_reg -Convert the 64-bit value in @code{src_reg} to little-endian. -@item dst_reg = be16 src_reg -Convert the 16-bit value in @code{src_reg} to big-endian. -@item dst_reg = be32 src_reg -Convert the 32-bit value in @code{src_reg} to big-endian. -@item dst_reg = be64 src_reg -Convert the 64-bit value in @code{src_reg} to big-endian. +@item afadd [rd + offset16], rs +@itemx rs = atomic_fetch_add ((u64 *)(rd + offset16), rs) +Atomic fetch-and-add instruction. + +@item afor [rd + offset16], rs +@itemx rs = atomic_fetch_or ((u64 *)(rd + offset16), rs) +Atomic fetch-and-or instruction. + +@item afand [rd + offset16], rs +@itemx rs = atomic_fetch_and ((u64 *)(rd + offset16), rs) +Atomic fetch-and-and instruction. + +@item afxor [rd + offset16], rs +@itemx rs = atomic_fetch_xor ((u64 *)(rd + offset16), rs) +Atomic fetch-and-or instruction. @end table -@subsubsection 64-bit load and pseudo maps +The above instructions were introduced in the V3 of the BPF +instruction set. The following instruction is supported for backwards +compatibility: @table @code -@item dst_reg = imm64 ll -Load the given signed 64-bit immediate, or pseudo map descriptor, to -the destination register @code{dst_reg}. +@item xadddw [rd + offset16], rs +Alias to @code{aadd}. @end table -@subsubsection Load instructions for socket filters +@subsection 32-bit atomic instructions + +32-bit atomic exchange instructions are provided in two flavors: one +for compare-and-swap, one for unconditional exchange. @table @code -@item r0 = *(u8 *)skb[imm32] -Absolute 8-bit load. -@item r0 = *(u16 *)skb[imm32] -Absolute 16-bit load. -@item r0 = *(u32 *)skb[imm32] -Absolute 32-bit load. -@item r0 = *(u64 *)skb[imm32] -Absolute 64-bit load. -@item r0 = *(u8 *)skb[src_reg + imm32] -Indirect 8-bit load. -@item r0 = *(u16 *)skb[src_reg + imm32] -Indirect 16-bit load. -@item r0 = *(u32 *)skb[src_reg + imm32] -Indirect 32-bit load. -@item r0 = *(u64 *)skb[src_reg + imm32] -Indirect 64-bit load. +@item acmp32 [rd + offset16], rs +@itemx w0 = cmpxchg32_32 (rd + offset16, w0, ws) +Atomic compare-and-swap. Compares value in @code{w0} to value +addressed by @code{rd + offset16}. On match, the value addressed by +@code{rd + offset16} is replaced with the value in @code{ws}. +Regardless, the value that was at @code{rd + offset16} is +zero-extended and loaded into @code{w0}. + +@item axchg [rd + offset16], rs +@itemx ws = xchg32_32 (rd + offset16, ws) +Atomic exchange. Atomically exchanges the value in @code{ws} with +the value addressed by @code{rd + offset16}. @end table -@subsubsection Generic load/store instructions +@noindent +The following instructions provide 32-bit atomic arithmetic operations. @table @code -@item dst_reg = *(u8 *)(src_reg + offset16) -Generic 8-bit load. -@item dst_reg = *(u16 *)(src_reg + offset16) -Generic 16-bit load. -@item dst_reg = *(u32 *)(src_reg + offset16) -Generic 32-bit load. -@item dst_reg = *(u64 *)(src_reg + offset16) -Generic 64-bit load. -@c XXX stb -@c NO PSEUDOC-SYNTAX -@c XXX sth -@c NO PSEUDOC-SYNTAX -@c XXX stw -@c NO PSEUDOC-SYNTAX -@c XXX stdw -@c NO PSEUDOC-SYNTAX -@item *(u8 *)(dst_reg + offset16) = src_reg -Generic 8-bit store. -@item *(u16 *)(dst_reg + offset16) = src_reg -Generic 16-bit store. -@item *(u32 *)(dst_reg + offset16) = src_reg -Generic 32-bit store. -@item *(u64 *)(dst_reg + offset16) = src_reg -Generic 64-bit store. +@item aadd32 [rd + offset16], rs +@itemx lock *(u32 *)(rd + offset16) = rs +Atomic add instruction. + +@item aor32 [rd + offset16], rs +@itemx lock *(u32 *) (rd + offset16) |= rs +Atomic or instruction. + +@item aand32 [rd + offset16], rs +@itemx lock *(u32 *) (rd + offset16) &= rs +Atomic and instruction. + +@item axor32 [rd + offset16], rs +@itemx lock *(u32 *) (rd + offset16) ^= rs +Atomic xor instruction @end table -@subsubsection Jump instructions +@noindent +The following variants perform fetching before the atomic operation. @table @code -@item goto disp16 -Jump-always. -@item if dst_reg == (imm32|src_reg) goto disp16 -Jump if equal. -@item if dst_reg & (imm32|src_reg) goto disp16 -Jump if signed equal. -@item if dst_reg != (imm32|src_reg) goto disp16 -Jump if not equal. -@item if dst_reg > (imm32|src_reg) goto disp16 -Jump if bigger, unsigned. -@item if dst_reg < (imm32|src_reg) goto disp16 -Jump if smaller, unsigned. -@item if dst_reg >= (imm32|src_reg) goto disp16 -Jump if bigger or equal, unsigned. -@item if dst_reg <= (imm32|src_reg) goto disp16 -Jump if smaller or equal, unsigned. -@item if dst_reg s> (imm32|src_reg) goto disp16 -Jump if bigger, signed. -@item if dst_reg s< (imm32|src_reg) goto disp16 -Jump if smaller, signed. -@item if dst_reg s>= (imm32|src_reg) goto disp16 -Jump if bigger or equal, signed. -@item if dst_reg s<= (imm32|src_reg) goto disp16 -Jump if smaller or equal, signed. -@item call imm32 -Jump and link. -@item exit -Terminate the eBPF program. +@item afadd32 [dr + offset16], rs +@itemx ws = atomic_fetch_add ((u32 *)(rd + offset16), ws) +Atomic fetch-and-add instruction. + +@item afor32 [dr + offset16], rs +@itemx ws = atomic_fetch_or ((u32 *)(rd + offset16), ws) +Atomic fetch-and-or instruction. + +@item afand32 [dr + offset16], rs +@itemx ws = atomic_fetch_and ((u32 *)(rd + offset16), ws) +Atomic fetch-and-and instruction. + +@item afxor32 [dr + offset16], rs +@itemx ws = atomic_fetch_xor ((u32 *)(rd + offset16), ws) +Atomic fetch-and-or instruction @end table -@subsubsection Atomic instructions +The above instructions were introduced in the V3 of the BPF +instruction set. The following instruction is supported for backwards +compatibility: @table @code -@item lock *(u64 *)(dst_reg + offset16) += src_reg -Exchange-and-add a 64-bit value at the specified location. -@item lock *(u32 *)(dst_reg + offset16) += src_reg -Exchange-and-add a 32-bit value at the specified location. +@item xaddw [rd + offset16], rs +Alias to @code{aadd32}. @end table diff --git a/gas/doc/c-i386.texi b/gas/doc/c-i386.texi index 49b6e3b1abb..dd06282a5a3 100644 --- a/gas/doc/c-i386.texi +++ b/gas/doc/c-i386.texi @@ -207,6 +207,11 @@ accept various extension mnemonics. For example, @code{rao_int}, @code{fred}, @code{lkgs}, +@code{avx_vnni_int16}, +@code{sha512}, +@code{sm3}, +@code{sm4}, +@code{pbndkb}, @code{amx_int8}, @code{amx_bf16}, @code{amx_fp16}, @@ -1635,8 +1640,9 @@ supported on the CPU specified. The choices for @var{cpu_type} are: @item @samp{.clwb} @tab @samp{.rdpid} @tab @samp{.ptwrite} @tab @samp{.ibt} @item @samp{.prefetchi} @tab @samp{.avx_ifma} @tab @samp{.avx_vnni_int8} @item @samp{.cmpccxadd} @tab @samp{.wrmsrns} @tab @samp{.msrlist} -@item @samp{.avx_ne_convert} @tab @samp{.rao_int} -@item @samp{.fred} @tab @samp{.lkgs} +@item @samp{.avx_ne_convert} @tab @samp{.rao_int} @tab @samp{.fred} @tab @samp{.lkgs} +@item @samp{.avx_vnni_int16} @tab @samp{.sha512} @tab @samp{.sm3} @tab @samp{.sm4} +@item @samp{.pbndkb} @item @samp{.wbnoinvd} @tab @samp{.pconfig} @tab @samp{.waitpkg} @tab @samp{.cldemote} @item @samp{.shstk} @tab @samp{.gfni} @tab @samp{.vaes} @tab @samp{.vpclmulqdq} @item @samp{.movdiri} @tab @samp{.movdir64b} @tab @samp{.enqcmd} @tab @samp{.tsxldtrk} diff --git a/gas/doc/local.mk b/gas/doc/local.mk index de13e3ca8b8..c48c71115be 100644 --- a/gas/doc/local.mk +++ b/gas/doc/local.mk @@ -41,7 +41,7 @@ TEXI2DVI = texi2dvi -I "$(srcdir)/%D%" -I %D% -I "$(srcdir)/../libiberty" \ %D%/asconfig.texi: %D%/$(CONFIG).texi %D%/$(am__dirstamp) $(AM_V_at)rm -f %D%/asconfig.texi - $(AM_V_GEN)cp -p $(srcdir)/%D%/$(CONFIG).texi %D%/asconfig.texi + $(AM_V_GEN)cp $(srcdir)/%D%/$(CONFIG).texi %D%/asconfig.texi && touch -m -r $(srcdir)/%D%/$(CONFIG).texi %D%/asconfig.texi $(AM_V_at)chmod u+w %D%/asconfig.texi CPU_DOCS = \ diff --git a/gas/po/gas.pot b/gas/po/gas.pot index bf47483ba87..b10ed521e4c 100644 --- a/gas/po/gas.pot +++ b/gas/po/gas.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2023-07-30 14:35+0100\n" +"POT-Creation-Date: 2023-07-03 11:41+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/gas/symbols.c b/gas/symbols.c index a335c316903..ea05801e356 100644 --- a/gas/symbols.c +++ b/gas/symbols.c @@ -3103,7 +3103,7 @@ symbol_begin (void) { symbol_lastP = NULL; symbol_rootP = NULL; /* In case we have 0 symbols (!!) */ - sy_hash = htab_create_alloc (16, hash_symbol_entry, eq_symbol_entry, + sy_hash = htab_create_alloc (1024, hash_symbol_entry, eq_symbol_entry, NULL, xcalloc, free); #if defined (EMIT_SECTION_SYMBOLS) || !defined (RELOC_REQUIRES_SYMBOL) diff --git a/gas/testsuite/gas/all/assign-bad-recursive.d b/gas/testsuite/gas/all/assign-bad-recursive.d index 678be3e7c9f..aeec5d55f8a 100644 --- a/gas/testsuite/gas/all/assign-bad-recursive.d +++ b/gas/testsuite/gas/all/assign-bad-recursive.d @@ -1,5 +1,4 @@ #name: bad recursive assignments #source: assign-bad-recursive.s #xfail: bfin-*-* -#notarget: *bpf-*-* #error_output: assign-bad-recursive.l diff --git a/gas/testsuite/gas/all/eqv-dot.d b/gas/testsuite/gas/all/eqv-dot.d index d97db14995e..fc40b09f217 100644 --- a/gas/testsuite/gas/all/eqv-dot.d +++ b/gas/testsuite/gas/all/eqv-dot.d @@ -2,7 +2,7 @@ #name: eqv involving dot # bfin doesn't support 'symbol = expression' # tic30 and tic4x have 4 octets per byte, tic54x has 2 octets per byte -#notarget: bfin-*-* *c30-*-* *c4x-*-* *c54x-*-* *bpf-*-* +#notarget: bfin-*-* *c30-*-* *c4x-*-* *c54x-*-* # linkrelax targets don't handle equivalence expressions well (nor any # other forward expression). mep uses complex relocs #xfail: am33_2.0-*-* crx-*-* h8300-*-* mn10200-*-* mn10300-*-* mep-*-* diff --git a/gas/testsuite/gas/all/gas.exp b/gas/testsuite/gas/all/gas.exp index bab5a6c7ba5..007408f03d8 100644 --- a/gas/testsuite/gas/all/gas.exp +++ b/gas/testsuite/gas/all/gas.exp @@ -105,7 +105,7 @@ if { [istarget "pdp11-*-*"] } then { run_dump_test eqv-dot } -if { ![istarget "bfin-*-*"] && ![istarget "bpf-*-*"] } then { +if { ![istarget "bfin-*-*"] } then { gas_test "assign-ok.s" "" "" "== assignment support" } gas_test_error "assign-bad.s" "" "== assignment for symbol already set" @@ -403,8 +403,7 @@ if { ([istarget "i*86-*-*pe*"] && ![istarget "i*86-*-openbsd*"]) \ gas_test "fastcall.s" "" "" "fastcall labels" } -if { ![istarget "bfin-*-*"] && ![istarget "nds32*-*-*"] \ - && ![istarget "bpf-*-*"] } then { +if { ![istarget "bfin-*-*"] && ![istarget "nds32*-*-*"] } then { run_dump_test assign } run_dump_test sleb128 diff --git a/gas/testsuite/gas/bpf/alu-be-pseudoc.d b/gas/testsuite/gas/bpf/alu-be-pseudoc.d index 0355d196d77..0e9df07eb15 100644 --- a/gas/testsuite/gas/bpf/alu-be-pseudoc.d +++ b/gas/testsuite/gas/bpf/alu-be-pseudoc.d @@ -1,5 +1,72 @@ -#as: --EB +#as: -EB -mdialect=pseudoc #source: alu-pseudoc.s -#objdump: -dr -#dump: alu-be.dump +#objdump: -dr -M hex,pseudoc #name: eBPF ALU64 instructions, big endian, pseudoc syntax + +.*: +file format .*bpf.* + +Disassembly of section .text: + +0+ <.text>: + 0: 07 20 00 00 00 00 02 9a r2\+=0x29a + 8: 07 30 00 00 ff ff fd 66 r3\+=0xfffffd66 + 10: 07 40 00 00 7e ad be ef r4\+=0x7eadbeef + 18: 0f 56 00 00 00 00 00 00 r5\+=r6 + 20: 17 20 00 00 00 00 02 9a r2-=0x29a + 28: 17 30 00 00 ff ff fd 66 r3-=0xfffffd66 + 30: 17 40 00 00 7e ad be ef r4-=0x7eadbeef + 38: 1f 56 00 00 00 00 00 00 r5-=r6 + 40: 27 20 00 00 00 00 02 9a r2\*=0x29a + 48: 27 30 00 00 ff ff fd 66 r3\*=0xfffffd66 + 50: 27 40 00 00 7e ad be ef r4\*=0x7eadbeef + 58: 2f 56 00 00 00 00 00 00 r5\*=r6 + 60: 37 20 00 00 00 00 02 9a r2/=0x29a + 68: 37 30 00 00 ff ff fd 66 r3/=0xfffffd66 + 70: 37 40 00 00 7e ad be ef r4/=0x7eadbeef + 78: 3f 56 00 00 00 00 00 00 r5/=r6 + 80: 47 20 00 00 00 00 02 9a r2|=0x29a + 88: 47 30 00 00 ff ff fd 66 r3|=0xfffffd66 + 90: 47 40 00 00 7e ad be ef r4|=0x7eadbeef + 98: 4f 56 00 00 00 00 00 00 r5|=r6 + a0: 57 20 00 00 00 00 02 9a r2&=0x29a + a8: 57 30 00 00 ff ff fd 66 r3&=0xfffffd66 + b0: 57 40 00 00 7e ad be ef r4&=0x7eadbeef + b8: 5f 56 00 00 00 00 00 00 r5&=r6 + c0: 67 20 00 00 00 00 02 9a r2<<=0x29a + c8: 67 30 00 00 ff ff fd 66 r3<<=0xfffffd66 + d0: 67 40 00 00 7e ad be ef r4<<=0x7eadbeef + d8: 6f 56 00 00 00 00 00 00 r5<<=r6 + e0: 77 20 00 00 00 00 02 9a r2>>=0x29a + e8: 77 30 00 00 ff ff fd 66 r3>>=0xfffffd66 + f0: 77 40 00 00 7e ad be ef r4>>=0x7eadbeef + f8: 7f 56 00 00 00 00 00 00 r5>>=r6 + 100: 97 20 00 00 00 00 02 9a r2%=0x29a + 108: 97 30 00 00 ff ff fd 66 r3%=0xfffffd66 + 110: 97 40 00 00 7e ad be ef r4%=0x7eadbeef + 118: 9f 56 00 00 00 00 00 00 r5%=r6 + 120: a7 20 00 00 00 00 02 9a r2\^=0x29a + 128: a7 30 00 00 ff ff fd 66 r3\^=0xfffffd66 + 130: a7 40 00 00 7e ad be ef r4\^=0x7eadbeef + 138: af 56 00 00 00 00 00 00 r5\^=r6 + 140: b7 20 00 00 00 00 02 9a r2=0x29a + 148: b7 30 00 00 ff ff fd 66 r3=0xfffffd66 + 150: b7 40 00 00 7e ad be ef r4=0x7eadbeef + 158: bf 56 00 00 00 00 00 00 r5=r6 + 160: c7 20 00 00 00 00 02 9a r2 s>>=0x29a + 168: c7 30 00 00 ff ff fd 66 r3 s>>=0xfffffd66 + 170: c7 40 00 00 7e ad be ef r4 s>>=0x7eadbeef + 178: cf 56 00 00 00 00 00 00 r5 s>>=r6 + 180: 8f 20 00 00 00 00 00 00 r2=-r2 + 188: d4 90 00 00 00 00 00 10 r9=le16 r9 + 190: d4 80 00 00 00 00 00 20 r8=le32 r8 + 198: d4 70 00 00 00 00 00 40 r7=le64 r7 + 1a0: dc 60 00 00 00 00 00 10 r6=be16 r6 + 1a8: dc 50 00 00 00 00 00 20 r5=be32 r5 + 1b0: dc 40 00 00 00 00 00 40 r4=be64 r4 + 1b8: bf 12 00 08 00 00 00 00 r1 = \(s8\) r2 + 1c0: bf 12 00 10 00 00 00 00 r1 = \(s16\) r2 + 1c8: bf 12 00 20 00 00 00 00 r1 = \(s32\) r2 + 1d0: d7 10 00 00 00 00 00 10 r1 = bswap16 r1 + 1d8: d7 20 00 00 00 00 00 20 r2 = bswap32 r2 + 1e0: d7 30 00 00 00 00 00 40 r3 = bswap64 r3 + 1e8: b7 10 00 00 ff ff f1 00 r1=0xfffff100 \ No newline at end of file diff --git a/gas/testsuite/gas/bpf/alu-be.d b/gas/testsuite/gas/bpf/alu-be.d index afd2a6cfd6d..b961f3fe474 100644 --- a/gas/testsuite/gas/bpf/alu-be.d +++ b/gas/testsuite/gas/bpf/alu-be.d @@ -1,5 +1,72 @@ -#as: --EB +#as: -EB -mdialect=normal #source: alu.s -#objdump: -dr -#dump: alu-be.dump -#name: eBPF ALU64 instructions, big endian, normal syntax +#objdump: -dr -M hex +#name: eBPF ALU instructions, big endian, normal syntax + +.*: +file format .*bpf.* + +Disassembly of section .text: + +0+ <.text>: + 0: 07 20 00 00 00 00 02 9a add %r2,0x29a + 8: 07 30 00 00 ff ff fd 66 add %r3,0xfffffd66 + 10: 07 40 00 00 7e ad be ef add %r4,0x7eadbeef + 18: 0f 56 00 00 00 00 00 00 add %r5,%r6 + 20: 17 20 00 00 00 00 02 9a sub %r2,0x29a + 28: 17 30 00 00 ff ff fd 66 sub %r3,0xfffffd66 + 30: 17 40 00 00 7e ad be ef sub %r4,0x7eadbeef + 38: 1f 56 00 00 00 00 00 00 sub %r5,%r6 + 40: 27 20 00 00 00 00 02 9a mul %r2,0x29a + 48: 27 30 00 00 ff ff fd 66 mul %r3,0xfffffd66 + 50: 27 40 00 00 7e ad be ef mul %r4,0x7eadbeef + 58: 2f 56 00 00 00 00 00 00 mul %r5,%r6 + 60: 37 20 00 00 00 00 02 9a div %r2,0x29a + 68: 37 30 00 00 ff ff fd 66 div %r3,0xfffffd66 + 70: 37 40 00 00 7e ad be ef div %r4,0x7eadbeef + 78: 3f 56 00 00 00 00 00 00 div %r5,%r6 + 80: 47 20 00 00 00 00 02 9a or %r2,0x29a + 88: 47 30 00 00 ff ff fd 66 or %r3,0xfffffd66 + 90: 47 40 00 00 7e ad be ef or %r4,0x7eadbeef + 98: 4f 56 00 00 00 00 00 00 or %r5,%r6 + a0: 57 20 00 00 00 00 02 9a and %r2,0x29a + a8: 57 30 00 00 ff ff fd 66 and %r3,0xfffffd66 + b0: 57 40 00 00 7e ad be ef and %r4,0x7eadbeef + b8: 5f 56 00 00 00 00 00 00 and %r5,%r6 + c0: 67 20 00 00 00 00 02 9a lsh %r2,0x29a + c8: 67 30 00 00 ff ff fd 66 lsh %r3,0xfffffd66 + d0: 67 40 00 00 7e ad be ef lsh %r4,0x7eadbeef + d8: 6f 56 00 00 00 00 00 00 lsh %r5,%r6 + e0: 77 20 00 00 00 00 02 9a rsh %r2,0x29a + e8: 77 30 00 00 ff ff fd 66 rsh %r3,0xfffffd66 + f0: 77 40 00 00 7e ad be ef rsh %r4,0x7eadbeef + f8: 7f 56 00 00 00 00 00 00 rsh %r5,%r6 + 100: 97 20 00 00 00 00 02 9a mod %r2,0x29a + 108: 97 30 00 00 ff ff fd 66 mod %r3,0xfffffd66 + 110: 97 40 00 00 7e ad be ef mod %r4,0x7eadbeef + 118: 9f 56 00 00 00 00 00 00 mod %r5,%r6 + 120: a7 20 00 00 00 00 02 9a xor %r2,0x29a + 128: a7 30 00 00 ff ff fd 66 xor %r3,0xfffffd66 + 130: a7 40 00 00 7e ad be ef xor %r4,0x7eadbeef + 138: af 56 00 00 00 00 00 00 xor %r5,%r6 + 140: b7 20 00 00 00 00 02 9a mov %r2,0x29a + 148: b7 30 00 00 ff ff fd 66 mov %r3,0xfffffd66 + 150: b7 40 00 00 7e ad be ef mov %r4,0x7eadbeef + 158: bf 56 00 00 00 00 00 00 mov %r5,%r6 + 160: c7 20 00 00 00 00 02 9a arsh %r2,0x29a + 168: c7 30 00 00 ff ff fd 66 arsh %r3,0xfffffd66 + 170: c7 40 00 00 7e ad be ef arsh %r4,0x7eadbeef + 178: cf 56 00 00 00 00 00 00 arsh %r5,%r6 + 180: 8f 20 00 00 00 00 00 00 neg %r2 + 188: d4 90 00 00 00 00 00 10 endle %r9,16 + 190: d4 80 00 00 00 00 00 20 endle %r8,32 + 198: d4 70 00 00 00 00 00 40 endle %r7,64 + 1a0: dc 60 00 00 00 00 00 10 endbe %r6,16 + 1a8: dc 50 00 00 00 00 00 20 endbe %r5,32 + 1b0: dc 40 00 00 00 00 00 40 endbe %r4,64 + 1b8: bf 12 00 08 00 00 00 00 movs %r1,%r2,8 + 1c0: bf 12 00 10 00 00 00 00 movs %r1,%r2,16 + 1c8: bf 12 00 20 00 00 00 00 movs %r1,%r2,32 + 1d0: d7 10 00 00 00 00 00 10 bswap %r1,16 + 1d8: d7 20 00 00 00 00 00 20 bswap %r2,32 + 1e0: d7 30 00 00 00 00 00 40 bswap %r3,64 + 1e8: 87 10 00 00 00 00 0f 00 neg %r1,0xf00 \ No newline at end of file diff --git a/gas/testsuite/gas/bpf/alu-pseudoc.d b/gas/testsuite/gas/bpf/alu-pseudoc.d index df130699b4f..bbd222c83ae 100644 --- a/gas/testsuite/gas/bpf/alu-pseudoc.d +++ b/gas/testsuite/gas/bpf/alu-pseudoc.d @@ -1,5 +1,72 @@ -#as: --EL -#objdump: -dr +#as: -EL -mdialect=pseudoc +#objdump: -dr -M hex,pseudoc #source: alu-pseudoc.s -#dump: alu.dump -#name: eBPF ALU64 instructions, pseudo-c syntax +#name: eBPF ALU instructions, pseudo-c syntax + +.*: +file format .*bpf.* + +Disassembly of section .text: + +0+ <.text>: + 0: 07 02 00 00 9a 02 00 00 r2\+=0x29a + 8: 07 03 00 00 66 fd ff ff r3\+=0xfffffd66 + 10: 07 04 00 00 ef be ad 7e r4\+=0x7eadbeef + 18: 0f 65 00 00 00 00 00 00 r5\+=r6 + 20: 17 02 00 00 9a 02 00 00 r2-=0x29a + 28: 17 03 00 00 66 fd ff ff r3-=0xfffffd66 + 30: 17 04 00 00 ef be ad 7e r4-=0x7eadbeef + 38: 1f 65 00 00 00 00 00 00 r5-=r6 + 40: 27 02 00 00 9a 02 00 00 r2\*=0x29a + 48: 27 03 00 00 66 fd ff ff r3\*=0xfffffd66 + 50: 27 04 00 00 ef be ad 7e r4\*=0x7eadbeef + 58: 2f 65 00 00 00 00 00 00 r5\*=r6 + 60: 37 02 00 00 9a 02 00 00 r2/=0x29a + 68: 37 03 00 00 66 fd ff ff r3/=0xfffffd66 + 70: 37 04 00 00 ef be ad 7e r4/=0x7eadbeef + 78: 3f 65 00 00 00 00 00 00 r5/=r6 + 80: 47 02 00 00 9a 02 00 00 r2|=0x29a + 88: 47 03 00 00 66 fd ff ff r3|=0xfffffd66 + 90: 47 04 00 00 ef be ad 7e r4|=0x7eadbeef + 98: 4f 65 00 00 00 00 00 00 r5|=r6 + a0: 57 02 00 00 9a 02 00 00 r2&=0x29a + a8: 57 03 00 00 66 fd ff ff r3&=0xfffffd66 + b0: 57 04 00 00 ef be ad 7e r4&=0x7eadbeef + b8: 5f 65 00 00 00 00 00 00 r5&=r6 + c0: 67 02 00 00 9a 02 00 00 r2<<=0x29a + c8: 67 03 00 00 66 fd ff ff r3<<=0xfffffd66 + d0: 67 04 00 00 ef be ad 7e r4<<=0x7eadbeef + d8: 6f 65 00 00 00 00 00 00 r5<<=r6 + e0: 77 02 00 00 9a 02 00 00 r2>>=0x29a + e8: 77 03 00 00 66 fd ff ff r3>>=0xfffffd66 + f0: 77 04 00 00 ef be ad 7e r4>>=0x7eadbeef + f8: 7f 65 00 00 00 00 00 00 r5>>=r6 + 100: 97 02 00 00 9a 02 00 00 r2%=0x29a + 108: 97 03 00 00 66 fd ff ff r3%=0xfffffd66 + 110: 97 04 00 00 ef be ad 7e r4%=0x7eadbeef + 118: 9f 65 00 00 00 00 00 00 r5%=r6 + 120: a7 02 00 00 9a 02 00 00 r2\^=0x29a + 128: a7 03 00 00 66 fd ff ff r3\^=0xfffffd66 + 130: a7 04 00 00 ef be ad 7e r4\^=0x7eadbeef + 138: af 65 00 00 00 00 00 00 r5\^=r6 + 140: b7 02 00 00 9a 02 00 00 r2=0x29a + 148: b7 03 00 00 66 fd ff ff r3=0xfffffd66 + 150: b7 04 00 00 ef be ad 7e r4=0x7eadbeef + 158: bf 65 00 00 00 00 00 00 r5=r6 + 160: c7 02 00 00 9a 02 00 00 r2 s>>=0x29a + 168: c7 03 00 00 66 fd ff ff r3 s>>=0xfffffd66 + 170: c7 04 00 00 ef be ad 7e r4 s>>=0x7eadbeef + 178: cf 65 00 00 00 00 00 00 r5 s>>=r6 + 180: 8f 02 00 00 00 00 00 00 r2=-r2 + 188: d4 09 00 00 10 00 00 00 r9=le16 r9 + 190: d4 08 00 00 20 00 00 00 r8=le32 r8 + 198: d4 07 00 00 40 00 00 00 r7=le64 r7 + 1a0: dc 06 00 00 10 00 00 00 r6=be16 r6 + 1a8: dc 05 00 00 20 00 00 00 r5=be32 r5 + 1b0: dc 04 00 00 40 00 00 00 r4=be64 r4 + 1b8: bf 21 08 00 00 00 00 00 r1 = \(s8\) r2 + 1c0: bf 21 10 00 00 00 00 00 r1 = \(s16\) r2 + 1c8: bf 21 20 00 00 00 00 00 r1 = \(s32\) r2 + 1d0: d7 01 00 00 10 00 00 00 r1 = bswap16 r1 + 1d8: d7 02 00 00 20 00 00 00 r2 = bswap32 r2 + 1e0: d7 03 00 00 40 00 00 00 r3 = bswap64 r3 + 1e8: b7 01 00 00 00 f1 ff ff r1=0xfffff100 diff --git a/gas/testsuite/gas/bpf/alu-pseudoc.s b/gas/testsuite/gas/bpf/alu-pseudoc.s index 0f79929ea0d..abd8ddcc38e 100644 --- a/gas/testsuite/gas/bpf/alu-pseudoc.s +++ b/gas/testsuite/gas/bpf/alu-pseudoc.s @@ -48,4 +48,20 @@ r3 s>>= -666 r4 s>>= 2125315823 r5 s>>= r6 - r2 = -r2 + r2 = - r2 + r9 = le16 r9 + r8 = le32 r8 + r7 = le64 r7 + r6 = be16 r6 + r5 = be32 r5 + r4 = be64 r4 + r1 = (s8) r2 + r1 = (s16) r2 + r1 = (s32) r2 + r1 = bswap16 r1 + r2 = bswap32 r2 + r3 = bswap64 r3 + ;; Note that the next instruction gets processed by the GAS + ;; preprocessor into r1 =-0xf00, which parses into a %dr = %i32 + ;; instruction instead of a neg :/ + r1 = - 0xf00 diff --git a/gas/testsuite/gas/bpf/alu.d b/gas/testsuite/gas/bpf/alu.d index 764ae440d8f..e4afdab0d50 100644 --- a/gas/testsuite/gas/bpf/alu.d +++ b/gas/testsuite/gas/bpf/alu.d @@ -1,5 +1,72 @@ -#as: --EL -#objdump: -dr +#as: -EL -mdialect=normal +#objdump: -dr -M hex #source: alu.s -#dump: alu.dump -#name: eBPF ALU64 instructions, normal syntax +#name: eBPF ALU instructions, normal syntax + +.*: +file format .*bpf.* + +Disassembly of section .text: + +0+ <.text>: + 0: 07 02 00 00 9a 02 00 00 add %r2,0x29a + 8: 07 03 00 00 66 fd ff ff add %r3,0xfffffd66 + 10: 07 04 00 00 ef be ad 7e add %r4,0x7eadbeef + 18: 0f 65 00 00 00 00 00 00 add %r5,%r6 + 20: 17 02 00 00 9a 02 00 00 sub %r2,0x29a + 28: 17 03 00 00 66 fd ff ff sub %r3,0xfffffd66 + 30: 17 04 00 00 ef be ad 7e sub %r4,0x7eadbeef + 38: 1f 65 00 00 00 00 00 00 sub %r5,%r6 + 40: 27 02 00 00 9a 02 00 00 mul %r2,0x29a + 48: 27 03 00 00 66 fd ff ff mul %r3,0xfffffd66 + 50: 27 04 00 00 ef be ad 7e mul %r4,0x7eadbeef + 58: 2f 65 00 00 00 00 00 00 mul %r5,%r6 + 60: 37 02 00 00 9a 02 00 00 div %r2,0x29a + 68: 37 03 00 00 66 fd ff ff div %r3,0xfffffd66 + 70: 37 04 00 00 ef be ad 7e div %r4,0x7eadbeef + 78: 3f 65 00 00 00 00 00 00 div %r5,%r6 + 80: 47 02 00 00 9a 02 00 00 or %r2,0x29a + 88: 47 03 00 00 66 fd ff ff or %r3,0xfffffd66 + 90: 47 04 00 00 ef be ad 7e or %r4,0x7eadbeef + 98: 4f 65 00 00 00 00 00 00 or %r5,%r6 + a0: 57 02 00 00 9a 02 00 00 and %r2,0x29a + a8: 57 03 00 00 66 fd ff ff and %r3,0xfffffd66 + b0: 57 04 00 00 ef be ad 7e and %r4,0x7eadbeef + b8: 5f 65 00 00 00 00 00 00 and %r5,%r6 + c0: 67 02 00 00 9a 02 00 00 lsh %r2,0x29a + c8: 67 03 00 00 66 fd ff ff lsh %r3,0xfffffd66 + d0: 67 04 00 00 ef be ad 7e lsh %r4,0x7eadbeef + d8: 6f 65 00 00 00 00 00 00 lsh %r5,%r6 + e0: 77 02 00 00 9a 02 00 00 rsh %r2,0x29a + e8: 77 03 00 00 66 fd ff ff rsh %r3,0xfffffd66 + f0: 77 04 00 00 ef be ad 7e rsh %r4,0x7eadbeef + f8: 7f 65 00 00 00 00 00 00 rsh %r5,%r6 + 100: 97 02 00 00 9a 02 00 00 mod %r2,0x29a + 108: 97 03 00 00 66 fd ff ff mod %r3,0xfffffd66 + 110: 97 04 00 00 ef be ad 7e mod %r4,0x7eadbeef + 118: 9f 65 00 00 00 00 00 00 mod %r5,%r6 + 120: a7 02 00 00 9a 02 00 00 xor %r2,0x29a + 128: a7 03 00 00 66 fd ff ff xor %r3,0xfffffd66 + 130: a7 04 00 00 ef be ad 7e xor %r4,0x7eadbeef + 138: af 65 00 00 00 00 00 00 xor %r5,%r6 + 140: b7 02 00 00 9a 02 00 00 mov %r2,0x29a + 148: b7 03 00 00 66 fd ff ff mov %r3,0xfffffd66 + 150: b7 04 00 00 ef be ad 7e mov %r4,0x7eadbeef + 158: bf 65 00 00 00 00 00 00 mov %r5,%r6 + 160: c7 02 00 00 9a 02 00 00 arsh %r2,0x29a + 168: c7 03 00 00 66 fd ff ff arsh %r3,0xfffffd66 + 170: c7 04 00 00 ef be ad 7e arsh %r4,0x7eadbeef + 178: cf 65 00 00 00 00 00 00 arsh %r5,%r6 + 180: 8f 02 00 00 00 00 00 00 neg %r2 + 188: d4 09 00 00 10 00 00 00 endle %r9,16 + 190: d4 08 00 00 20 00 00 00 endle %r8,32 + 198: d4 07 00 00 40 00 00 00 endle %r7,64 + 1a0: dc 06 00 00 10 00 00 00 endbe %r6,16 + 1a8: dc 05 00 00 20 00 00 00 endbe %r5,32 + 1b0: dc 04 00 00 40 00 00 00 endbe %r4,64 + 1b8: bf 21 08 00 00 00 00 00 movs %r1,%r2,8 + 1c0: bf 21 10 00 00 00 00 00 movs %r1,%r2,16 + 1c8: bf 21 20 00 00 00 00 00 movs %r1,%r2,32 + 1d0: d7 01 00 00 10 00 00 00 bswap %r1,16 + 1d8: d7 02 00 00 20 00 00 00 bswap %r2,32 + 1e0: d7 03 00 00 40 00 00 00 bswap %r3,64 + 1e8: 87 01 00 00 00 0f 00 00 neg %r1,0xf00 \ No newline at end of file diff --git a/gas/testsuite/gas/bpf/alu.s b/gas/testsuite/gas/bpf/alu.s index 18e60d5eaed..d0bf5600209 100644 --- a/gas/testsuite/gas/bpf/alu.s +++ b/gas/testsuite/gas/bpf/alu.s @@ -49,3 +49,16 @@ arsh %r4, 0x7eadbeef arsh %r5, %r6 neg %r2 + endle %r9,16 + endle %r8,32 + endle %r7,64 + endbe %r6,16 + endbe %r5,32 + endbe %r4,64 + movs %r1,%r2,8 + movs %r1,%r2,16 + movs %r1,%r2,32 + bswap %r1, 16 + bswap %r2, 32 + bswap %r3, 64 + neg %r1, 0xf00 diff --git a/gas/testsuite/gas/bpf/alu32-be-pseudoc.d b/gas/testsuite/gas/bpf/alu32-be-pseudoc.d index 396d7d40603..7f5e70071fc 100644 --- a/gas/testsuite/gas/bpf/alu32-be-pseudoc.d +++ b/gas/testsuite/gas/bpf/alu32-be-pseudoc.d @@ -1,5 +1,63 @@ -#as: --EB -#objdump: -dr +#as: -EB -mdialect=pseudoc +#objdump: -dr -M hex,pseudoc #source: alu32-pseudoc.s -#dump: alu32-be.dump -#name: eBPF ALU instructions, big-endian, pseudo-c syntax +#name: eBPF ALU32 instructions, big-endian, pseudo-c syntax + +.*: +file format .*bpf.* + +Disassembly of section .text: + +0+ <.text>: + 0: 04 20 00 00 00 00 02 9a w2\+=0x29a + 8: 04 30 00 00 ff ff fd 66 w3\+=0xfffffd66 + 10: 04 40 00 00 7e ad be ef w4\+=0x7eadbeef + 18: 0c 56 00 00 00 00 00 00 w5\+=w6 + 20: 14 20 00 00 00 00 02 9a w2-=0x29a + 28: 14 30 00 00 ff ff fd 66 w3-=0xfffffd66 + 30: 14 40 00 00 7e ad be ef w4-=0x7eadbeef + 38: 1c 56 00 00 00 00 00 00 w5-=w6 + 40: 24 20 00 00 00 00 02 9a w2\*=0x29a + 48: 24 30 00 00 ff ff fd 66 w3\*=0xfffffd66 + 50: 24 40 00 00 7e ad be ef w4\*=0x7eadbeef + 58: 2c 56 00 00 00 00 00 00 w5\*=w6 + 60: 34 20 00 00 00 00 02 9a w2/=0x29a + 68: 34 30 00 00 ff ff fd 66 w3/=0xfffffd66 + 70: 34 40 00 00 7e ad be ef w4/=0x7eadbeef + 78: 3c 56 00 00 00 00 00 00 w5/=w6 + 80: 44 20 00 00 00 00 02 9a w2|=0x29a + 88: 44 30 00 00 ff ff fd 66 w3|=0xfffffd66 + 90: 44 40 00 00 7e ad be ef w4|=0x7eadbeef + 98: 4c 56 00 00 00 00 00 00 w5|=w6 + a0: 54 20 00 00 00 00 02 9a w2&=0x29a + a8: 54 30 00 00 ff ff fd 66 w3&=0xfffffd66 + b0: 54 40 00 00 7e ad be ef w4&=0x7eadbeef + b8: 5c 56 00 00 00 00 00 00 w5&=w6 + c0: 64 20 00 00 00 00 02 9a w2<<=0x29a + c8: 64 30 00 00 ff ff fd 66 w3<<=0xfffffd66 + d0: 64 40 00 00 7e ad be ef w4<<=0x7eadbeef + d8: 6c 56 00 00 00 00 00 00 w5<<=w6 + e0: 74 20 00 00 00 00 02 9a w2>>=0x29a + e8: 74 30 00 00 ff ff fd 66 w3>>=0xfffffd66 + f0: 74 40 00 00 7e ad be ef w4>>=0x7eadbeef + f8: 7c 56 00 00 00 00 00 00 w5>>=w6 + 100: 94 20 00 00 00 00 02 9a w2%=0x29a + 108: 94 30 00 00 ff ff fd 66 w3%=0xfffffd66 + 110: 94 40 00 00 7e ad be ef w4%=0x7eadbeef + 118: 9c 56 00 00 00 00 00 00 w5%=w6 + 120: a4 20 00 00 00 00 02 9a w2\^=0x29a + 128: a4 30 00 00 ff ff fd 66 w3\^=0xfffffd66 + 130: a4 40 00 00 7e ad be ef w4\^=0x7eadbeef + 138: ac 56 00 00 00 00 00 00 w5\^=w6 + 140: b4 20 00 00 00 00 02 9a w2=0x29a + 148: b4 30 00 00 ff ff fd 66 w3=0xfffffd66 + 150: b4 40 00 00 7e ad be ef w4=0x7eadbeef + 158: bc 56 00 00 00 00 00 00 w5=w6 + 160: c4 20 00 00 00 00 02 9a w2 s>>=0x29a + 168: c4 30 00 00 ff ff fd 66 w3 s>>=0xfffffd66 + 170: c4 40 00 00 7e ad be ef w4 s>>=0x7eadbeef + 178: cc 56 00 00 00 00 00 00 w5 s>>=w6 + 180: 8c 20 00 00 00 00 00 00 w2=-w2 + 188: bc 12 00 08 00 00 00 00 w1 = \(s8\) w2 + 190: bc 12 00 10 00 00 00 00 w1 = \(s16\) w2 + 198: bc 12 00 20 00 00 00 00 w1 = \(s32\) w2 + 1a0: b4 10 00 00 ff ff f1 00 w1=0xfffff100 \ No newline at end of file diff --git a/gas/testsuite/gas/bpf/alu32-be.d b/gas/testsuite/gas/bpf/alu32-be.d index 6ed9e556bf4..9799664b27a 100644 --- a/gas/testsuite/gas/bpf/alu32-be.d +++ b/gas/testsuite/gas/bpf/alu32-be.d @@ -1,5 +1,63 @@ -#as: --EB -#objdump: -dr -#source: alu32-pseudoc.s -#dump: alu32-be.dump -#name: eBPF ALU instructions, big-endian, normal syntax +#as: -EB -mdialect=normal +#objdump: -dr -M hex +#source: alu32.s +#name: eBPF ALU32 instructions, big-endian, normal syntax + +.*: +file format .*bpf.* + +Disassembly of section .text: + +0+ <.text>: + 0: 04 20 00 00 00 00 02 9a add32 %r2,0x29a + 8: 04 30 00 00 ff ff fd 66 add32 %r3,0xfffffd66 + 10: 04 40 00 00 7e ad be ef add32 %r4,0x7eadbeef + 18: 0c 56 00 00 00 00 00 00 add32 %r5,%r6 + 20: 14 20 00 00 00 00 02 9a sub32 %r2,0x29a + 28: 14 30 00 00 ff ff fd 66 sub32 %r3,0xfffffd66 + 30: 14 40 00 00 7e ad be ef sub32 %r4,0x7eadbeef + 38: 1c 56 00 00 00 00 00 00 sub32 %r5,%r6 + 40: 24 20 00 00 00 00 02 9a mul32 %r2,0x29a + 48: 24 30 00 00 ff ff fd 66 mul32 %r3,0xfffffd66 + 50: 24 40 00 00 7e ad be ef mul32 %r4,0x7eadbeef + 58: 2c 56 00 00 00 00 00 00 mul32 %r5,%r6 + 60: 34 20 00 00 00 00 02 9a div32 %r2,0x29a + 68: 34 30 00 00 ff ff fd 66 div32 %r3,0xfffffd66 + 70: 34 40 00 00 7e ad be ef div32 %r4,0x7eadbeef + 78: 3c 56 00 00 00 00 00 00 div32 %r5,%r6 + 80: 44 20 00 00 00 00 02 9a or32 %r2,0x29a + 88: 44 30 00 00 ff ff fd 66 or32 %r3,0xfffffd66 + 90: 44 40 00 00 7e ad be ef or32 %r4,0x7eadbeef + 98: 4c 56 00 00 00 00 00 00 or32 %r5,%r6 + a0: 54 20 00 00 00 00 02 9a and32 %r2,0x29a + a8: 54 30 00 00 ff ff fd 66 and32 %r3,0xfffffd66 + b0: 54 40 00 00 7e ad be ef and32 %r4,0x7eadbeef + b8: 5c 56 00 00 00 00 00 00 and32 %r5,%r6 + c0: 64 20 00 00 00 00 02 9a lsh32 %r2,0x29a + c8: 64 30 00 00 ff ff fd 66 lsh32 %r3,0xfffffd66 + d0: 64 40 00 00 7e ad be ef lsh32 %r4,0x7eadbeef + d8: 6c 56 00 00 00 00 00 00 lsh32 %r5,%r6 + e0: 74 20 00 00 00 00 02 9a rsh32 %r2,0x29a + e8: 74 30 00 00 ff ff fd 66 rsh32 %r3,0xfffffd66 + f0: 74 40 00 00 7e ad be ef rsh32 %r4,0x7eadbeef + f8: 7c 56 00 00 00 00 00 00 rsh32 %r5,%r6 + 100: 94 20 00 00 00 00 02 9a mod32 %r2,0x29a + 108: 94 30 00 00 ff ff fd 66 mod32 %r3,0xfffffd66 + 110: 94 40 00 00 7e ad be ef mod32 %r4,0x7eadbeef + 118: 9c 56 00 00 00 00 00 00 mod32 %r5,%r6 + 120: a4 20 00 00 00 00 02 9a xor32 %r2,0x29a + 128: a4 30 00 00 ff ff fd 66 xor32 %r3,0xfffffd66 + 130: a4 40 00 00 7e ad be ef xor32 %r4,0x7eadbeef + 138: ac 56 00 00 00 00 00 00 xor32 %r5,%r6 + 140: b4 20 00 00 00 00 02 9a mov32 %r2,0x29a + 148: b4 30 00 00 ff ff fd 66 mov32 %r3,0xfffffd66 + 150: b4 40 00 00 7e ad be ef mov32 %r4,0x7eadbeef + 158: bc 56 00 00 00 00 00 00 mov32 %r5,%r6 + 160: c4 20 00 00 00 00 02 9a arsh32 %r2,0x29a + 168: c4 30 00 00 ff ff fd 66 arsh32 %r3,0xfffffd66 + 170: c4 40 00 00 7e ad be ef arsh32 %r4,0x7eadbeef + 178: cc 56 00 00 00 00 00 00 arsh32 %r5,%r6 + 180: 8c 20 00 00 00 00 00 00 neg32 %r2 + 188: bc 12 00 08 00 00 00 00 movs32 %r1,%r2,8 + 190: bc 12 00 10 00 00 00 00 movs32 %r1,%r2,16 + 198: bc 12 00 20 00 00 00 00 movs32 %r1,%r2,32 + 1a0: 84 10 00 00 00 00 0f 00 neg32 %r1,0xf00 diff --git a/gas/testsuite/gas/bpf/alu32-pseudoc.d b/gas/testsuite/gas/bpf/alu32-pseudoc.d index 98b99215b27..cc4e010b201 100644 --- a/gas/testsuite/gas/bpf/alu32-pseudoc.d +++ b/gas/testsuite/gas/bpf/alu32-pseudoc.d @@ -1,5 +1,63 @@ -#as: --EL -#objdump: -dr +#as: -EL -mdialect=pseudoc +#objdump: -dr -M hex,pseudoc #source: alu32-pseudoc.s -#dump: alu32.dump -#name: eBPF ALU instructions, pseudo-c syntax +#name: eBPF ALU32 instructions, pseudo-c syntax + +.*: +file format .*bpf.* + +Disassembly of section .text: + +0+ <.text>: + 0: 04 02 00 00 9a 02 00 00 w2\+=0x29a + 8: 04 03 00 00 66 fd ff ff w3\+=0xfffffd66 + 10: 04 04 00 00 ef be ad 7e w4\+=0x7eadbeef + 18: 0c 65 00 00 00 00 00 00 w5\+=w6 + 20: 14 02 00 00 9a 02 00 00 w2-=0x29a + 28: 14 03 00 00 66 fd ff ff w3-=0xfffffd66 + 30: 14 04 00 00 ef be ad 7e w4-=0x7eadbeef + 38: 1c 65 00 00 00 00 00 00 w5-=w6 + 40: 24 02 00 00 9a 02 00 00 w2\*=0x29a + 48: 24 03 00 00 66 fd ff ff w3\*=0xfffffd66 + 50: 24 04 00 00 ef be ad 7e w4\*=0x7eadbeef + 58: 2c 65 00 00 00 00 00 00 w5\*=w6 + 60: 34 02 00 00 9a 02 00 00 w2/=0x29a + 68: 34 03 00 00 66 fd ff ff w3/=0xfffffd66 + 70: 34 04 00 00 ef be ad 7e w4/=0x7eadbeef + 78: 3c 65 00 00 00 00 00 00 w5/=w6 + 80: 44 02 00 00 9a 02 00 00 w2|=0x29a + 88: 44 03 00 00 66 fd ff ff w3|=0xfffffd66 + 90: 44 04 00 00 ef be ad 7e w4|=0x7eadbeef + 98: 4c 65 00 00 00 00 00 00 w5|=w6 + a0: 54 02 00 00 9a 02 00 00 w2&=0x29a + a8: 54 03 00 00 66 fd ff ff w3&=0xfffffd66 + b0: 54 04 00 00 ef be ad 7e w4&=0x7eadbeef + b8: 5c 65 00 00 00 00 00 00 w5&=w6 + c0: 64 02 00 00 9a 02 00 00 w2<<=0x29a + c8: 64 03 00 00 66 fd ff ff w3<<=0xfffffd66 + d0: 64 04 00 00 ef be ad 7e w4<<=0x7eadbeef + d8: 6c 65 00 00 00 00 00 00 w5<<=w6 + e0: 74 02 00 00 9a 02 00 00 w2>>=0x29a + e8: 74 03 00 00 66 fd ff ff w3>>=0xfffffd66 + f0: 74 04 00 00 ef be ad 7e w4>>=0x7eadbeef + f8: 7c 65 00 00 00 00 00 00 w5>>=w6 + 100: 94 02 00 00 9a 02 00 00 w2%=0x29a + 108: 94 03 00 00 66 fd ff ff w3%=0xfffffd66 + 110: 94 04 00 00 ef be ad 7e w4%=0x7eadbeef + 118: 9c 65 00 00 00 00 00 00 w5%=w6 + 120: a4 02 00 00 9a 02 00 00 w2\^=0x29a + 128: a4 03 00 00 66 fd ff ff w3\^=0xfffffd66 + 130: a4 04 00 00 ef be ad 7e w4\^=0x7eadbeef + 138: ac 65 00 00 00 00 00 00 w5\^=w6 + 140: b4 02 00 00 9a 02 00 00 w2=0x29a + 148: b4 03 00 00 66 fd ff ff w3=0xfffffd66 + 150: b4 04 00 00 ef be ad 7e w4=0x7eadbeef + 158: bc 65 00 00 00 00 00 00 w5=w6 + 160: c4 02 00 00 9a 02 00 00 w2 s>>=0x29a + 168: c4 03 00 00 66 fd ff ff w3 s>>=0xfffffd66 + 170: c4 04 00 00 ef be ad 7e w4 s>>=0x7eadbeef + 178: cc 65 00 00 00 00 00 00 w5 s>>=w6 + 180: 8c 02 00 00 00 00 00 00 w2=-w2 + 188: bc 21 08 00 00 00 00 00 w1 = \(s8\) w2 + 190: bc 21 10 00 00 00 00 00 w1 = \(s16\) w2 + 198: bc 21 20 00 00 00 00 00 w1 = \(s32\) w2 + 1a0: b4 01 00 00 00 f1 ff ff w1=0xfffff100 diff --git a/gas/testsuite/gas/bpf/alu32-pseudoc.s b/gas/testsuite/gas/bpf/alu32-pseudoc.s index a29f6ea0336..98d586a48e6 100644 --- a/gas/testsuite/gas/bpf/alu32-pseudoc.s +++ b/gas/testsuite/gas/bpf/alu32-pseudoc.s @@ -1,16 +1,16 @@ # Tests for the ALU eBPF pseudo-C instructions .text - W2 += 666 - W3 += -666 - W4 += 2125315823 - W5 += w6 - W2 -= 666 - W3 -= -666 - W4 -= 2125315823 - W5 -= w6 - W2 *= 666 - W3 *= -666 - W4 *= 2125315823 + w2 += 666 + w3 += -666 + w4 += 2125315823 + w5 += w6 + w2 -= 666 + w3 -= -666 + w4 -= 2125315823 + w5 -= w6 + w2 *= 666 + w3 *= -666 + w4 *= 2125315823 w5 *= w6 w2 /= 666 w3 /= -666 @@ -48,10 +48,11 @@ w3 s>>= -666 w4 s>>= 2125315823 w5 s>>= w6 - w2 = -w2 - r9 = le16 r9 - r8 = le32 r8 - r7 = le64 r7 - r6 = be16 r6 - r5 = be32 r5 - r4 = be64 r4 + w2 = - w2 + w1 = (s8) w2 + w1 = (s16) w2 + w1 = (s32) w2 + ;; Note that the next instruction gets processed by the GAS + ;; preprocessor into w1 =-0xf00, which parses into a %dw = %i32 + ;; instruction instead of a neg :/ + w1 = - 0xf00 diff --git a/gas/testsuite/gas/bpf/alu32.d b/gas/testsuite/gas/bpf/alu32.d index 87efc20ba30..25484381aeb 100644 --- a/gas/testsuite/gas/bpf/alu32.d +++ b/gas/testsuite/gas/bpf/alu32.d @@ -1,5 +1,63 @@ -#as: --EL -#objdump: -dr +#as: -EL -mdialect=normal +#objdump: -dr -M hex #source: alu32.s -#dump: alu32.dump -#name: eBPF ALU instructions, normal syntax +#name: eBPF ALU32 instructions, normal syntax + +.*: +file format .*bpf.* + +Disassembly of section .text: + +0+ <.text>: + 0: 04 02 00 00 9a 02 00 00 add32 %r2,0x29a + 8: 04 03 00 00 66 fd ff ff add32 %r3,0xfffffd66 + 10: 04 04 00 00 ef be ad 7e add32 %r4,0x7eadbeef + 18: 0c 65 00 00 00 00 00 00 add32 %r5,%r6 + 20: 14 02 00 00 9a 02 00 00 sub32 %r2,0x29a + 28: 14 03 00 00 66 fd ff ff sub32 %r3,0xfffffd66 + 30: 14 04 00 00 ef be ad 7e sub32 %r4,0x7eadbeef + 38: 1c 65 00 00 00 00 00 00 sub32 %r5,%r6 + 40: 24 02 00 00 9a 02 00 00 mul32 %r2,0x29a + 48: 24 03 00 00 66 fd ff ff mul32 %r3,0xfffffd66 + 50: 24 04 00 00 ef be ad 7e mul32 %r4,0x7eadbeef + 58: 2c 65 00 00 00 00 00 00 mul32 %r5,%r6 + 60: 34 02 00 00 9a 02 00 00 div32 %r2,0x29a + 68: 34 03 00 00 66 fd ff ff div32 %r3,0xfffffd66 + 70: 34 04 00 00 ef be ad 7e div32 %r4,0x7eadbeef + 78: 3c 65 00 00 00 00 00 00 div32 %r5,%r6 + 80: 44 02 00 00 9a 02 00 00 or32 %r2,0x29a + 88: 44 03 00 00 66 fd ff ff or32 %r3,0xfffffd66 + 90: 44 04 00 00 ef be ad 7e or32 %r4,0x7eadbeef + 98: 4c 65 00 00 00 00 00 00 or32 %r5,%r6 + a0: 54 02 00 00 9a 02 00 00 and32 %r2,0x29a + a8: 54 03 00 00 66 fd ff ff and32 %r3,0xfffffd66 + b0: 54 04 00 00 ef be ad 7e and32 %r4,0x7eadbeef + b8: 5c 65 00 00 00 00 00 00 and32 %r5,%r6 + c0: 64 02 00 00 9a 02 00 00 lsh32 %r2,0x29a + c8: 64 03 00 00 66 fd ff ff lsh32 %r3,0xfffffd66 + d0: 64 04 00 00 ef be ad 7e lsh32 %r4,0x7eadbeef + d8: 6c 65 00 00 00 00 00 00 lsh32 %r5,%r6 + e0: 74 02 00 00 9a 02 00 00 rsh32 %r2,0x29a + e8: 74 03 00 00 66 fd ff ff rsh32 %r3,0xfffffd66 + f0: 74 04 00 00 ef be ad 7e rsh32 %r4,0x7eadbeef + f8: 7c 65 00 00 00 00 00 00 rsh32 %r5,%r6 + 100: 94 02 00 00 9a 02 00 00 mod32 %r2,0x29a + 108: 94 03 00 00 66 fd ff ff mod32 %r3,0xfffffd66 + 110: 94 04 00 00 ef be ad 7e mod32 %r4,0x7eadbeef + 118: 9c 65 00 00 00 00 00 00 mod32 %r5,%r6 + 120: a4 02 00 00 9a 02 00 00 xor32 %r2,0x29a + 128: a4 03 00 00 66 fd ff ff xor32 %r3,0xfffffd66 + 130: a4 04 00 00 ef be ad 7e xor32 %r4,0x7eadbeef + 138: ac 65 00 00 00 00 00 00 xor32 %r5,%r6 + 140: b4 02 00 00 9a 02 00 00 mov32 %r2,0x29a + 148: b4 03 00 00 66 fd ff ff mov32 %r3,0xfffffd66 + 150: b4 04 00 00 ef be ad 7e mov32 %r4,0x7eadbeef + 158: bc 65 00 00 00 00 00 00 mov32 %r5,%r6 + 160: c4 02 00 00 9a 02 00 00 arsh32 %r2,0x29a + 168: c4 03 00 00 66 fd ff ff arsh32 %r3,0xfffffd66 + 170: c4 04 00 00 ef be ad 7e arsh32 %r4,0x7eadbeef + 178: cc 65 00 00 00 00 00 00 arsh32 %r5,%r6 + 180: 8c 02 00 00 00 00 00 00 neg32 %r2 + 188: bc 21 08 00 00 00 00 00 movs32 %r1,%r2,8 + 190: bc 21 10 00 00 00 00 00 movs32 %r1,%r2,16 + 198: bc 21 20 00 00 00 00 00 movs32 %r1,%r2,32 + 1a0: 84 01 00 00 00 0f 00 00 neg32 %r1,0xf00 \ No newline at end of file diff --git a/gas/testsuite/gas/bpf/alu32.s b/gas/testsuite/gas/bpf/alu32.s index 7b6f014e8be..fd1d528ba21 100644 --- a/gas/testsuite/gas/bpf/alu32.s +++ b/gas/testsuite/gas/bpf/alu32.s @@ -49,9 +49,7 @@ arsh32 %r4, 0x7eadbeef arsh32 %r5, %r6 neg32 %r2 - endle %r9,16 - endle %r8,32 - endle %r7,64 - endbe %r6,16 - endbe %r5,32 - endbe %r4,64 + movs32 %r1,%r2,8 + movs32 %r1,%r2,16 + movs32 %r1,%r2,32 + neg32 %r1, 0xf00 diff --git a/gas/testsuite/gas/bpf/atomic-be.d b/gas/testsuite/gas/bpf/atomic-be.d index b252571e5fd..7a04753da63 100644 --- a/gas/testsuite/gas/bpf/atomic-be.d +++ b/gas/testsuite/gas/bpf/atomic-be.d @@ -1,7 +1,6 @@ -#as: --EB +#as: -EB -mdialect=normal #source: atomic.s -#source: atomic-pseudoc.s -#objdump: -dr +#objdump: -dr -M hex #name: eBPF atomic instructions, big endian .*: +file format .*bpf.* @@ -9,5 +8,23 @@ Disassembly of section .text: 0+ <.text>: - 0: db 12 1e ef 00 00 00 00 xadddw \[%r1\+0x1eef\],%r2 - 8: c3 12 1e ef 00 00 00 00 xaddw \[%r1\+0x1eef\],%r2 + 0: db 12 1e ef 00 00 00 00 aadd \[%r1\+0x1eef\],%r2 + 8: c3 12 1e ef 00 00 00 00 aadd32 \[%r1\+0x1eef\],%r2 + 10: db 12 1e ef 00 00 00 50 aand \[%r1\+0x1eef\],%r2 + 18: c3 12 1e ef 00 00 00 50 aand32 \[%r1\+0x1eef\],%r2 + 20: db 12 1e ef 00 00 00 40 aor \[%r1\+0x1eef\],%r2 + 28: c3 12 1e ef 00 00 00 40 aor32 \[%r1\+0x1eef\],%r2 + 30: db 12 1e ef 00 00 00 a0 axor \[%r1\+0x1eef\],%r2 + 38: c3 12 1e ef 00 00 00 a0 axor32 \[%r1\+0x1eef\],%r2 + 40: db 12 1e ef 00 00 00 01 afadd \[%r1\+0x1eef\],%r2 + 48: c3 12 1e ef 00 00 00 01 afadd32 \[%r1\+0x1eef\],%r2 + 50: db 12 1e ef 00 00 00 51 afand \[%r1\+0x1eef\],%r2 + 58: c3 12 1e ef 00 00 00 51 afand32 \[%r1\+0x1eef\],%r2 + 60: db 12 1e ef 00 00 00 41 afor \[%r1\+0x1eef\],%r2 + 68: c3 12 1e ef 00 00 00 41 afor32 \[%r1\+0x1eef\],%r2 + 70: db 12 1e ef 00 00 00 a1 afxor \[%r1\+0x1eef\],%r2 + 78: c3 12 1e ef 00 00 00 a1 afxor32 \[%r1\+0x1eef\],%r2 + 80: db 12 00 04 00 00 00 f1 acmp \[%r1\+0x4\],%r2 + 88: c3 23 00 04 00 00 00 f1 acmp32 \[%r2\+0x4\],%r3 + 90: db 12 00 08 00 00 00 e1 axchg \[%r1\+0x8\],%r2 + 98: c3 13 00 08 00 00 00 e1 axchg32 \[%r1\+0x8\],%r3 diff --git a/gas/testsuite/gas/bpf/atomic-pseudoc.d b/gas/testsuite/gas/bpf/atomic-pseudoc.d index 3b0e5c567be..2b3739ee47e 100644 --- a/gas/testsuite/gas/bpf/atomic-pseudoc.d +++ b/gas/testsuite/gas/bpf/atomic-pseudoc.d @@ -1,5 +1,32 @@ -#as: --EL -#objdump: -dr +#as: -EL -mdialect=pseudoc +#objdump: -dr -M hex,pseudoc #source: atomic-pseudoc.s -#dump: atomic.dump -#name: eBPF atomic instructions, normal syntax +#name: eBPF atomic instructions, pseudoc syntax + +.*: +file format .*bpf.* + +Disassembly of section .text: + +0+ <.text>: + 0: db 21 ef 1e 00 00 00 00 lock \*\(u64\*\)\(r1\+0x1eef\)\+=r2 + 8: c3 21 ef 1e 00 00 00 00 lock \*\(u32\*\)\(r1\+0x1eef\)\+=r2 + 10: db 21 ef 1e 00 00 00 00 lock \*\(u64\*\)\(r1\+0x1eef\)\+=r2 + 18: c3 21 ef 1e 00 00 00 00 lock \*\(u32\*\)\(r1\+0x1eef\)\+=r2 + 20: db 21 ef 1e 50 00 00 00 lock \*\(u64\*\)\(r1\+0x1eef\)\&=r2 + 28: c3 21 ef 1e 50 00 00 00 lock \*\(u32\*\)\(r1\+0x1eef\)\&=r2 + 30: db 21 ef 1e 40 00 00 00 lock \*\(u64\*\)\(r1\+0x1eef\)\|=r2 + 38: c3 21 ef 1e 40 00 00 00 lock \*\(u32\*\)\(r1\+0x1eef\)\|=r2 + 40: db 21 ef 1e a0 00 00 00 lock \*\(u64\*\)\(r1\+0x1eef\)\^=r2 + 48: c3 21 ef 1e a0 00 00 00 lock \*\(u32\*\)\(r1\+0x1eef\)\^=r2 + 50: db 21 ef 1e 01 00 00 00 r2=atomic_fetch_add\(\(u64\*\)\(r1\+0x1eef\),r2\) + 58: c3 21 ef 1e 01 00 00 00 w2=atomic_fetch_add\(\(u32\*\)\(r1\+0x1eef\),w2\) + 60: db 21 ef 1e 51 00 00 00 r2=atomic_fetch_and\(\(u64\*\)\(r1\+0x1eef\),r2\) + 68: c3 21 ef 1e 51 00 00 00 w2=atomic_fetch_and\(\(u32\*\)\(r1\+0x1eef\),w2\) + 70: db 21 ef 1e 41 00 00 00 r2=atomic_fetch_or\(\(u64\*\)\(r1\+0x1eef\),r2\) + 78: c3 21 ef 1e 41 00 00 00 w2=atomic_fetch_or\(\(u32\*\)\(r1\+0x1eef\),w2\) + 80: db 21 ef 1e a1 00 00 00 r2=atomic_fetch_xor\(\(u64\*\)\(r1\+0x1eef\),r2\) + 88: c3 21 ef 1e a1 00 00 00 w2=atomic_fetch_xor\(\(u32\*\)\(r1\+0x1eef\),w2\) + 90: db 21 04 00 f1 00 00 00 r0=cmpxchg_64\(r1\+0x4,r0,r2\) + 98: c3 32 04 00 f1 00 00 00 w0=cmpxchg32_32\(r2\+0x4,w0,w3\) + a0: db 21 08 00 e1 00 00 00 r2=xchg_64\(r1\+0x8,r2\) + a8: c3 31 08 00 e1 00 00 00 w3=xchg32_32\(r1\+0x8,w3\) diff --git a/gas/testsuite/gas/bpf/atomic-pseudoc.s b/gas/testsuite/gas/bpf/atomic-pseudoc.s index 1a4f218ccb7..6994fd10367 100644 --- a/gas/testsuite/gas/bpf/atomic-pseudoc.s +++ b/gas/testsuite/gas/bpf/atomic-pseudoc.s @@ -1,4 +1,24 @@ - # Test for eBPF ADDW and ADDDW pseudo-C instructions + # Test for eBPF atomic pseudo-C instructions. .text - lock *(u64 *)(r1 + 7919) += r2 - lock *(u32 *)(r1 + 7919) += r2 + lock *(u64 *)(r1 + 0x1eef) += r2 + lock *(u32 *)(r1 + 0x1eef) += r2 + lock *(u64*)(r1+0x1eef)+=r2 + lock *(u32*)(r1+0x1eef)+=r2 + lock *(u64*)(r1+0x1eef)&=r2 + lock *(u32*)(r1+0x1eef)&=r2 + lock *(u64*)(r1+0x1eef)|=r2 + lock *(u32*)(r1+0x1eef)|=r2 + lock *(u64*)(r1+0x1eef)^=r2 + lock *(u32*)(r1+0x1eef)^=r2 + r2 = atomic_fetch_add((u64*)(r1+0x1eef),r2) + w2 = atomic_fetch_add((u32*)(r1+0x1eef),w2) + r2 = atomic_fetch_and((u64*)(r1+0x1eef),r2) + w2 = atomic_fetch_and((u32*)(r1+0x1eef),w2) + r2 = atomic_fetch_or((u64*)(r1+0x1eef),r2) + w2 = atomic_fetch_or((u32*)(r1+0x1eef),w2) + r2 = atomic_fetch_xor((u64*)(r1+0x1eef),r2) + w2 = atomic_fetch_xor((u32*)(r1+0x1eef),w2) + r0 = cmpxchg_64(r1+0x4,r0,r2) + w0 = cmpxchg32_32(r2+0x4,w0,w3) + r2 = xchg_64(r1+0x8,r2) + w3 = xchg32_32(r1+0x8,w3) diff --git a/gas/testsuite/gas/bpf/atomic.d b/gas/testsuite/gas/bpf/atomic.d index c48ba9aabda..121ab35a92b 100644 --- a/gas/testsuite/gas/bpf/atomic.d +++ b/gas/testsuite/gas/bpf/atomic.d @@ -1,5 +1,30 @@ -#as: --EL -#objdump: -dr +#as: -EL -mdialect=normal +#objdump: -dr -M hex #source: atomic.s -#dump: atomic.dump #name: eBPF atomic instructions, normal syntax + +.*: +file format .*bpf.* + +Disassembly of section .text: + +0+ <.text>: + 0: db 21 ef 1e 00 00 00 00 aadd \[%r1\+0x1eef\],%r2 + 8: c3 21 ef 1e 00 00 00 00 aadd32 \[%r1\+0x1eef\],%r2 + 10: db 21 ef 1e 50 00 00 00 aand \[%r1\+0x1eef\],%r2 + 18: c3 21 ef 1e 50 00 00 00 aand32 \[%r1\+0x1eef\],%r2 + 20: db 21 ef 1e 40 00 00 00 aor \[%r1\+0x1eef\],%r2 + 28: c3 21 ef 1e 40 00 00 00 aor32 \[%r1\+0x1eef\],%r2 + 30: db 21 ef 1e a0 00 00 00 axor \[%r1\+0x1eef\],%r2 + 38: c3 21 ef 1e a0 00 00 00 axor32 \[%r1\+0x1eef\],%r2 + 40: db 21 ef 1e 01 00 00 00 afadd \[%r1\+0x1eef\],%r2 + 48: c3 21 ef 1e 01 00 00 00 afadd32 \[%r1\+0x1eef\],%r2 + 50: db 21 ef 1e 51 00 00 00 afand \[%r1\+0x1eef\],%r2 + 58: c3 21 ef 1e 51 00 00 00 afand32 \[%r1\+0x1eef\],%r2 + 60: db 21 ef 1e 41 00 00 00 afor \[%r1\+0x1eef\],%r2 + 68: c3 21 ef 1e 41 00 00 00 afor32 \[%r1\+0x1eef\],%r2 + 70: db 21 ef 1e a1 00 00 00 afxor \[%r1\+0x1eef\],%r2 + 78: c3 21 ef 1e a1 00 00 00 afxor32 \[%r1\+0x1eef\],%r2 + 80: db 21 04 00 f1 00 00 00 acmp \[%r1\+0x4\],%r2 + 88: c3 32 04 00 f1 00 00 00 acmp32 \[%r2\+0x4\],%r3 + 90: db 21 08 00 e1 00 00 00 axchg \[%r1\+0x8\],%r2 + 98: c3 31 08 00 e1 00 00 00 axchg32 \[%r1\+0x8\],%r3 diff --git a/gas/testsuite/gas/bpf/atomic.s b/gas/testsuite/gas/bpf/atomic.s index 0119b24c8bb..39ad5ce42f0 100644 --- a/gas/testsuite/gas/bpf/atomic.s +++ b/gas/testsuite/gas/bpf/atomic.s @@ -1,5 +1,24 @@ - # Test for eBPF ADDW and ADDDW instructions + # Test for eBPF atomic instructions .text - xadddw [%r1+0x1eef], %r2 - xaddw [%r1+0x1eef], %r2 - + aadd [%r1+0x1eef], %r2 + aadd32 [%r1+0x1eef], %r2 + aand [%r1+0x1eef], %r2 + aand32 [%r1+0x1eef], %r2 + aor [%r1+0x1eef], %r2 + aor32 [%r1+0x1eef], %r2 + axor [%r1+0x1eef], %r2 + axor32 [%r1+0x1eef], %r2 + + afadd [%r1+0x1eef], %r2 + afadd32 [%r1+0x1eef], %r2 + afand [%r1+0x1eef], %r2 + afand32 [%r1+0x1eef], %r2 + afor [%r1+0x1eef], %r2 + afor32 [%r1+0x1eef], %r2 + afxor [%r1+0x1eef], %r2 + afxor32 [%r1+0x1eef], %r2 + + acmp [%r1+4], %r2 + acmp32 [%r2+4], %r3 + axchg [%r1+8], %r2 + axchg32 [%r1+8], %r3 diff --git a/gas/testsuite/gas/bpf/bpf.exp b/gas/testsuite/gas/bpf/bpf.exp index 5d91805f478..80f5a1dbc2d 100644 --- a/gas/testsuite/gas/bpf/bpf.exp +++ b/gas/testsuite/gas/bpf/bpf.exp @@ -18,6 +18,10 @@ # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. if {[istarget bpf*-*-*]} { + # Little-endian BPF tests + run_dump_test call + run_dump_test exit + run_dump_test data run_dump_test lddw run_dump_test lddw-pseudoc run_dump_test alu @@ -30,13 +34,19 @@ if {[istarget bpf*-*-*]} { run_dump_test jump-pseudoc run_dump_test jump32 run_dump_test jump32-pseudoc - run_dump_test call - run_dump_test exit + run_dump_test atomic-v1 run_dump_test atomic run_dump_test atomic-pseudoc - run_dump_test data - run_dump_test pseudoc-normal + run_dump_test indcall-1 + run_dump_test indcall-1-pseudoc + run_dump_test jump-relax-ja + run_dump_test jump-relax-jump + + # Big-endian BPF tests + run_dump_test call-be + run_dump_test exit-be + run_dump_test data-be run_dump_test lddw-be run_dump_test lddw-be-pseudoc run_dump_test alu-be @@ -44,17 +54,22 @@ if {[istarget bpf*-*-*]} { run_dump_test alu32-be run_dump_test alu32-be-pseudoc run_dump_test mem-be + run_dump_test mem-be-pseudoc run_dump_test jump-be - run_dump_test call-be - run_dump_test exit-be + run_dump_test jump-be-pseudoc + run_dump_test jump32-be + run_dump_test jump32-be-pseudoc + run_dump_test atomic-v1-be run_dump_test atomic-be - run_dump_test data-be - run_dump_test pseudoc-normal-be + run_dump_test atomic-be-pseudoc - run_dump_test indcall-1 - run_dump_test indcall-1-pseudoc - run_list_test indcall-bad-1 + run_dump_test jump-relax-ja-be + run_dump_test jump-relax-jump-be - run_dump_test alu-xbpf - run_dump_test alu32-xbpf + # Overflow tests + run_dump_test offset16-overflow + run_dump_test disp16-overflow + run_dump_test disp16-overflow-relax + run_dump_test disp32-overflow + run_dump_test imm32-overflow } diff --git a/gas/testsuite/gas/bpf/call-be.d b/gas/testsuite/gas/bpf/call-be.d index bd3b50f36b2..55e4e700ab4 100644 --- a/gas/testsuite/gas/bpf/call-be.d +++ b/gas/testsuite/gas/bpf/call-be.d @@ -1,6 +1,6 @@ -#as: --EB +#as: -EB -mdialect=normal #source: call.s -#objdump: -dr +#objdump: -dr -M dec #name: eBPF CALL instruction, big endian .*: +file format .*bpf.* diff --git a/gas/testsuite/gas/bpf/call.d b/gas/testsuite/gas/bpf/call.d index daefbd08022..a85cb7f58ab 100644 --- a/gas/testsuite/gas/bpf/call.d +++ b/gas/testsuite/gas/bpf/call.d @@ -1,5 +1,5 @@ -#as: --EL -#objdump: -dr +#as: -EL -mdialect=normal +#objdump: -dr -M dec #name: eBPF CALL instruction .*: +file format .*bpf.* diff --git a/gas/testsuite/gas/bpf/data-be.d b/gas/testsuite/gas/bpf/data-be.d index 010f08f2508..3a8b68bd1d2 100644 --- a/gas/testsuite/gas/bpf/data-be.d +++ b/gas/testsuite/gas/bpf/data-be.d @@ -1,4 +1,4 @@ -#as: --EB +#as: -EB -mdialect=normal #source: data.s #objdump: -s -j .data #name: eBPF data directives, big endian diff --git a/gas/testsuite/gas/bpf/data.d b/gas/testsuite/gas/bpf/data.d index 6824e8b8b5a..9fa108b6542 100644 --- a/gas/testsuite/gas/bpf/data.d +++ b/gas/testsuite/gas/bpf/data.d @@ -1,4 +1,4 @@ -#as: --EL +#as: -EL -mdialect=normal #objdump: -s -j .data #name: eBPF data directives diff --git a/gas/testsuite/gas/bpf/exit-be.d b/gas/testsuite/gas/bpf/exit-be.d index d3b88c7373a..b83af3eacab 100644 --- a/gas/testsuite/gas/bpf/exit-be.d +++ b/gas/testsuite/gas/bpf/exit-be.d @@ -1,6 +1,6 @@ -#as: --EB +#as: -EB -mdialect=normal #source: exit.s -#objdump: -dr +#objdump: -dr -M hex #name: eBPF EXIT instruction, big endian .*: +file format .*bpf.* diff --git a/gas/testsuite/gas/bpf/exit.d b/gas/testsuite/gas/bpf/exit.d index 87bc91b2d2e..68ef9020185 100644 --- a/gas/testsuite/gas/bpf/exit.d +++ b/gas/testsuite/gas/bpf/exit.d @@ -1,5 +1,5 @@ -#as: --EL -#objdump: -dr +#as: -EL -mdialect=normal +#objdump: -dr -M hex #name: eBPF EXIT instruction .*: +file format .*bpf.* diff --git a/gas/testsuite/gas/bpf/indcall-1-pseudoc.d b/gas/testsuite/gas/bpf/indcall-1-pseudoc.d index b04e656bd82..7a95bad8e65 100644 --- a/gas/testsuite/gas/bpf/indcall-1-pseudoc.d +++ b/gas/testsuite/gas/bpf/indcall-1-pseudoc.d @@ -1,5 +1,23 @@ -#as: -mxbpf --EL -#objdump: -mxbpf -dr +#as: -EL -mdialect=pseudoc -misa-spec=xbpf +#objdump: -M xbpf,pseudoc,dec -dr #source: indcall-1-pseudoc.s -#dump: indcall-1.dump #name: BPF indirect call 1, pseudoc syntax + +.*: +file format .*bpf.* + +Disassembly of section \.text: + +0000000000000000
: + 0: b7 00 00 00 01 00 00 00 r0=1 + 8: b7 01 00 00 01 00 00 00 r1=1 + 10: b7 02 00 00 02 00 00 00 r2=2 + 18: 18 06 00 00 38 00 00 00 r6=56 ll + 20: 00 00 00 00 00 00 00 00[ ]* + 18: R_BPF_64_64 .text + 28: 8d 06 00 00 00 00 00 00 callx r6 + 30: 95 00 00 00 00 00 00 00 exit + +0000000000000038 : + 38: b7 00 00 00 00 00 00 00 r0=0 + 40: 95 00 00 00 00 00 00 00 exit +#pass diff --git a/gas/testsuite/gas/bpf/indcall-1.d b/gas/testsuite/gas/bpf/indcall-1.d index e04b98b175b..51103bba2a1 100644 --- a/gas/testsuite/gas/bpf/indcall-1.d +++ b/gas/testsuite/gas/bpf/indcall-1.d @@ -1,5 +1,23 @@ -#as: -mxbpf --EL -#objdump: -mxbpf -dr +#as: -EL -misa-spec=xbpf +#objdump: -dr -M xbpf,dec #source: indcall-1.s -#dump: indcall-1.dump #name: BPF indirect call 1, normal syntax + +.*: +file format .*bpf.* + +Disassembly of section \.text: + +0000000000000000
: + 0: b7 00 00 00 01 00 00 00 mov %r0,1 + 8: b7 01 00 00 01 00 00 00 mov %r1,1 + 10: b7 02 00 00 02 00 00 00 mov %r2,2 + 18: 18 06 00 00 38 00 00 00 lddw %r6,56 + 20: 00 00 00 00 00 00 00 00[ ]* + 18: R_BPF_64_64 .text + 28: 8d 06 00 00 00 00 00 00 call %r6 + 30: 95 00 00 00 00 00 00 00 exit + +0000000000000038 : + 38: b7 00 00 00 00 00 00 00 mov %r0,0 + 40: 95 00 00 00 00 00 00 00 exit +#pass diff --git a/gas/testsuite/gas/bpf/jump-be.d b/gas/testsuite/gas/bpf/jump-be.d index 7e235e69551..fffe1e952d7 100644 --- a/gas/testsuite/gas/bpf/jump-be.d +++ b/gas/testsuite/gas/bpf/jump-be.d @@ -1,7 +1,6 @@ -#as: --EB +#as: -EB -mdialect=normal #source: jump.s -#source: jump-pseudoc.s -#objdump: -dr +#objdump: -dr -M dec #name: eBPF JUMP instructions, big endian .*: +file format .*bpf.* @@ -31,3 +30,5 @@ Disassembly of section .text: 98: cd 34 00 00 00 00 00 00 jslt %r3,%r4,0 a0: d5 30 00 01 00 00 00 03 jsle %r3,3,1 a8: dd 34 00 00 00 00 00 00 jsle %r3,%r4,0 + b0: 06 00 00 00 00 00 00 01 jal 1 + b8: 06 00 00 00 00 00 00 00 jal 0 diff --git a/gas/testsuite/gas/bpf/jump-pseudoc.d b/gas/testsuite/gas/bpf/jump-pseudoc.d index bc172665af8..9b68108d9ee 100644 --- a/gas/testsuite/gas/bpf/jump-pseudoc.d +++ b/gas/testsuite/gas/bpf/jump-pseudoc.d @@ -1,5 +1,34 @@ -#as: --EL -#objdump: -dr +#as: -EL -mdialect=pseudoc +#objdump: -dr -M dec,pseudoc #source: jump-pseudoc.s -#dump: jump.dump #name: eBPF JUMP instructions, pseudoc syntax + +.*: +file format .*bpf.* + +Disassembly of section .text: + +0+ <.text>: + 0: 05 00 03 00 00 00 00 00 goto 3 + 8: 0f 11 00 00 00 00 00 00 r1\+=r1 + 10: 15 03 01 00 03 00 00 00 if r3==3 goto 1 + 18: 1d 43 00 00 00 00 00 00 if r3==r4 goto 0 + 20: 35 03 fd ff 03 00 00 00 if r3>=3 goto -3 + 28: 3d 43 fc ff 00 00 00 00 if r3>=r4 goto -4 + 30: a5 03 01 00 03 00 00 00 if r3<3 goto 1 + 38: ad 43 00 00 00 00 00 00 if r33 goto 1 + 78: 6d 43 00 00 00 00 00 00 if r3s>r4 goto 0 + 80: 75 03 01 00 03 00 00 00 if r3s>=3 goto 1 + 88: 7d 43 00 00 00 00 00 00 if r3s>=r4 goto 0 + 90: c5 03 01 00 03 00 00 00 if r3s<3 goto 1 + 98: cd 43 00 00 00 00 00 00 if r3s: + 0: 05 00 03 00 00 00 00 00 ja 3 + 8: 0f 11 00 00 00 00 00 00 add %r1,%r1 + 10: 15 03 01 00 03 00 00 00 jeq %r3,3,1 + 18: 1d 43 00 00 00 00 00 00 jeq %r3,%r4,0 + 20: 35 03 fd ff 03 00 00 00 jge %r3,3,-3 + 28: 3d 43 fc ff 00 00 00 00 jge %r3,%r4,-4 + 30: a5 03 01 00 03 00 00 00 jlt %r3,3,1 + 38: ad 43 00 00 00 00 00 00 jlt %r3,%r4,0 + 40: b5 03 01 00 03 00 00 00 jle %r3,3,1 + 48: bd 43 00 00 00 00 00 00 jle %r3,%r4,0 + 50: 45 03 01 00 03 00 00 00 jset %r3,3,1 + 58: 4d 43 00 00 00 00 00 00 jset %r3,%r4,0 + 60: 55 03 01 00 03 00 00 00 jne %r3,3,1 + 68: 5d 43 00 00 00 00 00 00 jne %r3,%r4,0 + 70: 65 03 01 00 03 00 00 00 jsgt %r3,3,1 + 78: 6d 43 00 00 00 00 00 00 jsgt %r3,%r4,0 + 80: 75 03 01 00 03 00 00 00 jsge %r3,3,1 + 88: 7d 43 00 00 00 00 00 00 jsge %r3,%r4,0 + 90: c5 03 01 00 03 00 00 00 jslt %r3,3,1 + 98: cd 43 00 00 00 00 00 00 jslt %r3,%r4,0 + a0: d5 03 01 00 03 00 00 00 jsle %r3,3,1 + a8: dd 43 00 00 00 00 00 00 jsle %r3,%r4,0 + b0: 06 00 00 00 01 00 00 00 jal 1 + b8: 06 00 00 00 00 00 00 00 jal 0 \ No newline at end of file diff --git a/gas/testsuite/gas/bpf/jump.s b/gas/testsuite/gas/bpf/jump.s index aae4295e160..c3d36bddeec 100644 --- a/gas/testsuite/gas/bpf/jump.s +++ b/gas/testsuite/gas/bpf/jump.s @@ -22,4 +22,6 @@ jslt %r3,%r4,1f 1: jsle %r3,3,1f jsle %r3,%r4,1f -1: +1: jal 1f + jal 1f +1: diff --git a/gas/testsuite/gas/bpf/jump32-pseudoc.d b/gas/testsuite/gas/bpf/jump32-pseudoc.d index 55fb97b82db..27367d36594 100644 --- a/gas/testsuite/gas/bpf/jump32-pseudoc.d +++ b/gas/testsuite/gas/bpf/jump32-pseudoc.d @@ -1,5 +1,32 @@ -#as: --EL -#objdump: -dr +#as: -EL -mdialect=pseudoc +#objdump: -dr -M dec,pseudoc #source: jump32-pseudoc.s -#dump: jump32.dump #name: eBPF JUMP32 instructions, pseudoc syntax + +.*: +file format .*bpf.* + +Disassembly of section .text: + +0+ <.text>: + 0: 05 00 03 00 00 00 00 00 goto 3 + 8: 0f 11 00 00 00 00 00 00 r1\+=r1 + 10: 16 03 01 00 03 00 00 00 if w3==3 goto 1 + 18: 1e 43 00 00 00 00 00 00 if w3==w4 goto 0 + 20: 36 03 fd ff 03 00 00 00 if w3>=3 goto -3 + 28: 3e 43 fc ff 00 00 00 00 if w3>=w4 goto -4 + 30: a6 03 01 00 03 00 00 00 if w3<3 goto 1 + 38: ae 43 00 00 00 00 00 00 if w33 goto 1 + 78: 6e 43 00 00 00 00 00 00 if w3s>w4 goto 0 + 80: 76 03 01 00 03 00 00 00 if w3s>=3 goto 1 + 88: 7e 43 00 00 00 00 00 00 if w3s>=w4 goto 0 + 90: c6 03 01 00 03 00 00 00 if w3s<3 goto 1 + 98: ce 43 00 00 00 00 00 00 if w3s: + 0: 05 00 03 00 00 00 00 00 ja 3 + 8: 0f 11 00 00 00 00 00 00 add %r1,%r1 + 10: 16 03 01 00 03 00 00 00 jeq32 %r3,3,1 + 18: 1e 43 00 00 00 00 00 00 jeq32 %r3,%r4,0 + 20: 36 03 fd ff 03 00 00 00 jge32 %r3,3,-3 + 28: 3e 43 fc ff 00 00 00 00 jge32 %r3,%r4,-4 + 30: a6 03 01 00 03 00 00 00 jlt32 %r3,3,1 + 38: ae 43 00 00 00 00 00 00 jlt32 %r3,%r4,0 + 40: b6 03 01 00 03 00 00 00 jle32 %r3,3,1 + 48: be 43 00 00 00 00 00 00 jle32 %r3,%r4,0 + 50: 46 03 01 00 03 00 00 00 jset32 %r3,3,1 + 58: 4e 43 00 00 00 00 00 00 jset32 %r3,%r4,0 + 60: 56 03 01 00 03 00 00 00 jne32 %r3,3,1 + 68: 5e 43 00 00 00 00 00 00 jne32 %r3,%r4,0 + 70: 66 03 01 00 03 00 00 00 jsgt32 %r3,3,1 + 78: 6e 43 00 00 00 00 00 00 jsgt32 %r3,%r4,0 + 80: 76 03 01 00 03 00 00 00 jsge32 %r3,3,1 + 88: 7e 43 00 00 00 00 00 00 jsge32 %r3,%r4,0 + 90: c6 03 01 00 03 00 00 00 jslt32 %r3,3,1 + 98: ce 43 00 00 00 00 00 00 jslt32 %r3,%r4,0 + a0: d6 03 01 00 03 00 00 00 jsle32 %r3,3,1 + a8: de 43 00 00 00 00 00 00 jsle32 %r3,%r4,0 diff --git a/gas/testsuite/gas/bpf/lddw-be-pseudoc.d b/gas/testsuite/gas/bpf/lddw-be-pseudoc.d index e7b477ac4ca..940780b81a2 100644 --- a/gas/testsuite/gas/bpf/lddw-be-pseudoc.d +++ b/gas/testsuite/gas/bpf/lddw-be-pseudoc.d @@ -1,5 +1,18 @@ -#as: --EB +#as: -EB -mdialect=pseudoc #source: lddw-pseudoc.s -#objdump: -dr -#dump: lddw-be.dump +#objdump: -dr -M hex,pseudoc #name: eBPF LDDW, big-endian, pseudoc syntax + +.*: +file format .*bpf.* + +Disassembly of section .text: + +0+ <.text>: + 0: 18 30 00 00 00 00 00 01 r3=0x1 ll + 8: 00 00 00 00 00 00 00 00 + 10: 18 40 00 00 de ad be ef r4=0xdeadbeef ll + 18: 00 00 00 00 00 00 00 00 + 20: 18 50 00 00 55 66 77 88 r5=0x1122334455667788 ll + 28: 00 00 00 00 11 22 33 44 + 30: 18 60 00 00 ff ff ff fe r6=0xfffffffffffffffe ll + 38: 00 00 00 00 ff ff ff ff diff --git a/gas/testsuite/gas/bpf/lddw-be.d b/gas/testsuite/gas/bpf/lddw-be.d index cf1bfba9b3d..c1043787dcd 100644 --- a/gas/testsuite/gas/bpf/lddw-be.d +++ b/gas/testsuite/gas/bpf/lddw-be.d @@ -1,5 +1,18 @@ -#as: --EB +#as: -EB -mdialect=normal #source: lddw.s -#objdump: -dr -#dump: lddw-be.dump +#objdump: -dr -M hex #name: eBPF LDDW, big-endian, normal syntax + +.*: +file format .*bpf.* + +Disassembly of section .text: + +0+ <.text>: + 0: 18 30 00 00 00 00 00 01 lddw %r3,0x1 + 8: 00 00 00 00 00 00 00 00 + 10: 18 40 00 00 de ad be ef lddw %r4,0xdeadbeef + 18: 00 00 00 00 00 00 00 00 + 20: 18 50 00 00 55 66 77 88 lddw %r5,0x1122334455667788 + 28: 00 00 00 00 11 22 33 44 + 30: 18 60 00 00 ff ff ff fe lddw %r6,0xfffffffffffffffe + 38: 00 00 00 00 ff ff ff ff diff --git a/gas/testsuite/gas/bpf/lddw-pseudoc.d b/gas/testsuite/gas/bpf/lddw-pseudoc.d index 838e012be0b..3a5ce86ff95 100644 --- a/gas/testsuite/gas/bpf/lddw-pseudoc.d +++ b/gas/testsuite/gas/bpf/lddw-pseudoc.d @@ -1,5 +1,18 @@ -#as: --EL -#objdump: -dr +#as: -EL -mdialect=pseudoc +#objdump: -dr -M hex,pseudoc #source: lddw-pseudoc.s -#dump: lddw.dump #name: eBPF LDDW, pseudoc syntax + +.*: +file format .*bpf.* + +Disassembly of section .text: + +0+ <.text>: + 0: 18 03 00 00 01 00 00 00 r3=0x1 ll + 8: 00 00 00 00 00 00 00 00 + 10: 18 04 00 00 ef be ad de r4=0xdeadbeef ll + 18: 00 00 00 00 00 00 00 00 + 20: 18 05 00 00 88 77 66 55 r5=0x1122334455667788 ll + 28: 00 00 00 00 44 33 22 11 + 30: 18 06 00 00 fe ff ff ff r6=0xfffffffffffffffe ll + 38: 00 00 00 00 ff ff ff ff diff --git a/gas/testsuite/gas/bpf/lddw.d b/gas/testsuite/gas/bpf/lddw.d index 82ff1b47bc4..c7a08098fb8 100644 --- a/gas/testsuite/gas/bpf/lddw.d +++ b/gas/testsuite/gas/bpf/lddw.d @@ -1,5 +1,18 @@ -#as: --EL -#objdump: -dr +#as: -EL -mdialect=normal +#objdump: -dr -M hex #source: lddw.s -#dump: lddw.dump #name: eBPF LDDW, normal syntax + +.*: +file format .*bpf.* + +Disassembly of section .text: + +0+ <.text>: + 0: 18 03 00 00 01 00 00 00 lddw %r3,0x1 + 8: 00 00 00 00 00 00 00 00 + 10: 18 04 00 00 ef be ad de lddw %r4,0xdeadbeef + 18: 00 00 00 00 00 00 00 00 + 20: 18 05 00 00 88 77 66 55 lddw %r5,0x1122334455667788 + 28: 00 00 00 00 44 33 22 11 + 30: 18 06 00 00 fe ff ff ff lddw %r6,0xfffffffffffffffe + 38: 00 00 00 00 ff ff ff ff diff --git a/gas/testsuite/gas/bpf/mem-be.d b/gas/testsuite/gas/bpf/mem-be.d index 148c55a3491..cd7b35c60a3 100644 --- a/gas/testsuite/gas/bpf/mem-be.d +++ b/gas/testsuite/gas/bpf/mem-be.d @@ -1,7 +1,6 @@ -#as: --EB +#as: -EB -mdialect=normal #source: mem.s -#source: mem-pseudoc.s -#objdump: -dr +#objdump: -dr -M hex #name: eBPF MEM instructions, modulus lddw, big endian .*: +file format .*bpf.* @@ -20,12 +19,18 @@ Disassembly of section .text: 40: 61 21 7e ef 00 00 00 00 ldxw %r2,\[%r1\+0x7eef\] 48: 69 21 7e ef 00 00 00 00 ldxh %r2,\[%r1\+0x7eef\] 50: 71 21 7e ef 00 00 00 00 ldxb %r2,\[%r1\+0x7eef\] - 58: 79 21 ff fe 00 00 00 00 ldxdw %r2,\[%r1\+-2\] + 58: 79 21 ff fe 00 00 00 00 ldxdw %r2,\[%r1\+0xfffe\] 60: 63 12 7e ef 00 00 00 00 stxw \[%r1\+0x7eef\],%r2 68: 6b 12 7e ef 00 00 00 00 stxh \[%r1\+0x7eef\],%r2 70: 73 12 7e ef 00 00 00 00 stxb \[%r1\+0x7eef\],%r2 - 78: 7b 12 ff fe 00 00 00 00 stxdw \[%r1\+-2\],%r2 + 78: 7b 12 ff fe 00 00 00 00 stxdw \[%r1\+0xfffe\],%r2 80: 72 10 7e ef 11 22 33 44 stb \[%r1\+0x7eef\],0x11223344 88: 6a 10 7e ef 11 22 33 44 sth \[%r1\+0x7eef\],0x11223344 90: 62 10 7e ef 11 22 33 44 stw \[%r1\+0x7eef\],0x11223344 - 98: 7a 10 ff fe 11 22 33 44 stdw \[%r1\+-2\],0x11223344 + 98: 7a 10 ff fe 11 22 33 44 stdw \[%r1\+0xfffe\],0x11223344 + a0: 81 21 7e ef 00 00 00 00 ldxsw %r2,\[%r1\+0x7eef\] + a8: 89 21 7e ef 00 00 00 00 ldxsh %r2,\[%r1\+0x7eef\] + b0: 91 21 7e ef 00 00 00 00 ldxsb %r2,\[%r1\+0x7eef\] + b8: 99 21 7e ef 00 00 00 00 ldxsdw %r2,\[%r1\+0x7eef\] + c0: 79 21 00 00 00 00 00 00 ldxdw %r2,\[%r1\+0x0\] + c8: 40 03 00 00 00 00 00 00 ldindw %r3,0x0 diff --git a/gas/testsuite/gas/bpf/mem-pseudoc.d b/gas/testsuite/gas/bpf/mem-pseudoc.d index ef5b8957d64..7c37c16b6b8 100644 --- a/gas/testsuite/gas/bpf/mem-pseudoc.d +++ b/gas/testsuite/gas/bpf/mem-pseudoc.d @@ -1,5 +1,36 @@ -#as: --EL -#objdump: -dr +#as: -EL -mdialect=pseudoc +#objdump: -dr -M hex,pseudoc #source: mem-pseudoc.s -#dump: mem.dump #name: eBPF MEM instructions, modulus lddw, pseudo-c syntax + +.*: +file format .*bpf.* + +Disassembly of section .text: + +0+ <.text>: + 0: 20 00 00 00 ef be 00 00 r0=\*\(u32\*\)skb\[0xbeef\] + 8: 28 00 00 00 ef be 00 00 r0=\*\(u16\*\)skb\[0xbeef\] + 10: 30 00 00 00 ef be 00 00 r0=\*\(u8\*\)skb\[0xbeef\] + 18: 38 00 00 00 ef be 00 00 r0=\*\(u64\*\)skb\[0xbeef\] + 20: 40 30 00 00 ef be 00 00 r0=\*\(u32\*\)skb\[r3\+0xbeef\] + 28: 48 50 00 00 ef be 00 00 r0=\*\(u16\*\)skb\[r5\+0xbeef\] + 30: 50 70 00 00 ef be 00 00 r0=\*\(u8\*\)skb\[r7\+0xbeef\] + 38: 58 90 00 00 ef be 00 00 r0=\*\(u64\*\)skb\[r9\+0xbeef\] + 40: 61 12 ef 7e 00 00 00 00 r2=\*\(u32\*\)\(r1\+0x7eef\) + 48: 69 12 ef 7e 00 00 00 00 r2=\*\(u16\*\)\(r1\+0x7eef\) + 50: 71 12 ef 7e 00 00 00 00 r2=\*\(u8\*\)\(r1\+0x7eef\) + 58: 79 12 fe ff 00 00 00 00 r2=\*\(u64\*\)\(r1\+0xfffe\) + 60: 63 21 ef 7e 00 00 00 00 \*\(u32\*\)\(r1\+0x7eef\)=r2 + 68: 6b 21 ef 7e 00 00 00 00 \*\(u16\*\)\(r1\+0x7eef\)=r2 + 70: 73 21 ef 7e 00 00 00 00 \*\(u8\*\)\(r1\+0x7eef\)=r2 + 78: 7b 21 fe ff 00 00 00 00 \*\(u64\*\)\(r1\+0xfffe\)=r2 + 80: 72 01 ef 7e 44 33 22 11 \*\(u8\*\)\(r1\+0x7eef\)=0x11223344 + 88: 6a 01 ef 7e 44 33 22 11 \*\(u16\*\)\(r1\+0x7eef\)=0x11223344 + 90: 62 01 ef 7e 44 33 22 11 \*\(u32\*\)\(r1\+0x7eef\)=0x11223344 + 98: 7a 01 fe ff 44 33 22 11 \*\(u64\*\)\(r1\+0xfffe\)=0x11223344 + a0: 81 12 ef 7e 00 00 00 00 r2=\*\(s32\*\)\(r1\+0x7eef\) + a8: 89 12 ef 7e 00 00 00 00 r2=\*\(s16\*\)\(r1\+0x7eef\) + b0: 91 12 ef 7e 00 00 00 00 r2=\*\(s8\*\)\(r1\+0x7eef\) + b8: 99 12 ef 7e 00 00 00 00 r2=\*\(s64\*\)\(r1\+0x7eef\) + c0: 58 50 00 00 00 00 00 00 r0=\*\(u64\*\)skb\[r5\+0x0\] + c8: 61 12 00 00 00 00 00 00 r2=\*\(u32\*\)\(r1\+0x0\) diff --git a/gas/testsuite/gas/bpf/mem-pseudoc.s b/gas/testsuite/gas/bpf/mem-pseudoc.s index 06c2cfcdde9..823083d498a 100644 --- a/gas/testsuite/gas/bpf/mem-pseudoc.s +++ b/gas/testsuite/gas/bpf/mem-pseudoc.s @@ -17,7 +17,13 @@ *(u16 *)(r1 + 32495) = r2 *(u8 *)(r1 + 32495) = r2 *(u64 *)(r1 - 2) = r2 - stb [%r1+0x7eef], 0x11223344 - sth [%r1+0x7eef], 0x11223344 - stw [%r1+0x7eef], 0x11223344 - stdw [%r1+-2], 0x11223344 + *(u8 *)(r1 + 0x7eef) = 0x11223344 + *(u16 *)(r1 + 0x7eef) = 0x11223344 + *(u32 *)(r1 + 0x7eef) = 0x11223344 + *(u64 *)(r1 + -2) = 0x11223344 + r2 = *(s32*)(r1+0x7eef) + r2 = *(s16*)(r1+0x7eef) + r2 = *(s8*)(r1+0x7eef) + r2 = *(s64*)(r1+0x7eef) + r0 = *(u64 *)skb[r5 + 0] + r2 = *(u32 *)(r1 + 0) diff --git a/gas/testsuite/gas/bpf/mem.d b/gas/testsuite/gas/bpf/mem.d index b01bdaaf241..9a1e7095df0 100644 --- a/gas/testsuite/gas/bpf/mem.d +++ b/gas/testsuite/gas/bpf/mem.d @@ -1,5 +1,36 @@ -#as: --EL -#objdump: -dr +#as: -EL -mdialect=normal +#objdump: -dr -M hex #source: mem.s -#dump: mem.dump #name: eBPF MEM instructions, modulus lddw, normal syntax + +.*: +file format .*bpf.* + +Disassembly of section .text: + +0+ <.text>: + 0: 20 00 00 00 ef be 00 00 ldabsw 0xbeef + 8: 28 00 00 00 ef be 00 00 ldabsh 0xbeef + 10: 30 00 00 00 ef be 00 00 ldabsb 0xbeef + 18: 38 00 00 00 ef be 00 00 ldabsdw 0xbeef + 20: 40 30 00 00 ef be 00 00 ldindw %r3,0xbeef + 28: 48 50 00 00 ef be 00 00 ldindh %r5,0xbeef + 30: 50 70 00 00 ef be 00 00 ldindb %r7,0xbeef + 38: 58 90 00 00 ef be 00 00 ldinddw %r9,0xbeef + 40: 61 12 ef 7e 00 00 00 00 ldxw %r2,\[%r1\+0x7eef\] + 48: 69 12 ef 7e 00 00 00 00 ldxh %r2,\[%r1\+0x7eef\] + 50: 71 12 ef 7e 00 00 00 00 ldxb %r2,\[%r1\+0x7eef\] + 58: 79 12 fe ff 00 00 00 00 ldxdw %r2,\[%r1\+0xfffe\] + 60: 63 21 ef 7e 00 00 00 00 stxw \[%r1\+0x7eef\],%r2 + 68: 6b 21 ef 7e 00 00 00 00 stxh \[%r1\+0x7eef\],%r2 + 70: 73 21 ef 7e 00 00 00 00 stxb \[%r1\+0x7eef\],%r2 + 78: 7b 21 fe ff 00 00 00 00 stxdw \[%r1\+0xfffe\],%r2 + 80: 72 01 ef 7e 44 33 22 11 stb \[%r1\+0x7eef\],0x11223344 + 88: 6a 01 ef 7e 44 33 22 11 sth \[%r1\+0x7eef\],0x11223344 + 90: 62 01 ef 7e 44 33 22 11 stw \[%r1\+0x7eef\],0x11223344 + 98: 7a 01 fe ff 44 33 22 11 stdw \[%r1\+0xfffe\],0x11223344 + a0: 81 12 ef 7e 00 00 00 00 ldxsw %r2,\[%r1\+0x7eef\] + a8: 89 12 ef 7e 00 00 00 00 ldxsh %r2,\[%r1\+0x7eef\] + b0: 91 12 ef 7e 00 00 00 00 ldxsb %r2,\[%r1\+0x7eef\] + b8: 99 12 ef 7e 00 00 00 00 ldxsdw %r2,\[%r1\+0x7eef\] + c0: 79 12 00 00 00 00 00 00 ldxdw %r2,\[%r1\+0x0\] + c8: 40 30 00 00 00 00 00 00 ldindw %r3,0x0 diff --git a/gas/testsuite/gas/bpf/mem.s b/gas/testsuite/gas/bpf/mem.s index af6f41b0db0..adeda473bb8 100644 --- a/gas/testsuite/gas/bpf/mem.s +++ b/gas/testsuite/gas/bpf/mem.s @@ -21,4 +21,10 @@ stb [%r1+0x7eef], 0x11223344 sth [%r1+0x7eef], 0x11223344 stw [%r1+0x7eef], 0x11223344 - stdw [%r1+-2], 0x11223344 + stdw [%r1-2], 0x11223344 + ldxsw %r2, [%r1+0x7eef] + ldxsh %r2, [%r1+0x7eef] + ldxsb %r2, [%r1+0x7eef] + ldxsdw %r2, [%r1+0x7eef] + ldxdw %r2, [%r1+0] + ldindw %r3, 0 diff --git a/gas/testsuite/gas/i386/avx512f-nondef.d b/gas/testsuite/gas/i386/avx512f-nondef.d index a062fe335bc..6aae6a50fd2 100644 --- a/gas/testsuite/gas/i386/avx512f-nondef.d +++ b/gas/testsuite/gas/i386/avx512f-nondef.d @@ -15,10 +15,14 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 62 f2 55 1f 3b f4 vpminud \{rn-bad\},%zmm4,%zmm5,%zmm6\{%k7\} [ ]*[a-f0-9]+: 62 f2 7e 48 31 72 7f vpmovdb %zmm6,0x7f0\(%edx\) [ ]*[a-f0-9]+: 62 f2 7e 58 31 72 7f vpmovdb %zmm6,0x7f0\(%edx\)\{bad\} -[ ]*[a-f0-9]+: 62 f1 7c 88 58 \(bad\) -[ ]*[a-f0-9]+: c3 ret +[ ]*[a-f0-9]+: 62 f1 7c 88 58 c3 (\{evex\} )?vaddps %xmm3,%xmm0,%xmm0\{bad\} [ ]*[a-f0-9]+: 62 f2 7d 4f 92 01 vgatherdps \(bad\),%zmm0\{%k7\} [ ]*[a-f0-9]+: 67 62 f2 7d 4f 92 01 addr16 vgatherdps \(bad\),%zmm0\{%k7\} [ ]*[a-f0-9]+: 62 f2 7d cf 92 04 08 vgatherdps \(%eax,%zmm1(,1)?\),%zmm0\{%k7\}\{z\}/\(bad\) [ ]*[a-f0-9]+: 62 f2 7d 48 92 04 08 vgatherdps \(%eax,%zmm1(,1)?\),%zmm0/\(bad\) +[ ]*[a-f0-9]+: 62 f1 7c cf c2 c0 00 vcmpeqps %zmm0,%zmm0,%k0\{%k7\}\{z\}/\(bad\) +[ ]*[a-f0-9]+: 62 f1 7c cf 29 00 vmovaps %zmm0,\(%eax\)\{%k7\}\{z\}/\(bad\) +[ ]*[a-f0-9]+: 62 f1 7d 0a c5 c8 00 vpextrw \$(0x)?0,%xmm0,%ecx\{%k2\}/\(bad\) +[ ]*[a-f0-9]+: 62 f3 7d 0a 16 01 00 vpextrd \$(0x)?0,%xmm0,\(%ecx\)\{%k2\}/\(bad\) +[ ]*[a-f0-9]+: 62 f2 7d 4a 2a 01 vmovntdqa \(%ecx\),%zmm0\{%k2\}/\(bad\) #pass diff --git a/gas/testsuite/gas/i386/avx512f-nondef.s b/gas/testsuite/gas/i386/avx512f-nondef.s index a1175929474..3c4cdffcd59 100644 --- a/gas/testsuite/gas/i386/avx512f-nondef.s +++ b/gas/testsuite/gas/i386/avx512f-nondef.s @@ -26,3 +26,18 @@ .insn EVEX.66.0F38.W0 0x92, (%eax,%zmm1), %zmm0{%k7}{z} # vgatherdps (%eax,%zmm1), %zmm0 # without actual mask register .insn EVEX.66.0F38.W0 0x92, (%eax,%zmm1), %zmm0 + + # vcmpeqps %zmm0, %zmm0, %k0{%k7} with EVEX.z set + .insn EVEX.0f 0xc2, $0, %zmm0, %zmm0, %k0{%k7}{z} + + # vmovaps %zmm0, (%eax){%k7} with EVEX.z set + .insn EVEX.0f 0x29, %zmm0, (%eax){%k7}{z} + + # vpextrw $0, %xmm0, %ecx with non-zero EVEX.aaa + .insn EVEX.66.0f 0xc5, $0, %xmm0, %ecx{%k2} + + # vpextrd $0, %xmm0, (%ecx) with non-zero EVEX.aaa + .insn EVEX.66.0f3a 0x16, $0, %xmm0, (%ecx){%k2} + + # vmovntdqa (%ecx), %zmm0 with non-zero EVEX.aaa + .insn EVEX.66.0f38.W0 0x2a, (%ecx), %zmm0{%k2} diff --git a/gas/testsuite/gas/i386/disassem.d b/gas/testsuite/gas/i386/disassem.d index 7e414a56374..eae69db6553 100644 --- a/gas/testsuite/gas/i386/disassem.d +++ b/gas/testsuite/gas/i386/disassem.d @@ -8,309 +8,309 @@ Disassembly of section \.text: 0+ <\.text>: -[ ]*[a-f0-9]+:[ ]*ff[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*ff[ ]+ljmp[ ]*\(bad\) [ ]*[a-f0-9]+:[ ]*ef[ ]*out %eax,\(%dx\) -[ ]*[a-f0-9]+:[ ]*ff[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*ff[ ]+lcall[ ]*\(bad\) [ ]*[a-f0-9]+:[ ]*d8 90 90 90 90 90[ ]*fcoms -0x6f6f6f70\(%eax\) -[ ]*[a-f0-9]+:[ ]*c5 ec 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 4a[ ]+kaddw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ec 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 4a[ ]+kaddw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ec 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 4a[ ]+kaddw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 ed 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 4a[ ]+kaddb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ed 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 4a[ ]+kaddb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ed 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 4a[ ]+kaddb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4a[ ]+kaddq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4a[ ]+kaddq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4a[ ]+kaddq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 4a[ ]+kaddd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 4a[ ]+kaddd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 4a[ ]+kaddd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 ec 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 41[ ]+kandw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ec 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 41[ ]+kandw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ec 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 41[ ]+kandw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 ed 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 41[ ]+kandb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ed 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 41[ ]+kandb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ed 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 41[ ]+kandb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 41[ ]+kandq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 41[ ]+kandq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 41[ ]+kandq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 41[ ]+kandd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 41[ ]+kandd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 41[ ]+kandd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 ec 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 42[ ]+kandnw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ec 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 42[ ]+kandnw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ec 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 42[ ]+kandnw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 ed 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 42[ ]+kandnb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ed 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 42[ ]+kandnb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ed 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 42[ ]+kandnb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 42[ ]+kandnq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 42[ ]+kandnq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 42[ ]+kandnq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 42[ ]+kandnd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 42[ ]+kandnd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 42[ ]+kandnd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 ec 4b[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 4b[ ]+kunpckwd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ec 4b[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 4b[ ]+kunpckwd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ec 4b[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 4b[ ]+kunpckwd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 ed 4b[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 4b[ ]+kunpckbw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ed 4b[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 4b[ ]+kunpckbw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ed 4b[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 4b[ ]+kunpckbw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4b[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4b[ ]+kunpckdq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4b[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4b[ ]+kunpckdq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4b[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4b[ ]+kunpckdq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 f8 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 44[ ]+knotw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 f8 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 44[ ]+knotw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 f8 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 44[ ]+knotw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 f9 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 44[ ]+knotb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 f9 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 44[ ]+knotb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 f9 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 44[ ]+knotb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c4 e1 f8 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f8 44[ ]+knotq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 f8 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f8 44[ ]+knotq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 f8 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f8 44[ ]+knotq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c4 e1 f9 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f9 44[ ]+knotd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 f9 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f9 44[ ]+knotd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 f9 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f9 44[ ]+knotd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 ec 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 45[ ]+korw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ec 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 45[ ]+korw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ec 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 45[ ]+korw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 ed 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 45[ ]+korb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ed 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 45[ ]+korb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ed 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 45[ ]+korb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 45[ ]+korq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 45[ ]+korq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 45[ ]+korq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 45[ ]+kord[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 45[ ]+kord[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 45[ ]+kord[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 f8 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 98[ ]+kortestw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 f8 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 98[ ]+kortestw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 f8 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 98[ ]+kortestw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 f9 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 98[ ]+kortestb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 f9 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 98[ ]+kortestb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 f9 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 98[ ]+kortestb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c4 e1 f8 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f8 98[ ]+kortestq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 f8 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f8 98[ ]+kortestq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 f8 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f8 98[ ]+kortestq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c4 e1 f9 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f9 98[ ]+kortestd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 f9 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f9 98[ ]+kortestd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 f9 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f9 98[ ]+kortestd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 ec 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 46[ ]+kxnorw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ec 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 46[ ]+kxnorw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ec 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 46[ ]+kxnorw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 ed 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 46[ ]+kxnorb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ed 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 46[ ]+kxnorb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ed 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 46[ ]+kxnorb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 46[ ]+kxnorq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 46[ ]+kxnorq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 46[ ]+kxnorq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 46[ ]+kxnord[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 46[ ]+kxnord[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 46[ ]+kxnord[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 ec 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 47[ ]+kxorw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ec 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 47[ ]+kxorw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ec 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 47[ ]+kxorw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 ed 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 47[ ]+kxorb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ed 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 47[ ]+kxorb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ed 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 47[ ]+kxorb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 47[ ]+kxorq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 47[ ]+kxorq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 47[ ]+kxorq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 47[ ]+kxord[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 47[ ]+kxord[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 47[ ]+kxord[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 f8 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 99[ ]+ktestw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 f8 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 99[ ]+ktestw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 f8 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 99[ ]+ktestw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 f9 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 99[ ]+ktestb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 f9 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 99[ ]+ktestb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 f9 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 99[ ]+ktestb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c4 e1 f8 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f8 99[ ]+ktestq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 f8 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f8 99[ ]+ktestq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 f8 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f8 99[ ]+ktestq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c4 e1 f9 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f9 99[ ]+ktestd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 f9 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f9 99[ ]+ktestd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 f9 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f9 99[ ]+ktestd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 30[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*8f 01[ ]*pop \(%ecx\) -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 30[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*6a 01[ ]*push \$0x1 -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 30[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*04 01[ ]*add \$0x1,%al -[ ]*[a-f0-9]+:[ ]*c4 e3 79 30[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*8f 01[ ]*pop \(%ecx\) -[ ]*[a-f0-9]+:[ ]*c4 e3 79 30[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*6a 01[ ]*push \$0x1 -[ ]*[a-f0-9]+:[ ]*c4 e3 79 30[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*04 01[ ]*add \$0x1,%al -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 31[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*8f 01[ ]*pop \(%ecx\) -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 31[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*6a 01[ ]*push \$0x1 -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 31[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*04 01[ ]*add \$0x1,%al -[ ]*[a-f0-9]+:[ ]*c4 e3 79 31[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*8f 01[ ]*pop \(%ecx\) -[ ]*[a-f0-9]+:[ ]*c4 e3 79 31[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*6a 01[ ]*push \$0x1 -[ ]*[a-f0-9]+:[ ]*c4 e3 79 31[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*04 01[ ]*add \$0x1,%al -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 32[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*8f 01[ ]*pop \(%ecx\) -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 32[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*6a 01[ ]*push \$0x1 -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 32[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*04 01[ ]*add \$0x1,%al -[ ]*[a-f0-9]+:[ ]*c4 e3 79 32[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*8f 01[ ]*pop \(%ecx\) -[ ]*[a-f0-9]+:[ ]*c4 e3 79 32[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*6a 01[ ]*push \$0x1 -[ ]*[a-f0-9]+:[ ]*c4 e3 79 32[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*04 01[ ]*add \$0x1,%al -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 33[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*8f 01[ ]*pop \(%ecx\) -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 33[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*6a 01[ ]*push \$0x1 -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 33[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*04 01[ ]*add \$0x1,%al -[ ]*[a-f0-9]+:[ ]*c4 e3 79 33[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*8f 01[ ]*pop \(%ecx\) -[ ]*[a-f0-9]+:[ ]*c4 e3 79 33[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*6a 01[ ]*push \$0x1 -[ ]*[a-f0-9]+:[ ]*c4 e3 79 33[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*04 01[ ]*add \$0x1,%al -[ ]*[a-f0-9]+:[ ]*c5 f8 92[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 30 8f[ ]+kshiftrw[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 30 6a[ ]+kshiftrw[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 30 04[ ]+kshiftrw[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 79 30 8f[ ]+kshiftrb[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 79 30 6a[ ]+kshiftrb[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 79 30 04[ ]+kshiftrb[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 31 8f[ ]+kshiftrq[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 31 6a[ ]+kshiftrq[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 31 04[ ]+kshiftrq[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 79 31 8f[ ]+kshiftrd[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 79 31 6a[ ]+kshiftrd[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 79 31 04[ ]+kshiftrd[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 32 8f[ ]+kshiftlw[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 32 6a[ ]+kshiftlw[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 32 04[ ]+kshiftlw[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 79 32 8f[ ]+kshiftlb[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 79 32 6a[ ]+kshiftlb[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 79 32 04[ ]+kshiftlb[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 33 8f[ ]+kshiftlq[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 33 6a[ ]+kshiftlq[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 33 04[ ]+kshiftlq[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 79 33 8f[ ]+kshiftld[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 79 33 6a[ ]+kshiftld[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c4 e3 79 33 04[ ]+kshiftld[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]+pop[ ]+%es +[ ]*[a-f0-9]+:[ ]*c5 f8 92[ ]+kmovw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 f8 92[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 92[ ]+kmovw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 f8 92[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 92[ ]+kmovw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 f9 92[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 92[ ]+kmovb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 f9 92[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 92[ ]+kmovb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 f9 92[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 92[ ]+kmovb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 fb 92[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 fb 92[ ]+kmovd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 fb 92[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 fb 92[ ]+kmovd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 fb 92[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 fb 92[ ]+kmovd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas [ ]*[a-f0-9]+:[ ]*c4 e1 f9 92[ ]*\(bad\) [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait @@ -318,23 +318,23 @@ Disassembly of section \.text: [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) [ ]*[a-f0-9]+:[ ]*c4 e1 f9 92[ ]*\(bad\) [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 f8 93[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 93[ ]+kmovw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 f8 93[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 93[ ]+kmovw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 f8 93[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 93[ ]+kmovw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 f9 93[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 93[ ]+kmovb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 f9 93[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 93[ ]+kmovb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 f9 93[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 93[ ]+kmovb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas -[ ]*[a-f0-9]+:[ ]*c5 fb 93[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 fb 93[ ]+kmovd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 fb 93[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 fb 93[ ]+kmovd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%esi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 fb 93[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 fb 93[ ]+kmovd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*aas [ ]*[a-f0-9]+:[ ]*c4 e1 f9 93[ ]*\(bad\) [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait @@ -345,6 +345,12 @@ Disassembly of section \.text: [ ]*[a-f0-9]+:[ ]*c4 e2 01 1c[ ]*\(bad\) [ ]*[a-f0-9]+:[ ]*41[ ]*inc[ ]*%ecx [ ]*[a-f0-9]+:[ ]*37[ ]*aaa +[ ]*[a-f0-9]+:[ ]*c4 e2 7f cc[ ]+vsha512msg1[ ]*\(bad\),.* +[ ]*[a-f0-9]+:[ ]*71 20[ ]+jno.* +[ ]*[a-f0-9]+:[ ]*c4 e2 7f cd[ ]+vsha512msg2[ ]*\(bad\),.* +[ ]*[a-f0-9]+:[ ]*71 20[ ]+jno.* +[ ]*[a-f0-9]+:[ ]*c4 e2 6f cb[ ]+vsha512rnds2[ ]*\(bad\),.* +[ ]*[a-f0-9]+:[ ]*71 20[ ]+jno.* [ ]*[a-f0-9]+:[ ]*62 f2 ad 08 1c[ ]*\(bad\) [ ]*[a-f0-9]+:[ ]*01 01[ ]*add[ ]*%eax,\(%ecx\) [ ]*[a-f0-9]+:[ ]*62 f3 7d 28 1b[ ]*\(bad\) diff --git a/gas/testsuite/gas/i386/disassem.s b/gas/testsuite/gas/i386/disassem.s index 7c09fadceea..0fb0dd48b54 100644 --- a/gas/testsuite/gas/i386/disassem.s +++ b/gas/testsuite/gas/i386/disassem.s @@ -119,30 +119,30 @@ .byte 0xC4, 0xE1, 0xF9, 0x99, 0x9B .byte 0xC4, 0xE1, 0xF9, 0x99, 0x6F .insn VEX.L0.66.0f.W1 0x99, (%edi), %k7 -.byte 0xC4, 0xE3, 0xF9, 0x30, 0x8F, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x30, 0x6A, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x30, 0x04, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x30, 0x8F, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x30, 0x6A, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x30, 0x04, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x31, 0x8F, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x31, 0x6A, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x31, 0x04, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x31, 0x8F, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x31, 0x6A, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x31, 0x04, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x32, 0x8F, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x32, 0x6A, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x32, 0x04, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x32, 0x8F, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x32, 0x6A, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x32, 0x04, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x33, 0x8F, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x33, 0x6A, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x33, 0x04, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x33, 0x8F, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x33, 0x6A, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x33, 0x04, 0x01 +.byte 0xC4, 0xE3, 0xF9, 0x30, 0x8F, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x30, 0x6A, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x30, 0x04, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x30, 0x8F, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x30, 0x6A, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x30, 0x04, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x31, 0x8F, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x31, 0x6A, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x31, 0x04, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x31, 0x8F, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x31, 0x6A, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x31, 0x04, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x32, 0x8F, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x32, 0x6A, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x32, 0x04, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x32, 0x8F, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x32, 0x6A, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x32, 0x04, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x33, 0x8F, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x33, 0x6A, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x33, 0x04, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x33, 0x8F, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x33, 0x6A, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x33, 0x04, 0x07 .byte 0xC5, 0xF8, 0x92, 0x9B .byte 0xC5, 0xF8, 0x92, 0x6F .insn VEX.L0.NP.0f.W0 0x92, (%edi), %k7 @@ -168,6 +168,9 @@ .byte 0xC4, 0xE1, 0xF9, 0x93, 0x6F .insn VEX.L0.66.0f.W1 0x93, (%edi), %k7 .byte 0xc4, 0xe2, 0x1, 0x1c, 0x41, 0x37 + .insn VEX.L1.F2.0f38.W0 0xCC, 32(%ecx), %ymm6 + .insn VEX.L1.F2.0f38.W0 0xCD, 32(%ecx), %ymm6 + .insn VEX.L1.F2.0f38.W0 0xCB, 32(%ecx), %ymm2, %ymm6 .byte 0x62, 0xf2, 0xad, 0x08, 0x1c, 0x01 .byte 0x1 .insn EVEX.66.0f3a.W0 0x1b, $0x25, %ymm0, %xmm1 diff --git a/gas/testsuite/gas/i386/i386-intel.d b/gas/testsuite/gas/i386/i386-intel.d index a65c12e3edf..12c0500b1d3 100644 --- a/gas/testsuite/gas/i386/i386-intel.d +++ b/gas/testsuite/gas/i386/i386-intel.d @@ -62,45 +62,45 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 0f b6 00 movzx eax,BYTE PTR \[eax\] [ ]*[a-f0-9]+: 0f b7 00 movzx eax,WORD PTR \[eax\] [ ]*[a-f0-9]+: 0f c3 00 movnti DWORD PTR \[eax\],eax -[ ]*[a-f0-9]+: 63 ca arpl dx,cx -[ ]*[a-f0-9]+: 63 ca arpl dx,cx -[ ]*[a-f0-9]+: 63 0a arpl (WORD PTR )?\[edx\],cx -[ ]*[a-f0-9]+: 63 0a arpl (WORD PTR )?\[edx\],cx +[ ]*[a-f0-9]+: 63 ca arpl edx,ecx +[ ]*[a-f0-9]+: 63 ca arpl edx,ecx +[ ]*[a-f0-9]+: 63 0a arpl (WORD PTR )?\[edx\],ecx +[ ]*[a-f0-9]+: 63 0a arpl (WORD PTR )?\[edx\],ecx [ ]*[a-f0-9]+: 66 0f 02 d2 lar dx,dx [ ]*[a-f0-9]+: 0f 02 d2 lar edx,edx [ ]*[a-f0-9]+: 0f 02 d2 lar edx,edx [ ]*[a-f0-9]+: 66 0f 02 12 lar dx,WORD PTR \[edx\] [ ]*[a-f0-9]+: 0f 02 12 lar edx,WORD PTR \[edx\] -[ ]*[a-f0-9]+: 0f 00 d2 lldt dx -[ ]*[a-f0-9]+: 0f 00 d2 lldt dx +[ ]*[a-f0-9]+: 0f 00 d2 lldt edx +[ ]*[a-f0-9]+: 0f 00 d2 lldt edx [ ]*[a-f0-9]+: 0f 00 12 lldt (WORD PTR )?\[edx\] [ ]*[a-f0-9]+: 66 0f 03 d2 lsl dx,dx [ ]*[a-f0-9]+: 0f 03 d2 lsl edx,edx [ ]*[a-f0-9]+: 0f 03 d2 lsl edx,edx [ ]*[a-f0-9]+: 66 0f 03 12 lsl dx,WORD PTR \[edx\] [ ]*[a-f0-9]+: 0f 03 12 lsl edx,WORD PTR \[edx\] -[ ]*[a-f0-9]+: 0f 00 da ltr dx -[ ]*[a-f0-9]+: 0f 00 da ltr dx +[ ]*[a-f0-9]+: 0f 00 da ltr edx +[ ]*[a-f0-9]+: 0f 00 da ltr edx [ ]*[a-f0-9]+: 0f 00 1a ltr (WORD PTR )?\[edx\] -[ ]*[a-f0-9]+: 0f 00 e2 verr dx -[ ]*[a-f0-9]+: 0f 00 e2 verr dx +[ ]*[a-f0-9]+: 0f 00 e2 verr edx +[ ]*[a-f0-9]+: 0f 00 e2 verr edx [ ]*[a-f0-9]+: 0f 00 22 verr (WORD PTR )?\[edx\] -[ ]*[a-f0-9]+: 0f 00 ea verw dx -[ ]*[a-f0-9]+: 0f 00 ea verw dx +[ ]*[a-f0-9]+: 0f 00 ea verw edx +[ ]*[a-f0-9]+: 0f 00 ea verw edx [ ]*[a-f0-9]+: 0f 00 2a verw (WORD PTR )?\[edx\] -[ ]*[a-f0-9]+: 63 d1 arpl cx,dx -[ ]*[a-f0-9]+: 63 d1 arpl cx,dx -[ ]*[a-f0-9]+: 63 11 arpl (WORD PTR )?\[ecx],dx -[ ]*[a-f0-9]+: 63 11 arpl (WORD PTR )?\[ecx],dx -[ ]*[a-f0-9]+: 63 11 arpl (WORD PTR )?\[ecx],dx -[ ]*[a-f0-9]+: 63 11 arpl (WORD PTR )?\[ecx],dx +[ ]*[a-f0-9]+: 63 d1 arpl ecx,edx +[ ]*[a-f0-9]+: 63 d1 arpl ecx,edx +[ ]*[a-f0-9]+: 63 11 arpl (WORD PTR )?\[ecx],edx +[ ]*[a-f0-9]+: 63 11 arpl (WORD PTR )?\[ecx],edx +[ ]*[a-f0-9]+: 63 11 arpl (WORD PTR )?\[ecx],edx +[ ]*[a-f0-9]+: 63 11 arpl (WORD PTR )?\[ecx],edx [ ]*[a-f0-9]+: 66 0f 02 d2 lar dx,dx [ ]*[a-f0-9]+: 0f 02 d2 lar edx,edx [ ]*[a-f0-9]+: 0f 02 d2 lar edx,edx [ ]*[a-f0-9]+: 66 0f 02 12 lar dx,WORD PTR \[edx\] [ ]*[a-f0-9]+: 0f 02 12 lar edx,WORD PTR \[edx\] -[ ]*[a-f0-9]+: 0f 00 d2 lldt dx -[ ]*[a-f0-9]+: 0f 00 d2 lldt dx +[ ]*[a-f0-9]+: 0f 00 d2 lldt edx +[ ]*[a-f0-9]+: 0f 00 d2 lldt edx [ ]*[a-f0-9]+: 0f 00 12 lldt (WORD PTR )?\[edx\] [ ]*[a-f0-9]+: 0f 00 12 lldt (WORD PTR )?\[edx\] [ ]*[a-f0-9]+: 66 0f 03 d2 lsl dx,dx @@ -108,16 +108,16 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 0f 03 d2 lsl edx,edx [ ]*[a-f0-9]+: 66 0f 03 12 lsl dx,WORD PTR \[edx\] [ ]*[a-f0-9]+: 0f 03 12 lsl edx,WORD PTR \[edx\] -[ ]*[a-f0-9]+: 0f 00 da ltr dx -[ ]*[a-f0-9]+: 0f 00 da ltr dx +[ ]*[a-f0-9]+: 0f 00 da ltr edx +[ ]*[a-f0-9]+: 0f 00 da ltr edx [ ]*[a-f0-9]+: 0f 00 1a ltr (WORD PTR )?\[edx\] [ ]*[a-f0-9]+: 0f 00 1a ltr (WORD PTR )?\[edx\] -[ ]*[a-f0-9]+: 0f 00 e2 verr dx -[ ]*[a-f0-9]+: 0f 00 e2 verr dx +[ ]*[a-f0-9]+: 0f 00 e2 verr edx +[ ]*[a-f0-9]+: 0f 00 e2 verr edx [ ]*[a-f0-9]+: 0f 00 22 verr (WORD PTR )?\[edx\] [ ]*[a-f0-9]+: 0f 00 22 verr (WORD PTR )?\[edx\] -[ ]*[a-f0-9]+: 0f 00 ea verw dx -[ ]*[a-f0-9]+: 0f 00 ea verw dx +[ ]*[a-f0-9]+: 0f 00 ea verw edx +[ ]*[a-f0-9]+: 0f 00 ea verw edx [ ]*[a-f0-9]+: 0f 00 2a verw (WORD PTR )?\[edx\] [ ]*[a-f0-9]+: 0f 00 2a verw (WORD PTR )?\[edx\] #pass diff --git a/gas/testsuite/gas/i386/i386.d b/gas/testsuite/gas/i386/i386.d index 54e19e87641..a77d9f4f37b 100644 --- a/gas/testsuite/gas/i386/i386.d +++ b/gas/testsuite/gas/i386/i386.d @@ -61,45 +61,45 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 0f b6 00 movzbl \(%eax\),%eax [ ]*[a-f0-9]+: 0f b7 00 movzwl \(%eax\),%eax [ ]*[a-f0-9]+: 0f c3 00 movnti %eax,\(%eax\) -[ ]*[a-f0-9]+: 63 ca arpl %cx,%dx -[ ]*[a-f0-9]+: 63 ca arpl %cx,%dx -[ ]*[a-f0-9]+: 63 0a arpl %cx,\(%edx\) -[ ]*[a-f0-9]+: 63 0a arpl %cx,\(%edx\) +[ ]*[a-f0-9]+: 63 ca arpl %ecx,%edx +[ ]*[a-f0-9]+: 63 ca arpl %ecx,%edx +[ ]*[a-f0-9]+: 63 0a arpl %ecx,\(%edx\) +[ ]*[a-f0-9]+: 63 0a arpl %ecx,\(%edx\) [ ]*[a-f0-9]+: 66 0f 02 d2 lar %dx,%dx [ ]*[a-f0-9]+: 0f 02 d2 lar %edx,%edx [ ]*[a-f0-9]+: 0f 02 d2 lar %edx,%edx [ ]*[a-f0-9]+: 66 0f 02 12 lar \(%edx\),%dx [ ]*[a-f0-9]+: 0f 02 12 lar \(%edx\),%edx -[ ]*[a-f0-9]+: 0f 00 d2 lldt %dx -[ ]*[a-f0-9]+: 0f 00 d2 lldt %dx +[ ]*[a-f0-9]+: 0f 00 d2 lldt %edx +[ ]*[a-f0-9]+: 0f 00 d2 lldt %edx [ ]*[a-f0-9]+: 0f 00 12 lldt \(%edx\) [ ]*[a-f0-9]+: 66 0f 03 d2 lsl %dx,%dx [ ]*[a-f0-9]+: 0f 03 d2 lsl %edx,%edx [ ]*[a-f0-9]+: 0f 03 d2 lsl %edx,%edx [ ]*[a-f0-9]+: 66 0f 03 12 lsl \(%edx\),%dx [ ]*[a-f0-9]+: 0f 03 12 lsl \(%edx\),%edx -[ ]*[a-f0-9]+: 0f 00 da ltr %dx -[ ]*[a-f0-9]+: 0f 00 da ltr %dx +[ ]*[a-f0-9]+: 0f 00 da ltr %edx +[ ]*[a-f0-9]+: 0f 00 da ltr %edx [ ]*[a-f0-9]+: 0f 00 1a ltr \(%edx\) -[ ]*[a-f0-9]+: 0f 00 e2 verr %dx -[ ]*[a-f0-9]+: 0f 00 e2 verr %dx +[ ]*[a-f0-9]+: 0f 00 e2 verr %edx +[ ]*[a-f0-9]+: 0f 00 e2 verr %edx [ ]*[a-f0-9]+: 0f 00 22 verr \(%edx\) -[ ]*[a-f0-9]+: 0f 00 ea verw %dx -[ ]*[a-f0-9]+: 0f 00 ea verw %dx +[ ]*[a-f0-9]+: 0f 00 ea verw %edx +[ ]*[a-f0-9]+: 0f 00 ea verw %edx [ ]*[a-f0-9]+: 0f 00 2a verw \(%edx\) -[ ]*[a-f0-9]+: 63 d1 arpl %dx,%cx -[ ]*[a-f0-9]+: 63 d1 arpl %dx,%cx -[ ]*[a-f0-9]+: 63 11 arpl %dx,\(%ecx\) -[ ]*[a-f0-9]+: 63 11 arpl %dx,\(%ecx\) -[ ]*[a-f0-9]+: 63 11 arpl %dx,\(%ecx\) -[ ]*[a-f0-9]+: 63 11 arpl %dx,\(%ecx\) +[ ]*[a-f0-9]+: 63 d1 arpl %edx,%ecx +[ ]*[a-f0-9]+: 63 d1 arpl %edx,%ecx +[ ]*[a-f0-9]+: 63 11 arpl %edx,\(%ecx\) +[ ]*[a-f0-9]+: 63 11 arpl %edx,\(%ecx\) +[ ]*[a-f0-9]+: 63 11 arpl %edx,\(%ecx\) +[ ]*[a-f0-9]+: 63 11 arpl %edx,\(%ecx\) [ ]*[a-f0-9]+: 66 0f 02 d2 lar %dx,%dx [ ]*[a-f0-9]+: 0f 02 d2 lar %edx,%edx [ ]*[a-f0-9]+: 0f 02 d2 lar %edx,%edx [ ]*[a-f0-9]+: 66 0f 02 12 lar \(%edx\),%dx [ ]*[a-f0-9]+: 0f 02 12 lar \(%edx\),%edx -[ ]*[a-f0-9]+: 0f 00 d2 lldt %dx -[ ]*[a-f0-9]+: 0f 00 d2 lldt %dx +[ ]*[a-f0-9]+: 0f 00 d2 lldt %edx +[ ]*[a-f0-9]+: 0f 00 d2 lldt %edx [ ]*[a-f0-9]+: 0f 00 12 lldt \(%edx\) [ ]*[a-f0-9]+: 0f 00 12 lldt \(%edx\) [ ]*[a-f0-9]+: 66 0f 03 d2 lsl %dx,%dx @@ -107,16 +107,16 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 0f 03 d2 lsl %edx,%edx [ ]*[a-f0-9]+: 66 0f 03 12 lsl \(%edx\),%dx [ ]*[a-f0-9]+: 0f 03 12 lsl \(%edx\),%edx -[ ]*[a-f0-9]+: 0f 00 da ltr %dx -[ ]*[a-f0-9]+: 0f 00 da ltr %dx +[ ]*[a-f0-9]+: 0f 00 da ltr %edx +[ ]*[a-f0-9]+: 0f 00 da ltr %edx [ ]*[a-f0-9]+: 0f 00 1a ltr \(%edx\) [ ]*[a-f0-9]+: 0f 00 1a ltr \(%edx\) -[ ]*[a-f0-9]+: 0f 00 e2 verr %dx -[ ]*[a-f0-9]+: 0f 00 e2 verr %dx +[ ]*[a-f0-9]+: 0f 00 e2 verr %edx +[ ]*[a-f0-9]+: 0f 00 e2 verr %edx [ ]*[a-f0-9]+: 0f 00 22 verr \(%edx\) [ ]*[a-f0-9]+: 0f 00 22 verr \(%edx\) -[ ]*[a-f0-9]+: 0f 00 ea verw %dx -[ ]*[a-f0-9]+: 0f 00 ea verw %dx +[ ]*[a-f0-9]+: 0f 00 ea verw %edx +[ ]*[a-f0-9]+: 0f 00 ea verw %edx [ ]*[a-f0-9]+: 0f 00 2a verw \(%edx\) [ ]*[a-f0-9]+: 0f 00 2a verw \(%edx\) #pass diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp index d78f1937c84..90819d80f60 100644 --- a/gas/testsuite/gas/i386/i386.exp +++ b/gas/testsuite/gas/i386/i386.exp @@ -496,6 +496,16 @@ if [gas_32_check] then { run_dump_test "raoint" run_dump_test "raoint-intel" run_list_test "amx-complex-inval" + run_dump_test "avx-vnni-int16" + run_dump_test "avx-vnni-int16-intel" + run_dump_test "sha512" + run_dump_test "sha512-intel" + run_list_test "sha512-inval" + run_dump_test "sm3" + run_dump_test "sm3-intel" + run_dump_test "sm4" + run_dump_test "sm4-intel" + run_list_test "pbndkb-inval" run_list_test "sg" run_dump_test "clzero" run_dump_test "invlpgb" diff --git a/gas/testsuite/gas/i386/intel-intel.d b/gas/testsuite/gas/i386/intel-intel.d index 73fbdf89c1c..4e96969436a 100644 --- a/gas/testsuite/gas/i386/intel-intel.d +++ b/gas/testsuite/gas/i386/intel-intel.d @@ -103,7 +103,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 60 + pusha [ ]*[a-f0-9]+: 61 + popa [ ]*[a-f0-9]+: 62 90 90 90 90 90 + bound edx,QWORD PTR \[eax-0x6f6f6f70\] -[ ]*[a-f0-9]+: 63 90 90 90 90 90 + arpl WORD PTR \[eax-0x6f6f6f70\],dx +[ ]*[a-f0-9]+: 63 90 90 90 90 90 + arpl WORD PTR \[eax-0x6f6f6f70\],edx [ ]*[a-f0-9]+: 68 90 90 90 90 + push 0x90909090 [ ]*[a-f0-9]+: 69 90 90 90 90 90 90 90 90 90 imul edx,DWORD PTR \[eax-0x6f6f6f70\],0x90909090 [ ]*[a-f0-9]+: 6a 90 + push 0xffffff90 diff --git a/gas/testsuite/gas/i386/intel.d b/gas/testsuite/gas/i386/intel.d index 374f8753396..bc212893853 100644 --- a/gas/testsuite/gas/i386/intel.d +++ b/gas/testsuite/gas/i386/intel.d @@ -102,7 +102,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 60 [ ]*pusha [ ]*[a-f0-9]+: 61 [ ]*popa [ ]*[a-f0-9]+: 62 90 90 90 90 90 [ ]*bound %edx,-0x6f6f6f70\(%eax\) -[ ]*[a-f0-9]+: 63 90 90 90 90 90 [ ]*arpl %dx,-0x6f6f6f70\(%eax\) +[ ]*[a-f0-9]+: 63 90 90 90 90 90 [ ]*arpl %edx,-0x6f6f6f70\(%eax\) [ ]*[a-f0-9]+: 68 90 90 90 90 [ ]*push \$0x90909090 [ ]*[a-f0-9]+: 69 90 90 90 90 90 90 90 90 90 [ ]*imul \$0x90909090,-0x6f6f6f70\(%eax\),%edx [ ]*[a-f0-9]+: 6a 90 [ ]*push \$0xffffff90 diff --git a/gas/testsuite/gas/i386/opcode-intel.d b/gas/testsuite/gas/i386/opcode-intel.d index 7f641db2892..c3c920f25e3 100644 --- a/gas/testsuite/gas/i386/opcode-intel.d +++ b/gas/testsuite/gas/i386/opcode-intel.d @@ -102,7 +102,7 @@ Disassembly of section .text: *[0-9a-f]+: 60[ ]+pusha *[0-9a-f]+: 61[ ]+popa *[0-9a-f]+: 62 90 90 90 90 90[ ]+bound[ ]+edx,(QWORD PTR )?\[eax-0x6f6f6f70\] - *[0-9a-f]+: 63 90 90 90 90 90[ ]+arpl[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],dx + *[0-9a-f]+: 63 90 90 90 90 90[ ]+arpl[ ]+(WORD PTR )?\[eax-0x6f6f6f70\],edx *[0-9a-f]+: 68 90 90 90 90[ ]+push[ ]+0x90909090 *[0-9a-f]+: 69 90 90 90 90 90 90 90 90 90[ ]+imul[ ]+edx,(DWORD PTR )?\[eax-0x6f6f6f70\],0x90909090 *[0-9a-f]+: 6a 90[ ]+push[ ]+0xffffff90 diff --git a/gas/testsuite/gas/i386/opcode-suffix.d b/gas/testsuite/gas/i386/opcode-suffix.d index 152c3b865a0..946a0a4d7a0 100644 --- a/gas/testsuite/gas/i386/opcode-suffix.d +++ b/gas/testsuite/gas/i386/opcode-suffix.d @@ -102,7 +102,7 @@ Disassembly of section .text: *[0-9a-f]+: 60[ ]+pushal *[0-9a-f]+: 61[ ]+popal *[0-9a-f]+: 62 90 90 90 90 90[ ]+boundl %edx,-0x6f6f6f70\(%eax\) - *[0-9a-f]+: 63 90 90 90 90 90[ ]+arpl[ ]+%dx,-0x6f6f6f70\(%eax\) + *[0-9a-f]+: 63 90 90 90 90 90[ ]+arpll[ ]+%edx,-0x6f6f6f70\(%eax\) *[0-9a-f]+: 68 90 90 90 90[ ]+pushl[ ]+\$0x90909090 *[0-9a-f]+: 69 90 90 90 90 90 90 90 90 90[ ]+imull[ ]+\$0x90909090,-0x6f6f6f70\(%eax\),%edx *[0-9a-f]+: 6a 90[ ]+pushl[ ]+\$0xffffff90 @@ -248,7 +248,7 @@ Disassembly of section .text: *[0-9a-f]+: fc[ ]+cld *[0-9a-f]+: fd[ ]+std *[0-9a-f]+: ff 90 90 90 90 90[ ]+calll[ ]+\*-0x6f6f6f70\(%eax\) - *[0-9a-f]+: 0f 00 90 90 90 90 90[ ]+lldt[ ]+-0x6f6f6f70\(%eax\) + *[0-9a-f]+: 0f 00 90 90 90 90 90[ ]+lldtw[ ]+-0x6f6f6f70\(%eax\) *[0-9a-f]+: 0f 01 90 90 90 90 90[ ]+lgdtl[ ]+-0x6f6f6f70\(%eax\) *[0-9a-f]+: 0f 02 90 90 90 90 90[ ]+larl[ ]+-0x6f6f6f70\(%eax\),%edx *[0-9a-f]+: 0f 03 90 90 90 90 90[ ]+lsll[ ]+-0x6f6f6f70\(%eax\),%edx diff --git a/gas/testsuite/gas/i386/opcode.d b/gas/testsuite/gas/i386/opcode.d index c6ffb018a19..7631195d8d4 100644 --- a/gas/testsuite/gas/i386/opcode.d +++ b/gas/testsuite/gas/i386/opcode.d @@ -101,7 +101,7 @@ Disassembly of section .text: 123: 60 [ ]*pusha 124: 61 [ ]*popa 125: 62 90 90 90 90 90 [ ]*bound %edx,-0x6f6f6f70\(%eax\) - 12b: 63 90 90 90 90 90 [ ]*arpl %dx,-0x6f6f6f70\(%eax\) + 12b: 63 90 90 90 90 90 [ ]*arpl %edx,-0x6f6f6f70\(%eax\) 131: 68 90 90 90 90 [ ]*push \$0x90909090 136: 69 90 90 90 90 90 90 90 90 90 [ ]*imul \$0x90909090,-0x6f6f6f70\(%eax\),%edx 140: 6a 90 [ ]*push \$0xffffff90 diff --git a/gas/testsuite/gas/i386/optimize-1.d b/gas/testsuite/gas/i386/optimize-1.d index f6c54b7c4a5..23d715c27d5 100644 --- a/gas/testsuite/gas/i386/optimize-1.d +++ b/gas/testsuite/gas/i386/optimize-1.d @@ -147,6 +147,21 @@ Disassembly of section .text: +[a-f0-9]+: 62 .* vporq 0x80\(%eax\),%ymm2,%ymm3 +[a-f0-9]+: 62 .* vpxord 0x80\(%eax\),%ymm2,%ymm3 +[a-f0-9]+: 62 .* vpxorq 0x80\(%eax\),%ymm2,%ymm3 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c5 .* vpxor %ymm2,%ymm2,%ymm0 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c5 .* vpxor %ymm2,%ymm2,%ymm0 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c5 .* vpxor %ymm2,%ymm2,%ymm0 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c5 .* vpxor %ymm2,%ymm2,%ymm0 +[a-f0-9]+: 0f ba e0 0f bt \$0xf,%eax +[a-f0-9]+: 66 0f ba e0 10 bt \$0x10,%ax +[a-f0-9]+: 0f ba f8 0f btc \$0xf,%eax diff --git a/gas/testsuite/gas/i386/optimize-1.s b/gas/testsuite/gas/i386/optimize-1.s index 53a0dd7aec3..e253142db0c 100644 --- a/gas/testsuite/gas/i386/optimize-1.s +++ b/gas/testsuite/gas/i386/optimize-1.s @@ -171,6 +171,25 @@ _start: vpxord 128(%eax), %ymm2, %ymm3 vpxorq 128(%eax), %ymm2, %ymm3 + pcmpgtb %mm2, %mm2 + pcmpgtb %xmm2, %xmm2 + vpcmpgtb %xmm2, %xmm2, %xmm0 + vpcmpgtb %ymm2, %ymm2, %ymm0 + + pcmpgtw %mm2, %mm2 + pcmpgtw %xmm2, %xmm2 + vpcmpgtw %xmm2, %xmm2, %xmm0 + vpcmpgtw %ymm2, %ymm2, %ymm0 + + pcmpgtd %mm2, %mm2 + pcmpgtd %xmm2, %xmm2 + vpcmpgtd %xmm2, %xmm2, %xmm0 + vpcmpgtd %ymm2, %ymm2, %ymm0 + + pcmpgtq %xmm2, %xmm2 + vpcmpgtq %xmm2, %xmm2, %xmm0 + vpcmpgtq %ymm2, %ymm2, %ymm0 + bt $15, %ax bt $16, %ax btc $15, %ax diff --git a/gas/testsuite/gas/i386/optimize-1a.d b/gas/testsuite/gas/i386/optimize-1a.d index d0bf1b4c796..33c647bf5c6 100644 --- a/gas/testsuite/gas/i386/optimize-1a.d +++ b/gas/testsuite/gas/i386/optimize-1a.d @@ -148,6 +148,21 @@ Disassembly of section .text: +[a-f0-9]+: 62 .* vporq 0x80\(%eax\),%ymm2,%ymm3 +[a-f0-9]+: 62 .* vpxord 0x80\(%eax\),%ymm2,%ymm3 +[a-f0-9]+: 62 .* vpxorq 0x80\(%eax\),%ymm2,%ymm3 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c5 .* vpxor %ymm2,%ymm2,%ymm0 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c5 .* vpxor %ymm2,%ymm2,%ymm0 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c5 .* vpxor %ymm2,%ymm2,%ymm0 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c5 .* vpxor %ymm2,%ymm2,%ymm0 +[a-f0-9]+: 0f ba e0 0f bt \$0xf,%eax +[a-f0-9]+: 66 0f ba e0 10 bt \$0x10,%ax +[a-f0-9]+: 0f ba f8 0f btc \$0xf,%eax diff --git a/gas/testsuite/gas/i386/optimize-2.d b/gas/testsuite/gas/i386/optimize-2.d index 571059e8cfe..41056fb6ef1 100644 --- a/gas/testsuite/gas/i386/optimize-2.d +++ b/gas/testsuite/gas/i386/optimize-2.d @@ -161,4 +161,8 @@ Disassembly of section .text: +[a-f0-9]+: 62 .* vporq \(%eax\)\{1to2\},%xmm2,%xmm3 +[a-f0-9]+: 62 .* vpxord \(%eax\)\{1to4\},%xmm2,%xmm3 +[a-f0-9]+: 62 .* vpxorq \(%eax\)\{1to4\},%ymm2,%ymm3 + +[a-f0-9]+: 66 .* pcmpeqd %xmm2,%xmm2 + +[a-f0-9]+: c5 .* vpcmpeqd %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c5 .* vpcmpeqd %ymm2,%ymm2,%ymm0 + +[a-f0-9]+: c5 .* vpunpcklqdq %xmm2,%xmm2,%xmm0 #pass diff --git a/gas/testsuite/gas/i386/optimize-2.s b/gas/testsuite/gas/i386/optimize-2.s index 43af9459a8a..29399ae8473 100644 --- a/gas/testsuite/gas/i386/optimize-2.s +++ b/gas/testsuite/gas/i386/optimize-2.s @@ -180,3 +180,9 @@ _start: vporq (%eax){1to2}, %xmm2, %xmm3 vpxord (%eax){1to4}, %xmm2, %xmm3 vpxorq (%eax){1to4}, %ymm2, %ymm3 + + pcmpeqq %xmm2, %xmm2 + vpcmpeqq %xmm2, %xmm2, %xmm0 + vpcmpeqq %ymm2, %ymm2, %ymm0 + + vpbroadcastq %xmm2, %xmm0 diff --git a/gas/testsuite/gas/i386/optimize-2b.d b/gas/testsuite/gas/i386/optimize-2b.d index 58636885eeb..d9e83198fb6 100644 --- a/gas/testsuite/gas/i386/optimize-2b.d +++ b/gas/testsuite/gas/i386/optimize-2b.d @@ -162,4 +162,8 @@ Disassembly of section .text: +[a-f0-9]+: 62 .* vporq \(%eax\)\{1to2\},%xmm2,%xmm3 +[a-f0-9]+: 62 .* vpxord \(%eax\)\{1to4\},%xmm2,%xmm3 +[a-f0-9]+: 62 .* vpxorq \(%eax\)\{1to4\},%ymm2,%ymm3 + +[a-f0-9]+: 66 .* pcmpeqq %xmm2,%xmm2 + +[a-f0-9]+: c4 .* vpcmpeqq %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c4 .* vpcmpeqq %ymm2,%ymm2,%ymm0 + +[a-f0-9]+: c4 .* vpbroadcastq %xmm2,%xmm0 #pass diff --git a/gas/testsuite/gas/i386/optimize-4.d b/gas/testsuite/gas/i386/optimize-4.d index 092d078706e..fa9b95fe8fe 100644 --- a/gas/testsuite/gas/i386/optimize-4.d +++ b/gas/testsuite/gas/i386/optimize-4.d @@ -147,6 +147,21 @@ Disassembly of section .text: +[a-f0-9]+: 62 .* vporq 0x80\(%eax\),%ymm2,%ymm3 +[a-f0-9]+: 62 .* vpxord 0x80\(%eax\),%ymm2,%ymm3 +[a-f0-9]+: 62 .* vpxorq 0x80\(%eax\),%ymm2,%ymm3 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c5 .* vpxor %ymm2,%ymm2,%ymm0 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c5 .* vpxor %ymm2,%ymm2,%ymm0 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c5 .* vpxor %ymm2,%ymm2,%ymm0 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c5 .* vpxor %ymm2,%ymm2,%ymm0 +[a-f0-9]+: 0f ba e0 0f bt \$0xf,%eax +[a-f0-9]+: 66 0f ba e0 10 bt \$0x10,%ax +[a-f0-9]+: 0f ba f8 0f btc \$0xf,%eax diff --git a/gas/testsuite/gas/i386/optimize-5.d b/gas/testsuite/gas/i386/optimize-5.d index 1d1397be9b2..36d0ba96e54 100644 --- a/gas/testsuite/gas/i386/optimize-5.d +++ b/gas/testsuite/gas/i386/optimize-5.d @@ -147,6 +147,21 @@ Disassembly of section .text: +[a-f0-9]+: 62 .* vporq 0x80\(%eax\),%ymm2,%ymm3 +[a-f0-9]+: 62 .* vpxord 0x80\(%eax\),%ymm2,%ymm3 +[a-f0-9]+: 62 .* vpxorq 0x80\(%eax\),%ymm2,%ymm3 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c5 .* vpxor %ymm2,%ymm2,%ymm0 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c5 .* vpxor %ymm2,%ymm2,%ymm0 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c5 .* vpxor %ymm2,%ymm2,%ymm0 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c5 .* vpxor %ymm2,%ymm2,%ymm0 +[a-f0-9]+: 0f ba e0 0f bt \$0xf,%eax +[a-f0-9]+: 66 0f ba e0 10 bt \$0x10,%ax +[a-f0-9]+: 0f ba f8 0f btc \$0xf,%eax diff --git a/gas/testsuite/gas/i386/x86-64-disassem.d b/gas/testsuite/gas/i386/x86-64-disassem.d index 6e4dd91fccd..2de30e295b6 100644 --- a/gas/testsuite/gas/i386/x86-64-disassem.d +++ b/gas/testsuite/gas/i386/x86-64-disassem.d @@ -8,309 +8,309 @@ Disassembly of section \.text: 0+ <\.text>: -[ ]*[a-f0-9]+:[ ]*ff[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*ff[ ]+ljmp[ ]*\(bad\) [ ]*[a-f0-9]+:[ ]*ef[ ]*out %eax,\(%dx\) -[ ]*[a-f0-9]+:[ ]*ff[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*ff[ ]+lcall[ ]*\(bad\) [ ]*[a-f0-9]+:[ ]*d8 90 90 90 90 90[ ]*fcoms -0x6f6f6f70\(%rax\) -[ ]*[a-f0-9]+:[ ]*c5 ec 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 4a[ ]+kaddw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ec 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 4a[ ]+kaddw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ec 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 4a[ ]+kaddw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 ed 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 4a[ ]+kaddb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ed 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 4a[ ]+kaddb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ed 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 4a[ ]+kaddb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4a[ ]+kaddq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4a[ ]+kaddq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4a[ ]+kaddq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 4a[ ]+kaddd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 4a[ ]+kaddd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 4a[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 4a[ ]+kaddd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 ec 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 41[ ]+kandw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ec 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 41[ ]+kandw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ec 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 41[ ]+kandw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 ed 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 41[ ]+kandb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ed 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 41[ ]+kandb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ed 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 41[ ]+kandb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 41[ ]+kandq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 41[ ]+kandq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 41[ ]+kandq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 41[ ]+kandd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 41[ ]+kandd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 41[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 41[ ]+kandd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 ec 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 42[ ]+kandnw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ec 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 42[ ]+kandnw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ec 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 42[ ]+kandnw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 ed 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 42[ ]+kandnb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ed 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 42[ ]+kandnb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ed 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 42[ ]+kandnb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 42[ ]+kandnq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 42[ ]+kandnq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 42[ ]+kandnq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 42[ ]+kandnd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 42[ ]+kandnd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 42[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 42[ ]+kandnd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 ec 4b[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 4b[ ]+kunpckwd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ec 4b[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 4b[ ]+kunpckwd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ec 4b[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 4b[ ]+kunpckwd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 ed 4b[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 4b[ ]+kunpckbw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ed 4b[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 4b[ ]+kunpckbw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ed 4b[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 4b[ ]+kunpckbw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4b[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4b[ ]+kunpckdq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4b[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4b[ ]+kunpckdq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4b[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 4b[ ]+kunpckdq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 f8 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 44[ ]+knotw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 f8 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 44[ ]+knotw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 f8 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 44[ ]+knotw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 f9 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 44[ ]+knotb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 f9 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 44[ ]+knotb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 f9 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 44[ ]+knotb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c4 e1 f8 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f8 44[ ]+knotq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 f8 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f8 44[ ]+knotq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 f8 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f8 44[ ]+knotq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c4 e1 f9 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f9 44[ ]+knotd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 f9 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f9 44[ ]+knotd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 f9 44[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f9 44[ ]+knotd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 ec 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 45[ ]+korw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ec 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 45[ ]+korw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ec 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 45[ ]+korw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 ed 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 45[ ]+korb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ed 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 45[ ]+korb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ed 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 45[ ]+korb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 45[ ]+korq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 45[ ]+korq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 45[ ]+korq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 45[ ]+kord[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 45[ ]+kord[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 45[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 45[ ]+kord[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 f8 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 98[ ]+kortestw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 f8 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 98[ ]+kortestw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 f8 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 98[ ]+kortestw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 f9 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 98[ ]+kortestb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 f9 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 98[ ]+kortestb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 f9 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 98[ ]+kortestb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c4 e1 f8 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f8 98[ ]+kortestq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 f8 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f8 98[ ]+kortestq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 f8 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f8 98[ ]+kortestq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c4 e1 f9 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f9 98[ ]+kortestd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 f9 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f9 98[ ]+kortestd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 f9 98[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f9 98[ ]+kortestd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 ec 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 46[ ]+kxnorw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ec 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 46[ ]+kxnorw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ec 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 46[ ]+kxnorw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 ed 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 46[ ]+kxnorb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ed 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 46[ ]+kxnorb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ed 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 46[ ]+kxnorb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 46[ ]+kxnorq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 46[ ]+kxnorq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 46[ ]+kxnorq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 46[ ]+kxnord[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 46[ ]+kxnord[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 46[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 46[ ]+kxnord[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 ec 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 47[ ]+kxorw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ec 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 47[ ]+kxorw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ec 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ec 47[ ]+kxorw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 ed 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 47[ ]+kxorb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 ed 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 47[ ]+kxorb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 ed 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 ed 47[ ]+kxorb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 47[ ]+kxorq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 47[ ]+kxorq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ec 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ec 47[ ]+kxorq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 47[ ]+kxord[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 47[ ]+kxord[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 ed 47[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 ed 47[ ]+kxord[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 f8 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 99[ ]+ktestw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 f8 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 99[ ]+ktestw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 f8 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 99[ ]+ktestw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 f9 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 99[ ]+ktestb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 f9 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 99[ ]+ktestb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 f9 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 99[ ]+ktestb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c4 e1 f8 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f8 99[ ]+ktestq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 f8 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f8 99[ ]+ktestq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 f8 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f8 99[ ]+ktestq[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c4 e1 f9 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f9 99[ ]+ktestd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c4 e1 f9 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f9 99[ ]+ktestd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c4 e1 f9 99[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e1 f9 99[ ]+ktestd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 30[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*8f 01[ ]*pop \(%rcx\) -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 30[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*6a 01[ ]*push \$0x1 -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 30[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*04 01[ ]*add \$0x1,%al -[ ]*[a-f0-9]+:[ ]*c4 e3 79 30[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*8f 01[ ]*pop \(%rcx\) -[ ]*[a-f0-9]+:[ ]*c4 e3 79 30[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*6a 01[ ]*push \$0x1 -[ ]*[a-f0-9]+:[ ]*c4 e3 79 30[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*04 01[ ]*add \$0x1,%al -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 31[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*8f 01[ ]*pop \(%rcx\) -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 31[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*6a 01[ ]*push \$0x1 -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 31[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*04 01[ ]*add \$0x1,%al -[ ]*[a-f0-9]+:[ ]*c4 e3 79 31[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*8f 01[ ]*pop \(%rcx\) -[ ]*[a-f0-9]+:[ ]*c4 e3 79 31[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*6a 01[ ]*push \$0x1 -[ ]*[a-f0-9]+:[ ]*c4 e3 79 31[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*04 01[ ]*add \$0x1,%al -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 32[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*8f 01[ ]*pop \(%rcx\) -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 32[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*6a 01[ ]*push \$0x1 -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 32[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*04 01[ ]*add \$0x1,%al -[ ]*[a-f0-9]+:[ ]*c4 e3 79 32[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*8f 01[ ]*pop \(%rcx\) -[ ]*[a-f0-9]+:[ ]*c4 e3 79 32[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*6a 01[ ]*push \$0x1 -[ ]*[a-f0-9]+:[ ]*c4 e3 79 32[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*04 01[ ]*add \$0x1,%al -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 33[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*8f 01[ ]*pop \(%rcx\) -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 33[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*6a 01[ ]*push \$0x1 -[ ]*[a-f0-9]+:[ ]*c4 e3 f9 33[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*04 01[ ]*add \$0x1,%al -[ ]*[a-f0-9]+:[ ]*c4 e3 79 33[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*8f 01[ ]*pop \(%rcx\) -[ ]*[a-f0-9]+:[ ]*c4 e3 79 33[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*6a 01[ ]*push \$0x1 -[ ]*[a-f0-9]+:[ ]*c4 e3 79 33[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*04 01[ ]*add \$0x1,%al -[ ]*[a-f0-9]+:[ ]*c5 f8 92[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 30 8f[ ]+kshiftrw[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 30 6a[ ]+kshiftrw[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 30 04[ ]+kshiftrw[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 79 30 8f[ ]+kshiftrb[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 79 30 6a[ ]+kshiftrb[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 79 30 04[ ]+kshiftrb[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 31 8f[ ]+kshiftrq[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 31 6a[ ]+kshiftrq[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 31 04[ ]+kshiftrq[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 79 31 8f[ ]+kshiftrd[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 79 31 6a[ ]+kshiftrd[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 79 31 04[ ]+kshiftrd[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 32 8f[ ]+kshiftlw[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 32 6a[ ]+kshiftlw[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 32 04[ ]+kshiftlw[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 79 32 8f[ ]+kshiftlb[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 79 32 6a[ ]+kshiftlb[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 79 32 04[ ]+kshiftlb[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 33 8f[ ]+kshiftlq[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 33 6a[ ]+kshiftlq[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 f9 33 04[ ]+kshiftlq[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 79 33 8f[ ]+kshiftld[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 79 33 6a[ ]+kshiftld[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c4 e3 79 33 04[ ]+kshiftld[ ]*\$0x[0-9a-f]*,\(bad\),.* +[ ]*[a-f0-9]+:[ ]*07[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 92[ ]+kmovw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 f8 92[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 92[ ]+kmovw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 f8 92[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 92[ ]+kmovw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 f9 92[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 92[ ]+kmovb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 f9 92[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 92[ ]+kmovb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 f9 92[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 92[ ]+kmovb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 fb 92[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 fb 92[ ]+kmovd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 fb 92[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 fb 92[ ]+kmovd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 fb 92[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 fb 92[ ]+kmovd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) [ ]*[a-f0-9]+:[ ]*c4 e1 f9 92[ ]*\(bad\) [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait @@ -318,23 +318,23 @@ Disassembly of section \.text: [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) [ ]*[a-f0-9]+:[ ]*c4 e1 f9 92[ ]*\(bad\) [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 f8 93[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 93[ ]+kmovw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 f8 93[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 93[ ]+kmovw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 f8 93[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f8 93[ ]+kmovw[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 f9 93[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 93[ ]+kmovb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 f9 93[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 93[ ]+kmovb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 f9 93[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 f9 93[ ]+kmovb[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) -[ ]*[a-f0-9]+:[ ]*c5 fb 93[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 fb 93[ ]+kmovd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait -[ ]*[a-f0-9]+:[ ]*c5 fb 93[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 fb 93[ ]+kmovd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*6f[ ]*outsl %ds:\(%rsi\),\(%dx\) -[ ]*[a-f0-9]+:[ ]*c5 fb 93[ ]*\(bad\) +[ ]*[a-f0-9]+:[ ]*c5 fb 93[ ]+kmovd[ ]*\(bad\),.* [ ]*[a-f0-9]+:[ ]*3f[ ]*\(bad\) [ ]*[a-f0-9]+:[ ]*c4 e1 f9 93[ ]*\(bad\) [ ]*[a-f0-9]+:[ ]*9b[ ]*fwait diff --git a/gas/testsuite/gas/i386/x86-64-disassem.s b/gas/testsuite/gas/i386/x86-64-disassem.s index ff049045bcd..4f151bf7333 100644 --- a/gas/testsuite/gas/i386/x86-64-disassem.s +++ b/gas/testsuite/gas/i386/x86-64-disassem.s @@ -119,30 +119,30 @@ .byte 0xC4, 0xE1, 0xF9, 0x99, 0x9B .byte 0xC4, 0xE1, 0xF9, 0x99, 0x6F .insn VEX.L0.66.0f.W1 0x99, (%rdi), %k7 -.byte 0xC4, 0xE3, 0xF9, 0x30, 0x8F, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x30, 0x6A, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x30, 0x04, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x30, 0x8F, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x30, 0x6A, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x30, 0x04, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x31, 0x8F, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x31, 0x6A, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x31, 0x04, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x31, 0x8F, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x31, 0x6A, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x31, 0x04, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x32, 0x8F, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x32, 0x6A, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x32, 0x04, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x32, 0x8F, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x32, 0x6A, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x32, 0x04, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x33, 0x8F, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x33, 0x6A, 0x01 -.byte 0xC4, 0xE3, 0xF9, 0x33, 0x04, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x33, 0x8F, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x33, 0x6A, 0x01 -.byte 0xC4, 0xE3, 0x79, 0x33, 0x04, 0x01 +.byte 0xC4, 0xE3, 0xF9, 0x30, 0x8F, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x30, 0x6A, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x30, 0x04, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x30, 0x8F, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x30, 0x6A, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x30, 0x04, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x31, 0x8F, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x31, 0x6A, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x31, 0x04, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x31, 0x8F, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x31, 0x6A, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x31, 0x04, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x32, 0x8F, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x32, 0x6A, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x32, 0x04, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x32, 0x8F, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x32, 0x6A, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x32, 0x04, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x33, 0x8F, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x33, 0x6A, 0x07 +.byte 0xC4, 0xE3, 0xF9, 0x33, 0x04, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x33, 0x8F, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x33, 0x6A, 0x07 +.byte 0xC4, 0xE3, 0x79, 0x33, 0x04, 0x07 .byte 0xC5, 0xF8, 0x92, 0x9B .byte 0xC5, 0xF8, 0x92, 0x6F .insn VEX.L0.NP.0f.W0 0x92, (%rdi), %k7 diff --git a/gas/testsuite/gas/i386/x86-64-lkgs-intel.d b/gas/testsuite/gas/i386/x86-64-lkgs-intel.d index 0f4a6fba6d3..b981ad502c2 100644 --- a/gas/testsuite/gas/i386/x86-64-lkgs-intel.d +++ b/gas/testsuite/gas/i386/x86-64-lkgs-intel.d @@ -8,16 +8,16 @@ Disassembly of section \.text: 0+ <_start>: -\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs r12w -\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs r12w -\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs r12w +\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs r12d +\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs r12d +\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs r12d \s*[a-f0-9]+:\s*f2 42 0f 00 b4 f5 00 00 00 10\s+lkgs WORD PTR \[rbp\+r14\*8\+0x10000000\] \s*[a-f0-9]+:\s*f2 41 0f 00 31\s+lkgs WORD PTR \[r9\] \s*[a-f0-9]+:\s*f2 0f 00 b1 fe 00 00 00\s+lkgs WORD PTR \[rcx\+0xfe\] \s*[a-f0-9]+:\s*f2 0f 00 b2 00 ff ff ff\s+lkgs WORD PTR \[rdx-0x100\] -\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs r12w -\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs r12w -\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs r12w +\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs r12d +\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs r12d +\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs r12d \s*[a-f0-9]+:\s*f2 42 0f 00 b4 f5 00 00 00 10\s+lkgs WORD PTR \[rbp\+r14\*8\+0x10000000\] \s*[a-f0-9]+:\s*f2 41 0f 00 31\s+lkgs WORD PTR \[r9\] \s*[a-f0-9]+:\s*f2 0f 00 b1 fe 00 00 00\s+lkgs WORD PTR \[rcx\+0xfe\] diff --git a/gas/testsuite/gas/i386/x86-64-lkgs.d b/gas/testsuite/gas/i386/x86-64-lkgs.d index 207143da574..60af3c451d7 100644 --- a/gas/testsuite/gas/i386/x86-64-lkgs.d +++ b/gas/testsuite/gas/i386/x86-64-lkgs.d @@ -8,16 +8,16 @@ Disassembly of section \.text: 0+ <_start>: -\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs %r12w -\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs %r12w -\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs %r12w +\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs %r12d +\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs %r12d +\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs %r12d \s*[a-f0-9]+:\s*f2 42 0f 00 b4 f5 00 00 00 10\s+lkgs 0x10000000\(%rbp,%r14,8\) \s*[a-f0-9]+:\s*f2 41 0f 00 31\s+lkgs \(%r9\) \s*[a-f0-9]+:\s*f2 0f 00 b1 fe 00 00 00\s+lkgs 0xfe\(%rcx\) \s*[a-f0-9]+:\s*f2 0f 00 b2 00 ff ff ff\s+lkgs -0x100\(%rdx\) -\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs %r12w -\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs %r12w -\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs %r12w +\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs %r12d +\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs %r12d +\s*[a-f0-9]+:\s*f2 41 0f 00 f4\s+lkgs %r12d \s*[a-f0-9]+:\s*f2 42 0f 00 b4 f5 00 00 00 10\s+lkgs 0x10000000\(%rbp,%r14,8\) \s*[a-f0-9]+:\s*f2 41 0f 00 31\s+lkgs \(%r9\) \s*[a-f0-9]+:\s*f2 0f 00 b1 fe 00 00 00\s+lkgs 0xfe\(%rcx\) diff --git a/gas/testsuite/gas/i386/x86-64-optimize-2.d b/gas/testsuite/gas/i386/x86-64-optimize-2.d index cb6b81537be..87bf3edfbaa 100644 --- a/gas/testsuite/gas/i386/x86-64-optimize-2.d +++ b/gas/testsuite/gas/i386/x86-64-optimize-2.d @@ -203,4 +203,23 @@ Disassembly of section .text: +[a-f0-9]+: 62 .* vporq 0x80\(%rax\),%ymm2,%ymm3 +[a-f0-9]+: 62 .* vpxord 0x80\(%rax\),%ymm2,%ymm3 +[a-f0-9]+: 62 .* vpxorq 0x80\(%rax\),%ymm2,%ymm3 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: 66 .* pxor %xmm12,%xmm12 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8 + +[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: 66 .* pxor %xmm12,%xmm12 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8 + +[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: 66 .* pxor %xmm12,%xmm12 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8 + +[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: 66 .* pxor %xmm12,%xmm12 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8 + +[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1 #pass diff --git a/gas/testsuite/gas/i386/x86-64-optimize-2.s b/gas/testsuite/gas/i386/x86-64-optimize-2.s index 22dbd1ce469..3d16a7875a3 100644 --- a/gas/testsuite/gas/i386/x86-64-optimize-2.s +++ b/gas/testsuite/gas/i386/x86-64-optimize-2.s @@ -226,3 +226,26 @@ _start: vporq 128(%rax), %ymm2, %ymm3 vpxord 128(%rax), %ymm2, %ymm3 vpxorq 128(%rax), %ymm2, %ymm3 + + pcmpgtb %mm2, %mm2 + pcmpgtb %xmm2, %xmm2 + pcmpgtb %xmm12, %xmm12 + vpcmpgtb %xmm2, %xmm2, %xmm8 + vpcmpgtb %ymm12, %ymm12, %ymm1 + + pcmpgtw %mm2, %mm2 + pcmpgtw %xmm2, %xmm2 + pcmpgtw %xmm12, %xmm12 + vpcmpgtw %xmm2, %xmm2, %xmm8 + vpcmpgtw %ymm12, %ymm12, %ymm1 + + pcmpgtd %mm2, %mm2 + pcmpgtd %xmm2, %xmm2 + pcmpgtd %xmm12, %xmm12 + vpcmpgtd %xmm2, %xmm2, %xmm8 + vpcmpgtd %ymm12, %ymm12, %ymm1 + + pcmpgtq %xmm2, %xmm2 + pcmpgtq %xmm12, %xmm12 + vpcmpgtq %xmm2, %xmm2, %xmm8 + vpcmpgtq %ymm12, %ymm12, %ymm1 diff --git a/gas/testsuite/gas/i386/x86-64-optimize-2a.d b/gas/testsuite/gas/i386/x86-64-optimize-2a.d index 70a8ff31475..f12507b8f55 100644 --- a/gas/testsuite/gas/i386/x86-64-optimize-2a.d +++ b/gas/testsuite/gas/i386/x86-64-optimize-2a.d @@ -204,4 +204,23 @@ Disassembly of section .text: +[a-f0-9]+: 62 .* vporq 0x80\(%rax\),%ymm2,%ymm3 +[a-f0-9]+: 62 .* vpxord 0x80\(%rax\),%ymm2,%ymm3 +[a-f0-9]+: 62 .* vpxorq 0x80\(%rax\),%ymm2,%ymm3 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: 66 .* pxor %xmm12,%xmm12 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8 + +[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: 66 .* pxor %xmm12,%xmm12 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8 + +[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: 66 .* pxor %xmm12,%xmm12 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8 + +[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: 66 .* pxor %xmm12,%xmm12 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8 + +[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1 #pass diff --git a/gas/testsuite/gas/i386/x86-64-optimize-2b.d b/gas/testsuite/gas/i386/x86-64-optimize-2b.d index 1d815699afc..e572491a9da 100644 --- a/gas/testsuite/gas/i386/x86-64-optimize-2b.d +++ b/gas/testsuite/gas/i386/x86-64-optimize-2b.d @@ -203,4 +203,23 @@ Disassembly of section .text: +[a-f0-9]+: 62 .* vporq 0x80\(%rax\),%ymm2,%ymm3 +[a-f0-9]+: 62 .* vpxord 0x80\(%rax\),%ymm2,%ymm3 +[a-f0-9]+: 62 .* vpxorq 0x80\(%rax\),%ymm2,%ymm3 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: 66 .* pxor %xmm12,%xmm12 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8 + +[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: 66 .* pxor %xmm12,%xmm12 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8 + +[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: 66 .* pxor %xmm12,%xmm12 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8 + +[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: 66 .* pxor %xmm12,%xmm12 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8 + +[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1 #pass diff --git a/gas/testsuite/gas/i386/x86-64-optimize-3.d b/gas/testsuite/gas/i386/x86-64-optimize-3.d index 26122dd4e1e..23b9305d25c 100644 --- a/gas/testsuite/gas/i386/x86-64-optimize-3.d +++ b/gas/testsuite/gas/i386/x86-64-optimize-3.d @@ -199,4 +199,12 @@ Disassembly of section .text: +[a-f0-9]+: 62 .* vporq \(%rax\)\{1to2\},%xmm2,%xmm3 +[a-f0-9]+: 62 .* vpxord \(%rax\)\{1to4\},%xmm2,%xmm3 +[a-f0-9]+: 62 .* vpxorq \(%rax\)\{1to4\},%ymm2,%ymm3 + +[a-f0-9]+: 66 .* pcmpeqd %xmm2,%xmm2 + +[a-f0-9]+: c5 .* vpcmpeqd %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c5 .* vpcmpeqd %ymm2,%ymm2,%ymm0 + +[a-f0-9]+: 66 .* pcmpeqd %xmm12,%xmm12 + +[a-f0-9]+: c4 .* vpcmpeqq %xmm12,%xmm12,%xmm0 + +[a-f0-9]+: c4 .* vpcmpeqq %ymm12,%ymm12,%ymm0 + +[a-f0-9]+: c5 .* vpunpcklqdq %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c4 .* vpbroadcastq %xmm12,%xmm0 #pass diff --git a/gas/testsuite/gas/i386/x86-64-optimize-3.s b/gas/testsuite/gas/i386/x86-64-optimize-3.s index cbfed3bdf47..bab99cf1eae 100644 --- a/gas/testsuite/gas/i386/x86-64-optimize-3.s +++ b/gas/testsuite/gas/i386/x86-64-optimize-3.s @@ -221,3 +221,14 @@ _start: vporq (%rax){1to2}, %xmm2, %xmm3 vpxord (%rax){1to4}, %xmm2, %xmm3 vpxorq (%rax){1to4}, %ymm2, %ymm3 + + pcmpeqq %xmm2, %xmm2 + vpcmpeqq %xmm2, %xmm2, %xmm0 + vpcmpeqq %ymm2, %ymm2, %ymm0 + + pcmpeqq %xmm12, %xmm12 + vpcmpeqq %xmm12, %xmm12, %xmm0 + vpcmpeqq %ymm12, %ymm12, %ymm0 + + vpbroadcastq %xmm2, %xmm0 + vpbroadcastq %xmm12, %xmm0 diff --git a/gas/testsuite/gas/i386/x86-64-optimize-3b.d b/gas/testsuite/gas/i386/x86-64-optimize-3b.d index 00b65f3d8b2..929c6f70e8b 100644 --- a/gas/testsuite/gas/i386/x86-64-optimize-3b.d +++ b/gas/testsuite/gas/i386/x86-64-optimize-3b.d @@ -200,4 +200,12 @@ Disassembly of section .text: +[a-f0-9]+: 62 .* vporq \(%rax\)\{1to2\},%xmm2,%xmm3 +[a-f0-9]+: 62 .* vpxord \(%rax\)\{1to4\},%xmm2,%xmm3 +[a-f0-9]+: 62 .* vpxorq \(%rax\)\{1to4\},%ymm2,%ymm3 + +[a-f0-9]+: 66 .* pcmpeqq %xmm2,%xmm2 + +[a-f0-9]+: c4 .* vpcmpeqq %xmm2,%xmm2,%xmm0 + +[a-f0-9]+: c4 .* vpcmpeqq %ymm2,%ymm2,%ymm0 + +[a-f0-9]+: 66 .* pcmpeqq %xmm12,%xmm12 + +[a-f0-9]+: c4 .* vpcmpeqq %xmm12,%xmm12,%xmm0 + +[a-f0-9]+: c4 .* vpcmpeqq %ymm12,%ymm12,%ymm0 + +[a-f0-9]+: c4 .* vpbroadcastq %xmm2,%xmm0 + +[a-f0-9]+: c4 .* vpbroadcastq %xmm12,%xmm0 #pass diff --git a/gas/testsuite/gas/i386/x86-64-optimize-5.d b/gas/testsuite/gas/i386/x86-64-optimize-5.d index 9fd0ec2aa37..5b272aa0945 100644 --- a/gas/testsuite/gas/i386/x86-64-optimize-5.d +++ b/gas/testsuite/gas/i386/x86-64-optimize-5.d @@ -203,6 +203,25 @@ Disassembly of section .text: +[a-f0-9]+: 62 .* vporq 0x80\(%rax\),%ymm2,%ymm3 +[a-f0-9]+: 62 .* vpxord 0x80\(%rax\),%ymm2,%ymm3 +[a-f0-9]+: 62 .* vpxorq 0x80\(%rax\),%ymm2,%ymm3 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: 66 .* pxor %xmm12,%xmm12 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8 + +[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: 66 .* pxor %xmm12,%xmm12 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8 + +[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: 66 .* pxor %xmm12,%xmm12 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8 + +[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: 66 .* pxor %xmm12,%xmm12 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8 + +[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1 +[a-f0-9]+: 62 f1 f5 08 55 e9 \{evex\} vandnpd %xmm1,%xmm1,%xmm5 +[a-f0-9]+: 62 f1 f5 08 55 e9 \{evex\} vandnpd %xmm1,%xmm1,%xmm5 +[a-f0-9]+: 62 f1 7d 28 6f d1 vmovdqa32 %ymm1,%ymm2 diff --git a/gas/testsuite/gas/i386/x86-64-optimize-6.d b/gas/testsuite/gas/i386/x86-64-optimize-6.d index 6cacaf9d783..48105c3063e 100644 --- a/gas/testsuite/gas/i386/x86-64-optimize-6.d +++ b/gas/testsuite/gas/i386/x86-64-optimize-6.d @@ -203,6 +203,25 @@ Disassembly of section .text: +[a-f0-9]+: 62 .* vporq 0x80\(%rax\),%ymm2,%ymm3 +[a-f0-9]+: 62 .* vpxord 0x80\(%rax\),%ymm2,%ymm3 +[a-f0-9]+: 62 .* vpxorq 0x80\(%rax\),%ymm2,%ymm3 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: 66 .* pxor %xmm12,%xmm12 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8 + +[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: 66 .* pxor %xmm12,%xmm12 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8 + +[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1 + +[a-f0-9]+: 0f .* pxor %mm2,%mm2 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: 66 .* pxor %xmm12,%xmm12 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8 + +[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1 + +[a-f0-9]+: 66 .* pxor %xmm2,%xmm2 + +[a-f0-9]+: 66 .* pxor %xmm12,%xmm12 + +[a-f0-9]+: c5 .* vpxor %xmm2,%xmm2,%xmm8 + +[a-f0-9]+: c5 .* vpxor %ymm0,%ymm0,%ymm1 +[a-f0-9]+: 62 f1 f5 08 55 e9 \{evex\} vandnpd %xmm1,%xmm1,%xmm5 +[a-f0-9]+: 62 f1 f5 08 55 e9 \{evex\} vandnpd %xmm1,%xmm1,%xmm5 +[a-f0-9]+: 62 f1 7d 28 6f d1 vmovdqa32 %ymm1,%ymm2 diff --git a/gas/testsuite/gas/i386/x86-64.exp b/gas/testsuite/gas/i386/x86-64.exp index 48ec9c21929..52711cdcf6f 100644 --- a/gas/testsuite/gas/i386/x86-64.exp +++ b/gas/testsuite/gas/i386/x86-64.exp @@ -437,7 +437,19 @@ run_dump_test "x86-64-amx-complex-bad" run_list_test "x86-64-amx-complex-inval" run_dump_test "x86-64-fred" run_dump_test "x86-64-lkgs" +run_dump_test "x86-64-lkgs-intel" run_list_test "x86-64-lkgs-inval" +run_dump_test "x86-64-avx-vnni-int16" +run_dump_test "x86-64-avx-vnni-int16-intel" +run_dump_test "x86-64-sha512" +run_dump_test "x86-64-sha512-intel" +run_list_test "x86-64-sha512-inval" +run_dump_test "x86-64-sm3" +run_dump_test "x86-64-sm3-intel" +run_dump_test "x86-64-sm4" +run_dump_test "x86-64-sm4-intel" +run_dump_test "x86-64-pbndkb" +run_dump_test "x86-64-pbndkb-intel" run_dump_test "x86-64-clzero" run_dump_test "x86-64-mwaitx-bdver4" run_list_test "x86-64-mwaitx-reg" @@ -520,6 +532,7 @@ run_dump_test "x86-64-optimize-1" run_dump_test "x86-64-optimize-2" run_dump_test "x86-64-optimize-2a" run_dump_test "x86-64-optimize-2b" +run_dump_test "x86-64-optimize-2c" run_dump_test "x86-64-optimize-3" run_dump_test "x86-64-optimize-3b" run_dump_test "x86-64-optimize-4" diff --git a/gas/testsuite/gas/i386/x86_64-intel.d b/gas/testsuite/gas/i386/x86_64-intel.d index 6b74ae68f96..2a9b7d422ac 100644 --- a/gas/testsuite/gas/i386/x86_64-intel.d +++ b/gas/testsuite/gas/i386/x86_64-intel.d @@ -266,9 +266,9 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 66 0f 02 12 lar dx,WORD PTR \[rdx\] [ ]*[a-f0-9]+: 0f 02 12 lar edx,WORD PTR \[rdx\] [ ]*[a-f0-9]+: 0f 02 12 lar edx,WORD PTR \[rdx\] -[ ]*[a-f0-9]+: 0f 00 d2 lldt dx -[ ]*[a-f0-9]+: 0f 00 d2 lldt dx -[ ]*[a-f0-9]+: 0f 00 d2 lldt dx +[ ]*[a-f0-9]+: 0f 00 d2 lldt edx +[ ]*[a-f0-9]+: 0f 00 d2 lldt edx +[ ]*[a-f0-9]+: 0f 00 d2 lldt edx [ ]*[a-f0-9]+: 0f 00 12 lldt (WORD PTR )?\[rdx\] [ ]*[a-f0-9]+: 66 0f 03 d2 lsl dx,dx [ ]*[a-f0-9]+: 0f 03 d2 lsl edx,edx @@ -278,17 +278,17 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 66 0f 03 12 lsl dx,WORD PTR \[rdx\] [ ]*[a-f0-9]+: 0f 03 12 lsl edx,WORD PTR \[rdx\] [ ]*[a-f0-9]+: 0f 03 12 lsl edx,WORD PTR \[rdx\] -[ ]*[a-f0-9]+: 0f 00 da ltr dx -[ ]*[a-f0-9]+: 0f 00 da ltr dx -[ ]*[a-f0-9]+: 0f 00 da ltr dx +[ ]*[a-f0-9]+: 0f 00 da ltr edx +[ ]*[a-f0-9]+: 0f 00 da ltr edx +[ ]*[a-f0-9]+: 0f 00 da ltr edx [ ]*[a-f0-9]+: 0f 00 1a ltr (WORD PTR )?\[rdx\] -[ ]*[a-f0-9]+: 0f 00 e2 verr dx -[ ]*[a-f0-9]+: 0f 00 e2 verr dx -[ ]*[a-f0-9]+: 0f 00 e2 verr dx +[ ]*[a-f0-9]+: 0f 00 e2 verr edx +[ ]*[a-f0-9]+: 0f 00 e2 verr edx +[ ]*[a-f0-9]+: 0f 00 e2 verr edx [ ]*[a-f0-9]+: 0f 00 22 verr (WORD PTR )?\[rdx\] -[ ]*[a-f0-9]+: 0f 00 ea verw dx -[ ]*[a-f0-9]+: 0f 00 ea verw dx -[ ]*[a-f0-9]+: 0f 00 ea verw dx +[ ]*[a-f0-9]+: 0f 00 ea verw edx +[ ]*[a-f0-9]+: 0f 00 ea verw edx +[ ]*[a-f0-9]+: 0f 00 ea verw edx [ ]*[a-f0-9]+: 0f 00 2a verw (WORD PTR )?\[rdx\] [ ]*[a-f0-9]+: 66 0f 02 d2 lar dx,dx [ ]*[a-f0-9]+: 0f 02 d2 lar edx,edx @@ -298,9 +298,9 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 66 0f 02 12 lar dx,WORD PTR \[rdx\] [ ]*[a-f0-9]+: 0f 02 12 lar edx,WORD PTR \[rdx\] [ ]*[a-f0-9]+: 0f 02 12 lar edx,WORD PTR \[rdx\] -[ ]*[a-f0-9]+: 0f 00 d2 lldt dx -[ ]*[a-f0-9]+: 0f 00 d2 lldt dx -[ ]*[a-f0-9]+: 0f 00 d2 lldt dx +[ ]*[a-f0-9]+: 0f 00 d2 lldt edx +[ ]*[a-f0-9]+: 0f 00 d2 lldt edx +[ ]*[a-f0-9]+: 0f 00 d2 lldt edx [ ]*[a-f0-9]+: 0f 00 12 lldt (WORD PTR )?\[rdx\] [ ]*[a-f0-9]+: 0f 00 12 lldt (WORD PTR )?\[rdx\] [ ]*[a-f0-9]+: 66 0f 03 d2 lsl dx,dx @@ -311,19 +311,19 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 66 0f 03 12 lsl dx,WORD PTR \[rdx\] [ ]*[a-f0-9]+: 0f 03 12 lsl edx,WORD PTR \[rdx\] [ ]*[a-f0-9]+: 0f 03 12 lsl edx,WORD PTR \[rdx\] -[ ]*[a-f0-9]+: 0f 00 da ltr dx -[ ]*[a-f0-9]+: 0f 00 da ltr dx -[ ]*[a-f0-9]+: 0f 00 da ltr dx +[ ]*[a-f0-9]+: 0f 00 da ltr edx +[ ]*[a-f0-9]+: 0f 00 da ltr edx +[ ]*[a-f0-9]+: 0f 00 da ltr edx [ ]*[a-f0-9]+: 0f 00 1a ltr (WORD PTR )?\[rdx\] [ ]*[a-f0-9]+: 0f 00 1a ltr (WORD PTR )?\[rdx\] -[ ]*[a-f0-9]+: 0f 00 e2 verr dx -[ ]*[a-f0-9]+: 0f 00 e2 verr dx -[ ]*[a-f0-9]+: 0f 00 e2 verr dx +[ ]*[a-f0-9]+: 0f 00 e2 verr edx +[ ]*[a-f0-9]+: 0f 00 e2 verr edx +[ ]*[a-f0-9]+: 0f 00 e2 verr edx [ ]*[a-f0-9]+: 0f 00 22 verr (WORD PTR )?\[rdx\] [ ]*[a-f0-9]+: 0f 00 22 verr (WORD PTR )?\[rdx\] -[ ]*[a-f0-9]+: 0f 00 ea verw dx -[ ]*[a-f0-9]+: 0f 00 ea verw dx -[ ]*[a-f0-9]+: 0f 00 ea verw dx +[ ]*[a-f0-9]+: 0f 00 ea verw edx +[ ]*[a-f0-9]+: 0f 00 ea verw edx +[ ]*[a-f0-9]+: 0f 00 ea verw edx [ ]*[a-f0-9]+: 0f 00 2a verw (WORD PTR )?\[rdx\] [ ]*[a-f0-9]+: 0f 00 2a verw (WORD PTR )?\[rdx\] #pass diff --git a/gas/testsuite/gas/i386/x86_64.d b/gas/testsuite/gas/i386/x86_64.d index cdfe12ebdb7..aa3866191ba 100644 --- a/gas/testsuite/gas/i386/x86_64.d +++ b/gas/testsuite/gas/i386/x86_64.d @@ -266,9 +266,9 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 66 0f 02 12 lar \(%rdx\),%dx [ ]*[a-f0-9]+: 0f 02 12 lar \(%rdx\),%edx [ ]*[a-f0-9]+: 0f 02 12 lar \(%rdx\),%edx -[ ]*[a-f0-9]+: 0f 00 d2 lldt %dx -[ ]*[a-f0-9]+: 0f 00 d2 lldt %dx -[ ]*[a-f0-9]+: 0f 00 d2 lldt %dx +[ ]*[a-f0-9]+: 0f 00 d2 lldt %edx +[ ]*[a-f0-9]+: 0f 00 d2 lldt %edx +[ ]*[a-f0-9]+: 0f 00 d2 lldt %edx [ ]*[a-f0-9]+: 0f 00 12 lldt \(%rdx\) [ ]*[a-f0-9]+: 66 0f 03 d2 lsl %dx,%dx [ ]*[a-f0-9]+: 0f 03 d2 lsl %edx,%edx @@ -278,17 +278,17 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 66 0f 03 12 lsl \(%rdx\),%dx [ ]*[a-f0-9]+: 0f 03 12 lsl \(%rdx\),%edx [ ]*[a-f0-9]+: 0f 03 12 lsl \(%rdx\),%edx -[ ]*[a-f0-9]+: 0f 00 da ltr %dx -[ ]*[a-f0-9]+: 0f 00 da ltr %dx -[ ]*[a-f0-9]+: 0f 00 da ltr %dx +[ ]*[a-f0-9]+: 0f 00 da ltr %edx +[ ]*[a-f0-9]+: 0f 00 da ltr %edx +[ ]*[a-f0-9]+: 0f 00 da ltr %edx [ ]*[a-f0-9]+: 0f 00 1a ltr \(%rdx\) -[ ]*[a-f0-9]+: 0f 00 e2 verr %dx -[ ]*[a-f0-9]+: 0f 00 e2 verr %dx -[ ]*[a-f0-9]+: 0f 00 e2 verr %dx +[ ]*[a-f0-9]+: 0f 00 e2 verr %edx +[ ]*[a-f0-9]+: 0f 00 e2 verr %edx +[ ]*[a-f0-9]+: 0f 00 e2 verr %edx [ ]*[a-f0-9]+: 0f 00 22 verr \(%rdx\) -[ ]*[a-f0-9]+: 0f 00 ea verw %dx -[ ]*[a-f0-9]+: 0f 00 ea verw %dx -[ ]*[a-f0-9]+: 0f 00 ea verw %dx +[ ]*[a-f0-9]+: 0f 00 ea verw %edx +[ ]*[a-f0-9]+: 0f 00 ea verw %edx +[ ]*[a-f0-9]+: 0f 00 ea verw %edx [ ]*[a-f0-9]+: 0f 00 2a verw \(%rdx\) [ ]*[a-f0-9]+: 66 0f 02 d2 lar %dx,%dx [ ]*[a-f0-9]+: 0f 02 d2 lar %edx,%edx @@ -298,9 +298,9 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 66 0f 02 12 lar \(%rdx\),%dx [ ]*[a-f0-9]+: 0f 02 12 lar \(%rdx\),%edx [ ]*[a-f0-9]+: 0f 02 12 lar \(%rdx\),%edx -[ ]*[a-f0-9]+: 0f 00 d2 lldt %dx -[ ]*[a-f0-9]+: 0f 00 d2 lldt %dx -[ ]*[a-f0-9]+: 0f 00 d2 lldt %dx +[ ]*[a-f0-9]+: 0f 00 d2 lldt %edx +[ ]*[a-f0-9]+: 0f 00 d2 lldt %edx +[ ]*[a-f0-9]+: 0f 00 d2 lldt %edx [ ]*[a-f0-9]+: 0f 00 12 lldt \(%rdx\) [ ]*[a-f0-9]+: 0f 00 12 lldt \(%rdx\) [ ]*[a-f0-9]+: 66 0f 03 d2 lsl %dx,%dx @@ -311,19 +311,19 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 66 0f 03 12 lsl \(%rdx\),%dx [ ]*[a-f0-9]+: 0f 03 12 lsl \(%rdx\),%edx [ ]*[a-f0-9]+: 0f 03 12 lsl \(%rdx\),%edx -[ ]*[a-f0-9]+: 0f 00 da ltr %dx -[ ]*[a-f0-9]+: 0f 00 da ltr %dx -[ ]*[a-f0-9]+: 0f 00 da ltr %dx +[ ]*[a-f0-9]+: 0f 00 da ltr %edx +[ ]*[a-f0-9]+: 0f 00 da ltr %edx +[ ]*[a-f0-9]+: 0f 00 da ltr %edx [ ]*[a-f0-9]+: 0f 00 1a ltr \(%rdx\) [ ]*[a-f0-9]+: 0f 00 1a ltr \(%rdx\) -[ ]*[a-f0-9]+: 0f 00 e2 verr %dx -[ ]*[a-f0-9]+: 0f 00 e2 verr %dx -[ ]*[a-f0-9]+: 0f 00 e2 verr %dx +[ ]*[a-f0-9]+: 0f 00 e2 verr %edx +[ ]*[a-f0-9]+: 0f 00 e2 verr %edx +[ ]*[a-f0-9]+: 0f 00 e2 verr %edx [ ]*[a-f0-9]+: 0f 00 22 verr \(%rdx\) [ ]*[a-f0-9]+: 0f 00 22 verr \(%rdx\) -[ ]*[a-f0-9]+: 0f 00 ea verw %dx -[ ]*[a-f0-9]+: 0f 00 ea verw %dx -[ ]*[a-f0-9]+: 0f 00 ea verw %dx +[ ]*[a-f0-9]+: 0f 00 ea verw %edx +[ ]*[a-f0-9]+: 0f 00 ea verw %edx +[ ]*[a-f0-9]+: 0f 00 ea verw %edx [ ]*[a-f0-9]+: 0f 00 2a verw \(%rdx\) [ ]*[a-f0-9]+: 0f 00 2a verw \(%rdx\) #pass diff --git a/gas/testsuite/gas/ppc/aix.exp b/gas/testsuite/gas/ppc/aix.exp index 55aedc48654..76ffb224c08 100644 --- a/gas/testsuite/gas/ppc/aix.exp +++ b/gas/testsuite/gas/ppc/aix.exp @@ -88,8 +88,15 @@ 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" + if { [istarget {*-*-aix[6-9]*}] + || [istarget {*-*-aix5.[2-9]*}] } { + # The expected output of these tests depends on AIX_WEAK_SUPPORT. + # Without that weak syms do not have an aux entry and thus + # BFD_NOT_AT_END is not set. I don't know if any of this is + # correct.. + 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/s390/esa-reloc.d b/gas/testsuite/gas/s390/esa-reloc.d index c9da92870d5..0b13cb626a6 100644 --- a/gas/testsuite/gas/s390/esa-reloc.d +++ b/gas/testsuite/gas/s390/esa-reloc.d @@ -23,7 +23,7 @@ Disassembly of section .text: 22: a7 08 00 00 [ ]*lhi %r0,0 [ ]*24: R_390_GOT16 test_R_390_GOT16 26: a7 08 00 00 [ ]*lhi %r0,0 -[ ]*28: R_390_16 test_R_390_PC16\+0x26 +[ ]*28: R_390_PC16 test_R_390_PC16\+0x28 2a: a7 e5 00 00 [ ]*bras %r14,2a [ ]*2c: R_390_PC16DBL test_R_390_PC16DBL\+0x2 2e: a7 e5 00 00 [ ]*bras %r14,2e diff --git a/gas/testsuite/gas/sh/err-at.s b/gas/testsuite/gas/sh/err-at.s index 648ee94e140..af5d081c0ee 100644 --- a/gas/testsuite/gas/sh/err-at.s +++ b/gas/testsuite/gas/sh/err-at.s @@ -4,7 +4,9 @@ start: mov.l r1,@r0 ! ok mov.l r1,@(r0) ! { dg-error "syntax error" } +! { dg-bogus "invalid operands for opcode" "" { xfail *-*-* } 6 } mov.l r1,@(r0,) ! { dg-error "syntax error" } +! { dg-bogus "invalid operands for opcode" "" { xfail *-*-* } 8 } mov.l r1,@(r0,r0) ! ok mov.l r1,@(r0,r1) ! ok mov.l r1,@(r1,r0) ! { dg-error "must be" } diff --git a/gold/ChangeLog b/gold/ChangeLog index cbdb467b427..93a1125cfed 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,6 +1,5 @@ -2023-07-30 Nick Clifton +2023-07-03 Nick Clifton - This is the 2.41 release. * po/gold.pot: Regenerate. 2023-07-03 Nick Clifton diff --git a/gold/object.cc b/gold/object.cc index 77b2690c381..acd7c945937 100644 --- a/gold/object.cc +++ b/gold/object.cc @@ -3054,7 +3054,7 @@ Sized_relobj_file::find_kept_section_object( // Return the name of symbol SYMNDX. template -const char* +std::string Sized_relobj_file::get_symbol_name(unsigned int symndx) { if (this->symtab_shndx_ == 0) @@ -3065,6 +3065,24 @@ Sized_relobj_file::get_symbol_name(unsigned int symndx) &symbols_size, false); + const unsigned char* p = symbols + symndx * This::sym_size; + if (p >= symbols + symbols_size) + return NULL; + + elfcpp::Sym sym(p); + + if (sym.get_st_name() == 0 && sym.get_st_type() == elfcpp::STT_SECTION) + { + bool is_ordinary; + unsigned int sym_shndx = this->adjust_sym_shndx(symndx, + sym.get_st_shndx(), + &is_ordinary); + if (!is_ordinary || sym_shndx >= this->shnum()) + return NULL; + + return this->section_name(sym_shndx); + } + unsigned int symbol_names_shndx = this->adjust_shndx(this->section_link(this->symtab_shndx_)); section_size_type names_size; @@ -3072,14 +3090,25 @@ Sized_relobj_file::get_symbol_name(unsigned int symndx) this->section_contents(symbol_names_shndx, &names_size, false); const char* symbol_names = reinterpret_cast(symbol_names_u); - const unsigned char* p = symbols + symndx * This::sym_size; - - if (p >= symbols + symbols_size) + unsigned int sym_name = sym.get_st_name(); + if (sym_name >= names_size) return NULL; + const char* namep = symbol_names + sym_name; + const void* endp = memchr(namep, 0, names_size - sym_name); + if (!endp) + endp = symbol_names + names_size; + std::string name = std::string(namep, static_cast(endp) - namep); - elfcpp::Sym sym(p); + if (!parameters->options().do_demangle()) + return name; - return symbol_names + sym.get_st_name(); + char* demangled_name = cplus_demangle(name.c_str(), DMGL_ANSI | DMGL_PARAMS); + if (!demangled_name) + return name; + + name = demangled_name; + free(demangled_name); + return name; } // Get symbol counts. diff --git a/gold/object.h b/gold/object.h index e7472893ca6..d6c53eb105e 100644 --- a/gold/object.h +++ b/gold/object.h @@ -2347,7 +2347,7 @@ class Sized_relobj_file : public Sized_relobj find_kept_section_object(unsigned int shndx, unsigned int* symndx_p) const; // Return the name of symbol SYMNDX. - const char* + std::string get_symbol_name(unsigned int symndx); // Compute final local symbol value. R_SYM is the local symbol index. diff --git a/gold/po/gold.pot b/gold/po/gold.pot index 2c27cb0c47a..a7a064160d3 100644 --- a/gold/po/gold.pot +++ b/gold/po/gold.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2023-07-30 14:36+0100\n" +"POT-Creation-Date: 2023-07-03 11:43+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -3656,18 +3656,14 @@ msgstr "" msgid "call lacks nop, can't restore toc; recompile with -fPIC" msgstr "" -#: powerpc.cc:12426 powerpc.cc:12433 s390.cc:3479 +#: powerpc.cc:12424 s390.cc:3479 msgid "relocation overflow" msgstr "" -#: powerpc.cc:12428 +#: powerpc.cc:12426 msgid "try relinking with a smaller --stub-group-size" msgstr "" -#: powerpc.cc:12434 -msgid "debug info may be unreliable, compile with -gdwarf64" -msgstr "" - #: readsyms.cc:285 #, c-format msgid "%s: file is empty" diff --git a/gold/powerpc.cc b/gold/powerpc.cc index d62bdea7ecb..e66d9cbb900 100644 --- a/gold/powerpc.cc +++ b/gold/powerpc.cc @@ -12420,17 +12420,24 @@ Target_powerpc::Relocate::relocate( && gsym->is_undefined() && is_branch_reloc(r_type)))) { + std::string name; + if (gsym) + name = gsym->demangled_name(); + else + name = relinfo->object->get_symbol_name(r_sym); if (os->flags() & elfcpp::SHF_ALLOC) { gold_error_at_location(relinfo, relnum, rela.get_r_offset(), - _("relocation overflow")); + _("reloc type %u overflow against '%s'"), + r_type, name.c_str()); if (has_stub_value) gold_info(_("try relinking with a smaller --stub-group-size")); } else { gold_warning_at_location(relinfo, relnum, rela.get_r_offset(), - _("relocation overflow")); + _("reloc type %u overflow against '%s'"), + r_type, name.c_str()); gold_info(_("debug info may be unreliable, compile with -gdwarf64")); } } diff --git a/gold/target-reloc.h b/gold/target-reloc.h index 5f4c5c5a101..1df25ae452e 100644 --- a/gold/target-reloc.h +++ b/gold/target-reloc.h @@ -242,7 +242,7 @@ issue_discarded_error( relinfo, shndx, offset, _("relocation refers to local symbol \"%s\" [%u], " "which is defined in a discarded section"), - object->get_symbol_name(r_sym), r_sym); + object->get_symbol_name(r_sym).c_str(), r_sym); } else { @@ -264,7 +264,7 @@ issue_discarded_error( &key_symndx); if (key_symndx != 0) gold_info(_(" section group signature: \"%s\""), - object->get_symbol_name(key_symndx)); + object->get_symbol_name(key_symndx).c_str()); if (kept_obj != NULL) gold_info(_(" prevailing definition is from %s"), kept_obj->name().c_str()); diff --git a/gprof/ChangeLog b/gprof/ChangeLog index 5500fd1e233..a57b89ca009 100644 --- a/gprof/ChangeLog +++ b/gprof/ChangeLog @@ -1,8 +1,3 @@ -2023-07-30 Nick Clifton - - This is the 2.41 release. - * configure: Regenerate. - 2023-07-03 Nick Clifton * configure: Regenerate. diff --git a/gprof/aarch64.c b/gprof/aarch64.c index 68febf93723..3ab6067dbac 100644 --- a/gprof/aarch64.c +++ b/gprof/aarch64.c @@ -54,7 +54,8 @@ aarch64_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc) DBG (CALLDEBUG, printf ("[find_call] %s: 0x%lx to 0x%lx\n", parent->name, (unsigned long) p_lowpc, (unsigned long) p_highpc)); - + p_lowpc = (p_lowpc + 3) & ~3; + p_highpc &= ~3; for (pc = p_lowpc; pc < p_highpc; pc += 4) { diff --git a/gprof/alpha.c b/gprof/alpha.c index d84cdf0a916..df714be6c81 100644 --- a/gprof/alpha.c +++ b/gprof/alpha.c @@ -107,7 +107,9 @@ alpha_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc) DBG (CALLDEBUG, printf (_("[find_call] %s: 0x%lx to 0x%lx\n"), parent->name, (unsigned long) p_lowpc, (unsigned long) p_highpc)); - for (pc = (p_lowpc + 3) & ~(bfd_vma) 3; pc < p_highpc; pc += 4) + p_lowpc = (p_lowpc + 3) & ~3; + p_highpc &= ~3; + for (pc = p_lowpc; pc < p_highpc; pc += 4) { insn = bfd_get_32 (core_bfd, ((unsigned char *) core_text_space + pc - core_text_sect->vma)); diff --git a/gprof/cg_arcs.c b/gprof/cg_arcs.c index e76c2cb78cf..cfffb09ff87 100644 --- a/gprof/cg_arcs.c +++ b/gprof/cg_arcs.c @@ -37,6 +37,7 @@ #include "cg_print.h" #include "utils.h" #include "sym_ids.h" +#include "corefile.h" static int cmp_topo (const void *, const void *); static void propagate_time (Sym *); @@ -622,7 +623,11 @@ cg_assemble (void) parent->cg.cyc.num = 0; parent->cg.cyc.head = parent; parent->cg.cyc.next = 0; - if (ignore_direct_calls) + if (ignore_direct_calls + && parent->addr >= core_text_sect->vma + && parent->addr < core_text_sect->vma + core_text_sect->size + && (parent + 1)->addr >= core_text_sect->vma + && (parent + 1)->addr <= core_text_sect->vma + core_text_sect->size) find_call (parent, parent->addr, (parent + 1)->addr); } diff --git a/gprof/configure b/gprof/configure index 6760f6fc2a8..4bf25c33c97 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.41. +# Generated by GNU Autoconf 2.69 for gprof 2.41.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.41' -PACKAGE_STRING='gprof 2.41' +PACKAGE_VERSION='2.41.50' +PACKAGE_STRING='gprof 2.41.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.41 to adapt to many kinds of systems. +\`configure' configures gprof 2.41.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.41:";; + short | recursive ) echo "Configuration of gprof 2.41.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.41 +gprof configure 2.41.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.41, which was +It was created by gprof $as_me 2.41.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.41' + VERSION='2.41.50' cat >>confdefs.h <<_ACEOF @@ -12572,7 +12572,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.41, which was +This file was extended by gprof $as_me 2.41.50, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -12638,7 +12638,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.41 +gprof config.status 2.41.50 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/gprof/i386.c b/gprof/i386.c index bdf8bd1b832..62f6f96b20a 100644 --- a/gprof/i386.c +++ b/gprof/i386.c @@ -57,6 +57,9 @@ i386_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc) parent->name, (unsigned long) p_lowpc, (unsigned long) p_highpc)); + if (p_highpc < 5) + return; + p_highpc -= 5; for (pc = p_lowpc; pc < p_highpc; ++pc) { instructp = (unsigned char *) core_text_space + pc - core_text_sect->vma; diff --git a/gprof/mips.c b/gprof/mips.c index e198a6f411a..0ccd17db525 100644 --- a/gprof/mips.c +++ b/gprof/mips.c @@ -59,6 +59,8 @@ mips_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc) DBG (CALLDEBUG, printf (_("[find_call] %s: 0x%lx to 0x%lx\n"), parent->name, (unsigned long) p_lowpc, (unsigned long) p_highpc)); + p_lowpc = (p_lowpc + 3) & ~3; + p_highpc &= ~3; for (pc = p_lowpc; pc < p_highpc; pc += 4) { op = bfd_get_32 (core_bfd, ((unsigned char *)core_text_space diff --git a/gprof/po/es.po b/gprof/po/es.po index fa3f5e6e1dd..bce3eac55b5 100644 --- a/gprof/po/es.po +++ b/gprof/po/es.po @@ -2,14 +2,14 @@ # Copyright (C) 2002 - 2020 Free Software Foundation, Inc. # This file is distributed under the same license as the binutils package. # Cristian Othón Martínez Vera , 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012. -# Antonio Ceballos Roa , 2020 +# Antonio Ceballos Roa , 2020, 2023 # msgid "" msgstr "" -"Project-Id-Version: gprof 2.33.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-05-15 09:01+0200\n" +"Project-Id-Version: gprof 2.39.90\n" +"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" +"POT-Creation-Date: 2022-12-31 12:22+0000\n" +"PO-Revision-Date: 2023-07-30 18:19+0200\n" "Last-Translator: Antonio Ceballos Roa \n" "Language-Team: Spanish \n" "Language: es\n" @@ -240,7 +240,7 @@ msgstr "" msgid "%s: unable to parse mapping file %s.\n" msgstr "%s: no se puede analizar el fichero de asociaciones %s.\n" -#: corefile.c:89 corefile.c:523 +#: corefile.c:89 corefile.c:524 #, c-format msgid "%s: could not open %s.\n" msgstr "%s: no se puede abrir %s.\n" @@ -270,107 +270,107 @@ msgstr "%s: no se puede hacer -c\n" msgid "%s: -c not supported on architecture %s\n" msgstr "%s: -c no se admite en la arquitectura %s\n" -#: corefile.c:532 corefile.c:637 +#: corefile.c:533 corefile.c:640 #, c-format msgid "%s: file `%s' has no symbols\n" msgstr "%s: el fichero `%s' no tiene símbolos\n" -#: corefile.c:537 +#: corefile.c:538 #, c-format msgid "%s: file `%s' has too many symbols\n" msgstr "%s: el fichero `%s' tiene demasiados símbolos\n" -#: corefile.c:904 +#: corefile.c:907 #, c-format msgid "%s: somebody miscounted: ltab.len=%d instead of %ld\n" msgstr "%s: alguien contó mal: ltab.len=%d en lugar de %ld\n" -#: gmon_io.c:83 +#: gmon_io.c:81 #, c-format msgid "%s: address size has unexpected value of %u\n" msgstr "%s: el tamaño de la dirección tiene un valor inesperado de %u\n" -#: gmon_io.c:318 gmon_io.c:414 +#: gmon_io.c:298 gmon_io.c:394 #, c-format msgid "%s: file too short to be a gmon file\n" msgstr "%s: el fichero es muy corto para ser un fichero gmon\n" -#: gmon_io.c:328 gmon_io.c:457 +#: gmon_io.c:308 gmon_io.c:437 #, c-format msgid "%s: file `%s' has bad magic cookie\n" msgstr "%s: el fichero `%s' tiene un cookie mágico equivocado\n" -#: gmon_io.c:339 +#: gmon_io.c:319 #, c-format msgid "%s: file `%s' has unsupported version %d\n" msgstr "%s: el fichero `%s' tiene la versión %d no admitida\n" -#: gmon_io.c:369 +#: gmon_io.c:349 #, c-format msgid "%s: %s: found bad tag %d (file corrupted?)\n" msgstr "%s: %s: encontrada etiqueta %d equivocada (¿fichero corrupto?)\n" -#: gmon_io.c:436 +#: gmon_io.c:416 #, c-format msgid "%s: profiling rate incompatible with first gmon file\n" msgstr "%s: tipo de perfilado incompatible con el primer fichero gmon\n" -#: gmon_io.c:487 +#: gmon_io.c:467 #, c-format msgid "%s: incompatible with first gmon file\n" msgstr "%s: incompatible con el primer fichero gmon\n" -#: gmon_io.c:517 +#: gmon_io.c:497 #, c-format msgid "%s: file '%s' does not appear to be in gmon.out format\n" msgstr "%s: el fichero '%s' no parece estar en el formato gmon.out\n" -#: gmon_io.c:530 +#: gmon_io.c:510 #, c-format msgid "%s: unexpected EOF after reading %d/%d bins\n" msgstr "%s: EOF inesperado tras leer %d/%d binarios\n" -#: gmon_io.c:562 +#: gmon_io.c:542 #, c-format msgid "time is in ticks, not seconds\n" msgstr "el tiempo está en tics, no en segundos\n" -#: gmon_io.c:568 gmon_io.c:748 +#: gmon_io.c:548 gmon_io.c:728 #, c-format msgid "%s: don't know how to deal with file format %d\n" msgstr "%s: se desconoce cómo tratar el formato de fichero %d\n" -#: gmon_io.c:578 +#: gmon_io.c:558 #, c-format msgid "File `%s' (version %d) contains:\n" msgstr "El fichero `%s' (versión %d) contiene:\n" -#: gmon_io.c:581 +#: gmon_io.c:561 #, c-format msgid "\t%d histogram record\n" msgstr "\t%d registro de histograma\n" -#: gmon_io.c:582 +#: gmon_io.c:562 #, c-format msgid "\t%d histogram records\n" msgstr "\t%d registros de histogramas\n" -#: gmon_io.c:584 +#: gmon_io.c:564 #, c-format msgid "\t%d call-graph record\n" msgstr "\t%d registro de gráfico de llamadas\n" -#: gmon_io.c:585 +#: gmon_io.c:565 #, c-format msgid "\t%d call-graph records\n" msgstr "\t%d registros de gráficos de llamadas\n" -#: gmon_io.c:587 +#: gmon_io.c:567 #, c-format msgid "\t%d basic-block count record\n" msgstr "\t%d registro de cuenta de bloques básicos\n" -#: gmon_io.c:588 +#: gmon_io.c:568 #, c-format msgid "\t%d basic-block count records\n" msgstr "\t%d registros de cuentas de bloques básicos\n" @@ -378,7 +378,7 @@ msgstr "\t%d registros de cuentas de bloques básicos\n" #: gprof.c:162 #, c-format msgid "" -"Usage: %s [-[abcDhilLrsTvwxyz]] [-[ACeEfFJnNOpPqQRStZ][name]] [-I dirs]\n" +"Usage: %s [-[abcDhilLrsTvwxyz]] [-[ABCeEfFJnNOpPqQRStZ][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" @@ -392,7 +392,7 @@ msgid "" "\t[--demangle[=STYLE]] [--no-demangle] [--external-symbol-table=name] [@FILE]\n" "\t[image-file] [profile-file...]\n" msgstr "" -"Modo de empleo: %s [-[abcDhilLrsTvwxyz]] [-[ACeEfFJnNOpPqQRStZ][nombre]] [-I dirs]\n" +"Modo de empleo: %s [-[abcDhilLrsTvwxyz]] [-[ABCeEfFJnNOpPqQRStZ][nombre]] [-I dirs]\n" "\t[-d[num]] [-k origen/destino] [-m cuenta-min] [-t longitud-tabla]\n" "\t[--[no-]annotated-source[=nombre]] [--[no-]exec-counts[=nombre]]\n" "\t[--[no-]flat-profile[=nombre]] [--[no-]graph[=nombre]]\n" @@ -411,53 +411,53 @@ msgstr "" msgid "Report bugs to %s\n" msgstr "Comunicar defectos a %s\n" -#: gprof.c:254 +#: gprof.c:252 #, c-format msgid "%s: debugging not supported; -d ignored\n" msgstr "%s: no se admite la depuración; se descarta -d\n" -#: gprof.c:340 +#: gprof.c:338 #, c-format msgid "%s: unknown file format %s\n" msgstr "%s: formato de fichero %s desconocido\n" #. This output is intended to follow the GNU standards document. -#: gprof.c:428 +#: gprof.c:426 #, c-format msgid "GNU gprof %s\n" msgstr "GNU gprof %s\n" -#: gprof.c:429 +#: gprof.c:427 #, c-format msgid "Based on BSD gprof, copyright 1983 Regents of the University of California.\n" msgstr "Basado en gprof de BSD, © 1983 Regents of the University of California.\n" -#: gprof.c:430 +#: gprof.c:428 #, c-format msgid "This program is free software. This program has absolutely no warranty.\n" msgstr "Este programa es software libre. Este programa no tiene ninguna garantía en absoluto.\n" -#: gprof.c:471 +#: gprof.c:469 #, c-format msgid "%s: unknown demangling style `%s'\n" msgstr "%s: estilo de desenredo desconocido `%s'\n" -#: gprof.c:494 +#: gprof.c:492 #, c-format msgid "%s: Only one of --function-ordering and --file-ordering may be specified.\n" msgstr "%s: Solo puede especificarse una de las opciones --function-ordering y --file-ordering.\n" -#: gprof.c:546 +#: gprof.c:544 #, c-format msgid "%s: sorry, file format `prof' is not yet supported\n" msgstr "%s: disculpe, el formato de fichero `prof' aún no está admitido\n" -#: gprof.c:600 +#: gprof.c:598 #, c-format msgid "%s: gmon.out file is missing histogram\n" msgstr "%s: falta el histograma en el fichero gmon.out\n" -#: gprof.c:607 +#: gprof.c:605 #, c-format msgid "%s: gmon.out file is missing call-graph data\n" msgstr "%s: faltan los datos del gráfico de llamadas en el fichero gmon.out\n" @@ -584,17 +584,17 @@ msgstr "[find_call] 0x%lx: jal" msgid "[find_call] 0x%lx: jalr\n" msgstr "[find_call] 0x%lx: jalr\n" -#: source.c:162 +#: source.c:166 #, c-format msgid "%s: could not locate `%s'\n" msgstr "%s: no se puede encontrar `%s'\n" -#: source.c:237 +#: source.c:244 #, c-format msgid "*** File %s:\n" msgstr "*** Fichero %s:\n" -#: utils.c:106 +#: utils.c:105 #, c-format msgid " " msgstr " " diff --git a/gprof/po/gprof.pot b/gprof/po/gprof.pot index c87e9d6a7a4..c9f538a419f 100644 --- a/gprof/po/gprof.pot +++ b/gprof/po/gprof.pot @@ -8,10 +8,11 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2023-07-03 11:33+0100\n" +"POT-Creation-Date: 2022-07-08 11:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" @@ -245,7 +246,7 @@ msgstr "" msgid "%s: -c not supported on architecture %s\n" msgstr "" -#: corefile.c:533 corefile.c:640 +#: corefile.c:533 corefile.c:638 #, c-format msgid "%s: file `%s' has no symbols\n" msgstr "" @@ -255,7 +256,7 @@ msgstr "" msgid "%s: file `%s' has too many symbols\n" msgstr "" -#: corefile.c:907 +#: corefile.c:905 #, c-format msgid "%s: somebody miscounted: ltab.len=%d instead of %ld\n" msgstr "" @@ -353,7 +354,7 @@ msgstr "" #: gprof.c:162 #, c-format msgid "" -"Usage: %s [-[abcDhilLrsTvwxyz]] [-[ABCeEfFJnNOpPqQRStZ][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" diff --git a/gprof/sparc.c b/gprof/sparc.c index 44724c47d3f..019e58b185f 100644 --- a/gprof/sparc.c +++ b/gprof/sparc.c @@ -51,7 +51,9 @@ sparc_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc) DBG (CALLDEBUG, printf ("[find_call] %s: 0x%lx to 0x%lx\n", parent->name, (unsigned long) p_lowpc, (unsigned long) p_highpc)); - for (pc = (p_lowpc + 3) & ~(bfd_vma) 3; pc < p_highpc; pc += 4) + p_lowpc = (p_lowpc + 3) & ~3; + p_highpc &= ~3; + for (pc = p_lowpc; pc < p_highpc; pc += 4) { insn = bfd_get_32 (core_bfd, ((unsigned char *) core_text_space + pc - core_text_sect->vma)); diff --git a/gprof/vax.c b/gprof/vax.c index 92942353b48..fafe2b17b53 100644 --- a/gprof/vax.c +++ b/gprof/vax.c @@ -252,6 +252,8 @@ vax_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc) (unsigned long) p_highpc)); for (pc = p_lowpc; pc < p_highpc; pc += length) { + unsigned char *operand; + length = 1; instructp = ((unsigned char *) core_text_space + pc - core_text_sect->vma); @@ -263,7 +265,10 @@ vax_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc) */ DBG (CALLDEBUG, printf ("[findcall]\t0x%lx:calls", (unsigned long) pc)); - firstmode = vax_operandmode (instructp + length); + if (pc - core_text_sect->vma + length >= core_text_sect->size) + goto botched; + operand = instructp + length; + firstmode = vax_operandmode (operand); switch (firstmode) { case literal: @@ -272,8 +277,11 @@ vax_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc) default: goto botched; } - length += vax_operandlength (instructp + length); - mode = vax_operandmode (instructp + length); + length += vax_operandlength (operand); + if (pc - core_text_sect->vma + length >= core_text_sect->size) + goto botched; + operand = instructp + length; + mode = vax_operandmode (operand); DBG (CALLDEBUG, printf ("\tfirst operand is %s", vax_operandname (firstmode)); printf ("\tsecond operand is %s\n", vax_operandname (mode))); @@ -294,8 +302,10 @@ vax_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc) * [are there others that we miss?, * e.g. arrays of pointers to functions???] */ + length += vax_operandlength (operand); + if (pc - core_text_sect->vma + length > core_text_sect->size) + goto botched; arc_add (parent, &indirectchild, (unsigned long) 0); - length += vax_operandlength (instructp + length); continue; case byterel: case wordrel: @@ -305,7 +315,10 @@ vax_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc) * check that this is the address of * a function. */ - destpc = pc + vax_offset (instructp + length); + length += vax_operandlength (operand); + if (pc - core_text_sect->vma + length > core_text_sect->size) + goto botched; + destpc = pc + vax_offset (operand); if (hist_check_address (destpc)) { child = sym_lookup (&symtab, destpc); @@ -324,7 +337,6 @@ vax_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc) * a hit */ arc_add (parent, child, (unsigned long) 0); - length += vax_operandlength (instructp + length); continue; } } diff --git a/gprofng/configure b/gprofng/configure index 800daa6ca28..c39dc8535f7 100755 --- a/gprofng/configure +++ b/gprofng/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for gprofng 2.41. +# Generated by GNU Autoconf 2.69 for gprofng 2.41.50. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -587,8 +587,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='gprofng' PACKAGE_TARNAME='gprofng' -PACKAGE_VERSION='2.41' -PACKAGE_STRING='gprofng 2.41' +PACKAGE_VERSION='2.41.50' +PACKAGE_STRING='gprofng 2.41.50' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1362,7 +1362,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 gprofng 2.41 to adapt to many kinds of systems. +\`configure' configures gprofng 2.41.50 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1433,7 +1433,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of gprofng 2.41:";; + short | recursive ) echo "Configuration of gprofng 2.41.50:";; esac cat <<\_ACEOF @@ -1547,7 +1547,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -gprofng configure 2.41 +gprofng configure 2.41.50 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2079,7 +2079,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 gprofng $as_me 2.41, which was +It was created by gprofng $as_me 2.41.50, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3052,7 +3052,7 @@ fi # Define the identity of the package. PACKAGE='gprofng' - VERSION='2.41' + VERSION='2.41.50' cat >>confdefs.h <<_ACEOF @@ -17514,7 +17514,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 gprofng $as_me 2.41, which was +This file was extended by gprofng $as_me 2.41.50, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -17580,7 +17580,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="\\ -gprofng config.status 2.41 +gprofng config.status 2.41.50 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/gprofng/doc/version.texi b/gprofng/doc/version.texi index bdf3cb91a9b..dea0bfa7381 100644 --- a/gprofng/doc/version.texi +++ b/gprofng/doc/version.texi @@ -1,4 +1,4 @@ -@set UPDATED 3 July 2023 -@set UPDATED-MONTH July 2023 -@set EDITION 2.41 -@set VERSION 2.41 +@set UPDATED 18 April 2023 +@set UPDATED-MONTH April 2023 +@set EDITION 2.41.50 +@set VERSION 2.41.50 diff --git a/gprofng/libcollector/configure b/gprofng/libcollector/configure index 2b76f7ab6f3..9dfc4ab3994 100755 --- a/gprofng/libcollector/configure +++ b/gprofng/libcollector/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for gprofng 2.41. +# Generated by GNU Autoconf 2.69 for gprofng 2.41.50. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -587,8 +587,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='gprofng' PACKAGE_TARNAME='gprofng' -PACKAGE_VERSION='2.41' -PACKAGE_STRING='gprofng 2.41' +PACKAGE_VERSION='2.41.50' +PACKAGE_STRING='gprofng 2.41.50' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1324,7 +1324,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 gprofng 2.41 to adapt to many kinds of systems. +\`configure' configures gprofng 2.41.50 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1395,7 +1395,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of gprofng 2.41:";; + short | recursive ) echo "Configuration of gprofng 2.41.50:";; esac cat <<\_ACEOF @@ -1504,7 +1504,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -gprofng configure 2.41 +gprofng configure 2.41.50 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1990,7 +1990,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 gprofng $as_me 2.41, which was +It was created by gprofng $as_me 2.41.50, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2967,7 +2967,7 @@ fi # Define the identity of the package. PACKAGE='gprofng' - VERSION='2.41' + VERSION='2.41.50' cat >>confdefs.h <<_ACEOF @@ -16080,7 +16080,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 gprofng $as_me 2.41, which was +This file was extended by gprofng $as_me 2.41.50, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -16146,7 +16146,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="\\ -gprofng config.status 2.41 +gprofng config.status 2.41.50 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/gprofng/libcollector/iotrace.c b/gprofng/libcollector/iotrace.c index c0ea7497b09..81c844048d9 100644 --- a/gprofng/libcollector/iotrace.c +++ b/gprofng/libcollector/iotrace.c @@ -1030,8 +1030,9 @@ gprofng_open64 (int(real_open64) (const char *, int, ...), } DCL_FUNC_VER (DCL_OPEN64, open64_2_2, open64@GLIBC_2.2) +#if !defined(__USE_LARGEFILE64) DCL_OPEN64 (open64) - +#endif #define F_ERROR_ARG 0 #define F_INT_ARG 1 @@ -2989,8 +2990,9 @@ DCL_FUNC_VER (DCL_FGETPOS64, fgetpos64_2_17, fgetpos64@GLIBC_2.17) DCL_FUNC_VER (DCL_FGETPOS64, fgetpos64_2_2_5, fgetpos64@GLIBC_2.2.5) DCL_FUNC_VER (DCL_FGETPOS64, fgetpos64_2_2, fgetpos64@GLIBC_2.2) DCL_FUNC_VER (DCL_FGETPOS64, fgetpos64_2_1, fgetpos64@GLIBC_2.1) +#if !defined(__USE_LARGEFILE64) DCL_FGETPOS64 (fgetpos64) - +#endif /*------------------------------------------------------------- fsetpos */ static int gprofng_fsetpos (int(real_fsetpos) (FILE *, const fpos_t *), @@ -3087,8 +3089,9 @@ DCL_FUNC_VER (DCL_FSETPOS64, fsetpos64_2_17, fsetpos64@GLIBC_2.17) DCL_FUNC_VER (DCL_FSETPOS64, fsetpos64_2_2_5, fsetpos64@GLIBC_2.2.5) DCL_FUNC_VER (DCL_FSETPOS64, fsetpos64_2_2, fsetpos64@GLIBC_2.2) DCL_FUNC_VER (DCL_FSETPOS64, fsetpos64_2_1, fsetpos64@GLIBC_2.1) +#if !defined(__USE_LARGEFILE64) DCL_FSETPOS64 (fsetpos64) - +#endif /*------------------------------------------------------------- fsync */ int fsync (int fildes) diff --git a/gprofng/src/Command.cc b/gprofng/src/Command.cc index 4faa5ec6736..cd6d19e85dc 100644 --- a/gprofng/src/Command.cc +++ b/gprofng/src/Command.cc @@ -40,7 +40,7 @@ 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 *methdr, *othdr, *mischdr, *deflthdr, *andeflthdr; static char *selhdr, *filthdr, *outhdr, *exphdr, *obj_allhdr; static char *unsuphdr, *indxobjhdr; static char *helphdr, *rahdr, *ddhdr, *typehdr, *typehdr2; @@ -177,6 +177,15 @@ static Cmdtable cmd_lst[] = { // list of commands { DSORT, "dsort", NULL, "metric_spec", 1, &desc[DSORT]}, { EN_DESC, "en_desc", NULL, "{on|off|=}", 1, &desc[EN_DESC]}, + { NO_CMD, "", NULL, NULL, 0, &andeflthdr}, + { TLMODE, "tlmode", NULL, "tl_mode", 1, &desc[TLMODE]}, + { TLDATA, "tldata", NULL, "tl_data", 1, &desc[TLDATA]}, + { TABS, "tabs", NULL, "tablist", 1, &desc[TABS]}, + { CALLFLAME, "callflame", NULL, NULL, 0, &desc[CALLFLAME]}, + { TIMELINE, "timeline", NULL, NULL, 0, &desc[TIMELINE]}, + { DUALSOURCE, "dsrc", NULL, NULL, 0, &desc[DUALSOURCE]}, + { SOURCEDISAM, "srcdis", NULL, NULL, 0, &desc[SOURCEDISAM]}, + { NO_CMD, "", NULL, NULL, 0, &mischdr}, { DUMMY_CMD, "", NULL, NULL, 0, &typehdr}, { DUMMY_CMD, " ", NULL, NULL, 0, &typehdr2}, @@ -554,6 +563,7 @@ Command::init_desc () mischdr = GTXT ("\nMiscellaneous commands:"); exphdr = GTXT ("\nCommands for experiments (scripts and interactive mode only):"); deflthdr = GTXT ("\nDefault-setting commands:"); + andeflthdr = GTXT ("\nDefault-setting commands that only affect gprofng GUI"); selhdr = GTXT ("\nCommands controlling old-style filters/selection:"); filthdr = GTXT ("\nCommands controlling filters:"); indxobjhdr = GTXT ("\nCommands controlling the index objects:"); diff --git a/gprofng/src/gprofng.rc b/gprofng/src/gprofng.rc index 07f84c0d407..69534a77398 100644 --- a/gprofng/src/gprofng.rc +++ b/gprofng/src/gprofng.rc @@ -129,4 +129,6 @@ addpath $expts:. # Add controls for specific load objects # object_hide -# version "@(#)er.rc 1.62 11/10/31" +# gprofng GUI tabs +tabs dsrc:function:timeline:processes:threads:ctree:callflame:src:dis:leaks:ioactivity:ifreq:callers-callees:header + diff --git a/include/ChangeLog b/include/ChangeLog index f0c8fe875ea..4d407403944 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,35 @@ +2023-07-30 Jose E. Marchesi + + * elf/bpf.h (EF_BPF_CPUVER): Define. + * opcode/bpf.h (BPF_XBPF): Change from 0xf to 0xff so it fits in + EF_BPF_CPUVER. + +2023-07-24 Jose E. Marchesi + + * opcode/bpf.h (BPF_IMM32_BSWAP16): Define. + (BPF_IMM32_BSWAP32): Likewise. + (BPF_IMM32_BSWAP64): Likewise. + (enum bpf_insn_id): New entries BPF_INSN_BSWAP{16,32,64}. + +2023-07-24 Jose E. Marchesi + + * opcode/bpf.h (enum bpf_insn_id): Add entry BPF_INSN_JAL. + (enum bpf_insn_id): Remove spurious entry BPF_INSN_CALLI. + +2023-07-21 Jose E. Marchesi + + * opcode/bpf.h (enum bpf_insn_id): Add entries for signed load + instructions. + (BPF_MODE_SMEM): Define. + +2023-07-21 Jose E. Marchesi + + * opcode/bpf.h (BPF_OFFSET16_MOVS8): Define. + (BPF_OFFSET16_MOVS16): Likewise. + (BPF_OFFSET16_MOVS32): Likewise. + (enum bpf_insn_id): Add entries for MOVS{8,16,32}R and + MOVS32{8,16,32}R. + 2023-07-03 Nick Clifton 2.41 Branch Point. diff --git a/include/coff/internal.h b/include/coff/internal.h index 92a0abfd4f1..7a566caa057 100644 --- a/include/coff/internal.h +++ b/include/coff/internal.h @@ -352,7 +352,7 @@ struct internal_aouthdr #define C_NULL_VALUE 0x00de1e00 /* Value for a C_NULL deleted entry. */ -#if defined _AIX52 || defined AIX_WEAK_SUPPORT +#ifdef AIX_WEAK_SUPPORT #undef C_WEAKEXT #define C_WEAKEXT C_AIX_WEAKEXT #endif diff --git a/include/dis-asm.h b/include/dis-asm.h index d356429f3c5..c76185f5b3c 100644 --- a/include/dis-asm.h +++ b/include/dis-asm.h @@ -388,6 +388,7 @@ extern void print_arc_disassembler_options (FILE *); extern void print_s390_disassembler_options (FILE *); extern void print_wasm32_disassembler_options (FILE *); extern void print_loongarch_disassembler_options (FILE *); +extern void print_bpf_disassembler_options (FILE *); extern bool aarch64_symbol_is_valid (asymbol *, struct disassemble_info *); extern bool arm_symbol_is_valid (asymbol *, struct disassemble_info *); extern bool csky_symbol_is_valid (asymbol *, struct disassemble_info *); diff --git a/include/elf/bpf.h b/include/elf/bpf.h index fb1936010bf..e4d416290a7 100644 --- a/include/elf/bpf.h +++ b/include/elf/bpf.h @@ -34,6 +34,12 @@ START_RELOC_NUMBERS (elf_bpf_reloc_type) * It is kept in this file to remind that the value is already taken. */ RELOC_NUMBER (R_BPF_64_NODYLD32, 4) RELOC_NUMBER (R_BPF_64_32, 10) + RELOC_NUMBER (R_BPF_GNU_64_16, 256) END_RELOC_NUMBERS (R_BPF_max) +/* Processor specific flags for the ELF header e_flags field. */ + +/* Version of the BPF ISA used in the file. */ +#define EF_BPF_CPUVER 0x0000000f + #endif /* _ELF_BPF_H */ diff --git a/include/opcode/riscv-opc.h b/include/opcode/riscv-opc.h index 90f44153750..53f5f200508 100644 --- a/include/opcode/riscv-opc.h +++ b/include/opcode/riscv-opc.h @@ -2210,6 +2210,31 @@ #define MASK_VSM3C_VI 0xfe00707f #define MATCH_VSM3ME_VV 0x82002077 #define MASK_VSM3ME_VV 0xfe00707f +/* Zcb instructions. */ +#define MATCH_C_LBU 0x8000 +#define MASK_C_LBU 0xfc03 +#define MATCH_C_LHU 0x8400 +#define MASK_C_LHU 0xfc43 +#define MATCH_C_LH 0x8440 +#define MASK_C_LH 0xfc43 +#define MATCH_C_SB 0x8800 +#define MASK_C_SB 0xfc03 +#define MATCH_C_SH 0x8c00 +#define MASK_C_SH 0xfc43 +#define MATCH_C_ZEXT_B 0x9c61 +#define MASK_C_ZEXT_B 0xfc7f +#define MATCH_C_SEXT_B 0x9c65 +#define MASK_C_SEXT_B 0xfc7f +#define MATCH_C_ZEXT_H 0x9c69 +#define MASK_C_ZEXT_H 0xfc7f +#define MATCH_C_SEXT_H 0x9c6d +#define MASK_C_SEXT_H 0xfc7f +#define MATCH_C_ZEXT_W 0x9c71 +#define MASK_C_ZEXT_W 0xfc7f +#define MATCH_C_NOT 0x9c75 +#define MASK_C_NOT 0xfc7f +#define MATCH_C_MUL 0x9c41 +#define MASK_C_MUL 0xfc63 /* Svinval instruction. */ #define MATCH_SINVAL_VMA 0x16000073 #define MASK_SINVAL_VMA 0xfe007fff @@ -3367,6 +3392,19 @@ DECLARE_INSN(vsm4r_vv, MATCH_VSM4R_VV, MASK_VSM4R_VV) /* Zvksh instructions. */ DECLARE_INSN(vsm3c_vi, MATCH_VSM3C_VI, MASK_VSM3C_VI) DECLARE_INSN(vsm3me_vv, MATCH_VSM3ME_VV, MASK_VSM3ME_VV) +/* Zcb instructions. */ +DECLARE_INSN(c_sext_b, MATCH_C_SEXT_B, MASK_C_SEXT_B) +DECLARE_INSN(c_sext_h, MATCH_C_SEXT_H, MASK_C_SEXT_H) +DECLARE_INSN(c_zext_b, MATCH_C_ZEXT_B, MASK_C_ZEXT_B) +DECLARE_INSN(c_zext_h, MATCH_C_ZEXT_H, MASK_C_ZEXT_H) +DECLARE_INSN(c_zext_w, MATCH_C_ZEXT_W, MASK_C_ZEXT_W) +DECLARE_INSN(c_mul, MATCH_C_MUL, MASK_C_MUL) +DECLARE_INSN(c_not, MATCH_C_NOT, MASK_C_NOT) +DECLARE_INSN(c_lbu, MATCH_C_LBU, MASK_C_LBU) +DECLARE_INSN(c_lhu, MATCH_C_LHU, MASK_C_LHU) +DECLARE_INSN(c_lh, MATCH_C_LH, MASK_C_LH) +DECLARE_INSN(c_sb, MATCH_C_SB, MASK_C_SB) +DECLARE_INSN(c_sh, MATCH_C_SH, MASK_C_SH) /* Vendor-specific (T-Head) XTheadBa instructions. */ DECLARE_INSN(th_addsl, MATCH_TH_ADDSL, MASK_TH_ADDSL) /* Vendor-specific (T-Head) XTheadBb instructions. */ diff --git a/include/opcode/riscv.h b/include/opcode/riscv.h index d859f44fc92..808f3657303 100644 --- a/include/opcode/riscv.h +++ b/include/opcode/riscv.h @@ -108,6 +108,10 @@ static inline unsigned int riscv_insn_length (insn_t insn) (RV_X(x, 20, 10)) #define EXTRACT_RVV_VC_IMM(x) \ (RV_X(x, 20, 11)) +#define EXTRACT_ZCB_BYTE_UIMM(x) \ + (RV_X(x, 6, 1) | (RV_X(x, 5, 1) << 1)) +#define EXTRACT_ZCB_HALFWORD_UIMM(x) \ + (RV_X(x, 5, 1) << 1) #define ENCODE_ITYPE_IMM(x) \ (RV_X(x, 0, 12) << 20) @@ -155,6 +159,10 @@ static inline unsigned int riscv_insn_length (insn_t insn) (RV_X(x, 0, 11) << 20) #define ENCODE_RVV_VI_UIMM6(x) \ (RV_X(x, 0, 5) << 15 | RV_X(x, 5, 1) << 26) +#define ENCODE_ZCB_BYTE_UIMM(x) \ + ((RV_X(x, 0, 1) << 6) | (RV_X(x, 1, 1) << 5)) +#define ENCODE_ZCB_HALFWORD_UIMM(x) \ + (RV_X(x, 1, 1) << 5) #define VALID_ITYPE_IMM(x) (EXTRACT_ITYPE_IMM(ENCODE_ITYPE_IMM(x)) == (x)) #define VALID_STYPE_IMM(x) (EXTRACT_STYPE_IMM(ENCODE_STYPE_IMM(x)) == (x)) @@ -180,6 +188,8 @@ static inline unsigned int riscv_insn_length (insn_t insn) #define VALID_CJTYPE_IMM(x) (EXTRACT_CJTYPE_IMM(ENCODE_CJTYPE_IMM(x)) == (x)) #define VALID_RVV_VB_IMM(x) (EXTRACT_RVV_VB_IMM(ENCODE_RVV_VB_IMM(x)) == (x)) #define VALID_RVV_VC_IMM(x) (EXTRACT_RVV_VC_IMM(ENCODE_RVV_VC_IMM(x)) == (x)) +#define VALID_ZCB_BYTE_UIMM(x) (EXTRACT_ZCB_BYTE_UIMM(ENCODE_ZCB_BYTE_UIMM(x)) == (x)) +#define VALID_ZCB_HALFWORD_UIMM(x) (EXTRACT_ZCB_HALFWORD_UIMM(ENCODE_ZCB_HALFWORD_UIMM(x)) == (x)) #define RISCV_RTYPE(insn, rd, rs1, rs2) \ ((MATCH_ ## insn) | ((rd) << OP_SH_RD) | ((rs1) << OP_SH_RS1) | ((rs2) << OP_SH_RS2)) @@ -418,11 +428,13 @@ enum riscv_insn_class INSN_CLASS_ZVBC, INSN_CLASS_ZVKG, INSN_CLASS_ZVKNED, - INSN_CLASS_ZVKNHA, - INSN_CLASS_ZVKNHB, INSN_CLASS_ZVKNHA_OR_ZVKNHB, INSN_CLASS_ZVKSED, INSN_CLASS_ZVKSH, + INSN_CLASS_ZCB, + INSN_CLASS_ZCB_AND_ZBA, + INSN_CLASS_ZCB_AND_ZBB, + INSN_CLASS_ZCB_AND_ZMMUL, INSN_CLASS_SVINVAL, INSN_CLASS_ZICBOM, INSN_CLASS_ZICBOP, diff --git a/ld/ChangeLog b/ld/ChangeLog index ed73b7f2019..99029f1e186 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,12 +1,9 @@ -2023-07-30 Nick Clifton +2023-07-24 Johannes Schauer Marin Rodrigues - This is the 2.41 release. - * configure: Regenerate. - * po/ld.pot: Regenerate. - - modified: opcodes/configure - modified: opcodes/po/opcodes.pot - modified: src-release.sh + * pe-dll.c (fill_edata): If inserting a timestamp, use the value + held in the SOURCE_DATE_EPOCH environment variable, if it is + defined. + * ld.texi (--insert-timestamp): Document change in behaviour. 2023-07-03 Nick Clifton diff --git a/ld/configure b/ld/configure index 7037dfdd03e..33e09fc6987 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.41. +# Generated by GNU Autoconf 2.69 for ld 2.41.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.41' -PACKAGE_STRING='ld 2.41' +PACKAGE_VERSION='2.41.50' +PACKAGE_STRING='ld 2.41.50' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1423,7 +1423,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.41 to adapt to many kinds of systems. +\`configure' configures ld 2.41.50 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1494,7 +1494,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of ld 2.41:";; + short | recursive ) echo "Configuration of ld 2.41.50:";; esac cat <<\_ACEOF @@ -1536,7 +1536,7 @@ Optional Features: --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 + enable warnings when creating segments with RWX permissions --enable-default-execstack create an executable stack if an input file is @@ -1661,7 +1661,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -ld configure 2.41 +ld configure 2.41.50 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2376,7 +2376,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.41, which was +It was created by ld $as_me 2.41.50, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3359,7 +3359,7 @@ fi # Define the identity of the package. PACKAGE='ld' - VERSION='2.41' + VERSION='2.41.50' cat >>confdefs.h <<_ACEOF @@ -18083,7 +18083,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.41, which was +This file was extended by ld $as_me 2.41.50, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -18149,7 +18149,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.41 +ld config.status 2.41.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 77edac3258c..217ef7b2733 100644 --- a/ld/configure.ac +++ b/ld/configure.ac @@ -228,7 +228,7 @@ 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]), + [enable warnings when creating segments with RWX permissions]), [case "${enableval}" in yes) ac_default_ld_warn_rwx_segments=1 ;; no) ac_default_ld_warn_rwx_segments=0 ;; diff --git a/ld/emulparams/elf64_s390.sh b/ld/emulparams/elf64_s390.sh index 899efd7f532..d0a2a59a092 100644 --- a/ld/emulparams/elf64_s390.sh +++ b/ld/emulparams/elf64_s390.sh @@ -17,6 +17,7 @@ EXTRA_EM_FILE=s390 IREL_IN_PLT= SEPARATE_GOTPLT=0 test -z "$RELRO" && unset SEPARATE_GOTPLT +SYMBOL_ABI_ALIGNMENT=2 # Treat a host that matches the target with the possible exception of "x" # in the name as if it were native. diff --git a/ld/emulparams/elf_s390.sh b/ld/emulparams/elf_s390.sh index cb1c6b5b04d..1b2fca3f937 100644 --- a/ld/emulparams/elf_s390.sh +++ b/ld/emulparams/elf_s390.sh @@ -12,3 +12,4 @@ GENERATE_SHLIB_SCRIPT=yes GENERATE_PIE_SCRIPT=yes NO_SMALL_DATA=yes IREL_IN_PLT= +SYMBOL_ABI_ALIGNMENT=2 diff --git a/ld/emultempl/pdp11.em b/ld/emultempl/pdp11.em index 8ff260a4c13..c6dbdeedd6a 100644 --- a/ld/emultempl/pdp11.em +++ b/ld/emultempl/pdp11.em @@ -21,6 +21,7 @@ fragment <> << -5 left == != > < <= >= -6 left & -7 left | -8 left && -9 left || -10 right ? : -11 right &= += -= *= /= (2) +5 left > < <= >= +6 left == != +7 left & +8 left ^ +9 left | +10 left && +11 left || +12 right ? : +13 right += -= *= /= <<= >>= &= |= ^= (2) (lowest) @end smallexample Notes: @@ -6856,13 +6863,15 @@ height2pt&\omit&&\omit&&\omit&\cr &2&&left&&* / \%&\cr &3&&left&&+ -&\cr &4&&left&&>> <<&\cr -&5&&left&&== != > < <= >=&\cr -&6&&left&&\&&\cr -&7&&left&&|&\cr -&8&&left&&{\&\&}&\cr -&9&&left&&||&\cr -&10&&right&&? :&\cr -&11&&right&&\qquad\&= += -= *= /=\qquad\ddag&\cr +&5&&left&& > < <= >=&\cr +&6&&left&&== !=&\cr +&7&&left&&\&&\cr +&8&&left&&\^{}&\cr +&9&&left&&|&\cr +&10&&left&&{\&\&}&\cr +&11&&left&&||&\cr +&12&&right&&? :&\cr +&13&&right&&\qquad += -= *= /= <<= >>= \&= |= \^{}=\qquad\ddag&\cr &lowest&&&&&\cr height2pt&\omit&&\omit&&\omit&\cr} \hrule} @@ -7110,10 +7119,13 @@ The builtin function @code{NEXT} is closely related to @code{ALIGN}. @kindex ALIGNOF(@var{section}) @cindex section alignment Return the alignment in bytes of the named @var{section}, if that section has -been allocated. If the section has not been allocated when this is -evaluated, the linker will report an error. In the following example, -the alignment of the @code{.output} section is stored as the first -value in that section. +been allocated, or zero if the section has not been allocated. If the +section does not exist in the linker script the linker will report an +error. If @var{section} is @code{NEXT_SECTION} then @code{ALIGNOF} will +return the alignment of the next allocated section specified in the +linker script, or zero if there is no such section. In the following +example, the alignment of the @code{.output} section is stored as the +first value in that section. @smallexample @group SECTIONS@{ @dots{} @@ -7262,9 +7274,13 @@ name. @kindex SIZEOF(@var{section}) @cindex section size Return the size in bytes of the named @var{section}, if that section has -been allocated. If the section has not been allocated when this is -evaluated, the linker will report an error. In the following example, -@code{symbol_1} and @code{symbol_2} are assigned identical values: +been allocated, or zero if the section has not been allocated. If the +section does not exist in the linker script the linker will report an +error. If @var{section} is @code{NEXT_SECTION} then @code{SIZEOF} will +return the alignment of the next allocated section specified in the +linker script, or zero if there is no such section. In the following +example, @code{symbol_1} and @code{symbol_2} are assigned identical +values: @smallexample @group SECTIONS@{ @dots{} diff --git a/ld/ldctor.c b/ld/ldctor.c index 2f80aa02df6..936bf4a7977 100644 --- a/ld/ldctor.c +++ b/ld/ldctor.c @@ -20,6 +20,7 @@ MA 02110-1301, USA. */ #include "sysdep.h" +#include "libiberty.h" #include "bfd.h" #include "bfdlink.h" #include "safe-ctype.h" diff --git a/ld/ldelfgen.c b/ld/ldelfgen.c index 8e4a188964e..62fce3e60fa 100644 --- a/ld/ldelfgen.c +++ b/ld/ldelfgen.c @@ -19,6 +19,7 @@ MA 02110-1301, USA. */ #include "sysdep.h" +#include "libiberty.h" #include "bfd.h" #include "bfdlink.h" #include "ctf-api.h" diff --git a/ld/ldexp.c b/ld/ldexp.c index 170e1ed7f56..c53879534a5 100644 --- a/ld/ldexp.c +++ b/ld/ldexp.c @@ -94,6 +94,7 @@ exp_print_token (token_code_type code, int infix_p) { RSHIFTEQ, ">>=" }, { ANDEQ, "&=" }, { OREQ, "|=" }, + { XOREQ, "^=" }, { OROR, "||" }, { ANDAND, "&&" }, { EQ, "==" }, @@ -691,6 +692,24 @@ fold_trinary (etree_type *tree) : tree->trinary.rhs); } +static lang_output_section_statement_type * +output_section_find (const char *name) +{ + lang_output_section_statement_type *os = lang_output_section_find (name); + + if (os == NULL && strcmp (name, "NEXT_SECTION") == 0) + { + os = expld.last_os; + if (os != NULL) + while ((os = os->next) != NULL) + if (os->constraint >= 0 && os->bfd_section != NULL) + break; + if (os == NULL) + os = abs_output_section; + } + return os; +} + static void fold_name (etree_type *tree) { @@ -850,7 +869,7 @@ fold_name (etree_type *tree) { lang_output_section_statement_type *os; - os = lang_output_section_find (tree->name.name); + os = output_section_find (tree->name.name); if (os == NULL) { if (expld.phase == lang_final_phase_enum) @@ -1270,29 +1289,32 @@ exp_fold_tree_1 (etree_type *tree) } void -exp_fold_tree (etree_type *tree, asection *current_section, bfd_vma *dotp) +exp_fold_tree (etree_type *tree, lang_output_section_statement_type *os, + asection *current_section, bfd_vma *dotp) { expld.rel_from_abs = false; expld.dot = *dotp; expld.dotp = dotp; expld.section = current_section; + expld.last_os = os; exp_fold_tree_1 (tree); } void -exp_fold_tree_no_dot (etree_type *tree) +exp_fold_tree_no_dot (etree_type *tree, lang_output_section_statement_type *os) { expld.rel_from_abs = false; expld.dot = 0; expld.dotp = NULL; expld.section = bfd_abs_section_ptr; + expld.last_os = os; exp_fold_tree_1 (tree); } static void exp_value_fold (etree_type *tree) { - exp_fold_tree_no_dot (tree); + exp_fold_tree_no_dot (tree, NULL); if (expld.result.valid_p) { tree->type.node_code = INT; @@ -1547,11 +1569,12 @@ exp_print_tree (etree_type *tree) } bfd_vma -exp_get_vma (etree_type *tree, bfd_vma def, char *name) +exp_get_vma (etree_type *tree, lang_output_section_statement_type *os, + bfd_vma def, char *name) { if (tree != NULL) { - exp_fold_tree_no_dot (tree); + exp_fold_tree_no_dot (tree, os); if (expld.result.valid_p) return expld.result.value; else if (name != NULL && expld.phase != lang_mark_phase_enum) @@ -1567,9 +1590,10 @@ exp_get_vma (etree_type *tree, bfd_vma def, char *name) NULL or cannot be resolved, return -1. */ int -exp_get_power (etree_type *tree, char *name) +exp_get_power (etree_type *tree, lang_output_section_statement_type *os, + char *name) { - bfd_vma x = exp_get_vma (tree, -1, name); + bfd_vma x = exp_get_vma (tree, os, -1, name); bfd_vma p2; int n; @@ -1593,7 +1617,7 @@ exp_get_fill (etree_type *tree, fill_type *def, char *name) if (tree == NULL) return def; - exp_fold_tree_no_dot (tree); + exp_fold_tree_no_dot (tree, NULL); if (!expld.result.valid_p) { if (name != NULL && expld.phase != lang_mark_phase_enum) @@ -1647,7 +1671,7 @@ exp_get_abs_int (etree_type *tree, int def, char *name) { if (tree != NULL) { - exp_fold_tree_no_dot (tree); + exp_fold_tree_no_dot (tree, NULL); if (expld.result.valid_p) { diff --git a/ld/ldexp.h b/ld/ldexp.h index 70908c17eb5..7c302753192 100644 --- a/ld/ldexp.h +++ b/ld/ldexp.h @@ -133,6 +133,8 @@ enum relro_enum { exp_seg_relro_end, }; +struct lang_output_section_statement_struct; + typedef struct { enum phase_enum phase; @@ -176,10 +178,17 @@ struct ldexp_control { etree_value_type result; bfd_vma dot; - /* Current dot and section passed to ldexp folder. */ + /* Current dot and section passed to ldexp folder. SECTION will be + bfd_abs_section for expressions outside of an output section + statement. */ bfd_vma *dotp; asection *section; + /* Last output section statement. For expressions within an output + section statement, this will be the current output section + statement being processed. */ + struct lang_output_section_statement_struct *last_os; + /* State machine and results for DATASEG. */ seg_align_type dataseg; }; @@ -211,9 +220,10 @@ etree_type *exp_bigintop etree_type *exp_relop (asection *, bfd_vma); void exp_fold_tree - (etree_type *, asection *, bfd_vma *); + (etree_type *, struct lang_output_section_statement_struct *, + asection *, bfd_vma *); void exp_fold_tree_no_dot - (etree_type *); + (etree_type *, struct lang_output_section_statement_struct *); etree_type *exp_binop (int, etree_type *, etree_type *); etree_type *exp_trinop @@ -233,9 +243,9 @@ etree_type *exp_assert void exp_print_tree (etree_type *); bfd_vma exp_get_vma - (etree_type *, bfd_vma, char *); + (etree_type *, struct lang_output_section_statement_struct *, bfd_vma, char *); int exp_get_power - (etree_type *, char *); + (etree_type *, struct lang_output_section_statement_struct *, char *); fill_type *exp_get_fill (etree_type *, fill_type *, char *); bfd_vma exp_get_abs_int diff --git a/ld/ldgram.y b/ld/ldgram.y index 081176ba0f1..2b4b5070982 100644 --- a/ld/ldgram.y +++ b/ld/ldgram.y @@ -27,6 +27,7 @@ #define DONTDECLARE_MALLOC #include "sysdep.h" +#include "libiberty.h" #include "bfd.h" #include "bfdlink.h" #include "ctf-api.h" @@ -58,6 +59,8 @@ static char *error_names[ERROR_NAME_MAX]; static int error_index; #define PUSH_ERROR(x) if (error_index < ERROR_NAME_MAX) error_names[error_index] = x; error_index++; #define POP_ERROR() error_index--; + +static void yyerror (const char *); %} %union { bfd_vma integer; @@ -108,7 +111,7 @@ static int error_index; %type phdr_opt %type opt_nocrossrefs -%right PLUSEQ MINUSEQ MULTEQ DIVEQ '=' LSHIFTEQ RSHIFTEQ ANDEQ OREQ +%right PLUSEQ MINUSEQ MULTEQ DIVEQ '=' LSHIFTEQ RSHIFTEQ ANDEQ OREQ XOREQ %right '?' ':' %left OROR %left ANDAND @@ -747,6 +750,8 @@ assign_op: { $$ = '&'; } | OREQ { $$ = '|'; } + | XOREQ + { $$ = '^'; } ; @@ -1504,9 +1509,8 @@ opt_semicolon: ; %% -void -yyerror(arg) - const char *arg; +static void +yyerror (const char *arg) { if (ldfile_assumed_script) einfo (_("%P:%s: file format not recognized; treating as linker script\n"), diff --git a/ld/ldlang.c b/ld/ldlang.c index a357f80235f..f7760fed69b 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -2439,7 +2439,7 @@ init_os (lang_output_section_statement_type *s, flagword flags) /* If supplied an alignment, set it. */ if (s->section_alignment != NULL) - s->bfd_section->alignment_power = exp_get_power (s->section_alignment, + s->bfd_section->alignment_power = exp_get_power (s->section_alignment, s, "section alignment"); } @@ -3494,17 +3494,20 @@ static struct bfd_link_hash_entry *plugin_undefs = NULL; #endif static void -open_input_bfds (lang_statement_union_type *s, enum open_bfd_mode mode) +open_input_bfds (lang_statement_union_type *s, + lang_output_section_statement_type *os, + enum open_bfd_mode mode) { for (; s != NULL; s = s->header.next) { switch (s->header.type) { case lang_constructors_statement_enum: - open_input_bfds (constructor_list.head, mode); + open_input_bfds (constructor_list.head, os, mode); break; case lang_output_section_statement_enum: - open_input_bfds (s->output_section_statement.children.head, mode); + os = &s->output_section_statement; + open_input_bfds (os->children.head, os, mode); break; case lang_wild_statement_enum: /* Maybe we should load the file's symbols. */ @@ -3513,7 +3516,7 @@ open_input_bfds (lang_statement_union_type *s, enum open_bfd_mode mode) && !wildcardp (s->wild_statement.filename) && !archive_path (s->wild_statement.filename)) lookup_name (s->wild_statement.filename); - open_input_bfds (s->wild_statement.children.head, mode); + open_input_bfds (s->wild_statement.children.head, os, mode); break; case lang_group_statement_enum: { @@ -3532,7 +3535,7 @@ open_input_bfds (lang_statement_union_type *s, enum open_bfd_mode mode) plugin_insert_save = plugin_insert; #endif undefs = link_info.hash->undefs_tail; - open_input_bfds (s->group_statement.children.head, + open_input_bfds (s->group_statement.children.head, os, mode | OPEN_BFD_FORCE); } while (undefs != link_info.hash->undefs_tail @@ -3619,7 +3622,7 @@ open_input_bfds (lang_statement_union_type *s, enum open_bfd_mode mode) break; case lang_assignment_statement_enum: if (s->assignment_statement.exp->type.node_class != etree_assert) - exp_fold_tree_no_dot (s->assignment_statement.exp); + exp_fold_tree_no_dot (s->assignment_statement.exp, os); break; default: break; @@ -4227,7 +4230,7 @@ map_input_to_output_sections } else { - exp_fold_tree_no_dot (os->sectype_value); + exp_fold_tree_no_dot (os->sectype_value, os); if (expld.result.valid_p) type = expld.result.value; else @@ -4654,6 +4657,7 @@ print_output_section_statement if (output_section_statement->update_dot_tree != NULL) exp_fold_tree (output_section_statement->update_dot_tree, + output_section_statement, bfd_abs_section_ptr, &print_dot); } @@ -4692,7 +4696,7 @@ print_assignment (lang_assignment_statement_type *assignment, osec = bfd_abs_section_ptr; if (assignment->exp->type.node_class != etree_provide) - exp_fold_tree (tree, osec, &print_dot); + exp_fold_tree (tree, output_section, osec, &print_dot); else expld.result.valid_p = false; @@ -5423,6 +5427,7 @@ size_input_section if (output_section_statement->subsection_alignment != NULL) i->alignment_power = exp_get_power (output_section_statement->subsection_alignment, + output_section_statement, "subsection alignment"); if (o->alignment_power < i->alignment_power) @@ -5761,7 +5766,7 @@ ldlang_check_relro_region (lang_statement_union_type *s) static bfd_vma lang_size_sections_1 (lang_statement_union_type **prev, - lang_output_section_statement_type *output_section_statement, + lang_output_section_statement_type *current_os, fill_type *fill, bfd_vma dot, bool *relax, @@ -5770,6 +5775,7 @@ lang_size_sections_1 lang_statement_union_type *s; lang_statement_union_type *prev_s = NULL; bool removed_prev_s = false; + lang_output_section_statement_type *os = current_os; /* Size up the sections from their constituent parts. */ for (s = *prev; s != NULL; prev_s = s, s = s->header.next) @@ -5781,7 +5787,6 @@ lang_size_sections_1 case lang_output_section_statement_enum: { bfd_vma newdot, after, dotdelta; - lang_output_section_statement_type *os; lang_memory_region_type *r; int section_alignment = 0; @@ -5800,7 +5805,7 @@ lang_size_sections_1 os->addr_tree = exp_intop (0); if (os->addr_tree != NULL) { - exp_fold_tree (os->addr_tree, bfd_abs_section_ptr, &dot); + exp_fold_tree (os->addr_tree, os, bfd_abs_section_ptr, &dot); if (expld.result.valid_p) { @@ -5905,7 +5910,7 @@ lang_size_sections_1 section_alignment = os->bfd_section->alignment_power; } else - section_alignment = exp_get_power (os->section_alignment, + section_alignment = exp_get_power (os->section_alignment, os, "section alignment"); /* Align to what the section needs. */ @@ -5993,6 +5998,7 @@ lang_size_sections_1 statement. */ if (os->lma_region != os->region) section_alignment = exp_get_power (os->section_alignment, + os, "section alignment"); if (section_alignment > 0) lma = align_power (lma, section_alignment); @@ -6082,7 +6088,7 @@ lang_size_sections_1 dot += dotdelta; if (os->update_dot_tree != 0) - exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot); + exp_fold_tree (os->update_dot_tree, os, bfd_abs_section_ptr, &dot); /* Update dot in the region ? We only do this if the section is going to be allocated, @@ -6113,8 +6119,7 @@ lang_size_sections_1 break; case lang_constructors_statement_enum: - dot = lang_size_sections_1 (&constructor_list.head, - output_section_statement, + dot = lang_size_sections_1 (&constructor_list.head, current_os, fill, dot, relax, check_regions); break; @@ -6122,14 +6127,13 @@ lang_size_sections_1 { unsigned int size = 0; - s->data_statement.output_offset = - dot - output_section_statement->bfd_section->vma; - s->data_statement.output_section = - output_section_statement->bfd_section; + s->data_statement.output_offset = dot - current_os->bfd_section->vma; + s->data_statement.output_section = current_os->bfd_section; /* We might refer to provided symbols in the expression, and need to mark them as needed. */ - exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot); + exp_fold_tree (s->data_statement.exp, os, + bfd_abs_section_ptr, &dot); switch (s->data_statement.type) { @@ -6152,10 +6156,9 @@ lang_size_sections_1 if (size < TO_SIZE ((unsigned) 1)) size = TO_SIZE ((unsigned) 1); dot += TO_ADDR (size); - if (!(output_section_statement->bfd_section->flags - & SEC_FIXED_SIZE)) - output_section_statement->bfd_section->size - = TO_SIZE (dot - output_section_statement->bfd_section->vma); + if (!(current_os->bfd_section->flags & SEC_FIXED_SIZE)) + current_os->bfd_section->size + = TO_SIZE (dot - current_os->bfd_section->vma); } break; @@ -6164,29 +6167,27 @@ lang_size_sections_1 { int size; - s->reloc_statement.output_offset = - dot - output_section_statement->bfd_section->vma; - s->reloc_statement.output_section = - output_section_statement->bfd_section; + s->reloc_statement.output_offset + = dot - current_os->bfd_section->vma; + s->reloc_statement.output_section + = current_os->bfd_section; size = bfd_get_reloc_size (s->reloc_statement.howto); dot += TO_ADDR (size); - if (!(output_section_statement->bfd_section->flags - & SEC_FIXED_SIZE)) - output_section_statement->bfd_section->size - = TO_SIZE (dot - output_section_statement->bfd_section->vma); + if (!(current_os->bfd_section->flags & SEC_FIXED_SIZE)) + current_os->bfd_section->size + = TO_SIZE (dot - current_os->bfd_section->vma); } break; case lang_wild_statement_enum: dot = lang_size_sections_1 (&s->wild_statement.children.head, - output_section_statement, - fill, dot, relax, check_regions); + current_os, fill, dot, relax, + check_regions); break; case lang_object_symbols_statement_enum: - link_info.create_object_symbols_section - = output_section_statement->bfd_section; - output_section_statement->bfd_section->flags |= SEC_KEEP; + link_info.create_object_symbols_section = current_os->bfd_section; + current_os->bfd_section->flags |= SEC_KEEP; break; case lang_output_statement_enum: @@ -6207,8 +6208,7 @@ lang_size_sections_1 if (again) *relax = true; } - dot = size_input_section (prev, output_section_statement, - fill, &removed, dot); + dot = size_input_section (prev, current_os, fill, &removed, dot); } break; @@ -6216,8 +6216,7 @@ lang_size_sections_1 break; case lang_fill_statement_enum: - s->fill_statement.output_section = - output_section_statement->bfd_section; + s->fill_statement.output_section = current_os->bfd_section; fill = s->fill_statement.fill; break; @@ -6229,9 +6228,7 @@ lang_size_sections_1 expld.dataseg.relro = exp_seg_relro_none; - exp_fold_tree (tree, - output_section_statement->bfd_section, - &newdot); + exp_fold_tree (tree, os, current_os->bfd_section, &newdot); ldlang_check_relro_region (s); @@ -6242,11 +6239,11 @@ lang_size_sections_1 || tree->type.node_class == etree_assign) && (tree->assign.dst [0] != '.' || tree->assign.dst [1] != '\0')) - output_section_statement->update_dot = 1; + current_os->update_dot = 1; - if (!output_section_statement->ignored) + if (!current_os->ignored) { - if (output_section_statement == abs_output_section) + if (current_os == abs_output_section) { /* If we don't have an output section, then just adjust the default memory address. */ @@ -6259,7 +6256,7 @@ lang_size_sections_1 put the pad before when relaxing, in case the assignment references dot. */ insert_pad (&s->header.next, fill, TO_SIZE (newdot - dot), - output_section_statement->bfd_section, dot); + current_os->bfd_section, dot); /* Don't neuter the pad below when relaxing. */ s = s->header.next; @@ -6268,11 +6265,11 @@ lang_size_sections_1 should have space allocated to it, unless the user has explicitly stated that the section should not be allocated. */ - if (output_section_statement->sectype != noalloc_section - && (output_section_statement->sectype != noload_section + if (current_os->sectype != noalloc_section + && (current_os->sectype != noload_section || (bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour))) - output_section_statement->bfd_section->flags |= SEC_ALLOC; + current_os->bfd_section->flags |= SEC_ALLOC; } dot = newdot; } @@ -6293,13 +6290,13 @@ lang_size_sections_1 section. bfd_set_section_contents will complain even for a pad size of zero. */ s->padding_statement.output_offset - = dot - output_section_statement->bfd_section->vma; + = dot - current_os->bfd_section->vma; break; case lang_group_statement_enum: dot = lang_size_sections_1 (&s->group_statement.children.head, - output_section_statement, - fill, dot, relax, check_regions); + current_os, fill, dot, relax, + check_regions); break; case lang_insert_statement_enum: @@ -6546,6 +6543,8 @@ lang_do_assignments_1 (lang_statement_union_type *s, bfd_vma dot, bool *found_end) { + lang_output_section_statement_type *os = current_os; + for (; s != NULL; s = s->header.next) { switch (s->header.type) @@ -6557,10 +6556,9 @@ lang_do_assignments_1 (lang_statement_union_type *s, case lang_output_section_statement_enum: { - lang_output_section_statement_type *os; bfd_vma newdot; - os = &(s->output_section_statement); + os = &s->output_section_statement; os->after_end = *found_end; init_opb (os->bfd_section); newdot = dot; @@ -6587,7 +6585,7 @@ lang_do_assignments_1 (lang_statement_union_type *s, newdot += TO_ADDR (os->bfd_section->size); if (os->update_dot_tree != NULL) - exp_fold_tree (os->update_dot_tree, + exp_fold_tree (os->update_dot_tree, os, bfd_abs_section_ptr, &newdot); } dot = newdot; @@ -6607,7 +6605,7 @@ lang_do_assignments_1 (lang_statement_union_type *s, break; case lang_data_statement_enum: - exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot); + exp_fold_tree (s->data_statement.exp, os, bfd_abs_section_ptr, &dot); if (expld.result.valid_p) { s->data_statement.value = expld.result.value; @@ -6643,7 +6641,7 @@ lang_do_assignments_1 (lang_statement_union_type *s, break; case lang_reloc_statement_enum: - exp_fold_tree (s->reloc_statement.addend_exp, + exp_fold_tree (s->reloc_statement.addend_exp, os, bfd_abs_section_ptr, &dot); if (expld.result.valid_p) s->reloc_statement.addend_value = expld.result.value; @@ -6682,7 +6680,7 @@ lang_do_assignments_1 (lang_statement_union_type *s, if (strcmp (p, "end") == 0) *found_end = true; } - exp_fold_tree (s->assignment_statement.exp, + exp_fold_tree (s->assignment_statement.exp, os, (current_os->bfd_section != NULL ? current_os->bfd_section : bfd_und_section_ptr), &dot); @@ -8112,7 +8110,7 @@ lang_process (void) /* Create a bfd for each input file. */ current_target = default_target; lang_statement_iteration++; - open_input_bfds (statement_list.head, OPEN_BFD_NORMAL); + open_input_bfds (statement_list.head, NULL, OPEN_BFD_NORMAL); /* Now that open_input_bfds has processed assignments and provide statements we can give values to symbolic origin/length now. */ @@ -8142,7 +8140,12 @@ lang_process (void) link_info.lto_all_symbols_read = true; /* Open any newly added files, updating the file chains. */ plugin_undefs = link_info.hash->undefs_tail; - open_input_bfds (*added.tail, OPEN_BFD_NORMAL); + lang_output_section_statement_type *last_os = NULL; + if (lang_os_list.head != NULL) + last_os = ((lang_output_section_statement_type *) + ((char *) lang_os_list.tail + - offsetof (lang_output_section_statement_type, next))); + open_input_bfds (*added.tail, last_os, OPEN_BFD_NORMAL); if (plugin_undefs == link_info.hash->undefs_tail) plugin_undefs = NULL; /* Restore the global list pointer now they have all been added. */ @@ -8193,7 +8196,7 @@ lang_process (void) /* Rescan archives in case new undefined symbols have appeared. */ files = file_chain; lang_statement_iteration++; - open_input_bfds (statement_list.head, OPEN_BFD_RESCAN); + open_input_bfds (statement_list.head, NULL, OPEN_BFD_RESCAN); lang_list_remove_tail (&file_chain, &files); while (files.head != NULL) { @@ -8848,7 +8851,7 @@ lang_new_phdr (const char *name, n = stat_alloc (sizeof (struct lang_phdr)); n->next = NULL; n->name = name; - n->type = exp_get_vma (type, 0, "program header type"); + n->type = exp_get_vma (type, NULL, 0, "program header type"); n->filehdr = filehdr; n->phdrs = phdrs; n->at = at; @@ -8962,12 +8965,12 @@ lang_record_phdrs (void) if (l->flags == NULL) flags = 0; else - flags = exp_get_vma (l->flags, 0, "phdr flags"); + flags = exp_get_vma (l->flags, NULL, 0, "phdr flags"); if (l->at == NULL) at = 0; else - at = exp_get_vma (l->at, 0, "phdr load address"); + at = exp_get_vma (l->at, NULL, 0, "phdr load address"); if (!bfd_record_phdr (link_info.output_bfd, l->type, l->flags != NULL, flags, l->at != NULL, @@ -9727,7 +9730,7 @@ lang_do_memory_regions (bool update_regions_p) { if (r->origin_exp) { - exp_fold_tree_no_dot (r->origin_exp); + exp_fold_tree_no_dot (r->origin_exp, NULL); if (update_regions_p) { if (expld.result.valid_p) @@ -9742,7 +9745,7 @@ lang_do_memory_regions (bool update_regions_p) } if (r->length_exp) { - exp_fold_tree_no_dot (r->length_exp); + exp_fold_tree_no_dot (r->length_exp, NULL); if (update_regions_p) { if (expld.result.valid_p) diff --git a/ld/ldlex.l b/ld/ldlex.l index 1a6be1b6af2..435172c08c3 100644 --- a/ld/ldlex.l +++ b/ld/ldlex.l @@ -233,6 +233,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)* "/=" { RTOKEN(DIVEQ); } "&=" { RTOKEN(ANDEQ); } "|=" { RTOKEN(OREQ); } +"^=" { RTOKEN(XOREQ); } "&&" { RTOKEN(ANDAND); } ">" { RTOKEN('>'); } "," { RTOKEN(','); } @@ -247,6 +248,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)* "/" { RTOKEN('/'); } "%" { RTOKEN('%'); } "<" { RTOKEN('<'); } +"^" { RTOKEN('^'); } "=" { RTOKEN('='); } "}" { RTOKEN('}'); } "{" { RTOKEN('{'); } diff --git a/ld/ldmisc.h b/ld/ldmisc.h index 6fbc4c7e687..5ab9157cdf8 100644 --- a/ld/ldmisc.h +++ b/ld/ldmisc.h @@ -27,10 +27,6 @@ extern void minfo (const char *, ...); extern void info_msg (const char *, ...); extern void lfinfo (FILE *, const char *, ...); extern void info_assert (const char *, unsigned int); -extern void yyerror (const char *); -extern void *xmalloc (size_t); -extern void *xrealloc (void *, size_t); -extern void xexit (int); #define ASSERT(x) \ do { if (!(x)) info_assert(__FILE__,__LINE__); } while (0) diff --git a/ld/pe-dll.c b/ld/pe-dll.c index 02e03d16948..a95b85c60dd 100644 --- a/ld/pe-dll.c +++ b/ld/pe-dll.c @@ -1231,7 +1231,18 @@ fill_edata (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED) memset (edata_d, 0, edata_sz); if (pe_data (abfd)->timestamp == -1) - H_PUT_32 (abfd, time (0), edata_d + 4); + { + time_t now; + char *source_date_epoch; + + source_date_epoch = getenv ("SOURCE_DATE_EPOCH"); + if (source_date_epoch) + now = (time_t) strtoll (source_date_epoch, NULL, 10); + else + now = time (NULL); + + H_PUT_32 (abfd, now, edata_d + 4); + } else H_PUT_32 (abfd, pe_data (abfd)->timestamp, edata_d + 4); diff --git a/ld/po/ld.pot b/ld/po/ld.pot index 14000d30078..0bef15741a1 100644 --- a/ld/po/ld.pot +++ b/ld/po/ld.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2023-07-30 14:36+0100\n" +"POT-Creation-Date: 2023-01-05 10:57+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -55,15 +55,15 @@ msgstr "" msgid "%P: symbol `%pT' missing from main hash table\n" msgstr "" -#: ldcref.c:517 ldcref.c:628 ldmain.c:1315 ldmisc.c:327 pe-dll.c:759 -#: pe-dll.c:1326 pe-dll.c:1447 pe-dll.c:1549 eaarch64pe.c:1653 earm64pe.c:1653 -#: earm_wince_pe.c:1661 earm_wince_pe.c:1833 earmpe.c:1661 earmpe.c:1833 -#: ei386pe.c:1661 ei386pe.c:1833 ei386pe_posix.c:1661 ei386pe_posix.c:1833 -#: ei386pep.c:1653 emcorepe.c:1661 emcorepe.c:1833 eshpe.c:1661 eshpe.c:1833 +#: ldcref.c:517 ldcref.c:628 ldmain.c:1311 ldmisc.c:324 pe-dll.c:758 +#: pe-dll.c:1324 pe-dll.c:1445 pe-dll.c:1569 eaarch64pe.c:1573 earm64pe.c:1573 +#: earm_wince_pe.c:1575 earm_wince_pe.c:1747 earmpe.c:1575 earmpe.c:1747 +#: ei386pe.c:1575 ei386pe.c:1747 ei386pe_posix.c:1575 ei386pe_posix.c:1747 +#: ei386pep.c:1573 emcorepe.c:1575 emcorepe.c:1747 eshpe.c:1575 eshpe.c:1747 msgid "%F%P: %pB: could not read symbols: %E\n" msgstr "" -#: ldcref.c:690 ldcref.c:697 ldmain.c:1377 ldmain.c:1384 +#: ldcref.c:690 ldcref.c:697 ldmain.c:1373 ldmain.c:1380 msgid "%F%P: %pB: could not read relocs: %E\n" msgstr "" @@ -72,7 +72,7 @@ msgstr "" #. mapped into a section from which references to OUTSECNAME #. are prohibited. We must report an error. #: ldcref.c:724 -msgid "%X%P: %H: prohibited cross reference from %s to `%pT' in %s\n" +msgid "%X%P: %C: prohibited cross reference from %s to `%pT' in %s\n" msgstr "" #: ldctor.c:84 @@ -122,7 +122,7 @@ msgstr "" msgid "%P: warning: %s, needed by %pB, may conflict with %s\n" msgstr "" -#: ldelf.c:286 ldfile.c:343 +#: ldelf.c:286 ldfile.c:133 #, c-format msgid "attempt to open %s failed\n" msgstr "" @@ -140,7 +140,7 @@ msgstr "" msgid "found %s at %s\n" msgstr "" -#: ldelf.c:410 ldlang.c:3087 ldlang.c:3101 +#: ldelf.c:410 ldlang.c:3013 ldlang.c:3027 msgid "%F%P: %pB: error adding symbols: %E\n" msgstr "" @@ -166,76 +166,76 @@ msgstr "" msgid "%F%P: failed to add DT_NEEDED dynamic tag\n" msgstr "" -#: ldelf.c:1254 +#: ldelf.c:1253 msgid "%F%P: %s: can't open for writing: %E\n" msgstr "" -#: ldelf.c:1310 +#: ldelf.c:1309 msgid "%F%P: cannot use executable file '%pB' as input to a link\n" msgstr "" -#: ldelf.c:1364 +#: ldelf.c:1363 msgid "" "%F%P: compact frame descriptions incompatible with DWARF2 .eh_frame from %" "pB\n" msgstr "" -#: ldelf.c:1400 +#: ldelf.c:1399 msgid "" "%P: warning: cannot create .eh_frame_hdr section, --eh-frame-hdr ignored\n" msgstr "" -#: ldelf.c:1406 +#: ldelf.c:1405 msgid "%F%P: failed to parse EH frame entries\n" msgstr "" -#: ldelf.c:1448 +#: ldelf.c:1447 msgid "%P: warning: .note.gnu.build-id section discarded, --build-id ignored\n" msgstr "" -#: ldelf.c:1497 eaarch64pe.c:1427 earm64pe.c:1427 earm_wince_pe.c:1417 -#: earmpe.c:1417 ei386pe.c:1417 ei386pe_posix.c:1417 ei386pep.c:1427 -#: emcorepe.c:1417 eshpe.c:1417 +#: ldelf.c:1496 eaarch64pe.c:1357 earm64pe.c:1357 earm_wince_pe.c:1341 +#: earmpe.c:1341 ei386pe.c:1341 ei386pe_posix.c:1341 ei386pep.c:1357 +#: emcorepe.c:1341 eshpe.c:1341 msgid "%P: warning: unrecognized --build-id style ignored\n" msgstr "" -#: ldelf.c:1516 +#: ldelf.c:1515 msgid "" "%P: warning: cannot create .note.gnu.build-id section, --build-id ignored\n" msgstr "" -#: ldelf.c:1537 +#: ldelf.c:1536 msgid "" "%P: warning: .note.package section discarded, --package-metadata ignored\n" msgstr "" -#: ldelf.c:1592 +#: ldelf.c:1591 msgid "%P: warning: --package-metadata is empty, ignoring\n" msgstr "" -#: ldelf.c:1602 +#: ldelf.c:1601 msgid "" "%P: warning: --package-metadata=%s does not contain valid JSON, ignoring: %" "s\n" msgstr "" -#: ldelf.c:1631 +#: ldelf.c:1630 msgid "" "%P: warning: cannot create .note.package section, --package-metadata " "ignored\n" msgstr "" -#: ldelf.c:1663 eaix5ppc.c:1574 eaix5rs6.c:1574 eaixppc.c:1574 eaixrs6.c:1574 +#: ldelf.c:1662 eaix5ppc.c:1574 eaix5rs6.c:1574 eaixppc.c:1574 eaixrs6.c:1574 #: eppcmacos.c:1574 msgid "%F%P: failed to record assignment to %s: %E\n" msgstr "" -#: ldelf.c:1841 ldelf.c:1906 eaix5ppc.c:844 eaix5rs6.c:844 eaixppc.c:844 +#: ldelf.c:1840 ldelf.c:1905 eaix5ppc.c:844 eaix5rs6.c:844 eaixppc.c:844 #: eaixrs6.c:844 eelf64_ia64_vms.c:209 eppcmacos.c:844 msgid "%F%P: failed to set dynamic section sizes: %E\n" msgstr "" -#: ldelf.c:1878 +#: ldelf.c:1877 msgid "%F%P: %pB: can't read contents of section .gnu.warning: %E\n" msgstr "" @@ -316,11 +316,9 @@ msgstr "" msgid "%F%P:%pS / by zero\n" msgstr "" -#: ldexp.c:745 ldlang.c:3942 ldmain.c:1282 eaarch64pe.c:1241 eaarch64pe.c:1842 -#: earm64pe.c:1241 earm64pe.c:1842 earm_wince_pe.c:1232 earm_wince_pe.c:1944 -#: earmpe.c:1232 earmpe.c:1944 ei386pe.c:1232 ei386pe.c:1944 -#: ei386pe_posix.c:1232 ei386pe_posix.c:1944 ei386pep.c:1241 ei386pep.c:1842 -#: emcorepe.c:1232 emcorepe.c:1944 eshpe.c:1232 eshpe.c:1944 +#: ldexp.c:745 ldlang.c:3864 ldmain.c:1278 eaarch64pe.c:1762 earm64pe.c:1762 +#: earm_wince_pe.c:1858 earmpe.c:1858 ei386pe.c:1858 ei386pe_posix.c:1858 +#: ei386pep.c:1762 emcorepe.c:1858 eshpe.c:1858 msgid "%F%P: bfd_link_hash_lookup failed: %E\n" msgstr "" @@ -368,818 +366,778 @@ msgstr "" msgid "%F%P:%pS: nonconstant expression for %s\n" msgstr "" -#: ldexp.c:1686 ldlang.c:1311 ldlang.c:3420 ldlang.c:8102 +#: ldexp.c:1686 ldlang.c:1272 ldlang.c:3346 ldlang.c:7906 msgid "%F%P: can not create hash table: %E\n" msgstr "" -#: ldfile.c:238 -#, c-format -msgid "remap input file '%s' to '%s' based upon pattern '%s'\n" -msgstr "" - -#: ldfile.c:241 -#, c-format -msgid "remove input file '%s' based upon pattern '%s'\n" -msgstr "" - -#: ldfile.c:247 -#, c-format -msgid "remap input file '%s' to '%s'\n" -msgstr "" - -#: ldfile.c:250 -#, c-format -msgid "remove input file '%s'\n" -msgstr "" - -#: ldfile.c:268 -msgid "" -"\n" -"Input File Remapping\n" -"\n" -msgstr "" - -#: ldfile.c:273 -#, c-format -msgid " Pattern: %s\tMaps To: %s\n" -msgstr "" - -#: ldfile.c:274 -msgid "" -msgstr "" - -#: ldfile.c:345 +#: ldfile.c:135 #, c-format msgid "attempt to open %s succeeded\n" msgstr "" -#: ldfile.c:351 +#: ldfile.c:141 msgid "%F%P: invalid BFD target `%s'\n" msgstr "" -#: ldfile.c:481 ldfile.c:511 +#: ldfile.c:267 ldfile.c:297 msgid "%P: skipping incompatible %s when searching for %s\n" msgstr "" -#: ldfile.c:494 +#: ldfile.c:280 msgid "%F%P: attempted static link of dynamic object `%s'\n" msgstr "" -#: ldfile.c:621 +#: ldfile.c:407 msgid "%P: cannot find %s (%s): %E\n" msgstr "" #. We ignore the return status of the script #. and always print the error message. -#: ldfile.c:624 ldfile.c:708 ldfile.c:712 +#: ldfile.c:410 ldfile.c:494 ldfile.c:498 msgid "%P: cannot find %s: %E\n" msgstr "" -#: ldfile.c:676 +#: ldfile.c:462 msgid "%P: cannot find %s inside %s\n" msgstr "" -#: ldfile.c:691 ldmain.c:1462 +#: ldfile.c:477 ldmain.c:1458 msgid "%P: About to run error handling script '%s' with arguments: '%s' '%s'\n" msgstr "" -#: ldfile.c:695 ldmain.c:1466 +#: ldfile.c:481 ldmain.c:1462 msgid "error handling script" msgstr "" -#: ldfile.c:701 ldmain.c:1472 +#: ldfile.c:487 ldmain.c:1468 msgid "%P: Failed to run error handling script '%s', reason: " msgstr "" -#: ldfile.c:722 +#: ldfile.c:508 msgid "%P: note to link with %s use -l:%s or rename it to lib%s\n" msgstr "" -#: ldfile.c:751 +#: ldfile.c:537 #, c-format msgid "cannot find script file %s\n" msgstr "" -#: ldfile.c:753 +#: ldfile.c:539 #, c-format msgid "opened script file %s\n" msgstr "" -#: ldfile.c:902 +#: ldfile.c:688 msgid "%F%P: error: linker script file '%s' appears multiple times\n" msgstr "" -#: ldfile.c:924 +#: ldfile.c:710 msgid "%F%P: cannot open linker script file %s: %E\n" msgstr "" -#: ldfile.c:997 +#: ldfile.c:783 msgid "%F%P: cannot represent machine `%s'\n" msgstr "" -#: ldlang.c:1397 +#: ldlang.c:1357 msgid "%P:%pS: warning: redeclaration of memory region `%s'\n" msgstr "" -#: ldlang.c:1403 +#: ldlang.c:1363 msgid "%P:%pS: warning: memory region `%s' not declared\n" msgstr "" -#: ldlang.c:1439 +#: ldlang.c:1399 msgid "%F%P:%pS: error: alias for default memory region\n" msgstr "" -#: ldlang.c:1450 +#: ldlang.c:1410 msgid "%F%P:%pS: error: redefinition of memory region alias `%s'\n" msgstr "" -#: ldlang.c:1457 +#: ldlang.c:1417 msgid "%F%P:%pS: error: memory region `%s' for alias `%s' does not exist\n" msgstr "" -#: ldlang.c:1518 ldlang.c:1553 +#: ldlang.c:1478 ldlang.c:1513 msgid "%F%P: failed creating section `%s': %E\n" msgstr "" -#: ldlang.c:2258 +#: ldlang.c:2215 msgid "" "\n" "As-needed library included to satisfy reference by file (symbol)\n" "\n" msgstr "" -#: ldlang.c:2323 +#: ldlang.c:2278 +#, c-format msgid "" "\n" "Discarded input sections\n" "\n" msgstr "" -#: ldlang.c:2331 -msgid "" -"\n" -"There are no discarded input sections\n" -msgstr "" - -#: ldlang.c:2333 +#: ldlang.c:2286 msgid "" "\n" "Memory Configuration\n" "\n" msgstr "" -#: ldlang.c:2335 +#: ldlang.c:2288 msgid "Name" msgstr "" -#: ldlang.c:2335 +#: ldlang.c:2288 msgid "Origin" msgstr "" -#: ldlang.c:2335 +#: ldlang.c:2288 msgid "Length" msgstr "" -#: ldlang.c:2335 +#: ldlang.c:2288 msgid "Attributes" msgstr "" -#: ldlang.c:2359 +#: ldlang.c:2312 +#, c-format msgid "" "\n" "Linker script and memory map\n" "\n" msgstr "" -#: ldlang.c:2412 +#: ldlang.c:2365 msgid "%F%P: illegal use of `%s' section\n" msgstr "" -#: ldlang.c:2421 +#: ldlang.c:2374 msgid "%F%P: output format %s cannot represent section called %s: %E\n" msgstr "" -#: ldlang.c:2588 +#: ldlang.c:2541 msgid "" "%P:%pS: warning: --enable-non-contiguous-regions makes section `%pA' from `%" "pB' match /DISCARD/ clause.\n" msgstr "" -#: ldlang.c:2612 +#: ldlang.c:2574 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:2990 +#: ldlang.c:2916 msgid "%P: %pB: file not recognized: %E; matching formats:" msgstr "" -#: ldlang.c:2999 +#: ldlang.c:2925 msgid "%F%P: %pB: file not recognized: %E\n" msgstr "" -#: ldlang.c:3072 +#: ldlang.c:2998 msgid "%F%P: %pB: member %pB in archive is not an object\n" msgstr "" -#: ldlang.c:3342 +#: ldlang.c:3268 msgid "%F%P: input file '%s' is the same as output file\n" msgstr "" -#: ldlang.c:3390 +#: ldlang.c:3316 msgid "" "%P: warning: could not find any targets that match endianness requirement\n" msgstr "" -#: ldlang.c:3404 +#: ldlang.c:3330 msgid "%F%P: target %s not found\n" msgstr "" -#: ldlang.c:3406 +#: ldlang.c:3332 msgid "%F%P: cannot open output file %s: %E\n" msgstr "" -#: ldlang.c:3412 +#: ldlang.c:3338 msgid "%F%P: %s: can not make object file: %E\n" msgstr "" -#: ldlang.c:3416 +#: ldlang.c:3342 msgid "%F%P: %s: can not set architecture: %E\n" msgstr "" -#: ldlang.c:3600 +#: ldlang.c:3522 msgid "%P: warning: %s contains output sections; did you forget -T?\n" msgstr "" -#: ldlang.c:3647 +#: ldlang.c:3569 #, c-format msgid "%s: %s\n" msgstr "" -#: ldlang.c:3647 +#: ldlang.c:3569 msgid "CTF warning" msgstr "" -#: ldlang.c:3647 +#: ldlang.c:3569 msgid "CTF error" msgstr "" -#: ldlang.c:3653 +#: ldlang.c:3575 #, c-format msgid "CTF error: cannot get CTF errors: `%s'\n" msgstr "" -#: ldlang.c:3687 +#: ldlang.c:3609 msgid "" "%P: warning: CTF section in %pB not loaded; its types will be discarded: %s\n" msgstr "" -#: ldlang.c:3716 +#: ldlang.c:3638 msgid "%P: warning: CTF output not created: `%s'\n" msgstr "" -#: ldlang.c:3759 +#: ldlang.c:3681 msgid "%P: warning: CTF section in %pB cannot be linked: `%s'\n" msgstr "" -#: ldlang.c:3779 +#: ldlang.c:3701 msgid "%P: warning: CTF linking failed; output will have no CTF section: %s\n" msgstr "" -#: ldlang.c:3850 +#: ldlang.c:3772 msgid "" "%P: warning: CTF section emission failed; output will have no CTF section: %" "s\n" msgstr "" -#: ldlang.c:3889 +#: ldlang.c:3811 msgid "" "%P: warning: CTF section in %pB not linkable: %P was built without support " "for CTF\n" msgstr "" -#: ldlang.c:4027 +#: ldlang.c:3949 msgid "%X%P: required symbol `%s' not defined\n" msgstr "" -#: ldlang.c:4225 ldlang.c:4234 +#: ldlang.c:4147 ldlang.c:4156 msgid "%F%P: invalid type for output section `%s'\n" msgstr "" -#: ldlang.c:4368 +#: ldlang.c:4290 msgid "" "warning: INSERT statement in linker script is incompatible with --enable-non-" "contiguous-regions.\n" msgstr "" -#: ldlang.c:4381 +#: ldlang.c:4303 msgid "%F%P: %s not found for insert\n" msgstr "" -#: ldlang.c:4653 +#: ldlang.c:4539 msgid " load address 0x%V" msgstr "" -#: ldlang.c:4917 +#: ldlang.c:4759 msgid "%W (size before relaxing)\n" msgstr "" -#: ldlang.c:5046 +#: ldlang.c:4850 #, c-format msgid "Address of section %s set to " msgstr "" -#: ldlang.c:5238 +#: ldlang.c:5042 #, c-format msgid "Fail with %d\n" msgstr "" -#: ldlang.c:5451 +#: ldlang.c:5255 msgid "" "%F%P: Output section `%pA' not large enough for the linker-created stubs " "section `%pA'.\n" msgstr "" -#: ldlang.c:5456 +#: ldlang.c:5260 msgid "" "%F%P: Relaxation not supported with --enable-non-contiguous-regions (section " "`%pA' would overflow `%pA' after it changed size).\n" msgstr "" -#: ldlang.c:5565 +#: ldlang.c:5369 msgid "%X%P: section %s VMA wraps around address space\n" msgstr "" -#: ldlang.c:5571 +#: ldlang.c:5375 msgid "%X%P: section %s LMA wraps around address space\n" msgstr "" -#: ldlang.c:5623 +#: ldlang.c:5427 msgid "%X%P: section %s LMA [%V,%V] overlaps section %s LMA [%V,%V]\n" msgstr "" -#: ldlang.c:5667 +#: ldlang.c:5471 msgid "%X%P: section %s VMA [%V,%V] overlaps section %s VMA [%V,%V]\n" msgstr "" -#: ldlang.c:5690 +#: ldlang.c:5494 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:5715 +#: ldlang.c:5519 msgid "%X%P: address 0x%v of %pB section `%s' is not within region `%s'\n" msgstr "" -#: ldlang.c:5726 +#: ldlang.c:5530 msgid "%X%P: %pB section `%s' will not fit in region `%s'\n" msgstr "" -#: ldlang.c:5812 +#: ldlang.c:5616 msgid "" "%F%P:%pS: non constant or forward reference address expression for section %" "s\n" msgstr "" -#: ldlang.c:5837 +#: ldlang.c:5641 msgid "%X%P: internal error on COFF shared library section %s\n" msgstr "" -#: ldlang.c:5895 +#: ldlang.c:5699 msgid "%F%P: error: no memory region specified for loadable section `%s'\n" msgstr "" -#: ldlang.c:5899 +#: ldlang.c:5703 msgid "%P: warning: no memory region specified for loadable section `%s'\n" msgstr "" -#: ldlang.c:5933 +#: ldlang.c:5737 msgid "%P: warning: start of section %s changed by %ld\n" msgstr "" -#: ldlang.c:6025 +#: ldlang.c:5829 msgid "%P: warning: dot moved backwards before `%s'\n" msgstr "" -#: ldlang.c:6206 +#: ldlang.c:6010 msgid "%F%P: can't relax section: %E\n" msgstr "" -#: ldlang.c:6618 +#: ldlang.c:6422 msgid "%F%P: invalid data statement\n" msgstr "" -#: ldlang.c:6651 +#: ldlang.c:6455 msgid "%F%P: invalid reloc statement\n" msgstr "" -#: ldlang.c:7069 +#: ldlang.c:6873 msgid "" "%F%P: --gc-sections requires a defined symbol root specified by -e or -u\n" msgstr "" -#: ldlang.c:7094 +#: ldlang.c:6898 msgid "%F%P: %s: can't set start address\n" msgstr "" -#: ldlang.c:7107 ldlang.c:7126 +#: ldlang.c:6911 ldlang.c:6930 msgid "%F%P: can't set start address\n" msgstr "" -#: ldlang.c:7120 +#: ldlang.c:6924 msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n" msgstr "" -#: ldlang.c:7131 ldlang.c:7139 +#: ldlang.c:6935 ldlang.c:6943 msgid "%P: warning: cannot find entry symbol %s; not setting start address\n" msgstr "" -#: ldlang.c:7195 +#: ldlang.c:6999 msgid "" "%F%P: relocatable linking with relocations from format %s (%pB) to format %s " "(%pB) is not supported\n" msgstr "" -#: ldlang.c:7205 +#: ldlang.c:7009 msgid "" "%X%P: %s architecture of input file `%pB' is incompatible with %s output\n" msgstr "" -#: ldlang.c:7229 +#: ldlang.c:7033 msgid "%X%P: failed to merge target specific data of file %pB\n" msgstr "" -#: ldlang.c:7300 +#: ldlang.c:7104 msgid "%F%P: could not define common symbol `%pT': %E\n" msgstr "" -#: ldlang.c:7312 +#: ldlang.c:7116 msgid "" "\n" "Allocating common symbols\n" msgstr "" -#: ldlang.c:7313 +#: ldlang.c:7117 msgid "" "Common symbol size file\n" "\n" msgstr "" -#: ldlang.c:7370 +#: ldlang.c:7174 msgid "%X%P: error: unplaced orphan section `%pA' from `%pB'\n" msgstr "" -#: ldlang.c:7388 +#: ldlang.c:7192 msgid "" "%P: warning: orphan section `%pA' from `%pB' being placed in section `%s'\n" msgstr "" -#: ldlang.c:7478 +#: ldlang.c:7282 msgid "%F%P: invalid character %c (%d) in flags\n" msgstr "" -#: ldlang.c:7590 +#: ldlang.c:7394 msgid "%F%P:%pS: error: align with input and explicit align specified\n" msgstr "" -#: ldlang.c:8061 +#: ldlang.c:7865 msgid "" "%P: warning: --enable-non-contiguous-regions discards section `%pA' from `%" "pB'\n" msgstr "" -#: ldlang.c:8140 +#: ldlang.c:7944 msgid "%F%P: %s: plugin reported error after all symbols read\n" msgstr "" -#: ldlang.c:8712 +#: ldlang.c:8409 msgid "%F%P: multiple STARTUP files\n" msgstr "" -#: ldlang.c:8758 +#: ldlang.c:8455 msgid "%X%P:%pS: section has both a load address and a load region\n" msgstr "" -#: ldlang.c:8864 +#: ldlang.c:8561 msgid "" "%X%P:%pS: PHDRS and FILEHDR are not supported when prior PT_LOAD headers " "lack them\n" msgstr "" -#: ldlang.c:8937 +#: ldlang.c:8634 msgid "%F%P: no sections assigned to phdrs\n" msgstr "" -#: ldlang.c:8975 +#: ldlang.c:8672 msgid "%F%P: bfd_record_phdr failed: %E\n" msgstr "" -#: ldlang.c:8995 +#: ldlang.c:8692 msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n" msgstr "" -#: ldlang.c:9418 +#: ldlang.c:9115 msgid "%X%P: unknown language `%s' in version information\n" msgstr "" -#: ldlang.c:9563 +#: ldlang.c:9260 msgid "" "%X%P: anonymous version tag cannot be combined with other version tags\n" msgstr "" -#: ldlang.c:9572 +#: ldlang.c:9269 msgid "%X%P: duplicate version tag `%s'\n" msgstr "" -#: ldlang.c:9593 ldlang.c:9602 ldlang.c:9620 ldlang.c:9630 +#: ldlang.c:9290 ldlang.c:9299 ldlang.c:9317 ldlang.c:9327 msgid "%X%P: duplicate expression `%s' in version information\n" msgstr "" -#: ldlang.c:9670 +#: ldlang.c:9367 msgid "%X%P: unable to find version dependency `%s'\n" msgstr "" -#: ldlang.c:9693 +#: ldlang.c:9390 msgid "%X%P: unable to read .exports section contents\n" msgstr "" -#: ldlang.c:9739 +#: ldlang.c:9436 msgid "%P: invalid origin for memory region %s\n" msgstr "" -#: ldlang.c:9751 +#: ldlang.c:9448 msgid "%P: invalid length for memory region %s\n" msgstr "" -#: ldlang.c:9863 +#: ldlang.c:9560 msgid "%X%P: unknown feature `%s'\n" msgstr "" -#: ldmain.c:195 +#: ldmain.c:196 msgid "%F%P: cannot open dependency file %s: %E\n" msgstr "" -#: ldmain.c:268 +#: ldmain.c:264 msgid "%F%P: fatal error: libbfd ABI mismatch\n" msgstr "" -#: ldmain.c:304 +#: ldmain.c:300 msgid "%X%P: can't set BFD default target to `%s': %E\n" msgstr "" -#: ldmain.c:409 +#: ldmain.c:405 msgid "built in linker script" msgstr "" -#: ldmain.c:419 +#: ldmain.c:415 msgid "using external linker script:" msgstr "" -#: ldmain.c:421 +#: ldmain.c:417 msgid "using internal linker script:" msgstr "" -#: ldmain.c:468 +#: ldmain.c:464 msgid "%F%P: --no-define-common may not be used without -shared\n" msgstr "" -#: ldmain.c:474 +#: ldmain.c:470 msgid "%F%P: no input files\n" msgstr "" -#: ldmain.c:478 +#: ldmain.c:474 msgid "%P: mode %s\n" msgstr "" -#: ldmain.c:494 ends32belf.c:459 ends32belf16m.c:459 ends32belf_linux.c:592 -#: ends32elf.c:459 ends32elf16m.c:459 ends32elf_linux.c:592 +#: ldmain.c:490 ends32belf.c:455 ends32belf16m.c:455 ends32belf_linux.c:588 +#: ends32elf.c:455 ends32elf16m.c:455 ends32elf_linux.c:588 msgid "%F%P: cannot open map file %s: %E\n" msgstr "" -#: ldmain.c:558 +#: ldmain.c:554 msgid "%P: link errors found, deleting executable `%s'\n" msgstr "" -#: ldmain.c:569 +#: ldmain.c:563 msgid "%F%P: %s: final close failed: %E\n" msgstr "" -#: ldmain.c:596 +#: ldmain.c:590 msgid "%F%P: unable to open for source of copy `%s'\n" msgstr "" -#: ldmain.c:599 +#: ldmain.c:593 msgid "%F%P: unable to open for destination of copy `%s'\n" msgstr "" -#: ldmain.c:606 +#: ldmain.c:600 msgid "%P: error writing file `%s'\n" msgstr "" -#: ldmain.c:611 pe-dll.c:1982 +#: ldmain.c:605 pe-dll.c:1968 #, c-format msgid "%P: error closing file `%s'\n" msgstr "" -#: ldmain.c:623 +#: ldmain.c:619 #, c-format msgid "%s: total time in link: %ld.%06ld\n" msgstr "" -#: ldmain.c:710 +#: ldmain.c:706 msgid "%F%P: missing argument to -m\n" msgstr "" -#: ldmain.c:764 ldmain.c:781 ldmain.c:801 ldmain.c:833 pe-dll.c:1407 +#: ldmain.c:760 ldmain.c:777 ldmain.c:797 ldmain.c:829 pe-dll.c:1405 msgid "%F%P: bfd_hash_table_init failed: %E\n" msgstr "" -#: ldmain.c:768 ldmain.c:785 ldmain.c:805 +#: ldmain.c:764 ldmain.c:781 ldmain.c:801 msgid "%F%P: bfd_hash_lookup failed: %E\n" msgstr "" -#: ldmain.c:819 +#: ldmain.c:815 msgid "%X%P: error: duplicate retain-symbols-file\n" msgstr "" -#: ldmain.c:863 +#: ldmain.c:859 msgid "%F%P: bfd_hash_lookup for insertion failed: %E\n" msgstr "" -#: ldmain.c:868 +#: ldmain.c:864 msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n" msgstr "" -#: ldmain.c:984 +#: ldmain.c:980 msgid "" "Archive member included to satisfy reference by file (symbol)\n" "\n" msgstr "" -#: ldmain.c:1090 +#: ldmain.c:1086 msgid "%P: %C: warning: multiple definition of `%pT'" msgstr "" -#: ldmain.c:1093 +#: ldmain.c:1089 msgid "%X%P: %C: multiple definition of `%pT'" msgstr "" -#: ldmain.c:1096 +#: ldmain.c:1092 msgid "; %D: first defined here" msgstr "" -#: ldmain.c:1101 +#: ldmain.c:1097 msgid "%P: disabling relaxation; it will not work with multiple definitions\n" msgstr "" -#: ldmain.c:1154 +#: ldmain.c:1150 msgid "%P: %pB: warning: definition of `%pT' overriding common from %pB\n" msgstr "" -#: ldmain.c:1158 +#: ldmain.c:1154 msgid "%P: %pB: warning: definition of `%pT' overriding common\n" msgstr "" -#: ldmain.c:1167 +#: ldmain.c:1163 msgid "%P: %pB: warning: common of `%pT' overridden by definition from %pB\n" msgstr "" -#: ldmain.c:1171 +#: ldmain.c:1167 msgid "%P: %pB: warning: common of `%pT' overridden by definition\n" msgstr "" -#: ldmain.c:1180 +#: ldmain.c:1176 msgid "" "%P: %pB: warning: common of `%pT' overridden by larger common from %pB\n" msgstr "" -#: ldmain.c:1184 +#: ldmain.c:1180 msgid "%P: %pB: warning: common of `%pT' overridden by larger common\n" msgstr "" -#: ldmain.c:1191 +#: ldmain.c:1187 msgid "%P: %pB: warning: common of `%pT' overriding smaller common from %pB\n" msgstr "" -#: ldmain.c:1195 +#: ldmain.c:1191 msgid "%P: %pB: warning: common of `%pT' overriding smaller common\n" msgstr "" -#: ldmain.c:1202 +#: ldmain.c:1198 msgid "%P: %pB and %pB: warning: multiple common of `%pT'\n" msgstr "" -#: ldmain.c:1205 +#: ldmain.c:1201 msgid "%P: %pB: warning: multiple common of `%pT'\n" msgstr "" -#: ldmain.c:1224 ldmain.c:1260 +#: ldmain.c:1220 ldmain.c:1256 msgid "%P: warning: global constructor %s used\n" msgstr "" -#: ldmain.c:1270 +#: ldmain.c:1266 msgid "%F%P: BFD backend error: BFD_RELOC_CTOR unsupported\n" msgstr "" #. We found a reloc for the symbol we are looking for. -#: ldmain.c:1342 ldmain.c:1344 ldmain.c:1346 ldmain.c:1354 ldmain.c:1397 +#: ldmain.c:1338 ldmain.c:1340 ldmain.c:1342 ldmain.c:1350 ldmain.c:1393 msgid "warning: " msgstr "" -#: ldmain.c:1487 -msgid "%X%P: %H: undefined reference to `%pT'\n" +#: ldmain.c:1483 +msgid "%X%P: %C: undefined reference to `%pT'\n" msgstr "" -#: ldmain.c:1490 -msgid "%P: %H: warning: undefined reference to `%pT'\n" +#: ldmain.c:1486 +msgid "%P: %C: warning: undefined reference to `%pT'\n" msgstr "" -#: ldmain.c:1496 +#: ldmain.c:1492 msgid "%X%P: %D: more undefined references to `%pT' follow\n" msgstr "" -#: ldmain.c:1499 +#: ldmain.c:1495 msgid "%P: %D: warning: more undefined references to `%pT' follow\n" msgstr "" -#: ldmain.c:1510 +#: ldmain.c:1506 msgid "%X%P: %pB: undefined reference to `%pT'\n" msgstr "" -#: ldmain.c:1513 +#: ldmain.c:1509 msgid "%P: %pB: warning: undefined reference to `%pT'\n" msgstr "" -#: ldmain.c:1519 +#: ldmain.c:1515 msgid "%X%P: %pB: more undefined references to `%pT' follow\n" msgstr "" -#: ldmain.c:1522 +#: ldmain.c:1518 msgid "%P: %pB: warning: more undefined references to `%pT' follow\n" msgstr "" -#: ldmain.c:1559 +#: ldmain.c:1555 msgid " additional relocation overflows omitted from the output\n" msgstr "" -#: ldmain.c:1572 +#: ldmain.c:1568 #, c-format msgid " relocation truncated to fit: %s against undefined symbol `%pT'" msgstr "" -#: ldmain.c:1578 +#: ldmain.c:1574 #, c-format msgid "" " relocation truncated to fit: %s against symbol `%pT' defined in %pA section " "in %pB" msgstr "" -#: ldmain.c:1591 +#: ldmain.c:1587 #, c-format msgid " relocation truncated to fit: %s against `%pT'" msgstr "" -#: ldmain.c:1607 +#: ldmain.c:1603 msgid "%X%H: dangerous relocation: %s\n" msgstr "" -#: ldmain.c:1621 +#: ldmain.c:1617 msgid "%X%H: reloc refers to symbol `%pT' which is not being output\n" msgstr "" -#: ldmain.c:1655 +#: ldmain.c:1651 msgid "%P: %pB: reference to %s\n" msgstr "" -#: ldmain.c:1657 +#: ldmain.c:1653 msgid "%P: %pB: definition of %s\n" msgstr "" -#: ldmisc.c:366 +#: ldmisc.c:363 #, c-format msgid "%pB: in function `%pT':\n" msgstr "" -#: ldmisc.c:506 +#: ldmisc.c:503 #, c-format msgid "no symbol" msgstr "" -#: ldmisc.c:626 +#: ldmisc.c:610 msgid "%F%P: internal error %s %d\n" msgstr "" -#: ldmisc.c:690 +#: ldmisc.c:674 msgid "%P: internal error: aborting at %s:%d in %s\n" msgstr "" -#: ldmisc.c:693 +#: ldmisc.c:677 msgid "%P: internal error: aborting at %s:%d\n" msgstr "" -#: ldmisc.c:695 +#: ldmisc.c:679 msgid "%F%P: please report this bug\n" msgstr "" @@ -1229,7 +1187,7 @@ msgstr "" msgid "%F%P: final link failed: %E\n" msgstr "" -#: lexsup.c:105 lexsup.c:300 +#: lexsup.c:105 lexsup.c:290 msgid "KEYWORD" msgstr "" @@ -1245,7 +1203,7 @@ msgstr "" msgid "Set architecture" msgstr "" -#: lexsup.c:110 lexsup.c:440 +#: lexsup.c:110 lexsup.c:430 msgid "TARGET" msgstr "" @@ -1253,9 +1211,9 @@ msgstr "" msgid "Specify target for following input files" msgstr "" -#: lexsup.c:113 lexsup.c:119 lexsup.c:180 lexsup.c:184 lexsup.c:220 -#: lexsup.c:224 lexsup.c:239 lexsup.c:241 lexsup.c:462 lexsup.c:531 -#: lexsup.c:544 lexsup.c:548 +#: lexsup.c:113 lexsup.c:119 lexsup.c:176 lexsup.c:180 lexsup.c:216 +#: lexsup.c:229 lexsup.c:231 lexsup.c:452 lexsup.c:521 lexsup.c:534 +#: lexsup.c:538 msgid "FILE" msgstr "" @@ -1275,8 +1233,8 @@ msgstr "" msgid "Force group members out of groups" msgstr "" -#: lexsup.c:124 lexsup.c:508 lexsup.c:510 lexsup.c:512 lexsup.c:514 -#: lexsup.c:516 lexsup.c:518 +#: lexsup.c:124 lexsup.c:498 lexsup.c:500 lexsup.c:502 lexsup.c:504 +#: lexsup.c:506 lexsup.c:508 msgid "ADDRESS" msgstr "" @@ -1303,633 +1261,621 @@ msgid "" msgstr "" #: lexsup.c:134 -msgid "Disable the LINKER_VERSION linker script directive" -msgstr "" - -#: lexsup.c:136 -msgid "Enable the LINKER_VERSION linker script directive" -msgstr "" - -#: lexsup.c:138 msgid "Link big-endian objects" msgstr "" -#: lexsup.c:140 +#: lexsup.c:136 msgid "Link little-endian objects" msgstr "" -#: lexsup.c:142 lexsup.c:145 +#: lexsup.c:138 lexsup.c:141 msgid "SHLIB" msgstr "" -#: lexsup.c:142 +#: lexsup.c:138 msgid "Auxiliary filter for shared object symbol table" msgstr "" -#: lexsup.c:145 +#: lexsup.c:141 msgid "Filter for shared object symbol table" msgstr "" -#: lexsup.c:148 +#: lexsup.c:144 msgid "Ignored" msgstr "" -#: lexsup.c:150 +#: lexsup.c:146 msgid "SIZE" msgstr "" -#: lexsup.c:150 +#: lexsup.c:146 msgid "Small data size (if no size, same as --shared)" msgstr "" -#: lexsup.c:153 +#: lexsup.c:149 msgid "FILENAME" msgstr "" -#: lexsup.c:153 +#: lexsup.c:149 msgid "Set internal name of shared library" msgstr "" -#: lexsup.c:155 +#: lexsup.c:151 msgid "PROGRAM" msgstr "" -#: lexsup.c:155 +#: lexsup.c:151 msgid "Set PROGRAM as the dynamic linker to use" msgstr "" -#: lexsup.c:158 +#: lexsup.c:154 msgid "Produce an executable with no program interpreter header" msgstr "" -#: lexsup.c:161 +#: lexsup.c:157 msgid "LIBNAME" msgstr "" -#: lexsup.c:161 +#: lexsup.c:157 msgid "Search for library LIBNAME" msgstr "" -#: lexsup.c:163 +#: lexsup.c:159 msgid "DIRECTORY" msgstr "" -#: lexsup.c:163 +#: lexsup.c:159 msgid "Add DIRECTORY to library search path" msgstr "" -#: lexsup.c:166 +#: lexsup.c:162 msgid "Override the default sysroot location" msgstr "" -#: lexsup.c:168 +#: lexsup.c:164 msgid "EMULATION" msgstr "" -#: lexsup.c:168 +#: lexsup.c:164 msgid "Set emulation" msgstr "" -#: lexsup.c:170 +#: lexsup.c:166 msgid "Print map file on standard output" msgstr "" -#: lexsup.c:172 +#: lexsup.c:168 msgid "Do not page align data" msgstr "" -#: lexsup.c:174 +#: lexsup.c:170 msgid "Do not page align data, do not make text readonly" msgstr "" -#: lexsup.c:177 +#: lexsup.c:173 msgid "Page align data, make text readonly" msgstr "" -#: lexsup.c:180 +#: lexsup.c:176 msgid "Set output file name" msgstr "" -#: lexsup.c:182 +#: lexsup.c:178 msgid "Optimize output file" msgstr "" -#: lexsup.c:184 +#: lexsup.c:180 msgid "Generate import library" msgstr "" -#: lexsup.c:187 lexsup.c:198 +#: lexsup.c:183 lexsup.c:194 msgid "PLUGIN" msgstr "" -#: lexsup.c:187 +#: lexsup.c:183 msgid "Load named plugin" msgstr "" -#: lexsup.c:189 lexsup.c:200 +#: lexsup.c:185 lexsup.c:196 msgid "ARG" msgstr "" -#: lexsup.c:189 +#: lexsup.c:185 msgid "Send arg to last-loaded plugin" msgstr "" -#: lexsup.c:191 lexsup.c:194 +#: lexsup.c:187 lexsup.c:190 msgid "Ignored for GCC LTO option compatibility" msgstr "" -#: lexsup.c:198 +#: lexsup.c:194 msgid "Load named plugin (ignored)" msgstr "" -#: lexsup.c:200 +#: lexsup.c:196 msgid "Send arg to last-loaded plugin (ignored)" msgstr "" -#: lexsup.c:203 +#: lexsup.c:199 msgid "Ignored for GCC linker option compatibility" msgstr "" -#: lexsup.c:206 lexsup.c:209 +#: lexsup.c:202 lexsup.c:205 msgid "Ignored for gold option compatibility" msgstr "" -#: lexsup.c:212 +#: lexsup.c:208 msgid "Ignored for SVR4 compatibility" msgstr "" -#: lexsup.c:216 +#: lexsup.c:212 msgid "Generate relocatable output" msgstr "" -#: lexsup.c:220 +#: lexsup.c:216 msgid "Just link symbols (if directory, same as --rpath)" msgstr "" -#: lexsup.c:226 -msgid "PATTERN=FILE" -msgstr "" - -#: lexsup.c:229 +#: lexsup.c:219 msgid "Strip all symbols" msgstr "" -#: lexsup.c:231 +#: lexsup.c:221 msgid "Strip debugging symbols" msgstr "" -#: lexsup.c:233 +#: lexsup.c:223 msgid "Strip symbols in discarded sections" msgstr "" -#: lexsup.c:235 +#: lexsup.c:225 msgid "Do not strip symbols in discarded sections" msgstr "" -#: lexsup.c:237 +#: lexsup.c:227 msgid "Trace file opens" msgstr "" -#: lexsup.c:239 +#: lexsup.c:229 msgid "Read linker script" msgstr "" -#: lexsup.c:241 +#: lexsup.c:231 msgid "Read default linker script" msgstr "" -#: lexsup.c:245 lexsup.c:248 lexsup.c:266 lexsup.c:358 lexsup.c:382 -#: lexsup.c:501 lexsup.c:534 lexsup.c:546 lexsup.c:592 lexsup.c:595 +#: lexsup.c:235 lexsup.c:238 lexsup.c:256 lexsup.c:348 lexsup.c:372 +#: lexsup.c:491 lexsup.c:524 lexsup.c:536 lexsup.c:582 lexsup.c:585 msgid "SYMBOL" msgstr "" -#: lexsup.c:245 +#: lexsup.c:235 msgid "Start with undefined reference to SYMBOL" msgstr "" -#: lexsup.c:248 +#: lexsup.c:238 msgid "Require SYMBOL be defined in the final output" msgstr "" -#: lexsup.c:251 +#: lexsup.c:241 msgid "[=SECTION]" msgstr "" -#: lexsup.c:252 +#: lexsup.c:242 msgid "Don't merge input [SECTION | orphan] sections" msgstr "" -#: lexsup.c:254 +#: lexsup.c:244 msgid "Build global constructor/destructor tables" msgstr "" -#: lexsup.c:256 +#: lexsup.c:246 msgid "Print version information" msgstr "" -#: lexsup.c:258 +#: lexsup.c:248 msgid "Print version and emulation information" msgstr "" -#: lexsup.c:260 +#: lexsup.c:250 msgid "Discard all local symbols" msgstr "" -#: lexsup.c:262 +#: lexsup.c:252 msgid "Discard temporary local symbols (default)" msgstr "" -#: lexsup.c:264 +#: lexsup.c:254 msgid "Don't discard any local symbols" msgstr "" -#: lexsup.c:266 +#: lexsup.c:256 msgid "Trace mentions of SYMBOL" msgstr "" -#: lexsup.c:268 lexsup.c:464 lexsup.c:466 +#: lexsup.c:258 lexsup.c:454 lexsup.c:456 msgid "PATH" msgstr "" -#: lexsup.c:268 +#: lexsup.c:258 msgid "Default search path for Solaris compatibility" msgstr "" -#: lexsup.c:271 +#: lexsup.c:261 msgid "Start a group" msgstr "" -#: lexsup.c:273 +#: lexsup.c:263 msgid "End a group" msgstr "" -#: lexsup.c:277 +#: lexsup.c:267 msgid "Accept input files whose architecture cannot be determined" msgstr "" -#: lexsup.c:281 +#: lexsup.c:271 msgid "Reject input files whose architecture is unknown" msgstr "" -#: lexsup.c:293 +#: lexsup.c:283 msgid "Only set DT_NEEDED for following dynamic libs if used" msgstr "" -#: lexsup.c:296 +#: lexsup.c:286 msgid "" "Always set DT_NEEDED for dynamic libraries mentioned on\n" " the command line" msgstr "" -#: lexsup.c:300 +#: lexsup.c:290 msgid "Ignored for SunOS compatibility" msgstr "" -#: lexsup.c:302 +#: lexsup.c:292 msgid "Link against shared libraries" msgstr "" -#: lexsup.c:308 +#: lexsup.c:298 msgid "Do not link against shared libraries" msgstr "" -#: lexsup.c:316 +#: lexsup.c:306 msgid "Don't bind global references locally" msgstr "" -#: lexsup.c:318 +#: lexsup.c:308 msgid "Bind global references locally" msgstr "" -#: lexsup.c:320 +#: lexsup.c:310 msgid "Bind global function references locally" msgstr "" -#: lexsup.c:322 +#: lexsup.c:312 msgid "Check section addresses for overlaps (default)" msgstr "" -#: lexsup.c:325 +#: lexsup.c:315 msgid "Do not check section addresses for overlaps" msgstr "" -#: lexsup.c:329 +#: lexsup.c:319 msgid "Copy DT_NEEDED links mentioned inside DSOs that follow" msgstr "" -#: lexsup.c:333 +#: lexsup.c:323 msgid "Do not copy DT_NEEDED links mentioned inside DSOs that follow" msgstr "" -#: lexsup.c:337 +#: lexsup.c:327 msgid "Output cross reference table" msgstr "" -#: lexsup.c:339 +#: lexsup.c:329 msgid "SYMBOL=EXPRESSION" msgstr "" -#: lexsup.c:339 +#: lexsup.c:329 msgid "Define a symbol" msgstr "" -#: lexsup.c:341 +#: lexsup.c:331 msgid "[=STYLE]" msgstr "" -#: lexsup.c:341 +#: lexsup.c:331 msgid "Demangle symbol names [using STYLE]" msgstr "" -#: lexsup.c:345 +#: lexsup.c:335 msgid "" "Do not allow multiple definitions with symbols included\n" " in filename invoked by -R or --just-symbols" msgstr "" -#: lexsup.c:350 +#: lexsup.c:340 msgid "Generate embedded relocs" msgstr "" -#: lexsup.c:352 +#: lexsup.c:342 msgid "Treat warnings as errors" msgstr "" -#: lexsup.c:355 +#: lexsup.c:345 msgid "Do not treat warnings as errors (default)" msgstr "" -#: lexsup.c:358 +#: lexsup.c:348 msgid "Call SYMBOL at unload-time" msgstr "" -#: lexsup.c:360 +#: lexsup.c:350 msgid "Force generation of file with .exe suffix" msgstr "" -#: lexsup.c:362 +#: lexsup.c:352 msgid "Remove unused sections (on some targets)" msgstr "" -#: lexsup.c:365 +#: lexsup.c:355 msgid "Don't remove unused sections (default)" msgstr "" -#: lexsup.c:368 +#: lexsup.c:358 msgid "List removed unused sections on stderr" msgstr "" -#: lexsup.c:371 +#: lexsup.c:361 msgid "Do not list removed unused sections" msgstr "" -#: lexsup.c:374 +#: lexsup.c:364 msgid "Keep exported symbols when removing unused sections" msgstr "" -#: lexsup.c:377 +#: lexsup.c:367 msgid "Set default hash table size close to " msgstr "" -#: lexsup.c:380 +#: lexsup.c:370 msgid "Print option help" msgstr "" -#: lexsup.c:382 +#: lexsup.c:372 msgid "Call SYMBOL at load-time" msgstr "" -#: lexsup.c:384 +#: lexsup.c:374 msgid "FILE/DIR" msgstr "" -#: lexsup.c:384 +#: lexsup.c:374 msgid "Write a linker map to FILE or DIR/.map" msgstr "" -#: lexsup.c:386 +#: lexsup.c:376 msgid "Do not define Common storage" msgstr "" -#: lexsup.c:388 +#: lexsup.c:378 msgid "Do not demangle symbol names" msgstr "" -#: lexsup.c:390 +#: lexsup.c:380 msgid "Use less memory and more disk I/O" msgstr "" -#: lexsup.c:392 +#: lexsup.c:382 msgid "Do not allow unresolved references in object files" msgstr "" -#: lexsup.c:395 +#: lexsup.c:385 msgid "Do not display any warning or error messages" msgstr "" -#: lexsup.c:398 +#: lexsup.c:388 msgid "Allow unresolved references in shared libraries" msgstr "" -#: lexsup.c:402 +#: lexsup.c:392 msgid "Do not allow unresolved references in shared libs" msgstr "" -#: lexsup.c:406 +#: lexsup.c:396 msgid "Allow multiple definitions" msgstr "" -#: lexsup.c:410 +#: lexsup.c:400 msgid "SCRIPT" msgstr "" -#: lexsup.c:410 +#: lexsup.c:400 msgid "Provide a script to help with undefined symbol errors" msgstr "" -#: lexsup.c:413 +#: lexsup.c:403 msgid "Allow undefined version" msgstr "" -#: lexsup.c:415 +#: lexsup.c:405 msgid "Disallow undefined version" msgstr "" -#: lexsup.c:417 +#: lexsup.c:407 msgid "Create default symbol version" msgstr "" -#: lexsup.c:420 +#: lexsup.c:410 msgid "Create default symbol version for imported symbols" msgstr "" -#: lexsup.c:423 +#: lexsup.c:413 msgid "Don't warn about mismatched input files" msgstr "" -#: lexsup.c:426 +#: lexsup.c:416 msgid "Don't warn on finding an incompatible library" msgstr "" -#: lexsup.c:429 +#: lexsup.c:419 msgid "Turn off --whole-archive" msgstr "" -#: lexsup.c:431 +#: lexsup.c:421 msgid "Create an output file even if errors occur" msgstr "" -#: lexsup.c:436 +#: lexsup.c:426 msgid "" "Only use library directories specified on\n" " the command line" msgstr "" -#: lexsup.c:440 +#: lexsup.c:430 msgid "Specify target of output file" msgstr "" -#: lexsup.c:443 +#: lexsup.c:433 msgid "Print default output format" msgstr "" -#: lexsup.c:445 +#: lexsup.c:435 msgid "Print current sysroot" msgstr "" -#: lexsup.c:447 +#: lexsup.c:437 msgid "Ignored for Linux compatibility" msgstr "" -#: lexsup.c:450 +#: lexsup.c:440 msgid "Reduce memory overheads, possibly taking much longer" msgstr "" -#: lexsup.c:454 +#: lexsup.c:444 msgid "Set the maximum cache size to SIZE bytes" msgstr "" -#: lexsup.c:457 +#: lexsup.c:447 msgid "Reduce code size by using target specific optimizations" msgstr "" -#: lexsup.c:459 +#: lexsup.c:449 msgid "Do not use relaxation techniques to reduce code size" msgstr "" -#: lexsup.c:462 +#: lexsup.c:452 msgid "Keep only symbols listed in FILE" msgstr "" -#: lexsup.c:464 +#: lexsup.c:454 msgid "Set runtime shared library search path" msgstr "" -#: lexsup.c:466 +#: lexsup.c:456 msgid "Set link time shared library search path" msgstr "" -#: lexsup.c:469 +#: lexsup.c:459 msgid "Create a shared library" msgstr "" -#: lexsup.c:473 +#: lexsup.c:463 msgid "Create a position independent executable" msgstr "" -#: lexsup.c:477 +#: lexsup.c:467 msgid "Create a position dependent executable (default)" msgstr "" -#: lexsup.c:479 +#: lexsup.c:469 msgid "[=ascending|descending]" msgstr "" -#: lexsup.c:480 +#: lexsup.c:470 msgid "Sort common symbols by alignment [in specified order]" msgstr "" -#: lexsup.c:485 +#: lexsup.c:475 msgid "name|alignment" msgstr "" -#: lexsup.c:486 +#: lexsup.c:476 msgid "Sort sections by name or maximum alignment" msgstr "" -#: lexsup.c:488 +#: lexsup.c:478 msgid "COUNT" msgstr "" -#: lexsup.c:488 +#: lexsup.c:478 msgid "How many tags to reserve in .dynamic section" msgstr "" -#: lexsup.c:491 +#: lexsup.c:481 msgid "[=SIZE]" msgstr "" -#: lexsup.c:491 +#: lexsup.c:481 msgid "Split output sections every SIZE octets" msgstr "" -#: lexsup.c:494 +#: lexsup.c:484 msgid "[=COUNT]" msgstr "" -#: lexsup.c:494 +#: lexsup.c:484 msgid "Split output sections every COUNT relocs" msgstr "" -#: lexsup.c:497 +#: lexsup.c:487 msgid "Print memory usage statistics" msgstr "" -#: lexsup.c:499 +#: lexsup.c:489 msgid "Display target specific options" msgstr "" -#: lexsup.c:501 +#: lexsup.c:491 msgid "Do task level linking" msgstr "" -#: lexsup.c:503 +#: lexsup.c:493 msgid "Use same format as native linker" msgstr "" -#: lexsup.c:505 +#: lexsup.c:495 msgid "SECTION=ADDRESS" msgstr "" -#: lexsup.c:505 +#: lexsup.c:495 msgid "Set address of named section" msgstr "" -#: lexsup.c:508 +#: lexsup.c:498 msgid "Set address of .bss section" msgstr "" -#: lexsup.c:510 +#: lexsup.c:500 msgid "Set address of .data section" msgstr "" -#: lexsup.c:512 +#: lexsup.c:502 msgid "Set address of .text section" msgstr "" -#: lexsup.c:514 +#: lexsup.c:504 msgid "Set address of text segment" msgstr "" -#: lexsup.c:516 +#: lexsup.c:506 msgid "Set address of rodata segment" msgstr "" -#: lexsup.c:518 +#: lexsup.c:508 msgid "Set address of ldata segment" msgstr "" -#: lexsup.c:521 +#: lexsup.c:511 msgid "" "How to handle unresolved symbols. is:\n" " ignore-all, report-all, ignore-in-object-" @@ -1937,222 +1883,214 @@ msgid "" " ignore-in-shared-libs" msgstr "" -#: lexsup.c:526 +#: lexsup.c:516 msgid "[=NUMBER]" msgstr "" -#: lexsup.c:527 +#: lexsup.c:517 msgid "Output lots of information during link" msgstr "" -#: lexsup.c:531 +#: lexsup.c:521 msgid "Read version information script" msgstr "" -#: lexsup.c:534 +#: lexsup.c:524 msgid "" "Take export symbols list from .exports, using\n" " SYMBOL as the version." msgstr "" -#: lexsup.c:538 +#: lexsup.c:528 msgid "Add data symbols to dynamic list" msgstr "" -#: lexsup.c:540 +#: lexsup.c:530 msgid "Use C++ operator new/delete dynamic list" msgstr "" -#: lexsup.c:542 +#: lexsup.c:532 msgid "Use C++ typeinfo dynamic list" msgstr "" -#: lexsup.c:544 +#: lexsup.c:534 msgid "Read dynamic list" msgstr "" -#: lexsup.c:546 +#: lexsup.c:536 msgid "Export the specified symbol" msgstr "" -#: lexsup.c:548 +#: lexsup.c:538 msgid "Read export dynamic symbol list" msgstr "" -#: lexsup.c:550 +#: lexsup.c:540 msgid "Warn about duplicate common symbols" msgstr "" -#: lexsup.c:552 +#: lexsup.c:542 msgid "Warn if global constructors/destructors are seen" msgstr "" -#: lexsup.c:555 +#: lexsup.c:545 msgid "Warn when creating an executable stack" msgstr "" -#: lexsup.c:557 +#: lexsup.c:547 msgid "Do not warn when creating an executable stack" msgstr "" -#: lexsup.c:559 +#: lexsup.c:549 msgid "Warn when creating executable segments" msgstr "" -#: lexsup.c:561 +#: lexsup.c:551 msgid "Do not warn when creating executable segments" msgstr "" -#: lexsup.c:563 +#: lexsup.c:553 msgid "Warn if the multiple GP values are used" msgstr "" -#: lexsup.c:565 +#: lexsup.c:555 msgid "Warn only once per undefined symbol" msgstr "" -#: lexsup.c:567 +#: lexsup.c:557 msgid "Warn if start of section changes due to alignment" msgstr "" -#: lexsup.c:572 +#: lexsup.c:562 msgid "Warn if output has DT_TEXTREL (default)" msgstr "" -#: lexsup.c:574 +#: lexsup.c:564 msgid "Warn if output has DT_TEXTREL" msgstr "" -#: lexsup.c:580 +#: lexsup.c:570 msgid "Warn if an object has alternate ELF machine code" msgstr "" -#: lexsup.c:584 +#: lexsup.c:574 msgid "Report unresolved symbols as warnings" msgstr "" -#: lexsup.c:587 +#: lexsup.c:577 msgid "Report unresolved symbols as errors" msgstr "" -#: lexsup.c:589 +#: lexsup.c:579 msgid "Include all objects from following archives" msgstr "" -#: lexsup.c:592 +#: lexsup.c:582 msgid "Use wrapper functions for SYMBOL" msgstr "" -#: lexsup.c:596 +#: lexsup.c:586 msgid "Unresolved SYMBOL will not cause an error or warning" msgstr "" -#: lexsup.c:598 +#: lexsup.c:588 msgid "Push state of flags governing input file handling" msgstr "" -#: lexsup.c:601 +#: lexsup.c:591 msgid "Pop state of flags governing input file handling" msgstr "" -#: lexsup.c:604 +#: lexsup.c:594 msgid "Report target memory usage" msgstr "" -#: lexsup.c:606 +#: lexsup.c:596 msgid "=MODE" msgstr "" -#: lexsup.c:606 +#: lexsup.c:596 msgid "Control how orphan sections are handled." msgstr "" -#: lexsup.c:609 +#: lexsup.c:599 msgid "Show discarded sections in map file output (default)" msgstr "" -#: lexsup.c:612 +#: lexsup.c:602 msgid "Do not show discarded sections in map file output" msgstr "" -#: lexsup.c:615 -msgid "Show local symbols in map file output" -msgstr "" - -#: lexsup.c:618 -msgid "Do not show local symbols in map file output (default)" -msgstr "" - -#: lexsup.c:621 +#: lexsup.c:605 msgid "Emit names and types of static variables in CTF" msgstr "" -#: lexsup.c:624 +#: lexsup.c:608 msgid "Do not emit names and types of static variables in CTF" msgstr "" -#: lexsup.c:628 +#: lexsup.c:612 msgid "" "How to share CTF types between translation units.\n" " is: share-unconflicted (default),\n" " share-duplicated" msgstr "" -#: lexsup.c:792 +#: lexsup.c:776 msgid "%F%P: Error: unable to disambiguate: %s (did you mean -%s ?)\n" msgstr "" -#: lexsup.c:795 +#: lexsup.c:779 msgid "%P: Warning: grouped short command line options are deprecated: %s\n" msgstr "" -#: lexsup.c:822 +#: lexsup.c:806 msgid "%P: %s: missing argument\n" msgstr "" -#: lexsup.c:827 +#: lexsup.c:811 msgid "%P: unrecognized option '%s'\n" msgstr "" -#: lexsup.c:832 +#: lexsup.c:816 msgid "%F%P: use the --help option for usage information\n" msgstr "" -#: lexsup.c:851 +#: lexsup.c:835 msgid "%F%P: unrecognized -a option `%s'\n" msgstr "" -#: lexsup.c:864 +#: lexsup.c:848 msgid "%F%P: unrecognized -assert option `%s'\n" msgstr "" -#: lexsup.c:908 +#: lexsup.c:892 msgid "%F%P: unknown demangling style `%s'\n" msgstr "" -#: lexsup.c:998 lexsup.c:1482 eaarch64cloudabi.c:849 eaarch64cloudabib.c:849 -#: eaarch64elf.c:844 eaarch64elf32.c:844 eaarch64elf32b.c:844 -#: eaarch64elfb.c:844 eaarch64fbsd.c:849 eaarch64fbsdb.c:849 -#: eaarch64haiku.c:849 eaarch64linux.c:849 eaarch64linux32.c:849 -#: eaarch64linux32b.c:849 eaarch64linuxb.c:849 eaarch64nto.c:946 -#: earmelf.c:1107 earmelf_fbsd.c:1107 earmelf_fuchsia.c:1112 -#: earmelf_haiku.c:1112 earmelf_linux.c:1112 earmelf_linux_eabi.c:1112 -#: earmelf_linux_fdpiceabi.c:1112 earmelf_nacl.c:1112 earmelf_nbsd.c:1107 -#: earmelf_phoenix.c:1112 earmelf_vxworks.c:1143 earmelfb.c:1107 -#: earmelfb_fbsd.c:1107 earmelfb_fuchsia.c:1112 earmelfb_linux.c:1112 -#: earmelfb_linux_eabi.c:1112 earmelfb_linux_fdpiceabi.c:1112 -#: earmelfb_nacl.c:1112 earmelfb_nbsd.c:1107 earmnto.c:1082 ecskyelf.c:571 -#: ecskyelf_linux.c:738 eelf32metag.c:735 eelf64lppc.c:1206 -#: eelf64lppc_fbsd.c:1206 eelf64ppc.c:1206 eelf64ppc_fbsd.c:1206 -#: ehppaelf.c:591 ehppalinux.c:773 ehppanbsd.c:773 ehppaobsd.c:773 +#: lexsup.c:980 lexsup.c:1457 eaarch64cloudabi.c:845 eaarch64cloudabib.c:845 +#: eaarch64elf.c:840 eaarch64elf32.c:840 eaarch64elf32b.c:840 +#: eaarch64elfb.c:840 eaarch64fbsd.c:845 eaarch64fbsdb.c:845 +#: eaarch64haiku.c:845 eaarch64linux.c:845 eaarch64linux32.c:845 +#: eaarch64linux32b.c:845 eaarch64linuxb.c:845 earmelf.c:1103 +#: earmelf_fbsd.c:1103 earmelf_fuchsia.c:1108 earmelf_haiku.c:1108 +#: earmelf_linux.c:1108 earmelf_linux_eabi.c:1108 +#: earmelf_linux_fdpiceabi.c:1108 earmelf_nacl.c:1108 earmelf_nbsd.c:1103 +#: earmelf_phoenix.c:1108 earmelf_vxworks.c:1139 earmelfb.c:1103 +#: earmelfb_fbsd.c:1103 earmelfb_fuchsia.c:1108 earmelfb_linux.c:1108 +#: earmelfb_linux_eabi.c:1108 earmelfb_linux_fdpiceabi.c:1108 +#: earmelfb_nacl.c:1108 earmelfb_nbsd.c:1103 earmnto.c:1078 ecskyelf.c:567 +#: ecskyelf_linux.c:734 eelf32metag.c:731 eelf64lppc.c:1213 +#: eelf64lppc_fbsd.c:1213 eelf64ppc.c:1213 eelf64ppc_fbsd.c:1213 +#: ehppaelf.c:587 ehppalinux.c:769 ehppanbsd.c:769 ehppaobsd.c:769 msgid "%F%P: invalid number `%s'\n" msgstr "" -#: lexsup.c:1094 +#: lexsup.c:1076 msgid "%F%P: bad --unresolved-symbols option: %s\n" msgstr "" -#: lexsup.c:1181 +#: lexsup.c:1156 msgid "%F%P: bad -plugin-opt option\n" msgstr "" @@ -2164,177 +2102,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:1198 +#: lexsup.c:1173 msgid "%F%P: unrecognised option: %s\n" msgstr "" -#: lexsup.c:1201 lexsup.c:1311 lexsup.c:1332 lexsup.c:1451 +#: lexsup.c:1176 lexsup.c:1286 lexsup.c:1307 lexsup.c:1426 msgid "%F%P: -r and %s may not be used together\n" msgstr "" -#: lexsup.c:1323 +#: lexsup.c:1298 msgid "%F%P: -shared not supported\n" msgstr "" -#: lexsup.c:1337 +#: lexsup.c:1312 msgid "%F%P: -pie not supported\n" msgstr "" -#: lexsup.c:1343 +#: lexsup.c:1318 msgid "%P: SONAME must not be empty string; keeping previous one\n" msgstr "" -#: lexsup.c:1349 +#: lexsup.c:1324 msgid "descending" msgstr "" -#: lexsup.c:1351 +#: lexsup.c:1326 msgid "ascending" msgstr "" -#: lexsup.c:1354 +#: lexsup.c:1329 msgid "%F%P: invalid common section sorting option: %s\n" msgstr "" -#: lexsup.c:1358 +#: lexsup.c:1333 msgid "name" msgstr "" -#: lexsup.c:1360 +#: lexsup.c:1335 msgid "alignment" msgstr "" -#: lexsup.c:1363 +#: lexsup.c:1338 msgid "%F%P: invalid section sorting option: %s\n" msgstr "" -#: lexsup.c:1400 +#: lexsup.c:1375 msgid "%F%P: invalid argument to option \"--section-start\"\n" msgstr "" -#: lexsup.c:1407 +#: lexsup.c:1382 msgid "%F%P: missing argument(s) to option \"--section-start\"\n" msgstr "" -#: lexsup.c:1677 +#: lexsup.c:1652 msgid "%F%P: group ended before it began (--help for usage)\n" msgstr "" -#: lexsup.c:1693 -msgid "%F%P: failed to add remap file %s\n" -msgstr "" - -#. FIXME: Should we allow --remap-inputs=@myfile as a synonym -#. for --remap-inputs-file=myfile ? -#: lexsup.c:1702 -msgid "%F%P: invalid argument to option --remap-inputs\n" -msgstr "" - -#: lexsup.c:1723 +#: lexsup.c:1677 msgid "%F%P: invalid cache memory size: %s\n" msgstr "" -#: lexsup.c:1737 +#: lexsup.c:1691 msgid "%X%P: --hash-size needs a numeric argument\n" msgstr "" -#: lexsup.c:1749 +#: lexsup.c:1703 msgid "%F%P: no state pushed before popping\n" msgstr "" -#: lexsup.c:1772 +#: lexsup.c:1726 msgid "%F%P: invalid argument to option \"--orphan-handling\"\n" msgstr "" -#: lexsup.c:1810 +#: lexsup.c:1756 msgid "%F%P: bad --ctf-share-types option: %s\n" msgstr "" -#: lexsup.c:1828 +#: lexsup.c:1774 msgid "%P: no file/directory name provided for map output; ignored\n" msgstr "" -#: lexsup.c:1856 +#: lexsup.c:1802 msgid "%P: cannot stat linker map file: %E\n" msgstr "" -#: lexsup.c:1868 +#: lexsup.c:1814 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:1879 +#: lexsup.c:1825 msgid "%P%F: cannot create name for linker map file: %E\n" msgstr "" -#: lexsup.c:1890 +#: lexsup.c:1836 msgid "%P: SONAME must not be empty string; ignored\n" msgstr "" -#: lexsup.c:1896 +#: lexsup.c:1842 msgid "%P: missing --end-group; added as last command line option\n" msgstr "" -#: lexsup.c:2005 -msgid "%F%P: -r and -z nosectionheader may not be used together\n" -msgstr "" - -#: lexsup.c:2013 +#: lexsup.c:1950 msgid "%F%P: -F may not be used without -shared\n" msgstr "" -#: lexsup.c:2015 +#: lexsup.c:1952 msgid "%F%P: -f may not be used without -shared\n" msgstr "" -#: lexsup.c:2056 lexsup.c:2069 +#: lexsup.c:1993 lexsup.c:2006 msgid "%F%P: invalid hex number `%s'\n" msgstr "" -#: lexsup.c:2099 +#: lexsup.c:2036 #, c-format msgid " --audit=AUDITLIB Specify a library to use for auditing\n" msgstr "" -#: lexsup.c:2101 +#: lexsup.c:2038 #, c-format msgid " -Bgroup Selects group name lookup rules for DSO\n" msgstr "" -#: lexsup.c:2103 +#: lexsup.c:2040 #, c-format msgid " --disable-new-dtags Disable new dynamic tags\n" msgstr "" -#: lexsup.c:2105 +#: lexsup.c:2042 #, c-format msgid " --enable-new-dtags Enable new dynamic tags\n" msgstr "" -#: lexsup.c:2107 +#: lexsup.c:2044 #, c-format msgid " --eh-frame-hdr Create .eh_frame_hdr section\n" msgstr "" -#: lexsup.c:2109 +#: lexsup.c:2046 #, c-format msgid " --no-eh-frame-hdr Do not create .eh_frame_hdr section\n" msgstr "" -#: lexsup.c:2111 +#: lexsup.c:2048 #, c-format msgid " --exclude-libs=LIBS Make all symbols in LIBS hidden\n" msgstr "" -#: lexsup.c:2113 +#: lexsup.c:2050 #, c-format msgid "" " --hash-style=STYLE Set hash style to sysv/gnu/both. Default: " msgstr "" -#: lexsup.c:2132 +#: lexsup.c:2069 #, c-format msgid "" " -P AUDITLIB, --depaudit=AUDITLIB\n" @@ -2342,20 +2266,20 @@ msgid "" "dependencies\n" msgstr "" -#: lexsup.c:2135 +#: lexsup.c:2072 #, c-format msgid "" " -z combreloc Merge dynamic relocs into one section and " "sort\n" msgstr "" -#: lexsup.c:2137 +#: lexsup.c:2074 #, c-format msgid "" " -z nocombreloc Don't merge dynamic relocs into one section\n" msgstr "" -#: lexsup.c:2139 +#: lexsup.c:2076 #, c-format msgid "" " -z global Make symbols in DSO available for " @@ -2363,328 +2287,328 @@ msgid "" " loaded objects\n" msgstr "" -#: lexsup.c:2142 +#: lexsup.c:2079 #, c-format msgid "" " -z initfirst Mark DSO to be initialized first at runtime\n" msgstr "" -#: lexsup.c:2144 +#: lexsup.c:2081 #, c-format msgid "" " -z interpose Mark object to interpose all DSOs but " "executable\n" msgstr "" -#: lexsup.c:2146 +#: lexsup.c:2083 #, 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:2148 +#: lexsup.c:2085 #, c-format msgid "" " -z nounique Don't mark DSO as a loadable at most once\n" msgstr "" -#: lexsup.c:2150 +#: lexsup.c:2087 #, c-format msgid "" " -z lazy Mark object lazy runtime binding (default)\n" msgstr "" -#: lexsup.c:2152 +#: lexsup.c:2089 #, c-format msgid " -z loadfltr Mark object requiring immediate process\n" msgstr "" -#: lexsup.c:2154 +#: lexsup.c:2091 #, c-format msgid " -z nocopyreloc Don't create copy relocs\n" msgstr "" -#: lexsup.c:2156 +#: lexsup.c:2093 #, c-format msgid "" " -z nodefaultlib Mark object not to use default search paths\n" msgstr "" -#: lexsup.c:2158 +#: lexsup.c:2095 #, c-format msgid " -z nodelete Mark DSO non-deletable at runtime\n" msgstr "" -#: lexsup.c:2160 +#: lexsup.c:2097 #, c-format msgid " -z nodlopen Mark DSO not available to dlopen\n" msgstr "" -#: lexsup.c:2162 +#: lexsup.c:2099 #, c-format msgid " -z nodump Mark DSO not available to dldump\n" msgstr "" -#: lexsup.c:2164 +#: lexsup.c:2101 #, c-format msgid " -z now Mark object non-lazy runtime binding\n" msgstr "" -#: lexsup.c:2166 +#: lexsup.c:2103 #, c-format msgid "" " -z origin Mark object requiring immediate $ORIGIN\n" " processing at runtime\n" msgstr "" -#: lexsup.c:2170 +#: lexsup.c:2107 #, c-format msgid " -z relro Create RELRO program header (default)\n" msgstr "" -#: lexsup.c:2172 +#: lexsup.c:2109 #, c-format msgid " -z norelro Don't create RELRO program header\n" msgstr "" -#: lexsup.c:2175 +#: lexsup.c:2112 #, c-format msgid " -z relro Create RELRO program header\n" msgstr "" -#: lexsup.c:2177 +#: lexsup.c:2114 #, c-format msgid "" " -z norelro Don't create RELRO program header (default)\n" msgstr "" -#: lexsup.c:2181 +#: lexsup.c:2118 #, c-format msgid "" " -z separate-code Create separate code program header (default)\n" msgstr "" -#: lexsup.c:2183 +#: lexsup.c:2120 #, c-format msgid "" " -z noseparate-code Don't create separate code program header\n" msgstr "" -#: lexsup.c:2186 +#: lexsup.c:2123 #, c-format msgid " -z separate-code Create separate code program header\n" msgstr "" -#: lexsup.c:2188 +#: lexsup.c:2125 #, c-format msgid "" " -z noseparate-code Don't create separate code program header " "(default)\n" msgstr "" -#: lexsup.c:2191 +#: lexsup.c:2128 #, c-format msgid "" " -z common Generate common symbols with STT_COMMON type\n" msgstr "" -#: lexsup.c:2193 +#: lexsup.c:2130 #, c-format msgid "" " -z nocommon Generate common symbols with STT_OBJECT type\n" msgstr "" -#: lexsup.c:2196 +#: lexsup.c:2133 #, c-format msgid "" " -z text Treat DT_TEXTREL in output as error (default)\n" msgstr "" -#: lexsup.c:2199 +#: lexsup.c:2136 #, c-format msgid " -z text Treat DT_TEXTREL in output as error\n" msgstr "" -#: lexsup.c:2203 +#: lexsup.c:2140 #, c-format msgid "" " -z notext Don't treat DT_TEXTREL in output as error " "(default)\n" msgstr "" -#: lexsup.c:2205 +#: lexsup.c:2142 #, c-format msgid "" " -z textoff Don't treat DT_TEXTREL in output as error " "(default)\n" msgstr "" -#: lexsup.c:2210 +#: lexsup.c:2147 #, c-format msgid "" " -z notext Don't treat DT_TEXTREL in output as error\n" msgstr "" -#: lexsup.c:2212 +#: lexsup.c:2149 #, c-format msgid "" " -z textoff Don't treat DT_TEXTREL in output as error\n" msgstr "" -#: lexsup.c:2220 +#: lexsup.c:2157 #, c-format msgid " --build-id[=STYLE] Generate build ID note\n" msgstr "" -#: lexsup.c:2222 +#: lexsup.c:2159 #, c-format msgid " --package-metadata[=JSON] Generate package metadata note\n" msgstr "" -#: lexsup.c:2224 +#: lexsup.c:2161 #, c-format msgid "" " --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi|zstd]\n" "\t\t\t Compress DWARF debug sections\n" msgstr "" -#: lexsup.c:2227 +#: lexsup.c:2164 #, c-format msgid " Default: %s\n" msgstr "" -#: lexsup.c:2230 +#: lexsup.c:2167 #, c-format msgid " -z common-page-size=SIZE Set common page size to SIZE\n" msgstr "" -#: lexsup.c:2232 +#: lexsup.c:2169 #, c-format msgid " -z max-page-size=SIZE Set maximum page size to SIZE\n" msgstr "" -#: lexsup.c:2234 +#: lexsup.c:2171 #, c-format msgid "" " -z defs Report unresolved symbols in object files\n" msgstr "" -#: lexsup.c:2236 +#: lexsup.c:2173 #, c-format msgid "" " -z undefs Ignore unresolved symbols in object files\n" msgstr "" -#: lexsup.c:2238 +#: lexsup.c:2175 #, c-format msgid " -z muldefs Allow multiple definitions\n" msgstr "" -#: lexsup.c:2240 +#: lexsup.c:2177 #, c-format msgid " -z stack-size=SIZE Set size of stack segment\n" msgstr "" -#: lexsup.c:2242 +#: lexsup.c:2179 #, c-format msgid "" " -z execstack Mark executable as requiring executable stack\n" msgstr "" -#: lexsup.c:2244 +#: lexsup.c:2181 #, c-format msgid "" " -z noexecstack Mark executable as not requiring executable " "stack\n" msgstr "" -#: lexsup.c:2247 +#: lexsup.c:2184 #, c-format msgid "" " --warn-execstack Generate a warning if the stack is executable " "(default)\n" msgstr "" -#: lexsup.c:2250 +#: lexsup.c:2187 #, c-format msgid "" " --warn-execstack Generate a warning if the stack is executable\n" msgstr "" -#: lexsup.c:2254 +#: lexsup.c:2191 #, c-format msgid "" " --no-warn-execstack Do not generate a warning if the stack is " "executable (default)\n" msgstr "" -#: lexsup.c:2257 +#: lexsup.c:2194 #, c-format msgid "" " --no-warn-execstack Do not generate a warning if the stack is " "executable\n" msgstr "" -#: lexsup.c:2261 +#: lexsup.c:2198 #, c-format msgid "" " --warn-rwx-segments Generate a warning if a LOAD segment has RWX " "permissions (default)\n" msgstr "" -#: lexsup.c:2263 +#: lexsup.c:2200 #, c-format msgid "" " --no-warn-rwx-segments Do not generate a warning if a LOAD segments " "has RWX permissions\n" msgstr "" -#: lexsup.c:2266 +#: lexsup.c:2203 #, c-format msgid "" " --warn-rwx-segments Generate a warning if a LOAD segment has RWX " "permissions\n" msgstr "" -#: lexsup.c:2268 +#: lexsup.c:2205 #, c-format msgid "" " --no-warn-rwx-segments Do not generate a warning if a LOAD segments " "has RWX permissions (default)\n" msgstr "" -#: lexsup.c:2271 +#: lexsup.c:2208 #, c-format msgid " -z unique-symbol Avoid duplicated local symbol names\n" msgstr "" -#: lexsup.c:2273 +#: lexsup.c:2210 #, c-format msgid "" " -z nounique-symbol Keep duplicated local symbol names (default)\n" msgstr "" -#: lexsup.c:2275 +#: lexsup.c:2212 #, c-format msgid "" " -z globalaudit Mark executable requiring global auditing\n" msgstr "" -#: lexsup.c:2277 +#: lexsup.c:2214 #, c-format msgid "" " -z start-stop-gc Enable garbage collection on __start/__stop\n" msgstr "" -#: lexsup.c:2279 +#: lexsup.c:2216 #, c-format msgid "" " -z nostart-stop-gc Don't garbage collect __start/__stop " "(default)\n" msgstr "" -#: lexsup.c:2281 +#: lexsup.c:2218 #, c-format msgid "" " -z start-stop-visibility=V Set visibility of built-in __start/__stop " @@ -2692,23 +2616,13 @@ msgid "" " to DEFAULT, PROTECTED, HIDDEN or INTERNAL\n" msgstr "" -#: lexsup.c:2284 -#, c-format -msgid " -z sectionheader Generate section header (default)\n" -msgstr "" - -#: lexsup.c:2286 -#, c-format -msgid " -z nosectionheader Do not generate section header\n" -msgstr "" - -#: lexsup.c:2293 +#: lexsup.c:2226 #, c-format msgid "" " --ld-generated-unwind-info Generate exception handling info for PLT\n" msgstr "" -#: lexsup.c:2295 +#: lexsup.c:2228 #, c-format msgid "" " --no-ld-generated-unwind-info\n" @@ -2716,49 +2630,49 @@ msgid "" "PLT\n" msgstr "" -#: lexsup.c:2305 +#: lexsup.c:2238 #, c-format msgid "ELF emulations:\n" msgstr "" -#: lexsup.c:2323 +#: lexsup.c:2256 #, c-format msgid "Usage: %s [options] file...\n" msgstr "" -#: lexsup.c:2325 +#: lexsup.c:2258 #, c-format msgid "Options:\n" msgstr "" -#: lexsup.c:2403 +#: lexsup.c:2336 #, c-format msgid " @FILE" msgstr "" -#: lexsup.c:2406 +#: lexsup.c:2339 #, 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:2411 +#: lexsup.c:2344 #, c-format msgid "%s: supported targets:" msgstr "" -#: lexsup.c:2419 +#: lexsup.c:2352 #, c-format msgid "%s: supported emulations: " msgstr "" -#: lexsup.c:2424 +#: lexsup.c:2357 #, c-format msgid "%s: emulation specific options:\n" msgstr "" -#: lexsup.c:2431 +#: lexsup.c:2364 #, c-format msgid "Report bugs to %s\n" msgstr "" @@ -2767,483 +2681,483 @@ msgstr "" msgid "%F%P: unknown format type %s\n" msgstr "" -#: pdb.c:842 pdb.c:1133 +#: pdb.c:828 pdb.c:1119 msgid "%P: CodeView symbol references out of range type %v\n" msgstr "" -#: pdb.c:1011 +#: pdb.c:997 msgid "" "%P: warning: truncated CodeView record S_LDATA32/S_GDATA32/S_LTHREAD32/" "S_GTHREAD32\n" msgstr "" -#: pdb.c:1030 +#: pdb.c:1016 msgid "" "%P: warning: name for S_LDATA32/S_GDATA32/S_LTHREAD32/S_GTHREAD32 has no " "terminating zero\n" msgstr "" -#: pdb.c:1078 pdb.c:1748 +#: pdb.c:1064 pdb.c:1734 msgid "%P: warning: truncated CodeView record S_GPROC32/S_LPROC32\n" msgstr "" -#: pdb.c:1090 pdb.c:1765 +#: pdb.c:1076 pdb.c:1751 msgid "%P: warning: could not find end of S_GPROC32/S_LPROC32 record\n" msgstr "" -#: pdb.c:1116 +#: pdb.c:1102 msgid "%P: warning: name for S_GPROC32/S_LPROC32 has no terminating zero\n" msgstr "" -#: pdb.c:1172 +#: pdb.c:1158 msgid "" "%P: CodeView S_GPROC32_ID/S_LPROC32_ID symbol referenced unknown type as ID\n" msgstr "" -#: pdb.c:1246 +#: pdb.c:1232 msgid "%P: warning: truncated CodeView record S_UDT\n" msgstr "" -#: pdb.c:1257 +#: pdb.c:1243 msgid "%P: warning: name for S_UDT has no terminating zero\n" msgstr "" -#: pdb.c:1294 +#: pdb.c:1280 msgid "%P: warning: truncated CodeView record S_CONSTANT\n" msgstr "" -#: pdb.c:1311 +#: pdb.c:1297 msgid "%P: warning: unhandled type %v within S_CONSTANT\n" msgstr "" -#: pdb.c:1325 +#: pdb.c:1311 msgid "%P: warning: name for S_CONSTANT has no terminating zero\n" msgstr "" -#: pdb.c:1385 +#: pdb.c:1371 msgid "%P: warning: unexpected CodeView scope start record %v\n" msgstr "" -#: pdb.c:1407 +#: pdb.c:1393 msgid "%P: warning: truncated CodeView record S_BUILDINFO\n" msgstr "" -#: pdb.c:1433 +#: pdb.c:1419 msgid "%P: warning: truncated CodeView record S_BLOCK32\n" msgstr "" -#: pdb.c:1445 +#: pdb.c:1431 msgid "%P: warning: could not find end of S_BLOCK32 record\n" msgstr "" -#: pdb.c:1470 +#: pdb.c:1456 msgid "%P: warning: truncated CodeView record S_BPREL32\n" msgstr "" -#: pdb.c:1494 +#: pdb.c:1480 msgid "%P: warning: truncated CodeView record S_REGISTER\n" msgstr "" -#: pdb.c:1518 +#: pdb.c:1504 msgid "%P: warning: truncated CodeView record S_REGREL32\n" msgstr "" -#: pdb.c:1542 +#: pdb.c:1528 msgid "%P: warning: truncated CodeView record S_LOCAL\n" msgstr "" -#: pdb.c:1568 +#: pdb.c:1554 msgid "%P: warning: truncated CodeView record S_INLINESITE\n" msgstr "" -#: pdb.c:1580 +#: pdb.c:1566 msgid "%P: warning: could not find end of S_INLINESITE record\n" msgstr "" -#: pdb.c:1613 +#: pdb.c:1599 msgid "%P: warning: truncated CodeView record S_THUNK32\n" msgstr "" -#: pdb.c:1625 +#: pdb.c:1611 msgid "%P: warning: could not find end of S_THUNK32 record\n" msgstr "" -#: pdb.c:1650 +#: pdb.c:1636 msgid "%P: warning: truncated CodeView record S_HEAPALLOCSITE\n" msgstr "" -#: pdb.c:1684 pdb.c:1828 +#: pdb.c:1670 pdb.c:1814 msgid "%P: warning: unrecognized CodeView record %v\n" msgstr "" -#: pdb.c:1720 +#: pdb.c:1706 msgid "%P: warning: truncated CodeView record S_LDATA32/S_LTHREAD32\n" msgstr "" -#: pdb.c:2155 +#: pdb.c:2141 msgid "%P: CodeView type %v references other type %v not yet declared\n" msgstr "" -#: pdb.c:2162 +#: pdb.c:2148 msgid "%P: CodeView type %v references out of range type %v\n" msgstr "" -#: pdb.c:2222 +#: pdb.c:2208 msgid "%P: warning: truncated CodeView type record LF_UDT_SRC_LINE\n" msgstr "" -#: pdb.c:2235 +#: pdb.c:2221 msgid "" "%P: warning: CodeView type record LF_UDT_SRC_LINE referred to unknown type %" "v\n" msgstr "" -#: pdb.c:2257 +#: pdb.c:2243 msgid "" "%P: warning: CodeView type record LF_UDT_SRC_LINE referred to unknown string " "%v\n" msgstr "" -#: pdb.c:2266 +#: pdb.c:2252 msgid "" "%P: warning: CodeView type record LF_UDT_SRC_LINE pointed to unexpected " "record type\n" msgstr "" -#: pdb.c:2315 +#: pdb.c:2301 msgid "%P: warning: duplicate CodeView type record LF_UDT_MOD_SRC_LINE\n" msgstr "" -#: pdb.c:2364 +#: pdb.c:2350 msgid "%P: warning: truncated CodeView type record LF_MODIFIER\n" msgstr "" -#: pdb.c:2381 +#: pdb.c:2367 msgid "%P: warning: truncated CodeView type record LF_POINTER\n" msgstr "" -#: pdb.c:2398 +#: pdb.c:2384 msgid "%P: warning: truncated CodeView type record LF_PROCEDURE\n" msgstr "" -#: pdb.c:2418 +#: pdb.c:2404 msgid "%P: warning: truncated CodeView type record LF_MFUNCTION\n" msgstr "" -#: pdb.c:2446 pdb.c:2456 +#: pdb.c:2432 pdb.c:2442 msgid "%P: warning: truncated CodeView type record LF_ARGLIST\n" msgstr "" -#: pdb.c:2481 pdb.c:2551 pdb.c:2688 pdb.c:2735 pdb.c:2953 pdb.c:3000 +#: pdb.c:2467 pdb.c:2537 pdb.c:2674 pdb.c:2721 pdb.c:2939 pdb.c:2986 msgid "%P: warning: truncated CodeView type record LF_FIELDLIST\n" msgstr "" -#: pdb.c:2498 pdb.c:2526 +#: pdb.c:2484 pdb.c:2512 msgid "%P: warning: truncated CodeView type record LF_MEMBER\n" msgstr "" -#: pdb.c:2517 +#: pdb.c:2503 msgid "%P: warning: unhandled type %v within LF_MEMBER\n" msgstr "" -#: pdb.c:2537 +#: pdb.c:2523 msgid "%P: warning: name for LF_MEMBER has no terminating zero\n" msgstr "" -#: pdb.c:2570 pdb.c:2593 pdb.c:2620 +#: pdb.c:2556 pdb.c:2579 pdb.c:2606 msgid "%P: warning: truncated CodeView type record LF_ENUMERATE\n" msgstr "" -#: pdb.c:2586 +#: pdb.c:2572 msgid "%P: warning: unhandled type %v within LF_ENUMERATE\n" msgstr "" -#: pdb.c:2606 +#: pdb.c:2592 msgid "%P: warning: name for LF_ENUMERATE has no terminating zero\n" msgstr "" -#: pdb.c:2637 +#: pdb.c:2623 msgid "%P: warning: truncated CodeView type record LF_INDEX\n" msgstr "" -#: pdb.c:2658 +#: pdb.c:2644 msgid "%P: warning: truncated CodeView type record LF_ONEMETHOD\n" msgstr "" -#: pdb.c:2673 +#: pdb.c:2659 msgid "%P: warning: name for LF_ONEMETHOD has no terminating zero\n" msgstr "" -#: pdb.c:2706 +#: pdb.c:2692 msgid "%P: warning: truncated CodeView type record LF_METHOD\n" msgstr "" -#: pdb.c:2721 +#: pdb.c:2707 msgid "%P: warning: name for LF_METHOD has no terminating zero\n" msgstr "" -#: pdb.c:2754 pdb.c:2783 pdb.c:2794 +#: pdb.c:2740 pdb.c:2769 pdb.c:2780 msgid "%P: warning: truncated CodeView type record LF_BCLASS\n" msgstr "" -#: pdb.c:2774 +#: pdb.c:2760 msgid "%P: warning: unhandled type %v within LF_BCLASS\n" msgstr "" -#: pdb.c:2811 +#: pdb.c:2797 msgid "%P: warning: truncated CodeView type record LF_VFUNCTAB\n" msgstr "" -#: pdb.c:2834 pdb.c:2868 pdb.c:2893 pdb.c:2904 +#: pdb.c:2820 pdb.c:2854 pdb.c:2879 pdb.c:2890 msgid "%P: warning: truncated CodeView type record LF_VBCLASS/LF_IVBCLASS\n" msgstr "" -#: pdb.c:2859 pdb.c:2884 +#: pdb.c:2845 pdb.c:2870 msgid "%P: warning: unhandled type %v within LF_VBCLASS/LF_IVBCLASS\n" msgstr "" -#: pdb.c:2923 +#: pdb.c:2909 msgid "%P: warning: truncated CodeView type record LF_STMEMBER\n" msgstr "" -#: pdb.c:2938 +#: pdb.c:2924 msgid "%P: warning: name for LF_STMEMBER has no terminating zero\n" msgstr "" -#: pdb.c:2971 +#: pdb.c:2957 msgid "%P: warning: truncated CodeView type record LF_NESTTYPE\n" msgstr "" -#: pdb.c:2985 +#: pdb.c:2971 msgid "%P: warning: name for LF_NESTTYPE has no terminating zero\n" msgstr "" -#: pdb.c:3012 +#: pdb.c:2998 msgid "%P: warning: unrecognized CodeView subtype %v\n" msgstr "" -#: pdb.c:3027 +#: pdb.c:3013 msgid "%P: warning: truncated CodeView type record LF_BITFIELD\n" msgstr "" -#: pdb.c:3045 +#: pdb.c:3031 msgid "%P: warning: truncated CodeView type record LF_METHODLIST\n" msgstr "" -#: pdb.c:3053 +#: pdb.c:3039 msgid "%P: warning: malformed CodeView type record LF_METHODLIST\n" msgstr "" -#: pdb.c:3077 +#: pdb.c:3063 msgid "%P: warning: truncated CodeView type record LF_ARRAY\n" msgstr "" -#: pdb.c:3100 pdb.c:3134 +#: pdb.c:3086 pdb.c:3120 msgid "%P: warning: truncated CodeView type record LF_CLASS/LF_STRUCTURE\n" msgstr "" -#: pdb.c:3125 +#: pdb.c:3111 msgid "%P: warning: unhandled type %v within LF_CLASS/LF_STRUCTURE\n" msgstr "" -#: pdb.c:3144 +#: pdb.c:3130 msgid "%P: warning: name for LF_CLASS/LF_STRUCTURE has no terminating zero\n" msgstr "" -#: pdb.c:3163 +#: pdb.c:3149 msgid "" "%P: warning: unique name for LF_CLASS/LF_STRUCTURE has no terminating zero\n" msgstr "" -#: pdb.c:3187 pdb.c:3215 +#: pdb.c:3173 pdb.c:3201 msgid "%P: warning: truncated CodeView type record LF_UNION\n" msgstr "" -#: pdb.c:3206 +#: pdb.c:3192 msgid "%P: warning: unhandled type %v within LF_UNION\n" msgstr "" -#: pdb.c:3225 +#: pdb.c:3211 msgid "%P: warning: name for LF_UNION has no terminating zero\n" msgstr "" -#: pdb.c:3244 +#: pdb.c:3230 msgid "%P: warning: unique name for LF_UNION has no terminating zero\n" msgstr "" -#: pdb.c:3268 +#: pdb.c:3254 msgid "%P: warning: truncated CodeView type record LF_ENUM\n" msgstr "" -#: pdb.c:3283 +#: pdb.c:3269 msgid "%P: warning: name for LF_ENUM has no terminating zero\n" msgstr "" -#: pdb.c:3301 +#: pdb.c:3287 msgid "%P: warning: unique name for LF_ENUM has no terminating zero\n" msgstr "" -#: pdb.c:3320 +#: pdb.c:3306 msgid "%P: warning: truncated CodeView type record LF_VFTABLE\n" msgstr "" -#: pdb.c:3341 +#: pdb.c:3327 msgid "%P: warning: truncated CodeView type record LF_STRING_ID\n" msgstr "" -#: pdb.c:3354 +#: pdb.c:3340 msgid "%P: warning: string for LF_STRING_ID has no terminating zero\n" msgstr "" -#: pdb.c:3371 pdb.c:3381 +#: pdb.c:3357 pdb.c:3367 msgid "%P: warning: truncated CodeView type record LF_SUBSTR_LIST\n" msgstr "" -#: pdb.c:3404 pdb.c:3414 +#: pdb.c:3390 pdb.c:3400 msgid "%P: warning: truncated CodeView type record LF_BUILDINFO\n" msgstr "" -#: pdb.c:3437 +#: pdb.c:3423 msgid "%P: warning: truncated CodeView type record LF_FUNC_ID\n" msgstr "" -#: pdb.c:3453 +#: pdb.c:3439 msgid "%P: warning: string for LF_FUNC_ID has no terminating zero\n" msgstr "" -#: pdb.c:3470 +#: pdb.c:3456 msgid "%P: warning: truncated CodeView type record LF_MFUNC_ID\n" msgstr "" -#: pdb.c:3486 +#: pdb.c:3472 msgid "%P: warning: string for LF_MFUNC_ID has no terminating zero\n" msgstr "" -#: pdb.c:3501 +#: pdb.c:3487 msgid "%P: warning: unrecognized CodeView type %v\n" msgstr "" -#: pdb.c:3675 +#: pdb.c:3654 msgid "%P: warning: unable to get working directory\n" msgstr "" -#: pdb.c:3683 +#: pdb.c:3662 msgid "%P: warning: unable to get program name\n" msgstr "" -#: pdb.c:3692 +#: pdb.c:3671 msgid "%P: warning: unable to get full path to PDB\n" msgstr "" -#: pdb.c:5148 +#: pdb.c:5090 msgid "%P: warning: cannot create PDB file: %E\n" msgstr "" -#: pdb.c:5163 +#: pdb.c:5105 msgid "%P: warning: cannot create old directory stream in PDB file: %E\n" msgstr "" -#: pdb.c:5172 +#: pdb.c:5114 msgid "%P: warning: cannot create info stream in PDB file: %E\n" msgstr "" -#: pdb.c:5181 +#: pdb.c:5123 msgid "%P: warning: cannot create TPI stream in PDB file: %E\n" msgstr "" -#: pdb.c:5190 +#: pdb.c:5132 msgid "%P: warning: cannot create DBI stream in PDB file: %E\n" msgstr "" -#: pdb.c:5199 +#: pdb.c:5141 msgid "%P: warning: cannot create IPI stream in PDB file: %E\n" msgstr "" -#: pdb.c:5208 +#: pdb.c:5150 msgid "%P: warning: cannot create /names stream in PDB file: %E\n" msgstr "" -#: pdb.c:5217 +#: pdb.c:5159 msgid "%P: warning: cannot create symbol record stream in PDB file: %E\n" msgstr "" -#: pdb.c:5226 +#: pdb.c:5168 msgid "%P: warning: cannot create publics stream in PDB file: %E\n" msgstr "" -#: pdb.c:5233 +#: pdb.c:5175 msgid "%P: warning: cannot create section header stream in PDB file: %E\n" msgstr "" -#: pdb.c:5252 +#: pdb.c:5194 msgid "%P: warning: cannot populate DBI stream in PDB file: %E\n" msgstr "" -#: pdb.c:5261 +#: pdb.c:5203 msgid "%P: warning: cannot populate TPI stream in PDB file: %E\n" msgstr "" -#: pdb.c:5272 +#: pdb.c:5214 msgid "%P: warning: cannot populate IPI stream in PDB file: %E\n" msgstr "" -#: pdb.c:5284 +#: pdb.c:5226 msgid "%P: warning: cannot populate names stream in PDB file: %E\n" msgstr "" -#: pdb.c:5291 +#: pdb.c:5233 msgid "%P: warning: cannot populate publics stream in PDB file: %E\n" msgstr "" -#: pdb.c:5298 +#: pdb.c:5240 msgid "%P: warning: cannot populate info stream in PDB file: %E\n" msgstr "" -#: pe-dll.c:459 +#: pe-dll.c:458 msgid "%X%P: unsupported PEI architecture: %s\n" msgstr "" -#: pe-dll.c:848 +#: pe-dll.c:847 msgid "%X%P: cannot export %s: invalid export name\n" msgstr "" -#: pe-dll.c:900 +#: pe-dll.c:899 #, c-format msgid "%X%P: error, duplicate EXPORT with ordinals: %s (%d vs %d)\n" msgstr "" -#: pe-dll.c:907 +#: pe-dll.c:906 #, c-format msgid "%P: warning, duplicate EXPORT: %s\n" msgstr "" -#: pe-dll.c:1014 +#: pe-dll.c:1013 #, c-format msgid "%X%P: cannot export %s: symbol not defined\n" msgstr "" -#: pe-dll.c:1020 +#: pe-dll.c:1019 #, c-format msgid "%X%P: cannot export %s: symbol wrong type (%d vs %d)\n" msgstr "" -#: pe-dll.c:1027 +#: pe-dll.c:1026 #, c-format msgid "%X%P: cannot export %s: symbol not found\n" msgstr "" -#: pe-dll.c:1051 eaarch64cloudabi.c:366 eaarch64cloudabib.c:366 +#: pe-dll.c:1049 eaarch64cloudabi.c:366 eaarch64cloudabib.c:366 #: eaarch64elf.c:365 eaarch64elf32.c:365 eaarch64elf32b.c:365 #: eaarch64elfb.c:365 eaarch64fbsd.c:366 eaarch64fbsdb.c:366 #: eaarch64haiku.c:366 eaarch64linux.c:366 eaarch64linux32.c:366 -#: eaarch64linux32b.c:366 eaarch64linuxb.c:366 eaarch64nto.c:366 -#: eaix5ppc.c:1660 eaix5ppc.c:1670 eaix5rs6.c:1660 eaix5rs6.c:1670 -#: eaixppc.c:1660 eaixppc.c:1670 eaixrs6.c:1660 eaixrs6.c:1670 earmelf.c:571 -#: earmelf_fbsd.c:571 earmelf_fuchsia.c:572 earmelf_haiku.c:572 -#: earmelf_linux.c:572 earmelf_linux_eabi.c:572 earmelf_linux_fdpiceabi.c:572 -#: earmelf_nacl.c:572 earmelf_nbsd.c:571 earmelf_phoenix.c:572 -#: earmelf_vxworks.c:571 earmelfb.c:571 earmelfb_fbsd.c:571 -#: earmelfb_fuchsia.c:572 earmelfb_linux.c:572 earmelfb_linux_eabi.c:572 +#: eaarch64linux32b.c:366 eaarch64linuxb.c:366 eaix5ppc.c:1660 eaix5ppc.c:1670 +#: eaix5rs6.c:1660 eaix5rs6.c:1670 eaixppc.c:1660 eaixppc.c:1670 +#: eaixrs6.c:1660 eaixrs6.c:1670 earmelf.c:571 earmelf_fbsd.c:571 +#: earmelf_fuchsia.c:572 earmelf_haiku.c:572 earmelf_linux.c:572 +#: earmelf_linux_eabi.c:572 earmelf_linux_fdpiceabi.c:572 earmelf_nacl.c:572 +#: earmelf_nbsd.c:571 earmelf_phoenix.c:572 earmelf_vxworks.c:571 +#: earmelfb.c:571 earmelfb_fbsd.c:571 earmelfb_fuchsia.c:572 +#: earmelfb_linux.c:572 earmelfb_linux_eabi.c:572 #: earmelfb_linux_fdpiceabi.c:572 earmelfb_nacl.c:572 earmelfb_nbsd.c:571 #: earmnto.c:571 ecskyelf.c:165 ecskyelf_linux.c:165 eelf32b4300.c:174 #: eelf32bmip.c:174 eelf32bmipn32.c:188 eelf32bsmip.c:188 eelf32btsmip.c:174 @@ -3263,180 +3177,180 @@ msgstr "" msgid "%F%P: can not create BFD: %E\n" msgstr "" -#: pe-dll.c:1065 +#: pe-dll.c:1063 msgid "%X%P: can not create .edata section: %E\n" msgstr "" -#: pe-dll.c:1079 +#: pe-dll.c:1077 msgid "%X%P: can not create .reloc section: %E\n" msgstr "" -#: pe-dll.c:1128 +#: pe-dll.c:1126 #, c-format msgid "%X%P: error: ordinal used twice: %d (%s vs %s)\n" msgstr "" -#: pe-dll.c:1164 +#: pe-dll.c:1162 #, c-format msgid "%X%P: error: export ordinal too large: %d\n" msgstr "" -#: pe-dll.c:1487 +#: pe-dll.c:1485 #, c-format msgid "Info: resolving %s by linking to %s (auto-import)\n" msgstr "" -#: pe-dll.c:1493 +#: pe-dll.c:1491 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:1653 +#: pe-dll.c:1560 +msgid "%P: zero vma section reloc detected: `%s' #%d f=%d\n" +msgstr "" + +#: pe-dll.c:1643 msgid "%P: base relocation for section `%s' above .reloc section\n" msgstr "" -#: pe-dll.c:1703 +#: pe-dll.c:1693 #, c-format msgid "%X%P: error: %d-bit reloc in dll\n" msgstr "" -#: pe-dll.c:1829 +#: pe-dll.c:1815 #, c-format msgid "%P: can't open output def file %s\n" msgstr "" -#: pe-dll.c:1978 +#: pe-dll.c:1964 #, c-format msgid "; no contents available\n" msgstr "" -#: pe-dll.c:2347 -msgid "%P: error: NULL decorated name for %s\n" -msgstr "" - -#: pe-dll.c:2914 +#: pe-dll.c:2867 msgid "" -"%X%P: %H: variable '%pT' can't be auto-imported; please read the " +"%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:2935 +#: pe-dll.c:2888 #, c-format msgid "%X%P: can't open .lib file: %s\n" msgstr "" -#: pe-dll.c:2941 +#: pe-dll.c:2894 #, c-format msgid "Creating library file: %s\n" msgstr "" -#: pe-dll.c:2971 +#: pe-dll.c:2924 msgid "%X%P: bfd_openr %s: %E\n" msgstr "" -#: pe-dll.c:2983 +#: pe-dll.c:2936 msgid "%X%P: %s(%s): can't find member in non-archive file" msgstr "" -#: pe-dll.c:2997 +#: pe-dll.c:2950 msgid "%X%P: %s(%s): can't find member in archive" msgstr "" -#: pe-dll.c:3261 +#: pe-dll.c:3214 msgid "%X%P: add symbols %s: %E\n" msgstr "" -#: pe-dll.c:3466 +#: pe-dll.c:3419 msgid "%X%P: open %s: %E\n" msgstr "" -#: pe-dll.c:3475 +#: pe-dll.c:3428 msgid "%X%P: %s: this doesn't appear to be a DLL\n" msgstr "" -#: pe-dll.c:3680 +#: pe-dll.c:3633 msgid "%X%P: error: can't use long section names on this arch\n" msgstr "" -#: plugin.c:240 plugin.c:286 +#: plugin.c:238 plugin.c:284 msgid "" msgstr "" -#: plugin.c:255 plugin.c:1130 +#: plugin.c:253 plugin.c:1116 msgid "%F%P: %s: error loading plugin: %s\n" msgstr "" -#: plugin.c:262 +#: plugin.c:260 msgid "%P: %s: duplicated plugin\n" msgstr "" -#: plugin.c:348 +#: plugin.c:346 msgid "%F%P: could not create dummy IR bfd: %E\n" msgstr "" -#: plugin.c:429 +#: plugin.c:427 msgid "%F%P: %s: non-ELF symbol in ELF BFD!\n" msgstr "" -#: plugin.c:440 +#: plugin.c:438 msgid "%F%P: unknown ELF symbol visibility: %d!\n" msgstr "" -#: plugin.c:558 +#: plugin.c:547 msgid "%F%P: unsupported input file size: %s (%ld bytes)\n" msgstr "" -#: plugin.c:703 +#: plugin.c:692 #, c-format msgid "unknown LTO kind value %x" msgstr "" -#: plugin.c:729 +#: plugin.c:718 #, c-format msgid "unknown LTO resolution value %x" msgstr "" -#: plugin.c:749 +#: plugin.c:738 #, c-format msgid "unknown LTO visibility value %x" msgstr "" #. We should not have a new, indirect or warning symbol here. -#: plugin.c:829 +#: plugin.c:818 msgid "%F%P: %s: plugin symbol table corrupt (sym type %d)\n" msgstr "" -#: plugin.c:894 +#: plugin.c:883 msgid "%P: %pB: symbol `%s' definition: %s, visibility: %s, resolution: %s\n" msgstr "" -#: plugin.c:971 +#: plugin.c:960 msgid "%P: warning: " msgstr "" -#: plugin.c:982 +#: plugin.c:971 msgid "%P: error: " msgstr "" -#: plugin.c:1137 +#: plugin.c:1123 msgid "%F%P: %s: plugin error: %d\n" msgstr "" -#: plugin.c:1196 +#: plugin.c:1178 msgid "%F%P: plugin_strdup failed to allocate memory: %s\n" msgstr "" -#: plugin.c:1233 +#: plugin.c:1215 msgid "%F%P: plugin failed to allocate memory for input: %s\n" msgstr "" -#: plugin.c:1261 +#: plugin.c:1243 msgid "%F%P: %s: plugin reported error claiming file\n" msgstr "" -#: plugin.c:1372 +#: plugin.c:1354 msgid "%P: %s: error in plugin cleanup: %d (ignored)\n" msgstr "" @@ -3444,24 +3358,23 @@ msgstr "" #: eaarch64elf32.c:228 eaarch64elf32b.c:228 eaarch64elfb.c:228 #: eaarch64fbsd.c:229 eaarch64fbsdb.c:229 eaarch64haiku.c:229 #: eaarch64linux.c:229 eaarch64linux32.c:229 eaarch64linux32b.c:229 -#: eaarch64linuxb.c:229 eaarch64nto.c:229 eaix5ppc.c:1125 eaix5rs6.c:1125 -#: eaixppc.c:1125 eaixrs6.c:1125 earmelf.c:298 earmelf_fbsd.c:298 -#: earmelf_fuchsia.c:299 earmelf_haiku.c:299 earmelf_linux.c:299 -#: earmelf_linux_eabi.c:299 earmelf_linux_fdpiceabi.c:299 earmelf_nacl.c:299 -#: earmelf_nbsd.c:298 earmelf_phoenix.c:299 earmelf_vxworks.c:298 -#: earmelfb.c:298 earmelfb_fbsd.c:298 earmelfb_fuchsia.c:299 -#: earmelfb_linux.c:299 earmelfb_linux_eabi.c:299 -#: earmelfb_linux_fdpiceabi.c:299 earmelfb_nacl.c:299 earmelfb_nbsd.c:298 -#: earmnto.c:298 eavr1.c:181 eavr2.c:181 eavr25.c:181 eavr3.c:181 eavr31.c:181 -#: eavr35.c:181 eavr4.c:181 eavr5.c:181 eavr51.c:181 eavr6.c:181 -#: eavrtiny.c:181 eavrxmega1.c:181 eavrxmega2.c:181 eavrxmega3.c:181 -#: eavrxmega4.c:181 eavrxmega5.c:181 eavrxmega6.c:181 eavrxmega7.c:181 -#: ecskyelf.c:212 ecskyelf_linux.c:212 eelf32b4300.c:207 eelf32bmip.c:207 -#: eelf32bmipn32.c:221 eelf32bsmip.c:221 eelf32btsmip.c:207 -#: eelf32btsmip_fbsd.c:207 eelf32btsmipn32.c:207 eelf32btsmipn32_fbsd.c:207 -#: eelf32ebmip.c:207 eelf32ebmipvxworks.c:207 eelf32elmip.c:207 -#: eelf32elmipvxworks.c:207 eelf32l4300.c:207 eelf32lmip.c:207 -#: eelf32lr5900.c:207 eelf32lr5900n32.c:207 eelf32lsmip.c:207 +#: eaarch64linuxb.c:229 eaix5ppc.c:1125 eaix5rs6.c:1125 eaixppc.c:1125 +#: eaixrs6.c:1125 earmelf.c:298 earmelf_fbsd.c:298 earmelf_fuchsia.c:299 +#: earmelf_haiku.c:299 earmelf_linux.c:299 earmelf_linux_eabi.c:299 +#: earmelf_linux_fdpiceabi.c:299 earmelf_nacl.c:299 earmelf_nbsd.c:298 +#: earmelf_phoenix.c:299 earmelf_vxworks.c:298 earmelfb.c:298 +#: earmelfb_fbsd.c:298 earmelfb_fuchsia.c:299 earmelfb_linux.c:299 +#: earmelfb_linux_eabi.c:299 earmelfb_linux_fdpiceabi.c:299 +#: earmelfb_nacl.c:299 earmelfb_nbsd.c:298 earmnto.c:298 eavr1.c:181 +#: eavr2.c:181 eavr25.c:181 eavr3.c:181 eavr31.c:181 eavr35.c:181 eavr4.c:181 +#: eavr5.c:181 eavr51.c:181 eavr6.c:181 eavrtiny.c:181 eavrxmega1.c:181 +#: eavrxmega2.c:181 eavrxmega3.c:181 eavrxmega4.c:181 eavrxmega5.c:181 +#: eavrxmega6.c:181 eavrxmega7.c:181 ecskyelf.c:212 ecskyelf_linux.c:212 +#: eelf32b4300.c:207 eelf32bmip.c:207 eelf32bmipn32.c:221 eelf32bsmip.c:221 +#: eelf32btsmip.c:207 eelf32btsmip_fbsd.c:207 eelf32btsmipn32.c:207 +#: eelf32btsmipn32_fbsd.c:207 eelf32ebmip.c:207 eelf32ebmipvxworks.c:207 +#: eelf32elmip.c:207 eelf32elmipvxworks.c:207 eelf32l4300.c:207 +#: eelf32lmip.c:207 eelf32lr5900.c:207 eelf32lr5900n32.c:207 eelf32lsmip.c:207 #: eelf32ltsmip.c:207 eelf32ltsmip_fbsd.c:207 eelf32ltsmipn32.c:207 #: eelf32ltsmipn32_fbsd.c:207 eelf32metag.c:208 eelf32mipswindiss.c:207 #: eelf64bmip.c:221 eelf64btsmip.c:207 eelf64btsmip_fbsd.c:207 @@ -3477,54 +3390,54 @@ msgstr "" #: eaarch64elf32.c:271 eaarch64elf32b.c:271 eaarch64elfb.c:271 #: eaarch64fbsd.c:272 eaarch64fbsdb.c:272 eaarch64haiku.c:272 #: eaarch64linux.c:272 eaarch64linux32.c:272 eaarch64linux32b.c:272 -#: eaarch64linuxb.c:272 eaarch64nto.c:272 earcelf.c:112 earclinux.c:113 -#: earclinux_nps.c:113 earcv2elf.c:112 earcv2elfx.c:112 earmelf.c:410 -#: earmelf_fbsd.c:410 earmelf_fuchsia.c:411 earmelf_haiku.c:411 -#: earmelf_linux.c:411 earmelf_linux_eabi.c:411 earmelf_linux_fdpiceabi.c:411 -#: earmelf_nacl.c:411 earmelf_nbsd.c:410 earmelf_phoenix.c:411 -#: earmelf_vxworks.c:410 earmelfb.c:410 earmelfb_fbsd.c:410 -#: earmelfb_fuchsia.c:411 earmelfb_linux.c:411 earmelfb_linux_eabi.c:411 +#: eaarch64linuxb.c:272 earcelf.c:112 earclinux.c:113 earclinux_nps.c:113 +#: earcv2elf.c:112 earcv2elfx.c:112 earmelf.c:410 earmelf_fbsd.c:410 +#: earmelf_fuchsia.c:411 earmelf_haiku.c:411 earmelf_linux.c:411 +#: earmelf_linux_eabi.c:411 earmelf_linux_fdpiceabi.c:411 earmelf_nacl.c:411 +#: earmelf_nbsd.c:410 earmelf_phoenix.c:411 earmelf_vxworks.c:410 +#: earmelfb.c:410 earmelfb_fbsd.c:410 earmelfb_fuchsia.c:411 +#: earmelfb_linux.c:411 earmelfb_linux_eabi.c:411 #: earmelfb_linux_fdpiceabi.c:411 earmelfb_nacl.c:411 earmelfb_nbsd.c:410 #: earmnto.c:410 eavr1.c:316 eavr2.c:316 eavr25.c:316 eavr3.c:316 eavr31.c:316 #: eavr35.c:316 eavr4.c:316 eavr5.c:316 eavr51.c:316 eavr6.c:316 #: eavrtiny.c:316 eavrxmega1.c:316 eavrxmega2.c:316 eavrxmega3.c:316 #: eavrxmega4.c:316 eavrxmega5.c:316 eavrxmega6.c:316 eavrxmega7.c:316 #: ecriself.c:112 ecrislinux.c:113 ed10velf.c:112 eelf32_sparc.c:113 -#: eelf32_sparc_sol2.c:245 eelf32_sparc_vxworks.c:142 eelf32_spu.c:646 +#: eelf32_sparc_sol2.c:245 eelf32_sparc_vxworks.c:142 eelf32_spu.c:782 #: eelf32_tic6x_be.c:183 eelf32_tic6x_elf_be.c:183 eelf32_tic6x_elf_le.c:183 #: eelf32_tic6x_le.c:183 eelf32_tic6x_linux_be.c:183 #: eelf32_tic6x_linux_le.c:183 eelf32_x86_64.c:137 eelf32am33lin.c:112 #: eelf32b4300.c:309 eelf32bfin.c:122 eelf32bfinfd.c:122 eelf32bmip.c:309 -#: eelf32bmipn32.c:323 eelf32briscv.c:92 eelf32briscv_ilp32.c:92 -#: eelf32briscv_ilp32f.c:92 eelf32bsmip.c:323 eelf32btsmip.c:309 +#: eelf32bmipn32.c:323 eelf32briscv.c:91 eelf32briscv_ilp32.c:91 +#: eelf32briscv_ilp32f.c:91 eelf32bsmip.c:323 eelf32btsmip.c:309 #: eelf32btsmip_fbsd.c:309 eelf32btsmipn32.c:309 eelf32btsmipn32_fbsd.c:309 #: eelf32cr16.c:262 eelf32crx.c:149 eelf32ebmip.c:309 eelf32ebmipvxworks.c:338 #: eelf32elmip.c:309 eelf32elmipvxworks.c:338 eelf32epiphany.c:112 #: eelf32epiphany_4x4.c:114 eelf32frvfd.c:112 eelf32ip2k.c:112 #: eelf32l4300.c:309 eelf32lm32.c:112 eelf32lm32fd.c:112 eelf32lmip.c:309 -#: eelf32loongarch.c:91 eelf32lppc.c:321 eelf32lppclinux.c:321 -#: eelf32lppcnto.c:321 eelf32lppcsim.c:321 eelf32lr5900.c:309 -#: eelf32lr5900n32.c:308 eelf32lriscv.c:92 eelf32lriscv_ilp32.c:92 -#: eelf32lriscv_ilp32f.c:92 eelf32lsmip.c:309 eelf32ltsmip.c:309 +#: eelf32loongarch.c:90 eelf32lppc.c:333 eelf32lppclinux.c:333 +#: eelf32lppcnto.c:333 eelf32lppcsim.c:333 eelf32lr5900.c:309 +#: eelf32lr5900n32.c:308 eelf32lriscv.c:91 eelf32lriscv_ilp32.c:91 +#: eelf32lriscv_ilp32f.c:91 eelf32lsmip.c:309 eelf32ltsmip.c:309 #: eelf32ltsmip_fbsd.c:309 eelf32ltsmipn32.c:309 eelf32ltsmipn32_fbsd.c:309 #: eelf32m32c.c:123 eelf32mb_linux.c:113 eelf32mbel_linux.c:113 #: eelf32mcore.c:112 eelf32mep.c:112 eelf32metag.c:258 eelf32microblaze.c:112 #: eelf32microblazeel.c:112 eelf32mipswindiss.c:308 eelf32moxie.c:112 -#: eelf32or1k.c:113 eelf32or1k_linux.c:113 eelf32ppc.c:321 -#: eelf32ppc_fbsd.c:321 eelf32ppchaiku.c:321 eelf32ppclinux.c:321 -#: eelf32ppcnto.c:321 eelf32ppcsim.c:321 eelf32ppcvxworks.c:295 -#: eelf32ppcwindiss.c:321 eelf32rl78.c:112 eelf32rx.c:128 eelf32rx_linux.c:125 +#: eelf32or1k.c:113 eelf32or1k_linux.c:113 eelf32ppc.c:333 +#: eelf32ppc_fbsd.c:333 eelf32ppchaiku.c:333 eelf32ppclinux.c:333 +#: eelf32ppcnto.c:333 eelf32ppcsim.c:333 eelf32ppcvxworks.c:307 +#: eelf32ppcwindiss.c:333 eelf32rl78.c:112 eelf32rx.c:128 eelf32rx_linux.c:125 #: eelf32tilegx.c:113 eelf32tilegx_be.c:113 eelf32tilepro.c:113 #: eelf32vax.c:112 eelf32visium.c:112 eelf32xstormy16.c:123 #: eelf32xtensa.c:2009 eelf32z80.c:139 eelf64_aix.c:112 eelf64_ia64.c:138 #: eelf64_ia64_fbsd.c:138 eelf64_ia64_vms.c:220 eelf64_s390.c:128 #: eelf64_sparc.c:113 eelf64_sparc_fbsd.c:113 eelf64_sparc_sol2.c:245 #: eelf64alpha.c:196 eelf64alpha_fbsd.c:196 eelf64alpha_nbsd.c:196 -#: eelf64bmip.c:323 eelf64bpf.c:112 eelf64briscv.c:92 eelf64briscv_lp64.c:92 -#: eelf64briscv_lp64f.c:92 eelf64btsmip.c:309 eelf64btsmip_fbsd.c:309 -#: eelf64hppa.c:112 eelf64loongarch.c:91 eelf64lppc.c:594 -#: eelf64lppc_fbsd.c:594 eelf64lriscv.c:92 eelf64lriscv_lp64.c:92 -#: eelf64lriscv_lp64f.c:92 eelf64ltsmip.c:309 eelf64ltsmip_fbsd.c:309 +#: eelf64bmip.c:323 eelf64bpf.c:112 eelf64briscv.c:91 eelf64briscv_lp64.c:91 +#: eelf64briscv_lp64f.c:91 eelf64btsmip.c:309 eelf64btsmip_fbsd.c:309 +#: eelf64hppa.c:112 eelf64loongarch.c:90 eelf64lppc.c:594 +#: eelf64lppc_fbsd.c:594 eelf64lriscv.c:91 eelf64lriscv_lp64.c:91 +#: eelf64lriscv_lp64f.c:91 eelf64ltsmip.c:309 eelf64ltsmip_fbsd.c:309 #: eelf64mmix.c:223 eelf64ppc.c:594 eelf64ppc_fbsd.c:594 eelf64rdos.c:128 #: eelf64tilegx.c:113 eelf64tilegx_be.c:113 eelf_i386.c:137 eelf_i386_be.c:136 #: eelf_i386_fbsd.c:137 eelf_i386_haiku.c:137 eelf_i386_ldso.c:137 @@ -3554,14 +3467,14 @@ msgstr "" #: eaarch64elf32.c:287 eaarch64elf32b.c:287 eaarch64elfb.c:287 #: eaarch64fbsd.c:288 eaarch64fbsdb.c:288 eaarch64haiku.c:288 #: eaarch64linux.c:288 eaarch64linux32.c:288 eaarch64linux32b.c:288 -#: eaarch64linuxb.c:288 eaarch64nto.c:288 earmelf.c:425 earmelf_fbsd.c:425 -#: earmelf_fuchsia.c:426 earmelf_haiku.c:426 earmelf_linux.c:426 -#: earmelf_linux_eabi.c:426 earmelf_linux_fdpiceabi.c:426 earmelf_nacl.c:426 -#: earmelf_nbsd.c:425 earmelf_phoenix.c:426 earmelf_vxworks.c:425 -#: earmelfb.c:425 earmelfb_fbsd.c:425 earmelfb_fuchsia.c:426 -#: earmelfb_linux.c:426 earmelfb_linux_eabi.c:426 -#: earmelfb_linux_fdpiceabi.c:426 earmelfb_nacl.c:426 earmelfb_nbsd.c:425 -#: earmnto.c:425 ecskyelf.c:262 ecskyelf_linux.c:262 +#: eaarch64linuxb.c:288 earmelf.c:425 earmelf_fbsd.c:425 earmelf_fuchsia.c:426 +#: earmelf_haiku.c:426 earmelf_linux.c:426 earmelf_linux_eabi.c:426 +#: earmelf_linux_fdpiceabi.c:426 earmelf_nacl.c:426 earmelf_nbsd.c:425 +#: earmelf_phoenix.c:426 earmelf_vxworks.c:425 earmelfb.c:425 +#: earmelfb_fbsd.c:425 earmelfb_fuchsia.c:426 earmelfb_linux.c:426 +#: earmelfb_linux_eabi.c:426 earmelfb_linux_fdpiceabi.c:426 +#: earmelfb_nacl.c:426 earmelfb_nbsd.c:425 earmnto.c:425 ecskyelf.c:262 +#: ecskyelf_linux.c:262 msgid "%X%P: could not compute sections lists for stub generation: %E\n" msgstr "" @@ -3569,31 +3482,30 @@ msgstr "" #: eaarch64elf32.c:302 eaarch64elf32b.c:302 eaarch64elfb.c:302 #: eaarch64fbsd.c:303 eaarch64fbsdb.c:303 eaarch64haiku.c:303 #: eaarch64linux.c:303 eaarch64linux32.c:303 eaarch64linux32b.c:303 -#: eaarch64linuxb.c:303 eaarch64nto.c:303 earmelf.c:440 earmelf_fbsd.c:440 -#: earmelf_fuchsia.c:441 earmelf_haiku.c:441 earmelf_linux.c:441 -#: earmelf_linux_eabi.c:441 earmelf_linux_fdpiceabi.c:441 earmelf_nacl.c:441 -#: earmelf_nbsd.c:440 earmelf_phoenix.c:441 earmelf_vxworks.c:440 -#: earmelfb.c:440 earmelfb_fbsd.c:440 earmelfb_fuchsia.c:441 -#: earmelfb_linux.c:441 earmelfb_linux_eabi.c:441 -#: earmelfb_linux_fdpiceabi.c:441 earmelfb_nacl.c:441 earmelfb_nbsd.c:440 -#: earmnto.c:440 eavr1.c:131 eavr1.c:195 eavr2.c:131 eavr2.c:195 eavr25.c:131 -#: eavr25.c:195 eavr3.c:131 eavr3.c:195 eavr31.c:131 eavr31.c:195 eavr35.c:131 -#: eavr35.c:195 eavr4.c:131 eavr4.c:195 eavr5.c:131 eavr5.c:195 eavr51.c:131 -#: eavr51.c:195 eavr6.c:131 eavr6.c:195 eavrtiny.c:131 eavrtiny.c:195 -#: eavrxmega1.c:131 eavrxmega1.c:195 eavrxmega2.c:131 eavrxmega2.c:195 -#: eavrxmega3.c:131 eavrxmega3.c:195 eavrxmega4.c:131 eavrxmega4.c:195 -#: eavrxmega5.c:131 eavrxmega5.c:195 eavrxmega6.c:131 eavrxmega6.c:195 -#: eavrxmega7.c:131 eavrxmega7.c:195 eelf32metag.c:273 eelf32metag.c:287 -#: eelf64lppc.c:537 eelf64lppc.c:556 eelf64lppc.c:583 eelf64lppc_fbsd.c:537 -#: eelf64lppc_fbsd.c:556 eelf64lppc_fbsd.c:583 eelf64ppc.c:537 eelf64ppc.c:556 -#: eelf64ppc.c:583 eelf64ppc_fbsd.c:537 eelf64ppc_fbsd.c:556 -#: eelf64ppc_fbsd.c:583 ehppaelf.c:297 ehppaelf.c:312 ehppalinux.c:297 -#: ehppalinux.c:312 ehppanbsd.c:297 ehppanbsd.c:312 ehppaobsd.c:297 -#: ehppaobsd.c:312 em68hc11elf.c:92 em68hc11elf.c:102 em68hc11elf.c:319 -#: em68hc11elfb.c:92 em68hc11elfb.c:102 em68hc11elfb.c:319 em68hc12elf.c:92 -#: em68hc12elf.c:102 em68hc12elf.c:319 em68hc12elfb.c:92 em68hc12elfb.c:102 -#: em68hc12elfb.c:319 enios2elf.c:292 enios2elf.c:305 enios2linux.c:292 -#: enios2linux.c:305 +#: eaarch64linuxb.c:303 earmelf.c:440 earmelf_fbsd.c:440 earmelf_fuchsia.c:441 +#: earmelf_haiku.c:441 earmelf_linux.c:441 earmelf_linux_eabi.c:441 +#: earmelf_linux_fdpiceabi.c:441 earmelf_nacl.c:441 earmelf_nbsd.c:440 +#: earmelf_phoenix.c:441 earmelf_vxworks.c:440 earmelfb.c:440 +#: earmelfb_fbsd.c:440 earmelfb_fuchsia.c:441 earmelfb_linux.c:441 +#: earmelfb_linux_eabi.c:441 earmelfb_linux_fdpiceabi.c:441 +#: earmelfb_nacl.c:441 earmelfb_nbsd.c:440 earmnto.c:440 eavr1.c:131 +#: eavr1.c:195 eavr2.c:131 eavr2.c:195 eavr25.c:131 eavr25.c:195 eavr3.c:131 +#: eavr3.c:195 eavr31.c:131 eavr31.c:195 eavr35.c:131 eavr35.c:195 eavr4.c:131 +#: eavr4.c:195 eavr5.c:131 eavr5.c:195 eavr51.c:131 eavr51.c:195 eavr6.c:131 +#: eavr6.c:195 eavrtiny.c:131 eavrtiny.c:195 eavrxmega1.c:131 eavrxmega1.c:195 +#: eavrxmega2.c:131 eavrxmega2.c:195 eavrxmega3.c:131 eavrxmega3.c:195 +#: eavrxmega4.c:131 eavrxmega4.c:195 eavrxmega5.c:131 eavrxmega5.c:195 +#: eavrxmega6.c:131 eavrxmega6.c:195 eavrxmega7.c:131 eavrxmega7.c:195 +#: eelf32metag.c:273 eelf32metag.c:287 eelf64lppc.c:537 eelf64lppc.c:556 +#: eelf64lppc.c:583 eelf64lppc_fbsd.c:537 eelf64lppc_fbsd.c:556 +#: eelf64lppc_fbsd.c:583 eelf64ppc.c:537 eelf64ppc.c:556 eelf64ppc.c:583 +#: eelf64ppc_fbsd.c:537 eelf64ppc_fbsd.c:556 eelf64ppc_fbsd.c:583 +#: ehppaelf.c:297 ehppaelf.c:312 ehppalinux.c:297 ehppalinux.c:312 +#: ehppanbsd.c:297 ehppanbsd.c:312 ehppaobsd.c:297 ehppaobsd.c:312 +#: em68hc11elf.c:92 em68hc11elf.c:102 em68hc11elf.c:319 em68hc11elfb.c:92 +#: em68hc11elfb.c:102 em68hc11elfb.c:319 em68hc12elf.c:92 em68hc12elf.c:102 +#: em68hc12elf.c:319 em68hc12elfb.c:92 em68hc12elfb.c:102 em68hc12elfb.c:319 +#: enios2elf.c:292 enios2elf.c:305 enios2linux.c:292 enios2linux.c:305 msgid "%X%P: can not size stub section: %E\n" msgstr "" @@ -3601,22 +3513,22 @@ msgstr "" #: eaarch64elf32.c:321 eaarch64elf32b.c:321 eaarch64elfb.c:321 #: eaarch64fbsd.c:322 eaarch64fbsdb.c:322 eaarch64haiku.c:322 #: eaarch64linux.c:322 eaarch64linux32.c:322 eaarch64linux32b.c:322 -#: eaarch64linuxb.c:322 eaarch64nto.c:322 eaix5ppc.c:1165 eaix5rs6.c:1165 -#: eaixppc.c:1165 eaixrs6.c:1165 earmelf.c:474 earmelf_fbsd.c:474 -#: earmelf_fuchsia.c:475 earmelf_haiku.c:475 earmelf_linux.c:475 -#: earmelf_linux_eabi.c:475 earmelf_linux_fdpiceabi.c:475 earmelf_nacl.c:475 -#: earmelf_nbsd.c:474 earmelf_phoenix.c:475 earmelf_vxworks.c:474 -#: earmelfb.c:474 earmelfb_fbsd.c:474 earmelfb_fuchsia.c:475 -#: earmelfb_linux.c:475 earmelfb_linux_eabi.c:475 -#: earmelfb_linux_fdpiceabi.c:475 earmelfb_nacl.c:475 earmelfb_nbsd.c:474 -#: earmnto.c:474 eavr1.c:204 eavr2.c:204 eavr25.c:204 eavr3.c:204 eavr31.c:204 -#: eavr35.c:204 eavr4.c:204 eavr5.c:204 eavr51.c:204 eavr6.c:204 -#: eavrtiny.c:204 eavrxmega1.c:204 eavrxmega2.c:204 eavrxmega3.c:204 -#: eavrxmega4.c:204 eavrxmega5.c:204 eavrxmega6.c:204 eavrxmega7.c:204 -#: eelf32metag.c:302 eelf64lppc.c:633 eelf64lppc_fbsd.c:633 eelf64ppc.c:633 -#: eelf64ppc_fbsd.c:633 ehppaelf.c:334 ehppalinux.c:334 ehppanbsd.c:334 -#: ehppaobsd.c:334 em68hc11elf.c:323 em68hc11elfb.c:323 em68hc12elf.c:323 -#: em68hc12elfb.c:323 enios2elf.c:320 enios2linux.c:320 eppcmacos.c:1165 +#: eaarch64linuxb.c:322 eaix5ppc.c:1165 eaix5rs6.c:1165 eaixppc.c:1165 +#: eaixrs6.c:1165 earmelf.c:474 earmelf_fbsd.c:474 earmelf_fuchsia.c:475 +#: earmelf_haiku.c:475 earmelf_linux.c:475 earmelf_linux_eabi.c:475 +#: earmelf_linux_fdpiceabi.c:475 earmelf_nacl.c:475 earmelf_nbsd.c:474 +#: earmelf_phoenix.c:475 earmelf_vxworks.c:474 earmelfb.c:474 +#: earmelfb_fbsd.c:474 earmelfb_fuchsia.c:475 earmelfb_linux.c:475 +#: earmelfb_linux_eabi.c:475 earmelfb_linux_fdpiceabi.c:475 +#: earmelfb_nacl.c:475 earmelfb_nbsd.c:474 earmnto.c:474 eavr1.c:204 +#: eavr2.c:204 eavr25.c:204 eavr3.c:204 eavr31.c:204 eavr35.c:204 eavr4.c:204 +#: eavr5.c:204 eavr51.c:204 eavr6.c:204 eavrtiny.c:204 eavrxmega1.c:204 +#: eavrxmega2.c:204 eavrxmega3.c:204 eavrxmega4.c:204 eavrxmega5.c:204 +#: eavrxmega6.c:204 eavrxmega7.c:204 eelf32metag.c:302 eelf64lppc.c:633 +#: eelf64lppc_fbsd.c:633 eelf64ppc.c:633 eelf64ppc_fbsd.c:633 ehppaelf.c:334 +#: ehppalinux.c:334 ehppanbsd.c:334 ehppaobsd.c:334 em68hc11elf.c:323 +#: em68hc11elfb.c:323 em68hc12elf.c:323 em68hc12elfb.c:323 enios2elf.c:320 +#: enios2linux.c:320 eppcmacos.c:1165 msgid "%X%P: can not build stubs: %E\n" msgstr "" @@ -3649,25 +3561,25 @@ msgstr "" #: eaarch64elf32.c:339 eaarch64elf32b.c:339 eaarch64elfb.c:339 #: eaarch64fbsd.c:340 eaarch64fbsdb.c:340 eaarch64haiku.c:340 #: eaarch64linux.c:340 eaarch64linux32.c:340 eaarch64linux32b.c:340 -#: eaarch64linuxb.c:340 eaarch64nto.c:340 earm_wince_pe.c:1601 earmelf.c:543 -#: earmelf_fbsd.c:543 earmelf_fuchsia.c:544 earmelf_haiku.c:544 -#: earmelf_linux.c:544 earmelf_linux_eabi.c:544 earmelf_linux_fdpiceabi.c:544 -#: earmelf_nacl.c:544 earmelf_nbsd.c:543 earmelf_phoenix.c:544 -#: earmelf_vxworks.c:543 earmelfb.c:543 earmelfb_fbsd.c:543 -#: earmelfb_fuchsia.c:544 earmelfb_linux.c:544 earmelfb_linux_eabi.c:544 +#: eaarch64linuxb.c:340 earm_wince_pe.c:1515 earmelf.c:543 earmelf_fbsd.c:543 +#: earmelf_fuchsia.c:544 earmelf_haiku.c:544 earmelf_linux.c:544 +#: earmelf_linux_eabi.c:544 earmelf_linux_fdpiceabi.c:544 earmelf_nacl.c:544 +#: earmelf_nbsd.c:543 earmelf_phoenix.c:544 earmelf_vxworks.c:543 +#: earmelfb.c:543 earmelfb_fbsd.c:543 earmelfb_fuchsia.c:544 +#: earmelfb_linux.c:544 earmelfb_linux_eabi.c:544 #: earmelfb_linux_fdpiceabi.c:544 earmelfb_nacl.c:544 earmelfb_nbsd.c:543 -#: earmnto.c:543 earmpe.c:1601 eavr1.c:144 eavr2.c:144 eavr25.c:144 +#: earmnto.c:543 earmpe.c:1515 eavr1.c:144 eavr2.c:144 eavr25.c:144 #: eavr3.c:144 eavr31.c:144 eavr35.c:144 eavr4.c:144 eavr5.c:144 eavr51.c:144 #: eavr6.c:144 eavrtiny.c:144 eavrxmega1.c:144 eavrxmega2.c:144 #: eavrxmega3.c:144 eavrxmega4.c:144 eavrxmega5.c:144 eavrxmega6.c:144 -#: eavrxmega7.c:144 eelf32briscv.c:127 eelf32briscv_ilp32.c:127 -#: eelf32briscv_ilp32f.c:127 eelf32loongarch.c:111 eelf32lriscv.c:127 -#: eelf32lriscv_ilp32.c:127 eelf32lriscv_ilp32f.c:127 eelf64briscv.c:127 -#: eelf64briscv_lp64.c:127 eelf64briscv_lp64f.c:127 eelf64loongarch.c:111 -#: eelf64lriscv.c:127 eelf64lriscv_lp64.c:127 eelf64lriscv_lp64f.c:127 -#: ei386pe.c:1601 ei386pe_posix.c:1601 emcorepe.c:1601 ends32belf.c:76 +#: eavrxmega7.c:144 eelf32briscv.c:126 eelf32briscv_ilp32.c:126 +#: eelf32briscv_ilp32f.c:126 eelf32loongarch.c:108 eelf32lriscv.c:126 +#: eelf32lriscv_ilp32.c:126 eelf32lriscv_ilp32f.c:126 eelf64briscv.c:126 +#: eelf64briscv_lp64.c:126 eelf64briscv_lp64f.c:126 eelf64loongarch.c:108 +#: eelf64lriscv.c:126 eelf64lriscv_lp64.c:126 eelf64lriscv_lp64f.c:126 +#: ei386pe.c:1515 ei386pe_posix.c:1515 emcorepe.c:1515 ends32belf.c:76 #: ends32belf16m.c:76 ends32belf_linux.c:76 ends32elf.c:76 ends32elf16m.c:76 -#: ends32elf_linux.c:76 escore3_elf.c:81 escore7_elf.c:81 eshpe.c:1601 +#: ends32elf_linux.c:76 escore3_elf.c:81 escore7_elf.c:81 eshpe.c:1515 #: ev850.c:93 ev850_rh850.c:93 msgid "%F%P: error: cannot change output format whilst linking %s binaries\n" msgstr "" @@ -3676,13 +3588,13 @@ msgstr "" #: eaarch64elf32.c:591 eaarch64elf32b.c:591 eaarch64elfb.c:591 #: eaarch64fbsd.c:592 eaarch64fbsdb.c:592 eaarch64haiku.c:592 #: eaarch64linux.c:592 eaarch64linux32.c:592 eaarch64linux32b.c:592 -#: eaarch64linuxb.c:592 eaarch64nto.c:689 earcelf.c:223 earclinux.c:279 -#: earclinux_nps.c:279 earcv2elf.c:207 earcv2elfx.c:207 earmelf.c:831 -#: earmelf_fbsd.c:831 earmelf_fuchsia.c:832 earmelf_haiku.c:832 -#: earmelf_linux.c:832 earmelf_linux_eabi.c:832 earmelf_linux_fdpiceabi.c:832 -#: earmelf_nacl.c:832 earmelf_nbsd.c:831 earmelf_phoenix.c:832 -#: earmelf_vxworks.c:867 earmelfb.c:831 earmelfb_fbsd.c:831 -#: earmelfb_fuchsia.c:832 earmelfb_linux.c:832 earmelfb_linux_eabi.c:832 +#: eaarch64linuxb.c:592 earcelf.c:223 earclinux.c:279 earclinux_nps.c:279 +#: earcv2elf.c:207 earcv2elfx.c:207 earmelf.c:831 earmelf_fbsd.c:831 +#: earmelf_fuchsia.c:832 earmelf_haiku.c:832 earmelf_linux.c:832 +#: earmelf_linux_eabi.c:832 earmelf_linux_fdpiceabi.c:832 earmelf_nacl.c:832 +#: earmelf_nbsd.c:831 earmelf_phoenix.c:832 earmelf_vxworks.c:867 +#: earmelfb.c:831 earmelfb_fbsd.c:831 earmelfb_fuchsia.c:832 +#: earmelfb_linux.c:832 earmelfb_linux_eabi.c:832 #: earmelfb_linux_fdpiceabi.c:832 earmelfb_nacl.c:832 earmelfb_nbsd.c:831 #: earmnto.c:806 eavr1.c:431 eavr2.c:431 eavr25.c:431 eavr3.c:431 eavr31.c:431 #: eavr35.c:431 eavr4.c:431 eavr5.c:431 eavr51.c:431 eavr6.c:431 @@ -3690,41 +3602,41 @@ msgstr "" #: eavrxmega4.c:431 eavrxmega5.c:431 eavrxmega6.c:431 eavrxmega7.c:431 #: ecriself.c:222 ecrislinux.c:254 ecskyelf.c:466 ecskyelf_linux.c:523 #: ed10velf.c:207 eelf32_sparc.c:279 eelf32_sparc_sol2.c:411 -#: eelf32_sparc_vxworks.c:316 eelf32_spu.c:804 eelf32_tic6x_be.c:390 +#: eelf32_sparc_vxworks.c:316 eelf32_spu.c:940 eelf32_tic6x_be.c:390 #: eelf32_tic6x_elf_be.c:390 eelf32_tic6x_elf_le.c:390 eelf32_tic6x_le.c:390 #: eelf32_tic6x_linux_be.c:390 eelf32_tic6x_linux_le.c:390 #: eelf32_x86_64.c:5414 eelf32am33lin.c:253 eelf32b4300.c:494 eelf32bfin.c:271 -#: eelf32bfinfd.c:296 eelf32bmip.c:494 eelf32bmipn32.c:508 eelf32briscv.c:361 -#: eelf32briscv_ilp32.c:361 eelf32briscv_ilp32f.c:361 eelf32bsmip.c:508 +#: eelf32bfinfd.c:296 eelf32bmip.c:494 eelf32bmipn32.c:508 eelf32briscv.c:347 +#: eelf32briscv_ilp32.c:347 eelf32briscv_ilp32f.c:347 eelf32bsmip.c:508 #: eelf32btsmip.c:494 eelf32btsmip_fbsd.c:494 eelf32btsmipn32.c:494 #: eelf32btsmipn32_fbsd.c:494 eelf32cr16.c:357 eelf32crx.c:244 #: eelf32ebmip.c:494 eelf32ebmipvxworks.c:529 eelf32elmip.c:494 #: eelf32elmipvxworks.c:529 eelf32epiphany.c:222 eelf32epiphany_4x4.c:209 #: eelf32frvfd.c:278 eelf32ip2k.c:222 eelf32l4300.c:494 eelf32lm32.c:222 -#: eelf32lm32fd.c:278 eelf32lmip.c:494 eelf32loongarch.c:332 eelf32lppc.c:530 -#: eelf32lppclinux.c:530 eelf32lppcnto.c:530 eelf32lppcsim.c:530 -#: eelf32lr5900.c:463 eelf32lr5900n32.c:462 eelf32lriscv.c:361 -#: eelf32lriscv_ilp32.c:361 eelf32lriscv_ilp32f.c:361 eelf32lsmip.c:494 +#: eelf32lm32fd.c:278 eelf32lmip.c:494 eelf32loongarch.c:329 eelf32lppc.c:542 +#: eelf32lppclinux.c:542 eelf32lppcnto.c:542 eelf32lppcsim.c:542 +#: eelf32lr5900.c:463 eelf32lr5900n32.c:462 eelf32lriscv.c:347 +#: eelf32lriscv_ilp32.c:347 eelf32lriscv_ilp32f.c:347 eelf32lsmip.c:494 #: eelf32ltsmip.c:494 eelf32ltsmip_fbsd.c:494 eelf32ltsmipn32.c:494 #: eelf32ltsmipn32_fbsd.c:494 eelf32m32c.c:233 eelf32mb_linux.c:279 #: eelf32mbel_linux.c:279 eelf32mcore.c:228 eelf32mep.c:207 eelf32metag.c:528 #: eelf32microblaze.c:207 eelf32microblazeel.c:207 eelf32mipswindiss.c:437 -#: eelf32moxie.c:222 eelf32or1k.c:223 eelf32or1k_linux.c:279 eelf32ppc.c:530 -#: eelf32ppc_fbsd.c:530 eelf32ppchaiku.c:530 eelf32ppclinux.c:530 -#: eelf32ppcnto.c:530 eelf32ppcsim.c:530 eelf32ppcvxworks.c:504 -#: eelf32ppcwindiss.c:530 eelf32rl78.c:222 eelf32rx.c:250 eelf32rx_linux.c:235 +#: eelf32moxie.c:222 eelf32or1k.c:223 eelf32or1k_linux.c:279 eelf32ppc.c:542 +#: eelf32ppc_fbsd.c:542 eelf32ppchaiku.c:542 eelf32ppclinux.c:542 +#: eelf32ppcnto.c:542 eelf32ppcsim.c:542 eelf32ppcvxworks.c:516 +#: eelf32ppcwindiss.c:542 eelf32rl78.c:222 eelf32rx.c:250 eelf32rx_linux.c:235 #: eelf32tilegx.c:279 eelf32tilegx_be.c:279 eelf32tilepro.c:279 #: eelf32vax.c:253 eelf32visium.c:207 eelf32xstormy16.c:218 #: eelf32xtensa.c:2192 eelf32z80.c:234 eelf64_aix.c:253 eelf64_ia64.c:310 #: eelf64_ia64_fbsd.c:310 eelf64_s390.c:349 eelf64_sparc.c:279 #: eelf64_sparc_fbsd.c:279 eelf64_sparc_sol2.c:411 eelf64alpha.c:372 #: eelf64alpha_fbsd.c:372 eelf64alpha_nbsd.c:372 eelf64bmip.c:508 -#: eelf64bpf.c:207 eelf64briscv.c:361 eelf64briscv_lp64.c:361 -#: eelf64briscv_lp64f.c:361 eelf64btsmip.c:494 eelf64btsmip_fbsd.c:494 -#: eelf64hppa.c:223 eelf64loongarch.c:332 eelf64lppc.c:980 -#: eelf64lppc_fbsd.c:980 eelf64lriscv.c:361 eelf64lriscv_lp64.c:361 -#: eelf64lriscv_lp64f.c:361 eelf64ltsmip.c:494 eelf64ltsmip_fbsd.c:494 -#: eelf64mmix.c:364 eelf64ppc.c:980 eelf64ppc_fbsd.c:980 eelf64rdos.c:304 +#: eelf64bpf.c:207 eelf64briscv.c:347 eelf64briscv_lp64.c:347 +#: eelf64briscv_lp64f.c:347 eelf64btsmip.c:494 eelf64btsmip_fbsd.c:494 +#: eelf64hppa.c:223 eelf64loongarch.c:329 eelf64lppc.c:991 +#: eelf64lppc_fbsd.c:991 eelf64lriscv.c:347 eelf64lriscv_lp64.c:347 +#: eelf64lriscv_lp64f.c:347 eelf64ltsmip.c:494 eelf64ltsmip_fbsd.c:494 +#: eelf64mmix.c:364 eelf64ppc.c:991 eelf64ppc_fbsd.c:991 eelf64rdos.c:304 #: eelf64tilegx.c:279 eelf64tilegx_be.c:279 eelf_i386.c:5036 #: eelf_i386_be.c:277 eelf_i386_fbsd.c:313 eelf_i386_haiku.c:313 #: eelf_i386_ldso.c:288 eelf_i386_sol2.c:445 eelf_i386_vxworks.c:340 @@ -3754,13 +3666,13 @@ msgstr "" #: eaarch64elf32.c:596 eaarch64elf32b.c:596 eaarch64elfb.c:596 #: eaarch64fbsd.c:597 eaarch64fbsdb.c:597 eaarch64haiku.c:597 #: eaarch64linux.c:597 eaarch64linux32.c:597 eaarch64linux32b.c:597 -#: eaarch64linuxb.c:597 eaarch64nto.c:694 earcelf.c:228 earclinux.c:284 -#: earclinux_nps.c:284 earcv2elf.c:212 earcv2elfx.c:212 earmelf.c:836 -#: earmelf_fbsd.c:836 earmelf_fuchsia.c:837 earmelf_haiku.c:837 -#: earmelf_linux.c:837 earmelf_linux_eabi.c:837 earmelf_linux_fdpiceabi.c:837 -#: earmelf_nacl.c:837 earmelf_nbsd.c:836 earmelf_phoenix.c:837 -#: earmelf_vxworks.c:872 earmelfb.c:836 earmelfb_fbsd.c:836 -#: earmelfb_fuchsia.c:837 earmelfb_linux.c:837 earmelfb_linux_eabi.c:837 +#: eaarch64linuxb.c:597 earcelf.c:228 earclinux.c:284 earclinux_nps.c:284 +#: earcv2elf.c:212 earcv2elfx.c:212 earmelf.c:836 earmelf_fbsd.c:836 +#: earmelf_fuchsia.c:837 earmelf_haiku.c:837 earmelf_linux.c:837 +#: earmelf_linux_eabi.c:837 earmelf_linux_fdpiceabi.c:837 earmelf_nacl.c:837 +#: earmelf_nbsd.c:836 earmelf_phoenix.c:837 earmelf_vxworks.c:872 +#: earmelfb.c:836 earmelfb_fbsd.c:836 earmelfb_fuchsia.c:837 +#: earmelfb_linux.c:837 earmelfb_linux_eabi.c:837 #: earmelfb_linux_fdpiceabi.c:837 earmelfb_nacl.c:837 earmelfb_nbsd.c:836 #: earmnto.c:811 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 @@ -3768,41 +3680,41 @@ msgstr "" #: eavrxmega4.c:436 eavrxmega5.c:436 eavrxmega6.c:436 eavrxmega7.c:436 #: ecriself.c:227 ecrislinux.c:259 ecskyelf.c:471 ecskyelf_linux.c:528 #: ed10velf.c:212 eelf32_sparc.c:284 eelf32_sparc_sol2.c:416 -#: eelf32_sparc_vxworks.c:321 eelf32_spu.c:809 eelf32_tic6x_be.c:395 +#: eelf32_sparc_vxworks.c:321 eelf32_spu.c:945 eelf32_tic6x_be.c:395 #: eelf32_tic6x_elf_be.c:395 eelf32_tic6x_elf_le.c:395 eelf32_tic6x_le.c:395 #: eelf32_tic6x_linux_be.c:395 eelf32_tic6x_linux_le.c:395 #: eelf32_x86_64.c:5419 eelf32am33lin.c:258 eelf32b4300.c:499 eelf32bfin.c:276 -#: eelf32bfinfd.c:301 eelf32bmip.c:499 eelf32bmipn32.c:513 eelf32briscv.c:366 -#: eelf32briscv_ilp32.c:366 eelf32briscv_ilp32f.c:366 eelf32bsmip.c:513 +#: eelf32bfinfd.c:301 eelf32bmip.c:499 eelf32bmipn32.c:513 eelf32briscv.c:352 +#: eelf32briscv_ilp32.c:352 eelf32briscv_ilp32f.c:352 eelf32bsmip.c:513 #: eelf32btsmip.c:499 eelf32btsmip_fbsd.c:499 eelf32btsmipn32.c:499 #: eelf32btsmipn32_fbsd.c:499 eelf32cr16.c:362 eelf32crx.c:249 #: eelf32ebmip.c:499 eelf32ebmipvxworks.c:534 eelf32elmip.c:499 #: eelf32elmipvxworks.c:534 eelf32epiphany.c:227 eelf32epiphany_4x4.c:214 #: eelf32frvfd.c:283 eelf32ip2k.c:227 eelf32l4300.c:499 eelf32lm32.c:227 -#: eelf32lm32fd.c:283 eelf32lmip.c:499 eelf32loongarch.c:337 eelf32lppc.c:535 -#: eelf32lppclinux.c:535 eelf32lppcnto.c:535 eelf32lppcsim.c:535 -#: eelf32lr5900.c:468 eelf32lr5900n32.c:467 eelf32lriscv.c:366 -#: eelf32lriscv_ilp32.c:366 eelf32lriscv_ilp32f.c:366 eelf32lsmip.c:499 +#: eelf32lm32fd.c:283 eelf32lmip.c:499 eelf32loongarch.c:334 eelf32lppc.c:547 +#: eelf32lppclinux.c:547 eelf32lppcnto.c:547 eelf32lppcsim.c:547 +#: eelf32lr5900.c:468 eelf32lr5900n32.c:467 eelf32lriscv.c:352 +#: eelf32lriscv_ilp32.c:352 eelf32lriscv_ilp32f.c:352 eelf32lsmip.c:499 #: eelf32ltsmip.c:499 eelf32ltsmip_fbsd.c:499 eelf32ltsmipn32.c:499 #: eelf32ltsmipn32_fbsd.c:499 eelf32m32c.c:238 eelf32mb_linux.c:284 #: eelf32mbel_linux.c:284 eelf32mcore.c:233 eelf32mep.c:212 eelf32metag.c:533 #: eelf32microblaze.c:212 eelf32microblazeel.c:212 eelf32mipswindiss.c:442 -#: eelf32moxie.c:227 eelf32or1k.c:228 eelf32or1k_linux.c:284 eelf32ppc.c:535 -#: eelf32ppc_fbsd.c:535 eelf32ppchaiku.c:535 eelf32ppclinux.c:535 -#: eelf32ppcnto.c:535 eelf32ppcsim.c:535 eelf32ppcvxworks.c:509 -#: eelf32ppcwindiss.c:535 eelf32rl78.c:227 eelf32rx.c:255 eelf32rx_linux.c:240 +#: eelf32moxie.c:227 eelf32or1k.c:228 eelf32or1k_linux.c:284 eelf32ppc.c:547 +#: eelf32ppc_fbsd.c:547 eelf32ppchaiku.c:547 eelf32ppclinux.c:547 +#: eelf32ppcnto.c:547 eelf32ppcsim.c:547 eelf32ppcvxworks.c:521 +#: eelf32ppcwindiss.c:547 eelf32rl78.c:227 eelf32rx.c:255 eelf32rx_linux.c:240 #: eelf32tilegx.c:284 eelf32tilegx_be.c:284 eelf32tilepro.c:284 #: eelf32vax.c:258 eelf32visium.c:212 eelf32xstormy16.c:223 #: eelf32xtensa.c:2197 eelf32z80.c:239 eelf64_aix.c:258 eelf64_ia64.c:315 #: eelf64_ia64_fbsd.c:315 eelf64_s390.c:354 eelf64_sparc.c:284 #: eelf64_sparc_fbsd.c:284 eelf64_sparc_sol2.c:416 eelf64alpha.c:377 #: eelf64alpha_fbsd.c:377 eelf64alpha_nbsd.c:377 eelf64bmip.c:513 -#: eelf64bpf.c:212 eelf64briscv.c:366 eelf64briscv_lp64.c:366 -#: eelf64briscv_lp64f.c:366 eelf64btsmip.c:499 eelf64btsmip_fbsd.c:499 -#: eelf64hppa.c:228 eelf64loongarch.c:337 eelf64lppc.c:985 -#: eelf64lppc_fbsd.c:985 eelf64lriscv.c:366 eelf64lriscv_lp64.c:366 -#: eelf64lriscv_lp64f.c:366 eelf64ltsmip.c:499 eelf64ltsmip_fbsd.c:499 -#: eelf64mmix.c:369 eelf64ppc.c:985 eelf64ppc_fbsd.c:985 eelf64rdos.c:309 +#: eelf64bpf.c:212 eelf64briscv.c:352 eelf64briscv_lp64.c:352 +#: eelf64briscv_lp64f.c:352 eelf64btsmip.c:499 eelf64btsmip_fbsd.c:499 +#: eelf64hppa.c:228 eelf64loongarch.c:334 eelf64lppc.c:996 +#: eelf64lppc_fbsd.c:996 eelf64lriscv.c:352 eelf64lriscv_lp64.c:352 +#: eelf64lriscv_lp64f.c:352 eelf64ltsmip.c:499 eelf64ltsmip_fbsd.c:499 +#: eelf64mmix.c:369 eelf64ppc.c:996 eelf64ppc_fbsd.c:996 eelf64rdos.c:309 #: eelf64tilegx.c:284 eelf64tilegx_be.c:284 eelf_i386.c:5041 #: eelf_i386_be.c:282 eelf_i386_fbsd.c:318 eelf_i386_haiku.c:318 #: eelf_i386_ldso.c:293 eelf_i386_sol2.c:450 eelf_i386_vxworks.c:345 @@ -3831,44 +3743,43 @@ msgstr "" #: 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 eaarch64nto.c:745 earcelf.c:279 earclinux.c:335 -#: earclinux_nps.c:335 earmelf.c:887 earmelf_fbsd.c:887 earmelf_fuchsia.c:888 -#: earmelf_haiku.c:888 earmelf_linux.c:888 earmelf_linux_eabi.c:888 -#: earmelf_linux_fdpiceabi.c:888 earmelf_nacl.c:888 earmelf_nbsd.c:887 -#: earmelf_phoenix.c:888 earmelf_vxworks.c:923 earmelfb.c:887 -#: earmelfb_fbsd.c:887 earmelfb_fuchsia.c:888 earmelfb_linux.c:888 -#: earmelfb_linux_eabi.c:888 earmelfb_linux_fdpiceabi.c:888 -#: earmelfb_nacl.c:888 earmelfb_nbsd.c:887 earmnto.c:862 ecrislinux.c:310 -#: ecskyelf_linux.c:579 eelf32_sparc.c:335 eelf32_sparc_sol2.c:467 -#: eelf32_sparc_vxworks.c:372 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:5470 eelf32am33lin.c:309 -#: eelf32b4300.c:550 eelf32bfin.c:327 eelf32bfinfd.c:352 eelf32bmip.c:550 -#: eelf32bmipn32.c:564 eelf32briscv.c:417 eelf32briscv_ilp32.c:417 -#: eelf32briscv_ilp32f.c:417 eelf32bsmip.c:564 eelf32btsmip.c:550 -#: eelf32btsmip_fbsd.c:550 eelf32btsmipn32.c:550 eelf32btsmipn32_fbsd.c:550 -#: eelf32ebmip.c:550 eelf32ebmipvxworks.c:585 eelf32elmip.c:550 -#: eelf32elmipvxworks.c:585 eelf32frvfd.c:334 eelf32l4300.c:550 -#: eelf32lm32fd.c:334 eelf32lmip.c:550 eelf32loongarch.c:388 eelf32lppc.c:586 -#: eelf32lppclinux.c:586 eelf32lppcnto.c:586 eelf32lppcsim.c:586 -#: eelf32lriscv.c:417 eelf32lriscv_ilp32.c:417 eelf32lriscv_ilp32f.c:417 -#: eelf32lsmip.c:550 eelf32ltsmip.c:550 eelf32ltsmip_fbsd.c:550 -#: eelf32ltsmipn32.c:550 eelf32ltsmipn32_fbsd.c:550 eelf32mb_linux.c:335 -#: eelf32mbel_linux.c:335 eelf32metag.c:584 eelf32or1k_linux.c:335 -#: eelf32ppc.c:586 eelf32ppc_fbsd.c:586 eelf32ppchaiku.c:586 -#: eelf32ppclinux.c:586 eelf32ppcnto.c:586 eelf32ppcsim.c:586 -#: eelf32ppcvxworks.c:560 eelf32ppcwindiss.c:586 eelf32tilegx.c:335 -#: eelf32tilegx_be.c:335 eelf32tilepro.c:335 eelf32vax.c:309 -#: eelf32xtensa.c:2248 eelf64_aix.c:309 eelf64_ia64.c:366 +#: eaarch64linuxb.c:648 earcelf.c:279 earclinux.c:335 earclinux_nps.c:335 +#: earmelf.c:887 earmelf_fbsd.c:887 earmelf_fuchsia.c:888 earmelf_haiku.c:888 +#: earmelf_linux.c:888 earmelf_linux_eabi.c:888 earmelf_linux_fdpiceabi.c:888 +#: earmelf_nacl.c:888 earmelf_nbsd.c:887 earmelf_phoenix.c:888 +#: earmelf_vxworks.c:923 earmelfb.c:887 earmelfb_fbsd.c:887 +#: earmelfb_fuchsia.c:888 earmelfb_linux.c:888 earmelfb_linux_eabi.c:888 +#: earmelfb_linux_fdpiceabi.c:888 earmelfb_nacl.c:888 earmelfb_nbsd.c:887 +#: earmnto.c:862 ecrislinux.c:310 ecskyelf_linux.c:579 eelf32_sparc.c:335 +#: eelf32_sparc_sol2.c:467 eelf32_sparc_vxworks.c:372 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:5470 eelf32am33lin.c:309 eelf32b4300.c:550 eelf32bfin.c:327 +#: eelf32bfinfd.c:352 eelf32bmip.c:550 eelf32bmipn32.c:564 eelf32briscv.c:403 +#: eelf32briscv_ilp32.c:403 eelf32briscv_ilp32f.c:403 eelf32bsmip.c:564 +#: eelf32btsmip.c:550 eelf32btsmip_fbsd.c:550 eelf32btsmipn32.c:550 +#: eelf32btsmipn32_fbsd.c:550 eelf32ebmip.c:550 eelf32ebmipvxworks.c:585 +#: eelf32elmip.c:550 eelf32elmipvxworks.c:585 eelf32frvfd.c:334 +#: eelf32l4300.c:550 eelf32lm32fd.c:334 eelf32lmip.c:550 eelf32loongarch.c:385 +#: eelf32lppc.c:598 eelf32lppclinux.c:598 eelf32lppcnto.c:598 +#: eelf32lppcsim.c:598 eelf32lriscv.c:403 eelf32lriscv_ilp32.c:403 +#: eelf32lriscv_ilp32f.c:403 eelf32lsmip.c:550 eelf32ltsmip.c:550 +#: eelf32ltsmip_fbsd.c:550 eelf32ltsmipn32.c:550 eelf32ltsmipn32_fbsd.c:550 +#: eelf32mb_linux.c:335 eelf32mbel_linux.c:335 eelf32metag.c:584 +#: eelf32or1k_linux.c:335 eelf32ppc.c:598 eelf32ppc_fbsd.c:598 +#: eelf32ppchaiku.c:598 eelf32ppclinux.c:598 eelf32ppcnto.c:598 +#: eelf32ppcsim.c:598 eelf32ppcvxworks.c:572 eelf32ppcwindiss.c:598 +#: eelf32tilegx.c:335 eelf32tilegx_be.c:335 eelf32tilepro.c:335 +#: eelf32vax.c:309 eelf32xtensa.c:2248 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 -#: eelf64briscv.c:417 eelf64briscv_lp64.c:417 eelf64briscv_lp64f.c:417 +#: eelf64briscv.c:403 eelf64briscv_lp64.c:403 eelf64briscv_lp64f.c:403 #: eelf64btsmip.c:550 eelf64btsmip_fbsd.c:550 eelf64hppa.c:279 -#: eelf64loongarch.c:388 eelf64lppc.c:1036 eelf64lppc_fbsd.c:1036 -#: eelf64lriscv.c:417 eelf64lriscv_lp64.c:417 eelf64lriscv_lp64f.c:417 +#: eelf64loongarch.c:385 eelf64lppc.c:1047 eelf64lppc_fbsd.c:1047 +#: eelf64lriscv.c:403 eelf64lriscv_lp64.c:403 eelf64lriscv_lp64f.c:403 #: eelf64ltsmip.c:550 eelf64ltsmip_fbsd.c:550 eelf64mmix.c:420 -#: eelf64ppc.c:1036 eelf64ppc_fbsd.c:1036 eelf64rdos.c:360 eelf64tilegx.c:335 +#: eelf64ppc.c:1047 eelf64ppc_fbsd.c:1047 eelf64rdos.c:360 eelf64tilegx.c:335 #: eelf64tilegx_be.c:335 eelf_i386.c:5092 eelf_i386_be.c:333 #: eelf_i386_fbsd.c:369 eelf_i386_haiku.c:369 eelf_i386_ldso.c:344 #: eelf_i386_sol2.c:501 eelf_i386_vxworks.c:396 eelf_iamcu.c:369 @@ -3890,13 +3801,13 @@ msgstr "" #: eaarch64elf32.c:664 eaarch64elf32b.c:664 eaarch64elfb.c:664 #: eaarch64fbsd.c:665 eaarch64fbsdb.c:665 eaarch64haiku.c:665 #: eaarch64linux.c:665 eaarch64linux32.c:665 eaarch64linux32b.c:665 -#: eaarch64linuxb.c:665 eaarch64nto.c:762 earcelf.c:296 earclinux.c:352 -#: earclinux_nps.c:352 earcv2elf.c:229 earcv2elfx.c:229 earmelf.c:904 -#: earmelf_fbsd.c:904 earmelf_fuchsia.c:905 earmelf_haiku.c:905 -#: earmelf_linux.c:905 earmelf_linux_eabi.c:905 earmelf_linux_fdpiceabi.c:905 -#: earmelf_nacl.c:905 earmelf_nbsd.c:904 earmelf_phoenix.c:905 -#: earmelf_vxworks.c:940 earmelfb.c:904 earmelfb_fbsd.c:904 -#: earmelfb_fuchsia.c:905 earmelfb_linux.c:905 earmelfb_linux_eabi.c:905 +#: eaarch64linuxb.c:665 earcelf.c:296 earclinux.c:352 earclinux_nps.c:352 +#: earcv2elf.c:229 earcv2elfx.c:229 earmelf.c:904 earmelf_fbsd.c:904 +#: earmelf_fuchsia.c:905 earmelf_haiku.c:905 earmelf_linux.c:905 +#: earmelf_linux_eabi.c:905 earmelf_linux_fdpiceabi.c:905 earmelf_nacl.c:905 +#: earmelf_nbsd.c:904 earmelf_phoenix.c:905 earmelf_vxworks.c:940 +#: earmelfb.c:904 earmelfb_fbsd.c:904 earmelfb_fuchsia.c:905 +#: earmelfb_linux.c:905 earmelfb_linux_eabi.c:905 #: earmelfb_linux_fdpiceabi.c:905 earmelfb_nacl.c:905 earmelfb_nbsd.c:904 #: earmnto.c:879 eavr1.c:453 eavr2.c:453 eavr25.c:453 eavr3.c:453 eavr31.c:453 #: eavr35.c:453 eavr4.c:453 eavr5.c:453 eavr51.c:453 eavr6.c:453 @@ -3904,41 +3815,41 @@ msgstr "" #: eavrxmega4.c:453 eavrxmega5.c:453 eavrxmega6.c:453 eavrxmega7.c:453 #: ecriself.c:244 ecrislinux.c:327 ecskyelf.c:488 ecskyelf_linux.c:596 #: ed10velf.c:229 eelf32_sparc.c:352 eelf32_sparc_sol2.c:484 -#: eelf32_sparc_vxworks.c:389 eelf32_spu.c:826 eelf32_tic6x_be.c:463 +#: eelf32_sparc_vxworks.c:389 eelf32_spu.c:962 eelf32_tic6x_be.c:463 #: eelf32_tic6x_elf_be.c:463 eelf32_tic6x_elf_le.c:463 eelf32_tic6x_le.c:463 #: eelf32_tic6x_linux_be.c:463 eelf32_tic6x_linux_le.c:463 #: eelf32_x86_64.c:5487 eelf32am33lin.c:326 eelf32b4300.c:567 eelf32bfin.c:344 -#: eelf32bfinfd.c:369 eelf32bmip.c:567 eelf32bmipn32.c:581 eelf32briscv.c:434 -#: eelf32briscv_ilp32.c:434 eelf32briscv_ilp32f.c:434 eelf32bsmip.c:581 +#: eelf32bfinfd.c:369 eelf32bmip.c:567 eelf32bmipn32.c:581 eelf32briscv.c:420 +#: eelf32briscv_ilp32.c:420 eelf32briscv_ilp32f.c:420 eelf32bsmip.c:581 #: eelf32btsmip.c:567 eelf32btsmip_fbsd.c:567 eelf32btsmipn32.c:567 #: eelf32btsmipn32_fbsd.c:567 eelf32cr16.c:379 eelf32crx.c:266 #: eelf32ebmip.c:567 eelf32ebmipvxworks.c:602 eelf32elmip.c:567 #: eelf32elmipvxworks.c:602 eelf32epiphany.c:244 eelf32epiphany_4x4.c:231 #: eelf32frvfd.c:351 eelf32ip2k.c:244 eelf32l4300.c:567 eelf32lm32.c:244 -#: eelf32lm32fd.c:351 eelf32lmip.c:567 eelf32loongarch.c:405 eelf32lppc.c:603 -#: eelf32lppclinux.c:603 eelf32lppcnto.c:603 eelf32lppcsim.c:603 -#: eelf32lr5900.c:485 eelf32lr5900n32.c:484 eelf32lriscv.c:434 -#: eelf32lriscv_ilp32.c:434 eelf32lriscv_ilp32f.c:434 eelf32lsmip.c:567 +#: eelf32lm32fd.c:351 eelf32lmip.c:567 eelf32loongarch.c:402 eelf32lppc.c:615 +#: eelf32lppclinux.c:615 eelf32lppcnto.c:615 eelf32lppcsim.c:615 +#: eelf32lr5900.c:485 eelf32lr5900n32.c:484 eelf32lriscv.c:420 +#: eelf32lriscv_ilp32.c:420 eelf32lriscv_ilp32f.c:420 eelf32lsmip.c:567 #: eelf32ltsmip.c:567 eelf32ltsmip_fbsd.c:567 eelf32ltsmipn32.c:567 #: eelf32ltsmipn32_fbsd.c:567 eelf32m32c.c:255 eelf32mb_linux.c:352 #: eelf32mbel_linux.c:352 eelf32mcore.c:250 eelf32mep.c:229 eelf32metag.c:601 #: eelf32microblaze.c:229 eelf32microblazeel.c:229 eelf32mipswindiss.c:459 -#: eelf32moxie.c:244 eelf32or1k.c:245 eelf32or1k_linux.c:352 eelf32ppc.c:603 -#: eelf32ppc_fbsd.c:603 eelf32ppchaiku.c:603 eelf32ppclinux.c:603 -#: eelf32ppcnto.c:603 eelf32ppcsim.c:603 eelf32ppcvxworks.c:577 -#: eelf32ppcwindiss.c:603 eelf32rl78.c:244 eelf32rx.c:272 eelf32rx_linux.c:257 +#: eelf32moxie.c:244 eelf32or1k.c:245 eelf32or1k_linux.c:352 eelf32ppc.c:615 +#: eelf32ppc_fbsd.c:615 eelf32ppchaiku.c:615 eelf32ppclinux.c:615 +#: eelf32ppcnto.c:615 eelf32ppcsim.c:615 eelf32ppcvxworks.c:589 +#: eelf32ppcwindiss.c:615 eelf32rl78.c:244 eelf32rx.c:272 eelf32rx_linux.c:257 #: eelf32tilegx.c:352 eelf32tilegx_be.c:352 eelf32tilepro.c:352 #: eelf32vax.c:326 eelf32visium.c:229 eelf32xstormy16.c:240 #: eelf32xtensa.c:2265 eelf32z80.c:256 eelf64_aix.c:326 eelf64_ia64.c:383 #: eelf64_ia64_fbsd.c:383 eelf64_s390.c:422 eelf64_sparc.c:352 #: eelf64_sparc_fbsd.c:352 eelf64_sparc_sol2.c:484 eelf64alpha.c:445 #: eelf64alpha_fbsd.c:445 eelf64alpha_nbsd.c:445 eelf64bmip.c:581 -#: eelf64bpf.c:229 eelf64briscv.c:434 eelf64briscv_lp64.c:434 -#: eelf64briscv_lp64f.c:434 eelf64btsmip.c:567 eelf64btsmip_fbsd.c:567 -#: eelf64hppa.c:296 eelf64loongarch.c:405 eelf64lppc.c:1053 -#: eelf64lppc_fbsd.c:1053 eelf64lriscv.c:434 eelf64lriscv_lp64.c:434 -#: eelf64lriscv_lp64f.c:434 eelf64ltsmip.c:567 eelf64ltsmip_fbsd.c:567 -#: eelf64mmix.c:437 eelf64ppc.c:1053 eelf64ppc_fbsd.c:1053 eelf64rdos.c:377 +#: eelf64bpf.c:229 eelf64briscv.c:420 eelf64briscv_lp64.c:420 +#: eelf64briscv_lp64f.c:420 eelf64btsmip.c:567 eelf64btsmip_fbsd.c:567 +#: eelf64hppa.c:296 eelf64loongarch.c:402 eelf64lppc.c:1064 +#: eelf64lppc_fbsd.c:1064 eelf64lriscv.c:420 eelf64lriscv_lp64.c:420 +#: eelf64lriscv_lp64f.c:420 eelf64ltsmip.c:567 eelf64ltsmip_fbsd.c:567 +#: eelf64mmix.c:437 eelf64ppc.c:1064 eelf64ppc_fbsd.c:1064 eelf64rdos.c:377 #: eelf64tilegx.c:352 eelf64tilegx_be.c:352 eelf_i386.c:5109 #: eelf_i386_be.c:350 eelf_i386_fbsd.c:386 eelf_i386_haiku.c:386 #: eelf_i386_ldso.c:361 eelf_i386_sol2.c:518 eelf_i386_vxworks.c:413 @@ -3967,13 +3878,13 @@ msgstr "" #: eaarch64elf32.c:674 eaarch64elf32b.c:674 eaarch64elfb.c:674 #: eaarch64fbsd.c:675 eaarch64fbsdb.c:675 eaarch64haiku.c:675 #: eaarch64linux.c:675 eaarch64linux32.c:675 eaarch64linux32b.c:675 -#: eaarch64linuxb.c:675 eaarch64nto.c:772 earcelf.c:306 earclinux.c:362 -#: earclinux_nps.c:362 earcv2elf.c:239 earcv2elfx.c:239 earmelf.c:914 -#: earmelf_fbsd.c:914 earmelf_fuchsia.c:915 earmelf_haiku.c:915 -#: earmelf_linux.c:915 earmelf_linux_eabi.c:915 earmelf_linux_fdpiceabi.c:915 -#: earmelf_nacl.c:915 earmelf_nbsd.c:914 earmelf_phoenix.c:915 -#: earmelf_vxworks.c:950 earmelfb.c:914 earmelfb_fbsd.c:914 -#: earmelfb_fuchsia.c:915 earmelfb_linux.c:915 earmelfb_linux_eabi.c:915 +#: eaarch64linuxb.c:675 earcelf.c:306 earclinux.c:362 earclinux_nps.c:362 +#: earcv2elf.c:239 earcv2elfx.c:239 earmelf.c:914 earmelf_fbsd.c:914 +#: earmelf_fuchsia.c:915 earmelf_haiku.c:915 earmelf_linux.c:915 +#: earmelf_linux_eabi.c:915 earmelf_linux_fdpiceabi.c:915 earmelf_nacl.c:915 +#: earmelf_nbsd.c:914 earmelf_phoenix.c:915 earmelf_vxworks.c:950 +#: earmelfb.c:914 earmelfb_fbsd.c:914 earmelfb_fuchsia.c:915 +#: earmelfb_linux.c:915 earmelfb_linux_eabi.c:915 #: earmelfb_linux_fdpiceabi.c:915 earmelfb_nacl.c:915 earmelfb_nbsd.c:914 #: earmnto.c:889 eavr1.c:463 eavr2.c:463 eavr25.c:463 eavr3.c:463 eavr31.c:463 #: eavr35.c:463 eavr4.c:463 eavr5.c:463 eavr51.c:463 eavr6.c:463 @@ -3981,41 +3892,41 @@ msgstr "" #: eavrxmega4.c:463 eavrxmega5.c:463 eavrxmega6.c:463 eavrxmega7.c:463 #: ecriself.c:254 ecrislinux.c:337 ecskyelf.c:498 ecskyelf_linux.c:606 #: ed10velf.c:239 eelf32_sparc.c:362 eelf32_sparc_sol2.c:494 -#: eelf32_sparc_vxworks.c:399 eelf32_spu.c:836 eelf32_tic6x_be.c:473 +#: eelf32_sparc_vxworks.c:399 eelf32_spu.c:972 eelf32_tic6x_be.c:473 #: eelf32_tic6x_elf_be.c:473 eelf32_tic6x_elf_le.c:473 eelf32_tic6x_le.c:473 #: eelf32_tic6x_linux_be.c:473 eelf32_tic6x_linux_le.c:473 #: eelf32_x86_64.c:5497 eelf32am33lin.c:336 eelf32b4300.c:577 eelf32bfin.c:354 -#: eelf32bfinfd.c:379 eelf32bmip.c:577 eelf32bmipn32.c:591 eelf32briscv.c:444 -#: eelf32briscv_ilp32.c:444 eelf32briscv_ilp32f.c:444 eelf32bsmip.c:591 +#: eelf32bfinfd.c:379 eelf32bmip.c:577 eelf32bmipn32.c:591 eelf32briscv.c:430 +#: eelf32briscv_ilp32.c:430 eelf32briscv_ilp32f.c:430 eelf32bsmip.c:591 #: eelf32btsmip.c:577 eelf32btsmip_fbsd.c:577 eelf32btsmipn32.c:577 #: eelf32btsmipn32_fbsd.c:577 eelf32cr16.c:389 eelf32crx.c:276 #: eelf32ebmip.c:577 eelf32ebmipvxworks.c:612 eelf32elmip.c:577 #: eelf32elmipvxworks.c:612 eelf32epiphany.c:254 eelf32epiphany_4x4.c:241 #: eelf32frvfd.c:361 eelf32ip2k.c:254 eelf32l4300.c:577 eelf32lm32.c:254 -#: eelf32lm32fd.c:361 eelf32lmip.c:577 eelf32loongarch.c:415 eelf32lppc.c:613 -#: eelf32lppclinux.c:613 eelf32lppcnto.c:613 eelf32lppcsim.c:613 -#: eelf32lr5900.c:495 eelf32lr5900n32.c:494 eelf32lriscv.c:444 -#: eelf32lriscv_ilp32.c:444 eelf32lriscv_ilp32f.c:444 eelf32lsmip.c:577 +#: eelf32lm32fd.c:361 eelf32lmip.c:577 eelf32loongarch.c:412 eelf32lppc.c:625 +#: eelf32lppclinux.c:625 eelf32lppcnto.c:625 eelf32lppcsim.c:625 +#: eelf32lr5900.c:495 eelf32lr5900n32.c:494 eelf32lriscv.c:430 +#: eelf32lriscv_ilp32.c:430 eelf32lriscv_ilp32f.c:430 eelf32lsmip.c:577 #: eelf32ltsmip.c:577 eelf32ltsmip_fbsd.c:577 eelf32ltsmipn32.c:577 #: eelf32ltsmipn32_fbsd.c:577 eelf32m32c.c:265 eelf32mb_linux.c:362 #: eelf32mbel_linux.c:362 eelf32mcore.c:260 eelf32mep.c:239 eelf32metag.c:611 #: eelf32microblaze.c:239 eelf32microblazeel.c:239 eelf32mipswindiss.c:469 -#: eelf32moxie.c:254 eelf32or1k.c:255 eelf32or1k_linux.c:362 eelf32ppc.c:613 -#: eelf32ppc_fbsd.c:613 eelf32ppchaiku.c:613 eelf32ppclinux.c:613 -#: eelf32ppcnto.c:613 eelf32ppcsim.c:613 eelf32ppcvxworks.c:587 -#: eelf32ppcwindiss.c:613 eelf32rl78.c:254 eelf32rx.c:282 eelf32rx_linux.c:267 +#: eelf32moxie.c:254 eelf32or1k.c:255 eelf32or1k_linux.c:362 eelf32ppc.c:625 +#: eelf32ppc_fbsd.c:625 eelf32ppchaiku.c:625 eelf32ppclinux.c:625 +#: eelf32ppcnto.c:625 eelf32ppcsim.c:625 eelf32ppcvxworks.c:599 +#: eelf32ppcwindiss.c:625 eelf32rl78.c:254 eelf32rx.c:282 eelf32rx_linux.c:267 #: eelf32tilegx.c:362 eelf32tilegx_be.c:362 eelf32tilepro.c:362 #: eelf32vax.c:336 eelf32visium.c:239 eelf32xstormy16.c:250 #: eelf32xtensa.c:2275 eelf32z80.c:266 eelf64_aix.c:336 eelf64_ia64.c:393 #: eelf64_ia64_fbsd.c:393 eelf64_s390.c:432 eelf64_sparc.c:362 #: eelf64_sparc_fbsd.c:362 eelf64_sparc_sol2.c:494 eelf64alpha.c:455 #: eelf64alpha_fbsd.c:455 eelf64alpha_nbsd.c:455 eelf64bmip.c:591 -#: eelf64bpf.c:239 eelf64briscv.c:444 eelf64briscv_lp64.c:444 -#: eelf64briscv_lp64f.c:444 eelf64btsmip.c:577 eelf64btsmip_fbsd.c:577 -#: eelf64hppa.c:306 eelf64loongarch.c:415 eelf64lppc.c:1063 -#: eelf64lppc_fbsd.c:1063 eelf64lriscv.c:444 eelf64lriscv_lp64.c:444 -#: eelf64lriscv_lp64f.c:444 eelf64ltsmip.c:577 eelf64ltsmip_fbsd.c:577 -#: eelf64mmix.c:447 eelf64ppc.c:1063 eelf64ppc_fbsd.c:1063 eelf64rdos.c:387 +#: eelf64bpf.c:239 eelf64briscv.c:430 eelf64briscv_lp64.c:430 +#: eelf64briscv_lp64f.c:430 eelf64btsmip.c:577 eelf64btsmip_fbsd.c:577 +#: eelf64hppa.c:306 eelf64loongarch.c:412 eelf64lppc.c:1074 +#: eelf64lppc_fbsd.c:1074 eelf64lriscv.c:430 eelf64lriscv_lp64.c:430 +#: eelf64lriscv_lp64f.c:430 eelf64ltsmip.c:577 eelf64ltsmip_fbsd.c:577 +#: eelf64mmix.c:447 eelf64ppc.c:1074 eelf64ppc_fbsd.c:1074 eelf64rdos.c:387 #: eelf64tilegx.c:362 eelf64tilegx_be.c:362 eelf_i386.c:5119 #: eelf_i386_be.c:360 eelf_i386_fbsd.c:396 eelf_i386_haiku.c:396 #: eelf_i386_ldso.c:371 eelf_i386_sol2.c:528 eelf_i386_vxworks.c:423 @@ -4044,13 +3955,13 @@ msgstr "" #: eaarch64elf32.c:683 eaarch64elf32b.c:683 eaarch64elfb.c:683 #: eaarch64fbsd.c:684 eaarch64fbsdb.c:684 eaarch64haiku.c:684 #: eaarch64linux.c:684 eaarch64linux32.c:684 eaarch64linux32b.c:684 -#: eaarch64linuxb.c:684 eaarch64nto.c:781 eaarch64nto.c:955 earcelf.c:315 -#: earclinux.c:371 earclinux_nps.c:371 earcv2elf.c:248 earcv2elfx.c:248 -#: earmelf.c:923 earmelf_fbsd.c:923 earmelf_fuchsia.c:924 earmelf_haiku.c:924 -#: earmelf_linux.c:924 earmelf_linux_eabi.c:924 earmelf_linux_fdpiceabi.c:924 -#: earmelf_nacl.c:924 earmelf_nbsd.c:923 earmelf_phoenix.c:924 -#: earmelf_vxworks.c:959 earmelfb.c:923 earmelfb_fbsd.c:923 -#: earmelfb_fuchsia.c:924 earmelfb_linux.c:924 earmelfb_linux_eabi.c:924 +#: eaarch64linuxb.c:684 earcelf.c:315 earclinux.c:371 earclinux_nps.c:371 +#: earcv2elf.c:248 earcv2elfx.c:248 earmelf.c:923 earmelf_fbsd.c:923 +#: earmelf_fuchsia.c:924 earmelf_haiku.c:924 earmelf_linux.c:924 +#: earmelf_linux_eabi.c:924 earmelf_linux_fdpiceabi.c:924 earmelf_nacl.c:924 +#: earmelf_nbsd.c:923 earmelf_phoenix.c:924 earmelf_vxworks.c:959 +#: earmelfb.c:923 earmelfb_fbsd.c:923 earmelfb_fuchsia.c:924 +#: earmelfb_linux.c:924 earmelfb_linux_eabi.c:924 #: earmelfb_linux_fdpiceabi.c:924 earmelfb_nacl.c:924 earmelfb_nbsd.c:923 #: earmnto.c:898 eavr1.c:472 eavr2.c:472 eavr25.c:472 eavr3.c:472 eavr31.c:472 #: eavr35.c:472 eavr4.c:472 eavr5.c:472 eavr51.c:472 eavr6.c:472 @@ -4058,41 +3969,41 @@ msgstr "" #: eavrxmega4.c:472 eavrxmega5.c:472 eavrxmega6.c:472 eavrxmega7.c:472 #: ecriself.c:263 ecrislinux.c:346 ecskyelf.c:507 ecskyelf_linux.c:615 #: ed10velf.c:248 eelf32_sparc.c:371 eelf32_sparc_sol2.c:503 -#: eelf32_sparc_vxworks.c:408 eelf32_spu.c:845 eelf32_tic6x_be.c:482 +#: eelf32_sparc_vxworks.c:408 eelf32_spu.c:981 eelf32_tic6x_be.c:482 #: eelf32_tic6x_elf_be.c:482 eelf32_tic6x_elf_le.c:482 eelf32_tic6x_le.c:482 #: eelf32_tic6x_linux_be.c:482 eelf32_tic6x_linux_le.c:482 #: eelf32_x86_64.c:5506 eelf32am33lin.c:345 eelf32b4300.c:586 eelf32bfin.c:363 -#: eelf32bfinfd.c:388 eelf32bmip.c:586 eelf32bmipn32.c:600 eelf32briscv.c:453 -#: eelf32briscv_ilp32.c:453 eelf32briscv_ilp32f.c:453 eelf32bsmip.c:600 +#: eelf32bfinfd.c:388 eelf32bmip.c:586 eelf32bmipn32.c:600 eelf32briscv.c:439 +#: eelf32briscv_ilp32.c:439 eelf32briscv_ilp32f.c:439 eelf32bsmip.c:600 #: eelf32btsmip.c:586 eelf32btsmip_fbsd.c:586 eelf32btsmipn32.c:586 #: eelf32btsmipn32_fbsd.c:586 eelf32cr16.c:398 eelf32crx.c:285 #: eelf32ebmip.c:586 eelf32ebmipvxworks.c:621 eelf32elmip.c:586 #: eelf32elmipvxworks.c:621 eelf32epiphany.c:263 eelf32epiphany_4x4.c:250 #: eelf32frvfd.c:370 eelf32ip2k.c:263 eelf32l4300.c:586 eelf32lm32.c:263 -#: eelf32lm32fd.c:370 eelf32lmip.c:586 eelf32loongarch.c:424 eelf32lppc.c:622 -#: eelf32lppclinux.c:622 eelf32lppcnto.c:622 eelf32lppcsim.c:622 -#: eelf32lr5900.c:504 eelf32lr5900n32.c:503 eelf32lriscv.c:453 -#: eelf32lriscv_ilp32.c:453 eelf32lriscv_ilp32f.c:453 eelf32lsmip.c:586 +#: eelf32lm32fd.c:370 eelf32lmip.c:586 eelf32loongarch.c:421 eelf32lppc.c:634 +#: eelf32lppclinux.c:634 eelf32lppcnto.c:634 eelf32lppcsim.c:634 +#: eelf32lr5900.c:504 eelf32lr5900n32.c:503 eelf32lriscv.c:439 +#: eelf32lriscv_ilp32.c:439 eelf32lriscv_ilp32f.c:439 eelf32lsmip.c:586 #: eelf32ltsmip.c:586 eelf32ltsmip_fbsd.c:586 eelf32ltsmipn32.c:586 #: eelf32ltsmipn32_fbsd.c:586 eelf32m32c.c:274 eelf32mb_linux.c:371 #: eelf32mbel_linux.c:371 eelf32mcore.c:269 eelf32mep.c:248 eelf32metag.c:620 #: eelf32microblaze.c:248 eelf32microblazeel.c:248 eelf32mipswindiss.c:478 -#: eelf32moxie.c:263 eelf32or1k.c:264 eelf32or1k_linux.c:371 eelf32ppc.c:622 -#: eelf32ppc_fbsd.c:622 eelf32ppchaiku.c:622 eelf32ppclinux.c:622 -#: eelf32ppcnto.c:622 eelf32ppcsim.c:622 eelf32ppcvxworks.c:596 -#: eelf32ppcwindiss.c:622 eelf32rl78.c:263 eelf32rx.c:291 eelf32rx_linux.c:276 +#: eelf32moxie.c:263 eelf32or1k.c:264 eelf32or1k_linux.c:371 eelf32ppc.c:634 +#: eelf32ppc_fbsd.c:634 eelf32ppchaiku.c:634 eelf32ppclinux.c:634 +#: eelf32ppcnto.c:634 eelf32ppcsim.c:634 eelf32ppcvxworks.c:608 +#: eelf32ppcwindiss.c:634 eelf32rl78.c:263 eelf32rx.c:291 eelf32rx_linux.c:276 #: eelf32tilegx.c:371 eelf32tilegx_be.c:371 eelf32tilepro.c:371 #: eelf32vax.c:345 eelf32visium.c:248 eelf32xstormy16.c:259 #: eelf32xtensa.c:2284 eelf32z80.c:275 eelf64_aix.c:345 eelf64_ia64.c:402 #: eelf64_ia64_fbsd.c:402 eelf64_s390.c:441 eelf64_sparc.c:371 #: eelf64_sparc_fbsd.c:371 eelf64_sparc_sol2.c:503 eelf64alpha.c:464 #: eelf64alpha_fbsd.c:464 eelf64alpha_nbsd.c:464 eelf64bmip.c:600 -#: eelf64bpf.c:248 eelf64briscv.c:453 eelf64briscv_lp64.c:453 -#: eelf64briscv_lp64f.c:453 eelf64btsmip.c:586 eelf64btsmip_fbsd.c:586 -#: eelf64hppa.c:315 eelf64loongarch.c:424 eelf64lppc.c:1072 -#: eelf64lppc_fbsd.c:1072 eelf64lriscv.c:453 eelf64lriscv_lp64.c:453 -#: eelf64lriscv_lp64f.c:453 eelf64ltsmip.c:586 eelf64ltsmip_fbsd.c:586 -#: eelf64mmix.c:456 eelf64ppc.c:1072 eelf64ppc_fbsd.c:1072 eelf64rdos.c:396 +#: eelf64bpf.c:248 eelf64briscv.c:439 eelf64briscv_lp64.c:439 +#: eelf64briscv_lp64f.c:439 eelf64btsmip.c:586 eelf64btsmip_fbsd.c:586 +#: eelf64hppa.c:315 eelf64loongarch.c:421 eelf64lppc.c:1083 +#: eelf64lppc_fbsd.c:1083 eelf64lriscv.c:439 eelf64lriscv_lp64.c:439 +#: eelf64lriscv_lp64f.c:439 eelf64ltsmip.c:586 eelf64ltsmip_fbsd.c:586 +#: eelf64mmix.c:456 eelf64ppc.c:1083 eelf64ppc_fbsd.c:1083 eelf64rdos.c:396 #: eelf64tilegx.c:371 eelf64tilegx_be.c:371 eelf_i386.c:5128 #: eelf_i386_be.c:369 eelf_i386_fbsd.c:405 eelf_i386_haiku.c:405 #: eelf_i386_ldso.c:380 eelf_i386_sol2.c:537 eelf_i386_vxworks.c:432 @@ -4121,13 +4032,13 @@ msgstr "" #: eaarch64elf32.c:722 eaarch64elf32b.c:722 eaarch64elfb.c:722 #: eaarch64fbsd.c:723 eaarch64fbsdb.c:723 eaarch64haiku.c:723 #: eaarch64linux.c:723 eaarch64linux32.c:723 eaarch64linux32b.c:723 -#: eaarch64linuxb.c:723 eaarch64nto.c:820 earcelf.c:354 earclinux.c:410 -#: earclinux_nps.c:410 earcv2elf.c:287 earcv2elfx.c:287 earmelf.c:962 -#: earmelf_fbsd.c:962 earmelf_fuchsia.c:963 earmelf_haiku.c:963 -#: earmelf_linux.c:963 earmelf_linux_eabi.c:963 earmelf_linux_fdpiceabi.c:963 -#: earmelf_nacl.c:963 earmelf_nbsd.c:962 earmelf_phoenix.c:963 -#: earmelf_vxworks.c:998 earmelfb.c:962 earmelfb_fbsd.c:962 -#: earmelfb_fuchsia.c:963 earmelfb_linux.c:963 earmelfb_linux_eabi.c:963 +#: eaarch64linuxb.c:723 earcelf.c:354 earclinux.c:410 earclinux_nps.c:410 +#: earcv2elf.c:287 earcv2elfx.c:287 earmelf.c:962 earmelf_fbsd.c:962 +#: earmelf_fuchsia.c:963 earmelf_haiku.c:963 earmelf_linux.c:963 +#: earmelf_linux_eabi.c:963 earmelf_linux_fdpiceabi.c:963 earmelf_nacl.c:963 +#: earmelf_nbsd.c:962 earmelf_phoenix.c:963 earmelf_vxworks.c:998 +#: earmelfb.c:962 earmelfb_fbsd.c:962 earmelfb_fuchsia.c:963 +#: earmelfb_linux.c:963 earmelfb_linux_eabi.c:963 #: earmelfb_linux_fdpiceabi.c:963 earmelfb_nacl.c:963 earmelfb_nbsd.c:962 #: earmnto.c:937 eavr1.c:511 eavr2.c:511 eavr25.c:511 eavr3.c:511 eavr31.c:511 #: eavr35.c:511 eavr4.c:511 eavr5.c:511 eavr51.c:511 eavr6.c:511 @@ -4135,41 +4046,41 @@ msgstr "" #: eavrxmega4.c:511 eavrxmega5.c:511 eavrxmega6.c:511 eavrxmega7.c:511 #: ecriself.c:302 ecrislinux.c:385 ecskyelf.c:546 ecskyelf_linux.c:654 #: ed10velf.c:287 eelf32_sparc.c:410 eelf32_sparc_sol2.c:542 -#: eelf32_sparc_vxworks.c:447 eelf32_spu.c:884 eelf32_tic6x_be.c:521 +#: eelf32_sparc_vxworks.c:447 eelf32_spu.c:1020 eelf32_tic6x_be.c:521 #: eelf32_tic6x_elf_be.c:521 eelf32_tic6x_elf_le.c:521 eelf32_tic6x_le.c:521 #: eelf32_tic6x_linux_be.c:521 eelf32_tic6x_linux_le.c:521 #: eelf32_x86_64.c:5545 eelf32am33lin.c:384 eelf32b4300.c:625 eelf32bfin.c:402 -#: eelf32bfinfd.c:427 eelf32bmip.c:625 eelf32bmipn32.c:639 eelf32briscv.c:492 -#: eelf32briscv_ilp32.c:492 eelf32briscv_ilp32f.c:492 eelf32bsmip.c:639 +#: eelf32bfinfd.c:427 eelf32bmip.c:625 eelf32bmipn32.c:639 eelf32briscv.c:478 +#: eelf32briscv_ilp32.c:478 eelf32briscv_ilp32f.c:478 eelf32bsmip.c:639 #: eelf32btsmip.c:625 eelf32btsmip_fbsd.c:625 eelf32btsmipn32.c:625 #: eelf32btsmipn32_fbsd.c:625 eelf32cr16.c:437 eelf32crx.c:324 #: eelf32ebmip.c:625 eelf32ebmipvxworks.c:660 eelf32elmip.c:625 #: eelf32elmipvxworks.c:660 eelf32epiphany.c:302 eelf32epiphany_4x4.c:289 #: eelf32frvfd.c:409 eelf32ip2k.c:302 eelf32l4300.c:625 eelf32lm32.c:302 -#: eelf32lm32fd.c:409 eelf32lmip.c:625 eelf32loongarch.c:463 eelf32lppc.c:661 -#: eelf32lppclinux.c:661 eelf32lppcnto.c:661 eelf32lppcsim.c:661 -#: eelf32lr5900.c:543 eelf32lr5900n32.c:542 eelf32lriscv.c:492 -#: eelf32lriscv_ilp32.c:492 eelf32lriscv_ilp32f.c:492 eelf32lsmip.c:625 +#: eelf32lm32fd.c:409 eelf32lmip.c:625 eelf32loongarch.c:460 eelf32lppc.c:673 +#: eelf32lppclinux.c:673 eelf32lppcnto.c:673 eelf32lppcsim.c:673 +#: eelf32lr5900.c:543 eelf32lr5900n32.c:542 eelf32lriscv.c:478 +#: eelf32lriscv_ilp32.c:478 eelf32lriscv_ilp32f.c:478 eelf32lsmip.c:625 #: eelf32ltsmip.c:625 eelf32ltsmip_fbsd.c:625 eelf32ltsmipn32.c:625 #: eelf32ltsmipn32_fbsd.c:625 eelf32m32c.c:313 eelf32mb_linux.c:410 #: eelf32mbel_linux.c:410 eelf32mcore.c:308 eelf32mep.c:287 eelf32metag.c:659 #: eelf32microblaze.c:287 eelf32microblazeel.c:287 eelf32mipswindiss.c:517 -#: eelf32moxie.c:302 eelf32or1k.c:303 eelf32or1k_linux.c:410 eelf32ppc.c:661 -#: eelf32ppc_fbsd.c:661 eelf32ppchaiku.c:661 eelf32ppclinux.c:661 -#: eelf32ppcnto.c:661 eelf32ppcsim.c:661 eelf32ppcvxworks.c:635 -#: eelf32ppcwindiss.c:661 eelf32rl78.c:302 eelf32rx.c:330 eelf32rx_linux.c:315 +#: eelf32moxie.c:302 eelf32or1k.c:303 eelf32or1k_linux.c:410 eelf32ppc.c:673 +#: eelf32ppc_fbsd.c:673 eelf32ppchaiku.c:673 eelf32ppclinux.c:673 +#: eelf32ppcnto.c:673 eelf32ppcsim.c:673 eelf32ppcvxworks.c:647 +#: eelf32ppcwindiss.c:673 eelf32rl78.c:302 eelf32rx.c:330 eelf32rx_linux.c:315 #: eelf32tilegx.c:410 eelf32tilegx_be.c:410 eelf32tilepro.c:410 #: eelf32vax.c:384 eelf32visium.c:287 eelf32xstormy16.c:298 #: eelf32xtensa.c:2323 eelf32z80.c:314 eelf64_aix.c:384 eelf64_ia64.c:441 #: eelf64_ia64_fbsd.c:441 eelf64_s390.c:480 eelf64_sparc.c:410 #: eelf64_sparc_fbsd.c:410 eelf64_sparc_sol2.c:542 eelf64alpha.c:503 #: eelf64alpha_fbsd.c:503 eelf64alpha_nbsd.c:503 eelf64bmip.c:639 -#: eelf64bpf.c:287 eelf64briscv.c:492 eelf64briscv_lp64.c:492 -#: eelf64briscv_lp64f.c:492 eelf64btsmip.c:625 eelf64btsmip_fbsd.c:625 -#: eelf64hppa.c:354 eelf64loongarch.c:463 eelf64lppc.c:1111 -#: eelf64lppc_fbsd.c:1111 eelf64lriscv.c:492 eelf64lriscv_lp64.c:492 -#: eelf64lriscv_lp64f.c:492 eelf64ltsmip.c:625 eelf64ltsmip_fbsd.c:625 -#: eelf64mmix.c:495 eelf64ppc.c:1111 eelf64ppc_fbsd.c:1111 eelf64rdos.c:435 +#: eelf64bpf.c:287 eelf64briscv.c:478 eelf64briscv_lp64.c:478 +#: eelf64briscv_lp64f.c:478 eelf64btsmip.c:625 eelf64btsmip_fbsd.c:625 +#: eelf64hppa.c:354 eelf64loongarch.c:460 eelf64lppc.c:1122 +#: eelf64lppc_fbsd.c:1122 eelf64lriscv.c:478 eelf64lriscv_lp64.c:478 +#: eelf64lriscv_lp64f.c:478 eelf64ltsmip.c:625 eelf64ltsmip_fbsd.c:625 +#: eelf64mmix.c:495 eelf64ppc.c:1122 eelf64ppc_fbsd.c:1122 eelf64rdos.c:435 #: eelf64tilegx.c:410 eelf64tilegx_be.c:410 eelf_i386.c:5167 #: eelf_i386_be.c:408 eelf_i386_fbsd.c:444 eelf_i386_haiku.c:444 #: eelf_i386_ldso.c:419 eelf_i386_sol2.c:576 eelf_i386_vxworks.c:471 @@ -4196,97 +4107,132 @@ msgid "" "protected" msgstr "" -#: eaarch64cloudabi.c:800 eaarch64cloudabib.c:800 eaarch64elf.c:795 -#: eaarch64elf32.c:795 eaarch64elf32b.c:795 eaarch64elfb.c:795 -#: eaarch64fbsd.c:800 eaarch64fbsdb.c:800 eaarch64haiku.c:800 -#: eaarch64linux.c:800 eaarch64linux32.c:800 eaarch64linux32b.c:800 -#: eaarch64linuxb.c:800 eaarch64nto.c:897 earcelf.c:418 earclinux.c:478 -#: earclinux_nps.c:478 earcv2elf.c:296 earcv2elfx.c:296 earmelf.c:1026 -#: earmelf_fbsd.c:1026 earmelf_fuchsia.c:1031 earmelf_haiku.c:1031 -#: earmelf_linux.c:1031 earmelf_linux_eabi.c:1031 -#: earmelf_linux_fdpiceabi.c:1031 earmelf_nacl.c:1031 earmelf_nbsd.c:1026 -#: earmelf_phoenix.c:1031 earmelf_vxworks.c:1062 earmelfb.c:1026 -#: earmelfb_fbsd.c:1026 earmelfb_fuchsia.c:1031 earmelfb_linux.c:1031 -#: earmelfb_linux_eabi.c:1031 earmelfb_linux_fdpiceabi.c:1031 -#: earmelfb_nacl.c:1031 earmelfb_nbsd.c:1026 earmnto.c:1001 eavr1.c:520 -#: eavr2.c:520 eavr25.c:520 eavr3.c:520 eavr31.c:520 eavr35.c:520 eavr4.c:520 -#: eavr5.c:520 eavr51.c:520 eavr6.c:520 eavrtiny.c:520 eavrxmega1.c:520 -#: eavrxmega2.c:520 eavrxmega3.c:520 eavrxmega4.c:520 eavrxmega5.c:520 -#: eavrxmega6.c:520 eavrxmega7.c:520 ecriself.c:311 ecrislinux.c:453 -#: ecskyelf.c:555 ecskyelf_linux.c:722 ed10velf.c:296 eelf32_sparc.c:478 -#: eelf32_sparc_sol2.c:610 eelf32_sparc_vxworks.c:515 eelf32_spu.c:893 -#: eelf32_tic6x_be.c:585 eelf32_tic6x_elf_be.c:585 eelf32_tic6x_elf_le.c:585 -#: eelf32_tic6x_le.c:585 eelf32_tic6x_linux_be.c:585 -#: eelf32_tic6x_linux_le.c:585 eelf32_x86_64.c:5705 eelf32am33lin.c:448 -#: eelf32b4300.c:693 eelf32bfin.c:466 eelf32bfinfd.c:491 eelf32bmip.c:693 -#: eelf32bmipn32.c:707 eelf32briscv.c:560 eelf32briscv_ilp32.c:560 -#: eelf32briscv_ilp32f.c:560 eelf32bsmip.c:707 eelf32btsmip.c:693 -#: eelf32btsmip_fbsd.c:693 eelf32btsmipn32.c:693 eelf32btsmipn32_fbsd.c:693 -#: eelf32cr16.c:446 eelf32crx.c:333 eelf32ebmip.c:693 eelf32ebmipvxworks.c:728 -#: eelf32elmip.c:693 eelf32elmipvxworks.c:728 eelf32epiphany.c:311 -#: eelf32epiphany_4x4.c:298 eelf32frvfd.c:473 eelf32ip2k.c:311 -#: eelf32l4300.c:693 eelf32lm32.c:311 eelf32lm32fd.c:473 eelf32lmip.c:693 -#: eelf32loongarch.c:531 eelf32lppc.c:735 eelf32lppclinux.c:735 -#: eelf32lppcnto.c:735 eelf32lppcsim.c:735 eelf32lr5900.c:552 -#: eelf32lr5900n32.c:551 eelf32lriscv.c:560 eelf32lriscv_ilp32.c:560 -#: eelf32lriscv_ilp32f.c:560 eelf32lsmip.c:693 eelf32ltsmip.c:693 -#: eelf32ltsmip_fbsd.c:693 eelf32ltsmipn32.c:693 eelf32ltsmipn32_fbsd.c:693 -#: eelf32m32c.c:322 eelf32mb_linux.c:478 eelf32mbel_linux.c:478 -#: eelf32mcore.c:317 eelf32mep.c:296 eelf32metag.c:727 eelf32microblaze.c:296 -#: eelf32microblazeel.c:296 eelf32mipswindiss.c:526 eelf32moxie.c:311 -#: eelf32or1k.c:312 eelf32or1k_linux.c:478 eelf32ppc.c:735 -#: eelf32ppc_fbsd.c:735 eelf32ppchaiku.c:735 eelf32ppclinux.c:735 -#: eelf32ppcnto.c:735 eelf32ppcsim.c:735 eelf32ppcvxworks.c:709 -#: eelf32ppcwindiss.c:735 eelf32rl78.c:311 eelf32rx.c:339 eelf32rx_linux.c:324 -#: eelf32tilegx.c:478 eelf32tilegx_be.c:478 eelf32tilepro.c:478 -#: eelf32vax.c:448 eelf32visium.c:296 eelf32xstormy16.c:307 -#: eelf32xtensa.c:2391 eelf32z80.c:323 eelf64_aix.c:448 eelf64_ia64.c:505 -#: eelf64_ia64_fbsd.c:505 eelf64_s390.c:548 eelf64_sparc.c:478 -#: eelf64_sparc_fbsd.c:478 eelf64_sparc_sol2.c:610 eelf64alpha.c:571 -#: eelf64alpha_fbsd.c:571 eelf64alpha_nbsd.c:571 eelf64bmip.c:707 -#: eelf64bpf.c:296 eelf64briscv.c:560 eelf64briscv_lp64.c:560 -#: eelf64briscv_lp64f.c:560 eelf64btsmip.c:693 eelf64btsmip_fbsd.c:693 -#: eelf64hppa.c:418 eelf64loongarch.c:531 eelf64lppc.c:1190 -#: eelf64lppc_fbsd.c:1190 eelf64lriscv.c:560 eelf64lriscv_lp64.c:560 -#: eelf64lriscv_lp64f.c:560 eelf64ltsmip.c:693 eelf64ltsmip_fbsd.c:693 -#: eelf64mmix.c:559 eelf64ppc.c:1190 eelf64ppc_fbsd.c:1190 eelf64rdos.c:503 -#: eelf64tilegx.c:478 eelf64tilegx_be.c:478 eelf_i386.c:5324 -#: eelf_i386_be.c:519 eelf_i386_fbsd.c:601 eelf_i386_haiku.c:601 -#: eelf_i386_ldso.c:534 eelf_i386_sol2.c:691 eelf_i386_vxworks.c:586 -#: eelf_iamcu.c:559 eelf_mipsel_haiku.c:693 eelf_s390.c:478 eelf_x86_64.c:5755 -#: eelf_x86_64_cloudabi.c:654 eelf_x86_64_fbsd.c:654 eelf_x86_64_haiku.c:654 -#: eelf_x86_64_sol2.c:786 eh8300elf.c:311 eh8300elf_linux.c:311 -#: eh8300helf.c:311 eh8300helf_linux.c:311 eh8300hnelf.c:311 eh8300self.c:311 -#: eh8300self_linux.c:311 eh8300snelf.c:311 eh8300sxelf.c:311 -#: eh8300sxelf_linux.c:311 eh8300sxnelf.c:311 ehppa64linux.c:448 -#: ehppaelf.c:579 ehppalinux.c:761 ehppanbsd.c:761 ehppaobsd.c:761 -#: ei386lynx.c:463 ei386moss.c:463 ei386nto.c:463 em32relf.c:311 -#: em32relf_linux.c:473 em32rlelf.c:311 em32rlelf_linux.c:473 -#: em68hc11elf.c:581 em68hc11elfb.c:581 em68hc12elf.c:581 em68hc12elfb.c:581 -#: em68kelf.c:635 em68kelfnbsd.c:635 emn10300.c:448 ends32belf.c:432 -#: ends32belf16m.c:432 ends32belf_linux.c:565 ends32elf.c:432 -#: ends32elf16m.c:432 ends32elf_linux.c:565 enios2elf.c:598 enios2linux.c:739 -#: epruelf.c:317 escore3_elf.c:470 escore7_elf.c:470 eshelf.c:448 -#: eshelf_fd.c:478 eshelf_linux.c:478 eshelf_nbsd.c:448 eshelf_nto.c:448 -#: eshelf_uclinux.c:448 eshelf_vxworks.c:485 eshlelf.c:448 eshlelf_fd.c:478 -#: eshlelf_linux.c:478 eshlelf_nbsd.c:448 eshlelf_nto.c:448 -#: eshlelf_vxworks.c:485 ev850.c:343 ev850_rh850.c:343 +#: eaarch64cloudabi.c:796 eaarch64cloudabib.c:796 eaarch64elf.c:791 +#: eaarch64elf32.c:791 eaarch64elf32b.c:791 eaarch64elfb.c:791 +#: eaarch64fbsd.c:796 eaarch64fbsdb.c:796 eaarch64haiku.c:796 +#: eaarch64linux.c:796 eaarch64linux32.c:796 eaarch64linux32b.c:796 +#: eaarch64linuxb.c:796 earcelf.c:414 earclinux.c:474 earclinux_nps.c:474 +#: earcv2elf.c:292 earcv2elfx.c:292 earmelf.c:1022 earmelf_fbsd.c:1022 +#: earmelf_fuchsia.c:1027 earmelf_haiku.c:1027 earmelf_linux.c:1027 +#: earmelf_linux_eabi.c:1027 earmelf_linux_fdpiceabi.c:1027 +#: earmelf_nacl.c:1027 earmelf_nbsd.c:1022 earmelf_phoenix.c:1027 +#: earmelf_vxworks.c:1058 earmelfb.c:1022 earmelfb_fbsd.c:1022 +#: earmelfb_fuchsia.c:1027 earmelfb_linux.c:1027 earmelfb_linux_eabi.c:1027 +#: earmelfb_linux_fdpiceabi.c:1027 earmelfb_nacl.c:1027 earmelfb_nbsd.c:1022 +#: earmnto.c:997 eavr1.c:516 eavr2.c:516 eavr25.c:516 eavr3.c:516 eavr31.c:516 +#: eavr35.c:516 eavr4.c:516 eavr5.c:516 eavr51.c:516 eavr6.c:516 +#: eavrtiny.c:516 eavrxmega1.c:516 eavrxmega2.c:516 eavrxmega3.c:516 +#: eavrxmega4.c:516 eavrxmega5.c:516 eavrxmega6.c:516 eavrxmega7.c:516 +#: ecriself.c:307 ecrislinux.c:449 ecskyelf.c:551 ecskyelf_linux.c:718 +#: ed10velf.c:292 eelf32_sparc.c:474 eelf32_sparc_sol2.c:606 +#: eelf32_sparc_vxworks.c:511 eelf32_spu.c:1025 eelf32_tic6x_be.c:581 +#: eelf32_tic6x_elf_be.c:581 eelf32_tic6x_elf_le.c:581 eelf32_tic6x_le.c:581 +#: eelf32_tic6x_linux_be.c:581 eelf32_tic6x_linux_le.c:581 +#: eelf32_x86_64.c:5701 eelf32am33lin.c:444 eelf32b4300.c:689 eelf32bfin.c:462 +#: eelf32bfinfd.c:487 eelf32bmip.c:689 eelf32bmipn32.c:703 eelf32briscv.c:542 +#: eelf32briscv_ilp32.c:542 eelf32briscv_ilp32f.c:542 eelf32bsmip.c:703 +#: eelf32btsmip.c:689 eelf32btsmip_fbsd.c:689 eelf32btsmipn32.c:689 +#: eelf32btsmipn32_fbsd.c:689 eelf32cr16.c:442 eelf32crx.c:329 +#: eelf32ebmip.c:689 eelf32ebmipvxworks.c:724 eelf32elmip.c:689 +#: eelf32elmipvxworks.c:724 eelf32epiphany.c:307 eelf32epiphany_4x4.c:294 +#: eelf32frvfd.c:469 eelf32ip2k.c:307 eelf32l4300.c:689 eelf32lm32.c:307 +#: eelf32lm32fd.c:469 eelf32lmip.c:689 eelf32loongarch.c:524 eelf32lppc.c:743 +#: eelf32lppclinux.c:743 eelf32lppcnto.c:743 eelf32lppcsim.c:743 +#: eelf32lr5900.c:548 eelf32lr5900n32.c:547 eelf32lriscv.c:542 +#: eelf32lriscv_ilp32.c:542 eelf32lriscv_ilp32f.c:542 eelf32lsmip.c:689 +#: eelf32ltsmip.c:689 eelf32ltsmip_fbsd.c:689 eelf32ltsmipn32.c:689 +#: eelf32ltsmipn32_fbsd.c:689 eelf32m32c.c:318 eelf32mb_linux.c:474 +#: eelf32mbel_linux.c:474 eelf32mcore.c:313 eelf32mep.c:292 eelf32metag.c:723 +#: eelf32microblaze.c:292 eelf32microblazeel.c:292 eelf32mipswindiss.c:522 +#: eelf32moxie.c:307 eelf32or1k.c:308 eelf32or1k_linux.c:474 eelf32ppc.c:743 +#: eelf32ppc_fbsd.c:743 eelf32ppchaiku.c:743 eelf32ppclinux.c:743 +#: eelf32ppcnto.c:743 eelf32ppcsim.c:743 eelf32ppcvxworks.c:717 +#: eelf32ppcwindiss.c:743 eelf32rl78.c:307 eelf32rx.c:335 eelf32rx_linux.c:320 +#: eelf32tilegx.c:474 eelf32tilegx_be.c:474 eelf32tilepro.c:474 +#: eelf32vax.c:444 eelf32visium.c:292 eelf32xstormy16.c:303 +#: eelf32xtensa.c:2387 eelf32z80.c:319 eelf64_aix.c:444 eelf64_ia64.c:501 +#: eelf64_ia64_fbsd.c:501 eelf64_s390.c:544 eelf64_sparc.c:474 +#: eelf64_sparc_fbsd.c:474 eelf64_sparc_sol2.c:606 eelf64alpha.c:567 +#: eelf64alpha_fbsd.c:567 eelf64alpha_nbsd.c:567 eelf64bmip.c:703 +#: eelf64bpf.c:292 eelf64briscv.c:542 eelf64briscv_lp64.c:542 +#: eelf64briscv_lp64f.c:542 eelf64btsmip.c:689 eelf64btsmip_fbsd.c:689 +#: eelf64hppa.c:414 eelf64loongarch.c:524 eelf64lppc.c:1197 +#: eelf64lppc_fbsd.c:1197 eelf64lriscv.c:542 eelf64lriscv_lp64.c:542 +#: eelf64lriscv_lp64f.c:542 eelf64ltsmip.c:689 eelf64ltsmip_fbsd.c:689 +#: eelf64mmix.c:555 eelf64ppc.c:1197 eelf64ppc_fbsd.c:1197 eelf64rdos.c:499 +#: eelf64tilegx.c:474 eelf64tilegx_be.c:474 eelf_i386.c:5320 +#: eelf_i386_be.c:515 eelf_i386_fbsd.c:597 eelf_i386_haiku.c:597 +#: eelf_i386_ldso.c:530 eelf_i386_sol2.c:687 eelf_i386_vxworks.c:582 +#: eelf_iamcu.c:555 eelf_mipsel_haiku.c:689 eelf_s390.c:474 eelf_x86_64.c:5751 +#: eelf_x86_64_cloudabi.c:650 eelf_x86_64_fbsd.c:650 eelf_x86_64_haiku.c:650 +#: eelf_x86_64_sol2.c:782 eh8300elf.c:307 eh8300elf_linux.c:307 +#: eh8300helf.c:307 eh8300helf_linux.c:307 eh8300hnelf.c:307 eh8300self.c:307 +#: eh8300self_linux.c:307 eh8300snelf.c:307 eh8300sxelf.c:307 +#: eh8300sxelf_linux.c:307 eh8300sxnelf.c:307 ehppa64linux.c:444 +#: ehppaelf.c:575 ehppalinux.c:757 ehppanbsd.c:757 ehppaobsd.c:757 +#: ei386lynx.c:459 ei386moss.c:459 ei386nto.c:459 em32relf.c:307 +#: em32relf_linux.c:469 em32rlelf.c:307 em32rlelf_linux.c:469 +#: em68hc11elf.c:577 em68hc11elfb.c:577 em68hc12elf.c:577 em68hc12elfb.c:577 +#: em68kelf.c:631 em68kelfnbsd.c:631 emn10300.c:444 ends32belf.c:428 +#: ends32belf16m.c:428 ends32belf_linux.c:561 ends32elf.c:428 +#: ends32elf16m.c:428 ends32elf_linux.c:561 enios2elf.c:594 enios2linux.c:735 +#: epruelf.c:313 escore3_elf.c:466 escore7_elf.c:466 eshelf.c:444 +#: eshelf_fd.c:474 eshelf_linux.c:474 eshelf_nbsd.c:444 eshelf_nto.c:444 +#: eshelf_uclinux.c:444 eshelf_vxworks.c:481 eshlelf.c:444 eshlelf_fd.c:474 +#: eshlelf_linux.c:474 eshlelf_nbsd.c:444 eshlelf_nto.c:444 +#: eshlelf_vxworks.c:481 ev850.c:339 ev850_rh850.c:339 msgid "%P: warning: -z %s ignored\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 eaarch64haiku.c:834 -#: eaarch64linux.c:834 eaarch64linux32.c:834 eaarch64linux32b.c:834 -#: eaarch64linuxb.c:834 eaarch64nto.c:931 +#: eaarch64cloudabi.c:830 eaarch64cloudabib.c:830 eaarch64elf.c:825 +#: eaarch64elf32.c:825 eaarch64elf32b.c:825 eaarch64elfb.c:825 +#: eaarch64fbsd.c:830 eaarch64fbsdb.c:830 eaarch64haiku.c:830 +#: eaarch64linux.c:830 eaarch64linux32.c:830 eaarch64linux32b.c:830 +#: eaarch64linuxb.c:830 msgid "%P: error: unrecognized option for --fix-cortex-a53-843419: %s\n" msgstr "" +#: 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 earmelf.c:1159 earmelf_fbsd.c:1159 +#: earmelf_fuchsia.c:1164 earmelf_haiku.c:1164 earmelf_linux.c:1164 +#: earmelf_linux_eabi.c:1164 earmelf_linux_fdpiceabi.c:1164 +#: earmelf_nacl.c:1164 earmelf_nbsd.c:1159 earmelf_phoenix.c:1164 +#: earmelf_vxworks.c:1199 earmelfb.c:1159 earmelfb_fbsd.c:1159 +#: earmelfb_fuchsia.c:1164 earmelfb_linux.c:1164 earmelfb_linux_eabi.c:1164 +#: earmelfb_linux_fdpiceabi.c:1164 earmelfb_nacl.c:1164 earmelfb_nbsd.c:1159 +#: earmnto.c:1134 +#, c-format +msgid "" +" --no-enum-size-warning Don't warn about objects with incompatible\n" +" enum sizes\n" +msgstr "" + +#: eaarch64cloudabi.c:861 eaarch64cloudabib.c:861 eaarch64elf.c:856 +#: eaarch64elf32.c:856 eaarch64elf32b.c:856 eaarch64elfb.c:856 +#: eaarch64fbsd.c:861 eaarch64fbsdb.c:861 eaarch64haiku.c:861 +#: eaarch64linux.c:861 eaarch64linux32.c:861 eaarch64linux32b.c:861 +#: eaarch64linuxb.c:861 earmelf.c:1161 earmelf_fbsd.c:1161 +#: earmelf_fuchsia.c:1166 earmelf_haiku.c:1166 earmelf_linux.c:1166 +#: earmelf_linux_eabi.c:1166 earmelf_linux_fdpiceabi.c:1166 +#: earmelf_nacl.c:1166 earmelf_nbsd.c:1161 earmelf_phoenix.c:1166 +#: earmelf_vxworks.c:1201 earmelfb.c:1161 earmelfb_fbsd.c:1161 +#: earmelfb_fuchsia.c:1166 earmelfb_linux.c:1166 earmelfb_linux_eabi.c:1166 +#: earmelfb_linux_fdpiceabi.c:1166 earmelfb_nacl.c:1166 earmelfb_nbsd.c:1161 +#: earmnto.c:1136 +#, c-format +msgid "" +" --no-wchar-size-warning Don't warn about objects with incompatible\n" +" wchar_t sizes\n" +msgstr "" + #: eaarch64cloudabi.c:863 eaarch64cloudabib.c:863 eaarch64elf.c:858 #: eaarch64elf32.c:858 eaarch64elf32b.c:858 eaarch64elfb.c:858 #: eaarch64fbsd.c:863 eaarch64fbsdb.c:863 eaarch64haiku.c:863 #: eaarch64linux.c:863 eaarch64linux32.c:863 eaarch64linux32b.c:863 -#: eaarch64linuxb.c:863 eaarch64nto.c:976 earmelf.c:1163 earmelf_fbsd.c:1163 +#: eaarch64linuxb.c:863 earmelf.c:1163 earmelf_fbsd.c:1163 #: earmelf_fuchsia.c:1168 earmelf_haiku.c:1168 earmelf_linux.c:1168 #: earmelf_linux_eabi.c:1168 earmelf_linux_fdpiceabi.c:1168 #: earmelf_nacl.c:1168 earmelf_nbsd.c:1163 earmelf_phoenix.c:1168 @@ -4296,57 +4242,21 @@ msgstr "" #: earmnto.c:1138 #, c-format msgid "" -" --no-enum-size-warning Don't warn about objects with incompatible\n" -" enum sizes\n" -msgstr "" - -#: eaarch64cloudabi.c:865 eaarch64cloudabib.c:865 eaarch64elf.c:860 -#: eaarch64elf32.c:860 eaarch64elf32b.c:860 eaarch64elfb.c:860 -#: eaarch64fbsd.c:865 eaarch64fbsdb.c:865 eaarch64haiku.c:865 -#: eaarch64linux.c:865 eaarch64linux32.c:865 eaarch64linux32b.c:865 -#: eaarch64linuxb.c:865 eaarch64nto.c:978 earmelf.c:1165 earmelf_fbsd.c:1165 -#: earmelf_fuchsia.c:1170 earmelf_haiku.c:1170 earmelf_linux.c:1170 -#: earmelf_linux_eabi.c:1170 earmelf_linux_fdpiceabi.c:1170 -#: earmelf_nacl.c:1170 earmelf_nbsd.c:1165 earmelf_phoenix.c:1170 -#: earmelf_vxworks.c:1205 earmelfb.c:1165 earmelfb_fbsd.c:1165 -#: earmelfb_fuchsia.c:1170 earmelfb_linux.c:1170 earmelfb_linux_eabi.c:1170 -#: earmelfb_linux_fdpiceabi.c:1170 earmelfb_nacl.c:1170 earmelfb_nbsd.c:1165 -#: earmnto.c:1140 -#, c-format -msgid "" -" --no-wchar-size-warning Don't warn about objects with incompatible\n" -" wchar_t sizes\n" -msgstr "" - -#: eaarch64cloudabi.c:867 eaarch64cloudabib.c:867 eaarch64elf.c:862 -#: eaarch64elf32.c:862 eaarch64elf32b.c:862 eaarch64elfb.c:862 -#: eaarch64fbsd.c:867 eaarch64fbsdb.c:867 eaarch64haiku.c:867 -#: eaarch64linux.c:867 eaarch64linux32.c:867 eaarch64linux32b.c:867 -#: eaarch64linuxb.c:867 eaarch64nto.c:980 earmelf.c:1167 earmelf_fbsd.c:1167 -#: earmelf_fuchsia.c:1172 earmelf_haiku.c:1172 earmelf_linux.c:1172 -#: earmelf_linux_eabi.c:1172 earmelf_linux_fdpiceabi.c:1172 -#: earmelf_nacl.c:1172 earmelf_nbsd.c:1167 earmelf_phoenix.c:1172 -#: earmelf_vxworks.c:1207 earmelfb.c:1167 earmelfb_fbsd.c:1167 -#: earmelfb_fuchsia.c:1172 earmelfb_linux.c:1172 earmelfb_linux_eabi.c:1172 -#: earmelfb_linux_fdpiceabi.c:1172 earmelfb_nacl.c:1172 earmelfb_nbsd.c:1167 -#: earmnto.c:1142 -#, c-format -msgid "" " --pic-veneer Always generate PIC interworking veneers\n" msgstr "" -#: eaarch64cloudabi.c:868 eaarch64cloudabib.c:868 eaarch64elf.c:863 -#: eaarch64elf32.c:863 eaarch64elf32b.c:863 eaarch64elfb.c:863 -#: eaarch64fbsd.c:868 eaarch64fbsdb.c:868 eaarch64haiku.c:868 -#: eaarch64linux.c:868 eaarch64linux32.c:868 eaarch64linux32b.c:868 -#: eaarch64linuxb.c:868 eaarch64nto.c:981 earmelf.c:1174 earmelf_fbsd.c:1174 -#: earmelf_fuchsia.c:1179 earmelf_haiku.c:1179 earmelf_linux.c:1179 -#: earmelf_linux_eabi.c:1179 earmelf_linux_fdpiceabi.c:1179 -#: earmelf_nacl.c:1179 earmelf_nbsd.c:1174 earmelf_phoenix.c:1179 -#: earmelf_vxworks.c:1214 earmelfb.c:1174 earmelfb_fbsd.c:1174 -#: earmelfb_fuchsia.c:1179 earmelfb_linux.c:1179 earmelfb_linux_eabi.c:1179 -#: earmelfb_linux_fdpiceabi.c:1179 earmelfb_nacl.c:1179 earmelfb_nbsd.c:1174 -#: earmnto.c:1149 +#: eaarch64cloudabi.c:864 eaarch64cloudabib.c:864 eaarch64elf.c:859 +#: eaarch64elf32.c:859 eaarch64elf32b.c:859 eaarch64elfb.c:859 +#: eaarch64fbsd.c:864 eaarch64fbsdb.c:864 eaarch64haiku.c:864 +#: eaarch64linux.c:864 eaarch64linux32.c:864 eaarch64linux32b.c:864 +#: eaarch64linuxb.c:864 earmelf.c:1170 earmelf_fbsd.c:1170 +#: earmelf_fuchsia.c:1175 earmelf_haiku.c:1175 earmelf_linux.c:1175 +#: earmelf_linux_eabi.c:1175 earmelf_linux_fdpiceabi.c:1175 +#: earmelf_nacl.c:1175 earmelf_nbsd.c:1170 earmelf_phoenix.c:1175 +#: earmelf_vxworks.c:1210 earmelfb.c:1170 earmelfb_fbsd.c:1170 +#: earmelfb_fuchsia.c:1175 earmelfb_linux.c:1175 earmelfb_linux_eabi.c:1175 +#: earmelfb_linux_fdpiceabi.c:1175 earmelfb_nacl.c:1175 earmelfb_nbsd.c:1170 +#: earmnto.c:1145 #, c-format msgid "" " --stub-group-size=N Maximum size of a group of input sections " @@ -4363,20 +4273,20 @@ msgid "" " choose suitable defaults.\n" msgstr "" -#: eaarch64cloudabi.c:877 eaarch64cloudabib.c:877 eaarch64elf.c:872 -#: eaarch64elf32.c:872 eaarch64elf32b.c:872 eaarch64elfb.c:872 -#: eaarch64fbsd.c:877 eaarch64fbsdb.c:877 eaarch64haiku.c:877 -#: eaarch64linux.c:877 eaarch64linux32.c:877 eaarch64linux32b.c:877 -#: eaarch64linuxb.c:877 eaarch64nto.c:990 +#: eaarch64cloudabi.c:873 eaarch64cloudabib.c:873 eaarch64elf.c:868 +#: eaarch64elf32.c:868 eaarch64elf32b.c:868 eaarch64elfb.c:868 +#: eaarch64fbsd.c:873 eaarch64fbsdb.c:873 eaarch64haiku.c:873 +#: eaarch64linux.c:873 eaarch64linux32.c:873 eaarch64linux32b.c:873 +#: eaarch64linuxb.c:873 #, c-format msgid " --fix-cortex-a53-835769 Fix erratum 835769\n" msgstr "" -#: eaarch64cloudabi.c:878 eaarch64cloudabib.c:878 eaarch64elf.c:873 -#: eaarch64elf32.c:873 eaarch64elf32b.c:873 eaarch64elfb.c:873 -#: eaarch64fbsd.c:878 eaarch64fbsdb.c:878 eaarch64haiku.c:878 -#: eaarch64linux.c:878 eaarch64linux32.c:878 eaarch64linux32b.c:878 -#: eaarch64linuxb.c:878 eaarch64nto.c:991 +#: eaarch64cloudabi.c:874 eaarch64cloudabib.c:874 eaarch64elf.c:869 +#: eaarch64elf32.c:869 eaarch64elf32b.c:869 eaarch64elfb.c:869 +#: eaarch64fbsd.c:874 eaarch64fbsdb.c:874 eaarch64haiku.c:874 +#: eaarch64linux.c:874 eaarch64linux32.c:874 eaarch64linux32b.c:874 +#: eaarch64linuxb.c:874 #, c-format msgid "" " --fix-cortex-a53-843419[=full|adr|adrp] Fix erratum 843419 and " @@ -4401,22 +4311,22 @@ msgid "" "you both a performance and size overhead.\n" msgstr "" -#: eaarch64cloudabi.c:889 eaarch64cloudabib.c:889 eaarch64elf.c:884 -#: eaarch64elf32.c:884 eaarch64elf32b.c:884 eaarch64elfb.c:884 -#: eaarch64fbsd.c:889 eaarch64fbsdb.c:889 eaarch64haiku.c:889 -#: eaarch64linux.c:889 eaarch64linux32.c:889 eaarch64linux32b.c:889 -#: eaarch64linuxb.c:889 eaarch64nto.c:1002 +#: eaarch64cloudabi.c:885 eaarch64cloudabib.c:885 eaarch64elf.c:880 +#: eaarch64elf32.c:880 eaarch64elf32b.c:880 eaarch64elfb.c:880 +#: eaarch64fbsd.c:885 eaarch64fbsdb.c:885 eaarch64haiku.c:885 +#: eaarch64linux.c:885 eaarch64linux32.c:885 eaarch64linux32b.c:885 +#: eaarch64linuxb.c:885 #, c-format msgid "" " --no-apply-dynamic-relocs Do not apply link-time values for dynamic " "relocations\n" msgstr "" -#: eaarch64cloudabi.c:890 eaarch64cloudabib.c:890 eaarch64elf.c:885 -#: eaarch64elf32.c:885 eaarch64elf32b.c:885 eaarch64elfb.c:885 -#: eaarch64fbsd.c:890 eaarch64fbsdb.c:890 eaarch64haiku.c:890 -#: eaarch64linux.c:890 eaarch64linux32.c:890 eaarch64linux32b.c:890 -#: eaarch64linuxb.c:890 eaarch64nto.c:1003 +#: eaarch64cloudabi.c:886 eaarch64cloudabib.c:886 eaarch64elf.c:881 +#: eaarch64elf32.c:881 eaarch64elf32b.c:881 eaarch64elfb.c:881 +#: eaarch64fbsd.c:886 eaarch64fbsdb.c:886 eaarch64haiku.c:886 +#: eaarch64linux.c:886 eaarch64linux32.c:886 eaarch64linux32b.c:886 +#: eaarch64linuxb.c:886 #, c-format msgid "" " -z force-bti Turn on Branch Target Identification " @@ -4424,251 +4334,232 @@ msgid "" "inputs\n" msgstr "" -#: eaarch64cloudabi.c:891 eaarch64cloudabib.c:891 eaarch64elf.c:886 -#: eaarch64elf32.c:886 eaarch64elf32b.c:886 eaarch64elfb.c:886 -#: eaarch64fbsd.c:891 eaarch64fbsdb.c:891 eaarch64haiku.c:891 -#: eaarch64linux.c:891 eaarch64linux32.c:891 eaarch64linux32b.c:891 -#: eaarch64linuxb.c:891 eaarch64nto.c:1004 +#: eaarch64cloudabi.c:887 eaarch64cloudabib.c:887 eaarch64elf.c:882 +#: eaarch64elf32.c:882 eaarch64elf32b.c:882 eaarch64elfb.c:882 +#: eaarch64fbsd.c:887 eaarch64fbsdb.c:887 eaarch64haiku.c:887 +#: eaarch64linux.c:887 eaarch64linux32.c:887 eaarch64linux32b.c:887 +#: eaarch64linuxb.c:887 #, c-format msgid "" " -z pac-plt Protect PLTs with Pointer Authentication.\n" msgstr "" -#: eaarch64nto.c:405 -msgid "%F%P: cannot create .note section in stub BFD.\n" -msgstr "" - -#: eaarch64nto.c:411 -msgid "%F%P: error: --lazy-stack must follow -zstack-size=\n" -msgstr "" - -#: eaarch64nto.c:420 -msgid "%F%P: failed to create .note section\n" -msgstr "" - -#: eaarch64nto.c:1006 -#, c-format -msgid "" -" --stack Set size of the initial stack\n" -" --lazy-stack\t\t Set lazy allocation of stack\n" -msgstr "" - -#: eaarch64pe.c:423 earm64pe.c:423 earm_wince_pe.c:416 earmpe.c:416 -#: ei386pe.c:416 ei386pe_posix.c:416 ei386pep.c:423 emcorepe.c:416 eshpe.c:416 +#: eaarch64pe.c:424 earm64pe.c:424 earm_wince_pe.c:414 earmpe.c:414 +#: ei386pe.c:414 ei386pe_posix.c:414 ei386pep.c:424 emcorepe.c:414 eshpe.c:414 #, c-format msgid "" " --base_file Generate a base file for relocatable " "DLLs\n" msgstr "" -#: eaarch64pe.c:424 earm64pe.c:424 earm_wince_pe.c:417 earmpe.c:417 -#: ei386pe.c:417 ei386pe_posix.c:417 ei386pep.c:424 emcorepe.c:417 eshpe.c:417 +#: eaarch64pe.c:425 earm64pe.c:425 earm_wince_pe.c:415 earmpe.c:415 +#: ei386pe.c:415 ei386pe_posix.c:415 ei386pep.c:425 emcorepe.c:415 eshpe.c:415 #, c-format msgid "" " --dll Set image base to the default for DLLs\n" msgstr "" -#: eaarch64pe.c:425 earm64pe.c:425 earm_wince_pe.c:418 earmpe.c:418 -#: ei386pe.c:418 ei386pe_posix.c:418 ei386pep.c:425 emcorepe.c:418 eshpe.c:418 +#: eaarch64pe.c:426 earm64pe.c:426 earm_wince_pe.c:416 earmpe.c:416 +#: ei386pe.c:416 ei386pe_posix.c:416 ei386pep.c:426 emcorepe.c:416 eshpe.c:416 #, c-format msgid " --file-alignment Set file alignment\n" msgstr "" -#: eaarch64pe.c:426 earm64pe.c:426 earm_wince_pe.c:419 earmpe.c:419 -#: ei386pe.c:419 ei386pe_posix.c:419 ei386pep.c:426 emcorepe.c:419 eshpe.c:419 +#: eaarch64pe.c:427 earm64pe.c:427 earm_wince_pe.c:417 earmpe.c:417 +#: ei386pe.c:417 ei386pe_posix.c:417 ei386pep.c:427 emcorepe.c:417 eshpe.c:417 #, c-format msgid " --heap Set initial size of the heap\n" msgstr "" -#: eaarch64pe.c:427 earm64pe.c:427 earm_wince_pe.c:420 earmpe.c:420 -#: ei386pe.c:420 ei386pe_posix.c:420 ei386pep.c:427 emcorepe.c:420 eshpe.c:420 +#: eaarch64pe.c:428 earm64pe.c:428 earm_wince_pe.c:418 earmpe.c:418 +#: ei386pe.c:418 ei386pe_posix.c:418 ei386pep.c:428 emcorepe.c:418 eshpe.c:418 #, c-format msgid "" " --image-base
Set start address of the executable\n" msgstr "" -#: eaarch64pe.c:428 earm64pe.c:428 earm_wince_pe.c:421 earmpe.c:421 -#: ei386pe.c:421 ei386pe_posix.c:421 ei386pep.c:428 emcorepe.c:421 eshpe.c:421 +#: eaarch64pe.c:429 earm64pe.c:429 earm_wince_pe.c:419 earmpe.c:419 +#: ei386pe.c:419 ei386pe_posix.c:419 ei386pep.c:429 emcorepe.c:419 eshpe.c:419 #, c-format msgid "" " --major-image-version Set version number of the executable\n" msgstr "" -#: eaarch64pe.c:429 earm64pe.c:429 earm_wince_pe.c:422 earmpe.c:422 -#: ei386pe.c:422 ei386pe_posix.c:422 ei386pep.c:429 emcorepe.c:422 eshpe.c:422 +#: eaarch64pe.c:430 earm64pe.c:430 earm_wince_pe.c:420 earmpe.c:420 +#: ei386pe.c:420 ei386pe_posix.c:420 ei386pep.c:430 emcorepe.c:420 eshpe.c:420 #, c-format msgid " --major-os-version Set minimum required OS version\n" msgstr "" -#: eaarch64pe.c:430 earm64pe.c:430 earm_wince_pe.c:423 earmpe.c:423 -#: ei386pe.c:423 ei386pe_posix.c:423 ei386pep.c:430 emcorepe.c:423 eshpe.c:423 +#: eaarch64pe.c:431 earm64pe.c:431 earm_wince_pe.c:421 earmpe.c:421 +#: ei386pe.c:421 ei386pe_posix.c:421 ei386pep.c:431 emcorepe.c:421 eshpe.c:421 #, c-format msgid "" " --major-subsystem-version Set minimum required OS subsystem " "version\n" msgstr "" -#: eaarch64pe.c:431 earm64pe.c:431 earm_wince_pe.c:424 earmpe.c:424 -#: ei386pe.c:424 ei386pe_posix.c:424 ei386pep.c:431 emcorepe.c:424 eshpe.c:424 +#: eaarch64pe.c:432 earm64pe.c:432 earm_wince_pe.c:422 earmpe.c:422 +#: ei386pe.c:422 ei386pe_posix.c:422 ei386pep.c:432 emcorepe.c:422 eshpe.c:422 #, c-format msgid "" " --minor-image-version Set revision number of the executable\n" msgstr "" -#: eaarch64pe.c:432 earm64pe.c:432 earm_wince_pe.c:425 earmpe.c:425 -#: ei386pe.c:425 ei386pe_posix.c:425 ei386pep.c:432 emcorepe.c:425 eshpe.c:425 +#: eaarch64pe.c:433 earm64pe.c:433 earm_wince_pe.c:423 earmpe.c:423 +#: ei386pe.c:423 ei386pe_posix.c:423 ei386pep.c:433 emcorepe.c:423 eshpe.c:423 #, c-format msgid " --minor-os-version Set minimum required OS revision\n" msgstr "" -#: eaarch64pe.c:433 earm64pe.c:433 earm_wince_pe.c:426 earmpe.c:426 -#: ei386pe.c:426 ei386pe_posix.c:426 ei386pep.c:433 emcorepe.c:426 eshpe.c:426 +#: eaarch64pe.c:434 earm64pe.c:434 earm_wince_pe.c:424 earmpe.c:424 +#: ei386pe.c:424 ei386pe_posix.c:424 ei386pep.c:434 emcorepe.c:424 eshpe.c:424 #, c-format msgid "" " --minor-subsystem-version Set minimum required OS subsystem " "revision\n" msgstr "" -#: eaarch64pe.c:434 earm64pe.c:434 earm_wince_pe.c:427 earmpe.c:427 -#: ei386pe.c:427 ei386pe_posix.c:427 ei386pep.c:434 emcorepe.c:427 eshpe.c:427 +#: eaarch64pe.c:435 earm64pe.c:435 earm_wince_pe.c:425 earmpe.c:425 +#: ei386pe.c:425 ei386pe_posix.c:425 ei386pep.c:435 emcorepe.c:425 eshpe.c:425 #, c-format msgid " --section-alignment Set section alignment\n" msgstr "" -#: eaarch64pe.c:435 earm64pe.c:435 earm_wince_pe.c:428 earmpe.c:428 -#: ei386pe.c:428 ei386pe_posix.c:428 ei386pep.c:435 emcorepe.c:428 eshpe.c:428 +#: eaarch64pe.c:436 earm64pe.c:436 earm_wince_pe.c:426 earmpe.c:426 +#: ei386pe.c:426 ei386pe_posix.c:426 ei386pep.c:436 emcorepe.c:426 eshpe.c:426 #, c-format msgid " --stack Set size of the initial stack\n" msgstr "" -#: eaarch64pe.c:436 earm64pe.c:436 earm_wince_pe.c:429 earmpe.c:429 -#: ei386pe.c:429 ei386pe_posix.c:429 ei386pep.c:436 emcorepe.c:429 eshpe.c:429 +#: eaarch64pe.c:437 earm64pe.c:437 earm_wince_pe.c:427 earmpe.c:427 +#: ei386pe.c:427 ei386pe_posix.c:427 ei386pep.c:437 emcorepe.c:427 eshpe.c:427 #, c-format msgid "" " --subsystem [:] Set required OS subsystem [& version]\n" msgstr "" -#: eaarch64pe.c:437 earm64pe.c:437 earm_wince_pe.c:430 earmpe.c:430 -#: ei386pe.c:430 ei386pe_posix.c:430 ei386pep.c:437 emcorepe.c:430 eshpe.c:430 +#: eaarch64pe.c:438 earm64pe.c:438 earm_wince_pe.c:428 earmpe.c:428 +#: ei386pe.c:428 ei386pe_posix.c:428 ei386pep.c:438 emcorepe.c:428 eshpe.c:428 #, c-format msgid "" " --support-old-code Support interworking with old code\n" msgstr "" -#: eaarch64pe.c:438 earm64pe.c:438 earm_wince_pe.c:431 earmpe.c:431 -#: ei386pe.c:431 ei386pe_posix.c:431 ei386pep.c:438 emcorepe.c:431 eshpe.c:431 +#: eaarch64pe.c:439 earm64pe.c:439 earm_wince_pe.c:429 earmpe.c:429 +#: ei386pe.c:429 ei386pe_posix.c:429 ei386pep.c:439 emcorepe.c:429 eshpe.c:429 #, c-format msgid "" " --[no-]leading-underscore Set explicit symbol underscore prefix " "mode\n" msgstr "" -#: eaarch64pe.c:439 earm64pe.c:439 ei386pep.c:439 +#: eaarch64pe.c:440 earm64pe.c:440 ei386pep.c:440 #, c-format msgid "" " --[no-]insert-timestamp Use a real timestamp rather than zero " "(default)\n" msgstr "" -#: eaarch64pe.c:440 earm64pe.c:440 earm_wince_pe.c:434 earmpe.c:434 -#: ei386pe.c:434 ei386pe_posix.c:434 ei386pep.c:440 emcorepe.c:434 eshpe.c:434 +#: eaarch64pe.c:441 earm64pe.c:441 earm_wince_pe.c:432 earmpe.c:432 +#: ei386pe.c:432 ei386pe_posix.c:432 ei386pep.c:441 emcorepe.c:432 eshpe.c:432 #, c-format msgid "" " This makes binaries non-deterministic\n" msgstr "" -#: eaarch64pe.c:442 earm64pe.c:442 earm_wince_pe.c:436 earmpe.c:436 -#: ei386pe.c:436 ei386pe_posix.c:436 ei386pep.c:442 emcorepe.c:436 eshpe.c:436 +#: eaarch64pe.c:443 earm64pe.c:443 earm_wince_pe.c:434 earmpe.c:434 +#: ei386pe.c:434 ei386pe_posix.c:434 ei386pep.c:443 emcorepe.c:434 eshpe.c:434 #, c-format msgid "" " --add-stdcall-alias Export symbols with and without @nn\n" msgstr "" -#: eaarch64pe.c:443 earm64pe.c:443 earm_wince_pe.c:437 earmpe.c:437 -#: ei386pe.c:437 ei386pe_posix.c:437 ei386pep.c:443 emcorepe.c:437 eshpe.c:437 +#: eaarch64pe.c:444 earm64pe.c:444 earm_wince_pe.c:435 earmpe.c:435 +#: ei386pe.c:435 ei386pe_posix.c:435 ei386pep.c:444 emcorepe.c:435 eshpe.c:435 #, c-format msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n" msgstr "" -#: eaarch64pe.c:444 earm64pe.c:444 earm_wince_pe.c:438 earmpe.c:438 -#: ei386pe.c:438 ei386pe_posix.c:438 ei386pep.c:444 emcorepe.c:438 eshpe.c:438 +#: eaarch64pe.c:445 earm64pe.c:445 earm_wince_pe.c:436 earmpe.c:436 +#: ei386pe.c:436 ei386pe_posix.c:436 ei386pep.c:445 emcorepe.c:436 eshpe.c:436 #, c-format msgid "" " --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n" msgstr "" -#: eaarch64pe.c:445 earm64pe.c:445 earm_wince_pe.c:439 earmpe.c:439 -#: ei386pe.c:439 ei386pe_posix.c:439 ei386pep.c:445 emcorepe.c:439 eshpe.c:439 +#: eaarch64pe.c:446 earm64pe.c:446 earm_wince_pe.c:437 earmpe.c:437 +#: ei386pe.c:437 ei386pe_posix.c:437 ei386pep.c:446 emcorepe.c:437 eshpe.c:437 #, c-format msgid "" " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n" msgstr "" -#: eaarch64pe.c:446 earm64pe.c:446 earm_wince_pe.c:440 earmpe.c:440 -#: ei386pe.c:440 ei386pe_posix.c:440 ei386pep.c:446 emcorepe.c:440 eshpe.c:440 +#: eaarch64pe.c:447 earm64pe.c:447 earm_wince_pe.c:438 earmpe.c:438 +#: ei386pe.c:438 ei386pe_posix.c:438 ei386pep.c:447 emcorepe.c:438 eshpe.c:438 #, c-format msgid "" " --exclude-all-symbols Exclude all symbols from automatic " "export\n" msgstr "" -#: eaarch64pe.c:447 earm64pe.c:447 earm_wince_pe.c:441 earmpe.c:441 -#: ei386pe.c:441 ei386pe_posix.c:441 ei386pep.c:447 emcorepe.c:441 eshpe.c:441 +#: eaarch64pe.c:448 earm64pe.c:448 earm_wince_pe.c:439 earmpe.c:439 +#: ei386pe.c:439 ei386pe_posix.c:439 ei386pep.c:448 emcorepe.c:439 eshpe.c:439 #, c-format msgid "" " --exclude-libs lib,lib,... Exclude libraries from automatic " "export\n" msgstr "" -#: eaarch64pe.c:448 earm64pe.c:448 earm_wince_pe.c:442 earmpe.c:442 -#: ei386pe.c:442 ei386pe_posix.c:442 ei386pep.c:448 emcorepe.c:442 eshpe.c:442 +#: eaarch64pe.c:449 earm64pe.c:449 earm_wince_pe.c:440 earmpe.c:440 +#: ei386pe.c:440 ei386pe_posix.c:440 ei386pep.c:449 emcorepe.c:440 eshpe.c:440 #, c-format msgid " --exclude-modules-for-implib mod,mod,...\n" msgstr "" -#: eaarch64pe.c:449 earm64pe.c:449 earm_wince_pe.c:443 earmpe.c:443 -#: ei386pe.c:443 ei386pe_posix.c:443 ei386pep.c:449 emcorepe.c:443 eshpe.c:443 +#: eaarch64pe.c:450 earm64pe.c:450 earm_wince_pe.c:441 earmpe.c:441 +#: ei386pe.c:441 ei386pe_posix.c:441 ei386pep.c:450 emcorepe.c:441 eshpe.c:441 #, c-format msgid "" " Exclude objects, archive members from " "auto\n" msgstr "" -#: eaarch64pe.c:450 earm64pe.c:450 ei386pep.c:450 +#: eaarch64pe.c:451 earm64pe.c:451 ei386pep.c:451 #, c-format msgid "" " export, place into import library " "instead\n" msgstr "" -#: eaarch64pe.c:451 earm64pe.c:451 earm_wince_pe.c:445 earmpe.c:445 -#: ei386pe.c:445 ei386pe_posix.c:445 ei386pep.c:451 emcorepe.c:445 eshpe.c:445 +#: eaarch64pe.c:452 earm64pe.c:452 earm_wince_pe.c:443 earmpe.c:443 +#: ei386pe.c:443 ei386pe_posix.c:443 ei386pep.c:452 emcorepe.c:443 eshpe.c:443 #, c-format msgid "" " --export-all-symbols Automatically export all globals to " "DLL\n" msgstr "" -#: eaarch64pe.c:452 earm64pe.c:452 earm_wince_pe.c:446 earmpe.c:446 -#: ei386pe.c:446 ei386pe_posix.c:446 ei386pep.c:452 emcorepe.c:446 eshpe.c:446 +#: eaarch64pe.c:453 earm64pe.c:453 earm_wince_pe.c:444 earmpe.c:444 +#: ei386pe.c:444 ei386pe_posix.c:444 ei386pep.c:453 emcorepe.c:444 eshpe.c:444 #, c-format msgid " --kill-at Remove @nn from exported symbols\n" msgstr "" -#: eaarch64pe.c:453 earm64pe.c:453 earm_wince_pe.c:447 earmpe.c:447 -#: ei386pe.c:447 ei386pe_posix.c:447 ei386pep.c:453 emcorepe.c:447 eshpe.c:447 +#: eaarch64pe.c:454 earm64pe.c:454 earm_wince_pe.c:445 earmpe.c:445 +#: ei386pe.c:445 ei386pe_posix.c:445 ei386pep.c:454 emcorepe.c:445 eshpe.c:445 #, c-format msgid "" " --output-def Generate a .DEF file for the built DLL\n" msgstr "" -#: eaarch64pe.c:454 earm64pe.c:454 earm_wince_pe.c:448 earmpe.c:448 -#: ei386pe.c:448 ei386pe_posix.c:448 ei386pep.c:454 emcorepe.c:448 eshpe.c:448 +#: eaarch64pe.c:455 earm64pe.c:455 earm_wince_pe.c:446 earmpe.c:446 +#: ei386pe.c:446 ei386pe_posix.c:446 ei386pep.c:455 emcorepe.c:446 eshpe.c:446 #, c-format msgid " --warn-duplicate-exports Warn about duplicate exports\n" msgstr "" -#: eaarch64pe.c:455 earm64pe.c:455 ei386pep.c:455 +#: eaarch64pe.c:456 earm64pe.c:456 ei386pep.c:456 #, c-format msgid "" " --compat-implib Create backward compatible import " @@ -4676,7 +4567,7 @@ msgid "" " create __imp_ as well\n" msgstr "" -#: eaarch64pe.c:456 earm64pe.c:456 ei386pep.c:456 +#: eaarch64pe.c:457 earm64pe.c:457 ei386pep.c:457 #, c-format msgid "" " --enable-auto-image-base Automatically choose image base for " @@ -4684,15 +4575,15 @@ msgid "" " unless user specifies one\n" msgstr "" -#: eaarch64pe.c:457 earm64pe.c:457 ei386pep.c:457 +#: eaarch64pe.c:458 earm64pe.c:458 ei386pep.c:458 #, c-format msgid "" " --disable-auto-image-base Do not auto-choose image base " "(default)\n" msgstr "" -#: eaarch64pe.c:458 earm64pe.c:458 earm_wince_pe.c:452 earmpe.c:452 -#: ei386pe.c:452 ei386pe_posix.c:452 ei386pep.c:458 emcorepe.c:452 eshpe.c:452 +#: eaarch64pe.c:459 earm64pe.c:459 earm_wince_pe.c:450 earmpe.c:450 +#: ei386pe.c:450 ei386pe_posix.c:450 ei386pep.c:459 emcorepe.c:450 eshpe.c:450 #, c-format msgid "" " --dll-search-prefix= When linking dynamically to a dll " @@ -4702,23 +4593,23 @@ msgid "" " in preference to lib.dll \n" msgstr "" -#: eaarch64pe.c:459 earm64pe.c:459 earm_wince_pe.c:453 earmpe.c:453 -#: ei386pe.c:453 ei386pe_posix.c:453 ei386pep.c:459 emcorepe.c:453 eshpe.c:453 +#: eaarch64pe.c:460 earm64pe.c:460 earm_wince_pe.c:451 earmpe.c:451 +#: ei386pe.c:451 ei386pe_posix.c:451 ei386pep.c:460 emcorepe.c:451 eshpe.c:451 #, c-format msgid "" " --enable-auto-import Do sophisticated linking of _sym to\n" " __imp_sym for DATA references\n" msgstr "" -#: eaarch64pe.c:460 earm64pe.c:460 earm_wince_pe.c:454 earmpe.c:454 -#: ei386pe.c:454 ei386pe_posix.c:454 ei386pep.c:460 emcorepe.c:454 eshpe.c:454 +#: eaarch64pe.c:461 earm64pe.c:461 earm_wince_pe.c:452 earmpe.c:452 +#: ei386pe.c:452 ei386pe_posix.c:452 ei386pep.c:461 emcorepe.c:452 eshpe.c:452 #, c-format msgid "" " --disable-auto-import Do not auto-import DATA items from " "DLLs\n" msgstr "" -#: eaarch64pe.c:461 earm64pe.c:461 ei386pep.c:461 +#: eaarch64pe.c:462 earm64pe.c:462 ei386pep.c:462 #, c-format msgid "" " --enable-runtime-pseudo-reloc Work around auto-import limitations by\n" @@ -4727,7 +4618,7 @@ msgid "" " runtime\n" msgstr "" -#: eaarch64pe.c:462 earm64pe.c:462 ei386pep.c:462 +#: eaarch64pe.c:463 earm64pe.c:463 ei386pep.c:463 #, c-format msgid "" " --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations " @@ -4735,7 +4626,7 @@ msgid "" " auto-imported DATA\n" msgstr "" -#: eaarch64pe.c:463 earm64pe.c:463 ei386pep.c:463 +#: eaarch64pe.c:464 earm64pe.c:464 ei386pep.c:464 #, c-format msgid "" " --enable-extra-pep-debug Enable verbose debug output when " @@ -4744,16 +4635,16 @@ msgid "" "import)\n" msgstr "" -#: eaarch64pe.c:464 earm64pe.c:464 earm_wince_pe.c:461 earmpe.c:461 -#: ei386pe.c:461 ei386pe_posix.c:461 ei386pep.c:464 emcorepe.c:461 eshpe.c:461 +#: eaarch64pe.c:465 earm64pe.c:465 earm_wince_pe.c:459 earmpe.c:459 +#: ei386pe.c:459 ei386pe_posix.c:459 ei386pep.c:465 emcorepe.c:459 eshpe.c:459 #, c-format msgid "" " --enable-long-section-names Use long COFF section names even in\n" " executable image files\n" msgstr "" -#: eaarch64pe.c:465 earm64pe.c:465 earm_wince_pe.c:462 earmpe.c:462 -#: ei386pe.c:462 ei386pe_posix.c:462 ei386pep.c:465 emcorepe.c:462 eshpe.c:462 +#: eaarch64pe.c:466 earm64pe.c:466 earm_wince_pe.c:460 earmpe.c:460 +#: ei386pe.c:460 ei386pe_posix.c:460 ei386pep.c:466 emcorepe.c:460 eshpe.c:460 #, c-format msgid "" " --disable-long-section-names Never use long COFF section names, " @@ -4761,7 +4652,7 @@ msgid "" " in object files\n" msgstr "" -#: eaarch64pe.c:466 earm64pe.c:466 ei386pep.c:466 +#: eaarch64pe.c:467 earm64pe.c:467 ei386pep.c:467 #, c-format msgid "" " --[disable-]high-entropy-va Image is compatible with 64-bit address " @@ -4769,8 +4660,8 @@ msgid "" " layout randomization (ASLR)\n" msgstr "" -#: eaarch64pe.c:467 earm64pe.c:467 earm_wince_pe.c:463 earmpe.c:463 -#: ei386pe.c:463 ei386pe_posix.c:463 ei386pep.c:467 emcorepe.c:463 eshpe.c:463 +#: eaarch64pe.c:468 earm64pe.c:468 earm_wince_pe.c:461 earmpe.c:461 +#: ei386pe.c:461 ei386pe_posix.c:461 ei386pep.c:468 emcorepe.c:461 eshpe.c:461 #, c-format msgid "" " --[disable-]dynamicbase Image base address may be relocated " @@ -4779,29 +4670,29 @@ msgid "" "(ASLR)\n" msgstr "" -#: eaarch64pe.c:468 earm64pe.c:468 earm_wince_pe.c:464 earmpe.c:464 -#: ei386pe.c:464 ei386pe_posix.c:464 ei386pep.c:468 emcorepe.c:464 eshpe.c:464 +#: eaarch64pe.c:469 earm64pe.c:469 earm_wince_pe.c:462 earmpe.c:462 +#: ei386pe.c:462 ei386pe_posix.c:462 ei386pep.c:469 emcorepe.c:462 eshpe.c:462 #, c-format msgid " --enable-reloc-section Create the base relocation table\n" msgstr "" -#: eaarch64pe.c:469 earm64pe.c:469 earm_wince_pe.c:465 earmpe.c:465 -#: ei386pe.c:465 ei386pe_posix.c:465 ei386pep.c:469 emcorepe.c:465 eshpe.c:465 +#: eaarch64pe.c:470 earm64pe.c:470 earm_wince_pe.c:463 earmpe.c:463 +#: ei386pe.c:463 ei386pe_posix.c:463 ei386pep.c:470 emcorepe.c:463 eshpe.c:463 #, c-format msgid "" " --disable-reloc-section Do not create the base relocation " "table\n" msgstr "" -#: eaarch64pe.c:470 earm64pe.c:470 earm_wince_pe.c:466 earmpe.c:466 -#: ei386pe.c:466 ei386pe_posix.c:466 ei386pep.c:470 emcorepe.c:466 eshpe.c:466 +#: eaarch64pe.c:471 earm64pe.c:471 earm_wince_pe.c:464 earmpe.c:464 +#: ei386pe.c:464 ei386pe_posix.c:464 ei386pep.c:471 emcorepe.c:464 eshpe.c:464 #, c-format msgid "" " --[disable-]forceinteg Code integrity checks are enforced\n" msgstr "" -#: eaarch64pe.c:471 earm64pe.c:471 earm_wince_pe.c:467 earmpe.c:467 -#: ei386pe.c:467 ei386pe_posix.c:467 ei386pep.c:471 emcorepe.c:467 eshpe.c:467 +#: eaarch64pe.c:472 earm64pe.c:472 earm_wince_pe.c:465 earmpe.c:465 +#: ei386pe.c:465 ei386pe_posix.c:465 ei386pep.c:472 emcorepe.c:465 eshpe.c:465 #, c-format msgid "" " --[disable-]nxcompat Image is compatible with data " @@ -4809,15 +4700,15 @@ msgid "" " prevention\n" msgstr "" -#: eaarch64pe.c:472 earm64pe.c:472 earm_wince_pe.c:468 earmpe.c:468 -#: ei386pe.c:468 ei386pe_posix.c:468 ei386pep.c:472 emcorepe.c:468 eshpe.c:468 +#: eaarch64pe.c:473 earm64pe.c:473 earm_wince_pe.c:466 earmpe.c:466 +#: ei386pe.c:466 ei386pe_posix.c:466 ei386pep.c:473 emcorepe.c:466 eshpe.c:466 #, c-format msgid "" " --[disable-]no-isolation Image understands isolation but do not\n" " isolate the image\n" msgstr "" -#: eaarch64pe.c:473 earm64pe.c:473 ei386pep.c:473 +#: eaarch64pe.c:474 earm64pe.c:474 ei386pep.c:474 #, c-format msgid "" " --[disable-]no-seh Image does not use SEH; no SE handler " @@ -4825,129 +4716,123 @@ msgid "" " be called in this image\n" msgstr "" -#: eaarch64pe.c:474 earm64pe.c:474 earm_wince_pe.c:470 earmpe.c:470 -#: ei386pe.c:470 ei386pe_posix.c:470 ei386pep.c:474 emcorepe.c:470 eshpe.c:470 +#: eaarch64pe.c:475 earm64pe.c:475 earm_wince_pe.c:468 earmpe.c:468 +#: ei386pe.c:468 ei386pe_posix.c:468 ei386pep.c:475 emcorepe.c:468 eshpe.c:468 #, c-format msgid " --[disable-]no-bind Do not bind this image\n" msgstr "" -#: eaarch64pe.c:475 earm64pe.c:475 earm_wince_pe.c:471 earmpe.c:471 -#: ei386pe.c:471 ei386pe_posix.c:471 ei386pep.c:475 emcorepe.c:471 eshpe.c:471 +#: eaarch64pe.c:476 earm64pe.c:476 earm_wince_pe.c:469 earmpe.c:469 +#: ei386pe.c:469 ei386pe_posix.c:469 ei386pep.c:476 emcorepe.c:469 eshpe.c:469 #, c-format msgid " --[disable-]wdmdriver Driver uses the WDM model\n" msgstr "" -#: eaarch64pe.c:476 earm64pe.c:476 earm_wince_pe.c:472 earmpe.c:472 -#: ei386pe.c:472 ei386pe_posix.c:472 ei386pep.c:476 emcorepe.c:472 eshpe.c:472 +#: eaarch64pe.c:477 earm64pe.c:477 earm_wince_pe.c:470 earmpe.c:470 +#: ei386pe.c:470 ei386pe_posix.c:470 ei386pep.c:477 emcorepe.c:470 eshpe.c:470 #, c-format msgid " --[disable-]tsaware Image is Terminal Server aware\n" msgstr "" -#: eaarch64pe.c:477 earm64pe.c:477 earm_wince_pe.c:473 earmpe.c:473 -#: ei386pe.c:473 ei386pe_posix.c:473 ei386pep.c:477 emcorepe.c:473 eshpe.c:473 +#: eaarch64pe.c:478 earm64pe.c:478 earm_wince_pe.c:471 earmpe.c:471 +#: ei386pe.c:471 ei386pe_posix.c:471 ei386pep.c:478 emcorepe.c:471 eshpe.c:471 #, c-format msgid " --build-id[=STYLE] Generate build ID\n" msgstr "" -#: eaarch64pe.c:479 earm64pe.c:479 earm_wince_pe.c:475 earmpe.c:475 -#: ei386pe.c:475 ei386pe_posix.c:475 ei386pep.c:479 emcorepe.c:475 eshpe.c:475 +#: eaarch64pe.c:480 earm64pe.c:480 earm_wince_pe.c:473 earmpe.c:473 +#: ei386pe.c:473 ei386pe_posix.c:473 ei386pep.c:480 emcorepe.c:473 eshpe.c:473 #, c-format msgid " --pdb=[FILENAME] Generate PDB file\n" msgstr "" -#: eaarch64pe.c:608 earm64pe.c:608 earm_wince_pe.c:624 earmpe.c:624 -#: ei386beos.c:205 ei386pe.c:624 ei386pe_posix.c:624 ei386pep.c:608 -#: emcorepe.c:624 eshpe.c:624 +#: eaarch64pe.c:606 earm64pe.c:606 earm_wince_pe.c:619 earmpe.c:619 +#: ei386beos.c:205 ei386pe.c:619 ei386pe_posix.c:619 ei386pep.c:606 +#: emcorepe.c:619 eshpe.c:619 msgid "%P: warning: bad version number in -subsystem option\n" msgstr "" -#: eaarch64pe.c:633 earm64pe.c:633 earm_wince_pe.c:649 earmpe.c:649 -#: ei386beos.c:222 ei386pe.c:649 ei386pe_posix.c:649 ei386pep.c:633 -#: emcorepe.c:649 eshpe.c:649 +#: eaarch64pe.c:631 earm64pe.c:631 earm_wince_pe.c:644 earmpe.c:644 +#: ei386beos.c:222 ei386pe.c:644 ei386pe_posix.c:644 ei386pep.c:631 +#: emcorepe.c:644 eshpe.c:644 msgid "%F%P: invalid subsystem type %s\n" msgstr "" -#: eaarch64pe.c:654 earm64pe.c:654 earm_wince_pe.c:670 earmpe.c:670 -#: ei386beos.c:233 ei386pe.c:670 ei386pe_posix.c:670 ei386pep.c:654 -#: emcorepe.c:670 eshpe.c:670 +#: eaarch64pe.c:652 earm64pe.c:652 earm_wince_pe.c:665 earmpe.c:665 +#: ei386beos.c:233 ei386pe.c:665 ei386pe_posix.c:665 ei386pep.c:652 +#: emcorepe.c:665 eshpe.c:665 msgid "%F%P: invalid hex number for PE parameter '%s'\n" msgstr "" -#: eaarch64pe.c:671 earm64pe.c:671 earm_wince_pe.c:687 earmpe.c:687 -#: ei386beos.c:250 ei386pe.c:687 ei386pe_posix.c:687 ei386pep.c:671 -#: emcorepe.c:687 eshpe.c:687 +#: eaarch64pe.c:669 earm64pe.c:669 earm_wince_pe.c:682 earmpe.c:682 +#: ei386beos.c:250 ei386pe.c:682 ei386pe_posix.c:682 ei386pep.c:669 +#: emcorepe.c:682 eshpe.c:682 msgid "%F%P: strange hex info for PE parameter '%s'\n" msgstr "" -#: eaarch64pe.c:688 earm64pe.c:688 earm_wince_pe.c:703 earmpe.c:703 -#: eelf32mcore.c:323 ei386beos.c:266 ei386pe.c:703 ei386pe_posix.c:703 -#: ei386pep.c:688 emcorepe.c:703 eshpe.c:703 +#: eaarch64pe.c:686 earm64pe.c:686 earm_wince_pe.c:698 earmpe.c:698 +#: eelf32mcore.c:319 ei386beos.c:266 ei386pe.c:698 ei386pe_posix.c:698 +#: ei386pep.c:686 emcorepe.c:698 eshpe.c:698 msgid "%F%P: cannot open base file %s\n" msgstr "" -#: eaarch64pe.c:1005 earm64pe.c:1005 earm_wince_pe.c:1033 earmpe.c:1033 -#: ei386beos.c:362 ei386pe.c:1033 ei386pe_posix.c:1033 ei386pep.c:1005 -#: emcorepe.c:1033 eshpe.c:1033 +#: eaarch64pe.c:1003 earm64pe.c:1003 earm_wince_pe.c:1028 earmpe.c:1028 +#: ei386beos.c:362 ei386pe.c:1028 ei386pe_posix.c:1028 ei386pep.c:1003 +#: emcorepe.c:1028 eshpe.c:1028 msgid "%P: warning, file alignment > section alignment\n" msgstr "" -#: eaarch64pe.c:1018 earm64pe.c:1018 ei386pep.c:1018 +#: eaarch64pe.c:1016 earm64pe.c:1016 ei386pep.c:1016 msgid "" "%P: warning: --export-dynamic is not supported for PE+ targets, did you mean " "--export-all-symbols?\n" msgstr "" -#: eaarch64pe.c:1070 earm64pe.c:1070 earm_wince_pe.c:1127 earmpe.c:1127 -#: ei386pe.c:1127 ei386pe_posix.c:1127 ei386pep.c:1070 emcorepe.c:1127 -#: eshpe.c:1127 -msgid "%P: warning: overwriting decorated name %s with %s\n" -msgstr "" - -#: eaarch64pe.c:1115 eaarch64pe.c:1143 earm64pe.c:1115 earm64pe.c:1143 -#: ei386pep.c:1115 ei386pep.c:1143 +#: eaarch64pe.c:1089 eaarch64pe.c:1116 earm64pe.c:1089 earm64pe.c:1116 +#: ei386pep.c:1089 ei386pep.c:1116 #, c-format msgid "warning: resolving %s by linking to %s\n" msgstr "" -#: eaarch64pe.c:1120 eaarch64pe.c:1148 earm64pe.c:1120 earm64pe.c:1148 -#: earm_wince_pe.c:1101 earmpe.c:1101 ei386pe.c:1101 ei386pe_posix.c:1101 -#: ei386pep.c:1120 ei386pep.c:1148 emcorepe.c:1101 eshpe.c:1101 +#: eaarch64pe.c:1094 eaarch64pe.c:1121 earm64pe.c:1094 earm64pe.c:1121 +#: earm_wince_pe.c:1096 earmpe.c:1096 ei386pe.c:1096 ei386pe_posix.c:1096 +#: ei386pep.c:1094 ei386pep.c:1121 emcorepe.c:1096 eshpe.c:1096 msgid "Use --enable-stdcall-fixup to disable these warnings\n" msgstr "" -#: eaarch64pe.c:1121 eaarch64pe.c:1149 earm64pe.c:1121 earm64pe.c:1149 -#: earm_wince_pe.c:1102 earmpe.c:1102 ei386pe.c:1102 ei386pe_posix.c:1102 -#: ei386pep.c:1121 ei386pep.c:1149 emcorepe.c:1102 eshpe.c:1102 +#: eaarch64pe.c:1095 eaarch64pe.c:1122 earm64pe.c:1095 earm64pe.c:1122 +#: earm_wince_pe.c:1097 earmpe.c:1097 ei386pe.c:1097 ei386pe_posix.c:1097 +#: ei386pep.c:1095 ei386pep.c:1122 emcorepe.c:1097 eshpe.c:1097 msgid "Use --disable-stdcall-fixup to disable these fixups\n" msgstr "" -#: eaarch64pe.c:1204 earm64pe.c:1204 earm_wince_pe.c:1193 earmpe.c:1193 -#: ei386pe.c:1193 ei386pe_posix.c:1193 ei386pep.c:1204 emcorepe.c:1193 -#: eshpe.c:1193 -msgid "%P: %H: cannot get section contents - auto-import exception\n" +#: eaarch64pe.c:1173 earm64pe.c:1173 earm_wince_pe.c:1166 earmpe.c:1166 +#: ei386pe.c:1166 ei386pe_posix.c:1166 ei386pep.c:1173 emcorepe.c:1166 +#: eshpe.c:1166 +msgid "%P: %C: cannot get section contents - auto-import exception\n" msgstr "" -#: eaarch64pe.c:1334 earm64pe.c:1334 earm_wince_pe.c:1324 earmpe.c:1324 -#: ei386pe.c:1324 ei386pe_posix.c:1324 ei386pep.c:1334 emcorepe.c:1324 -#: eshpe.c:1324 +#: eaarch64pe.c:1267 earm64pe.c:1267 earm_wince_pe.c:1251 earmpe.c:1251 +#: ei386pe.c:1251 ei386pe_posix.c:1251 ei386pep.c:1267 emcorepe.c:1251 +#: eshpe.c:1251 msgid "%P: warning: .buildid section discarded, --build-id ignored\n" msgstr "" -#: eaarch64pe.c:1455 earm64pe.c:1455 earm_wince_pe.c:1445 earmpe.c:1445 -#: ei386pe.c:1445 ei386pe_posix.c:1445 ei386pep.c:1455 emcorepe.c:1445 -#: eshpe.c:1445 +#: eaarch64pe.c:1385 earm64pe.c:1385 earm_wince_pe.c:1369 earmpe.c:1369 +#: ei386pe.c:1369 ei386pe_posix.c:1369 ei386pep.c:1385 emcorepe.c:1369 +#: eshpe.c:1369 msgid "%P: warning: cannot create .buildid section, --build-id ignored\n" msgstr "" -#: eaarch64pe.c:1541 earm64pe.c:1541 earm_wince_pe.c:1530 earmpe.c:1530 -#: ei386pe.c:1530 ei386pe_posix.c:1530 ei386pep.c:1541 emcorepe.c:1530 -#: eshpe.c:1530 +#: eaarch64pe.c:1461 earm64pe.c:1461 earm_wince_pe.c:1444 earmpe.c:1444 +#: ei386pe.c:1444 ei386pe_posix.c:1444 ei386pep.c:1461 emcorepe.c:1444 +#: eshpe.c:1444 msgid "%F%P: cannot perform PE operations on non PE output file '%pB'\n" msgstr "" -#: eaarch64pe.c:1665 earm64pe.c:1665 earm_wince_pe.c:1673 earmpe.c:1673 -#: ei386pe.c:1673 ei386pe_posix.c:1673 ei386pep.c:1665 emcorepe.c:1673 -#: eshpe.c:1673 +#: eaarch64pe.c:1585 earm64pe.c:1585 earm_wince_pe.c:1587 earmpe.c:1587 +#: ei386pe.c:1587 ei386pe_posix.c:1587 ei386pep.c:1585 emcorepe.c:1587 +#: eshpe.c:1587 msgid "%X%P: unable to process relocs: %E\n" msgstr "" @@ -5084,32 +4969,32 @@ msgid "" " --identification Set the identification of the output\n" msgstr "" -#: earm_wince_pe.c:432 earmpe.c:432 ei386pe.c:432 ei386pe_posix.c:432 -#: emcorepe.c:432 eshpe.c:432 +#: earm_wince_pe.c:430 earmpe.c:430 ei386pe.c:430 ei386pe_posix.c:430 +#: emcorepe.c:430 eshpe.c:430 #, c-format msgid "" " --thumb-entry= Set the entry point to be Thumb " "\n" msgstr "" -#: earm_wince_pe.c:433 earmpe.c:433 ei386pe.c:433 ei386pe_posix.c:433 -#: emcorepe.c:433 eshpe.c:433 +#: earm_wince_pe.c:431 earmpe.c:431 ei386pe.c:431 ei386pe_posix.c:431 +#: emcorepe.c:431 eshpe.c:431 #, c-format msgid "" " --[no-]insert-timestamp Use a real timestamp rather than zero " "(default).\n" msgstr "" -#: earm_wince_pe.c:444 earmpe.c:444 ei386pe.c:444 ei386pe_posix.c:444 -#: emcorepe.c:444 eshpe.c:444 +#: earm_wince_pe.c:442 earmpe.c:442 ei386pe.c:442 ei386pe_posix.c:442 +#: emcorepe.c:442 eshpe.c:442 #, c-format msgid "" " export, place into import library " "instead.\n" msgstr "" -#: earm_wince_pe.c:449 earmpe.c:449 ei386pe.c:449 ei386pe_posix.c:449 -#: emcorepe.c:449 eshpe.c:449 +#: earm_wince_pe.c:447 earmpe.c:447 ei386pe.c:447 ei386pe_posix.c:447 +#: emcorepe.c:447 eshpe.c:447 #, c-format msgid "" " --compat-implib Create backward compatible import " @@ -5117,8 +5002,8 @@ msgid "" " create __imp_ as well.\n" msgstr "" -#: earm_wince_pe.c:450 earmpe.c:450 ei386pe.c:450 ei386pe_posix.c:450 -#: emcorepe.c:450 eshpe.c:450 +#: earm_wince_pe.c:448 earmpe.c:448 ei386pe.c:448 ei386pe_posix.c:448 +#: emcorepe.c:448 eshpe.c:448 #, c-format msgid "" " --enable-auto-image-base[=
] Automatically choose image base for " @@ -5128,16 +5013,16 @@ msgid "" " specifically set with --image-base\n" msgstr "" -#: earm_wince_pe.c:451 earmpe.c:451 ei386pe.c:451 ei386pe_posix.c:451 -#: emcorepe.c:451 eshpe.c:451 +#: earm_wince_pe.c:449 earmpe.c:449 ei386pe.c:449 ei386pe_posix.c:449 +#: emcorepe.c:449 eshpe.c:449 #, c-format msgid "" " --disable-auto-image-base Do not auto-choose image base. " "(default)\n" msgstr "" -#: earm_wince_pe.c:455 earmpe.c:455 ei386pe.c:455 ei386pe_posix.c:455 -#: emcorepe.c:455 eshpe.c:455 +#: earm_wince_pe.c:453 earmpe.c:453 ei386pe.c:453 ei386pe_posix.c:453 +#: emcorepe.c:453 eshpe.c:453 #, c-format msgid "" " --enable-runtime-pseudo-reloc Work around auto-import limitations by\n" @@ -5146,8 +5031,8 @@ msgid "" " runtime.\n" msgstr "" -#: earm_wince_pe.c:456 earmpe.c:456 ei386pe.c:456 ei386pe_posix.c:456 -#: emcorepe.c:456 eshpe.c:456 +#: earm_wince_pe.c:454 earmpe.c:454 ei386pe.c:454 ei386pe_posix.c:454 +#: emcorepe.c:454 eshpe.c:454 #, c-format msgid "" " --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations " @@ -5155,8 +5040,8 @@ msgid "" " auto-imported DATA.\n" msgstr "" -#: earm_wince_pe.c:457 earmpe.c:457 ei386pe.c:457 ei386pe_posix.c:457 -#: emcorepe.c:457 eshpe.c:457 +#: earm_wince_pe.c:455 earmpe.c:455 ei386pe.c:455 ei386pe_posix.c:455 +#: emcorepe.c:455 eshpe.c:455 #, c-format msgid "" " --enable-extra-pe-debug Enable verbose debug output when " @@ -5165,24 +5050,24 @@ msgid "" "import)\n" msgstr "" -#: earm_wince_pe.c:459 earmpe.c:459 ei386pe.c:459 ei386pe_posix.c:459 -#: emcorepe.c:459 eshpe.c:459 +#: earm_wince_pe.c:457 earmpe.c:457 ei386pe.c:457 ei386pe_posix.c:457 +#: emcorepe.c:457 eshpe.c:457 #, c-format msgid "" " --large-address-aware Executable supports virtual addresses\n" " greater than 2 gigabytes\n" msgstr "" -#: earm_wince_pe.c:460 earmpe.c:460 ei386pe.c:460 ei386pe_posix.c:460 -#: emcorepe.c:460 eshpe.c:460 +#: earm_wince_pe.c:458 earmpe.c:458 ei386pe.c:458 ei386pe_posix.c:458 +#: emcorepe.c:458 eshpe.c:458 #, c-format msgid "" " --disable-large-address-aware Executable does not support virtual\n" " addresses greater than 2 gigabytes\n" msgstr "" -#: earm_wince_pe.c:469 earmpe.c:469 ei386pe.c:469 ei386pe_posix.c:469 -#: emcorepe.c:469 eshpe.c:469 +#: earm_wince_pe.c:467 earmpe.c:467 ei386pe.c:467 ei386pe_posix.c:467 +#: emcorepe.c:467 eshpe.c:467 #, c-format msgid "" " --[disable-]no-seh Image does not use SEH. No SE handler " @@ -5190,43 +5075,43 @@ msgid "" " be called in this image\n" msgstr "" -#: earm_wince_pe.c:1046 earmpe.c:1046 ei386pe.c:1046 ei386pe_posix.c:1046 -#: emcorepe.c:1046 eshpe.c:1046 +#: earm_wince_pe.c:1041 earmpe.c:1041 ei386pe.c:1041 ei386pe_posix.c:1041 +#: emcorepe.c:1041 eshpe.c:1041 msgid "" "%P: warning: --export-dynamic is not supported for PE targets, did you mean " "--export-all-symbols?\n" msgstr "" -#: earm_wince_pe.c:1096 earmpe.c:1096 ei386pe.c:1096 ei386pe_posix.c:1096 -#: emcorepe.c:1096 eshpe.c:1096 +#: earm_wince_pe.c:1091 earmpe.c:1091 ei386pe.c:1091 ei386pe_posix.c:1091 +#: emcorepe.c:1091 eshpe.c:1091 msgid "%P: warning: resolving %s by linking to %s\n" msgstr "" -#: earm_wince_pe.c:1882 earmpe.c:1882 ei386pe.c:1882 ei386pe_posix.c:1882 -#: emcorepe.c:1882 eshpe.c:1882 +#: earm_wince_pe.c:1796 earmpe.c:1796 ei386pe.c:1796 ei386pe_posix.c:1796 +#: emcorepe.c:1796 eshpe.c:1796 #, c-format msgid "%P: errors encountered processing file %s for interworking\n" msgstr "" -#: earm_wince_pe.c:2046 earmelf.c:523 earmelf_fbsd.c:523 earmelf_fuchsia.c:524 +#: earm_wince_pe.c:1960 earmelf.c:523 earmelf_fbsd.c:523 earmelf_fuchsia.c:524 #: earmelf_haiku.c:524 earmelf_linux.c:524 earmelf_linux_eabi.c:524 #: earmelf_linux_fdpiceabi.c:524 earmelf_nacl.c:524 earmelf_nbsd.c:523 #: earmelf_phoenix.c:524 earmelf_vxworks.c:523 earmelfb.c:523 #: earmelfb_fbsd.c:523 earmelfb_fuchsia.c:524 earmelfb_linux.c:524 #: earmelfb_linux_eabi.c:524 earmelfb_linux_fdpiceabi.c:524 -#: earmelfb_nacl.c:524 earmelfb_nbsd.c:523 earmnto.c:523 earmpe.c:2046 -#: ei386pe.c:2046 ei386pe_posix.c:2046 emcorepe.c:2046 eshpe.c:2046 +#: earmelfb_nacl.c:524 earmelfb_nbsd.c:523 earmnto.c:523 earmpe.c:1960 +#: ei386pe.c:1960 ei386pe_posix.c:1960 emcorepe.c:1960 eshpe.c:1960 msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n" msgstr "" -#: earm_wince_pe.c:2051 earmelf.c:528 earmelf_fbsd.c:528 earmelf_fuchsia.c:529 +#: earm_wince_pe.c:1965 earmelf.c:528 earmelf_fbsd.c:528 earmelf_fuchsia.c:529 #: earmelf_haiku.c:529 earmelf_linux.c:529 earmelf_linux_eabi.c:529 #: earmelf_linux_fdpiceabi.c:529 earmelf_nacl.c:529 earmelf_nbsd.c:528 #: earmelf_phoenix.c:529 earmelf_vxworks.c:528 earmelfb.c:528 #: earmelfb_fbsd.c:528 earmelfb_fuchsia.c:529 earmelfb_linux.c:529 #: earmelfb_linux_eabi.c:529 earmelfb_linux_fdpiceabi.c:529 -#: earmelfb_nacl.c:529 earmelfb_nbsd.c:528 earmnto.c:528 earmpe.c:2051 -#: ei386pe.c:2051 ei386pe_posix.c:2051 emcorepe.c:2051 eshpe.c:2051 +#: earmelfb_nacl.c:529 earmelfb_nbsd.c:528 earmnto.c:528 earmpe.c:1965 +#: ei386pe.c:1965 ei386pe_posix.c:1965 emcorepe.c:1965 eshpe.c:1965 msgid "%P: warning: cannot find thumb start symbol %s\n" msgstr "" @@ -5261,26 +5146,71 @@ msgstr "" msgid "%F%P: %s: not a relocatable file: %E\n" msgstr "" -#: earmelf.c:1073 earmelf_fbsd.c:1073 earmelf_fuchsia.c:1078 -#: earmelf_haiku.c:1078 earmelf_linux.c:1078 earmelf_linux_eabi.c:1078 -#: earmelf_linux_fdpiceabi.c:1078 earmelf_nacl.c:1078 earmelf_nbsd.c:1073 -#: earmelf_phoenix.c:1078 earmelf_vxworks.c:1109 earmelfb.c:1073 -#: earmelfb_fbsd.c:1073 earmelfb_fuchsia.c:1078 earmelfb_linux.c:1078 -#: earmelfb_linux_eabi.c:1078 earmelfb_linux_fdpiceabi.c:1078 -#: earmelfb_nacl.c:1078 earmelfb_nbsd.c:1073 earmnto.c:1048 +#: earmelf.c:1069 earmelf_fbsd.c:1069 earmelf_fuchsia.c:1074 +#: earmelf_haiku.c:1074 earmelf_linux.c:1074 earmelf_linux_eabi.c:1074 +#: earmelf_linux_fdpiceabi.c:1074 earmelf_nacl.c:1074 earmelf_nbsd.c:1069 +#: earmelf_phoenix.c:1074 earmelf_vxworks.c:1105 earmelfb.c:1069 +#: earmelfb_fbsd.c:1069 earmelfb_fuchsia.c:1074 earmelfb_linux.c:1074 +#: earmelfb_linux_eabi.c:1074 earmelfb_linux_fdpiceabi.c:1074 +#: earmelfb_nacl.c:1074 earmelfb_nbsd.c:1069 earmnto.c:1044 msgid "%P: unrecognized VFP11 fix type '%s'\n" msgstr "" -#: earmelf.c:1086 earmelf_fbsd.c:1086 earmelf_fuchsia.c:1091 -#: earmelf_haiku.c:1091 earmelf_linux.c:1091 earmelf_linux_eabi.c:1091 -#: earmelf_linux_fdpiceabi.c:1091 earmelf_nacl.c:1091 earmelf_nbsd.c:1086 -#: earmelf_phoenix.c:1091 earmelf_vxworks.c:1122 earmelfb.c:1086 -#: earmelfb_fbsd.c:1086 earmelfb_fuchsia.c:1091 earmelfb_linux.c:1091 -#: earmelfb_linux_eabi.c:1091 earmelfb_linux_fdpiceabi.c:1091 -#: earmelfb_nacl.c:1091 earmelfb_nbsd.c:1086 earmnto.c:1061 +#: earmelf.c:1082 earmelf_fbsd.c:1082 earmelf_fuchsia.c:1087 +#: earmelf_haiku.c:1087 earmelf_linux.c:1087 earmelf_linux_eabi.c:1087 +#: earmelf_linux_fdpiceabi.c:1087 earmelf_nacl.c:1087 earmelf_nbsd.c:1082 +#: earmelf_phoenix.c:1087 earmelf_vxworks.c:1118 earmelfb.c:1082 +#: earmelfb_fbsd.c:1082 earmelfb_fuchsia.c:1087 earmelfb_linux.c:1087 +#: earmelfb_linux_eabi.c:1087 earmelfb_linux_fdpiceabi.c:1087 +#: earmelfb_nacl.c:1087 earmelfb_nbsd.c:1082 earmnto.c:1057 msgid "%P: unrecognized STM32L4XX fix type '%s'\n" msgstr "" +#: earmelf.c:1149 earmelf_fbsd.c:1149 earmelf_fuchsia.c:1154 +#: earmelf_haiku.c:1154 earmelf_linux.c:1154 earmelf_linux_eabi.c:1154 +#: earmelf_linux_fdpiceabi.c:1154 earmelf_nacl.c:1154 earmelf_nbsd.c:1149 +#: earmelf_phoenix.c:1154 earmelf_vxworks.c:1189 earmelfb.c:1149 +#: earmelfb_fbsd.c:1149 earmelfb_fuchsia.c:1154 earmelfb_linux.c:1154 +#: earmelfb_linux_eabi.c:1154 earmelfb_linux_fdpiceabi.c:1154 +#: earmelfb_nacl.c:1154 earmelfb_nbsd.c:1149 earmnto.c:1124 +#, c-format +msgid "" +" --thumb-entry= Set the entry point to be Thumb symbol \n" +msgstr "" + +#: earmelf.c:1150 earmelf_fbsd.c:1150 earmelf_fuchsia.c:1155 +#: earmelf_haiku.c:1155 earmelf_linux.c:1155 earmelf_linux_eabi.c:1155 +#: earmelf_linux_fdpiceabi.c:1155 earmelf_nacl.c:1155 earmelf_nbsd.c:1150 +#: earmelf_phoenix.c:1155 earmelf_vxworks.c:1190 earmelfb.c:1150 +#: earmelfb_fbsd.c:1150 earmelfb_fuchsia.c:1155 earmelfb_linux.c:1155 +#: earmelfb_linux_eabi.c:1155 earmelfb_linux_fdpiceabi.c:1155 +#: earmelfb_nacl.c:1155 earmelfb_nbsd.c:1150 earmnto.c:1125 +#, c-format +msgid " --be8 Output BE8 format image\n" +msgstr "" + +#: earmelf.c:1151 earmelf_fbsd.c:1151 earmelf_fuchsia.c:1156 +#: earmelf_haiku.c:1156 earmelf_linux.c:1156 earmelf_linux_eabi.c:1156 +#: earmelf_linux_fdpiceabi.c:1156 earmelf_nacl.c:1156 earmelf_nbsd.c:1151 +#: earmelf_phoenix.c:1156 earmelf_vxworks.c:1191 earmelfb.c:1151 +#: earmelfb_fbsd.c:1151 earmelfb_fuchsia.c:1156 earmelfb_linux.c:1156 +#: earmelfb_linux_eabi.c:1156 earmelfb_linux_fdpiceabi.c:1156 +#: earmelfb_nacl.c:1156 earmelfb_nbsd.c:1151 earmnto.c:1126 +#, c-format +msgid " --target1-rel Interpret R_ARM_TARGET1 as R_ARM_REL32\n" +msgstr "" + +#: earmelf.c:1152 earmelf_fbsd.c:1152 earmelf_fuchsia.c:1157 +#: earmelf_haiku.c:1157 earmelf_linux.c:1157 earmelf_linux_eabi.c:1157 +#: earmelf_linux_fdpiceabi.c:1157 earmelf_nacl.c:1157 earmelf_nbsd.c:1152 +#: earmelf_phoenix.c:1157 earmelf_vxworks.c:1192 earmelfb.c:1152 +#: earmelfb_fbsd.c:1152 earmelfb_fuchsia.c:1157 earmelfb_linux.c:1157 +#: earmelfb_linux_eabi.c:1157 earmelfb_linux_fdpiceabi.c:1157 +#: earmelfb_nacl.c:1157 earmelfb_nbsd.c:1152 earmnto.c:1127 +#, c-format +msgid " --target1-abs Interpret R_ARM_TARGET1 as R_ARM_ABS32\n" +msgstr "" + #: earmelf.c:1153 earmelf_fbsd.c:1153 earmelf_fuchsia.c:1158 #: earmelf_haiku.c:1158 earmelf_linux.c:1158 earmelf_linux_eabi.c:1158 #: earmelf_linux_fdpiceabi.c:1158 earmelf_nacl.c:1158 earmelf_nbsd.c:1153 @@ -5289,8 +5219,7 @@ msgstr "" #: earmelfb_linux_eabi.c:1158 earmelfb_linux_fdpiceabi.c:1158 #: earmelfb_nacl.c:1158 earmelfb_nbsd.c:1153 earmnto.c:1128 #, c-format -msgid "" -" --thumb-entry= Set the entry point to be Thumb symbol \n" +msgid " --target2= Specify definition of R_ARM_TARGET2\n" msgstr "" #: earmelf.c:1154 earmelf_fbsd.c:1154 earmelf_fuchsia.c:1159 @@ -5301,7 +5230,7 @@ msgstr "" #: earmelfb_linux_eabi.c:1159 earmelfb_linux_fdpiceabi.c:1159 #: earmelfb_nacl.c:1159 earmelfb_nbsd.c:1154 earmnto.c:1129 #, c-format -msgid " --be8 Output BE8 format image\n" +msgid " --fix-v4bx Rewrite BX rn as MOV pc, rn for ARMv4\n" msgstr "" #: earmelf.c:1155 earmelf_fbsd.c:1155 earmelf_fuchsia.c:1160 @@ -5312,7 +5241,9 @@ msgstr "" #: earmelfb_linux_eabi.c:1160 earmelfb_linux_fdpiceabi.c:1160 #: earmelfb_nacl.c:1160 earmelfb_nbsd.c:1155 earmnto.c:1130 #, c-format -msgid " --target1-rel Interpret R_ARM_TARGET1 as R_ARM_REL32\n" +msgid "" +" --fix-v4bx-interworking Rewrite BX rn branch to ARMv4 interworking " +"veneer\n" msgstr "" #: earmelf.c:1156 earmelf_fbsd.c:1156 earmelf_fuchsia.c:1161 @@ -5323,7 +5254,7 @@ msgstr "" #: earmelfb_linux_eabi.c:1161 earmelfb_linux_fdpiceabi.c:1161 #: earmelfb_nacl.c:1161 earmelfb_nbsd.c:1156 earmnto.c:1131 #, c-format -msgid " --target1-abs Interpret R_ARM_TARGET1 as R_ARM_ABS32\n" +msgid " --use-blx Enable use of BLX instructions\n" msgstr "" #: earmelf.c:1157 earmelf_fbsd.c:1157 earmelf_fuchsia.c:1162 @@ -5334,7 +5265,7 @@ msgstr "" #: earmelfb_linux_eabi.c:1162 earmelfb_linux_fdpiceabi.c:1162 #: earmelfb_nacl.c:1162 earmelfb_nbsd.c:1157 earmnto.c:1132 #, c-format -msgid " --target2= Specify definition of R_ARM_TARGET2\n" +msgid " --vfp11-denorm-fix Specify how to fix VFP11 denorm erratum\n" msgstr "" #: earmelf.c:1158 earmelf_fbsd.c:1158 earmelf_fuchsia.c:1163 @@ -5345,56 +5276,37 @@ msgstr "" #: earmelfb_linux_eabi.c:1163 earmelfb_linux_fdpiceabi.c:1163 #: earmelfb_nacl.c:1163 earmelfb_nbsd.c:1158 earmnto.c:1133 #, c-format -msgid " --fix-v4bx Rewrite BX rn as MOV pc, rn for ARMv4\n" -msgstr "" - -#: earmelf.c:1159 earmelf_fbsd.c:1159 earmelf_fuchsia.c:1164 -#: earmelf_haiku.c:1164 earmelf_linux.c:1164 earmelf_linux_eabi.c:1164 -#: earmelf_linux_fdpiceabi.c:1164 earmelf_nacl.c:1164 earmelf_nbsd.c:1159 -#: earmelf_phoenix.c:1164 earmelf_vxworks.c:1199 earmelfb.c:1159 -#: earmelfb_fbsd.c:1159 earmelfb_fuchsia.c:1164 earmelfb_linux.c:1164 -#: earmelfb_linux_eabi.c:1164 earmelfb_linux_fdpiceabi.c:1164 -#: earmelfb_nacl.c:1164 earmelfb_nbsd.c:1159 earmnto.c:1134 -#, c-format -msgid "" -" --fix-v4bx-interworking Rewrite BX rn branch to ARMv4 interworking " -"veneer\n" -msgstr "" - -#: earmelf.c:1160 earmelf_fbsd.c:1160 earmelf_fuchsia.c:1165 -#: earmelf_haiku.c:1165 earmelf_linux.c:1165 earmelf_linux_eabi.c:1165 -#: earmelf_linux_fdpiceabi.c:1165 earmelf_nacl.c:1165 earmelf_nbsd.c:1160 -#: earmelf_phoenix.c:1165 earmelf_vxworks.c:1200 earmelfb.c:1160 -#: earmelfb_fbsd.c:1160 earmelfb_fuchsia.c:1165 earmelfb_linux.c:1165 -#: earmelfb_linux_eabi.c:1165 earmelfb_linux_fdpiceabi.c:1165 -#: earmelfb_nacl.c:1165 earmelfb_nbsd.c:1160 earmnto.c:1135 -#, c-format -msgid " --use-blx Enable use of BLX instructions\n" -msgstr "" - -#: earmelf.c:1161 earmelf_fbsd.c:1161 earmelf_fuchsia.c:1166 -#: earmelf_haiku.c:1166 earmelf_linux.c:1166 earmelf_linux_eabi.c:1166 -#: earmelf_linux_fdpiceabi.c:1166 earmelf_nacl.c:1166 earmelf_nbsd.c:1161 -#: earmelf_phoenix.c:1166 earmelf_vxworks.c:1201 earmelfb.c:1161 -#: earmelfb_fbsd.c:1161 earmelfb_fuchsia.c:1166 earmelfb_linux.c:1166 -#: earmelfb_linux_eabi.c:1166 earmelfb_linux_fdpiceabi.c:1166 -#: earmelfb_nacl.c:1166 earmelfb_nbsd.c:1161 earmnto.c:1136 -#, c-format -msgid " --vfp11-denorm-fix Specify how to fix VFP11 denorm erratum\n" -msgstr "" - -#: earmelf.c:1162 earmelf_fbsd.c:1162 earmelf_fuchsia.c:1167 -#: earmelf_haiku.c:1167 earmelf_linux.c:1167 earmelf_linux_eabi.c:1167 -#: earmelf_linux_fdpiceabi.c:1167 earmelf_nacl.c:1167 earmelf_nbsd.c:1162 -#: earmelf_phoenix.c:1167 earmelf_vxworks.c:1202 earmelfb.c:1162 -#: earmelfb_fbsd.c:1162 earmelfb_fuchsia.c:1167 earmelfb_linux.c:1167 -#: earmelfb_linux_eabi.c:1167 earmelfb_linux_fdpiceabi.c:1167 -#: earmelfb_nacl.c:1167 earmelfb_nbsd.c:1162 earmnto.c:1137 -#, c-format msgid "" " --fix-stm32l4xx-629360 Specify how to fix STM32L4XX 629360 erratum\n" msgstr "" +#: earmelf.c:1164 earmelf_fbsd.c:1164 earmelf_fuchsia.c:1169 +#: earmelf_haiku.c:1169 earmelf_linux.c:1169 earmelf_linux_eabi.c:1169 +#: earmelf_linux_fdpiceabi.c:1169 earmelf_nacl.c:1169 earmelf_nbsd.c:1164 +#: earmelf_phoenix.c:1169 earmelf_vxworks.c:1204 earmelfb.c:1164 +#: earmelfb_fbsd.c:1164 earmelfb_fuchsia.c:1169 earmelfb_linux.c:1169 +#: earmelfb_linux_eabi.c:1169 earmelfb_linux_fdpiceabi.c:1169 +#: earmelfb_nacl.c:1169 earmelfb_nbsd.c:1164 earmnto.c:1139 +#, c-format +msgid "" +" --long-plt Generate long .plt entries\n" +" to handle large .plt/.got displacements\n" +msgstr "" + +#: earmelf.c:1166 earmelf_fbsd.c:1166 earmelf_fuchsia.c:1171 +#: earmelf_haiku.c:1171 earmelf_linux.c:1171 earmelf_linux_eabi.c:1171 +#: earmelf_linux_fdpiceabi.c:1171 earmelf_nacl.c:1171 earmelf_nbsd.c:1166 +#: earmelf_phoenix.c:1171 earmelf_vxworks.c:1206 earmelfb.c:1166 +#: earmelfb_fbsd.c:1166 earmelfb_fuchsia.c:1171 earmelfb_linux.c:1171 +#: earmelfb_linux_eabi.c:1171 earmelfb_linux_fdpiceabi.c:1171 +#: earmelfb_nacl.c:1171 earmelfb_nbsd.c:1166 earmnto.c:1141 +#, 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:1168 earmelf_fbsd.c:1168 earmelf_fuchsia.c:1173 #: earmelf_haiku.c:1173 earmelf_linux.c:1173 earmelf_linux_eabi.c:1173 #: earmelf_linux_fdpiceabi.c:1173 earmelf_nacl.c:1173 earmelf_nbsd.c:1168 @@ -5404,68 +5316,41 @@ msgstr "" #: earmelfb_nacl.c:1173 earmelfb_nbsd.c:1168 earmnto.c:1143 #, c-format msgid "" -" --long-plt Generate long .plt entries\n" -" to handle large .plt/.got displacements\n" -msgstr "" - -#: earmelf.c:1170 earmelf_fbsd.c:1170 earmelf_fuchsia.c:1175 -#: earmelf_haiku.c:1175 earmelf_linux.c:1175 earmelf_linux_eabi.c:1175 -#: earmelf_linux_fdpiceabi.c:1175 earmelf_nacl.c:1175 earmelf_nbsd.c:1170 -#: earmelf_phoenix.c:1175 earmelf_vxworks.c:1210 earmelfb.c:1170 -#: earmelfb_fbsd.c:1170 earmelfb_fuchsia.c:1175 earmelfb_linux.c:1175 -#: earmelfb_linux_eabi.c:1175 earmelfb_linux_fdpiceabi.c:1175 -#: earmelfb_nacl.c:1175 earmelfb_nbsd.c:1170 earmnto.c:1145 -#, 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:1172 earmelf_fbsd.c:1172 earmelf_fuchsia.c:1177 -#: earmelf_haiku.c:1177 earmelf_linux.c:1177 earmelf_linux_eabi.c:1177 -#: earmelf_linux_fdpiceabi.c:1177 earmelf_nacl.c:1177 earmelf_nbsd.c:1172 -#: earmelf_phoenix.c:1177 earmelf_vxworks.c:1212 earmelfb.c:1172 -#: earmelfb_fbsd.c:1172 earmelfb_fuchsia.c:1177 earmelfb_linux.c:1177 -#: earmelfb_linux_eabi.c:1177 earmelfb_linux_fdpiceabi.c:1177 -#: earmelfb_nacl.c:1177 earmelfb_nbsd.c:1172 earmnto.c:1147 -#, c-format -msgid "" " --in-implib Import library whose symbols address must\n" " remain stable\n" msgstr "" -#: earmelf.c:1183 earmelf_fbsd.c:1183 earmelf_fuchsia.c:1188 -#: earmelf_haiku.c:1188 earmelf_linux.c:1188 earmelf_linux_eabi.c:1188 -#: earmelf_linux_fdpiceabi.c:1188 earmelf_nacl.c:1188 earmelf_nbsd.c:1183 -#: earmelf_phoenix.c:1188 earmelf_vxworks.c:1223 earmelfb.c:1183 -#: earmelfb_fbsd.c:1183 earmelfb_fuchsia.c:1188 earmelfb_linux.c:1188 -#: earmelfb_linux_eabi.c:1188 earmelfb_linux_fdpiceabi.c:1188 -#: earmelfb_nacl.c:1188 earmelfb_nbsd.c:1183 earmnto.c:1158 +#: earmelf.c:1179 earmelf_fbsd.c:1179 earmelf_fuchsia.c:1184 +#: earmelf_haiku.c:1184 earmelf_linux.c:1184 earmelf_linux_eabi.c:1184 +#: earmelf_linux_fdpiceabi.c:1184 earmelf_nacl.c:1184 earmelf_nbsd.c:1179 +#: earmelf_phoenix.c:1184 earmelf_vxworks.c:1219 earmelfb.c:1179 +#: earmelfb_fbsd.c:1179 earmelfb_fuchsia.c:1184 earmelfb_linux.c:1184 +#: earmelfb_linux_eabi.c:1184 earmelfb_linux_fdpiceabi.c:1184 +#: earmelfb_nacl.c:1184 earmelfb_nbsd.c:1179 earmnto.c:1154 #, c-format msgid "" " --[no-]fix-cortex-a8 Disable/enable Cortex-A8 Thumb-2 branch " "erratum fix\n" msgstr "" -#: earmelf.c:1184 earmelf_fbsd.c:1184 earmelf_fuchsia.c:1189 -#: earmelf_haiku.c:1189 earmelf_linux.c:1189 earmelf_linux_eabi.c:1189 -#: earmelf_linux_fdpiceabi.c:1189 earmelf_nacl.c:1189 earmelf_nbsd.c:1184 -#: earmelf_phoenix.c:1189 earmelf_vxworks.c:1224 earmelfb.c:1184 -#: earmelfb_fbsd.c:1184 earmelfb_fuchsia.c:1189 earmelfb_linux.c:1189 -#: earmelfb_linux_eabi.c:1189 earmelfb_linux_fdpiceabi.c:1189 -#: earmelfb_nacl.c:1189 earmelfb_nbsd.c:1184 earmnto.c:1159 +#: earmelf.c:1180 earmelf_fbsd.c:1180 earmelf_fuchsia.c:1185 +#: earmelf_haiku.c:1185 earmelf_linux.c:1185 earmelf_linux_eabi.c:1185 +#: earmelf_linux_fdpiceabi.c:1185 earmelf_nacl.c:1185 earmelf_nbsd.c:1180 +#: earmelf_phoenix.c:1185 earmelf_vxworks.c:1220 earmelfb.c:1180 +#: earmelfb_fbsd.c:1180 earmelfb_fuchsia.c:1185 earmelfb_linux.c:1185 +#: earmelfb_linux_eabi.c:1185 earmelfb_linux_fdpiceabi.c:1185 +#: earmelfb_nacl.c:1185 earmelfb_nbsd.c:1180 earmnto.c:1155 #, c-format msgid " --no-merge-exidx-entries Disable merging exidx entries\n" msgstr "" -#: earmelf.c:1185 earmelf_fbsd.c:1185 earmelf_fuchsia.c:1190 -#: earmelf_haiku.c:1190 earmelf_linux.c:1190 earmelf_linux_eabi.c:1190 -#: earmelf_linux_fdpiceabi.c:1190 earmelf_nacl.c:1190 earmelf_nbsd.c:1185 -#: earmelf_phoenix.c:1190 earmelf_vxworks.c:1225 earmelfb.c:1185 -#: earmelfb_fbsd.c:1185 earmelfb_fuchsia.c:1190 earmelfb_linux.c:1190 -#: earmelfb_linux_eabi.c:1190 earmelfb_linux_fdpiceabi.c:1190 -#: earmelfb_nacl.c:1190 earmelfb_nbsd.c:1185 earmnto.c:1160 +#: earmelf.c:1181 earmelf_fbsd.c:1181 earmelf_fuchsia.c:1186 +#: earmelf_haiku.c:1186 earmelf_linux.c:1186 earmelf_linux_eabi.c:1186 +#: earmelf_linux_fdpiceabi.c:1186 earmelf_nacl.c:1186 earmelf_nbsd.c:1181 +#: earmelf_phoenix.c:1186 earmelf_vxworks.c:1221 earmelfb.c:1181 +#: earmelfb_fbsd.c:1181 earmelfb_fuchsia.c:1186 earmelfb_linux.c:1186 +#: earmelfb_linux_eabi.c:1186 earmelfb_linux_fdpiceabi.c:1186 +#: earmelfb_nacl.c:1186 earmelfb_nbsd.c:1181 earmnto.c:1156 #, c-format msgid "" " --[no-]fix-arm1176 Disable/enable ARM1176 BLX immediate erratum " @@ -5473,20 +5358,20 @@ msgid "" msgstr "" #: earmelf_vxworks.c:603 eelf32_sparc_vxworks.c:73 eelf32ebmipvxworks.c:269 -#: eelf32elmipvxworks.c:269 eelf32ppcvxworks.c:226 eelf_i386_vxworks.c:97 +#: eelf32elmipvxworks.c:269 eelf32ppcvxworks.c:238 eelf_i386_vxworks.c:97 #: eshelf_vxworks.c:73 eshlelf_vxworks.c:73 msgid "%X%P: cannot create dynamic sections %E\n" msgstr "" #: earmelf_vxworks.c:609 eelf32_sparc_vxworks.c:79 eelf32ebmipvxworks.c:275 -#: eelf32elmipvxworks.c:275 eelf32ppcvxworks.c:232 eelf_i386_vxworks.c:103 +#: eelf32elmipvxworks.c:275 eelf32ppcvxworks.c:244 eelf_i386_vxworks.c:103 #: eshelf_vxworks.c:79 eshlelf_vxworks.c:79 msgid "%X%P: dynamic sections created in non-dynamic link\n" msgstr "" -#: earmelf_vxworks.c:1227 eelf32_sparc_vxworks.c:532 eelf32ebmipvxworks.c:790 -#: eelf32elmipvxworks.c:790 eelf32ppcvxworks.c:843 eelf_i386_vxworks.c:617 -#: eshelf_vxworks.c:502 eshlelf_vxworks.c:502 +#: earmelf_vxworks.c:1223 eelf32_sparc_vxworks.c:528 eelf32ebmipvxworks.c:786 +#: eelf32elmipvxworks.c:786 eelf32ppcvxworks.c:851 eelf_i386_vxworks.c:613 +#: eshelf_vxworks.c:498 eshlelf_vxworks.c:498 #, c-format msgid " --force-dynamic Always create dynamic sections\n" msgstr "" @@ -5505,10 +5390,10 @@ msgstr "" msgid "%X%P: can not create stub BFD: %E\n" msgstr "" -#: eavr1.c:569 eavr2.c:569 eavr25.c:569 eavr3.c:569 eavr31.c:569 eavr35.c:569 -#: eavr4.c:569 eavr5.c:569 eavr51.c:569 eavr6.c:569 eavrtiny.c:569 -#: eavrxmega1.c:569 eavrxmega2.c:569 eavrxmega3.c:569 eavrxmega4.c:569 -#: eavrxmega5.c:569 eavrxmega6.c:569 eavrxmega7.c:569 +#: eavr1.c:565 eavr2.c:565 eavr25.c:565 eavr3.c:565 eavr31.c:565 eavr35.c:565 +#: eavr4.c:565 eavr5.c:565 eavr51.c:565 eavr6.c:565 eavrtiny.c:565 +#: eavrxmega1.c:565 eavrxmega2.c:565 eavrxmega3.c:565 eavrxmega4.c:565 +#: eavrxmega5.c:565 eavrxmega6.c:565 eavrxmega7.c:565 #, c-format msgid "" " --pmem-wrap-around= Make the linker relaxation machine assume that " @@ -5519,10 +5404,10 @@ msgid "" "64k.\n" msgstr "" -#: eavr1.c:575 eavr2.c:575 eavr25.c:575 eavr3.c:575 eavr31.c:575 eavr35.c:575 -#: eavr4.c:575 eavr5.c:575 eavr51.c:575 eavr6.c:575 eavrtiny.c:575 -#: eavrxmega1.c:575 eavrxmega2.c:575 eavrxmega3.c:575 eavrxmega4.c:575 -#: eavrxmega5.c:575 eavrxmega6.c:575 eavrxmega7.c:575 +#: eavr1.c:571 eavr2.c:571 eavr25.c:571 eavr3.c:571 eavr31.c:571 eavr35.c:571 +#: eavr4.c:571 eavr5.c:571 eavr51.c:571 eavr6.c:571 eavrtiny.c:571 +#: eavrxmega1.c:571 eavrxmega2.c:571 eavrxmega3.c:571 eavrxmega4.c:571 +#: eavrxmega5.c:571 eavrxmega6.c:571 eavrxmega7.c:571 #, c-format msgid "" " --no-call-ret-replacement The relaxation machine normally will\n" @@ -5532,10 +5417,10 @@ msgid "" " This option disables this optimization.\n" msgstr "" -#: eavr1.c:583 eavr2.c:583 eavr25.c:583 eavr3.c:583 eavr31.c:583 eavr35.c:583 -#: eavr4.c:583 eavr5.c:583 eavr51.c:583 eavr6.c:583 eavrtiny.c:583 -#: eavrxmega1.c:583 eavrxmega2.c:583 eavrxmega3.c:583 eavrxmega4.c:583 -#: eavrxmega5.c:583 eavrxmega6.c:583 eavrxmega7.c:583 +#: eavr1.c:579 eavr2.c:579 eavr25.c:579 eavr3.c:579 eavr31.c:579 eavr35.c:579 +#: eavr4.c:579 eavr5.c:579 eavr51.c:579 eavr6.c:579 eavrtiny.c:579 +#: eavrxmega1.c:579 eavrxmega2.c:579 eavrxmega3.c:579 eavrxmega4.c:579 +#: eavrxmega5.c:579 eavrxmega6.c:579 eavrxmega7.c:579 #, c-format msgid "" " --no-stubs If the linker detects to attempt to access\n" @@ -5545,18 +5430,18 @@ msgid "" "switch.\n" msgstr "" -#: eavr1.c:591 eavr2.c:591 eavr25.c:591 eavr3.c:591 eavr31.c:591 eavr35.c:591 -#: eavr4.c:591 eavr5.c:591 eavr51.c:591 eavr6.c:591 eavrtiny.c:591 -#: eavrxmega1.c:591 eavrxmega2.c:591 eavrxmega3.c:591 eavrxmega4.c:591 -#: eavrxmega5.c:591 eavrxmega6.c:591 eavrxmega7.c:591 +#: eavr1.c:587 eavr2.c:587 eavr25.c:587 eavr3.c:587 eavr31.c:587 eavr35.c:587 +#: eavr4.c:587 eavr5.c:587 eavr51.c:587 eavr6.c:587 eavrtiny.c:587 +#: eavrxmega1.c:587 eavrxmega2.c:587 eavrxmega3.c:587 eavrxmega4.c:587 +#: eavrxmega5.c:587 eavrxmega6.c:587 eavrxmega7.c:587 #, c-format msgid " --debug-stubs Used for debugging avr-ld.\n" msgstr "" -#: eavr1.c:593 eavr2.c:593 eavr25.c:593 eavr3.c:593 eavr31.c:593 eavr35.c:593 -#: eavr4.c:593 eavr5.c:593 eavr51.c:593 eavr6.c:593 eavrtiny.c:593 -#: eavrxmega1.c:593 eavrxmega2.c:593 eavrxmega3.c:593 eavrxmega4.c:593 -#: eavrxmega5.c:593 eavrxmega6.c:593 eavrxmega7.c:593 +#: eavr1.c:589 eavr2.c:589 eavr25.c:589 eavr3.c:589 eavr31.c:589 eavr35.c:589 +#: eavr4.c:589 eavr5.c:589 eavr51.c:589 eavr6.c:589 eavrtiny.c:589 +#: eavrxmega1.c:589 eavrxmega2.c:589 eavrxmega3.c:589 eavrxmega4.c:589 +#: eavrxmega5.c:589 eavrxmega6.c:589 eavrxmega7.c:589 #, c-format msgid " --debug-relax Used for debugging avr-ld.\n" msgstr "" @@ -5569,14 +5454,14 @@ msgstr "" msgid "%X%P: cannot build stubs: %E\n" msgstr "" -#: ecskyelf.c:585 ecskyelf_linux.c:752 +#: ecskyelf.c:581 ecskyelf_linux.c:748 #, 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:589 ecskyelf_linux.c:756 +#: ecskyelf.c:585 ecskyelf_linux.c:752 #, c-format msgid "" " --stub-group-size=N Maximum size of a group of input sections\n" @@ -5630,118 +5515,123 @@ msgstr "" msgid "%P: --auto-overlay ignored with zero local store range\n" msgstr "" -#: eelf32_spu.c:926 +#: eelf32_spu.c:677 +#, c-format +msgid "running: %s \"%s\" \"%s\" \"%s\" \"%s\"\n" +msgstr "" + +#: eelf32_spu.c:1058 msgid "%F%P: invalid --local-store address range `%s'\n" msgstr "" -#: eelf32_spu.c:962 +#: eelf32_spu.c:1094 msgid "%F%P: invalid --num-lines/--num-regions `%u'\n" msgstr "" -#: eelf32_spu.c:967 +#: eelf32_spu.c:1099 msgid "%F%P: invalid --line-size/--region-size `%u'\n" msgstr "" -#: eelf32_spu.c:988 +#: eelf32_spu.c:1120 msgid "%F%P: invalid --num-lines/--num-regions `%s'\n" msgstr "" -#: eelf32_spu.c:1001 +#: eelf32_spu.c:1133 msgid "%F%P: invalid --line-size/--region-size `%s'\n" msgstr "" -#: eelf32_spu.c:1010 +#: eelf32_spu.c:1142 msgid "%F%P: invalid --fixed-space value `%s'\n" msgstr "" -#: eelf32_spu.c:1019 +#: eelf32_spu.c:1151 msgid "%F%P: invalid --reserved-space value `%s'\n" msgstr "" -#: eelf32_spu.c:1028 +#: eelf32_spu.c:1160 msgid "%F%P: invalid --extra-stack-space value `%s'\n" msgstr "" -#: eelf32_spu.c:1065 +#: eelf32_spu.c:1197 #, c-format msgid " --plugin Make SPU plugin\n" msgstr "" -#: eelf32_spu.c:1067 +#: eelf32_spu.c:1199 #, c-format msgid " --no-overlays No overlay handling\n" msgstr "" -#: eelf32_spu.c:1069 +#: eelf32_spu.c:1201 #, c-format msgid "" " --compact-stubs Use smaller and possibly slower call stubs\n" msgstr "" -#: eelf32_spu.c:1071 +#: eelf32_spu.c:1203 #, c-format msgid " --emit-stub-syms Add symbols on overlay call stubs\n" msgstr "" -#: eelf32_spu.c:1073 +#: eelf32_spu.c:1205 #, c-format msgid "" " --extra-overlay-stubs Add stubs on all calls out of overlay regions\n" msgstr "" -#: eelf32_spu.c:1075 +#: eelf32_spu.c:1207 #, c-format msgid " --local-store=lo:hi Valid address range\n" msgstr "" -#: eelf32_spu.c:1077 +#: eelf32_spu.c:1209 #, c-format msgid " --stack-analysis Estimate maximum stack requirement\n" msgstr "" -#: eelf32_spu.c:1079 +#: eelf32_spu.c:1211 #, c-format msgid "" " --emit-stack-syms Add sym giving stack needed for each func\n" msgstr "" -#: eelf32_spu.c:1081 +#: eelf32_spu.c:1213 #, 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:1084 +#: eelf32_spu.c:1216 #, c-format msgid " --auto-relink Rerun linker using auto-overlay script\n" msgstr "" -#: eelf32_spu.c:1086 +#: eelf32_spu.c:1218 #, c-format msgid "" " --overlay-rodata Place read-only data with associated function\n" " code in overlays\n" msgstr "" -#: eelf32_spu.c:1089 +#: eelf32_spu.c:1221 #, c-format msgid " --num-regions Number of overlay buffers (default 1)\n" msgstr "" -#: eelf32_spu.c:1091 +#: eelf32_spu.c:1223 #, c-format msgid "" " --region-size Size of overlay buffers (default 0, auto)\n" msgstr "" -#: eelf32_spu.c:1093 +#: eelf32_spu.c:1225 #, c-format msgid "" " --fixed-space=bytes Local store for non-overlay code and data\n" msgstr "" -#: eelf32_spu.c:1095 +#: eelf32_spu.c:1227 #, c-format msgid "" " --reserved-space=bytes Local store for stack and heap. If not " @@ -5750,7 +5640,7 @@ msgid "" "heap\n" msgstr "" -#: eelf32_spu.c:1098 +#: eelf32_spu.c:1230 #, c-format msgid "" " --extra-stack-space=bytes Space for negative sp access (default 2000) " @@ -5758,28 +5648,28 @@ msgid "" " --reserved-space not given\n" msgstr "" -#: eelf32_spu.c:1101 +#: eelf32_spu.c:1233 #, c-format msgid " --soft-icache Generate software icache overlays\n" msgstr "" -#: eelf32_spu.c:1103 +#: eelf32_spu.c:1235 #, c-format msgid "" " --num-lines Number of soft-icache lines (default 32)\n" msgstr "" -#: eelf32_spu.c:1105 +#: eelf32_spu.c:1237 #, c-format msgid " --line-size Size of soft-icache lines (default 1k)\n" msgstr "" -#: eelf32_spu.c:1107 +#: eelf32_spu.c:1239 #, c-format msgid " --non-ia-text Allow non-icache code in icache lines\n" msgstr "" -#: eelf32_spu.c:1109 +#: eelf32_spu.c:1241 #, c-format msgid " --lrlive-analysis Scan function prologue for lr liveness\n" msgstr "" @@ -5789,85 +5679,105 @@ msgstr "" msgid "%F%P: invalid --dsbt-index %d, outside DSBT size\n" msgstr "" -#: eelf32_tic6x_be.c:595 eelf32_tic6x_elf_be.c:595 eelf32_tic6x_elf_le.c:595 -#: eelf32_tic6x_le.c:595 eelf32_tic6x_linux_be.c:595 -#: eelf32_tic6x_linux_le.c:595 +#: 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 msgid "%F%P: invalid --dsbt-index %s\n" msgstr "" -#: eelf32_tic6x_be.c:605 eelf32_tic6x_elf_be.c:605 eelf32_tic6x_elf_le.c:605 -#: eelf32_tic6x_le.c:605 eelf32_tic6x_linux_be.c:605 -#: eelf32_tic6x_linux_le.c:605 +#: eelf32_tic6x_be.c:601 eelf32_tic6x_elf_be.c:601 eelf32_tic6x_elf_le.c:601 +#: eelf32_tic6x_le.c:601 eelf32_tic6x_linux_be.c:601 +#: eelf32_tic6x_linux_le.c:601 msgid "%F%P: invalid --dsbt-size %s\n" msgstr "" -#: eelf32_tic6x_be.c:621 eelf32_tic6x_elf_be.c:621 eelf32_tic6x_elf_le.c:621 -#: eelf32_tic6x_le.c:621 eelf32_tic6x_linux_be.c:621 -#: eelf32_tic6x_linux_le.c:621 +#: eelf32_tic6x_be.c:617 eelf32_tic6x_elf_be.c:617 eelf32_tic6x_elf_le.c:617 +#: eelf32_tic6x_le.c:617 eelf32_tic6x_linux_be.c:617 +#: eelf32_tic6x_linux_le.c:617 #, c-format msgid "" " --dsbt-index Use this as the DSBT index for the output object\n" msgstr "" -#: eelf32_tic6x_be.c:622 eelf32_tic6x_elf_be.c:622 eelf32_tic6x_elf_le.c:622 -#: eelf32_tic6x_le.c:622 eelf32_tic6x_linux_be.c:622 -#: eelf32_tic6x_linux_le.c:622 +#: eelf32_tic6x_be.c:618 eelf32_tic6x_elf_be.c:618 eelf32_tic6x_elf_le.c:618 +#: eelf32_tic6x_le.c:618 eelf32_tic6x_linux_be.c:618 +#: eelf32_tic6x_linux_le.c:618 #, c-format msgid "" " --dsbt-size Use this as the number of entries in the DSBT " "table\n" msgstr "" -#: eelf32_tic6x_be.c:623 eelf32_tic6x_elf_be.c:623 eelf32_tic6x_elf_le.c:623 -#: eelf32_tic6x_le.c:623 eelf32_tic6x_linux_be.c:623 -#: eelf32_tic6x_linux_le.c:623 +#: eelf32_tic6x_be.c:619 eelf32_tic6x_elf_be.c:619 eelf32_tic6x_elf_le.c:619 +#: eelf32_tic6x_le.c:619 eelf32_tic6x_linux_be.c:619 +#: eelf32_tic6x_linux_le.c:619 #, c-format msgid " --no-merge-exidx-entries\n" msgstr "" -#: eelf32_tic6x_be.c:624 eelf32_tic6x_elf_be.c:624 eelf32_tic6x_elf_le.c:624 -#: eelf32_tic6x_le.c:624 eelf32_tic6x_linux_be.c:624 -#: eelf32_tic6x_linux_le.c:624 +#: eelf32_tic6x_be.c:620 eelf32_tic6x_elf_be.c:620 eelf32_tic6x_elf_le.c:620 +#: eelf32_tic6x_le.c:620 eelf32_tic6x_linux_be.c:620 +#: eelf32_tic6x_linux_le.c:620 #, c-format msgid " Disable merging exidx entries\n" msgstr "" -#: eelf32_x86_64.c:5645 eelf_i386.c:5264 eelf_i386_be.c:501 -#: eelf_i386_fbsd.c:541 eelf_i386_haiku.c:541 eelf_i386_ldso.c:516 -#: eelf_i386_sol2.c:673 eelf_i386_vxworks.c:568 eelf_iamcu.c:541 -#: eelf_x86_64.c:5645 eelf_x86_64_cloudabi.c:544 eelf_x86_64_fbsd.c:544 -#: eelf_x86_64_haiku.c:544 eelf_x86_64_sol2.c:676 +#: eelf32_x86_64.c:5641 eelf_i386.c:5260 eelf_i386_be.c:497 +#: eelf_i386_fbsd.c:537 eelf_i386_haiku.c:537 eelf_i386_ldso.c:512 +#: eelf_i386_sol2.c:669 eelf_i386_vxworks.c:564 eelf_iamcu.c:537 +#: eelf_x86_64.c:5641 eelf_x86_64_cloudabi.c:540 eelf_x86_64_fbsd.c:540 +#: eelf_x86_64_haiku.c:540 eelf_x86_64_sol2.c:672 msgid "%F%P: invalid number for -z call-nop=prefix-: %s\n" msgstr "" -#: eelf32_x86_64.c:5654 eelf_i386.c:5273 eelf_i386_be.c:510 -#: eelf_i386_fbsd.c:550 eelf_i386_haiku.c:550 eelf_i386_ldso.c:525 -#: eelf_i386_sol2.c:682 eelf_i386_vxworks.c:577 eelf_iamcu.c:550 -#: eelf_x86_64.c:5654 eelf_x86_64_cloudabi.c:553 eelf_x86_64_fbsd.c:553 -#: eelf_x86_64_haiku.c:553 eelf_x86_64_sol2.c:685 +#: eelf32_x86_64.c:5650 eelf_i386.c:5269 eelf_i386_be.c:506 +#: eelf_i386_fbsd.c:546 eelf_i386_haiku.c:546 eelf_i386_ldso.c:521 +#: eelf_i386_sol2.c:678 eelf_i386_vxworks.c:573 eelf_iamcu.c:546 +#: eelf_x86_64.c:5650 eelf_x86_64_cloudabi.c:549 eelf_x86_64_fbsd.c:549 +#: eelf_x86_64_haiku.c:549 eelf_x86_64_sol2.c:681 msgid "%F%P: invalid number for -z call-nop=suffix-: %s\n" msgstr "" -#: eelf32_x86_64.c:5659 eelf_i386.c:5278 eelf_i386_be.c:515 -#: eelf_i386_fbsd.c:555 eelf_i386_haiku.c:555 eelf_i386_ldso.c:530 -#: eelf_i386_sol2.c:687 eelf_i386_vxworks.c:582 eelf_iamcu.c:555 -#: eelf_x86_64.c:5659 eelf_x86_64_cloudabi.c:558 eelf_x86_64_fbsd.c:558 -#: eelf_x86_64_haiku.c:558 eelf_x86_64_sol2.c:690 +#: eelf32_x86_64.c:5655 eelf_i386.c:5274 eelf_i386_be.c:511 +#: eelf_i386_fbsd.c:551 eelf_i386_haiku.c:551 eelf_i386_ldso.c:526 +#: eelf_i386_sol2.c:683 eelf_i386_vxworks.c:578 eelf_iamcu.c:551 +#: eelf_x86_64.c:5655 eelf_x86_64_cloudabi.c:554 eelf_x86_64_fbsd.c:554 +#: eelf_x86_64_haiku.c:554 eelf_x86_64_sol2.c:686 msgid "%F%P: unsupported option: -z %s\n" msgstr "" -#: eelf32_x86_64.c:5681 eelf_i386.c:5300 eelf_i386_fbsd.c:577 -#: eelf_i386_haiku.c:577 eelf_x86_64.c:5681 eelf_x86_64_cloudabi.c:580 -#: eelf_x86_64_fbsd.c:580 eelf_x86_64_haiku.c:580 eelf_x86_64_sol2.c:712 +#: eelf32_x86_64.c:5677 eelf_i386.c:5296 eelf_i386_fbsd.c:573 +#: eelf_i386_haiku.c:573 eelf_x86_64.c:5677 eelf_x86_64_cloudabi.c:576 +#: eelf_x86_64_fbsd.c:576 eelf_x86_64_haiku.c:576 eelf_x86_64_sol2.c:708 msgid "%F%P: invalid option for -z cet-report=: %s\n" msgstr "" -#: eelf32_x86_64.c:5695 eelf_i386.c:5314 eelf_i386_fbsd.c:591 -#: eelf_i386_haiku.c:591 eelf_x86_64.c:5695 eelf_x86_64_cloudabi.c:594 -#: eelf_x86_64_fbsd.c:594 eelf_x86_64_haiku.c:594 eelf_x86_64_sol2.c:726 +#: eelf32_x86_64.c:5691 eelf_i386.c:5310 eelf_i386_fbsd.c:587 +#: eelf_i386_haiku.c:587 eelf_x86_64.c:5691 eelf_x86_64_cloudabi.c:590 +#: eelf_x86_64_fbsd.c:590 eelf_x86_64_haiku.c:590 eelf_x86_64_sol2.c:722 msgid "%F%P: invalid x86-64 ISA level: %s\n" msgstr "" +#: eelf32_x86_64.c:5733 eelf_i386.c:5352 eelf_i386_be.c:527 +#: eelf_i386_fbsd.c:629 eelf_i386_haiku.c:629 eelf_i386_ldso.c:551 +#: eelf_i386_sol2.c:708 eelf_i386_vxworks.c:599 eelf_iamcu.c:576 +#: eelf_x86_64.c:5783 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 noextern-protected-data Do not treat protected data symbol as " +"external\n" +msgstr "" + +#: eelf32_x86_64.c:5735 eelf_i386.c:5354 eelf_i386_be.c:529 +#: eelf_i386_fbsd.c:631 eelf_i386_haiku.c:631 eelf_i386_ldso.c:553 +#: eelf_i386_sol2.c:710 eelf_i386_vxworks.c:601 eelf_iamcu.c:578 +#: eelf_x86_64.c:5785 eelf_x86_64_cloudabi.c:684 eelf_x86_64_fbsd.c:684 +#: eelf_x86_64_haiku.c:684 eelf_x86_64_sol2.c:816 +#, c-format +msgid " -z indirect-extern-access Enable indirect external access\n" +msgstr "" + #: eelf32_x86_64.c:5737 eelf_i386.c:5356 eelf_i386_be.c:531 #: eelf_i386_fbsd.c:633 eelf_i386_haiku.c:633 eelf_i386_ldso.c:555 #: eelf_i386_sol2.c:712 eelf_i386_vxworks.c:603 eelf_iamcu.c:580 @@ -5875,153 +5785,148 @@ msgstr "" #: eelf_x86_64_haiku.c:686 eelf_x86_64_sol2.c:818 #, c-format msgid "" -" -z noextern-protected-data Do not treat protected data symbol as " -"external\n" -msgstr "" - -#: eelf32_x86_64.c:5739 eelf_i386.c:5358 eelf_i386_be.c:533 -#: eelf_i386_fbsd.c:635 eelf_i386_haiku.c:635 eelf_i386_ldso.c:557 -#: eelf_i386_sol2.c:714 eelf_i386_vxworks.c:605 eelf_iamcu.c:582 -#: eelf_x86_64.c:5789 eelf_x86_64_cloudabi.c:688 eelf_x86_64_fbsd.c:688 -#: eelf_x86_64_haiku.c:688 eelf_x86_64_sol2.c:820 -#, c-format -msgid " -z indirect-extern-access Enable indirect external access\n" -msgstr "" - -#: eelf32_x86_64.c:5741 eelf_i386.c:5360 eelf_i386_be.c:535 -#: eelf_i386_fbsd.c:637 eelf_i386_haiku.c:637 eelf_i386_ldso.c:559 -#: eelf_i386_sol2.c:716 eelf_i386_vxworks.c:607 eelf_iamcu.c:584 -#: eelf_x86_64.c:5791 eelf_x86_64_cloudabi.c:690 eelf_x86_64_fbsd.c:690 -#: eelf_x86_64_haiku.c:690 eelf_x86_64_sol2.c:822 -#, c-format -msgid "" " -z noindirect-extern-access Disable indirect external access (default)\n" msgstr "" -#: eelf32_x86_64.c:5744 eelf32lppc.c:835 eelf32lppclinux.c:835 -#: eelf32lppcnto.c:835 eelf32lppcsim.c:835 eelf32ppc.c:835 -#: eelf32ppc_fbsd.c:835 eelf32ppchaiku.c:835 eelf32ppclinux.c:835 -#: eelf32ppcnto.c:835 eelf32ppcsim.c:835 eelf32ppcvxworks.c:813 -#: eelf32ppcwindiss.c:835 eelf64lppc.c:1365 eelf64lppc_fbsd.c:1365 -#: eelf64ppc.c:1365 eelf64ppc_fbsd.c:1365 eelf_i386.c:5363 eelf_i386_be.c:538 -#: eelf_i386_fbsd.c:640 eelf_i386_haiku.c:640 eelf_i386_ldso.c:562 -#: eelf_i386_sol2.c:719 eelf_i386_vxworks.c:610 eelf_iamcu.c:587 -#: eelf_x86_64.c:5794 eelf_x86_64_cloudabi.c:693 eelf_x86_64_fbsd.c:693 -#: eelf_x86_64_haiku.c:693 eelf_x86_64_sol2.c:825 +#: eelf32_x86_64.c:5740 eelf32lppc.c:843 eelf32lppclinux.c:843 +#: eelf32lppcnto.c:843 eelf32lppcsim.c:843 eelf32ppc.c:843 +#: eelf32ppc_fbsd.c:843 eelf32ppchaiku.c:843 eelf32ppclinux.c:843 +#: eelf32ppcnto.c:843 eelf32ppcsim.c:843 eelf32ppcvxworks.c:821 +#: eelf32ppcwindiss.c:843 eelf64lppc.c:1372 eelf64lppc_fbsd.c:1372 +#: eelf64ppc.c:1372 eelf64ppc_fbsd.c:1372 eelf_i386.c:5359 eelf_i386_be.c:534 +#: eelf_i386_fbsd.c:636 eelf_i386_haiku.c:636 eelf_i386_ldso.c:558 +#: eelf_i386_sol2.c:715 eelf_i386_vxworks.c:606 eelf_iamcu.c:583 +#: eelf_x86_64.c:5790 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 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:5748 eelf_x86_64.c:5798 eelf_x86_64_cloudabi.c:697 -#: eelf_x86_64_fbsd.c:697 eelf_x86_64_haiku.c:697 eelf_x86_64_sol2.c:829 +#: eelf32_x86_64.c:5744 eelf_x86_64.c:5794 eelf_x86_64_cloudabi.c:693 +#: eelf_x86_64_fbsd.c:693 eelf_x86_64_haiku.c:693 eelf_x86_64_sol2.c:825 #, c-format msgid " -z noreloc-overflow Disable relocation overflow check\n" msgstr "" -#: eelf32_x86_64.c:5751 eelf_i386.c:5367 eelf_i386_be.c:542 -#: eelf_i386_fbsd.c:644 eelf_i386_haiku.c:644 eelf_i386_ldso.c:566 -#: eelf_i386_sol2.c:723 eelf_i386_vxworks.c:614 eelf_iamcu.c:591 -#: eelf_x86_64.c:5801 eelf_x86_64_cloudabi.c:700 eelf_x86_64_fbsd.c:700 -#: eelf_x86_64_haiku.c:700 eelf_x86_64_sol2.c:832 +#: eelf32_x86_64.c:5747 eelf_i386.c:5363 eelf_i386_be.c:538 +#: eelf_i386_fbsd.c:640 eelf_i386_haiku.c:640 eelf_i386_ldso.c:562 +#: eelf_i386_sol2.c:719 eelf_i386_vxworks.c:610 eelf_iamcu.c:587 +#: eelf_x86_64.c:5797 eelf_x86_64_cloudabi.c:696 eelf_x86_64_fbsd.c:696 +#: eelf_x86_64_haiku.c:696 eelf_x86_64_sol2.c:828 #, c-format msgid " -z call-nop=PADDING Use PADDING as 1-byte NOP for branch\n" msgstr "" +#: eelf32_x86_64.c:5750 eelf_i386.c:5366 eelf_i386_fbsd.c:643 +#: eelf_i386_haiku.c:643 eelf_x86_64.c:5800 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 ibtplt Generate IBT-enabled PLT entries\n" +msgstr "" + +#: eelf32_x86_64.c:5752 eelf_i386.c:5368 eelf_i386_fbsd.c:645 +#: eelf_i386_haiku.c:645 eelf_x86_64.c:5802 eelf_x86_64_cloudabi.c:701 +#: eelf_x86_64_fbsd.c:701 eelf_x86_64_haiku.c:701 eelf_x86_64_sol2.c:833 +#, c-format +msgid " -z ibt Generate GNU_PROPERTY_X86_FEATURE_1_IBT\n" +msgstr "" + #: eelf32_x86_64.c:5754 eelf_i386.c:5370 eelf_i386_fbsd.c:647 #: eelf_i386_haiku.c:647 eelf_x86_64.c:5804 eelf_x86_64_cloudabi.c:703 #: eelf_x86_64_fbsd.c:703 eelf_x86_64_haiku.c:703 eelf_x86_64_sol2.c:835 #, c-format -msgid " -z ibtplt Generate IBT-enabled PLT entries\n" +msgid "" +" -z shstk Generate GNU_PROPERTY_X86_FEATURE_1_SHSTK\n" msgstr "" #: eelf32_x86_64.c:5756 eelf_i386.c:5372 eelf_i386_fbsd.c:649 #: eelf_i386_haiku.c:649 eelf_x86_64.c:5806 eelf_x86_64_cloudabi.c:705 #: eelf_x86_64_fbsd.c:705 eelf_x86_64_haiku.c:705 eelf_x86_64_sol2.c:837 #, c-format -msgid " -z ibt Generate GNU_PROPERTY_X86_FEATURE_1_IBT\n" -msgstr "" - -#: eelf32_x86_64.c:5758 eelf_i386.c:5374 eelf_i386_fbsd.c:651 -#: eelf_i386_haiku.c:651 eelf_x86_64.c:5808 eelf_x86_64_cloudabi.c:707 -#: eelf_x86_64_fbsd.c:707 eelf_x86_64_haiku.c:707 eelf_x86_64_sol2.c:839 -#, c-format msgid "" -" -z shstk Generate GNU_PROPERTY_X86_FEATURE_1_SHSTK\n" +" -z cet-report=[none|warning|error] (default: none)\n" +" Report missing IBT and SHSTK properties\n" msgstr "" #: eelf32_x86_64.c:5760 eelf_i386.c:5376 eelf_i386_fbsd.c:653 #: eelf_i386_haiku.c:653 eelf_x86_64.c:5810 eelf_x86_64_cloudabi.c:709 #: eelf_x86_64_fbsd.c:709 eelf_x86_64_haiku.c:709 eelf_x86_64_sol2.c:841 #, c-format -msgid "" -" -z cet-report=[none|warning|error] (default: none)\n" -" Report missing IBT and SHSTK properties\n" -msgstr "" - -#: eelf32_x86_64.c:5764 eelf_i386.c:5380 eelf_i386_fbsd.c:657 -#: eelf_i386_haiku.c:657 eelf_x86_64.c:5814 eelf_x86_64_cloudabi.c:713 -#: eelf_x86_64_fbsd.c:713 eelf_x86_64_haiku.c:713 eelf_x86_64_sol2.c:845 -#, c-format msgid " -z report-relative-reloc Report relative relocations\n" msgstr "" -#: eelf32_x86_64.c:5767 eelf_i386.c:5383 eelf_i386_fbsd.c:660 -#: eelf_i386_haiku.c:660 eelf_x86_64.c:5817 eelf_x86_64_cloudabi.c:716 -#: eelf_x86_64_fbsd.c:716 eelf_x86_64_haiku.c:716 eelf_x86_64_sol2.c:848 +#: eelf32_x86_64.c:5763 eelf_i386.c:5379 eelf_i386_fbsd.c:656 +#: eelf_i386_haiku.c:656 eelf_x86_64.c:5813 eelf_x86_64_cloudabi.c:712 +#: eelf_x86_64_fbsd.c:712 eelf_x86_64_haiku.c:712 eelf_x86_64_sol2.c:844 #, 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:5770 eelf64lppc.c:1369 eelf64lppc_fbsd.c:1369 -#: eelf64ppc.c:1369 eelf64ppc_fbsd.c:1369 eelf_i386.c:5386 -#: eelf_i386_fbsd.c:663 eelf_i386_haiku.c:663 eelf_x86_64.c:5834 -#: eelf_x86_64_cloudabi.c:733 eelf_x86_64_fbsd.c:733 eelf_x86_64_haiku.c:733 -#: eelf_x86_64_sol2.c:865 +#: eelf32_x86_64.c:5766 eelf64lppc.c:1376 eelf64lppc_fbsd.c:1376 +#: eelf64ppc.c:1376 eelf64ppc_fbsd.c:1376 eelf_i386.c:5382 +#: eelf_i386_fbsd.c:659 eelf_i386_haiku.c:659 eelf_x86_64.c:5830 +#: eelf_x86_64_cloudabi.c:729 eelf_x86_64_fbsd.c:729 eelf_x86_64_haiku.c:729 +#: eelf_x86_64_sol2.c:861 #, c-format msgid " -z pack-relative-relocs Pack relative relocations\n" msgstr "" -#: eelf32_x86_64.c:5772 eelf64lppc.c:1371 eelf64lppc_fbsd.c:1371 -#: eelf64ppc.c:1371 eelf64ppc_fbsd.c:1371 eelf_i386.c:5388 -#: eelf_i386_fbsd.c:665 eelf_i386_haiku.c:665 eelf_x86_64.c:5836 -#: eelf_x86_64_cloudabi.c:735 eelf_x86_64_fbsd.c:735 eelf_x86_64_haiku.c:735 -#: eelf_x86_64_sol2.c:867 +#: eelf32_x86_64.c:5768 eelf64lppc.c:1378 eelf64lppc_fbsd.c:1378 +#: eelf64ppc.c:1378 eelf64ppc_fbsd.c:1378 eelf_i386.c:5384 +#: eelf_i386_fbsd.c:661 eelf_i386_haiku.c:661 eelf_x86_64.c:5832 +#: eelf_x86_64_cloudabi.c:731 eelf_x86_64_fbsd.c:731 eelf_x86_64_haiku.c:731 +#: eelf_x86_64_sol2.c:863 #, c-format msgid "" " -z nopack-relative-relocs Do not pack relative relocations (default)\n" msgstr "" -#: eelf32b4300.c:730 eelf32bmip.c:730 eelf32bmipn32.c:744 eelf32bsmip.c:744 -#: eelf32btsmip.c:730 eelf32btsmip_fbsd.c:730 eelf32btsmipn32.c:730 -#: eelf32btsmipn32_fbsd.c:730 eelf32ebmip.c:730 eelf32ebmipvxworks.c:769 -#: eelf32elmip.c:730 eelf32elmipvxworks.c:769 eelf32l4300.c:730 -#: eelf32lmip.c:730 eelf32lr5900.c:589 eelf32lr5900n32.c:588 eelf32lsmip.c:730 -#: eelf32ltsmip.c:730 eelf32ltsmip_fbsd.c:730 eelf32ltsmipn32.c:730 -#: eelf32ltsmipn32_fbsd.c:730 eelf32mipswindiss.c:563 eelf64bmip.c:744 -#: eelf64btsmip.c:730 eelf64btsmip_fbsd.c:730 eelf64ltsmip.c:730 -#: eelf64ltsmip_fbsd.c:730 eelf_mipsel_haiku.c:730 +#: eelf32b4300.c:726 eelf32bmip.c:726 eelf32bmipn32.c:740 eelf32bsmip.c:740 +#: eelf32btsmip.c:726 eelf32btsmip_fbsd.c:726 eelf32btsmipn32.c:726 +#: eelf32btsmipn32_fbsd.c:726 eelf32ebmip.c:726 eelf32ebmipvxworks.c:765 +#: eelf32elmip.c:726 eelf32elmipvxworks.c:765 eelf32l4300.c:726 +#: eelf32lmip.c:726 eelf32lr5900.c:585 eelf32lr5900n32.c:584 eelf32lsmip.c:726 +#: eelf32ltsmip.c:726 eelf32ltsmip_fbsd.c:726 eelf32ltsmipn32.c:726 +#: eelf32ltsmipn32_fbsd.c:726 eelf32mipswindiss.c:559 eelf64bmip.c:740 +#: eelf64btsmip.c:726 eelf64btsmip_fbsd.c:726 eelf64ltsmip.c:726 +#: eelf64ltsmip_fbsd.c:726 eelf_mipsel_haiku.c:726 #, c-format msgid "" " --insn32 Only generate 32-bit microMIPS instructions\n" msgstr "" -#: eelf32b4300.c:733 eelf32bmip.c:733 eelf32bmipn32.c:747 eelf32bsmip.c:747 -#: eelf32btsmip.c:733 eelf32btsmip_fbsd.c:733 eelf32btsmipn32.c:733 -#: eelf32btsmipn32_fbsd.c:733 eelf32ebmip.c:733 eelf32ebmipvxworks.c:772 -#: eelf32elmip.c:733 eelf32elmipvxworks.c:772 eelf32l4300.c:733 -#: eelf32lmip.c:733 eelf32lr5900.c:592 eelf32lr5900n32.c:591 eelf32lsmip.c:733 -#: eelf32ltsmip.c:733 eelf32ltsmip_fbsd.c:733 eelf32ltsmipn32.c:733 -#: eelf32ltsmipn32_fbsd.c:733 eelf32mipswindiss.c:566 eelf64bmip.c:747 -#: eelf64btsmip.c:733 eelf64btsmip_fbsd.c:733 eelf64ltsmip.c:733 -#: eelf64ltsmip_fbsd.c:733 eelf_mipsel_haiku.c:733 +#: eelf32b4300.c:729 eelf32bmip.c:729 eelf32bmipn32.c:743 eelf32bsmip.c:743 +#: eelf32btsmip.c:729 eelf32btsmip_fbsd.c:729 eelf32btsmipn32.c:729 +#: eelf32btsmipn32_fbsd.c:729 eelf32ebmip.c:729 eelf32ebmipvxworks.c:768 +#: eelf32elmip.c:729 eelf32elmipvxworks.c:768 eelf32l4300.c:729 +#: eelf32lmip.c:729 eelf32lr5900.c:588 eelf32lr5900n32.c:587 eelf32lsmip.c:729 +#: eelf32ltsmip.c:729 eelf32ltsmip_fbsd.c:729 eelf32ltsmipn32.c:729 +#: eelf32ltsmipn32_fbsd.c:729 eelf32mipswindiss.c:562 eelf64bmip.c:743 +#: eelf64btsmip.c:729 eelf64btsmip_fbsd.c:729 eelf64ltsmip.c:729 +#: eelf64ltsmip_fbsd.c:729 eelf_mipsel_haiku.c:729 #, c-format msgid " --no-insn32 Generate all microMIPS instructions\n" msgstr "" +#: eelf32b4300.c:732 eelf32bmip.c:732 eelf32bmipn32.c:746 eelf32bsmip.c:746 +#: eelf32btsmip.c:732 eelf32btsmip_fbsd.c:732 eelf32btsmipn32.c:732 +#: eelf32btsmipn32_fbsd.c:732 eelf32ebmip.c:732 eelf32ebmipvxworks.c:771 +#: eelf32elmip.c:732 eelf32elmipvxworks.c:771 eelf32l4300.c:732 +#: eelf32lmip.c:732 eelf32lr5900.c:591 eelf32lr5900n32.c:590 eelf32lsmip.c:732 +#: eelf32ltsmip.c:732 eelf32ltsmip_fbsd.c:732 eelf32ltsmipn32.c:732 +#: eelf32ltsmipn32_fbsd.c:732 eelf32mipswindiss.c:565 eelf64bmip.c:746 +#: eelf64btsmip.c:732 eelf64btsmip_fbsd.c:732 eelf64ltsmip.c:732 +#: eelf64ltsmip_fbsd.c:732 eelf_mipsel_haiku.c:732 +#, c-format +msgid "" +" --ignore-branch-isa Accept invalid branch relocations requiring\n" +" an ISA mode switch\n" +msgstr "" + #: eelf32b4300.c:736 eelf32bmip.c:736 eelf32bmipn32.c:750 eelf32bsmip.c:750 #: eelf32btsmip.c:736 eelf32btsmip_fbsd.c:736 eelf32btsmipn32.c:736 #: eelf32btsmipn32_fbsd.c:736 eelf32ebmip.c:736 eelf32ebmipvxworks.c:775 @@ -6033,7 +5938,7 @@ msgstr "" #: eelf64ltsmip_fbsd.c:736 eelf_mipsel_haiku.c:736 #, c-format msgid "" -" --ignore-branch-isa Accept invalid branch relocations requiring\n" +" --no-ignore-branch-isa Reject invalid branch relocations requiring\n" " an ISA mode switch\n" msgstr "" @@ -6048,65 +5953,34 @@ msgstr "" #: eelf64ltsmip_fbsd.c:740 eelf_mipsel_haiku.c:740 #, c-format msgid "" -" --no-ignore-branch-isa Reject invalid branch relocations requiring\n" -" an ISA mode switch\n" -msgstr "" - -#: eelf32b4300.c:744 eelf32bmip.c:744 eelf32bmipn32.c:758 eelf32bsmip.c:758 -#: eelf32btsmip.c:744 eelf32btsmip_fbsd.c:744 eelf32btsmipn32.c:744 -#: eelf32btsmipn32_fbsd.c:744 eelf32ebmip.c:744 eelf32ebmipvxworks.c:783 -#: eelf32elmip.c:744 eelf32elmipvxworks.c:783 eelf32l4300.c:744 -#: eelf32lmip.c:744 eelf32lr5900.c:603 eelf32lr5900n32.c:602 eelf32lsmip.c:744 -#: eelf32ltsmip.c:744 eelf32ltsmip_fbsd.c:744 eelf32ltsmipn32.c:744 -#: eelf32ltsmipn32_fbsd.c:744 eelf32mipswindiss.c:577 eelf64bmip.c:758 -#: eelf64btsmip.c:744 eelf64btsmip_fbsd.c:744 eelf64ltsmip.c:744 -#: eelf64ltsmip_fbsd.c:744 eelf_mipsel_haiku.c:744 -#, c-format -msgid "" " --compact-branches Generate compact branches/jumps for MIPS R6\n" msgstr "" -#: eelf32b4300.c:747 eelf32bmip.c:747 eelf32bmipn32.c:761 eelf32bsmip.c:761 -#: eelf32btsmip.c:747 eelf32btsmip_fbsd.c:747 eelf32btsmipn32.c:747 -#: eelf32btsmipn32_fbsd.c:747 eelf32ebmip.c:747 eelf32ebmipvxworks.c:786 -#: eelf32elmip.c:747 eelf32elmipvxworks.c:786 eelf32l4300.c:747 -#: eelf32lmip.c:747 eelf32lr5900.c:606 eelf32lr5900n32.c:605 eelf32lsmip.c:747 -#: eelf32ltsmip.c:747 eelf32ltsmip_fbsd.c:747 eelf32ltsmipn32.c:747 -#: eelf32ltsmipn32_fbsd.c:747 eelf32mipswindiss.c:580 eelf64bmip.c:761 -#: eelf64btsmip.c:747 eelf64btsmip_fbsd.c:747 eelf64ltsmip.c:747 -#: eelf64ltsmip_fbsd.c:747 eelf_mipsel_haiku.c:747 +#: eelf32b4300.c:743 eelf32bmip.c:743 eelf32bmipn32.c:757 eelf32bsmip.c:757 +#: eelf32btsmip.c:743 eelf32btsmip_fbsd.c:743 eelf32btsmipn32.c:743 +#: eelf32btsmipn32_fbsd.c:743 eelf32ebmip.c:743 eelf32ebmipvxworks.c:782 +#: eelf32elmip.c:743 eelf32elmipvxworks.c:782 eelf32l4300.c:743 +#: eelf32lmip.c:743 eelf32lr5900.c:602 eelf32lr5900n32.c:601 eelf32lsmip.c:743 +#: eelf32ltsmip.c:743 eelf32ltsmip_fbsd.c:743 eelf32ltsmipn32.c:743 +#: eelf32ltsmipn32_fbsd.c:743 eelf32mipswindiss.c:576 eelf64bmip.c:757 +#: eelf64btsmip.c:743 eelf64btsmip_fbsd.c:743 eelf64ltsmip.c:743 +#: eelf64ltsmip_fbsd.c:743 eelf_mipsel_haiku.c:743 #, c-format msgid "" " --no-compact-branches Generate delay slot branches/jumps for MIPS " "R6\n" msgstr "" -#: eelf32bfin.c:486 eelf32bfinfd.c:511 +#: eelf32bfin.c:482 eelf32bfinfd.c:507 #, c-format msgid " --code-in-l1 Put code in L1\n" msgstr "" -#: eelf32bfin.c:488 eelf32bfinfd.c:513 +#: eelf32bfin.c:484 eelf32bfinfd.c:509 #, c-format msgid " --data-in-l1 Put data in L1\n" msgstr "" -#: eelf32briscv.c:581 eelf32briscv_ilp32.c:581 eelf32briscv_ilp32f.c:581 -#: eelf32lriscv.c:581 eelf32lriscv_ilp32.c:581 eelf32lriscv_ilp32f.c:581 -#: eelf64briscv.c:581 eelf64briscv_lp64.c:581 eelf64briscv_lp64f.c:581 -#: eelf64lriscv.c:581 eelf64lriscv_lp64.c:581 eelf64lriscv_lp64f.c:581 -#, c-format -msgid " --relax-gp Perform GP relaxation\n" -msgstr "" - -#: eelf32briscv.c:582 eelf32briscv_ilp32.c:582 eelf32briscv_ilp32f.c:582 -#: eelf32lriscv.c:582 eelf32lriscv_ilp32.c:582 eelf32lriscv_ilp32f.c:582 -#: eelf64briscv.c:582 eelf64briscv_lp64.c:582 eelf64briscv_lp64f.c:582 -#: eelf64lriscv.c:582 eelf64lriscv_lp64.c:582 eelf64lriscv_lp64f.c:582 -#, c-format -msgid " --no-relax-gp Don't perform GP relaxation\n" -msgstr "" - #: eelf32cr16.c:87 msgid "" "%F%P: %pB: all input objects must be COFF or ELF for --embedded-relocs\n" @@ -6159,157 +6033,157 @@ msgstr "" msgid "%X%P: ppc_finish_symbols problem %E\n" msgstr "" -#: eelf32lppc.c:776 eelf32lppclinux.c:776 eelf32lppcnto.c:776 -#: eelf32lppcsim.c:776 eelf32ppc.c:776 eelf32ppc_fbsd.c:776 -#: eelf32ppchaiku.c:776 eelf32ppclinux.c:776 eelf32ppcnto.c:776 -#: eelf32ppcsim.c:776 eelf32ppcvxworks.c:750 eelf32ppcwindiss.c:776 -#: eelf64lppc.c:1232 eelf64lppc_fbsd.c:1232 eelf64ppc.c:1232 -#: eelf64ppc_fbsd.c:1232 +#: eelf32lppc.c:784 eelf32lppclinux.c:784 eelf32lppcnto.c:784 +#: eelf32lppcsim.c:784 eelf32ppc.c:784 eelf32ppc_fbsd.c:784 +#: eelf32ppchaiku.c:784 eelf32ppclinux.c:784 eelf32ppcnto.c:784 +#: eelf32ppcsim.c:784 eelf32ppcvxworks.c:758 eelf32ppcwindiss.c:784 +#: eelf64lppc.c:1239 eelf64lppc_fbsd.c:1239 eelf64ppc.c:1239 +#: eelf64ppc_fbsd.c:1239 msgid "%F%P: invalid --plt-align `%s'\n" msgstr "" -#: eelf32lppc.c:809 eelf32lppclinux.c:809 eelf32lppcnto.c:809 -#: eelf32lppcsim.c:809 eelf32ppc.c:809 eelf32ppc_fbsd.c:809 -#: eelf32ppchaiku.c:809 eelf32ppclinux.c:809 eelf32ppcnto.c:809 -#: eelf32ppcsim.c:809 eelf32ppcvxworks.c:783 eelf32ppcwindiss.c:809 +#: 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:791 eelf32ppcwindiss.c:817 msgid "%F%P: invalid pagesize `%s'\n" msgstr "" -#: 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 eelf32ppcvxworks.c:817 eelf32ppcwindiss.c:839 -#: eelf64lppc.c:1417 eelf64lppc_fbsd.c:1417 eelf64ppc.c:1417 -#: eelf64ppc_fbsd.c:1417 +#: eelf32lppc.c:847 eelf32lppclinux.c:847 eelf32lppcnto.c:847 +#: eelf32lppcsim.c:847 eelf32ppc.c:847 eelf32ppc_fbsd.c:847 +#: eelf32ppchaiku.c:847 eelf32ppclinux.c:847 eelf32ppcnto.c:847 +#: eelf32ppcsim.c:847 eelf32ppcvxworks.c:825 eelf32ppcwindiss.c:847 +#: eelf64lppc.c:1424 eelf64lppc_fbsd.c:1424 eelf64ppc.c:1424 +#: eelf64ppc_fbsd.c:1424 #, c-format msgid " --emit-stub-syms Label linker stubs with a symbol\n" msgstr "" -#: 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 eelf32ppcvxworks.c:820 eelf32ppcwindiss.c:842 -#: eelf64lppc.c:1420 eelf64lppc_fbsd.c:1420 eelf64ppc.c:1420 -#: eelf64ppc_fbsd.c:1420 +#: eelf32lppc.c:850 eelf32lppclinux.c:850 eelf32lppcnto.c:850 +#: eelf32lppcsim.c:850 eelf32ppc.c:850 eelf32ppc_fbsd.c:850 +#: eelf32ppchaiku.c:850 eelf32ppclinux.c:850 eelf32ppcnto.c:850 +#: eelf32ppcsim.c:850 eelf32ppcvxworks.c:828 eelf32ppcwindiss.c:850 +#: eelf64lppc.c:1427 eelf64lppc_fbsd.c:1427 eelf64ppc.c:1427 +#: eelf64ppc_fbsd.c:1427 #, c-format msgid " --no-emit-stub-syms Don't label linker stubs with a symbol\n" msgstr "" -#: 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 eelf32ppcvxworks.c:823 eelf32ppcwindiss.c:845 -#: eelf64lppc.c:1440 eelf64lppc_fbsd.c:1440 eelf64ppc.c:1440 -#: eelf64ppc_fbsd.c:1440 +#: eelf32lppc.c:853 eelf32lppclinux.c:853 eelf32lppcnto.c:853 +#: eelf32lppcsim.c:853 eelf32ppc.c:853 eelf32ppc_fbsd.c:853 +#: eelf32ppchaiku.c:853 eelf32ppclinux.c:853 eelf32ppcnto.c:853 +#: eelf32ppcsim.c:853 eelf32ppcvxworks.c:831 eelf32ppcwindiss.c:853 +#: eelf64lppc.c:1447 eelf64lppc_fbsd.c:1447 eelf64ppc.c:1447 +#: eelf64ppc_fbsd.c:1447 #, c-format msgid " --no-tls-optimize Don't try to optimize TLS accesses\n" msgstr "" -#: 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 eelf32ppcvxworks.c:826 eelf32ppcwindiss.c:848 -#: eelf64lppc.c:1446 eelf64lppc_fbsd.c:1446 eelf64ppc.c:1446 -#: eelf64ppc_fbsd.c:1446 +#: eelf32lppc.c:856 eelf32lppclinux.c:856 eelf32lppcnto.c:856 +#: eelf32lppcsim.c:856 eelf32ppc.c:856 eelf32ppc_fbsd.c:856 +#: eelf32ppchaiku.c:856 eelf32ppclinux.c:856 eelf32ppcnto.c:856 +#: eelf32ppcsim.c:856 eelf32ppcvxworks.c:834 eelf32ppcwindiss.c:856 +#: eelf64lppc.c:1453 eelf64lppc_fbsd.c:1453 eelf64ppc.c:1453 +#: eelf64ppc_fbsd.c:1453 #, c-format msgid " --no-tls-get-addr-optimize Don't use a special __tls_get_addr call\n" msgstr "" -#: 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 eelf32ppcwindiss.c:851 +#: eelf32lppc.c:859 eelf32lppclinux.c:859 eelf32lppcnto.c:859 +#: eelf32lppcsim.c:859 eelf32ppc.c:859 eelf32ppc_fbsd.c:859 +#: eelf32ppchaiku.c:859 eelf32ppclinux.c:859 eelf32ppcnto.c:859 +#: eelf32ppcsim.c:859 eelf32ppcwindiss.c:859 #, c-format msgid " --secure-plt Use new-style PLT if possible\n" msgstr "" -#: eelf32lppc.c:854 eelf32lppclinux.c:854 eelf32lppcnto.c:854 -#: eelf32lppcsim.c:854 eelf32ppc.c:854 eelf32ppc_fbsd.c:854 -#: eelf32ppchaiku.c:854 eelf32ppclinux.c:854 eelf32ppcnto.c:854 -#: eelf32ppcsim.c:854 eelf32ppcwindiss.c:854 +#: eelf32lppc.c:862 eelf32lppclinux.c:862 eelf32lppcnto.c:862 +#: eelf32lppcsim.c:862 eelf32ppc.c:862 eelf32ppc_fbsd.c:862 +#: eelf32ppchaiku.c:862 eelf32ppclinux.c:862 eelf32ppcnto.c:862 +#: eelf32ppcsim.c:862 eelf32ppcwindiss.c:862 #, c-format msgid " --bss-plt Force old-style BSS PLT\n" msgstr "" -#: eelf32lppc.c:857 eelf32lppclinux.c:857 eelf32lppcnto.c:857 -#: eelf32lppcsim.c:857 eelf32ppc.c:857 eelf32ppc_fbsd.c:857 -#: eelf32ppchaiku.c:857 eelf32ppclinux.c:857 eelf32ppcnto.c:857 -#: eelf32ppcsim.c:857 eelf32ppcwindiss.c:857 +#: eelf32lppc.c:865 eelf32lppclinux.c:865 eelf32lppcnto.c:865 +#: eelf32lppcsim.c:865 eelf32ppc.c:865 eelf32ppc_fbsd.c:865 +#: eelf32ppchaiku.c:865 eelf32ppclinux.c:865 eelf32ppcnto.c:865 +#: eelf32ppcsim.c:865 eelf32ppcwindiss.c:865 #, c-format msgid " --plt-align Align PLT call stubs to fit cache lines\n" msgstr "" -#: eelf32lppc.c:860 eelf32lppclinux.c:860 eelf32lppcnto.c:860 -#: eelf32lppcsim.c:860 eelf32ppc.c:860 eelf32ppc_fbsd.c:860 -#: eelf32ppchaiku.c:860 eelf32ppclinux.c:860 eelf32ppcnto.c:860 -#: eelf32ppcsim.c:860 eelf32ppcwindiss.c:860 eelf64lppc.c:1399 -#: eelf64lppc_fbsd.c:1399 eelf64ppc.c:1399 eelf64ppc_fbsd.c:1399 +#: eelf32lppc.c:868 eelf32lppclinux.c:868 eelf32lppcnto.c:868 +#: eelf32lppcsim.c:868 eelf32ppc.c:868 eelf32ppc_fbsd.c:868 +#: eelf32ppchaiku.c:868 eelf32ppclinux.c:868 eelf32ppcnto.c:868 +#: eelf32ppcsim.c:868 eelf32ppcwindiss.c:868 eelf64lppc.c:1406 +#: eelf64lppc_fbsd.c:1406 eelf64ppc.c:1406 eelf64ppc_fbsd.c:1406 #, c-format msgid " --no-plt-align Dont't align individual PLT call stubs\n" msgstr "" -#: eelf32lppc.c:863 eelf32lppclinux.c:863 eelf32lppcnto.c:863 -#: eelf32lppcsim.c:863 eelf32ppc.c:863 eelf32ppc_fbsd.c:863 -#: eelf32ppchaiku.c:863 eelf32ppclinux.c:863 eelf32ppcnto.c:863 -#: eelf32ppcsim.c:863 eelf32ppcwindiss.c:863 eelf64lppc.c:1458 -#: eelf64lppc_fbsd.c:1458 eelf64ppc.c:1458 eelf64ppc_fbsd.c:1458 +#: eelf32lppc.c:871 eelf32lppclinux.c:871 eelf32lppcnto.c:871 +#: eelf32lppcsim.c:871 eelf32ppc.c:871 eelf32ppc_fbsd.c:871 +#: eelf32ppchaiku.c:871 eelf32ppclinux.c:871 eelf32ppcnto.c:871 +#: eelf32ppcsim.c:871 eelf32ppcwindiss.c:871 eelf64lppc.c:1465 +#: eelf64lppc_fbsd.c:1465 eelf64ppc.c:1465 eelf64ppc_fbsd.c:1465 #, c-format msgid "" " --no-inline-optimize Don't convert inline PLT to direct calls\n" msgstr "" -#: eelf32lppc.c:866 eelf32lppclinux.c:866 eelf32lppcnto.c:866 -#: eelf32lppcsim.c:866 eelf32ppc.c:866 eelf32ppc_fbsd.c:866 -#: eelf32ppchaiku.c:866 eelf32ppclinux.c:866 eelf32ppcnto.c:866 -#: eelf32ppcsim.c:866 eelf32ppcwindiss.c:866 +#: eelf32lppc.c:874 eelf32lppclinux.c:874 eelf32lppcnto.c:874 +#: eelf32lppcsim.c:874 eelf32ppc.c:874 eelf32ppc_fbsd.c:874 +#: eelf32ppchaiku.c:874 eelf32ppclinux.c:874 eelf32ppcnto.c:874 +#: eelf32ppcsim.c:874 eelf32ppcwindiss.c:874 #, c-format msgid " --sdata-got Force GOT location just before .sdata\n" msgstr "" -#: eelf32lppc.c:869 eelf32lppclinux.c:869 eelf32lppcnto.c:869 -#: eelf32lppcsim.c:869 eelf32ppc.c:869 eelf32ppc_fbsd.c:869 -#: eelf32ppchaiku.c:869 eelf32ppclinux.c:869 eelf32ppcnto.c:869 -#: eelf32ppcsim.c:869 eelf32ppcvxworks.c:829 eelf32ppcwindiss.c:869 +#: eelf32lppc.c:877 eelf32lppclinux.c:877 eelf32lppcnto.c:877 +#: eelf32lppcsim.c:877 eelf32ppc.c:877 eelf32ppc_fbsd.c:877 +#: eelf32ppchaiku.c:877 eelf32ppclinux.c:877 eelf32ppcnto.c:877 +#: eelf32ppcsim.c:877 eelf32ppcvxworks.c:837 eelf32ppcwindiss.c:877 #, c-format msgid "" " --ppc476-workaround [=pagesize]\n" " Avoid a cache bug on ppc476\n" msgstr "" -#: eelf32lppc.c:873 eelf32lppclinux.c:873 eelf32lppcnto.c:873 -#: eelf32lppcsim.c:873 eelf32ppc.c:873 eelf32ppc_fbsd.c:873 -#: eelf32ppchaiku.c:873 eelf32ppclinux.c:873 eelf32ppcnto.c:873 -#: eelf32ppcsim.c:873 eelf32ppcvxworks.c:833 eelf32ppcwindiss.c:873 +#: eelf32lppc.c:881 eelf32lppclinux.c:881 eelf32lppcnto.c:881 +#: eelf32lppcsim.c:881 eelf32ppc.c:881 eelf32ppc_fbsd.c:881 +#: eelf32ppchaiku.c:881 eelf32ppclinux.c:881 eelf32ppcnto.c:881 +#: eelf32ppcsim.c:881 eelf32ppcvxworks.c:841 eelf32ppcwindiss.c:881 #, c-format msgid " --no-ppc476-workaround Disable workaround\n" msgstr "" -#: eelf32lppc.c:876 eelf32lppclinux.c:876 eelf32lppcnto.c:876 -#: eelf32lppcsim.c:876 eelf32ppc.c:876 eelf32ppc_fbsd.c:876 -#: eelf32ppchaiku.c:876 eelf32ppclinux.c:876 eelf32ppcnto.c:876 -#: eelf32ppcsim.c:876 eelf32ppcvxworks.c:836 eelf32ppcwindiss.c:876 +#: eelf32lppc.c:884 eelf32lppclinux.c:884 eelf32lppcnto.c:884 +#: eelf32lppcsim.c:884 eelf32ppc.c:884 eelf32ppc_fbsd.c:884 +#: eelf32ppchaiku.c:884 eelf32ppclinux.c:884 eelf32ppcnto.c:884 +#: eelf32ppcsim.c:884 eelf32ppcvxworks.c:844 eelf32ppcwindiss.c:884 #, c-format msgid " --no-pic-fixup Don't edit non-pic to pic\n" msgstr "" -#: eelf32lppc.c:879 eelf32lppclinux.c:879 eelf32lppcnto.c:879 -#: eelf32lppcsim.c:879 eelf32ppc.c:879 eelf32ppc_fbsd.c:879 -#: eelf32ppchaiku.c:879 eelf32ppclinux.c:879 eelf32ppcnto.c:879 -#: eelf32ppcsim.c:879 eelf32ppcvxworks.c:839 eelf32ppcwindiss.c:879 +#: eelf32lppc.c:887 eelf32lppclinux.c:887 eelf32lppcnto.c:887 +#: eelf32lppcsim.c:887 eelf32ppc.c:887 eelf32ppc_fbsd.c:887 +#: eelf32ppchaiku.c:887 eelf32ppclinux.c:887 eelf32ppcnto.c:887 +#: eelf32ppcsim.c:887 eelf32ppcvxworks.c:847 eelf32ppcwindiss.c:887 #, c-format msgid "" " --vle-reloc-fixup Correct old object file 16A/16D relocation\n" msgstr "" -#: eelf32mcore.c:336 +#: eelf32mcore.c:332 #, c-format msgid "" " --base_file Generate a base file for relocatable DLLs\n" msgstr "" -#: eelf32metag.c:749 eelf64lppc.c:1374 eelf64lppc_fbsd.c:1374 eelf64ppc.c:1374 -#: eelf64ppc_fbsd.c:1374 ehppaelf.c:609 ehppalinux.c:791 ehppanbsd.c:791 -#: ehppaobsd.c:791 +#: eelf32metag.c:745 eelf64lppc.c:1381 eelf64lppc_fbsd.c:1381 eelf64ppc.c:1381 +#: eelf64ppc_fbsd.c:1381 ehppaelf.c:605 ehppalinux.c:787 ehppanbsd.c:787 +#: ehppaobsd.c:787 #, c-format msgid "" " --stub-group-size=N Maximum size of a group of input sections " @@ -6326,28 +6200,28 @@ msgid "" " choose suitable defaults.\n" msgstr "" -#: eelf32rx.c:368 +#: eelf32rx.c:364 #, c-format msgid "" " --no-flag-mismatch-warnings Don't warn about objects with incompatible\n" " endian or dsp settings\n" msgstr "" -#: eelf32rx.c:370 +#: eelf32rx.c:366 #, c-format msgid "" " --flag-mismatch-warnings Warn about objects with incompatible\n" " endian, dsp or ABI settings\n" msgstr "" -#: eelf32rx.c:372 +#: eelf32rx.c:368 #, c-format msgid "" " --ignore-lma Ignore segment LMAs [default]\n" " (for Renesas Tools compatibility)\n" msgstr "" -#: eelf32rx.c:374 +#: eelf32rx.c:370 #, c-format msgid " --no-ignore-lma Don't ignore segment LMAs\n" msgstr "" @@ -6410,20 +6284,20 @@ msgstr "" msgid "%F%P: Relaxation not supported with --enable-non-contiguous-regions.\n" msgstr "" -#: eelf32xtensa.c:2420 +#: eelf32xtensa.c:2416 #, c-format msgid "" " --size-opt When relaxing longcalls, prefer size\n" " optimization over branch target alignment\n" msgstr "" -#: eelf32xtensa.c:2423 +#: eelf32xtensa.c:2419 #, c-format msgid "" " --abi-windowed Choose windowed ABI for the output object\n" msgstr "" -#: eelf32xtensa.c:2425 +#: eelf32xtensa.c:2421 #, c-format msgid " --abi-call0 Choose call0 ABI for the output object\n" msgstr "" @@ -6432,19 +6306,19 @@ msgstr "" msgid "%F%P: %pB: Instruction sets of object files incompatible\n" msgstr "" -#: eelf64_ia64.c:522 eelf64_ia64_fbsd.c:522 +#: eelf64_ia64.c:518 eelf64_ia64_fbsd.c:518 #, c-format msgid "" " --itanium Generate code for Intel Itanium processor\n" msgstr "" -#: eelf64_s390.c:565 +#: eelf64_s390.c:561 #, c-format msgid "" " --s390-pgste Tell the kernel to allocate 4k page tables\n" msgstr "" -#: eelf64alpha.c:594 eelf64alpha_fbsd.c:594 eelf64alpha_nbsd.c:594 +#: eelf64alpha.c:590 eelf64alpha_fbsd.c:590 eelf64alpha_nbsd.c:590 #, c-format msgid "" " --taso Load executable in the lower 31-bit " @@ -6452,12 +6326,12 @@ msgid "" " virtual address range\n" msgstr "" -#: eelf64alpha.c:597 eelf64alpha_fbsd.c:597 eelf64alpha_nbsd.c:597 +#: eelf64alpha.c:593 eelf64alpha_fbsd.c:593 eelf64alpha_nbsd.c:593 #, c-format msgid " --secureplt Force PLT in text segment\n" msgstr "" -#: eelf64alpha.c:599 eelf64alpha_fbsd.c:599 eelf64alpha_nbsd.c:599 +#: eelf64alpha.c:595 eelf64alpha_fbsd.c:595 eelf64alpha_nbsd.c:595 #, c-format msgid " --no-secureplt Force PLT in data segment\n" msgstr "" @@ -6476,76 +6350,76 @@ msgstr "" msgid "%P: .init/.fini fragments use differing TOC pointers\n" msgstr "" -#: eelf64lppc.c:1261 eelf64lppc_fbsd.c:1261 eelf64ppc.c:1261 -#: eelf64ppc_fbsd.c:1261 +#: eelf64lppc.c:1268 eelf64lppc_fbsd.c:1268 eelf64ppc.c:1268 +#: eelf64ppc_fbsd.c:1268 msgid "%F%P: invalid --power10-stubs argument `%s'\n" msgstr "" -#: eelf64lppc.c:1384 eelf64ppc.c:1384 +#: eelf64lppc.c:1391 eelf64ppc.c:1391 #, c-format msgid "" " --plt-static-chain PLT call stubs should load r11 (default)\n" msgstr "" -#: eelf64lppc.c:1387 eelf64ppc.c:1387 +#: eelf64lppc.c:1394 eelf64ppc.c:1394 #, c-format msgid " --no-plt-static-chain PLT call stubs should not load r11\n" msgstr "" -#: eelf64lppc.c:1390 eelf64lppc_fbsd.c:1390 eelf64ppc.c:1390 -#: eelf64ppc_fbsd.c:1390 +#: eelf64lppc.c:1397 eelf64lppc_fbsd.c:1397 eelf64ppc.c:1397 +#: eelf64ppc_fbsd.c:1397 #, c-format msgid " --plt-thread-safe PLT call stubs with load-load barrier\n" msgstr "" -#: eelf64lppc.c:1393 eelf64lppc_fbsd.c:1393 eelf64ppc.c:1393 -#: eelf64ppc_fbsd.c:1393 +#: eelf64lppc.c:1400 eelf64lppc_fbsd.c:1400 eelf64ppc.c:1400 +#: eelf64ppc_fbsd.c:1400 #, c-format msgid " --no-plt-thread-safe PLT call stubs without barrier\n" msgstr "" -#: eelf64lppc.c:1396 eelf64lppc_fbsd.c:1396 eelf64ppc.c:1396 -#: eelf64ppc_fbsd.c:1396 +#: eelf64lppc.c:1403 eelf64lppc_fbsd.c:1403 eelf64ppc.c:1403 +#: eelf64ppc_fbsd.c:1403 #, c-format msgid " --plt-align [=] Align PLT call stubs to fit cache lines\n" msgstr "" -#: eelf64lppc.c:1402 eelf64lppc_fbsd.c:1402 eelf64ppc.c:1402 -#: eelf64ppc_fbsd.c:1402 +#: eelf64lppc.c:1409 eelf64lppc_fbsd.c:1409 eelf64ppc.c:1409 +#: eelf64ppc_fbsd.c:1409 #, c-format msgid "" " --plt-localentry Optimize calls to ELFv2 localentry:0 " "functions\n" msgstr "" -#: eelf64lppc.c:1405 eelf64lppc_fbsd.c:1405 eelf64ppc.c:1405 -#: eelf64ppc_fbsd.c:1405 +#: eelf64lppc.c:1412 eelf64lppc_fbsd.c:1412 eelf64ppc.c:1412 +#: eelf64ppc_fbsd.c:1412 #, c-format msgid " --no-plt-localentry Don't optimize ELFv2 calls\n" msgstr "" -#: eelf64lppc.c:1408 eelf64lppc_fbsd.c:1408 eelf64ppc.c:1408 -#: eelf64ppc_fbsd.c:1408 +#: eelf64lppc.c:1415 eelf64lppc_fbsd.c:1415 eelf64ppc.c:1415 +#: eelf64ppc_fbsd.c:1415 #, c-format msgid "" " --power10-stubs [=auto] Use Power10 PLT call stubs (default auto)\n" msgstr "" -#: eelf64lppc.c:1411 eelf64lppc_fbsd.c:1411 eelf64ppc.c:1411 -#: eelf64ppc_fbsd.c:1411 +#: eelf64lppc.c:1418 eelf64lppc_fbsd.c:1418 eelf64ppc.c:1418 +#: eelf64ppc_fbsd.c:1418 #, c-format msgid "" " --no-pcrel-optimize Don't perform R_PPC64_PCREL_OPT optimization\n" msgstr "" -#: eelf64lppc.c:1414 eelf64lppc_fbsd.c:1414 eelf64ppc.c:1414 -#: eelf64ppc_fbsd.c:1414 +#: eelf64lppc.c:1421 eelf64lppc_fbsd.c:1421 eelf64ppc.c:1421 +#: eelf64ppc_fbsd.c:1421 #, c-format msgid " --no-power10-stubs Don't use Power10 PLT call stubs\n" msgstr "" -#: eelf64lppc.c:1423 eelf64lppc_fbsd.c:1423 eelf64ppc.c:1423 -#: eelf64ppc_fbsd.c:1423 +#: eelf64lppc.c:1430 eelf64lppc_fbsd.c:1430 eelf64ppc.c:1430 +#: eelf64ppc_fbsd.c:1430 #, c-format msgid "" " --dotsyms For every version pattern \"foo\" in a " @@ -6555,15 +6429,15 @@ msgid "" " descriptor symbols. Defaults to on.\n" msgstr "" -#: eelf64lppc.c:1429 eelf64lppc_fbsd.c:1429 eelf64ppc.c:1429 -#: eelf64ppc_fbsd.c:1429 +#: eelf64lppc.c:1436 eelf64lppc_fbsd.c:1436 eelf64ppc.c:1436 +#: eelf64ppc_fbsd.c:1436 #, c-format msgid "" " --no-dotsyms Don't do anything special in version scripts\n" msgstr "" -#: eelf64lppc.c:1432 eelf64lppc_fbsd.c:1432 eelf64ppc.c:1432 -#: eelf64ppc_fbsd.c:1432 +#: eelf64lppc.c:1439 eelf64lppc_fbsd.c:1439 eelf64ppc.c:1439 +#: eelf64ppc_fbsd.c:1439 #, c-format msgid "" " --save-restore-funcs Provide register save and restore routines " @@ -6572,71 +6446,71 @@ msgid "" " final link, off for ld -r.\n" msgstr "" -#: eelf64lppc.c:1437 eelf64lppc_fbsd.c:1437 eelf64ppc.c:1437 -#: eelf64ppc_fbsd.c:1437 +#: eelf64lppc.c:1444 eelf64lppc_fbsd.c:1444 eelf64ppc.c:1444 +#: eelf64ppc_fbsd.c:1444 #, c-format msgid " --no-save-restore-funcs Don't provide these routines\n" msgstr "" -#: eelf64lppc.c:1443 eelf64lppc_fbsd.c:1443 eelf64ppc.c:1443 -#: eelf64ppc_fbsd.c:1443 +#: eelf64lppc.c:1450 eelf64lppc_fbsd.c:1450 eelf64ppc.c:1450 +#: eelf64ppc_fbsd.c:1450 #, c-format msgid "" " --tls-get-addr-optimize Force use of special __tls_get_addr call\n" msgstr "" -#: eelf64lppc.c:1449 eelf64lppc_fbsd.c:1449 eelf64ppc.c:1449 -#: eelf64ppc_fbsd.c:1449 +#: eelf64lppc.c:1456 eelf64lppc_fbsd.c:1456 eelf64ppc.c:1456 +#: eelf64ppc_fbsd.c:1456 #, c-format msgid " --tls-get-addr-regsave Force register save __tls_get_addr stub\n" msgstr "" -#: eelf64lppc.c:1452 eelf64lppc_fbsd.c:1452 eelf64ppc.c:1452 -#: eelf64ppc_fbsd.c:1452 +#: eelf64lppc.c:1459 eelf64lppc_fbsd.c:1459 eelf64ppc.c:1459 +#: eelf64ppc_fbsd.c:1459 #, c-format msgid "" " --no-tls-get-addr-regsave Don't use register save __tls_get_addr stub\n" msgstr "" -#: eelf64lppc.c:1455 eelf64lppc_fbsd.c:1455 eelf64ppc.c:1455 -#: eelf64ppc_fbsd.c:1455 +#: eelf64lppc.c:1462 eelf64lppc_fbsd.c:1462 eelf64ppc.c:1462 +#: eelf64ppc_fbsd.c:1462 #, c-format msgid " --no-opd-optimize Don't optimize the OPD section\n" msgstr "" -#: eelf64lppc.c:1461 eelf64lppc_fbsd.c:1461 eelf64ppc.c:1461 -#: eelf64ppc_fbsd.c:1461 +#: eelf64lppc.c:1468 eelf64lppc_fbsd.c:1468 eelf64ppc.c:1468 +#: eelf64ppc_fbsd.c:1468 #, c-format msgid " --no-toc-optimize Don't optimize the TOC section\n" msgstr "" -#: eelf64lppc.c:1464 eelf64lppc_fbsd.c:1464 eelf64ppc.c:1464 -#: eelf64ppc_fbsd.c:1464 +#: eelf64lppc.c:1471 eelf64lppc_fbsd.c:1471 eelf64ppc.c:1471 +#: eelf64ppc_fbsd.c:1471 #, c-format msgid "" " --no-multi-toc Disallow automatic multiple toc sections\n" msgstr "" -#: eelf64lppc.c:1467 eelf64lppc_fbsd.c:1467 eelf64ppc.c:1467 -#: eelf64ppc_fbsd.c:1467 +#: eelf64lppc.c:1474 eelf64lppc_fbsd.c:1474 eelf64ppc.c:1474 +#: eelf64ppc_fbsd.c:1474 #, c-format msgid " --no-toc-sort Don't sort TOC and GOT sections\n" msgstr "" -#: eelf64lppc.c:1470 eelf64lppc_fbsd.c:1470 eelf64ppc.c:1470 -#: eelf64ppc_fbsd.c:1470 +#: eelf64lppc.c:1477 eelf64lppc_fbsd.c:1477 eelf64ppc.c:1477 +#: eelf64ppc_fbsd.c:1477 #, c-format msgid "" " --non-overlapping-opd Canonicalize .opd, so that there are no\n" " overlapping .opd entries\n" msgstr "" -#: eelf64lppc_fbsd.c:1384 eelf64ppc_fbsd.c:1384 +#: eelf64lppc_fbsd.c:1391 eelf64ppc_fbsd.c:1391 #, c-format msgid " --plt-static-chain PLT call stubs should load r111\n" msgstr "" -#: eelf64lppc_fbsd.c:1387 eelf64ppc_fbsd.c:1387 +#: eelf64lppc_fbsd.c:1394 eelf64ppc_fbsd.c:1394 #, c-format msgid "" " --no-plt-static-chain PLT call stubs should not load r11 (default)\n" @@ -6655,53 +6529,53 @@ msgstr "" msgid "%F%P: can't finalize linker-allocated global registers\n" msgstr "" -#: eelf_x86_64.c:5710 eelf_x86_64_cloudabi.c:609 eelf_x86_64_fbsd.c:609 -#: eelf_x86_64_haiku.c:609 eelf_x86_64_sol2.c:741 +#: eelf_x86_64.c:5706 eelf_x86_64_cloudabi.c:605 eelf_x86_64_fbsd.c:605 +#: eelf_x86_64_haiku.c:605 eelf_x86_64_sol2.c:737 msgid "%F%P: invalid option for -z lam-u48-report=: %s\n" msgstr "" -#: eelf_x86_64.c:5724 eelf_x86_64_cloudabi.c:623 eelf_x86_64_fbsd.c:623 -#: eelf_x86_64_haiku.c:623 eelf_x86_64_sol2.c:755 +#: eelf_x86_64.c:5720 eelf_x86_64_cloudabi.c:619 eelf_x86_64_fbsd.c:619 +#: eelf_x86_64_haiku.c:619 eelf_x86_64_sol2.c:751 msgid "%F%P: invalid option for -z lam-u57-report=: %s\n" msgstr "" -#: eelf_x86_64.c:5745 eelf_x86_64_cloudabi.c:644 eelf_x86_64_fbsd.c:644 -#: eelf_x86_64_haiku.c:644 eelf_x86_64_sol2.c:776 +#: eelf_x86_64.c:5741 eelf_x86_64_cloudabi.c:640 eelf_x86_64_fbsd.c:640 +#: eelf_x86_64_haiku.c:640 eelf_x86_64_sol2.c:772 msgid "%F%P: invalid option for -z lam-report=: %s\n" msgstr "" -#: eelf_x86_64.c:5820 eelf_x86_64_cloudabi.c:719 eelf_x86_64_fbsd.c:719 -#: eelf_x86_64_haiku.c:719 eelf_x86_64_sol2.c:851 +#: eelf_x86_64.c:5816 eelf_x86_64_cloudabi.c:715 eelf_x86_64_fbsd.c:715 +#: eelf_x86_64_haiku.c:715 eelf_x86_64_sol2.c:847 #, c-format msgid "" " -z lam-u48 Generate GNU_PROPERTY_X86_FEATURE_1_LAM_U48\n" msgstr "" -#: eelf_x86_64.c:5822 eelf_x86_64_cloudabi.c:721 eelf_x86_64_fbsd.c:721 -#: eelf_x86_64_haiku.c:721 eelf_x86_64_sol2.c:853 +#: eelf_x86_64.c:5818 eelf_x86_64_cloudabi.c:717 eelf_x86_64_fbsd.c:717 +#: eelf_x86_64_haiku.c:717 eelf_x86_64_sol2.c:849 #, c-format msgid "" " -z lam-u48-report=[none|warning|error] (default: none)\n" " Report missing LAM_U48 property\n" msgstr "" -#: eelf_x86_64.c:5825 eelf_x86_64_cloudabi.c:724 eelf_x86_64_fbsd.c:724 -#: eelf_x86_64_haiku.c:724 eelf_x86_64_sol2.c:856 +#: eelf_x86_64.c:5821 eelf_x86_64_cloudabi.c:720 eelf_x86_64_fbsd.c:720 +#: eelf_x86_64_haiku.c:720 eelf_x86_64_sol2.c:852 #, c-format msgid "" " -z lam-u57 Generate GNU_PROPERTY_X86_FEATURE_1_LAM_U57\n" msgstr "" -#: eelf_x86_64.c:5827 eelf_x86_64_cloudabi.c:726 eelf_x86_64_fbsd.c:726 -#: eelf_x86_64_haiku.c:726 eelf_x86_64_sol2.c:858 +#: eelf_x86_64.c:5823 eelf_x86_64_cloudabi.c:722 eelf_x86_64_fbsd.c:722 +#: eelf_x86_64_haiku.c:722 eelf_x86_64_sol2.c:854 #, c-format msgid "" " -z lam-u57-report=[none|warning|error] (default: none)\n" " Report missing LAM_U57 property\n" msgstr "" -#: eelf_x86_64.c:5830 eelf_x86_64_cloudabi.c:729 eelf_x86_64_fbsd.c:729 -#: eelf_x86_64_haiku.c:729 eelf_x86_64_sol2.c:861 +#: eelf_x86_64.c:5826 eelf_x86_64_cloudabi.c:725 eelf_x86_64_fbsd.c:725 +#: eelf_x86_64_haiku.c:725 eelf_x86_64_sol2.c:857 #, c-format msgid "" " -z lam-report=[none|warning|error] (default: none)\n" @@ -6712,7 +6586,7 @@ msgstr "" msgid "%X%P: can not set gp\n" msgstr "" -#: ehppaelf.c:605 ehppalinux.c:787 ehppanbsd.c:787 ehppaobsd.c:787 +#: ehppaelf.c:601 ehppalinux.c:783 ehppanbsd.c:783 ehppaobsd.c:783 #, c-format msgid "" " --multi-subspace Generate import and export stubs to support\n" @@ -6745,7 +6619,7 @@ msgstr "" msgid "%X%P: changing output format whilst linking is not supported\n" msgstr "" -#: em68hc11elf.c:602 em68hc11elfb.c:602 em68hc12elf.c:602 em68hc12elfb.c:602 +#: em68hc11elf.c:598 em68hc11elfb.c:598 em68hc12elf.c:598 em68hc12elfb.c:598 #, c-format msgid "" " --no-trampoline Do not generate the far trampolines used to " @@ -6753,7 +6627,7 @@ msgid "" " a far function using jsr or bsr\n" msgstr "" -#: em68hc11elf.c:605 em68hc11elfb.c:605 em68hc12elf.c:605 em68hc12elfb.c:605 +#: em68hc11elf.c:601 em68hc11elfb.c:601 em68hc12elf.c:601 em68hc12elfb.c:601 #, c-format msgid "" " --bank-window NAME Specify the name of the memory region " @@ -6765,11 +6639,11 @@ msgstr "" msgid "%F%P: %pB: all input objects must be ELF for --embedded-relocs\n" msgstr "" -#: em68kelf.c:648 em68kelfnbsd.c:648 +#: em68kelf.c:644 em68kelfnbsd.c:644 msgid "%P: unrecognized --got argument '%s'\n" msgstr "" -#: em68kelf.c:661 em68kelfnbsd.c:661 +#: em68kelf.c:657 em68kelfnbsd.c:657 #, c-format msgid " --got= Specify GOT handling scheme\n" msgstr "" @@ -6836,50 +6710,50 @@ msgstr "" msgid "%F%P: %pB: ABI version of object files mismatched\n" msgstr "" -#: ends32belf.c:436 ends32belf16m.c:436 ends32belf_linux.c:569 ends32elf.c:436 -#: ends32elf16m.c:436 ends32elf_linux.c:569 +#: ends32belf.c:432 ends32belf16m.c:432 ends32belf_linux.c:565 ends32elf.c:432 +#: ends32elf16m.c:432 ends32elf_linux.c:565 msgid "%P: --mbaseline is not used anymore\n" msgstr "" +#: ends32belf.c:443 ends32belf16m.c:443 ends32belf_linux.c:576 ends32elf.c:443 +#: ends32elf16m.c:443 ends32elf_linux.c:576 +msgid "%P: --relax-[no-]reduce-fp-updat is not used anymore\n" +msgstr "" + #: ends32belf.c:447 ends32belf16m.c:447 ends32belf_linux.c:580 ends32elf.c:447 #: ends32elf16m.c:447 ends32elf_linux.c:580 -msgid "%P: --relax-[no-]reduce-fp-updat is not used anymore\n" -msgstr "" - -#: ends32belf.c:451 ends32belf16m.c:451 ends32belf_linux.c:584 ends32elf.c:451 -#: ends32elf16m.c:451 ends32elf_linux.c:584 msgid "%P: missing file for --mexport-symbols\n" msgstr "" -#: ends32belf.c:464 ends32belf.c:473 ends32belf16m.c:464 ends32belf16m.c:473 -#: ends32belf_linux.c:597 ends32belf_linux.c:606 ends32elf.c:464 -#: ends32elf.c:473 ends32elf16m.c:464 ends32elf16m.c:473 ends32elf_linux.c:597 -#: ends32elf_linux.c:606 +#: ends32belf.c:460 ends32belf.c:469 ends32belf16m.c:460 ends32belf16m.c:469 +#: ends32belf_linux.c:593 ends32belf_linux.c:602 ends32elf.c:460 +#: ends32elf.c:469 ends32elf16m.c:460 ends32elf16m.c:469 ends32elf_linux.c:593 +#: ends32elf_linux.c:602 msgid "%P: valid arguments to --mhyper-relax=(low|medium|high)\n" msgstr "" -#: ends32belf.c:493 ends32belf16m.c:493 ends32belf_linux.c:626 ends32elf.c:493 -#: ends32elf16m.c:493 ends32elf_linux.c:626 +#: ends32belf.c:489 ends32belf16m.c:489 ends32belf_linux.c:622 ends32elf.c:489 +#: ends32elf16m.c:489 ends32elf_linux.c:622 #, c-format msgid " --m[no-]fp-as-gp Disable/enable fp-as-gp relaxation\n" msgstr "" -#: ends32belf.c:495 ends32belf16m.c:495 ends32belf_linux.c:628 ends32elf.c:495 -#: ends32elf16m.c:495 ends32elf_linux.c:628 +#: ends32belf.c:491 ends32belf16m.c:491 ends32belf_linux.c:624 ends32elf.c:491 +#: ends32elf16m.c:491 ends32elf_linux.c:624 #, c-format msgid " --mexport-symbols=FILE Exporting symbols in linker script\n" msgstr "" -#: ends32belf.c:497 ends32belf16m.c:497 ends32belf_linux.c:630 ends32elf.c:497 -#: ends32elf16m.c:497 ends32elf_linux.c:630 +#: ends32belf.c:493 ends32belf16m.c:493 ends32belf_linux.c:626 ends32elf.c:493 +#: ends32elf16m.c:493 ends32elf_linux.c:626 #, c-format msgid "" " --mhyper-relax=level Adjust relax level (low|medium|high). default: " "medium\n" msgstr "" -#: ends32belf.c:499 ends32belf16m.c:499 ends32belf_linux.c:632 ends32elf.c:499 -#: ends32elf16m.c:499 ends32elf_linux.c:632 +#: ends32belf.c:495 ends32belf16m.c:495 ends32belf_linux.c:628 ends32elf.c:495 +#: ends32elf16m.c:495 ends32elf_linux.c:628 #, c-format msgid " --m[no-]tlsdesc-trampoline Disable/enable TLS DESC trampoline\n" msgstr "" diff --git a/ld/scripttempl/arclinux.sc b/ld/scripttempl/arclinux.sc index 20429df45a8..3c27625fedb 100644 --- a/ld/scripttempl/arclinux.sc +++ b/ld/scripttempl/arclinux.sc @@ -613,7 +613,7 @@ cat < text} - .rodata ${RELOCATING-0} : + .rodata ${RELOCATING-0} : ${RELOCATING+ALIGN(2)} { - ${RELOCATING+. = ALIGN(2); + ${RELOCATING+ *(.lower.rodata.* .lower.rodata) . = ALIGN(2); @@ -254,11 +254,11 @@ SECTIONS ${RELOCATING+ _vectors_end = . ; } } ${RELOCATING+ > vectors} - .data ${RELOCATING-0} : + .data ${RELOCATING-0} : ${RELOCATING+ALIGN(2)} { - ${RELOCATING+ PROVIDE (__data_start = .) ; } - ${RELOCATING+ PROVIDE (__datastart = .) ; } - ${RELOCATING+. = ALIGN(2); + ${RELOCATING+ + PROVIDE (__data_start = .) ; + PROVIDE (__datastart = .) ; KEEP (*(.jcr)) *(.data.rel.ro.local) *(.data.rel.ro*) @@ -287,9 +287,8 @@ SECTIONS ${RELOCATING+__romdatastart = LOADADDR(.data); __romdatacopysize = SIZEOF(.data);} - .bss ${RELOCATING-0}${RELOCATING+SIZEOF(.data) + ADDR(.data)} : + .bss ${RELOCATING-0}${RELOCATING+ALIGN(SIZEOF(.data) + ADDR(.data), 2)} : { - ${RELOCATING+. = ALIGN(2);} ${RELOCATING+ PROVIDE (__bss_start = .); } ${RELOCATING+ PROVIDE (__bssstart = .); *(.lower.bss.* .lower.bss) @@ -304,9 +303,8 @@ SECTIONS /* This section contains data that is not initialized during load, or during the application's initialization sequence. */ - .noinit ${RELOCATING-0}${RELOCATING+SIZEOF(.bss) + ADDR(.bss)} : + .noinit ${RELOCATING-0}${RELOCATING+ALIGN(SIZEOF(.bss) + ADDR(.bss), 2)} : { - ${RELOCATING+. = ALIGN(2);} ${RELOCATING+ PROVIDE (__noinit_start = .) ; } *(.noinit${RELOCATING+ .noinit.* .gnu.linkonce.n.*}) ${RELOCATING+. = ALIGN(2);} @@ -315,9 +313,8 @@ SECTIONS /* This section contains data that is initialized during load, but not during the application's initialization sequence. */ - .persistent ${RELOCATING-0}${RELOCATING+SIZEOF(.noinit) + ADDR(.noinit)} : + .persistent ${RELOCATING-0}${RELOCATING+ALIGN(SIZEOF(.noinit) + ADDR(.noinit), 2)} : { - ${RELOCATING+. = ALIGN(2);} ${RELOCATING+ PROVIDE (__persistent_start = .) ; } *(.persistent${RELOCATING+ .persistent.* .gnu.linkonce.p.*}) ${RELOCATING+. = ALIGN(2);} diff --git a/ld/scripttempl/elf64bpf.sc b/ld/scripttempl/elf64bpf.sc index 74154585125..07a0726384c 100644 --- a/ld/scripttempl/elf64bpf.sc +++ b/ld/scripttempl/elf64bpf.sc @@ -636,7 +636,7 @@ cat <DATA} .bss ${RELOCATING-0} : diff --git a/ld/scripttempl/elfxtensa.sc b/ld/scripttempl/elfxtensa.sc index 7c71525cbeb..9c85d157881 100644 --- a/ld/scripttempl/elfxtensa.sc +++ b/ld/scripttempl/elfxtensa.sc @@ -500,6 +500,7 @@ cat <ram AT>rom - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-elf/noload-1.t b/ld/testsuite/ld-elf/noload-1.t index 768cd423e02..7c5c26dcb3e 100644 --- a/ld/testsuite/ld-elf/noload-1.t +++ b/ld/testsuite/ld-elf/noload-1.t @@ -5,5 +5,5 @@ SECTIONS { *(TEST) } - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-elf/overlay.t b/ld/testsuite/ld-elf/overlay.t index 640af9650fb..ee37d05d2b5 100644 --- a/ld/testsuite/ld-elf/overlay.t +++ b/ld/testsuite/ld-elf/overlay.t @@ -11,7 +11,7 @@ SECTIONS } = 0 .silly-name3 : { *(.silly-name3) } = 0 .silly-name4 : { *(.silly-name4) } = 0 - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } ASSERT(ADDR(.text1)==ADDR(.text2), "overlay error") ASSERT(ADDR(.silly-name1)==ADDR(.silly-name2), "silly overlay error") } diff --git a/ld/testsuite/ld-elf/pr13839.t b/ld/testsuite/ld-elf/pr13839.t index 6baa2288193..59997198ae5 100644 --- a/ld/testsuite/ld-elf/pr13839.t +++ b/ld/testsuite/ld-elf/pr13839.t @@ -4,6 +4,6 @@ SECTIONS { *(.text) } _end = .; - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } . = ASSERT((_end - _text <= (512 * 1024 * 1024)), "foo"); diff --git a/ld/testsuite/ld-elf/pr14052.t b/ld/testsuite/ld-elf/pr14052.t index 84fffbd499b..ebc40f124ef 100644 --- a/ld/testsuite/ld-elf/pr14052.t +++ b/ld/testsuite/ld-elf/pr14052.t @@ -8,5 +8,5 @@ SECTIONS { _data_start = .; *(.data) } - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-elf/pr14156c.t b/ld/testsuite/ld-elf/pr14156c.t index c8be2c57bfb..adf1f0a5076 100644 --- a/ld/testsuite/ld-elf/pr14156c.t +++ b/ld/testsuite/ld-elf/pr14156c.t @@ -1,5 +1,5 @@ SECTIONS { .text : { *(.text) } .foo : { *(SORT_NONE(.foo)) } - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-elf/pr19005.t b/ld/testsuite/ld-elf/pr19005.t index 0e89e0b6342..e9170c37132 100644 --- a/ld/testsuite/ld-elf/pr19005.t +++ b/ld/testsuite/ld-elf/pr19005.t @@ -2,5 +2,5 @@ SECTIONS { .foo : { *(.foo) } .bar : { *(.bar) } - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-elf/relocatable.t b/ld/testsuite/ld-elf/relocatable.t index 2ec056ae338..0839555b731 100644 --- a/ld/testsuite/ld-elf/relocatable.t +++ b/ld/testsuite/ld-elf/relocatable.t @@ -4,5 +4,5 @@ SECTIONS .text : { *(.text) } . = 0x900000; .data : { *(.data) } - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-i386/alloc.t b/ld/testsuite/ld-i386/alloc.t index f7dd17a3001..1bbb9a6be17 100644 --- a/ld/testsuite/ld-i386/alloc.t +++ b/ld/testsuite/ld-i386/alloc.t @@ -8,5 +8,5 @@ SECTIONS .bar : AT(ADDR(.bar) - 0xC0000000) { *(.bar) } :text .bss : AT(ADDR(.bss) - 0xC0000000) { *(.bss) } .foo 0 : AT(ADDR(.bss) + SIZEOF(.bss) - 0xC0000000) { *(.foo) } :text - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-i386/ifunc-textrel-1a.d b/ld/testsuite/ld-i386/ifunc-textrel-1a.d index 15f545db03d..aad77e7d230 100644 --- a/ld/testsuite/ld-i386/ifunc-textrel-1a.d +++ b/ld/testsuite/ld-i386/ifunc-textrel-1a.d @@ -1,4 +1,4 @@ #source: ../ld-x86-64/ifunc-textrel-1.s #as: --32 -#ld: -m elf_i386 -pie +#ld: -m elf_i386 -pie -z notext #warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with -fPIE diff --git a/ld/testsuite/ld-i386/ifunc-textrel-1b.d b/ld/testsuite/ld-i386/ifunc-textrel-1b.d index 6e4a67c48f0..bf0f2ac5df9 100644 --- a/ld/testsuite/ld-i386/ifunc-textrel-1b.d +++ b/ld/testsuite/ld-i386/ifunc-textrel-1b.d @@ -1,4 +1,4 @@ #source: ../ld-x86-64/ifunc-textrel-1.s #as: --32 -#ld: -m elf_i386 -shared +#ld: -m elf_i386 -shared -z notext #warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with -fPIC diff --git a/ld/testsuite/ld-i386/pr18801a.d b/ld/testsuite/ld-i386/pr18801a.d index 73cb5d17beb..b1ef145a882 100644 --- a/ld/testsuite/ld-i386/pr18801a.d +++ b/ld/testsuite/ld-i386/pr18801a.d @@ -1,4 +1,4 @@ #source: pr18801.s #as: --32 -#ld: -m elf_i386 -pie +#ld: -m elf_i386 -pie -z notext #warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with -fPIE diff --git a/ld/testsuite/ld-i386/pr18801b.d b/ld/testsuite/ld-i386/pr18801b.d index 0bf7fb729cb..983346ca248 100644 --- a/ld/testsuite/ld-i386/pr18801b.d +++ b/ld/testsuite/ld-i386/pr18801b.d @@ -1,4 +1,4 @@ #source: pr18801.s #as: --32 -#ld: -m elf_i386 -shared +#ld: -m elf_i386 -shared -z notext #warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with -fPIC diff --git a/ld/testsuite/ld-loongarch-elf/local-ifunc-reloc.d b/ld/testsuite/ld-loongarch-elf/local-ifunc-reloc.d index 29f2d3f36d3..bf73d9f2875 100644 --- a/ld/testsuite/ld-loongarch-elf/local-ifunc-reloc.d +++ b/ld/testsuite/ld-loongarch-elf/local-ifunc-reloc.d @@ -6,5 +6,5 @@ DYNAMIC RELOCATION RECORDS OFFSET +TYPE +VALUE -[[:xdigit:]]+ R_LARCH_IRELATIVE +\*ABS\*\+0x[[:xdigit:]]+ [[:xdigit:]]+ R_LARCH_64 +test +[[:xdigit:]]+ R_LARCH_IRELATIVE +\*ABS\*\+0x[[:xdigit:]]+ diff --git a/ld/testsuite/ld-pe/image_size.t b/ld/testsuite/ld-pe/image_size.t index f646eca5921..93f2f50b10f 100644 --- a/ld/testsuite/ld-pe/image_size.t +++ b/ld/testsuite/ld-pe/image_size.t @@ -11,5 +11,5 @@ SECTIONS { *(.data) } - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/empty-address-1.d b/ld/testsuite/ld-scripts/empty-address-1.d index dbaf778024e..210b70f7097 100644 --- a/ld/testsuite/ld-scripts/empty-address-1.d +++ b/ld/testsuite/ld-scripts/empty-address-1.d @@ -5,5 +5,6 @@ 0+0 [AT] _start #... 0+200 [ADT] __data_end +#... 0+200 [ADT] __data_start #pass diff --git a/ld/testsuite/ld-scripts/empty-address-1.t b/ld/testsuite/ld-scripts/empty-address-1.t index a24f25a138b..a5796836935 100644 --- a/ld/testsuite/ld-scripts/empty-address-1.t +++ b/ld/testsuite/ld-scripts/empty-address-1.t @@ -8,5 +8,5 @@ SECTIONS } __data_end = .; .bss : { *(.bss) } - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/empty-address-2a.d b/ld/testsuite/ld-scripts/empty-address-2a.d index 4471a1be6a3..a619ea19a07 100644 --- a/ld/testsuite/ld-scripts/empty-address-2a.d +++ b/ld/testsuite/ld-scripts/empty-address-2a.d @@ -1,7 +1,7 @@ #source: empty-address-2.s #ld: -Ttext 0x0000000 -Tdata 0x200 -T empty-address-2a.t #nm: -n -#xfail: bfin-*-linux* frv-*-*linux* riscv64*-*-* tic54x-*-* +#xfail: bfin-*-linux* frv-*-*linux* riscv64*-*-* tic54x-*-* [is_xcoff_format] #... 0+0 T _start #... diff --git a/ld/testsuite/ld-scripts/empty-address-2a.t b/ld/testsuite/ld-scripts/empty-address-2a.t index 0ab29a4db28..bc531158eb3 100644 --- a/ld/testsuite/ld-scripts/empty-address-2a.t +++ b/ld/testsuite/ld-scripts/empty-address-2a.t @@ -4,5 +4,5 @@ SECTIONS .data : { *(.data) } __data_end = .; .bss : { *(.bss) } - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/empty-address-2b.d b/ld/testsuite/ld-scripts/empty-address-2b.d index 8dfe888b63d..c9b97b8b809 100644 --- a/ld/testsuite/ld-scripts/empty-address-2b.d +++ b/ld/testsuite/ld-scripts/empty-address-2b.d @@ -1,7 +1,7 @@ #source: empty-address-2.s #ld: -Ttext 0x0000000 -Tdata 0x200 -T empty-address-2b.t #nm: -n -#xfail: bfin-*-linux* frv-*-*linux* riscv64*-*-* tic54x-*-* +#xfail: bfin-*-linux* frv-*-*linux* riscv64*-*-* tic54x-*-* [is_xcoff_format] #... 0+0 T _start #... diff --git a/ld/testsuite/ld-scripts/empty-address-2b.t b/ld/testsuite/ld-scripts/empty-address-2b.t index c6d1e523fc2..788cd65da48 100644 --- a/ld/testsuite/ld-scripts/empty-address-2b.t +++ b/ld/testsuite/ld-scripts/empty-address-2b.t @@ -8,5 +8,5 @@ SECTIONS } __data_end = .; .bss : { *(.bss) } - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/empty-address-3a.d b/ld/testsuite/ld-scripts/empty-address-3a.d index b3135bf9231..fe87ebc34ac 100644 --- a/ld/testsuite/ld-scripts/empty-address-3a.d +++ b/ld/testsuite/ld-scripts/empty-address-3a.d @@ -1,6 +1,7 @@ #source: empty-address-3.s #ld: -T empty-address-3a.t #nm: -n +#xfail: [is_xcoff_format] #... 0+0 T _start diff --git a/ld/testsuite/ld-scripts/empty-address-3a.t b/ld/testsuite/ld-scripts/empty-address-3a.t index 28767a19c51..42128f8c0c0 100644 --- a/ld/testsuite/ld-scripts/empty-address-3a.t +++ b/ld/testsuite/ld-scripts/empty-address-3a.t @@ -7,5 +7,5 @@ SECTIONS } __data_end = .; .bss : { *(.bss) } - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/empty-address-3b.d b/ld/testsuite/ld-scripts/empty-address-3b.d index 1e68e29b428..0d9babef6f7 100644 --- a/ld/testsuite/ld-scripts/empty-address-3b.d +++ b/ld/testsuite/ld-scripts/empty-address-3b.d @@ -1,6 +1,7 @@ #source: empty-address-3.s #ld: -T empty-address-3b.t #nm: -n +#xfail: [is_xcoff_format] #... 0+0 T _start diff --git a/ld/testsuite/ld-scripts/empty-address-3b.t b/ld/testsuite/ld-scripts/empty-address-3b.t index 6da24218858..2b9e27d926a 100644 --- a/ld/testsuite/ld-scripts/empty-address-3b.t +++ b/ld/testsuite/ld-scripts/empty-address-3b.t @@ -8,5 +8,5 @@ SECTIONS } __data_end = .; .bss : { *(.bss) } - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/empty-address-3c.t b/ld/testsuite/ld-scripts/empty-address-3c.t index 0829c58a3e4..13fe34e6cd2 100644 --- a/ld/testsuite/ld-scripts/empty-address-3c.t +++ b/ld/testsuite/ld-scripts/empty-address-3c.t @@ -8,5 +8,5 @@ SECTIONS } __data_end = .; .bss : { *(.bss) } - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/empty-address-4.t b/ld/testsuite/ld-scripts/empty-address-4.t index f25bbfea8ac..bb0c2f6aebc 100644 --- a/ld/testsuite/ld-scripts/empty-address-4.t +++ b/ld/testsuite/ld-scripts/empty-address-4.t @@ -7,5 +7,5 @@ SECTIONS ASSERT (. < 0x400, oops); } .bss : { *(.bss) } - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/phdrs.t b/ld/testsuite/ld-scripts/phdrs.t index 283e30c6799..1267322694a 100644 --- a/ld/testsuite/ld-scripts/phdrs.t +++ b/ld/testsuite/ld-scripts/phdrs.t @@ -12,5 +12,5 @@ SECTIONS . = 0x800000 + SIZEOF_HEADERS; .text : { *(.text) } :text .data : { *(.data) } :data - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/phdrs2.t b/ld/testsuite/ld-scripts/phdrs2.t index bccbcecbc8c..d5a4c2a34d7 100644 --- a/ld/testsuite/ld-scripts/phdrs2.t +++ b/ld/testsuite/ld-scripts/phdrs2.t @@ -19,5 +19,5 @@ SECTIONS LONG(EMPTY_START) ; } : Bar - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/phdrs3.t b/ld/testsuite/ld-scripts/phdrs3.t index 4bd4e858cf0..d86e2068962 100644 --- a/ld/testsuite/ld-scripts/phdrs3.t +++ b/ld/testsuite/ld-scripts/phdrs3.t @@ -12,5 +12,5 @@ SECTIONS . = 0x800000 + SIZEOF_HEADERS; .text : { *(.text) } :text .data : { *(.data) } :data - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/phdrs3a.t b/ld/testsuite/ld-scripts/phdrs3a.t index c07ff34b71f..4853b7b1018 100644 --- a/ld/testsuite/ld-scripts/phdrs3a.t +++ b/ld/testsuite/ld-scripts/phdrs3a.t @@ -11,5 +11,5 @@ SECTIONS . = 0x800000 + SIZEOF_HEADERS; .text : { *(.text) } :text .data : { *(.data) } :data - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/provide-9.t b/ld/testsuite/ld-scripts/provide-9.t index 00d906aa80a..b26051a22b8 100644 --- a/ld/testsuite/ld-scripts/provide-9.t +++ b/ld/testsuite/ld-scripts/provide-9.t @@ -20,6 +20,6 @@ SECTIONS *(.bss .bss.*) } >FOO - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/sort-file.t b/ld/testsuite/ld-scripts/sort-file.t index 559a0009256..f46f5748d3e 100644 --- a/ld/testsuite/ld-scripts/sort-file.t +++ b/ld/testsuite/ld-scripts/sort-file.t @@ -2,5 +2,5 @@ SECTIONS { .text : { SORT_BY_NAME(*)(.text*) } .data : { *(.data*) } - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/sort.t b/ld/testsuite/ld-scripts/sort.t index c53481f2f3d..a7bb88fe652 100644 --- a/ld/testsuite/ld-scripts/sort.t +++ b/ld/testsuite/ld-scripts/sort.t @@ -1,5 +1,5 @@ SECTIONS { .text : {*(.text .text.*)} - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/sort_b_a.t b/ld/testsuite/ld-scripts/sort_b_a.t index cbfd3c3a9e9..c53f6c2c30d 100644 --- a/ld/testsuite/ld-scripts/sort_b_a.t +++ b/ld/testsuite/ld-scripts/sort_b_a.t @@ -1,5 +1,5 @@ SECTIONS { .text : {*(SORT_BY_ALIGNMENT(.text*))} - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/sort_b_a_a.t b/ld/testsuite/ld-scripts/sort_b_a_a.t index 359cdffdd4e..df0b190bba1 100644 --- a/ld/testsuite/ld-scripts/sort_b_a_a.t +++ b/ld/testsuite/ld-scripts/sort_b_a_a.t @@ -1,5 +1,5 @@ SECTIONS { .text : {*(SORT_BY_ALIGNMENT(SORT_BY_ALIGNMENT(.text*)))} - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/sort_b_a_n.t b/ld/testsuite/ld-scripts/sort_b_a_n.t index 04c3917b4b4..f5661bb0d78 100644 --- a/ld/testsuite/ld-scripts/sort_b_a_n.t +++ b/ld/testsuite/ld-scripts/sort_b_a_n.t @@ -1,5 +1,5 @@ SECTIONS { .text : {*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.text*)))} - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/sort_b_n.t b/ld/testsuite/ld-scripts/sort_b_n.t index 26c2b6ea5dd..344d7f3218a 100644 --- a/ld/testsuite/ld-scripts/sort_b_n.t +++ b/ld/testsuite/ld-scripts/sort_b_n.t @@ -1,5 +1,5 @@ SECTIONS { .text : {*(SORT_BY_NAME(.text*))} - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/sort_b_n_a.t b/ld/testsuite/ld-scripts/sort_b_n_a.t index 49cbdd36047..532ba5276b9 100644 --- a/ld/testsuite/ld-scripts/sort_b_n_a.t +++ b/ld/testsuite/ld-scripts/sort_b_n_a.t @@ -1,5 +1,5 @@ SECTIONS { .text : {*(SORT_BY_NAME(SORT_BY_ALIGNMENT(.text*)))} - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/sort_b_n_n.t b/ld/testsuite/ld-scripts/sort_b_n_n.t index b4eabfe256c..b8b091491b5 100644 --- a/ld/testsuite/ld-scripts/sort_b_n_n.t +++ b/ld/testsuite/ld-scripts/sort_b_n_n.t @@ -1,5 +1,5 @@ SECTIONS { .text : {*(SORT_BY_NAME(SORT_BY_NAME(.text*)))} - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-scripts/sort_no.t b/ld/testsuite/ld-scripts/sort_no.t index d797c796e29..7ddc3524f23 100644 --- a/ld/testsuite/ld-scripts/sort_no.t +++ b/ld/testsuite/ld-scripts/sort_no.t @@ -1,5 +1,5 @@ SECTIONS { .text : {*(.text*)} - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-x86-64/ifunc-textrel-1a.d b/ld/testsuite/ld-x86-64/ifunc-textrel-1a.d index 64a1e7021fd..667366091b9 100644 --- a/ld/testsuite/ld-x86-64/ifunc-textrel-1a.d +++ b/ld/testsuite/ld-x86-64/ifunc-textrel-1a.d @@ -1,4 +1,4 @@ #source: ifunc-textrel-1.s #as: --64 -defsym __x86_64__=1 -#ld: -m elf_x86_64 -pie +#ld: -m elf_x86_64 -pie -z notext #warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with -fPIE diff --git a/ld/testsuite/ld-x86-64/ifunc-textrel-1b.d b/ld/testsuite/ld-x86-64/ifunc-textrel-1b.d index aeb31fdb3dc..f7b8e02a72c 100644 --- a/ld/testsuite/ld-x86-64/ifunc-textrel-1b.d +++ b/ld/testsuite/ld-x86-64/ifunc-textrel-1b.d @@ -1,4 +1,4 @@ #source: ifunc-textrel-1.s #as: --64 -defsym __x86_64__=1 -#ld: -m elf_x86_64 -shared +#ld: -m elf_x86_64 -shared -z notext #warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with -fPIC diff --git a/ld/testsuite/ld-x86-64/pe-x86-64-5.od b/ld/testsuite/ld-x86-64/pe-x86-64-5.od index ffd6622dc0d..2a1b69b7857 100644 --- a/ld/testsuite/ld-x86-64/pe-x86-64-5.od +++ b/ld/testsuite/ld-x86-64/pe-x86-64-5.od @@ -6,7 +6,7 @@ SYMBOL TABLE: 0+402010 g .data 0000000000000000 initdummy 0+400000 g .text\$mn 0000000000000000 __executable_start 0+401000 g .text\$mn 0000000000000000 begin -0+402012 g .bss 0000000000000000 __bss_start +0+402014 g .bss 0000000000000000 __bss_start 0+402000 g .data 0000000000000000 Struct 0+402011 g .data 0000000000000000 initializedVar 0+402012 g .data 0000000000000000 _edata diff --git a/ld/testsuite/ld-x86-64/pe-x86-64-5.rd b/ld/testsuite/ld-x86-64/pe-x86-64-5.rd index 237052805e9..060233ea4d7 100644 --- a/ld/testsuite/ld-x86-64/pe-x86-64-5.rd +++ b/ld/testsuite/ld-x86-64/pe-x86-64-5.rd @@ -6,7 +6,7 @@ Symbol table '.symtab' contains 11 entries: +[a-f0-9]+: 0000000000402010 0 NOTYPE GLOBAL DEFAULT 2 initdummy +[a-f0-9]+: 0000000000400000 0 NOTYPE GLOBAL DEFAULT 1 __executable_start +[a-f0-9]+: 0000000000401000 0 NOTYPE GLOBAL DEFAULT 1 begin - +[a-f0-9]+: 0000000000402012 0 NOTYPE GLOBAL DEFAULT 3 __bss_start + +[a-f0-9]+: 0000000000402014 0 NOTYPE GLOBAL DEFAULT 3 __bss_start +[a-f0-9]+: 0000000000402000 0 NOTYPE GLOBAL DEFAULT 2 Struct +[a-f0-9]+: 0000000000402011 0 NOTYPE GLOBAL DEFAULT 2 initializedVar +[a-f0-9]+: 0000000000402012 0 NOTYPE GLOBAL DEFAULT 2 _edata diff --git a/ld/testsuite/ld-x86-64/pr18176.t b/ld/testsuite/ld-x86-64/pr18176.t index 480c0cd99a7..0004a5e3607 100644 --- a/ld/testsuite/ld-x86-64/pr18176.t +++ b/ld/testsuite/ld-x86-64/pr18176.t @@ -35,5 +35,5 @@ SECTIONS . = ALIGN(64 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); - /DISCARD/ : { *(.*) } + /DISCARD/ : { *(*) } } diff --git a/ld/testsuite/ld-x86-64/pr18801a.d b/ld/testsuite/ld-x86-64/pr18801a.d index 2b4159d3044..61f9d991185 100644 --- a/ld/testsuite/ld-x86-64/pr18801a.d +++ b/ld/testsuite/ld-x86-64/pr18801a.d @@ -1,4 +1,4 @@ #source: pr18801.s #as: --64 -#ld: -melf_x86_64 -pie +#ld: -melf_x86_64 -pie -z notext #warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with -fPIE diff --git a/ld/testsuite/ld-x86-64/pr18801b.d b/ld/testsuite/ld-x86-64/pr18801b.d index 34dab1aa6cb..967a339f90b 100644 --- a/ld/testsuite/ld-x86-64/pr18801b.d +++ b/ld/testsuite/ld-x86-64/pr18801b.d @@ -1,4 +1,4 @@ #source: pr18801.s #as: --64 -#ld: -melf_x86_64 -shared +#ld: -melf_x86_64 -shared -z notext #warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with -fPIC diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index a0e55822751..99f95c64568 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,8 +1,49 @@ -2023-07-30 Nick Clifton +2023-07-31 Jose E. Marchesi - This is the 2.41 release. - * configure: Regenerate. - * po/opcodes.pot: Regenerate. + PR 30705 + * bpf-dis.c (print_insn_bpf): Check that info->section->owner is + actually available before using it. + +2023-07-30 Jose E. Marchesi + + * bpf-dis.c: Initialize asm_bpf_version to -1. + (print_insn_bpf): Set BPF ISA version from the cpu version ELF + header flags if no explicit version set in the command line. + * disassemble.c (disassemble_init_for_target): Remove unused code. + +2023-07-26 Jose E. Marchesi + + * bpf-opc.c (bpf_opcodes): Fix BPF_INSN_NEGR to not use a src + register. + +2023-07-24 Jose E. Marchesi + + * bpf-opc.c (bpf_opcodes): Add entries for the BSWAP* + instructions. + +2023-07-24 Jose E. Marchesi + + * bpf-opc.c (bpf_opcodes): Fix pseudo-c syntax for MOVS* and LDXS* + instructions. + +2023-07-23 Jose E. Marchesi + + * bpf-opc.c (bpf_opcodes): Add entry for jal. + +2023-07-21 Jose E. Marchesi + + * bpf-opc.c (bpf_opcodes): Add entries for LDXS{B,W,H,DW} + instructions. + +2023-07-21 Jose E. Marchesi + + * bpf-opc.c (bpf_opcodes): Add entries for MOVS{8,16,32}R and + MOVS32{8,16,32}R instructions. and MOVS32I instructions. + +2023-07-21 Jose E. Marchesi + + * Makefile.am (TARGET64_LIBOPCODES_CFILES): Add missing bpf-dis.c + * Makefile.in: Regenerate. 2023-07-03 Nick Clifton diff --git a/opcodes/Makefile.am b/opcodes/Makefile.am index 578fdc056c5..eaeb33a2f3f 100644 --- a/opcodes/Makefile.am +++ b/opcodes/Makefile.am @@ -59,7 +59,6 @@ BUILD_LIB_DEPS = @BUILD_LIB_DEPS@ # Header files. HFILES = \ aarch64-asm.h aarch64-dis.h aarch64-opc.h aarch64-tbl.h \ - bpf-desc.h bpf-opc.h \ cris-desc.h cris-opc.h \ epiphany-desc.h epiphany-opc.h \ fr30-desc.h fr30-opc.h \ @@ -94,10 +93,7 @@ TARGET64_LIBOPCODES_CFILES = \ aarch64-opc-2.c \ alpha-dis.c \ alpha-opc.c \ - bpf-asm.c \ - bpf-desc.c \ bpf-dis.c \ - bpf-ibld.c \ bpf-opc.c \ ia64-dis.c \ ia64-opc.c \ @@ -352,7 +348,6 @@ CGENDEPS = \ CGEN_CPUS = cris epiphany fr30 frv ip2k iq2000 lm32 m32c m32r mep mt or1k xstormy16 if CGEN_MAINT -BPF_DEPS = stamp-bpf CRIS_DEPS = stamp-cris EPIPHANY_DEPS = stamp-epiphany FR30_DEPS = stamp-fr30 @@ -367,7 +362,6 @@ MT_DEPS = stamp-mt OR1K_DEPS = stamp-or1k XSTORMY16_DEPS = stamp-xstormy16 else -BPF_DEPS = CRIS_DEPS = EPIPHANY_DEPS = FR30_DEPS = @@ -400,15 +394,6 @@ run-cgen-all: # For now, require developers to configure with --enable-cgen-maint. -$(srcdir)/bpf-desc.h $(srcdir)/bpf-desc.c $(srcdir)/bpf-opc.h \ - $(srcdir)/bpf-opc.c $(srcdir)/bpf-ibld.c \ - $(srcdir)/bpf-asm.c $(srcdir)/bpf-dis.c: $(BPF_DEPS) - @true - -stamp-bpf: $(CGENDEPS) $(CPUDIR)/bpf.cpu $(CPUDIR)/bpf.opc - $(MAKE) run-cgen arch=bpf prefix=bpf \ - archfile=$(CPUDIR)/bpf.cpu opcfile=$(CPUDIR)/bpf.opc - $(srcdir)/cris-desc.h $(srcdir)/cris-desc.c $(srcdir)/cris-opc.h: $(CRIS_DEPS) @true diff --git a/opcodes/Makefile.in b/opcodes/Makefile.in index 2db307e8d7c..1edd2cedf8e 100644 --- a/opcodes/Makefile.in +++ b/opcodes/Makefile.in @@ -450,7 +450,6 @@ BFD_H = ../bfd/bfd.h # Header files. HFILES = \ aarch64-asm.h aarch64-dis.h aarch64-opc.h aarch64-tbl.h \ - bpf-desc.h bpf-opc.h \ cris-desc.h cris-opc.h \ epiphany-desc.h epiphany-opc.h \ fr30-desc.h fr30-opc.h \ @@ -486,10 +485,7 @@ TARGET64_LIBOPCODES_CFILES = \ aarch64-opc-2.c \ alpha-dis.c \ alpha-opc.c \ - bpf-asm.c \ - bpf-desc.c \ bpf-dis.c \ - bpf-ibld.c \ bpf-opc.c \ ia64-dis.c \ ia64-opc.c \ @@ -708,8 +704,6 @@ CGENDEPS = \ cgen-asm.in cgen-dis.in cgen-ibld.in CGEN_CPUS = cris epiphany fr30 frv ip2k iq2000 lm32 m32c m32r mep mt or1k xstormy16 -@CGEN_MAINT_FALSE@BPF_DEPS = -@CGEN_MAINT_TRUE@BPF_DEPS = stamp-bpf @CGEN_MAINT_FALSE@CRIS_DEPS = @CGEN_MAINT_TRUE@CRIS_DEPS = stamp-cris @CGEN_MAINT_FALSE@EPIPHANY_DEPS = @@ -883,10 +877,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arm-dis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avr-dis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bfin-dis.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-asm.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-desc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-dis.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-ibld.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpf-opc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cgen-asm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cgen-bitset.Plo@am__quote@ @@ -1385,15 +1376,6 @@ run-cgen-all: # For now, require developers to configure with --enable-cgen-maint. -$(srcdir)/bpf-desc.h $(srcdir)/bpf-desc.c $(srcdir)/bpf-opc.h \ - $(srcdir)/bpf-opc.c $(srcdir)/bpf-ibld.c \ - $(srcdir)/bpf-asm.c $(srcdir)/bpf-dis.c: $(BPF_DEPS) - @true - -stamp-bpf: $(CGENDEPS) $(CPUDIR)/bpf.cpu $(CPUDIR)/bpf.opc - $(MAKE) run-cgen arch=bpf prefix=bpf \ - archfile=$(CPUDIR)/bpf.cpu opcfile=$(CPUDIR)/bpf.opc - $(srcdir)/cris-desc.h $(srcdir)/cris-desc.c $(srcdir)/cris-opc.h: $(CRIS_DEPS) @true diff --git a/opcodes/arc-tbl.h b/opcodes/arc-tbl.h index 529edd02ea7..b90413de7ef 100644 --- a/opcodes/arc-tbl.h +++ b/opcodes/arc-tbl.h @@ -14242,7 +14242,7 @@ { "neg", 0x204E0000, 0xF8FF0FC0, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, { RA, RB }, { C_F }}, /* neg<.f> 0,b 00100bbb01001110FBBB000000111110. */ -{ "neg", 0x204E0000, 0xF8FF0FFF, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, { ZA, RB }, { C_F }}, +{ "neg", 0x204E003E, 0xF8FF0FFF, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, { ZA, RB }, { C_F }}, /* neg<.f><.cc> b,b 00100bbb11001110FBBB0000001QQQQQ. */ { "neg", 0x20CE0020, 0xF8FF0FE0, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, { RB, RBdup }, { C_F, C_CC }}, diff --git a/opcodes/bpf-dis.c b/opcodes/bpf-dis.c index 0a345179569..1b1a532df74 100644 --- a/opcodes/bpf-dis.c +++ b/opcodes/bpf-dis.c @@ -1,631 +1,312 @@ -/* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */ -/* Disassembler interface for targets using CGEN. -*- C -*- - CGEN: Cpu tools GENerator +/* bpf-dis.c - BPF disassembler. + Copyright (C) 2023 Free Software Foundation, Inc. - THIS FILE IS MACHINE GENERATED WITH CGEN. - - the resultant file is machine generated, cgen-dis.in isn't + Contributed by Oracle Inc. - Copyright (C) 1996-2023 Free Software Foundation, Inc. + This file is part of the GNU binutils. - This file is part of libopcodes. - - This library is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by + This is free software; you can redistribute them and/or modify them + under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. - It is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* ??? Eventually more and more of this stuff can go to cpu-independent files. - Keep that in mind. */ + along with this program; see the file COPYING3. If not, + see . */ #include "sysdep.h" -#include -#include "ansidecl.h" #include "disassemble.h" -#include "bfd.h" -#include "symcat.h" #include "libiberty.h" -#include "bpf-desc.h" -#include "bpf-opc.h" #include "opintl.h" +#include "opcode/bpf.h" +#include "elf-bfd.h" +#include "elf/bpf.h" -/* Default text to print if an instruction isn't recognized. */ -#define UNKNOWN_INSN_MSG _("*unknown*") +#include +#include -static void print_normal - (CGEN_CPU_DESC, void *, long, unsigned int, bfd_vma, int); -static void print_address - (CGEN_CPU_DESC, void *, bfd_vma, unsigned int, bfd_vma, int) ATTRIBUTE_UNUSED; -static void print_keyword - (CGEN_CPU_DESC, void *, CGEN_KEYWORD *, long, unsigned int) ATTRIBUTE_UNUSED; -static void print_insn_normal - (CGEN_CPU_DESC, void *, const CGEN_INSN *, CGEN_FIELDS *, bfd_vma, int); -static int print_insn - (CGEN_CPU_DESC, bfd_vma, disassemble_info *, bfd_byte *, unsigned); -static int default_print_insn - (CGEN_CPU_DESC, bfd_vma, disassemble_info *) ATTRIBUTE_UNUSED; -static int read_insn - (CGEN_CPU_DESC, bfd_vma, disassemble_info *, bfd_byte *, int, CGEN_EXTRACT_INFO *, - unsigned long *); - -/* -- disassembler routines inserted here. */ +/* This disassembler supports two different syntaxes for BPF assembly. + One is called "normal" and has the typical form for assembly + languages, with mnemonics and the like. The othe is called + "pseudoc" and looks like C. */ -/* -- dis.c */ - -/* We need to customize the disassembler a bit: - - Use 8 bytes per line by default. -*/ - -#define CGEN_PRINT_INSN bpf_print_insn - -static int -bpf_print_insn (CGEN_CPU_DESC cd, bfd_vma pc, disassemble_info *info) +enum bpf_dialect { - bfd_byte buf[CGEN_MAX_INSN_SIZE]; - int buflen; - int status; - - info->bytes_per_chunk = 1; - info->bytes_per_line = 8; - - /* Attempt to read the base part of the insn. */ - buflen = cd->base_insn_bitsize / 8; - status = (*info->read_memory_func) (pc, buf, buflen, info); - - /* Try again with the minimum part, if min < base. */ - if (status != 0 && (cd->min_insn_bitsize < cd->base_insn_bitsize)) - { - buflen = cd->min_insn_bitsize / 8; - status = (*info->read_memory_func) (pc, buf, buflen, info); - } - - if (status != 0) - { - (*info->memory_error_func) (status, pc, info); - return -1; - } - - return print_insn (cd, pc, info, buf, buflen); -} - -/* Signed immediates should be printed in hexadecimal. */ - -static void -print_immediate (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, - void *dis_info, - int64_t value, - unsigned int attrs ATTRIBUTE_UNUSED, - bfd_vma pc ATTRIBUTE_UNUSED, - int length ATTRIBUTE_UNUSED) -{ - disassemble_info *info = (disassemble_info *) dis_info; - - if (value <= 9) - (*info->fprintf_func) (info->stream, "%" PRId64, value); - else - (*info->fprintf_func) (info->stream, "%#" PRIx64, value); - - /* This is to avoid -Wunused-function for print_normal. */ - if (0) - print_normal (cd, dis_info, value, attrs, pc, length); -} - -/* Endianness bit sizes should be printed in decimal. */ - -static void -print_endsize (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, - void *dis_info, - unsigned long value, - unsigned int attrs ATTRIBUTE_UNUSED, - bfd_vma pc ATTRIBUTE_UNUSED, - int length ATTRIBUTE_UNUSED) -{ - disassemble_info *info = (disassemble_info *) dis_info; - (*info->fprintf_func) (info->stream, "%lu", value); -} - - -/* -- */ - -void bpf_cgen_print_operand - (CGEN_CPU_DESC, int, void *, CGEN_FIELDS *, void const *, bfd_vma, int); - -/* Main entry point for printing operands. - XINFO is a `void *' and not a `disassemble_info *' to not put a requirement - of dis-asm.h on cgen.h. - - This function is basically just a big switch statement. Earlier versions - used tables to look up the function to use, but - - if the table contains both assembler and disassembler functions then - the disassembler contains much of the assembler and vice-versa, - - there's a lot of inlining possibilities as things grow, - - using a switch statement avoids the function call overhead. - - This function could be moved into `print_insn_normal', but keeping it - separate makes clear the interface between `print_insn_normal' and each of - the handlers. */ - -void -bpf_cgen_print_operand (CGEN_CPU_DESC cd, - int opindex, - void * xinfo, - CGEN_FIELDS *fields, - void const *attrs ATTRIBUTE_UNUSED, - bfd_vma pc, - int length) -{ - disassemble_info *info = (disassemble_info *) xinfo; - - switch (opindex) - { - case BPF_OPERAND_DISP16 : - print_normal (cd, info, fields->f_offset16, 0|(1<f_imm32, 0|(1<f_dstbe, 0); - break; - case BPF_OPERAND_DSTLE : - print_keyword (cd, info, & bpf_cgen_opval_h_gpr, fields->f_dstle, 0); - break; - case BPF_OPERAND_ENDSIZE : - print_endsize (cd, info, fields->f_imm32, 0, pc, length); - break; - case BPF_OPERAND_IMM32 : - print_immediate (cd, info, fields->f_imm32, 0|(1<f_imm64, 0|(1<f_offset16, 0|(1<f_srcbe, 0); - break; - case BPF_OPERAND_SRCLE : - print_keyword (cd, info, & bpf_cgen_opval_h_gpr, fields->f_srcle, 0); - break; - - default : - /* xgettext:c-format */ - opcodes_error_handler - (_("internal error: unrecognized field %d while printing insn"), - opindex); - abort (); - } -} - -cgen_print_fn * const bpf_cgen_print_handlers[] = -{ - print_insn_normal, + BPF_DIALECT_NORMAL, + BPF_DIALECT_PSEUDOC }; +/* Global configuration for the disassembler. */ + +static enum bpf_dialect asm_dialect = BPF_DIALECT_NORMAL; +static int asm_bpf_version = -1; +static int asm_obase = 10; + +/* Print BPF specific command-line options. */ void -bpf_cgen_init_dis (CGEN_CPU_DESC cd) +print_bpf_disassembler_options (FILE *stream) { - bpf_cgen_init_opcode_table (cd); - bpf_cgen_init_ibld_table (cd); - cd->print_handlers = & bpf_cgen_print_handlers[0]; - cd->print_operand = bpf_cgen_print_operand; + fprintf (stream, _("\n\ +The following BPF specific disassembler options are supported for use\n\ +with the -M switch (multiple options should be separated by commas):\n")); + fprintf (stream, "\n"); + fprintf (stream, _("\ + pseudoc Use pseudo-c syntax.\n\ + v1,v2,v3,v4,xbpf Version of the BPF ISA to use.\n\ + hex,oct,dec Output numerical base for immediates.\n")); } - -/* Default print handler. */ +/* Parse BPF specific command-line options. */ static void -print_normal (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, - void *dis_info, - long value, - unsigned int attrs, - bfd_vma pc ATTRIBUTE_UNUSED, - int length ATTRIBUTE_UNUSED) +parse_bpf_dis_option (const char *option) { - disassemble_info *info = (disassemble_info *) dis_info; - - /* Print the operand as directed by the attributes. */ - if (CGEN_BOOL_ATTR (attrs, CGEN_OPERAND_SEM_ONLY)) - ; /* nothing to do */ - else if (CGEN_BOOL_ATTR (attrs, CGEN_OPERAND_SIGNED)) - (*info->fprintf_func) (info->stream, "%ld", value); + if (strcmp (option, "pseudoc") == 0) + asm_dialect = BPF_DIALECT_PSEUDOC; + else if (strcmp (option, "v1") == 0) + asm_bpf_version = BPF_V1; + else if (strcmp (option, "v2") == 0) + asm_bpf_version = BPF_V2; + else if (strcmp (option, "v3") == 0) + asm_bpf_version = BPF_V3; + else if (strcmp (option, "v4") == 0) + asm_bpf_version = BPF_V4; + else if (strcmp (option, "xbpf") == 0) + asm_bpf_version = BPF_XBPF; + else if (strcmp (option, "hex") == 0) + asm_obase = 16; + else if (strcmp (option, "oct") == 0) + asm_obase = 8; + else if (strcmp (option, "dec") == 0) + asm_obase = 10; else - (*info->fprintf_func) (info->stream, "0x%lx", value); + /* xgettext:c-format */ + opcodes_error_handler (_("unrecognized disassembler option: %s"), option); } -/* Default address handler. */ - static void -print_address (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, - void *dis_info, - bfd_vma value, - unsigned int attrs, - bfd_vma pc ATTRIBUTE_UNUSED, - int length ATTRIBUTE_UNUSED) +parse_bpf_dis_options (const char *opts_in) { - disassemble_info *info = (disassemble_info *) dis_info; + char *opts = xstrdup (opts_in), *opt = opts, *opt_end = opts; - /* Print the operand as directed by the attributes. */ - if (CGEN_BOOL_ATTR (attrs, CGEN_OPERAND_SEM_ONLY)) - ; /* Nothing to do. */ - else if (CGEN_BOOL_ATTR (attrs, CGEN_OPERAND_PCREL_ADDR)) - (*info->print_address_func) (value, info); - else if (CGEN_BOOL_ATTR (attrs, CGEN_OPERAND_ABS_ADDR)) - (*info->print_address_func) (value, info); - else if (CGEN_BOOL_ATTR (attrs, CGEN_OPERAND_SIGNED)) - (*info->fprintf_func) (info->stream, "%ld", (long) value); - else - (*info->fprintf_func) (info->stream, "0x%lx", (long) value); + for ( ; opt_end != NULL; opt = opt_end + 1) + { + if ((opt_end = strchr (opt, ',')) != NULL) + *opt_end = 0; + parse_bpf_dis_option (opt); + } + + free (opts); } -/* Keyword print handler. */ +/* Auxiliary function used in print_insn_bpf below. */ static void -print_keyword (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, - void *dis_info, - CGEN_KEYWORD *keyword_table, - long value, - unsigned int attrs ATTRIBUTE_UNUSED) +print_register (disassemble_info *info, + const char *tag, uint8_t regno) { - disassemble_info *info = (disassemble_info *) dis_info; - const CGEN_KEYWORD_ENTRY *ke; + const char *fmt + = (asm_dialect == BPF_DIALECT_NORMAL + ? "%%r%d" + : ((*(tag + 2) == 'w') + ? "w%d" + : "r%d")); - ke = cgen_keyword_lookup_value (keyword_table, value); - if (ke != NULL) - (*info->fprintf_func) (info->stream, "%s", ke->name); - else - (*info->fprintf_func) (info->stream, "???"); -} - -/* Default insn printer. - - DIS_INFO is defined as `void *' so the disassembler needn't know anything - about disassemble_info. */ - -static void -print_insn_normal (CGEN_CPU_DESC cd, - void *dis_info, - const CGEN_INSN *insn, - CGEN_FIELDS *fields, - bfd_vma pc, - int length) -{ - const CGEN_SYNTAX *syntax = CGEN_INSN_SYNTAX (insn); - disassemble_info *info = (disassemble_info *) dis_info; - const CGEN_SYNTAX_CHAR_TYPE *syn; - - CGEN_INIT_PRINT (cd); - - for (syn = CGEN_SYNTAX_STRING (syntax); *syn; ++syn) - { - if (CGEN_SYNTAX_MNEMONIC_P (*syn)) - { - (*info->fprintf_func) (info->stream, "%s", CGEN_INSN_MNEMONIC (insn)); - continue; - } - if (CGEN_SYNTAX_CHAR_P (*syn)) - { - (*info->fprintf_func) (info->stream, "%c", CGEN_SYNTAX_CHAR (*syn)); - continue; - } - - /* We have an operand. */ - bpf_cgen_print_operand (cd, CGEN_SYNTAX_FIELD (*syn), info, - fields, CGEN_INSN_ATTRS (insn), pc, length); - } -} - -/* Subroutine of print_insn. Reads an insn into the given buffers and updates - the extract info. - Returns 0 if all is well, non-zero otherwise. */ - -static int -read_insn (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, - bfd_vma pc, - disassemble_info *info, - bfd_byte *buf, - int buflen, - CGEN_EXTRACT_INFO *ex_info, - unsigned long *insn_value) -{ - int status = (*info->read_memory_func) (pc, buf, buflen, info); - - if (status != 0) - { - (*info->memory_error_func) (status, pc, info); - return -1; - } - - ex_info->dis_info = info; - ex_info->valid = (1 << buflen) - 1; - ex_info->insn_bytes = buf; - - *insn_value = bfd_get_bits (buf, buflen * 8, info->endian == BFD_ENDIAN_BIG); - return 0; -} - -/* Utility to print an insn. - BUF is the base part of the insn, target byte order, BUFLEN bytes long. - The result is the size of the insn in bytes or zero for an unknown insn - or -1 if an error occurs fetching data (memory_error_func will have - been called). */ - -static int -print_insn (CGEN_CPU_DESC cd, - bfd_vma pc, - disassemble_info *info, - bfd_byte *buf, - unsigned int buflen) -{ - CGEN_INSN_INT insn_value; - const CGEN_INSN_LIST *insn_list; - CGEN_EXTRACT_INFO ex_info; - int basesize; - - /* Extract base part of instruction, just in case CGEN_DIS_* uses it. */ - basesize = cd->base_insn_bitsize < buflen * 8 ? - cd->base_insn_bitsize : buflen * 8; - insn_value = cgen_get_insn_value (cd, buf, basesize, cd->insn_endian); - - - /* Fill in ex_info fields like read_insn would. Don't actually call - read_insn, since the incoming buffer is already read (and possibly - modified a la m32r). */ - ex_info.valid = (1 << buflen) - 1; - ex_info.dis_info = info; - ex_info.insn_bytes = buf; - - /* The instructions are stored in hash lists. - Pick the first one and keep trying until we find the right one. */ - - insn_list = CGEN_DIS_LOOKUP_INSN (cd, (char *) buf, insn_value); - while (insn_list != NULL) - { - const CGEN_INSN *insn = insn_list->insn; - CGEN_FIELDS fields; - int length; - unsigned long insn_value_cropped; - -#ifdef CGEN_VALIDATE_INSN_SUPPORTED - /* Not needed as insn shouldn't be in hash lists if not supported. */ - /* Supported by this cpu? */ - if (! bpf_cgen_insn_supported (cd, insn)) - { - insn_list = CGEN_DIS_NEXT_INSN (insn_list); - continue; - } -#endif - - /* Basic bit mask must be correct. */ - /* ??? May wish to allow target to defer this check until the extract - handler. */ - - /* Base size may exceed this instruction's size. Extract the - relevant part from the buffer. */ - if ((unsigned) (CGEN_INSN_BITSIZE (insn) / 8) < buflen && - (unsigned) (CGEN_INSN_BITSIZE (insn) / 8) <= sizeof (unsigned long)) - insn_value_cropped = bfd_get_bits (buf, CGEN_INSN_BITSIZE (insn), - info->endian == BFD_ENDIAN_BIG); - else - insn_value_cropped = insn_value; - - if ((insn_value_cropped & CGEN_INSN_BASE_MASK (insn)) - == CGEN_INSN_BASE_VALUE (insn)) - { - /* Printing is handled in two passes. The first pass parses the - machine insn and extracts the fields. The second pass prints - them. */ - - /* Make sure the entire insn is loaded into insn_value, if it - can fit. */ - if (((unsigned) CGEN_INSN_BITSIZE (insn) > cd->base_insn_bitsize) && - (unsigned) (CGEN_INSN_BITSIZE (insn) / 8) <= sizeof (unsigned long)) - { - unsigned long full_insn_value; - int rc = read_insn (cd, pc, info, buf, - CGEN_INSN_BITSIZE (insn) / 8, - & ex_info, & full_insn_value); - if (rc != 0) - return rc; - length = CGEN_EXTRACT_FN (cd, insn) - (cd, insn, &ex_info, full_insn_value, &fields, pc); - } - else - length = CGEN_EXTRACT_FN (cd, insn) - (cd, insn, &ex_info, insn_value_cropped, &fields, pc); - - /* Length < 0 -> error. */ - if (length < 0) - return length; - if (length > 0) - { - CGEN_PRINT_FN (cd, insn) (cd, info, insn, &fields, pc, length); - /* Length is in bits, result is in bytes. */ - return length / 8; - } - } - - insn_list = CGEN_DIS_NEXT_INSN (insn_list); - } - - return 0; -} - -/* Default value for CGEN_PRINT_INSN. - The result is the size of the insn in bytes or zero for an unknown insn - or -1 if an error occured fetching bytes. */ - -#ifndef CGEN_PRINT_INSN -#define CGEN_PRINT_INSN default_print_insn -#endif - -static int -default_print_insn (CGEN_CPU_DESC cd, bfd_vma pc, disassemble_info *info) -{ - bfd_byte buf[CGEN_MAX_INSN_SIZE]; - int buflen; - int status; - - /* Attempt to read the base part of the insn. */ - buflen = cd->base_insn_bitsize / 8; - status = (*info->read_memory_func) (pc, buf, buflen, info); - - /* Try again with the minimum part, if min < base. */ - if (status != 0 && (cd->min_insn_bitsize < cd->base_insn_bitsize)) - { - buflen = cd->min_insn_bitsize / 8; - status = (*info->read_memory_func) (pc, buf, buflen, info); - } - - if (status != 0) - { - (*info->memory_error_func) (status, pc, info); - return -1; - } - - return print_insn (cd, pc, info, buf, buflen); + (*info->fprintf_styled_func) (info->stream, dis_style_register, fmt, regno); } /* Main entry point. Print one instruction from PC on INFO->STREAM. Return the size of the instruction (in bytes). */ -typedef struct cpu_desc_list -{ - struct cpu_desc_list *next; - CGEN_BITSET *isa; - int mach; - int endian; - int insn_endian; - CGEN_CPU_DESC cd; -} cpu_desc_list; - int print_insn_bpf (bfd_vma pc, disassemble_info *info) { - static cpu_desc_list *cd_list = 0; - cpu_desc_list *cl = 0; - static CGEN_CPU_DESC cd = 0; - static CGEN_BITSET *prev_isa; - static int prev_mach; - static int prev_endian; - static int prev_insn_endian; - int length; - CGEN_BITSET *isa; - int mach; - int endian = (info->endian == BFD_ENDIAN_BIG - ? CGEN_ENDIAN_BIG - : CGEN_ENDIAN_LITTLE); - int insn_endian = (info->endian_code == BFD_ENDIAN_BIG - ? CGEN_ENDIAN_BIG - : CGEN_ENDIAN_LITTLE); - enum bfd_architecture arch; + int insn_size = 8, status; + bfd_byte insn_bytes[16]; + bpf_insn_word word = 0; + const struct bpf_opcode *insn = NULL; + enum bpf_endian endian = (info->endian == BFD_ENDIAN_LITTLE + ? BPF_ENDIAN_LITTLE : BPF_ENDIAN_BIG); - /* ??? gdb will set mach but leave the architecture as "unknown" */ -#ifndef CGEN_BFD_ARCH -#define CGEN_BFD_ARCH bfd_arch_bpf -#endif - arch = info->arch; - if (arch == bfd_arch_unknown) - arch = CGEN_BFD_ARCH; - - /* There's no standard way to compute the machine or isa number - so we leave it to the target. */ -#ifdef CGEN_COMPUTE_MACH - mach = CGEN_COMPUTE_MACH (info); -#else - mach = info->mach; -#endif - -#ifdef CGEN_COMPUTE_ISA - { - static CGEN_BITSET *permanent_isa; - - if (!permanent_isa) - permanent_isa = cgen_bitset_create (MAX_ISAS); - isa = permanent_isa; - cgen_bitset_clear (isa); - cgen_bitset_add (isa, CGEN_COMPUTE_ISA (info)); - } -#else - isa = info->private_data; -#endif - - /* If we've switched cpu's, try to find a handle we've used before */ - if (cd - && (cgen_bitset_compare (isa, prev_isa) != 0 - || mach != prev_mach - || endian != prev_endian)) + /* Handle bpf-specific command-line options. */ + if (info->disassembler_options != NULL) { - cd = 0; - for (cl = cd_list; cl; cl = cl->next) - { - if (cgen_bitset_compare (cl->isa, isa) == 0 && - cl->mach == mach && - cl->endian == endian) - { - cd = cl->cd; - prev_isa = cd->isas; - break; - } - } + parse_bpf_dis_options (info->disassembler_options); + /* Avoid repeteadly parsing the options. */ + info->disassembler_options = NULL; } - /* If we haven't initialized yet, initialize the opcode table. */ - if (! cd) + /* Determine what version of the BPF ISA to use when disassembling. + If the user didn't explicitly specify an ISA version, then derive + it from the CPU Version flag in the ELF header. A CPU version of + 0 in the header means "latest version". */ + if (asm_bpf_version == -1 && info->section && info->section->owner) { - const bfd_arch_info_type *arch_type = bfd_lookup_arch (arch, mach); - const char *mach_name; + struct bfd *abfd = info->section->owner; + Elf_Internal_Ehdr *header = elf_elfheader (abfd); + int cpu_version = header->e_flags & EF_BPF_CPUVER; - if (!arch_type) - abort (); - mach_name = arch_type->printable_name; - - prev_isa = cgen_bitset_copy (isa); - prev_mach = mach; - prev_endian = endian; - prev_insn_endian = insn_endian; - cd = bpf_cgen_cpu_open (CGEN_CPU_OPEN_ISAS, prev_isa, - CGEN_CPU_OPEN_BFDMACH, mach_name, - CGEN_CPU_OPEN_ENDIAN, prev_endian, - CGEN_CPU_OPEN_INSN_ENDIAN, prev_insn_endian, - CGEN_CPU_OPEN_END); - if (!cd) - abort (); - - /* Save this away for future reference. */ - cl = xmalloc (sizeof (struct cpu_desc_list)); - cl->cd = cd; - cl->isa = prev_isa; - cl->mach = mach; - cl->endian = endian; - cl->next = cd_list; - cd_list = cl; - - bpf_cgen_init_dis (cd); + switch (cpu_version) + { + case 0: asm_bpf_version = BPF_V4; break; + case 1: asm_bpf_version = BPF_V1; break; + case 2: asm_bpf_version = BPF_V2; break; + case 3: asm_bpf_version = BPF_V3; break; + case 4: asm_bpf_version = BPF_V4; break; + case 0xf: asm_bpf_version = BPF_XBPF; break; + default: + /* xgettext:c-format */ + opcodes_error_handler (_("unknown BPF CPU version %u\n"), + cpu_version); + break; + } } - /* We try to have as much common code as possible. - But at this point some targets need to take over. */ - /* ??? Some targets may need a hook elsewhere. Try to avoid this, - but if not possible try to move this hook elsewhere rather than - have two hooks. */ - length = CGEN_PRINT_INSN (cd, pc, info); - if (length > 0) - return length; - if (length < 0) - return -1; + /* Print eight bytes per line. */ + info->bytes_per_chunk = 1; + info->bytes_per_line = 8; - (*info->fprintf_func) (info->stream, UNKNOWN_INSN_MSG); - return cd->default_insn_bitsize / 8; + /* Read an instruction word. */ + status = (*info->read_memory_func) (pc, insn_bytes, 8, info); + if (status != 0) + { + (*info->memory_error_func) (status, pc, info); + return -1; + } + word = (bpf_insn_word) bfd_getb64 (insn_bytes); + + /* Try to match an instruction with it. */ + insn = bpf_match_insn (word, endian, asm_bpf_version); + + /* Print it out. */ + if (insn) + { + const char *insn_tmpl + = asm_dialect == BPF_DIALECT_NORMAL ? insn->normal : insn->pseudoc; + const char *p = insn_tmpl; + + /* Print the template contents completed with the instruction + operands. */ + for (p = insn_tmpl; *p != '\0';) + { + switch (*p) + { + case ' ': + /* Single space prints to nothing. */ + p += 1; + break; + case '%': + if (*(p + 1) == '%') + { + (*info->fprintf_styled_func) (info->stream, dis_style_text, "%%"); + p += 2; + } + else if (*(p + 1) == 'w' || *(p + 1) == 'W') + { + /* %W prints to a single space. */ + (*info->fprintf_styled_func) (info->stream, dis_style_text, " "); + p += 2; + } + else if (strncmp (p, "%dr", 3) == 0) + { + print_register (info, p, bpf_extract_dst (word, endian)); + p += 3; + } + else if (strncmp (p, "%sr", 3) == 0) + { + print_register (info, p, bpf_extract_src (word, endian)); + p += 3; + } + else if (strncmp (p, "%dw", 3) == 0) + { + print_register (info, p, bpf_extract_dst (word, endian)); + p += 3; + } + else if (strncmp (p, "%sw", 3) == 0) + { + print_register (info, p, bpf_extract_src (word, endian)); + p += 3; + } + else if (strncmp (p, "%i32", 4) == 0 + || strncmp (p, "%d32", 4) == 0 + || strncmp (p, "%I32", 4) == 0) + { + int32_t imm32 = bpf_extract_imm32 (word, endian); + + if (p[1] == 'I') + (*info->fprintf_styled_func) (info->stream, dis_style_immediate, + "%s", + asm_obase != 10 || imm32 >= 0 ? "+" : ""); + (*info->fprintf_styled_func) (info->stream, dis_style_immediate, + asm_obase == 10 ? "%" PRIi32 + : asm_obase == 8 ? "%" PRIo32 + : "0x%" PRIx32, + imm32); + p += 4; + } + else if (strncmp (p, "%o16", 4) == 0 + || strncmp (p, "%d16", 4) == 0) + { + int16_t offset16 = bpf_extract_offset16 (word, endian); + + if (p[1] == 'o') + (*info->fprintf_styled_func) (info->stream, dis_style_immediate, + "%s", + asm_obase != 10 || offset16 >= 0 ? "+" : ""); + if (asm_obase == 16 || asm_obase == 8) + (*info->fprintf_styled_func) (info->stream, dis_style_immediate, + asm_obase == 8 ? "0%" PRIo16 : "0x%" PRIx16, + (uint16_t) offset16); + else + (*info->fprintf_styled_func) (info->stream, dis_style_immediate, + "%" PRIi16, offset16); + p += 4; + } + else if (strncmp (p, "%i64", 4) == 0) + { + bpf_insn_word word2 = 0; + + status = (*info->read_memory_func) (pc + 8, insn_bytes + 8, + 8, info); + if (status != 0) + { + (*info->memory_error_func) (status, pc + 8, info); + return -1; + } + word2 = (bpf_insn_word) bfd_getb64 (insn_bytes + 8); + + (*info->fprintf_styled_func) (info->stream, dis_style_immediate, + asm_obase == 10 ? "%" PRIi64 + : asm_obase == 8 ? "0%" PRIo64 + : "0x%" PRIx64, + bpf_extract_imm64 (word, word2, endian)); + insn_size = 16; + p += 4; + } + else + { + /* xgettext:c-format */ + opcodes_error_handler (_("# internal error, unknown tag in opcode template (%s)"), + insn_tmpl); + return -1; + } + break; + default: + /* Any other character is printed literally. */ + (*info->fprintf_styled_func) (info->stream, dis_style_text, "%c", *p); + p += 1; + } + } + } + else + (*info->fprintf_styled_func) (info->stream, dis_style_text, ""); + + return insn_size; } diff --git a/opcodes/bpf-opc.c b/opcodes/bpf-opc.c index 1cc06f7cbf6..3f42680c661 100644 --- a/opcodes/bpf-opc.c +++ b/opcodes/bpf-opc.c @@ -1,1863 +1,530 @@ -/* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */ -/* Instruction opcode table for bpf. +/* bpf-opc.c - BPF opcodes. + Copyright (C) 2023 Free Software Foundation, Inc. -THIS FILE IS MACHINE GENERATED WITH CGEN. + Contributed by Oracle Inc. -Copyright (C) 1996-2023 Free Software Foundation, Inc. + This file is part of the GNU binutils. -This file is part of the GNU Binutils and/or GDB, the GNU debugger. - - 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 + This is free software; you can redistribute them and/or modify them + under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. - It is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING3. If not, + see . */ -*/ +#include "config.h" +#include +#include "opcode/bpf.h" -#include "sysdep.h" -#include "ansidecl.h" -#include "bfd.h" -#include "symcat.h" -#include "bpf-desc.h" -#include "bpf-opc.h" -#include "libiberty.h" +/* Note that the entries in the opcodes table below are accessed + sequentially when matching instructions per opcode, and also when + parsing. Please take care to keep the entries sorted + accordingly! */ -/* -- opc.c */ - -/* -- asm.c */ -/* The hash functions are recorded here to help keep assembler code out of - the disassembler and vice versa. */ - -static int asm_hash_insn_p (const CGEN_INSN *); -static unsigned int asm_hash_insn (const char *); -static int dis_hash_insn_p (const CGEN_INSN *); -static unsigned int dis_hash_insn (const char *, CGEN_INSN_INT); - -/* Instruction formats. */ - -#define F(f) & bpf_cgen_ifld_table[BPF_##f] -static const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = { - 0, 0, 0x0, { { 0 } } -}; - -static const CGEN_IFMT ifmt_addile ATTRIBUTE_UNUSED = { - 64, 64, 0xfffff0ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_CODE) }, { F (F_DSTLE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_addrle ATTRIBUTE_UNUSED = { - 64, 64, 0xffffffffffff00ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_CODE) }, { F (F_DSTLE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_negle ATTRIBUTE_UNUSED = { - 64, 64, 0xfffffffffffff0ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_CODE) }, { F (F_DSTLE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_addibe ATTRIBUTE_UNUSED = { - 64, 64, 0xffff0fff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_CODE) }, { F (F_SRCBE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_addrbe ATTRIBUTE_UNUSED = { - 64, 64, 0xffffffffffff00ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_CODE) }, { F (F_SRCBE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_negbe ATTRIBUTE_UNUSED = { - 64, 64, 0xffffffffffff0fff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_CODE) }, { F (F_SRCBE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_endlele ATTRIBUTE_UNUSED = { - 64, 64, 0xfffff0ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_CODE) }, { F (F_DSTLE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_endlebe ATTRIBUTE_UNUSED = { - 64, 64, 0xffff0fff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_CODE) }, { F (F_SRCBE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_lddwle ATTRIBUTE_UNUSED = { - 64, 128, 0xfffff0ff, { { F (F_IMM64) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_DSTLE) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_lddwbe ATTRIBUTE_UNUSED = { - 64, 128, 0xffff0fff, { { F (F_IMM64) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_SRCBE) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_ldabsw ATTRIBUTE_UNUSED = { - 64, 64, 0xffffffff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_REGS) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_ldindwle ATTRIBUTE_UNUSED = { - 64, 64, 0xffff0fff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_DSTLE) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_ldindwbe ATTRIBUTE_UNUSED = { - 64, 64, 0xfffff0ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_SRCBE) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_ldxwle ATTRIBUTE_UNUSED = { - 64, 64, 0xffffffff000000ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_DSTLE) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_ldxwbe ATTRIBUTE_UNUSED = { - 64, 64, 0xffffffff000000ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_SRCBE) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_stble ATTRIBUTE_UNUSED = { - 64, 64, 0xf0ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_DSTLE) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_stbbe ATTRIBUTE_UNUSED = { - 64, 64, 0xfff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_SRCBE) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_jeqile ATTRIBUTE_UNUSED = { - 64, 64, 0xf0ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_CODE) }, { F (F_DSTLE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_jeqrle ATTRIBUTE_UNUSED = { - 64, 64, 0xffffffff000000ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_CODE) }, { F (F_DSTLE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_jeqibe ATTRIBUTE_UNUSED = { - 64, 64, 0xfff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_CODE) }, { F (F_SRCBE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_jeqrbe ATTRIBUTE_UNUSED = { - 64, 64, 0xffffffff000000ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_CODE) }, { F (F_SRCBE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_callle ATTRIBUTE_UNUSED = { - 64, 64, 0xffff0fff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_CODE) }, { F (F_DSTLE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_callbe ATTRIBUTE_UNUSED = { - 64, 64, 0xfffff0ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_CODE) }, { F (F_SRCBE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_ja ATTRIBUTE_UNUSED = { - 64, 64, 0xffffffff0000ffff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_REGS) }, { F (F_OP_CODE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } } -}; - -static const CGEN_IFMT ifmt_exit ATTRIBUTE_UNUSED = { - 64, 64, 0xffffffffffffffff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_REGS) }, { F (F_OP_CODE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } } -}; - -#undef F - -#define A(a) (1 << CGEN_INSN_##a) -#define OPERAND(op) BPF_OPERAND_##op -#define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */ -#define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field)) - -/* The instruction table. */ - -static const CGEN_OPCODE bpf_cgen_insn_opcode_table[MAX_INSNS] = +const struct bpf_opcode bpf_opcodes[] = { - /* Special null first entry. - A `num' value of zero is thus invalid. - Also, the special `invalid' insn resides here. */ - { { 0, 0, 0, 0 }, {{0}}, 0, {0}}, -/* add $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0x7 } - }, -/* add $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0xf } - }, -/* add32 $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0x4 } - }, -/* add32 $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0xc } - }, -/* sub $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0x17 } - }, -/* sub $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0x1f } - }, -/* sub32 $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0x14 } - }, -/* sub32 $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0x1c } - }, -/* mul $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0x27 } - }, -/* mul $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0x2f } - }, -/* mul32 $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0x24 } - }, -/* mul32 $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0x2c } - }, -/* div $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0x37 } - }, -/* div $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0x3f } - }, -/* div32 $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0x34 } - }, -/* div32 $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0x3c } - }, -/* or $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0x47 } - }, -/* or $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0x4f } - }, -/* or32 $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0x44 } - }, -/* or32 $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0x4c } - }, -/* and $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0x57 } - }, -/* and $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0x5f } - }, -/* and32 $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0x54 } - }, -/* and32 $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0x5c } - }, -/* lsh $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0x67 } - }, -/* lsh $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0x6f } - }, -/* lsh32 $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0x64 } - }, -/* lsh32 $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0x6c } - }, -/* rsh $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0x77 } - }, -/* rsh $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0x7f } - }, -/* rsh32 $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0x74 } - }, -/* rsh32 $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0x7c } - }, -/* mod $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0x97 } - }, -/* mod $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0x9f } - }, -/* mod32 $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0x94 } - }, -/* mod32 $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0x9c } - }, -/* xor $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0xa7 } - }, -/* xor $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0xaf } - }, -/* xor32 $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0xa4 } - }, -/* xor32 $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0xac } - }, -/* arsh $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0xc7 } - }, -/* arsh $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0xcf } - }, -/* arsh32 $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0xc4 } - }, -/* arsh32 $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0xcc } - }, -/* sdiv $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0xe7 } - }, -/* sdiv $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0xef } - }, -/* sdiv32 $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0xe4 } - }, -/* sdiv32 $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0xec } - }, -/* smod $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0xf7 } - }, -/* smod $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0xff } - }, -/* smod32 $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0xf4 } - }, -/* smod32 $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0xfc } - }, -/* neg $dstle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), 0 } }, - & ifmt_negle, { 0x87 } - }, -/* neg32 $dstle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), 0 } }, - & ifmt_negle, { 0x84 } - }, -/* mov $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0xb7 } - }, -/* mov $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0xbf } - }, -/* mov32 $dstle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0xb4 } - }, -/* mov32 $dstle,$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0xbc } - }, -/* add $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0x7 } - }, -/* add $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0xf } - }, -/* add32 $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0x4 } - }, -/* add32 $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0xc } - }, -/* sub $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0x17 } - }, -/* sub $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0x1f } - }, -/* sub32 $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0x14 } - }, -/* sub32 $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0x1c } - }, -/* mul $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0x27 } - }, -/* mul $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0x2f } - }, -/* mul32 $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0x24 } - }, -/* mul32 $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0x2c } - }, -/* div $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0x37 } - }, -/* div $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0x3f } - }, -/* div32 $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0x34 } - }, -/* div32 $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0x3c } - }, -/* or $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0x47 } - }, -/* or $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0x4f } - }, -/* or32 $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0x44 } - }, -/* or32 $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0x4c } - }, -/* and $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0x57 } - }, -/* and $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0x5f } - }, -/* and32 $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0x54 } - }, -/* and32 $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0x5c } - }, -/* lsh $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0x67 } - }, -/* lsh $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0x6f } - }, -/* lsh32 $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0x64 } - }, -/* lsh32 $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0x6c } - }, -/* rsh $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0x77 } - }, -/* rsh $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0x7f } - }, -/* rsh32 $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0x74 } - }, -/* rsh32 $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0x7c } - }, -/* mod $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0x97 } - }, -/* mod $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0x9f } - }, -/* mod32 $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0x94 } - }, -/* mod32 $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0x9c } - }, -/* xor $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0xa7 } - }, -/* xor $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0xaf } - }, -/* xor32 $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0xa4 } - }, -/* xor32 $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0xac } - }, -/* arsh $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0xc7 } - }, -/* arsh $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0xcf } - }, -/* arsh32 $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0xc4 } - }, -/* arsh32 $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0xcc } - }, -/* sdiv $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0xe7 } - }, -/* sdiv $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0xef } - }, -/* sdiv32 $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0xe4 } - }, -/* sdiv32 $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0xec } - }, -/* smod $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0xf7 } - }, -/* smod $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0xff } - }, -/* smod32 $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0xf4 } - }, -/* smod32 $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0xfc } - }, -/* neg $dstbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), 0 } }, - & ifmt_negbe, { 0x87 } - }, -/* neg32 $dstbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), 0 } }, - & ifmt_negbe, { 0x84 } - }, -/* mov $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0xb7 } - }, -/* mov $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0xbf } - }, -/* mov32 $dstbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0xb4 } - }, -/* mov32 $dstbe,$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0xbc } - }, -/* endle $dstle,$endsize */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (ENDSIZE), 0 } }, - & ifmt_endlele, { 0xd4 } - }, -/* endbe $dstle,$endsize */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (ENDSIZE), 0 } }, - & ifmt_endlele, { 0xdc } - }, -/* endle $dstbe,$endsize */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (ENDSIZE), 0 } }, - & ifmt_endlebe, { 0xd4 } - }, -/* endbe $dstbe,$endsize */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (ENDSIZE), 0 } }, - & ifmt_endlebe, { 0xdc } - }, -/* lddw $dstle,$imm64 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM64), 0 } }, - & ifmt_lddwle, { 0x18 } - }, -/* lddw $dstbe,$imm64 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM64), 0 } }, - & ifmt_lddwbe, { 0x18 } - }, -/* ldabsw $imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (IMM32), 0 } }, - & ifmt_ldabsw, { 0x20 } - }, -/* ldabsh $imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (IMM32), 0 } }, - & ifmt_ldabsw, { 0x28 } - }, -/* ldabsb $imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (IMM32), 0 } }, - & ifmt_ldabsw, { 0x30 } - }, -/* ldabsdw $imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (IMM32), 0 } }, - & ifmt_ldabsw, { 0x38 } - }, -/* ldindw $srcle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (SRCLE), ',', OP (IMM32), 0 } }, - & ifmt_ldindwle, { 0x40 } - }, -/* ldindh $srcle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (SRCLE), ',', OP (IMM32), 0 } }, - & ifmt_ldindwle, { 0x48 } - }, -/* ldindb $srcle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (SRCLE), ',', OP (IMM32), 0 } }, - & ifmt_ldindwle, { 0x50 } - }, -/* ldinddw $srcle,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (SRCLE), ',', OP (IMM32), 0 } }, - & ifmt_ldindwle, { 0x58 } - }, -/* ldindw $srcbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (SRCBE), ',', OP (IMM32), 0 } }, - & ifmt_ldindwbe, { 0x40 } - }, -/* ldindh $srcbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (SRCBE), ',', OP (IMM32), 0 } }, - & ifmt_ldindwbe, { 0x48 } - }, -/* ldindb $srcbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (SRCBE), ',', OP (IMM32), 0 } }, - & ifmt_ldindwbe, { 0x50 } - }, -/* ldinddw $srcbe,$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (SRCBE), ',', OP (IMM32), 0 } }, - & ifmt_ldindwbe, { 0x58 } - }, -/* ldxw $dstle,[$srcle+$offset16] */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', '[', OP (SRCLE), '+', OP (OFFSET16), ']', 0 } }, - & ifmt_ldxwle, { 0x61 } - }, -/* ldxh $dstle,[$srcle+$offset16] */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', '[', OP (SRCLE), '+', OP (OFFSET16), ']', 0 } }, - & ifmt_ldxwle, { 0x69 } - }, -/* ldxb $dstle,[$srcle+$offset16] */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', '[', OP (SRCLE), '+', OP (OFFSET16), ']', 0 } }, - & ifmt_ldxwle, { 0x71 } - }, -/* ldxdw $dstle,[$srcle+$offset16] */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', '[', OP (SRCLE), '+', OP (OFFSET16), ']', 0 } }, - & ifmt_ldxwle, { 0x79 } - }, -/* stxw [$dstle+$offset16],$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', '[', OP (DSTLE), '+', OP (OFFSET16), ']', ',', OP (SRCLE), 0 } }, - & ifmt_ldxwle, { 0x63 } - }, -/* stxh [$dstle+$offset16],$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', '[', OP (DSTLE), '+', OP (OFFSET16), ']', ',', OP (SRCLE), 0 } }, - & ifmt_ldxwle, { 0x6b } - }, -/* stxb [$dstle+$offset16],$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', '[', OP (DSTLE), '+', OP (OFFSET16), ']', ',', OP (SRCLE), 0 } }, - & ifmt_ldxwle, { 0x73 } - }, -/* stxdw [$dstle+$offset16],$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', '[', OP (DSTLE), '+', OP (OFFSET16), ']', ',', OP (SRCLE), 0 } }, - & ifmt_ldxwle, { 0x7b } - }, -/* ldxw $dstbe,[$srcbe+$offset16] */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', '[', OP (SRCBE), '+', OP (OFFSET16), ']', 0 } }, - & ifmt_ldxwbe, { 0x61 } - }, -/* ldxh $dstbe,[$srcbe+$offset16] */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', '[', OP (SRCBE), '+', OP (OFFSET16), ']', 0 } }, - & ifmt_ldxwbe, { 0x69 } - }, -/* ldxb $dstbe,[$srcbe+$offset16] */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', '[', OP (SRCBE), '+', OP (OFFSET16), ']', 0 } }, - & ifmt_ldxwbe, { 0x71 } - }, -/* ldxdw $dstbe,[$srcbe+$offset16] */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', '[', OP (SRCBE), '+', OP (OFFSET16), ']', 0 } }, - & ifmt_ldxwbe, { 0x79 } - }, -/* stxw [$dstbe+$offset16],$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', '[', OP (DSTBE), '+', OP (OFFSET16), ']', ',', OP (SRCBE), 0 } }, - & ifmt_ldxwbe, { 0x63 } - }, -/* stxh [$dstbe+$offset16],$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', '[', OP (DSTBE), '+', OP (OFFSET16), ']', ',', OP (SRCBE), 0 } }, - & ifmt_ldxwbe, { 0x6b } - }, -/* stxb [$dstbe+$offset16],$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', '[', OP (DSTBE), '+', OP (OFFSET16), ']', ',', OP (SRCBE), 0 } }, - & ifmt_ldxwbe, { 0x73 } - }, -/* stxdw [$dstbe+$offset16],$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', '[', OP (DSTBE), '+', OP (OFFSET16), ']', ',', OP (SRCBE), 0 } }, - & ifmt_ldxwbe, { 0x7b } - }, -/* stb [$dstle+$offset16],$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', '[', OP (DSTLE), '+', OP (OFFSET16), ']', ',', OP (IMM32), 0 } }, - & ifmt_stble, { 0x72 } - }, -/* sth [$dstle+$offset16],$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', '[', OP (DSTLE), '+', OP (OFFSET16), ']', ',', OP (IMM32), 0 } }, - & ifmt_stble, { 0x6a } - }, -/* stw [$dstle+$offset16],$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', '[', OP (DSTLE), '+', OP (OFFSET16), ']', ',', OP (IMM32), 0 } }, - & ifmt_stble, { 0x62 } - }, -/* stdw [$dstle+$offset16],$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', '[', OP (DSTLE), '+', OP (OFFSET16), ']', ',', OP (IMM32), 0 } }, - & ifmt_stble, { 0x7a } - }, -/* stb [$dstbe+$offset16],$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', '[', OP (DSTBE), '+', OP (OFFSET16), ']', ',', OP (IMM32), 0 } }, - & ifmt_stbbe, { 0x72 } - }, -/* sth [$dstbe+$offset16],$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', '[', OP (DSTBE), '+', OP (OFFSET16), ']', ',', OP (IMM32), 0 } }, - & ifmt_stbbe, { 0x6a } - }, -/* stw [$dstbe+$offset16],$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', '[', OP (DSTBE), '+', OP (OFFSET16), ']', ',', OP (IMM32), 0 } }, - & ifmt_stbbe, { 0x62 } - }, -/* stdw [$dstbe+$offset16],$imm32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', '[', OP (DSTBE), '+', OP (OFFSET16), ']', ',', OP (IMM32), 0 } }, - & ifmt_stbbe, { 0x7a } - }, -/* jeq $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0x15 } - }, -/* jeq $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0x1d } - }, -/* jeq32 $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0x16 } - }, -/* jeq32 $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0x1e } - }, -/* jgt $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0x25 } - }, -/* jgt $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0x2d } - }, -/* jgt32 $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0x26 } - }, -/* jgt32 $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0x2e } - }, -/* jge $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0x35 } - }, -/* jge $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0x3d } - }, -/* jge32 $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0x36 } - }, -/* jge32 $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0x3e } - }, -/* jlt $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0xa5 } - }, -/* jlt $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0xad } - }, -/* jlt32 $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0xa6 } - }, -/* jlt32 $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0xae } - }, -/* jle $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0xb5 } - }, -/* jle $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0xbd } - }, -/* jle32 $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0xb6 } - }, -/* jle32 $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0xbe } - }, -/* jset $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0x45 } - }, -/* jset $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0x4d } - }, -/* jset32 $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0x46 } - }, -/* jset32 $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0x4e } - }, -/* jne $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0x55 } - }, -/* jne $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0x5d } - }, -/* jne32 $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0x56 } - }, -/* jne32 $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0x5e } - }, -/* jsgt $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0x65 } - }, -/* jsgt $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0x6d } - }, -/* jsgt32 $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0x66 } - }, -/* jsgt32 $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0x6e } - }, -/* jsge $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0x75 } - }, -/* jsge $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0x7d } - }, -/* jsge32 $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0x76 } - }, -/* jsge32 $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0x7e } - }, -/* jslt $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0xc5 } - }, -/* jslt $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0xcd } - }, -/* jslt32 $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0xc6 } - }, -/* jslt32 $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0xce } - }, -/* jsle $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0xd5 } - }, -/* jsle $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0xdd } - }, -/* jsle32 $dstle,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqile, { 0xd6 } - }, -/* jsle32 $dstle,$srcle,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrle, { 0xde } - }, -/* jeq $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0x15 } - }, -/* jeq $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0x1d } - }, -/* jeq32 $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0x16 } - }, -/* jeq32 $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0x1e } - }, -/* jgt $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0x25 } - }, -/* jgt $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0x2d } - }, -/* jgt32 $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0x26 } - }, -/* jgt32 $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0x2e } - }, -/* jge $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0x35 } - }, -/* jge $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0x3d } - }, -/* jge32 $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0x36 } - }, -/* jge32 $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0x3e } - }, -/* jlt $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0xa5 } - }, -/* jlt $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0xad } - }, -/* jlt32 $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0xa6 } - }, -/* jlt32 $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0xae } - }, -/* jle $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0xb5 } - }, -/* jle $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0xbd } - }, -/* jle32 $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0xb6 } - }, -/* jle32 $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0xbe } - }, -/* jset $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0x45 } - }, -/* jset $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0x4d } - }, -/* jset32 $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0x46 } - }, -/* jset32 $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0x4e } - }, -/* jne $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0x55 } - }, -/* jne $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0x5d } - }, -/* jne32 $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0x56 } - }, -/* jne32 $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0x5e } - }, -/* jsgt $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0x65 } - }, -/* jsgt $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0x6d } - }, -/* jsgt32 $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0x66 } - }, -/* jsgt32 $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0x6e } - }, -/* jsge $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0x75 } - }, -/* jsge $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0x7d } - }, -/* jsge32 $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0x76 } - }, -/* jsge32 $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0x7e } - }, -/* jslt $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0xc5 } - }, -/* jslt $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0xcd } - }, -/* jslt32 $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0xc6 } - }, -/* jslt32 $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0xce } - }, -/* jsle $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0xd5 } - }, -/* jsle $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0xdd } - }, -/* jsle32 $dstbe,$imm32,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), ',', OP (DISP16), 0 } }, - & ifmt_jeqibe, { 0xd6 } - }, -/* jsle32 $dstbe,$srcbe,$disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, - & ifmt_jeqrbe, { 0xde } - }, -/* call $disp32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DISP32), 0 } }, - & ifmt_callle, { 0x85 } - }, -/* call $disp32 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DISP32), 0 } }, - & ifmt_callbe, { 0x85 } - }, -/* call $dstle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), 0 } }, - & ifmt_negle, { 0x8d } - }, -/* call $dstbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), 0 } }, - & ifmt_negbe, { 0x8d } - }, -/* ja $disp16 */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DISP16), 0 } }, - & ifmt_ja, { 0x5 } - }, -/* exit */ - { - { 0, 0, 0, 0 }, - { { MNEM, 0 } }, - & ifmt_exit, { 0x95 } - }, -/* xadddw [$dstle+$offset16],$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', '[', OP (DSTLE), '+', OP (OFFSET16), ']', ',', OP (SRCLE), 0 } }, - & ifmt_ldxwle, { 0xdb } - }, -/* xaddw [$dstle+$offset16],$srcle */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', '[', OP (DSTLE), '+', OP (OFFSET16), ']', ',', OP (SRCLE), 0 } }, - & ifmt_ldxwle, { 0xc3 } - }, -/* xadddw [$dstbe+$offset16],$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', '[', OP (DSTBE), '+', OP (OFFSET16), ']', ',', OP (SRCBE), 0 } }, - & ifmt_ldxwbe, { 0xdb } - }, -/* xaddw [$dstbe+$offset16],$srcbe */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', '[', OP (DSTBE), '+', OP (OFFSET16), ']', ',', OP (SRCBE), 0 } }, - & ifmt_ldxwbe, { 0xc3 } - }, -/* brkpt */ - { - { 0, 0, 0, 0 }, - { { MNEM, 0 } }, - & ifmt_exit, { 0x8c } - }, + /* id, normal, pseudoc, version, mask, opcodes */ + + /* ALU instructions. */ + {BPF_INSN_ADDR, "add%W%dr , %sr", "%dr += %sr", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_ADD|BPF_SRC_X}, + {BPF_INSN_ADDI, "add%W%dr , %i32", "%dr += %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_ADD|BPF_SRC_K}, + {BPF_INSN_SUBR, "sub%W%dr , %sr", "%dr -= %sr", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_SUB|BPF_SRC_X}, + {BPF_INSN_SUBI, "sub%W%dr , %i32", "%dr -= %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_SUB|BPF_SRC_K}, + {BPF_INSN_MULR, "mul%W%dr , %sr", "%dr *= %sr", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_MUL|BPF_SRC_X}, + {BPF_INSN_MULI, "mul%W%dr , %i32", "%dr *= %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_MUL|BPF_SRC_K}, + {BPF_INSN_SDIVR, "sdiv%W%dr, %sr", "%dr s/= %sr", + BPF_V4, BPF_CODE|BPF_OFFSET16, BPF_CLASS_ALU64|BPF_CODE_DIV|BPF_SRC_X|BPF_OFFSET16_SDIVMOD}, + {BPF_INSN_SDIVI, "sdiv%W%dr , %i32","%dr s/= %i32", + BPF_V4, BPF_CODE|BPF_OFFSET16, BPF_CLASS_ALU64|BPF_CODE_DIV|BPF_SRC_K|BPF_OFFSET16_SDIVMOD}, + {BPF_INSN_SMODR, "smod%W%dr , %sr", "%dr s%%= %sr", + BPF_V4, BPF_CODE|BPF_OFFSET16, BPF_CLASS_ALU64|BPF_CODE_MOD|BPF_SRC_X|BPF_OFFSET16_SDIVMOD}, + {BPF_INSN_SMODI, "smod%W%dr , %i32", "%dr s%%= %i32", + BPF_V4, BPF_CODE|BPF_OFFSET16, BPF_CLASS_ALU64|BPF_CODE_MOD|BPF_SRC_K|BPF_OFFSET16_SDIVMOD}, + {BPF_INSN_DIVR, "div%W%dr , %sr", "%dr /= %sr", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_DIV|BPF_SRC_X}, + {BPF_INSN_DIVI, "div%W%dr , %i32", "%dr /= %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_DIV|BPF_SRC_K}, + {BPF_INSN_MODR, "mod%W%dr , %sr", "%dr %%= %sr", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_MOD|BPF_SRC_X}, + {BPF_INSN_MODI, "mod%W%dr , %i32", "%dr %%= %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_MOD|BPF_SRC_K}, + {BPF_INSN_ORR, "or%W%dr , %sr", "%dr |= %sr", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_OR|BPF_SRC_X}, + {BPF_INSN_ORI, "or%W%dr , %i32", "%dr |= %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_OR|BPF_SRC_K}, + {BPF_INSN_ANDR, "and%W%dr , %sr", "%dr &= %sr", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_AND|BPF_SRC_X}, + {BPF_INSN_ANDI, "and%W%dr , %i32", "%dr &= %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_AND|BPF_SRC_K}, + {BPF_INSN_XORR, "xor%W%dr , %sr", "%dr ^= %sr", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_XOR|BPF_SRC_X}, + {BPF_INSN_XORI, "xor%W%dr , %i32", "%dr ^= %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_XOR|BPF_SRC_K}, + {BPF_INSN_NEGR, "neg%W%dr", "%dr = - %dr", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_NEG|BPF_SRC_X}, + {BPF_INSN_NEGI, "neg%W%dr , %i32", "%dr = -%W%i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_NEG|BPF_SRC_K}, + {BPF_INSN_LSHR, "lsh%W%dr , %sr", "%dr <<= %sr", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_LSH|BPF_SRC_X}, + {BPF_INSN_LSHI, "lsh%W%dr , %i32", "%dr <<= %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_LSH|BPF_SRC_K}, + {BPF_INSN_RSHR, "rsh%W%dr , %sr", "%dr >>= %sr", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_RSH|BPF_SRC_X}, + {BPF_INSN_RSHI, "rsh%W%dr , %i32", "%dr >>= %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_RSH|BPF_SRC_K}, + {BPF_INSN_ARSHR, "arsh%W%dr , %sr", "%dr%ws>>= %sr", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_ARSH|BPF_SRC_X}, + {BPF_INSN_ARSHI, "arsh%W%dr , %i32", "%dr%ws>>= %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_ARSH|BPF_SRC_K}, + {BPF_INSN_MOVS8R, "movs%W%dr , %sr , 8", "%dr%w=%w( s8 )%w%sr", + BPF_V4, BPF_CODE|BPF_OFFSET16, BPF_CLASS_ALU64|BPF_CODE_MOV|BPF_SRC_X|BPF_OFFSET16_MOVS8}, + {BPF_INSN_MOVS16R, "movs%W%dr , %sr , 16", "%dr%w=%w( s16 )%w%sr", + BPF_V4, BPF_CODE|BPF_OFFSET16, BPF_CLASS_ALU64|BPF_CODE_MOV|BPF_SRC_X|BPF_OFFSET16_MOVS16}, + {BPF_INSN_MOVS32R, "movs%W%dr , %sr , 32", "%dr%w=%w( s32 )%w%sr", + BPF_V4, BPF_CODE|BPF_OFFSET16, BPF_CLASS_ALU64|BPF_CODE_MOV|BPF_SRC_X|BPF_OFFSET16_MOVS32}, + {BPF_INSN_MOVR, "mov%W%dr , %sr", "%dr = %sr", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_MOV|BPF_SRC_X}, + {BPF_INSN_MOVI, "mov%W%dr , %i32", "%dr = %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU64|BPF_CODE_MOV|BPF_SRC_K}, + + /* ALU32 instructions. */ + {BPF_INSN_ADD32R, "add32%W%dr , %sr", "%dw += %sw", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_ADD|BPF_SRC_X}, + {BPF_INSN_ADD32I, "add32%W%dr , %i32", "%dw += %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_ADD|BPF_SRC_K}, + {BPF_INSN_SUB32R, "sub32%W%dr , %sr", "%dw -= %sw", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_SUB|BPF_SRC_X}, + {BPF_INSN_SUB32I, "sub32%W%dr , %i32", "%dw -= %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_SUB|BPF_SRC_K}, + {BPF_INSN_MUL32R, "mul32%W%dr , %sr", "%dw *= %sw", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_MUL|BPF_SRC_X}, + {BPF_INSN_MUL32I, "mul32%W%dr , %i32", "%dw *= %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_MUL|BPF_SRC_K}, + {BPF_INSN_SDIV32R, "sdiv32%W%dr , %sr", "%dw s/= %sw", + BPF_V4, BPF_CODE|BPF_OFFSET16, BPF_CLASS_ALU|BPF_CODE_DIV|BPF_SRC_X|BPF_OFFSET16_SDIVMOD}, + {BPF_INSN_SDIV32I, "sdiv32%W%dr , %i32", "%dw s/= %i32", + BPF_V4, BPF_CODE|BPF_OFFSET16, BPF_CLASS_ALU|BPF_CODE_DIV|BPF_SRC_K|BPF_OFFSET16_SDIVMOD}, + {BPF_INSN_SMOD32R, "smod32%W%dr , %sr", "%dw s%%= %sw", + BPF_V4, BPF_CODE|BPF_OFFSET16, BPF_CLASS_ALU|BPF_CODE_MOD|BPF_SRC_X|BPF_OFFSET16_SDIVMOD}, + {BPF_INSN_SMOD32I, "smod32%W%dr , %i32", "%dw s%%= %i32", + BPF_V4, BPF_CODE|BPF_OFFSET16, BPF_CLASS_ALU|BPF_CODE_MOD|BPF_SRC_K|BPF_OFFSET16_SDIVMOD}, + {BPF_INSN_DIV32R, "div32%W%dr , %sr", "%dw /= %sw", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_DIV|BPF_SRC_X}, + {BPF_INSN_DIV32I, "div32%W%dr , %i32", "%dw /= %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_DIV|BPF_SRC_K}, + {BPF_INSN_MOD32R, "mod32%W%dr , %sr", "%dw %%= %sw", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_MOD|BPF_SRC_X}, + {BPF_INSN_MOD32I, "mod32%W%dr , %i32", "%dw %%= %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_MOD|BPF_SRC_K}, + {BPF_INSN_OR32R, "or32%W%dr , %sr", "%dw |= %sw", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_OR|BPF_SRC_X}, + {BPF_INSN_OR32I, "or32%W%dr , %i32", "%dw |= %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_OR|BPF_SRC_K}, + {BPF_INSN_AND32R, "and32%W%dr , %sr", "%dw &= %sw", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_AND|BPF_SRC_X}, + {BPF_INSN_AND32I, "and32%W%dr , %i32", "%dw &= %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_AND|BPF_SRC_K}, + {BPF_INSN_XOR32R, "xor32%W%dr , %sr", "%dw ^= %sw", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_XOR|BPF_SRC_X}, + {BPF_INSN_XOR32I, "xor32%W%dr , %i32", "%dw ^= %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_XOR|BPF_SRC_K}, + {BPF_INSN_NEG32R, "neg32%W%dr", "%dw = - %dw", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_NEG|BPF_SRC_X}, + {BPF_INSN_NEG32I, "neg32%W%dr , %i32", "%dw = -%W%i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_NEG|BPF_SRC_K}, + {BPF_INSN_LSH32R, "lsh32%W%dr , %sr", "%dw <<= %sw", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_LSH|BPF_SRC_X}, + {BPF_INSN_LSH32I, "lsh32%W%dr , %i32", "%dw <<= %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_LSH|BPF_SRC_K}, + {BPF_INSN_RSH32R, "rsh32%W%dr , %sr", "%dw >>= %sw", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_RSH|BPF_SRC_X}, + {BPF_INSN_RSH32I, "rsh32%W%dr , %i32", "%dw >>= %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_RSH|BPF_SRC_K}, + {BPF_INSN_ARSH32R, "arsh32%W%dr , %sr", "%dw%ws>>= %sw", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_ARSH|BPF_SRC_X}, + {BPF_INSN_ARSH32I, "arsh32%W%dr , %i32", "%dw%Ws>>= %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_ARSH|BPF_SRC_K}, + {BPF_INSN_MOVS328R, "movs32%W%dr , %sr , 8", "%dw%w=%w( s8 )%w%sw", + BPF_V4, BPF_CODE|BPF_OFFSET16, BPF_CLASS_ALU|BPF_CODE_MOV|BPF_SRC_X|BPF_OFFSET16_MOVS8}, + {BPF_INSN_MOVS3216R, "movs32%W%dr , %sr , 16", "%dw%w=%w( s16 )%w%sw", + BPF_V4, BPF_CODE|BPF_OFFSET16, BPF_CLASS_ALU|BPF_CODE_MOV|BPF_SRC_X|BPF_OFFSET16_MOVS16}, + {BPF_INSN_MOVS3232R, "movs32%W%dr , %sr , 32", "%dw%w=%w( s32 )%w%sw", + BPF_V4, BPF_CODE|BPF_OFFSET16, BPF_CLASS_ALU|BPF_CODE_MOV|BPF_SRC_X|BPF_OFFSET16_MOVS32}, + {BPF_INSN_MOV32R, "mov32%W%dr , %sr", "%dw = %sw", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_MOV|BPF_SRC_X}, + {BPF_INSN_MOV32I, "mov32%W%dr , %i32", "%dw = %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ALU|BPF_CODE_MOV|BPF_SRC_K}, + + /* Endianness conversion instructions. */ + {BPF_INSN_ENDLE16, "endle%W%dr , 16", "%dr = le16%w%dr", + BPF_V1, BPF_CODE|BPF_IMM32, BPF_CLASS_ALU|BPF_CODE_END|BPF_SRC_K|BPF_IMM32_END16}, + {BPF_INSN_ENDLE32, "endle%W%dr , 32", "%dr = le32%w%dr", + BPF_V1, BPF_CODE|BPF_IMM32, BPF_CLASS_ALU|BPF_CODE_END|BPF_SRC_K|BPF_IMM32_END32}, + {BPF_INSN_ENDLE64, "endle%W%dr , 64", "%dr = le64%w%dr", + BPF_V1, BPF_CODE|BPF_IMM32, BPF_CLASS_ALU|BPF_CODE_END|BPF_SRC_K|BPF_IMM32_END64}, + {BPF_INSN_ENDBE16, "endbe%W%dr , 16", "%dr = be16%w%dr", + BPF_V1, BPF_CODE|BPF_IMM32, BPF_CLASS_ALU|BPF_CODE_END|BPF_SRC_X|BPF_IMM32_END16}, + {BPF_INSN_ENDBE32, "endbe%W%dr , 32", "%dr = be32%w%dr", + BPF_V1, BPF_CODE|BPF_IMM32, BPF_CLASS_ALU|BPF_CODE_END|BPF_SRC_X|BPF_IMM32_END32}, + {BPF_INSN_ENDBE64, "endbe%W%dr , 64", "%dr = be64%w%dr", + BPF_V1, BPF_CODE|BPF_IMM32, BPF_CLASS_ALU|BPF_CODE_END|BPF_SRC_X|BPF_IMM32_END64}, + + /* Byte-swap instructions. */ + {BPF_INSN_BSWAP16, "bswap%W%dr , 16", "%dr%w=%wbswap16%w%dr", + BPF_V4, BPF_CODE|BPF_IMM32, BPF_CLASS_ALU64|BPF_CODE_END|BPF_SRC_K|BPF_IMM32_BSWAP16}, + {BPF_INSN_BSWAP32, "bswap%W%dr , 32", "%dr%w=%wbswap32%w%dr", + BPF_V4, BPF_CODE|BPF_IMM32, BPF_CLASS_ALU64|BPF_CODE_END|BPF_SRC_K|BPF_IMM32_BSWAP32}, + {BPF_INSN_BSWAP64, "bswap%W%dr , 64", "%dr%w=%wbswap64%w%dr", + BPF_V4, BPF_CODE|BPF_IMM32, BPF_CLASS_ALU64|BPF_CODE_END|BPF_SRC_K|BPF_IMM32_BSWAP64}, + + /* 64-bit load instruction. */ + {BPF_INSN_LDDW, "lddw%W%dr , %i64", "%dr = %i64%wll", + BPF_V1, BPF_CODE, BPF_CLASS_LD|BPF_SIZE_DW|BPF_MODE_IMM}, + + /* Indirect load instructions, designed to be used in socket + filters. */ + {BPF_INSN_LDINDB, "ldindb%W%sr , %i32", "r0 = * ( u8 * ) skb [ %sr %I32 ]", + BPF_V1, BPF_CODE, BPF_CLASS_LD|BPF_SIZE_B|BPF_MODE_IND}, + {BPF_INSN_LDINDH, "ldindh%W%sr , %i32", "r0 = * ( u16 * ) skb [ %sr %I32 ]", + BPF_V1, BPF_CODE, BPF_CLASS_LD|BPF_SIZE_H|BPF_MODE_IND}, + {BPF_INSN_LDINDW, "ldindw%W%sr , %i32", "r0 = * ( u32 * ) skb [ %sr %I32 ]", + BPF_V1, BPF_CODE, BPF_CLASS_LD|BPF_SIZE_W|BPF_MODE_IND}, + {BPF_INSN_LDINDDW, "ldinddw%W%sr , %i32", "r0 = * ( u64 * ) skb [ %sr %I32 ]", + BPF_V1, BPF_CODE, BPF_CLASS_LD|BPF_SIZE_DW|BPF_MODE_IND}, + + /* Absolute load instructions, designed to be used in socket filters. */ + {BPF_INSN_LDABSB, "ldabsb%W%i32", "r0 = * ( u8 * ) skb [ %i32 ]", + BPF_V1, BPF_CODE, BPF_CLASS_LD|BPF_SIZE_B|BPF_MODE_ABS}, + {BPF_INSN_LDABSH, "ldabsh%W%i32", "r0 = * ( u16 * ) skb [ %i32 ]", + BPF_V1, BPF_CODE, BPF_CLASS_LD|BPF_SIZE_H|BPF_MODE_ABS}, + {BPF_INSN_LDABSW, "ldabsw%W%i32", "r0 = * ( u32 * ) skb [ %i32 ]", + BPF_V1, BPF_CODE, BPF_CLASS_LD|BPF_SIZE_W|BPF_MODE_ABS}, + {BPF_INSN_LDABSDW, "ldabsdw%W%i32", "r0 = * ( u64 * ) skb [ %i32 ]", + BPF_V1, BPF_CODE, BPF_CLASS_LD|BPF_SIZE_DW|BPF_MODE_ABS}, + + /* Generic load instructions (to register.) */ + {BPF_INSN_LDXB, "ldxb%W%dr , [ %sr %o16 ]", "%dr = * ( u8 * ) ( %sr %o16 )", + BPF_V1, BPF_CODE, BPF_CLASS_LDX|BPF_SIZE_B|BPF_MODE_MEM}, + {BPF_INSN_LDXH, "ldxh%W%dr , [ %sr %o16 ]", "%dr = * ( u16 * ) ( %sr %o16 )", + BPF_V1, BPF_CODE, BPF_CLASS_LDX|BPF_SIZE_H|BPF_MODE_MEM}, + {BPF_INSN_LDXW, "ldxw%W%dr , [ %sr %o16 ]", "%dr = * ( u32 * ) ( %sr %o16 )", + BPF_V1, BPF_CODE, BPF_CLASS_LDX|BPF_SIZE_W|BPF_MODE_MEM}, + {BPF_INSN_LDXDW, "ldxdw%W%dr , [ %sr %o16 ]","%dr = * ( u64 * ) ( %sr %o16 )", + BPF_V1, BPF_CODE, BPF_CLASS_LDX|BPF_SIZE_DW|BPF_MODE_MEM}, + + /* Generic signed load instructions (to register.) */ + {BPF_INSN_LDXSB, "ldxsb%W%dr , [ %sr %o16 ]", "%dr = * ( s8 * ) ( %sr %o16 )", + BPF_V4, BPF_CODE, BPF_CLASS_LDX|BPF_SIZE_B|BPF_MODE_SMEM}, + {BPF_INSN_LDXSH, "ldxsh%W%dr , [ %sr %o16 ]", "%dr = * ( s16 * ) ( %sr %o16 )", + BPF_V4, BPF_CODE, BPF_CLASS_LDX|BPF_SIZE_H|BPF_MODE_SMEM}, + {BPF_INSN_LDXSW, "ldxsw%W%dr , [ %sr %o16 ]", "%dr = * ( s32 * ) ( %sr %o16 )", + BPF_V4, BPF_CODE, BPF_CLASS_LDX|BPF_SIZE_W|BPF_MODE_SMEM}, + {BPF_INSN_LDXSDW, "ldxsdw%W%dr , [ %sr %o16 ]","%dr = * ( s64 * ) ( %sr %o16 )", + BPF_V4, BPF_CODE, BPF_CLASS_LDX|BPF_SIZE_DW|BPF_MODE_SMEM}, + + /* Generic store instructions (from register.) */ + {BPF_INSN_STXBR, "stxb%W[ %dr %o16 ] , %sr", "* ( u8 * ) ( %dr %o16 ) = %sr", + BPF_V1, BPF_CODE, BPF_CLASS_STX|BPF_SIZE_B|BPF_MODE_MEM}, + {BPF_INSN_STXHR, "stxh%W[ %dr %o16 ] , %sr", "* ( u16 * ) ( %dr %o16 ) = %sr", + BPF_V1, BPF_CODE, BPF_CLASS_STX|BPF_SIZE_H|BPF_MODE_MEM}, + {BPF_INSN_STXWR, "stxw%W[ %dr %o16 ], %sr", "* ( u32 * ) ( %dr %o16 ) = %sr", + BPF_V1, BPF_CODE, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_MEM}, + {BPF_INSN_STXDWR, "stxdw%W[ %dr %o16 ] , %sr", "* ( u64 * ) ( %dr %o16 ) = %sr", + BPF_V1, BPF_CODE, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_MEM}, + + /* Generic store instructions (from 32-bit immediate.) */ + {BPF_INSN_STXBI, "stb%W[ %dr %o16 ] , %i32", "* ( u8 * ) ( %dr %o16 ) = %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ST|BPF_SIZE_B|BPF_MODE_MEM}, + {BPF_INSN_STXHI, "sth%W[ %dr %o16 ] , %i32", "* ( u16 * ) ( %dr %o16 ) = %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ST|BPF_SIZE_H|BPF_MODE_MEM}, + {BPF_INSN_STXWI, "stw%W[ %dr %o16 ] , %i32", "* ( u32 * ) ( %dr %o16 ) = %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ST|BPF_SIZE_W|BPF_MODE_MEM}, + {BPF_INSN_STXDWI, "stdw%W[ %dr %o16 ] , %i32", "* ( u64 * ) ( %dr %o16 ) = %i32", + BPF_V1, BPF_CODE, BPF_CLASS_ST|BPF_SIZE_DW|BPF_MODE_MEM}, + + /* Compare-and-jump instructions (reg OP reg). */ + {BPF_INSN_JAR, "ja%W%d16", "goto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JA|BPF_SRC_K}, + {BPF_INSN_JEQR, "jeq%W%dr , %sr , %d16", "if%w%dr == %sr%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JEQ|BPF_SRC_X}, + {BPF_INSN_JGTR, "jgt%W%dr , %sr , %d16", "if%w%dr > %sr%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JGT|BPF_SRC_X}, + {BPF_INSN_JSGTR, "jsgt%W%dr, %sr , %d16", "if%w%dr s> %sr%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JSGT|BPF_SRC_X}, + {BPF_INSN_JGER, "jge%W%dr , %sr , %d16", "if%w%dr >= %sr%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JGE|BPF_SRC_X}, + {BPF_INSN_JSGER, "jsge%W%dr , %sr , %d16", "if%w%dr s>= %sr%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JSGE|BPF_SRC_X}, + {BPF_INSN_JLTR, "jlt%W%dr , %sr , %d16", "if%w%dr < %sr%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JLT|BPF_SRC_X}, + {BPF_INSN_JSLTR, "jslt%W%dr , %sr , %d16", "if%w%dr s< %sr%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JSLT|BPF_SRC_X}, + {BPF_INSN_JLER, "jle%W%dr , %sr , %d16", "if%w%dr <= %sr%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JLE|BPF_SRC_X}, + {BPF_INSN_JSLER, "jsle%W%dr , %sr , %d16", "if%w%dr s<= %sr%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JSLE|BPF_SRC_X}, + {BPF_INSN_JSETR, "jset%W%dr , %sr , %d16", "if%w%dr & %sr%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JSET|BPF_SRC_X}, + {BPF_INSN_JNER, "jne%W%dr , %sr , %d16", "if%w%dr != %sr%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JNE|BPF_SRC_X}, + {BPF_INSN_CALLR, "call%W%dr", "callx%w%dr", + BPF_XBPF, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_CALL|BPF_SRC_X}, + {BPF_INSN_CALL, "call%W%d32", "call%w%d32", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_CALL|BPF_SRC_K}, + {BPF_INSN_EXIT, "exit", "exit", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_EXIT|BPF_SRC_K}, + + /* Compare-and-jump instructions (reg OP imm). */ + {BPF_INSN_JEQI, "jeq%W%dr , %i32 , %d16", "if%w%dr == %i32%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JEQ|BPF_SRC_K}, + {BPF_INSN_JGTI, "jgt%W%dr , %i32 , %d16", "if%w%dr > %i32%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JGT|BPF_SRC_K}, + {BPF_INSN_JSGTI, "jsgt%W%dr, %i32 , %d16", "if%w%dr s> %i32%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JSGT|BPF_SRC_K}, + {BPF_INSN_JGEI, "jge%W%dr , %i32 , %d16", "if%w%dr >= %i32%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JGE|BPF_SRC_K}, + {BPF_INSN_JSGEI, "jsge%W%dr , %i32 , %d16", "if%w%dr s>= %i32%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JSGE|BPF_SRC_K}, + {BPF_INSN_JLTI, "jlt%W%dr , %i32 , %d16", "if%w%dr < %i32%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JLT|BPF_SRC_K}, + {BPF_INSN_JSLTI, "jslt%W%dr , %i32, %d16", "if%w%dr s< %i32%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JSLT|BPF_SRC_K}, + {BPF_INSN_JLEI, "jle%W%dr , %i32 , %d16", "if%w%dr <= %i32%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JLE|BPF_SRC_K}, + {BPF_INSN_JSLEI, "jsle%W%dr , %i32 , %d16", "if%w%dr s<= %i32%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JSLE|BPF_SRC_K}, + {BPF_INSN_JSETI, "jset%W%dr , %i32 , %d16", "if%w%dr & %i32%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JSET|BPF_SRC_K}, + {BPF_INSN_JNEI, "jne%W%dr , %i32 , %d16", "if%w%dr != %i32%wgoto%w%d16", + BPF_V1, BPF_CODE, BPF_CLASS_JMP|BPF_CODE_JNE|BPF_SRC_K}, + + /* 32-bit jump-always. */ + {BPF_INSN_JAL, "jal%W%d32", "gotol%w%d32", + BPF_V4, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JA|BPF_SRC_K}, + + /* 32-bit compare-and-jump instructions (reg OP reg). */ + {BPF_INSN_JEQ32R, "jeq32%W%dr , %sr , %d16", "if%w%dw == %sw%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JEQ|BPF_SRC_X}, + {BPF_INSN_JGT32R, "jgt32%W%dr , %sr , %d16", "if%w%dw > %sw%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JGT|BPF_SRC_X}, + {BPF_INSN_JSGT32R, "jsgt32%W%dr, %sr , %d16", "if%w%dw s> %sw%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JSGT|BPF_SRC_X}, + {BPF_INSN_JGE32R, "jge32%W%dr , %sr , %d16", "if%w%dw >= %sw%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JGE|BPF_SRC_X}, + {BPF_INSN_JSGE32R, "jsge32%W%dr , %sr , %d16", "if%w%dw s>= %sw%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JSGE|BPF_SRC_X}, + {BPF_INSN_JLT32R, "jlt32%W%dr , %sr , %d16", "if%w%dw < %sw%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JLT|BPF_SRC_X}, + {BPF_INSN_JSLT32R, "jslt32%W%dr , %sr , %d16", "if%w%dw s< %sw%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JSLT|BPF_SRC_X}, + {BPF_INSN_JLE32R, "jle32%W%dr , %sr , %d16", "if%w%dw <= %sw%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JLE|BPF_SRC_X}, + {BPF_INSN_JSLE32R, "jsle32%W%dr , %sr , %d16", "if%w%dw s<= %sw%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JSLE|BPF_SRC_X}, + {BPF_INSN_JSET32R, "jset32%W%dr , %sr , %d16", "if%w%dw & %sw%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JSET|BPF_SRC_X}, + {BPF_INSN_JNE32R, "jne32%W%dr , %sr , %d16", "if%w%dw != %sw%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JNE|BPF_SRC_X}, + + /* 32-bit compare-and-jump instructions (reg OP imm). */ + {BPF_INSN_JEQ32I, "jeq32%W%dr , %i32 , %d16", "if%w%dw == %i32%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JEQ|BPF_SRC_K}, + {BPF_INSN_JGT32I, "jgt32%W%dr , %i32 , %d16", "if%w%dw > %i32%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JGT|BPF_SRC_K}, + {BPF_INSN_JSGT32I, "jsgt32%W%dr, %i32 , %d16", "if%w%dw s> %i32%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JSGT|BPF_SRC_K}, + {BPF_INSN_JGE32I, "jge32%W%dr , %i32 , %d16", "if%w%dw >= %i32%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JGE|BPF_SRC_K}, + {BPF_INSN_JSGE32I, "jsge32%W%dr , %i32 , %d16", "if%w%dw s>= %i32%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JSGE|BPF_SRC_K}, + {BPF_INSN_JLT32I, "jlt32%W%dr , %i32 , %d16", "if%w%dw < %i32%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JLT|BPF_SRC_K}, + {BPF_INSN_JSLT32I, "jslt32%W%dr , %i32, %d16", "if%w%dw s< %i32%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JSLT|BPF_SRC_K}, + {BPF_INSN_JLE32I, "jle32%W%dr , %i32 , %d16", "if%w%dw <= %i32%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JLE|BPF_SRC_K}, + {BPF_INSN_JSLE32I, "jsle32%W%dr , %i32 , %d16", "if%w%dw s<= %i32%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JSLE|BPF_SRC_K}, + {BPF_INSN_JSET32I, "jset32%W%dr , %i32 , %d16", "if%w%dw & %i32%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JSET|BPF_SRC_K}, + {BPF_INSN_JNE32I, "jne32%W%dr , %i32 , %d16", "if%w%dw != %i32%wgoto%w%d16", + BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JNE|BPF_SRC_K}, + + /* Atomic instructions. */ + {BPF_INSN_AADD, "aadd%W[ %dr %o16 ] , %sr", "lock%w* ( u64 * ) ( %dr %o16 ) += %sr", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_AADD}, + {BPF_INSN_AOR, "aor%W[ %dr %o16 ] , %sr", "lock%w* ( u64 * ) ( %dr %o16 ) |= %sr", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_AOR}, + {BPF_INSN_AAND, "aand%W[ %dr %o16 ] , %sr", "lock%w* ( u64 * ) ( %dr %o16 ) &= %sr", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_AAND}, + {BPF_INSN_AXOR, "axor%W[ %dr %o16 ] , %sr", "lock%w* ( u64 * ) ( %dr %o16 ) ^= %sr", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_AXOR}, + + /* Atomic instructions with fetching. */ + {BPF_INSN_AFADD, "afadd%W[ %dr %o16 ] , %sr", "%sr = atomic_fetch_add ( ( u64 * ) ( %dr %o16 ) , %sr )", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_AFADD}, + {BPF_INSN_AFOR, "afor%W[ %dr %o16 ] , %sr", "%sr = atomic_fetch_or ( ( u64 * ) ( %dr %o16 ) , %sr )", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_AFOR}, + {BPF_INSN_AFAND, "afand%W[ %dr %o16 ] , %sr", "%sr = atomic_fetch_and ( ( u64 * ) ( %dr %o16 ) , %sr )", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_AFAND}, + {BPF_INSN_AFXOR, "afxor%W[ %dr %o16 ] , %sr", "%sr = atomic_fetch_xor ( ( u64 * ) ( %dr %o16 ) , %sr )", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_AFXOR}, + + /* Atomic instructions (32-bit.) */ + {BPF_INSN_AADD32, "aadd32%W[ %dr %o16 ] , %sr", "lock%w* ( u32 * ) ( %dr %o16 ) += %sr", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_AADD}, + {BPF_INSN_AOR32, "aor32%W[ %dr %o16 ] , %sr", "lock%w* ( u32 * ) ( %dr %o16 ) |= %sr", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_AOR}, + {BPF_INSN_AAND32, "aand32%W[ %dr %o16 ] , %sr", "lock%w* ( u32 * ) ( %dr %o16 ) &= %sr", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_AAND}, + {BPF_INSN_AXOR32, "axor32%W[ %dr %o16 ] , %sr", "lock%w* ( u32 * ) ( %dr %o16 ) ^= %sr", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_AXOR}, + + /* Atomic instructions with fetching (32-bit.) */ + {BPF_INSN_AFADD32, "afadd32%W[ %dr %o16 ] , %sr", "%sw = atomic_fetch_add ( ( u32 * ) ( %dr %o16 ) , %sw )", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_AFADD}, + {BPF_INSN_AFOR32, "afor32%W[ %dr %o16 ] , %sr", "%sw = atomic_fetch_or ( ( u32 * ) ( %dr %o16 ) , %sw )", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_AFOR}, + {BPF_INSN_AFAND32, "afand32%W[ %dr %o16 ] , %sr", "%sw = atomic_fetch_and ( ( u32 * ) ( %dr %o16 ) , %sw )", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_AFAND}, + {BPF_INSN_AFXOR32, "afxor32%W[ %dr %o16 ] , %sr", "%sw = atomic_fetch_xor ( ( u32 * ) ( %dr %o16 ) , %sw )", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_AFXOR}, + + /* Atomic compare-and-swap, atomic exchange. */ + {BPF_INSN_ACMP, "acmp%W[ %dr %o16 ] , %sr", "r0 = cmpxchg_64 ( %dr %o16 , r0 , %sr )", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_ACMP}, + {BPF_INSN_AXCHG, "axchg%W[ %dr %o16 ] , %sr", "%sr = xchg_64 ( %dr %o16 , %sr )", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_AXCHG}, + + /* Atomic compare-and-swap, atomic exchange (32-bit). */ + {BPF_INSN_ACMP32, "acmp32%W[ %dr %o16 ], %sr", "w0 = cmpxchg32_32 ( %dr %o16 , w0 , %sw )", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_ACMP}, + {BPF_INSN_AXCHG32, "axchg32%W[ %dr %o16 ], %sr", "%sw = xchg32_32 ( %dr %o16 , %sw )", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_AXCHG}, + + /* Old versions of aadd and aadd32. */ + {BPF_INSN_AADD, "xadddw%W[ %dr %o16 ] , %sr", "* ( u64 * ) ( %dr %o16 ) += %sr", + BPF_V1, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_AADD}, + {BPF_INSN_AADD32, "xaddw%W[ %dr %o16 ] , %sr", "* ( u32 * ) ( %dr %o16 ) += %sr", + BPF_V1, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_AADD}, + + /* the brkpt instruction is used by the BPF simulator and it doesn't + really belong to the BPF instruction set. */ + {BPF_INSN_BRKPT, "brkpt", "brkpt", + BPF_XBPF, BPF_CODE, BPF_CLASS_ALU|BPF_SRC_X|BPF_CODE_NEG}, + + /* Sentinel. */ + {BPF_NOINSN, NULL, NULL, 0, 0UL, 0UL}, }; -#undef A -#undef OPERAND -#undef MNEM -#undef OP - -/* Formats for ALIAS macro-insns. */ - -#define F(f) & bpf_cgen_ifld_table[BPF_##f] -#undef F - -/* Each non-simple macro entry points to an array of expansion possibilities. */ - -#define A(a) (1 << CGEN_INSN_##a) -#define OPERAND(op) BPF_OPERAND_##op -#define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */ -#define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field)) - -/* The macro instruction table. */ - -static const CGEN_IBASE bpf_cgen_macro_insn_table[] = +static bpf_insn_word +bpf_handle_endianness (bpf_insn_word word, enum bpf_endian endian) { -}; - -/* The macro instruction opcode table. */ - -static const CGEN_OPCODE bpf_cgen_macro_insn_opcode_table[] = -{ -}; - -#undef A -#undef OPERAND -#undef MNEM -#undef OP - -#ifndef CGEN_ASM_HASH_P -#define CGEN_ASM_HASH_P(insn) 1 -#endif - -#ifndef CGEN_DIS_HASH_P -#define CGEN_DIS_HASH_P(insn) 1 -#endif - -/* Return non-zero if INSN is to be added to the hash table. - Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file. */ - -static int -asm_hash_insn_p (const CGEN_INSN *insn ATTRIBUTE_UNUSED) -{ - return CGEN_ASM_HASH_P (insn); -} - -static int -dis_hash_insn_p (const CGEN_INSN *insn) -{ - /* If building the hash table and the NO-DIS attribute is present, - ignore. */ - if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS)) - return 0; - return CGEN_DIS_HASH_P (insn); -} - -#ifndef CGEN_ASM_HASH -#define CGEN_ASM_HASH_SIZE 127 -#ifdef CGEN_MNEMONIC_OPERANDS -#define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) -#else -#define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) /*FIXME*/ -#endif -#endif - -/* It doesn't make much sense to provide a default here, - but while this is under development we do. - BUFFER is a pointer to the bytes of the insn, target order. - VALUE is the first base_insn_bitsize bits as an int in host order. */ - -#ifndef CGEN_DIS_HASH -#define CGEN_DIS_HASH_SIZE 256 -#define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf)) -#endif - -/* The result is the hash value of the insn. - Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file. */ - -static unsigned int -asm_hash_insn (const char *mnem) -{ - return CGEN_ASM_HASH (mnem); -} - -/* BUF is a pointer to the bytes of the insn, target order. - VALUE is the first base_insn_bitsize bits as an int in host order. */ - -static unsigned int -dis_hash_insn (const char *buf ATTRIBUTE_UNUSED, - CGEN_INSN_INT value ATTRIBUTE_UNUSED) -{ - return CGEN_DIS_HASH (buf, value); -} - -/* Set the recorded length of the insn in the CGEN_FIELDS struct. */ - -static void -set_fields_bitsize (CGEN_FIELDS *fields, int size) -{ - CGEN_FIELDS_BITSIZE (fields) = size; -} - -/* Function to call before using the operand instance table. - This plugs the opcode entries and macro instructions into the cpu table. */ - -void -bpf_cgen_init_opcode_table (CGEN_CPU_DESC cd) -{ - int i; - int num_macros = (sizeof (bpf_cgen_macro_insn_table) / - sizeof (bpf_cgen_macro_insn_table[0])); - const CGEN_IBASE *ib = & bpf_cgen_macro_insn_table[0]; - const CGEN_OPCODE *oc = & bpf_cgen_macro_insn_opcode_table[0]; - CGEN_INSN *insns = xmalloc (num_macros * sizeof (CGEN_INSN)); - - /* This test has been added to avoid a warning generated - if memset is called with a third argument of value zero. */ - if (num_macros >= 1) - memset (insns, 0, num_macros * sizeof (CGEN_INSN)); - for (i = 0; i < num_macros; ++i) + if (endian == BPF_ENDIAN_LITTLE) { - insns[i].base = &ib[i]; - insns[i].opcode = &oc[i]; - bpf_cgen_build_insn_regex (& insns[i]); - } - cd->macro_insn_table.init_entries = insns; - cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE); - cd->macro_insn_table.num_init_entries = num_macros; + /* Endianness groups: 8 | 4 | 4 | 16 | 32 */ - oc = & bpf_cgen_insn_opcode_table[0]; - insns = (CGEN_INSN *) cd->insn_table.init_entries; - for (i = 0; i < MAX_INSNS; ++i) - { - insns[i].opcode = &oc[i]; - bpf_cgen_build_insn_regex (& insns[i]); + bpf_insn_word code = (word >> 56) & 0xff; + bpf_insn_word dst = (word >> 48) & 0xf; + bpf_insn_word src = (word >> 52) & 0xf; + bpf_insn_word offset16 = (word >> 32) & 0xffff; + bpf_insn_word imm32 = word & 0xffffffff; + + return ((code << 56) + | dst << 52 + | src << 48 + | (offset16 & 0xff) << 40 + | ((offset16 >> 8) & 0xff) << 32 + | (imm32 & 0xff) << 24 + | ((imm32 >> 8) & 0xff) << 16 + | ((imm32 >> 16) & 0xff) << 8 + | ((imm32 >> 24) & 0xff)); } - cd->sizeof_fields = sizeof (CGEN_FIELDS); - cd->set_fields_bitsize = set_fields_bitsize; - - cd->asm_hash_p = asm_hash_insn_p; - cd->asm_hash = asm_hash_insn; - cd->asm_hash_size = CGEN_ASM_HASH_SIZE; - - cd->dis_hash_p = dis_hash_insn_p; - cd->dis_hash = dis_hash_insn; - cd->dis_hash_size = CGEN_DIS_HASH_SIZE; + return word; +} + +const struct bpf_opcode * +bpf_match_insn (bpf_insn_word word, + enum bpf_endian endian, + int version) +{ + unsigned int i = 0; + + while (bpf_opcodes[i].normal != NULL) + { + bpf_insn_word cword + = bpf_handle_endianness (word, endian); + + /* Attempt match using mask and opcodes. */ + if (bpf_opcodes[i].version <= version + && (cword & bpf_opcodes[i].mask) == bpf_opcodes[i].opcode) + return &bpf_opcodes[i]; + i++; + } + + /* No maching instruction found. */ + return NULL; +} + +uint8_t +bpf_extract_src (bpf_insn_word word, enum bpf_endian endian) +{ + word = bpf_handle_endianness (word, endian); + return (uint8_t) ((word >> 48) & 0xf); +} + +uint8_t +bpf_extract_dst (bpf_insn_word word, enum bpf_endian endian) +{ + word = bpf_handle_endianness (word, endian); + return (uint8_t) ((word >> 52) & 0xf); +} + +int16_t +bpf_extract_offset16 (bpf_insn_word word, enum bpf_endian endian) +{ + word = bpf_handle_endianness (word, endian); + return (int16_t) ((word >> 32) & 0xffff); +} + +int32_t +bpf_extract_imm32 (bpf_insn_word word, enum bpf_endian endian) +{ + word = bpf_handle_endianness (word, endian); + return (int32_t) (word & 0xffffffff); +} + +int64_t +bpf_extract_imm64 (bpf_insn_word word1, bpf_insn_word word2, + enum bpf_endian endian) +{ + word1 = bpf_handle_endianness (word1, endian); + word2 = bpf_handle_endianness (word2, endian); + return (int64_t) (((word2 & 0xffffffff) << 32) | (word1 & 0xffffffff)); +} + +const struct bpf_opcode * +bpf_get_opcode (unsigned int index) +{ + unsigned int i = 0; + + while (bpf_opcodes[i].normal != NULL && i < index) + ++i; + return (bpf_opcodes[i].normal == NULL + ? NULL + : &bpf_opcodes[i]); } diff --git a/opcodes/configure b/opcodes/configure index fa81f1d6bac..a9648baccb9 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.41. +# Generated by GNU Autoconf 2.69 for opcodes 2.41.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.41' -PACKAGE_STRING='opcodes 2.41' +PACKAGE_VERSION='2.41.50' +PACKAGE_STRING='opcodes 2.41.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.41 to adapt to many kinds of systems. +\`configure' configures opcodes 2.41.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.41:";; + short | recursive ) echo "Configuration of opcodes 2.41.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.41 +opcodes configure 2.41.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.41, which was +It was created by opcodes $as_me 2.41.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.41' + VERSION='2.41.50' cat >>confdefs.h <<_ACEOF @@ -12597,7 +12597,7 @@ if test x${all_targets} = xfalse ; then bfd_xtensa_arch) ta="$ta xtensa-dis.lo" ;; bfd_z80_arch) ta="$ta z80-dis.lo" ;; bfd_z8k_arch) ta="$ta z8k-dis.lo" ;; - bfd_bpf_arch) ta="$ta bpf-asm.lo bpf-desc.lo bpf-dis.lo bpf-ibld.lo bpf-opc.lo" using_cgen=yes ;; + bfd_bpf_arch) ta="$ta bpf-dis.lo bpf-opc.lo" ;; bfd_loongarch_arch) ta="$ta loongarch-dis.lo loongarch-opc.lo loongarch-coder.lo" ;; "") ;; @@ -13191,7 +13191,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.41, which was +This file was extended by opcodes $as_me 2.41.50, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -13257,7 +13257,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.41 +opcodes config.status 2.41.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 1beb72e87e0..7f508089c6f 100644 --- a/opcodes/configure.ac +++ b/opcodes/configure.ac @@ -345,7 +345,7 @@ if test x${all_targets} = xfalse ; then bfd_xtensa_arch) ta="$ta xtensa-dis.lo" ;; bfd_z80_arch) ta="$ta z80-dis.lo" ;; bfd_z8k_arch) ta="$ta z8k-dis.lo" ;; - bfd_bpf_arch) ta="$ta bpf-asm.lo bpf-desc.lo bpf-dis.lo bpf-ibld.lo bpf-opc.lo" using_cgen=yes ;; + bfd_bpf_arch) ta="$ta bpf-dis.lo bpf-opc.lo" ;; bfd_loongarch_arch) ta="$ta loongarch-dis.lo loongarch-opc.lo loongarch-coder.lo" ;; "") ;; diff --git a/opcodes/disassemble.c b/opcodes/disassemble.c index 7a4a641c2b9..8aac42ec96c 100644 --- a/opcodes/disassemble.c +++ b/opcodes/disassemble.c @@ -108,23 +108,6 @@ #include "m32c-desc.h" #endif -#ifdef ARCH_bpf -/* XXX this should be including bpf-desc.h instead of this hackery, - but at the moment it is not possible to include several CGEN - generated *-desc.h files simultaneously. To be fixed in - CGEN... */ - -# ifdef ARCH_m32c -enum epbf_isa_attr -{ - ISA_EBPFLE, ISA_EBPFBE, ISA_XBPFLE, ISA_XBPFBE, ISA_EBPFMAX -}; -# else -# include "bpf-desc.h" -# define ISA_EBPFMAX ISA_MAX -# endif -#endif /* ARCH_bpf */ - disassembler_ftype disassembler (enum bfd_architecture a, bool big ATTRIBUTE_UNUSED, @@ -594,7 +577,9 @@ disassembler_usage (FILE *stream ATTRIBUTE_UNUSED) #ifdef ARCH_loongarch print_loongarch_disassembler_options (stream); #endif - +#ifdef ARCH_bpf + print_bpf_disassembler_options (stream); +#endif return; } @@ -695,23 +680,7 @@ disassemble_init_for_target (struct disassemble_info * info) #endif #ifdef ARCH_bpf case bfd_arch_bpf: - info->endian_code = BFD_ENDIAN_LITTLE; - if (!info->private_data) - { - info->private_data = cgen_bitset_create (ISA_MAX); - if (info->endian == BFD_ENDIAN_BIG) - { - cgen_bitset_set (info->private_data, ISA_EBPFBE); - if (info->mach == bfd_mach_xbpf) - cgen_bitset_set (info->private_data, ISA_XBPFBE); - } - else - { - cgen_bitset_set (info->private_data, ISA_EBPFLE); - if (info->mach == bfd_mach_xbpf) - cgen_bitset_set (info->private_data, ISA_XBPFLE); - } - } + info->created_styled_output = true; break; #endif #ifdef ARCH_pru @@ -768,13 +737,10 @@ disassemble_free_target (struct disassemble_info *info) default: return; -#ifdef ARCH_bpf - case bfd_arch_bpf: -#endif #ifdef ARCH_m32c case bfd_arch_m32c: #endif -#if defined ARCH_bpf || defined ARCH_m32c +#if defined ARCH_m32c if (info->private_data) { CGEN_BITSET *mask = info->private_data; diff --git a/opcodes/i386-dis-evex-len.h b/opcodes/i386-dis-evex-len.h index e69c02484be..a02609c50f2 100644 --- a/opcodes/i386-dis-evex-len.h +++ b/opcodes/i386-dis-evex-len.h @@ -13,18 +13,18 @@ static const struct dis386 evex_len_table[][3] = { { VEX_W_TABLE (EVEX_W_0F3819_L_n) }, }, - /* EVEX_LEN_0F381A_M_0 */ + /* EVEX_LEN_0F381A */ { { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F381A_M_0_L_n) }, - { VEX_W_TABLE (EVEX_W_0F381A_M_0_L_n) }, + { VEX_W_TABLE (EVEX_W_0F381A_L_n) }, + { VEX_W_TABLE (EVEX_W_0F381A_L_n) }, }, - /* EVEX_LEN_0F381B_M_0 */ + /* EVEX_LEN_0F381B */ { { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F381B_M_0_L_2) }, + { VEX_W_TABLE (EVEX_W_0F381B_L_2) }, }, /* EVEX_LEN_0F3836 */ @@ -34,32 +34,32 @@ static const struct dis386 evex_len_table[][3] = { { "vperm%DQ", { XM, Vex, EXx }, PREFIX_DATA }, }, - /* EVEX_LEN_0F385A_M_0 */ + /* EVEX_LEN_0F385A */ { { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F385A_M_0_L_n) }, - { VEX_W_TABLE (EVEX_W_0F385A_M_0_L_n) }, + { VEX_W_TABLE (EVEX_W_0F385A_L_n) }, + { VEX_W_TABLE (EVEX_W_0F385A_L_n) }, }, - /* EVEX_LEN_0F385B_M_0 */ + /* EVEX_LEN_0F385B */ { { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F385B_M_0_L_2) }, + { VEX_W_TABLE (EVEX_W_0F385B_L_2) }, }, - /* EVEX_LEN_0F38C6_M_0 */ + /* EVEX_LEN_0F38C6 */ { { Bad_Opcode }, { Bad_Opcode }, - { REG_TABLE (REG_EVEX_0F38C6_M_0_L_2) }, + { REG_TABLE (REG_EVEX_0F38C6_L_2) }, }, - /* EVEX_LEN_0F38C7_M_0 */ + /* EVEX_LEN_0F38C7 */ { { Bad_Opcode }, { Bad_Opcode }, - { REG_TABLE (REG_EVEX_0F38C7_M_0_L_2) }, + { REG_TABLE (REG_EVEX_0F38C7_L_2) }, }, /* EVEX_LEN_0F3A00 */ diff --git a/opcodes/i386-dis-evex-mod.h b/opcodes/i386-dis-evex-mod.h index b3af48e421d..f9f912c5094 100644 --- a/opcodes/i386-dis-evex-mod.h +++ b/opcodes/i386-dis-evex-mod.h @@ -1,59 +1 @@ - /* MOD_EVEX_0F381A */ - { - { EVEX_LEN_TABLE (EVEX_LEN_0F381A_M_0) }, - }, - /* MOD_EVEX_0F381B */ - { - { EVEX_LEN_TABLE (EVEX_LEN_0F381B_M_0) }, - }, - /* MOD_EVEX_0F3828_P_1 */ - { - { Bad_Opcode }, - { "vpmovm2%BW", { XM, MaskE }, 0 }, - }, - /* MOD_EVEX_0F382A_P_1_W_1 */ - { - { Bad_Opcode }, - { "vpbroadcastmb2q", { XM, MaskE }, 0 }, - }, - /* MOD_EVEX_0F3838_P_1 */ - { - { Bad_Opcode }, - { "vpmovm2%DQ", { XM, MaskE }, 0 }, - }, - /* MOD_EVEX_0F383A_P_1_W_0 */ - { - { Bad_Opcode }, - { "vpbroadcastmw2d", { XM, MaskE }, 0 }, - }, - /* MOD_EVEX_0F385A */ - { - { EVEX_LEN_TABLE (EVEX_LEN_0F385A_M_0) }, - }, - /* MOD_EVEX_0F385B */ - { - { EVEX_LEN_TABLE (EVEX_LEN_0F385B_M_0) }, - }, - /* MOD_EVEX_0F387A_W_0 */ - { - { Bad_Opcode }, - { "vpbroadcastb", { XM, Ed }, PREFIX_DATA }, - }, - /* MOD_EVEX_0F387B_W_0 */ - { - { Bad_Opcode }, - { "vpbroadcastw", { XM, Ed }, PREFIX_DATA }, - }, - /* MOD_EVEX_0F387C */ - { - { Bad_Opcode }, - { "vpbroadcastK", { XM, Edq }, PREFIX_DATA }, - }, - { - /* MOD_EVEX_0F38C6 */ - { EVEX_LEN_TABLE (EVEX_LEN_0F38C6_M_0) }, - }, - { - /* MOD_EVEX_0F38C7 */ - { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_M_0) }, - }, +/* Nothing at present. */ diff --git a/opcodes/i386-dis-evex-prefix.h b/opcodes/i386-dis-evex-prefix.h index a6fdca7b9f9..28da54922c7 100644 --- a/opcodes/i386-dis-evex-prefix.h +++ b/opcodes/i386-dis-evex-prefix.h @@ -42,9 +42,9 @@ /* PREFIX_EVEX_0F7B */ { { Bad_Opcode }, - { "vcvtusi2ss{%LQ|}", { XMScalar, VexScalar, EXxEVexR, Edq }, 0 }, + { "vcvtusi2ssY{%LQ|}", { XMScalar, VexScalar, EXxEVexR, Edq }, 0 }, { VEX_W_TABLE (EVEX_W_0F7B_P_2) }, - { "vcvtusi2sd{%LQ|}", { XMScalar, VexScalar, EXxEVexR64, Edq }, 0 }, + { "vcvtusi2sdY{%LQ|}", { XMScalar, VexScalar, EXxEVexR64, Edq }, 0 }, }, /* PREFIX_EVEX_0F7E */ { @@ -160,13 +160,13 @@ /* PREFIX_EVEX_0F3828 */ { { Bad_Opcode }, - { MOD_TABLE (MOD_EVEX_0F3828_P_1) }, + { "vpmovm2Y%BW", { XM, MaskR }, 0 }, { VEX_W_TABLE (EVEX_W_0F3828_P_2) }, }, /* PREFIX_EVEX_0F3829 */ { { Bad_Opcode }, - { "vpmov%BW2m", { MaskG, EXx }, 0 }, + { "vpmov%BW2mY", { MaskG, Ux }, 0 }, { VEX_W_TABLE (EVEX_W_0F3829_P_2) }, }, /* PREFIX_EVEX_0F382A */ @@ -214,13 +214,13 @@ /* PREFIX_EVEX_0F3838 */ { { Bad_Opcode }, - { MOD_TABLE (MOD_EVEX_0F3838_P_1) }, + { "vpmovm2Y%DQ", { XM, MaskR }, 0 }, { "%XEvpminsb", { XM, Vex, EXx }, 0 }, }, /* PREFIX_EVEX_0F3839 */ { { Bad_Opcode }, - { "vpmov%DQ2m", { MaskG, EXx }, 0 }, + { "vpmov%DQ2mY", { MaskG, Ux }, 0 }, { "%XEvpmins%DQ", { XM, Vex, EXx }, 0 }, }, /* PREFIX_EVEX_0F383A */ @@ -248,7 +248,7 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { "vp2intersect%DQ", { MaskG, Vex, EXx, EXxEVexS }, 0 }, + { "vp2intersectY%DQ", { MaskG, Vex, EXx, EXxEVexS }, 0 }, }, /* PREFIX_EVEX_0F3872 */ { @@ -357,7 +357,7 @@ /* PREFIX_EVEX_MAP5_2A */ { { Bad_Opcode }, - { "vcvtsi2sh{%LQ|}", { XMScalar, VexScalar, EXxEVexR, Edq }, 0 }, + { "vcvtsi2shY{%LQ|}", { XMScalar, VexScalar, EXxEVexR, Edq }, 0 }, }, /* PREFIX_EVEX_MAP5_2C */ { @@ -371,11 +371,11 @@ }, /* PREFIX_EVEX_MAP5_2E */ { - { "vucomis%XH", { XMScalar, EXw, EXxEVexS }, 0 }, + { "vucomisY%XH", { XMScalar, EXw, EXxEVexS }, 0 }, }, /* PREFIX_EVEX_MAP5_2F */ { - { "vcomis%XH", { XMScalar, EXw, EXxEVexS }, 0 }, + { "vcomisY%XH", { XMScalar, EXw, EXxEVexS }, 0 }, }, /* PREFIX_EVEX_MAP5_51 */ { @@ -447,7 +447,7 @@ /* PREFIX_EVEX_MAP5_7B */ { { Bad_Opcode }, - { "vcvtusi2sh{%LQ|}", { XMScalar, VexScalar, EXxEVexR, Edq }, 0 }, + { "vcvtusi2shY{%LQ|}", { XMScalar, VexScalar, EXxEVexR, Edq }, 0 }, { "vcvtp%XH2qq", { XM, EXxmmqdh, EXxEVexR }, 0 }, }, /* PREFIX_EVEX_MAP5_7C */ diff --git a/opcodes/i386-dis-evex-reg.h b/opcodes/i386-dis-evex-reg.h index c0f55c3c0e0..2885063628b 100644 --- a/opcodes/i386-dis-evex-reg.h +++ b/opcodes/i386-dis-evex-reg.h @@ -23,13 +23,13 @@ { Bad_Opcode }, { Bad_Opcode }, { VEX_W_TABLE (EVEX_W_0F73_R_2) }, - { "%XEvpsrldq", { Vex, EXx, Ib }, PREFIX_DATA }, + { "%XEvpsrldqY", { Vex, EXx, Ib }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, { VEX_W_TABLE (EVEX_W_0F73_R_6) }, - { "%XEvpslldq", { Vex, EXx, Ib }, PREFIX_DATA }, + { "%XEvpslldqY", { Vex, EXx, Ib }, PREFIX_DATA }, }, - /* REG_EVEX_0F38C6_M_0_L_2 */ + /* REG_EVEX_0F38C6_L_2 */ { { Bad_Opcode }, { "vgatherpf0dp%XW", { MVexVSIBDWpX }, PREFIX_DATA }, @@ -39,7 +39,7 @@ { "vscatterpf0dp%XW", { MVexVSIBDWpX }, PREFIX_DATA }, { "vscatterpf1dp%XW", { MVexVSIBDWpX }, PREFIX_DATA }, }, - /* REG_EVEX_0F38C7_M_0_L_2_W_0 */ + /* REG_EVEX_0F38C7_L_2 */ { { Bad_Opcode }, { "vgatherpf0qp%XW", { MVexVSIBQWpX }, PREFIX_DATA }, diff --git a/opcodes/i386-dis-evex-w.h b/opcodes/i386-dis-evex-w.h index ba3b1959675..b828277d413 100644 --- a/opcodes/i386-dis-evex-w.h +++ b/opcodes/i386-dis-evex-w.h @@ -156,7 +156,7 @@ }, /* EVEX_W_0FE7 */ { - { "%XEvmovntdq", { EXEvexXNoBcst, XM }, PREFIX_DATA }, + { "%XEvmovntdq", { Mx, XM }, PREFIX_DATA }, }, /* EVEX_W_0FF2 */ { @@ -229,15 +229,15 @@ { "vbroadcastf32x2", { XM, EXq }, PREFIX_DATA }, { "%XEvbroadcastsd", { XM, EXq }, PREFIX_DATA }, }, - /* EVEX_W_0F381A_M_0_L_n */ + /* EVEX_W_0F381A_L_n */ { - { "vbroadcastf32x4", { XM, EXxmm }, PREFIX_DATA }, - { "vbroadcastf64x2", { XM, EXxmm }, PREFIX_DATA }, + { "vbroadcastf32x4", { XM, Mxmm }, PREFIX_DATA }, + { "vbroadcastf64x2", { XM, Mxmm }, PREFIX_DATA }, }, - /* EVEX_W_0F381B_M_0_L_2 */ + /* EVEX_W_0F381B_L_2 */ { - { "vbroadcastf32x8", { XM, EXymm }, PREFIX_DATA }, - { "vbroadcastf64x4", { XM, EXymm }, PREFIX_DATA }, + { "vbroadcastf32x8", { XM, Mymm }, PREFIX_DATA }, + { "vbroadcastf64x4", { XM, Mymm }, PREFIX_DATA }, }, /* EVEX_W_0F381E */ { @@ -289,11 +289,11 @@ /* EVEX_W_0F382A_P_1 */ { { Bad_Opcode }, - { MOD_TABLE (MOD_EVEX_0F382A_P_1_W_1) }, + { "vpbroadcastmb2qY", { XM, MaskR }, 0 }, }, /* EVEX_W_0F382A_P_2 */ { - { "%XEvmovntdqa", { XM, EXEvexXNoBcst }, 0 }, + { "%XEvmovntdqaY", { XM, Mx }, 0 }, }, /* EVEX_W_0F382B */ { @@ -334,22 +334,22 @@ }, /* EVEX_W_0F383A_P_1 */ { - { MOD_TABLE (MOD_EVEX_0F383A_P_1_W_0) }, + { "vpbroadcastmw2dY", { XM, MaskR }, 0 }, }, /* EVEX_W_0F3859 */ { { "vbroadcasti32x2", { XM, EXq }, PREFIX_DATA }, { "%XEvpbroadcastq", { XM, EXq }, PREFIX_DATA }, }, - /* EVEX_W_0F385A_M_0_L_n */ + /* EVEX_W_0F385A_L_n */ { - { "vbroadcasti32x4", { XM, EXxmm }, PREFIX_DATA }, - { "vbroadcasti64x2", { XM, EXxmm }, PREFIX_DATA }, + { "vbroadcasti32x4", { XM, Mxmm }, PREFIX_DATA }, + { "vbroadcasti64x2", { XM, Mxmm }, PREFIX_DATA }, }, - /* EVEX_W_0F385B_M_0_L_2 */ + /* EVEX_W_0F385B_L_2 */ { - { "vbroadcasti32x8", { XM, EXymm }, PREFIX_DATA }, - { "vbroadcasti64x4", { XM, EXymm }, PREFIX_DATA }, + { "vbroadcasti32x8", { XM, Mymm }, PREFIX_DATA }, + { "vbroadcasti64x4", { XM, Mymm }, PREFIX_DATA }, }, /* EVEX_W_0F3870 */ { @@ -363,11 +363,11 @@ }, /* EVEX_W_0F387A */ { - { MOD_TABLE (MOD_EVEX_0F387A_W_0) }, + { "vpbroadcastb", { XM, Rd }, PREFIX_DATA }, }, /* EVEX_W_0F387B */ { - { MOD_TABLE (MOD_EVEX_0F387B_W_0) }, + { "vpbroadcastw", { XM, Rd }, PREFIX_DATA }, }, /* EVEX_W_0F3883 */ { diff --git a/opcodes/i386-dis-evex.h b/opcodes/i386-dis-evex.h index 65935a328c5..e6295119d2b 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_VEX_0F10) }, - { PREFIX_TABLE (PREFIX_VEX_0F11) }, + { PREFIX_TABLE (PREFIX_0F10) }, + { PREFIX_TABLE (PREFIX_0F11) }, { PREFIX_TABLE (PREFIX_VEX_0F12) }, - { MOD_TABLE (MOD_VEX_0F13) }, + { VEX_LEN_TABLE (VEX_LEN_0F13) }, { "%XEvunpcklpX", { XM, Vex, EXx }, PREFIX_OPCODE }, { "%XEvunpckhpX", { XM, Vex, EXx }, PREFIX_OPCODE }, { PREFIX_TABLE (PREFIX_VEX_0F16) }, - { MOD_TABLE (MOD_VEX_0F17) }, + { VEX_LEN_TABLE (VEX_LEN_0F17) }, /* 18 */ { Bad_Opcode }, { Bad_Opcode }, @@ -50,11 +50,11 @@ static const struct dis386 evex_table[][256] = { { "%XEvmovapX", { XM, EXx }, PREFIX_OPCODE }, { "%XEvmovapX", { EXxS, XM }, PREFIX_OPCODE }, { PREFIX_TABLE (PREFIX_VEX_0F2A) }, - { MOD_TABLE (MOD_VEX_0F2B) }, + { "%XEvmovntpX", { Mx, XM }, PREFIX_OPCODE }, { PREFIX_TABLE (PREFIX_VEX_0F2C) }, { PREFIX_TABLE (PREFIX_VEX_0F2D) }, - { PREFIX_TABLE (PREFIX_VEX_0F2E) }, - { PREFIX_TABLE (PREFIX_VEX_0F2F) }, + { PREFIX_TABLE (PREFIX_0F2E) }, + { PREFIX_TABLE (PREFIX_0F2F) }, /* 30 */ { Bad_Opcode }, { Bad_Opcode }, @@ -93,7 +93,7 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, /* 50 */ { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F51) }, + { PREFIX_TABLE (PREFIX_0F51) }, { Bad_Opcode }, { Bad_Opcode }, { "%XEvandpX", { XM, Vex, EXx }, PREFIX_OPCODE }, @@ -101,14 +101,14 @@ static const struct dis386 evex_table[][256] = { { "%XEvorpX", { XM, Vex, EXx }, PREFIX_OPCODE }, { "%XEvxorpX", { XM, Vex, EXx }, PREFIX_OPCODE }, /* 58 */ - { PREFIX_TABLE (PREFIX_VEX_0F58) }, - { PREFIX_TABLE (PREFIX_VEX_0F59) }, - { PREFIX_TABLE (PREFIX_VEX_0F5A) }, + { PREFIX_TABLE (PREFIX_0F58) }, + { PREFIX_TABLE (PREFIX_0F59) }, + { PREFIX_TABLE (PREFIX_0F5A) }, { PREFIX_TABLE (PREFIX_EVEX_0F5B) }, - { PREFIX_TABLE (PREFIX_VEX_0F5C) }, - { PREFIX_TABLE (PREFIX_VEX_0F5D) }, - { PREFIX_TABLE (PREFIX_VEX_0F5E) }, - { PREFIX_TABLE (PREFIX_VEX_0F5F) }, + { PREFIX_TABLE (PREFIX_0F5C) }, + { PREFIX_TABLE (PREFIX_0F5D) }, + { PREFIX_TABLE (PREFIX_0F5E) }, + { PREFIX_TABLE (PREFIX_0F5F) }, /* 60 */ { "%XEvpunpcklbw", { XM, Vex, EXx }, PREFIX_DATA }, { "%XEvpunpcklwd", { XM, Vex, EXx }, PREFIX_DATA }, @@ -223,7 +223,7 @@ static const struct dis386 evex_table[][256] = { { PREFIX_TABLE (PREFIX_EVEX_0FC2) }, { Bad_Opcode }, { VEX_LEN_TABLE (VEX_LEN_0FC4) }, - { VEX_LEN_TABLE (VEX_LEN_0FC5) }, + { "%XEvpextrw", { Gd, Uxmm, Ib }, PREFIX_DATA }, { "%XEvshufpX", { XM, Vex, EXx, Ib }, PREFIX_OPCODE }, { Bad_Opcode }, /* C8 */ @@ -278,7 +278,7 @@ static const struct dis386 evex_table[][256] = { { VEX_W_TABLE (EVEX_W_0FF3) }, { VEX_W_TABLE (EVEX_W_0FF4) }, { "%XEvpmaddwd", { XM, Vex, EXx }, PREFIX_DATA }, - { "%XEvpsadbw", { XM, Vex, EXx }, PREFIX_DATA }, + { "%XEvpsadbwY", { XM, Vex, EXx }, PREFIX_DATA }, { Bad_Opcode }, /* F8 */ { "%XEvpsubb", { XM, Vex, EXx }, PREFIX_DATA }, @@ -322,8 +322,8 @@ static const struct dis386 evex_table[][256] = { /* 18 */ { VEX_W_TABLE (VEX_W_0F3818) }, { EVEX_LEN_TABLE (EVEX_LEN_0F3819) }, - { MOD_TABLE (MOD_EVEX_0F381A) }, - { MOD_TABLE (MOD_EVEX_0F381B) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F381A) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F381B) }, { "%XEvpabsb", { XM, EXx }, PREFIX_DATA }, { "%XEvpabsw", { XM, EXx }, PREFIX_DATA }, { VEX_W_TABLE (EVEX_W_0F381E) }, @@ -394,8 +394,8 @@ static const struct dis386 evex_table[][256] = { /* 58 */ { VEX_W_TABLE (VEX_W_0F3858) }, { VEX_W_TABLE (EVEX_W_0F3859) }, - { MOD_TABLE (MOD_EVEX_0F385A) }, - { MOD_TABLE (MOD_EVEX_0F385B) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F385A) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F385B) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -432,7 +432,7 @@ static const struct dis386 evex_table[][256] = { { VEX_W_TABLE (VEX_W_0F3879) }, { VEX_W_TABLE (EVEX_W_0F387A) }, { VEX_W_TABLE (EVEX_W_0F387B) }, - { MOD_TABLE (MOD_EVEX_0F387C) }, + { "vpbroadcastK", { XM, Rdq }, PREFIX_DATA }, { "vpermt2%BW", { XM, Vex, EXx }, PREFIX_DATA }, { "vpermt2%DQ", { XM, Vex, EXx }, PREFIX_DATA }, { "vpermt2p%XW", { XM, Vex, EXx }, PREFIX_DATA }, @@ -515,8 +515,8 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { "vpconflict%DQ", { XM, EXx }, PREFIX_DATA }, { Bad_Opcode }, - { MOD_TABLE (MOD_EVEX_0F38C6) }, - { MOD_TABLE (MOD_EVEX_0F38C7) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F38C6) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F38C7) }, /* C8 */ { "vexp2p%XW", { XM, EXx, EXxEVexS }, PREFIX_DATA }, { Bad_Opcode }, @@ -540,10 +540,10 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { "%XEvaesenc", { XM, Vex, EXx }, PREFIX_DATA }, - { "%XEvaesenclast", { XM, Vex, EXx }, PREFIX_DATA }, - { "%XEvaesdec", { XM, Vex, EXx }, PREFIX_DATA }, - { "%XEvaesdeclast", { XM, Vex, EXx }, PREFIX_DATA }, + { "%XEvaesencY", { XM, Vex, EXx }, PREFIX_DATA }, + { "%XEvaesenclastY", { XM, Vex, EXx }, PREFIX_DATA }, + { "%XEvaesdecY", { XM, Vex, EXx }, PREFIX_DATA }, + { "%XEvaesdeclastY", { XM, Vex, EXx }, PREFIX_DATA }, /* E0 */ { Bad_Opcode }, { Bad_Opcode }, @@ -660,7 +660,7 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { VEX_W_TABLE (EVEX_W_0F3A42) }, { EVEX_LEN_TABLE (EVEX_LEN_0F3A43) }, - { "%XEvpclmulqdq", { XM, Vex, EXx, PCLMUL }, PREFIX_DATA }, + { "%XEvpclmulqdqY", { XM, Vex, EXx, PCLMUL }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -998,7 +998,7 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { "vmovw", { XMScalar, Edw }, PREFIX_DATA }, + { "vmovwY", { XMScalar, Edw }, PREFIX_DATA }, { Bad_Opcode }, /* 70 */ { Bad_Opcode }, diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index 15a0e1b1080..87ecf0f5e23 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -74,8 +74,7 @@ static bool OP_EM (instr_info *, int, int); static bool OP_EX (instr_info *, int, int); static bool OP_EMC (instr_info *, int,int); static bool OP_MXC (instr_info *, int,int); -static bool OP_MS (instr_info *, int, int); -static bool OP_XS (instr_info *, int, int); +static bool OP_R (instr_info *, int, int); static bool OP_M (instr_info *, int, int); static bool OP_VEX (instr_info *, int, int); static bool OP_VexR (instr_info *, int, int); @@ -146,7 +145,7 @@ struct instr_info uint8_t rex_used; bool need_modrm; - bool need_vex; + unsigned char need_vex; bool has_sib; /* Flags for ins->prefixes which we somehow handled when printing the @@ -219,6 +218,9 @@ struct instr_info bool two_source_ops; + /* Record whether EVEX masking is used incorrectly. */ + bool illegal_masking; + unsigned char op_ad; signed char op_index[MAX_OPERANDS]; bool op_riprel[MAX_OPERANDS]; @@ -410,6 +412,7 @@ fetch_error (const instr_info *ins) #define Mw { OP_M, w_mode } #define Mx { OP_M, x_mode } #define Mxmm { OP_M, xmm_mode } +#define Mymm { OP_M, ymm_mode } #define Gb { OP_G, b_mode } #define Gbnd { OP_G, bnd_mode } #define Gv { OP_G, v_mode } @@ -513,7 +516,6 @@ fetch_error (const instr_info *ins) #define EXxS { OP_EX, x_swap_mode } #define EXxmm { OP_EX, xmm_mode } #define EXymm { OP_EX, ymm_mode } -#define EXtmm { OP_EX, tmm_mode } #define EXxmmq { OP_EX, xmmq_mode } #define EXxmmqh { OP_EX, evex_half_bcst_xmmqh_mode } #define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode } @@ -523,8 +525,14 @@ fetch_error (const instr_info *ins) #define EXymmq { OP_EX, ymmq_mode } #define EXEvexXGscat { OP_EX, evex_x_gscat_mode } #define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode } -#define MS { OP_MS, v_mode } -#define XS { OP_XS, v_mode } +#define Rd { OP_R, d_mode } +#define Rdq { OP_R, dq_mode } +#define Nq { OP_R, q_mode } +#define Ux { OP_R, x_mode } +#define Uxmm { OP_R, xmm_mode } +#define Rxmmq { OP_R, xmmq_mode } +#define Rymm { OP_R, ymm_mode } +#define Rtmm { OP_R, tmm_mode } #define EMCq { OP_EMC, q_mode } #define MXC { OP_MXC, 0 } #define OPSUF { OP_3DNowSuffix, 0 } @@ -554,6 +562,7 @@ fetch_error (const instr_info *ins) #define MaskG { OP_G, mask_mode } #define MaskE { OP_E, mask_mode } +#define MaskR { OP_R, mask_mode } #define MaskBDE { OP_E, mask_bd_mode } #define MaskVex { OP_VEX, mask_mode } @@ -782,20 +791,18 @@ enum #define FLOAT NULL, { { NULL, FLOATCODE } }, 0 #define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0 -#define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P #define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I)) #define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I)) #define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I)) #define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I)) #define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I)) #define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I)) -#define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P) -#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I)) -#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I)) -#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I)) +#define XOP_8F_TABLE() DIS386 (USE_XOP_8F_TABLE, 0) +#define VEX_C4_TABLE() DIS386 (USE_VEX_C4_TABLE, 0) +#define VEX_C5_TABLE() DIS386 (USE_VEX_C5_TABLE, 0) #define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I)) #define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I)) -#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I)) +#define EVEX_TABLE() DIS386 (USE_EVEX_TABLE, 0) #define EVEX_LEN_TABLE(I) DIS386 (USE_EVEX_LEN_TABLE, (I)) enum @@ -823,58 +830,47 @@ enum REG_0F1C_P_0_MOD_0, REG_0F1E_P_1_MOD_3, REG_0F38D8_PREFIX_1, - REG_0F3A0F_PREFIX_1_MOD_3, - REG_0F71_MOD_0, - REG_0F72_MOD_0, - REG_0F73_MOD_0, + REG_0F3A0F_P_1, + REG_0F71, + REG_0F72, + REG_0F73, REG_0FA6, REG_0FA7, REG_0FAE, REG_0FBA, REG_0FC7, - REG_VEX_0F71_M_0, - REG_VEX_0F72_M_0, - REG_VEX_0F73_M_0, + REG_VEX_0F71, + REG_VEX_0F72, + REG_VEX_0F73, REG_VEX_0FAE, REG_VEX_0F3849_X86_64_L_0_W_0_M_1_P_0, REG_VEX_0F38F3_L_0, REG_XOP_09_01_L_0, REG_XOP_09_02_L_0, - REG_XOP_09_12_M_1_L_0, + REG_XOP_09_12_L_0, REG_XOP_0A_12_L_0, REG_EVEX_0F71, REG_EVEX_0F72, REG_EVEX_0F73, - REG_EVEX_0F38C6_M_0_L_2, - REG_EVEX_0F38C7_M_0_L_2 + REG_EVEX_0F38C6_L_2, + REG_EVEX_0F38C7_L_2 }; enum { MOD_62_32BIT = 0, - MOD_8D, MOD_C4_32BIT, MOD_C5_32BIT, - MOD_C6_REG_7, - MOD_C7_REG_7, - MOD_FF_REG_3, - MOD_FF_REG_5, MOD_0F01_REG_0, MOD_0F01_REG_1, MOD_0F01_REG_2, MOD_0F01_REG_3, MOD_0F01_REG_5, MOD_0F01_REG_7, - MOD_0F02, - MOD_0F03, MOD_0F12_PREFIX_0, - MOD_0F12_PREFIX_2, - MOD_0F13, MOD_0F16_PREFIX_0, - MOD_0F16_PREFIX_2, - MOD_0F17, MOD_0F18_REG_0, MOD_0F18_REG_1, MOD_0F18_REG_2, @@ -886,14 +882,6 @@ enum MOD_0F1B_PREFIX_1, MOD_0F1C_PREFIX_0, MOD_0F1E_PREFIX_1, - MOD_0F2B_PREFIX_0, - MOD_0F2B_PREFIX_1, - MOD_0F2B_PREFIX_2, - MOD_0F2B_PREFIX_3, - MOD_0F50, - MOD_0F71, - MOD_0F72, - MOD_0F73, MOD_0FAE_REG_0, MOD_0FAE_REG_1, MOD_0FAE_REG_2, @@ -902,96 +890,11 @@ enum MOD_0FAE_REG_5, MOD_0FAE_REG_6, MOD_0FAE_REG_7, - MOD_0FB2, - MOD_0FB4, - MOD_0FB5, - MOD_0FC3, - MOD_0FC7_REG_3, - MOD_0FC7_REG_4, - MOD_0FC7_REG_5, MOD_0FC7_REG_6, MOD_0FC7_REG_7, - MOD_0FD7, - MOD_0FE7_PREFIX_2, - MOD_0FF0_PREFIX_3, - MOD_0F382A, MOD_0F38DC_PREFIX_1, - MOD_0F38DD_PREFIX_1, - MOD_0F38DE_PREFIX_1, - MOD_0F38DF_PREFIX_1, - MOD_0F38F5, - MOD_0F38F6_PREFIX_0, - MOD_0F38F8_PREFIX_1, - MOD_0F38F8_PREFIX_2, - MOD_0F38F8_PREFIX_3, - MOD_0F38F9, - MOD_0F38FA_PREFIX_1, - MOD_0F38FB_PREFIX_1, - MOD_0F3A0F_PREFIX_1, - MOD_VEX_0F12_PREFIX_0, - MOD_VEX_0F12_PREFIX_2, - MOD_VEX_0F13, - MOD_VEX_0F16_PREFIX_0, - MOD_VEX_0F16_PREFIX_2, - MOD_VEX_0F17, - MOD_VEX_0F2B, - MOD_VEX_0F41_L_1, - MOD_VEX_0F42_L_1, - MOD_VEX_0F44_L_0, - MOD_VEX_0F45_L_1, - MOD_VEX_0F46_L_1, - MOD_VEX_0F47_L_1, - MOD_VEX_0F4A_L_1, - MOD_VEX_0F4B_L_1, - MOD_VEX_0F50, - MOD_VEX_0F71, - MOD_VEX_0F72, - MOD_VEX_0F73, - MOD_VEX_0F91_L_0, - MOD_VEX_0F92_L_0, - MOD_VEX_0F93_L_0, - MOD_VEX_0F98_L_0, - MOD_VEX_0F99_L_0, - MOD_VEX_0FAE_REG_2, - MOD_VEX_0FAE_REG_3, - MOD_VEX_0FD7, - MOD_VEX_0FE7, - MOD_VEX_0FF0_PREFIX_3, - MOD_VEX_0F381A, - MOD_VEX_0F382A, - MOD_VEX_0F382C, - MOD_VEX_0F382D, - MOD_VEX_0F382E, - MOD_VEX_0F382F, MOD_VEX_0F3849_X86_64_L_0_W_0, - MOD_VEX_0F384B_X86_64_L_0_W_0, - MOD_VEX_0F385A, - MOD_VEX_0F385C_X86_64, - MOD_VEX_0F385E_X86_64, - MOD_VEX_0F386C_X86_64, - MOD_VEX_0F388C, - MOD_VEX_0F388E, - MOD_VEX_0F3A30_L_0, - MOD_VEX_0F3A31_L_0, - MOD_VEX_0F3A32_L_0, - MOD_VEX_0F3A33_L_0, - - MOD_XOP_09_12, - - MOD_EVEX_0F381A, - MOD_EVEX_0F381B, - MOD_EVEX_0F3828_P_1, - MOD_EVEX_0F382A_P_1_W_1, - MOD_EVEX_0F3838_P_1, - MOD_EVEX_0F383A_P_1_W_0, - MOD_EVEX_0F385A, - MOD_EVEX_0F385B, - MOD_EVEX_0F387A_W_0, - MOD_EVEX_0F387B_W_0, - MOD_EVEX_0F387C, - MOD_EVEX_0F38C6, - MOD_EVEX_0F38C7, }; enum @@ -1007,7 +910,7 @@ enum RM_0F1E_P_1_MOD_3_REG_7, RM_0FAE_REG_6_MOD_3_P_0, RM_0FAE_REG_7_MOD_3, - RM_0F3A0F_P_1_MOD_3_REG_0, + RM_0F3A0F_P_1_R_0, RM_VEX_0F3849_X86_64_L_0_W_0_M_1_P_0_R_0, RM_VEX_0F3849_X86_64_L_0_W_0_M_1_P_3, @@ -1018,6 +921,7 @@ enum PREFIX_90 = 0, PREFIX_0F00_REG_6_X86_64, PREFIX_0F01_REG_0_MOD_3_RM_6, + PREFIX_0F01_REG_0_MOD_3_RM_7, PREFIX_0F01_REG_1_RM_2, PREFIX_0F01_REG_1_RM_4, PREFIX_0F01_REG_1_RM_5, @@ -1111,75 +1015,60 @@ enum PREFIX_0F38FB, PREFIX_0F38FC, PREFIX_0F3A0F, - PREFIX_VEX_0F10, - PREFIX_VEX_0F11, PREFIX_VEX_0F12, PREFIX_VEX_0F16, PREFIX_VEX_0F2A, PREFIX_VEX_0F2C, PREFIX_VEX_0F2D, - PREFIX_VEX_0F2E, - PREFIX_VEX_0F2F, - PREFIX_VEX_0F41_L_1_M_1_W_0, - PREFIX_VEX_0F41_L_1_M_1_W_1, - PREFIX_VEX_0F42_L_1_M_1_W_0, - PREFIX_VEX_0F42_L_1_M_1_W_1, - PREFIX_VEX_0F44_L_0_M_1_W_0, - PREFIX_VEX_0F44_L_0_M_1_W_1, - PREFIX_VEX_0F45_L_1_M_1_W_0, - PREFIX_VEX_0F45_L_1_M_1_W_1, - PREFIX_VEX_0F46_L_1_M_1_W_0, - PREFIX_VEX_0F46_L_1_M_1_W_1, - PREFIX_VEX_0F47_L_1_M_1_W_0, - PREFIX_VEX_0F47_L_1_M_1_W_1, - PREFIX_VEX_0F4A_L_1_M_1_W_0, - PREFIX_VEX_0F4A_L_1_M_1_W_1, - PREFIX_VEX_0F4B_L_1_M_1_W_0, - PREFIX_VEX_0F4B_L_1_M_1_W_1, - PREFIX_VEX_0F51, - PREFIX_VEX_0F52, - PREFIX_VEX_0F53, - PREFIX_VEX_0F58, - PREFIX_VEX_0F59, - PREFIX_VEX_0F5A, - PREFIX_VEX_0F5B, - PREFIX_VEX_0F5C, - PREFIX_VEX_0F5D, - PREFIX_VEX_0F5E, - PREFIX_VEX_0F5F, + PREFIX_VEX_0F41_L_1_W_0, + PREFIX_VEX_0F41_L_1_W_1, + PREFIX_VEX_0F42_L_1_W_0, + PREFIX_VEX_0F42_L_1_W_1, + PREFIX_VEX_0F44_L_0_W_0, + PREFIX_VEX_0F44_L_0_W_1, + PREFIX_VEX_0F45_L_1_W_0, + PREFIX_VEX_0F45_L_1_W_1, + PREFIX_VEX_0F46_L_1_W_0, + PREFIX_VEX_0F46_L_1_W_1, + PREFIX_VEX_0F47_L_1_W_0, + PREFIX_VEX_0F47_L_1_W_1, + PREFIX_VEX_0F4A_L_1_W_0, + PREFIX_VEX_0F4A_L_1_W_1, + PREFIX_VEX_0F4B_L_1_W_0, + PREFIX_VEX_0F4B_L_1_W_1, PREFIX_VEX_0F6F, PREFIX_VEX_0F70, - PREFIX_VEX_0F7C, - PREFIX_VEX_0F7D, PREFIX_VEX_0F7E, PREFIX_VEX_0F7F, PREFIX_VEX_0F90_L_0_W_0, PREFIX_VEX_0F90_L_0_W_1, - PREFIX_VEX_0F91_L_0_M_0_W_0, - PREFIX_VEX_0F91_L_0_M_0_W_1, - PREFIX_VEX_0F92_L_0_M_1_W_0, - PREFIX_VEX_0F92_L_0_M_1_W_1, - PREFIX_VEX_0F93_L_0_M_1_W_0, - PREFIX_VEX_0F93_L_0_M_1_W_1, - PREFIX_VEX_0F98_L_0_M_1_W_0, - PREFIX_VEX_0F98_L_0_M_1_W_1, - PREFIX_VEX_0F99_L_0_M_1_W_0, - PREFIX_VEX_0F99_L_0_M_1_W_1, - PREFIX_VEX_0FC2, - PREFIX_VEX_0FD0, - PREFIX_VEX_0FE6, - PREFIX_VEX_0FF0, + PREFIX_VEX_0F91_L_0_W_0, + PREFIX_VEX_0F91_L_0_W_1, + PREFIX_VEX_0F92_L_0_W_0, + PREFIX_VEX_0F92_L_0_W_1, + PREFIX_VEX_0F93_L_0_W_0, + PREFIX_VEX_0F93_L_0_W_1, + PREFIX_VEX_0F98_L_0_W_0, + PREFIX_VEX_0F98_L_0_W_1, + PREFIX_VEX_0F99_L_0_W_0, + PREFIX_VEX_0F99_L_0_W_1, PREFIX_VEX_0F3849_X86_64_L_0_W_0_M_0, PREFIX_VEX_0F3849_X86_64_L_0_W_0_M_1, - PREFIX_VEX_0F384B_X86_64_L_0_W_0_M_0, + PREFIX_VEX_0F384B_X86_64_L_0_W_0, PREFIX_VEX_0F3850_W_0, PREFIX_VEX_0F3851_W_0, - PREFIX_VEX_0F385C_X86_64_M_1_L_0_W_0, - PREFIX_VEX_0F385E_X86_64_M_1_L_0_W_0, - PREFIX_VEX_0F386C_X86_64_M_1_L_0_W_0, + PREFIX_VEX_0F385C_X86_64_L_0_W_0, + PREFIX_VEX_0F385E_X86_64_L_0_W_0, + PREFIX_VEX_0F386C_X86_64_L_0_W_0, PREFIX_VEX_0F3872, PREFIX_VEX_0F38B0_W_0, PREFIX_VEX_0F38B1_W_0, + PREFIX_VEX_0F38D2_W_0, + PREFIX_VEX_0F38D3_W_0, + PREFIX_VEX_0F38CB, + PREFIX_VEX_0F38CC, + PREFIX_VEX_0F38CD, + PREFIX_VEX_0F38DA_W_0, PREFIX_VEX_0F38F5_L_0, PREFIX_VEX_0F38F6_L_0, PREFIX_VEX_0F38F7_L_0, @@ -1307,6 +1196,7 @@ enum X86_64_0F01_REG_0, X86_64_0F01_REG_0_MOD_3_RM_6_P_1, X86_64_0F01_REG_0_MOD_3_RM_6_P_3, + X86_64_0F01_REG_0_MOD_3_RM_7_P_0, X86_64_0F01_REG_1, X86_64_0F01_REG_1_RM_2_PREFIX_1, X86_64_0F01_REG_1_RM_2_PREFIX_3, @@ -1383,14 +1273,12 @@ enum enum { - VEX_LEN_0F12_P_0_M_0 = 0, - VEX_LEN_0F12_P_0_M_1, -#define VEX_LEN_0F12_P_2_M_0 VEX_LEN_0F12_P_0_M_0 - VEX_LEN_0F13_M_0, - VEX_LEN_0F16_P_0_M_0, - VEX_LEN_0F16_P_0_M_1, -#define VEX_LEN_0F16_P_2_M_0 VEX_LEN_0F16_P_0_M_0 - VEX_LEN_0F17_M_0, + VEX_LEN_0F12_P_0 = 0, + VEX_LEN_0F12_P_2, + VEX_LEN_0F13, + VEX_LEN_0F16_P_0, + VEX_LEN_0F16_P_2, + VEX_LEN_0F17, VEX_LEN_0F41, VEX_LEN_0F42, VEX_LEN_0F44, @@ -1409,23 +1297,26 @@ enum VEX_LEN_0F93, VEX_LEN_0F98, VEX_LEN_0F99, - VEX_LEN_0FAE_R_2_M_0, - VEX_LEN_0FAE_R_3_M_0, + VEX_LEN_0FAE_R_2, + VEX_LEN_0FAE_R_3, VEX_LEN_0FC4, - VEX_LEN_0FC5, VEX_LEN_0FD6, - VEX_LEN_0FF7, VEX_LEN_0F3816, VEX_LEN_0F3819, - VEX_LEN_0F381A_M_0, + VEX_LEN_0F381A, VEX_LEN_0F3836, VEX_LEN_0F3841, VEX_LEN_0F3849_X86_64, VEX_LEN_0F384B_X86_64, - VEX_LEN_0F385A_M_0, - VEX_LEN_0F385C_X86_64_M_1, - VEX_LEN_0F385E_X86_64_M_1, - VEX_LEN_0F386C_X86_64_M_1, + VEX_LEN_0F385A, + VEX_LEN_0F385C_X86_64, + VEX_LEN_0F385E_X86_64, + VEX_LEN_0F386C_X86_64, + VEX_LEN_0F38CB_P_3_W_0, + VEX_LEN_0F38CC_P_3_W_0, + VEX_LEN_0F38CD_P_3_W_0, + VEX_LEN_0F38DA_W_0_P_0, + VEX_LEN_0F38DA_W_0_P_2, VEX_LEN_0F38DB, VEX_LEN_0F38F2, VEX_LEN_0F38F3, @@ -1456,79 +1347,80 @@ enum VEX_LEN_0F3A61, VEX_LEN_0F3A62, VEX_LEN_0F3A63, + VEX_LEN_0F3ADE_W_0, VEX_LEN_0F3ADF, VEX_LEN_0F3AF0, - VEX_LEN_0FXOP_08_85, - VEX_LEN_0FXOP_08_86, - VEX_LEN_0FXOP_08_87, - VEX_LEN_0FXOP_08_8E, - VEX_LEN_0FXOP_08_8F, - VEX_LEN_0FXOP_08_95, - VEX_LEN_0FXOP_08_96, - VEX_LEN_0FXOP_08_97, - VEX_LEN_0FXOP_08_9E, - VEX_LEN_0FXOP_08_9F, - VEX_LEN_0FXOP_08_A3, - VEX_LEN_0FXOP_08_A6, - VEX_LEN_0FXOP_08_B6, - VEX_LEN_0FXOP_08_C0, - VEX_LEN_0FXOP_08_C1, - VEX_LEN_0FXOP_08_C2, - VEX_LEN_0FXOP_08_C3, - VEX_LEN_0FXOP_08_CC, - VEX_LEN_0FXOP_08_CD, - VEX_LEN_0FXOP_08_CE, - VEX_LEN_0FXOP_08_CF, - VEX_LEN_0FXOP_08_EC, - VEX_LEN_0FXOP_08_ED, - VEX_LEN_0FXOP_08_EE, - VEX_LEN_0FXOP_08_EF, - VEX_LEN_0FXOP_09_01, - VEX_LEN_0FXOP_09_02, - VEX_LEN_0FXOP_09_12_M_1, - VEX_LEN_0FXOP_09_82_W_0, - VEX_LEN_0FXOP_09_83_W_0, - VEX_LEN_0FXOP_09_90, - VEX_LEN_0FXOP_09_91, - VEX_LEN_0FXOP_09_92, - VEX_LEN_0FXOP_09_93, - VEX_LEN_0FXOP_09_94, - VEX_LEN_0FXOP_09_95, - VEX_LEN_0FXOP_09_96, - VEX_LEN_0FXOP_09_97, - VEX_LEN_0FXOP_09_98, - VEX_LEN_0FXOP_09_99, - VEX_LEN_0FXOP_09_9A, - VEX_LEN_0FXOP_09_9B, - VEX_LEN_0FXOP_09_C1, - VEX_LEN_0FXOP_09_C2, - VEX_LEN_0FXOP_09_C3, - VEX_LEN_0FXOP_09_C6, - VEX_LEN_0FXOP_09_C7, - VEX_LEN_0FXOP_09_CB, - VEX_LEN_0FXOP_09_D1, - VEX_LEN_0FXOP_09_D2, - VEX_LEN_0FXOP_09_D3, - VEX_LEN_0FXOP_09_D6, - VEX_LEN_0FXOP_09_D7, - VEX_LEN_0FXOP_09_DB, - VEX_LEN_0FXOP_09_E1, - VEX_LEN_0FXOP_09_E2, - VEX_LEN_0FXOP_09_E3, - VEX_LEN_0FXOP_0A_12, + VEX_LEN_XOP_08_85, + VEX_LEN_XOP_08_86, + VEX_LEN_XOP_08_87, + VEX_LEN_XOP_08_8E, + VEX_LEN_XOP_08_8F, + VEX_LEN_XOP_08_95, + VEX_LEN_XOP_08_96, + VEX_LEN_XOP_08_97, + VEX_LEN_XOP_08_9E, + VEX_LEN_XOP_08_9F, + VEX_LEN_XOP_08_A3, + VEX_LEN_XOP_08_A6, + VEX_LEN_XOP_08_B6, + VEX_LEN_XOP_08_C0, + VEX_LEN_XOP_08_C1, + VEX_LEN_XOP_08_C2, + VEX_LEN_XOP_08_C3, + VEX_LEN_XOP_08_CC, + VEX_LEN_XOP_08_CD, + VEX_LEN_XOP_08_CE, + VEX_LEN_XOP_08_CF, + VEX_LEN_XOP_08_EC, + VEX_LEN_XOP_08_ED, + VEX_LEN_XOP_08_EE, + VEX_LEN_XOP_08_EF, + VEX_LEN_XOP_09_01, + VEX_LEN_XOP_09_02, + VEX_LEN_XOP_09_12, + VEX_LEN_XOP_09_82_W_0, + VEX_LEN_XOP_09_83_W_0, + VEX_LEN_XOP_09_90, + VEX_LEN_XOP_09_91, + VEX_LEN_XOP_09_92, + VEX_LEN_XOP_09_93, + VEX_LEN_XOP_09_94, + VEX_LEN_XOP_09_95, + VEX_LEN_XOP_09_96, + VEX_LEN_XOP_09_97, + VEX_LEN_XOP_09_98, + VEX_LEN_XOP_09_99, + VEX_LEN_XOP_09_9A, + VEX_LEN_XOP_09_9B, + VEX_LEN_XOP_09_C1, + VEX_LEN_XOP_09_C2, + VEX_LEN_XOP_09_C3, + VEX_LEN_XOP_09_C6, + VEX_LEN_XOP_09_C7, + VEX_LEN_XOP_09_CB, + VEX_LEN_XOP_09_D1, + VEX_LEN_XOP_09_D2, + VEX_LEN_XOP_09_D3, + VEX_LEN_XOP_09_D6, + VEX_LEN_XOP_09_D7, + VEX_LEN_XOP_09_DB, + VEX_LEN_XOP_09_E1, + VEX_LEN_XOP_09_E2, + VEX_LEN_XOP_09_E3, + VEX_LEN_XOP_0A_12, }; enum { EVEX_LEN_0F3816 = 0, EVEX_LEN_0F3819, - EVEX_LEN_0F381A_M_0, - EVEX_LEN_0F381B_M_0, + EVEX_LEN_0F381A, + EVEX_LEN_0F381B, EVEX_LEN_0F3836, - EVEX_LEN_0F385A_M_0, - EVEX_LEN_0F385B_M_0, - EVEX_LEN_0F38C6_M_0, - EVEX_LEN_0F38C7_M_0, + EVEX_LEN_0F385A, + EVEX_LEN_0F385B, + EVEX_LEN_0F38C6, + EVEX_LEN_0F38C7, EVEX_LEN_0F3A00, EVEX_LEN_0F3A01, EVEX_LEN_0F3A18, @@ -1545,20 +1437,20 @@ enum enum { - VEX_W_0F41_L_1_M_1 = 0, - VEX_W_0F42_L_1_M_1, - VEX_W_0F44_L_0_M_1, - VEX_W_0F45_L_1_M_1, - VEX_W_0F46_L_1_M_1, - VEX_W_0F47_L_1_M_1, - VEX_W_0F4A_L_1_M_1, - VEX_W_0F4B_L_1_M_1, + VEX_W_0F41_L_1 = 0, + VEX_W_0F42_L_1, + VEX_W_0F44_L_0, + VEX_W_0F45_L_1, + VEX_W_0F46_L_1, + VEX_W_0F47_L_1, + VEX_W_0F4A_L_1, + VEX_W_0F4B_L_1, VEX_W_0F90_L_0, - VEX_W_0F91_L_0_M_0, - VEX_W_0F92_L_0_M_1, - VEX_W_0F93_L_0_M_1, - VEX_W_0F98_L_0_M_1, - VEX_W_0F99_L_0_M_1, + VEX_W_0F91_L_0, + VEX_W_0F92_L_0, + VEX_W_0F93_L_0, + VEX_W_0F98_L_0, + VEX_W_0F99_L_0, VEX_W_0F380C, VEX_W_0F380D, VEX_W_0F380E, @@ -1567,11 +1459,11 @@ enum VEX_W_0F3816_L_1, VEX_W_0F3818, VEX_W_0F3819_L_1, - VEX_W_0F381A_M_0_L_1, - VEX_W_0F382C_M_0, - VEX_W_0F382D_M_0, - VEX_W_0F382E_M_0, - VEX_W_0F382F_M_0, + VEX_W_0F381A_L_1, + VEX_W_0F382C, + VEX_W_0F382D, + VEX_W_0F382E, + VEX_W_0F382F, VEX_W_0F3836, VEX_W_0F3846, VEX_W_0F3849_X86_64_L_0, @@ -1582,10 +1474,10 @@ enum VEX_W_0F3853, VEX_W_0F3858, VEX_W_0F3859, - VEX_W_0F385A_M_0_L_0, - VEX_W_0F385C_X86_64_M_1_L_0, - VEX_W_0F385E_X86_64_M_1_L_0, - VEX_W_0F386C_X86_64_M_1_L_0, + VEX_W_0F385A_L_0, + VEX_W_0F385C_X86_64_L_0, + VEX_W_0F385E_X86_64_L_0, + VEX_W_0F386C_X86_64_L_0, VEX_W_0F3872_P_1, VEX_W_0F3878, VEX_W_0F3879, @@ -1593,7 +1485,13 @@ enum VEX_W_0F38B1, VEX_W_0F38B4, VEX_W_0F38B5, + VEX_W_0F38CB_P_3, + VEX_W_0F38CC_P_3, + VEX_W_0F38CD_P_3, VEX_W_0F38CF, + VEX_W_0F38D2, + VEX_W_0F38D3, + VEX_W_0F38DA, VEX_W_0F3A00_L_1, VEX_W_0F3A01_L_1, VEX_W_0F3A02, @@ -1611,51 +1509,52 @@ enum VEX_W_0F3A4C, VEX_W_0F3ACE, VEX_W_0F3ACF, + VEX_W_0F3ADE, - VEX_W_0FXOP_08_85_L_0, - VEX_W_0FXOP_08_86_L_0, - VEX_W_0FXOP_08_87_L_0, - VEX_W_0FXOP_08_8E_L_0, - VEX_W_0FXOP_08_8F_L_0, - VEX_W_0FXOP_08_95_L_0, - VEX_W_0FXOP_08_96_L_0, - VEX_W_0FXOP_08_97_L_0, - VEX_W_0FXOP_08_9E_L_0, - VEX_W_0FXOP_08_9F_L_0, - VEX_W_0FXOP_08_A6_L_0, - VEX_W_0FXOP_08_B6_L_0, - VEX_W_0FXOP_08_C0_L_0, - VEX_W_0FXOP_08_C1_L_0, - VEX_W_0FXOP_08_C2_L_0, - VEX_W_0FXOP_08_C3_L_0, - VEX_W_0FXOP_08_CC_L_0, - VEX_W_0FXOP_08_CD_L_0, - VEX_W_0FXOP_08_CE_L_0, - VEX_W_0FXOP_08_CF_L_0, - VEX_W_0FXOP_08_EC_L_0, - VEX_W_0FXOP_08_ED_L_0, - VEX_W_0FXOP_08_EE_L_0, - VEX_W_0FXOP_08_EF_L_0, + VEX_W_XOP_08_85_L_0, + VEX_W_XOP_08_86_L_0, + VEX_W_XOP_08_87_L_0, + VEX_W_XOP_08_8E_L_0, + VEX_W_XOP_08_8F_L_0, + VEX_W_XOP_08_95_L_0, + VEX_W_XOP_08_96_L_0, + VEX_W_XOP_08_97_L_0, + VEX_W_XOP_08_9E_L_0, + VEX_W_XOP_08_9F_L_0, + VEX_W_XOP_08_A6_L_0, + VEX_W_XOP_08_B6_L_0, + VEX_W_XOP_08_C0_L_0, + VEX_W_XOP_08_C1_L_0, + VEX_W_XOP_08_C2_L_0, + VEX_W_XOP_08_C3_L_0, + VEX_W_XOP_08_CC_L_0, + VEX_W_XOP_08_CD_L_0, + VEX_W_XOP_08_CE_L_0, + VEX_W_XOP_08_CF_L_0, + VEX_W_XOP_08_EC_L_0, + VEX_W_XOP_08_ED_L_0, + VEX_W_XOP_08_EE_L_0, + VEX_W_XOP_08_EF_L_0, - VEX_W_0FXOP_09_80, - VEX_W_0FXOP_09_81, - VEX_W_0FXOP_09_82, - VEX_W_0FXOP_09_83, - VEX_W_0FXOP_09_C1_L_0, - VEX_W_0FXOP_09_C2_L_0, - VEX_W_0FXOP_09_C3_L_0, - VEX_W_0FXOP_09_C6_L_0, - VEX_W_0FXOP_09_C7_L_0, - VEX_W_0FXOP_09_CB_L_0, - VEX_W_0FXOP_09_D1_L_0, - VEX_W_0FXOP_09_D2_L_0, - VEX_W_0FXOP_09_D3_L_0, - VEX_W_0FXOP_09_D6_L_0, - VEX_W_0FXOP_09_D7_L_0, - VEX_W_0FXOP_09_DB_L_0, - VEX_W_0FXOP_09_E1_L_0, - VEX_W_0FXOP_09_E2_L_0, - VEX_W_0FXOP_09_E3_L_0, + VEX_W_XOP_09_80, + VEX_W_XOP_09_81, + VEX_W_XOP_09_82, + VEX_W_XOP_09_83, + VEX_W_XOP_09_C1_L_0, + VEX_W_XOP_09_C2_L_0, + VEX_W_XOP_09_C3_L_0, + VEX_W_XOP_09_C6_L_0, + VEX_W_XOP_09_C7_L_0, + VEX_W_XOP_09_CB_L_0, + VEX_W_XOP_09_D1_L_0, + VEX_W_XOP_09_D2_L_0, + VEX_W_XOP_09_D3_L_0, + VEX_W_XOP_09_D6_L_0, + VEX_W_XOP_09_D7_L_0, + VEX_W_XOP_09_DB_L_0, + VEX_W_XOP_09_E1_L_0, + VEX_W_XOP_09_E2_L_0, + VEX_W_XOP_09_E3_L_0, EVEX_W_0F5B_P_0, EVEX_W_0F62, @@ -1708,8 +1607,8 @@ enum EVEX_W_0F3814_P_1, EVEX_W_0F3815_P_1, EVEX_W_0F3819_L_n, - EVEX_W_0F381A_M_0_L_n, - EVEX_W_0F381B_M_0_L_2, + EVEX_W_0F381A_L_n, + EVEX_W_0F381B_L_2, EVEX_W_0F381E, EVEX_W_0F381F, EVEX_W_0F3820_P_1, @@ -1734,8 +1633,8 @@ enum EVEX_W_0F3837, EVEX_W_0F383A_P_1, EVEX_W_0F3859, - EVEX_W_0F385A_M_0_L_n, - EVEX_W_0F385B_M_0_L_2, + EVEX_W_0F385A_L_n, + EVEX_W_0F385B_L_2, EVEX_W_0F3870, EVEX_W_0F3872_P_2, EVEX_W_0F387A, @@ -1800,10 +1699,10 @@ struct dis386 { 'T' => print 'w', 'l'/'d', or 'q' if instruction has an operand size prefix or if suffix_always is true. 'U' unused. - 'V' unused. + 'V' => print 'v' for VEX/EVEX and nothing for legacy encodings. 'W' => print 'b', 'w' or 'l' ('d' in Intel mode) 'X' => print 's', 'd' depending on data16 prefix (for XMM) - 'Y' unused. + 'Y' => no output, mark EVEX.aaa != 0 as bad. 'Z' => print 'q' in 64bit mode and 'l' otherwise, if suffix_always is true. '!' => change condition from true to false or from false to true. '%' => add 1 upper case letter to the macro. @@ -1825,6 +1724,8 @@ struct dis386 { "XV" => print "{vex} " pseudo prefix "XE" => print "{evex} " pseudo prefix if no EVEX-specific functionality is is used by an EVEX-encoded (AVX512VL) instruction. + "YK" keep unused, to avoid ambiguity with the combined use of Y and K. + "YX" keep unused, to avoid ambiguity with the combined use of Y and X. "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 is true. @@ -2003,7 +1904,7 @@ static const struct dis386 dis386[] = { { "movB", { Gb, EbS }, 0 }, { "movS", { Gv, EvS }, 0 }, { "movD", { Sv, Sw }, 0 }, - { MOD_TABLE (MOD_8D) }, + { "leaS", { Gv, M }, 0 }, { "movD", { Sw, Sv }, 0 }, { REG_TABLE (REG_8F) }, /* 90 */ @@ -2138,8 +2039,8 @@ static const struct dis386 dis386_twobyte[] = { /* 00 */ { REG_TABLE (REG_0F00 ) }, { REG_TABLE (REG_0F01 ) }, - { MOD_TABLE (MOD_0F02) }, - { MOD_TABLE (MOD_0F03) }, + { "larS", { Gv, Sv }, 0 }, + { "lslS", { Gv, Sv }, 0 }, { Bad_Opcode }, { "syscall", { XX }, 0 }, { "clts", { XX }, 0 }, @@ -2157,11 +2058,11 @@ static const struct dis386 dis386_twobyte[] = { { PREFIX_TABLE (PREFIX_0F10) }, { PREFIX_TABLE (PREFIX_0F11) }, { PREFIX_TABLE (PREFIX_0F12) }, - { MOD_TABLE (MOD_0F13) }, + { "movlpX", { Mq, XM }, PREFIX_OPCODE }, { "unpcklpX", { XM, EXx }, PREFIX_OPCODE }, { "unpckhpX", { XM, EXx }, PREFIX_OPCODE }, { PREFIX_TABLE (PREFIX_0F16) }, - { MOD_TABLE (MOD_0F17) }, + { "movhpX", { Mq, XM }, PREFIX_OPCODE }, /* 18 */ { REG_TABLE (REG_0F18) }, { "nopQ", { Ev }, 0 }, @@ -2199,9 +2100,9 @@ static const struct dis386 dis386_twobyte[] = { { Bad_Opcode }, { "getsec", { XX }, 0 }, /* 38 */ - { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) }, + { THREE_BYTE_TABLE (THREE_BYTE_0F38) }, { Bad_Opcode }, - { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) }, + { THREE_BYTE_TABLE (THREE_BYTE_0F3A) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -2226,7 +2127,7 @@ static const struct dis386 dis386_twobyte[] = { { "cmovleS", { Gv, Ev }, 0 }, { "cmovgS", { Gv, Ev }, 0 }, /* 50 */ - { MOD_TABLE (MOD_0F50) }, + { "movmskpX", { Gdq, Ux }, PREFIX_OPCODE }, { PREFIX_TABLE (PREFIX_0F51) }, { PREFIX_TABLE (PREFIX_0F52) }, { PREFIX_TABLE (PREFIX_0F53) }, @@ -2263,9 +2164,9 @@ static const struct dis386 dis386_twobyte[] = { { PREFIX_TABLE (PREFIX_0F6F) }, /* 70 */ { PREFIX_TABLE (PREFIX_0F70) }, - { MOD_TABLE (MOD_0F71) }, - { MOD_TABLE (MOD_0F72) }, - { MOD_TABLE (MOD_0F73) }, + { REG_TABLE (REG_0F71) }, + { REG_TABLE (REG_0F72) }, + { REG_TABLE (REG_0F73) }, { "pcmpeqb", { MX, EM }, PREFIX_OPCODE }, { "pcmpeqw", { MX, EM }, PREFIX_OPCODE }, { "pcmpeqd", { MX, EM }, PREFIX_OPCODE }, @@ -2336,10 +2237,10 @@ static const struct dis386 dis386_twobyte[] = { /* b0 */ { "cmpxchgB", { Ebh1, Gb }, 0 }, { "cmpxchgS", { Evh1, Gv }, 0 }, - { MOD_TABLE (MOD_0FB2) }, + { "lssS", { Gv, Mp }, 0 }, { "btrS", { Evh1, Gv }, 0 }, - { MOD_TABLE (MOD_0FB4) }, - { MOD_TABLE (MOD_0FB5) }, + { "lfsS", { Gv, Mp }, 0 }, + { "lgsS", { Gv, Mp }, 0 }, { "movz{bR|x}", { Gv, Eb }, 0 }, { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */ /* b8 */ @@ -2355,9 +2256,9 @@ static const struct dis386 dis386_twobyte[] = { { "xaddB", { Ebh1, Gb }, 0 }, { "xaddS", { Evh1, Gv }, 0 }, { PREFIX_TABLE (PREFIX_0FC2) }, - { MOD_TABLE (MOD_0FC3) }, + { "movntiS", { Mdq, Gdq }, PREFIX_OPCODE }, { "pinsrw", { MX, Edw, Ib }, PREFIX_OPCODE }, - { "pextrw", { Gd, MS, Ib }, PREFIX_OPCODE }, + { "pextrw", { Gd, Nq, Ib }, PREFIX_OPCODE }, { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE }, { REG_TABLE (REG_0FC7) }, /* c8 */ @@ -2377,7 +2278,7 @@ static const struct dis386 dis386_twobyte[] = { { "paddq", { MX, EM }, PREFIX_OPCODE }, { "pmullw", { MX, EM }, PREFIX_OPCODE }, { PREFIX_TABLE (PREFIX_0FD6) }, - { MOD_TABLE (MOD_0FD7) }, + { "pmovmskb", { Gdq, Nq }, PREFIX_OPCODE }, /* d8 */ { "psubusb", { MX, EM }, PREFIX_OPCODE }, { "psubusw", { MX, EM }, PREFIX_OPCODE }, @@ -2611,11 +2512,11 @@ static const struct dis386 reg_table[][8] = { /* REG_8F */ { { "pop{P|}", { stackEv }, 0 }, - { XOP_8F_TABLE (XOP_09) }, + { XOP_8F_TABLE () }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { XOP_8F_TABLE (XOP_09) }, + { XOP_8F_TABLE () }, }, /* REG_C0 */ { @@ -2648,7 +2549,7 @@ static const struct dis386 reg_table[][8] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { MOD_TABLE (MOD_C6_REG_7) }, + { RM_TABLE (RM_C6_REG_7) }, }, /* REG_C7 */ { @@ -2659,7 +2560,7 @@ static const struct dis386 reg_table[][8] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { MOD_TABLE (MOD_C7_REG_7) }, + { RM_TABLE (RM_C7_REG_7) }, }, /* REG_D0 */ { @@ -2737,9 +2638,9 @@ static const struct dis386 reg_table[][8] = { { "incQ", { Evh1 }, 0 }, { "decQ", { Evh1 }, 0 }, { "call{@|}", { NOTRACK, indirEv, BND }, 0 }, - { MOD_TABLE (MOD_FF_REG_3) }, + { "{l|}call^", { indirEp }, 0 }, { "jmp{@|}", { NOTRACK, indirEv, BND }, 0 }, - { MOD_TABLE (MOD_FF_REG_5) }, + { "{l|}jmp^", { indirEp }, 0 }, { "push{P|}", { stackEv }, 0 }, { Bad_Opcode }, }, @@ -2747,10 +2648,10 @@ static const struct dis386 reg_table[][8] = { { { "sldtD", { Sv }, 0 }, { "strD", { Sv }, 0 }, - { "lldt", { Ew }, 0 }, - { "ltr", { Ew }, 0 }, - { "verr", { Ew }, 0 }, - { "verw", { Ew }, 0 }, + { "lldtD", { Sv }, 0 }, + { "ltrD", { Sv }, 0 }, + { "verrD", { Sv }, 0 }, + { "verwD", { Sv }, 0 }, { X86_64_TABLE (X86_64_0F00_REG_6) }, { Bad_Opcode }, }, @@ -2816,40 +2717,40 @@ static const struct dis386 reg_table[][8] = { { "aesencwide256kl", { M }, 0 }, { "aesdecwide256kl", { M }, 0 }, }, - /* REG_0F3A0F_PREFIX_1_MOD_3 */ + /* REG_0F3A0F_P_1 */ { - { RM_TABLE (RM_0F3A0F_P_1_MOD_3_REG_0) }, + { RM_TABLE (RM_0F3A0F_P_1_R_0) }, }, - /* REG_0F71_MOD_0 */ + /* REG_0F71 */ { { Bad_Opcode }, { Bad_Opcode }, - { "psrlw", { MS, Ib }, PREFIX_OPCODE }, + { "psrlw", { Nq, Ib }, PREFIX_OPCODE }, { Bad_Opcode }, - { "psraw", { MS, Ib }, PREFIX_OPCODE }, + { "psraw", { Nq, Ib }, PREFIX_OPCODE }, { Bad_Opcode }, - { "psllw", { MS, Ib }, PREFIX_OPCODE }, + { "psllw", { Nq, Ib }, PREFIX_OPCODE }, }, - /* REG_0F72_MOD_0 */ + /* REG_0F72 */ { { Bad_Opcode }, { Bad_Opcode }, - { "psrld", { MS, Ib }, PREFIX_OPCODE }, + { "psrld", { Nq, Ib }, PREFIX_OPCODE }, { Bad_Opcode }, - { "psrad", { MS, Ib }, PREFIX_OPCODE }, + { "psrad", { Nq, Ib }, PREFIX_OPCODE }, { Bad_Opcode }, - { "pslld", { MS, Ib }, PREFIX_OPCODE }, + { "pslld", { Nq, Ib }, PREFIX_OPCODE }, }, - /* REG_0F73_MOD_0 */ + /* REG_0F73 */ { { Bad_Opcode }, { Bad_Opcode }, - { "psrlq", { MS, Ib }, PREFIX_OPCODE }, - { "psrldq", { XS, Ib }, PREFIX_DATA }, + { "psrlq", { Nq, Ib }, PREFIX_OPCODE }, + { "psrldq", { Ux, Ib }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, - { "psllq", { MS, Ib }, PREFIX_OPCODE }, - { "pslldq", { XS, Ib }, PREFIX_DATA }, + { "psllq", { Nq, Ib }, PREFIX_OPCODE }, + { "pslldq", { Ux, Ib }, PREFIX_DATA }, }, /* REG_0FA6 */ { @@ -2893,49 +2794,49 @@ static const struct dis386 reg_table[][8] = { { Bad_Opcode }, { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 }, { Bad_Opcode }, - { MOD_TABLE (MOD_0FC7_REG_3) }, - { MOD_TABLE (MOD_0FC7_REG_4) }, - { MOD_TABLE (MOD_0FC7_REG_5) }, + { "xrstors", { FXSAVE }, 0 }, + { "xsavec", { FXSAVE }, 0 }, + { "xsaves", { FXSAVE }, 0 }, { MOD_TABLE (MOD_0FC7_REG_6) }, { MOD_TABLE (MOD_0FC7_REG_7) }, }, - /* REG_VEX_0F71_M_0 */ + /* REG_VEX_0F71 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vpsrlw", { Vex, XS, Ib }, PREFIX_DATA }, + { "vpsrlw", { Vex, Ux, Ib }, PREFIX_DATA }, { Bad_Opcode }, - { "vpsraw", { Vex, XS, Ib }, PREFIX_DATA }, + { "vpsraw", { Vex, Ux, Ib }, PREFIX_DATA }, { Bad_Opcode }, - { "vpsllw", { Vex, XS, Ib }, PREFIX_DATA }, + { "vpsllw", { Vex, Ux, Ib }, PREFIX_DATA }, }, - /* REG_VEX_0F72_M_0 */ + /* REG_VEX_0F72 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vpsrld", { Vex, XS, Ib }, PREFIX_DATA }, + { "vpsrld", { Vex, Ux, Ib }, PREFIX_DATA }, { Bad_Opcode }, - { "vpsrad", { Vex, XS, Ib }, PREFIX_DATA }, + { "vpsrad", { Vex, Ux, Ib }, PREFIX_DATA }, { Bad_Opcode }, - { "vpslld", { Vex, XS, Ib }, PREFIX_DATA }, + { "vpslld", { Vex, Ux, Ib }, PREFIX_DATA }, }, - /* REG_VEX_0F73_M_0 */ + /* REG_VEX_0F73 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vpsrlq", { Vex, XS, Ib }, PREFIX_DATA }, - { "vpsrldq", { Vex, XS, Ib }, PREFIX_DATA }, + { "vpsrlq", { Vex, Ux, Ib }, PREFIX_DATA }, + { "vpsrldq", { Vex, Ux, Ib }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, - { "vpsllq", { Vex, XS, Ib }, PREFIX_DATA }, - { "vpslldq", { Vex, XS, Ib }, PREFIX_DATA }, + { "vpsllq", { Vex, Ux, Ib }, PREFIX_DATA }, + { "vpslldq", { Vex, Ux, Ib }, PREFIX_DATA }, }, /* REG_VEX_0FAE */ { { Bad_Opcode }, { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0FAE_REG_2) }, - { MOD_TABLE (MOD_VEX_0FAE_REG_3) }, + { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2) }, + { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3) }, }, /* REG_VEX_0F3849_X86_64_L_0_W_0_M_1_P_0 */ { @@ -2969,10 +2870,10 @@ static const struct dis386 reg_table[][8] = { { Bad_Opcode }, { "blci", { VexGdq, Edq }, 0 }, }, - /* REG_XOP_09_12_M_1_L_0 */ + /* REG_XOP_09_12_L_0 */ { - { "llwpcb", { Edq }, 0 }, - { "slwpcb", { Edq }, 0 }, + { "llwpcb", { Rdq }, 0 }, + { "slwpcb", { Rdq }, 0 }, }, /* REG_XOP_0A_12_L_0 */ { @@ -2997,7 +2898,7 @@ static const struct dis386 prefix_table[][4] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { "lkgs", { Ew }, 0 }, + { "lkgsD", { Sv }, 0 }, }, /* PREFIX_0F01_REG_0_MOD_3_RM_6 */ @@ -3008,6 +2909,11 @@ static const struct dis386 prefix_table[][4] = { { X86_64_TABLE (X86_64_0F01_REG_0_MOD_3_RM_6_P_3) }, }, + /* PREFIX_0F01_REG_0_MOD_3_RM_7 */ + { + { X86_64_TABLE (X86_64_0F01_REG_0_MOD_3_RM_7_P_0) }, + }, + /* PREFIX_0F01_REG_1_RM_2 */ { { "clac", { Skip_MODRM }, 0 }, @@ -3144,33 +3050,33 @@ static const struct dis386 prefix_table[][4] = { /* PREFIX_0F10 */ { - { "movups", { XM, EXx }, PREFIX_OPCODE }, - { "movss", { XM, EXd }, PREFIX_OPCODE }, - { "movupd", { XM, EXx }, PREFIX_OPCODE }, - { "movsd", { XM, EXq }, PREFIX_OPCODE }, + { "%XEVmovupX", { XM, EXEvexXNoBcst }, 0 }, + { "%XEVmovs%XS", { XMScalar, VexScalarR, EXd }, 0 }, + { "%XEVmovupX", { XM, EXEvexXNoBcst }, 0 }, + { "%XEVmovs%XD", { XMScalar, VexScalarR, EXq }, 0 }, }, /* PREFIX_0F11 */ { - { "movups", { EXxS, XM }, PREFIX_OPCODE }, - { "movss", { EXdS, XM }, PREFIX_OPCODE }, - { "movupd", { EXxS, XM }, PREFIX_OPCODE }, - { "movsd", { EXqS, XM }, PREFIX_OPCODE }, + { "%XEVmovupX", { EXxS, XM }, 0 }, + { "%XEVmovs%XS", { EXdS, VexScalarR, XMScalar }, 0 }, + { "%XEVmovupX", { EXxS, XM }, 0 }, + { "%XEVmovs%XD", { EXqS, VexScalarR, XMScalar }, 0 }, }, /* PREFIX_0F12 */ { { MOD_TABLE (MOD_0F12_PREFIX_0) }, - { "movsldup", { XM, EXx }, PREFIX_OPCODE }, - { MOD_TABLE (MOD_0F12_PREFIX_2) }, - { "movddup", { XM, EXq }, PREFIX_OPCODE }, + { "movsldup", { XM, EXx }, 0 }, + { "%XEVmovlpYX", { XM, Vex, Mq }, 0 }, + { "movddup", { XM, EXq }, 0 }, }, /* PREFIX_0F16 */ { { MOD_TABLE (MOD_0F16_PREFIX_0) }, - { "movshdup", { XM, EXx }, PREFIX_OPCODE }, - { MOD_TABLE (MOD_0F16_PREFIX_2) }, + { "movshdup", { XM, EXx }, 0 }, + { "%XEVmovhpYX", { XM, Vex, Mq }, 0 }, }, /* PREFIX_0F18_REG_6_MOD_0_X86_64 */ @@ -3231,10 +3137,10 @@ static const struct dis386 prefix_table[][4] = { /* PREFIX_0F2B */ { - { MOD_TABLE (MOD_0F2B_PREFIX_0) }, - { MOD_TABLE (MOD_0F2B_PREFIX_1) }, - { MOD_TABLE (MOD_0F2B_PREFIX_2) }, - { MOD_TABLE (MOD_0F2B_PREFIX_3) }, + { "movntps", { Mx, XM }, 0 }, + { "movntss", { Md, XM }, 0 }, + { "movntpd", { Mx, XM }, 0 }, + { "movntsd", { Mq, XM }, 0 }, }, /* PREFIX_0F2C */ @@ -3255,99 +3161,99 @@ static const struct dis386 prefix_table[][4] = { /* PREFIX_0F2E */ { - { "ucomiss",{ XM, EXd }, 0 }, + { "%XEVucomisYX", { XMScalar, EXd, EXxEVexS }, 0 }, { Bad_Opcode }, - { "ucomisd",{ XM, EXq }, 0 }, + { "%XEVucomisYX", { XMScalar, EXq, EXxEVexS }, 0 }, }, /* PREFIX_0F2F */ { - { "comiss", { XM, EXd }, 0 }, + { "%XEVcomisYX", { XMScalar, EXd, EXxEVexS }, 0 }, { Bad_Opcode }, - { "comisd", { XM, EXq }, 0 }, + { "%XEVcomisYX", { XMScalar, EXq, EXxEVexS }, 0 }, }, /* PREFIX_0F51 */ { - { "sqrtps", { XM, EXx }, PREFIX_OPCODE }, - { "sqrtss", { XM, EXd }, PREFIX_OPCODE }, - { "sqrtpd", { XM, EXx }, PREFIX_OPCODE }, - { "sqrtsd", { XM, EXq }, PREFIX_OPCODE }, + { "%XEVsqrtpX", { XM, EXx, EXxEVexR }, 0 }, + { "%XEVsqrts%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 }, + { "%XEVsqrtpX", { XM, EXx, EXxEVexR }, 0 }, + { "%XEVsqrts%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, }, /* PREFIX_0F52 */ { - { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE }, - { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE }, + { "Vrsqrtps", { XM, EXx }, 0 }, + { "Vrsqrtss", { XMScalar, VexScalar, EXd }, 0 }, }, /* PREFIX_0F53 */ { - { "rcpps", { XM, EXx }, PREFIX_OPCODE }, - { "rcpss", { XM, EXd }, PREFIX_OPCODE }, + { "Vrcpps", { XM, EXx }, 0 }, + { "Vrcpss", { XMScalar, VexScalar, EXd }, 0 }, }, /* PREFIX_0F58 */ { - { "addps", { XM, EXx }, PREFIX_OPCODE }, - { "addss", { XM, EXd }, PREFIX_OPCODE }, - { "addpd", { XM, EXx }, PREFIX_OPCODE }, - { "addsd", { XM, EXq }, PREFIX_OPCODE }, + { "%XEVaddpX", { XM, Vex, EXx, EXxEVexR }, 0 }, + { "%XEVadds%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 }, + { "%XEVaddpX", { XM, Vex, EXx, EXxEVexR }, 0 }, + { "%XEVadds%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, }, /* PREFIX_0F59 */ { - { "mulps", { XM, EXx }, PREFIX_OPCODE }, - { "mulss", { XM, EXd }, PREFIX_OPCODE }, - { "mulpd", { XM, EXx }, PREFIX_OPCODE }, - { "mulsd", { XM, EXq }, PREFIX_OPCODE }, + { "%XEVmulpX", { XM, Vex, EXx, EXxEVexR }, 0 }, + { "%XEVmuls%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 }, + { "%XEVmulpX", { XM, Vex, EXx, EXxEVexR }, 0 }, + { "%XEVmuls%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, }, /* PREFIX_0F5A */ { - { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE }, - { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE }, - { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE }, - { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE }, + { "%XEVcvtp%XS2pd", { XM, EXEvexHalfBcstXmmq, EXxEVexS }, 0 }, + { "%XEVcvts%XS2sd", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 }, + { "%XEVcvtp%XD2ps%XY", { XMxmmq, EXx, EXxEVexR }, 0 }, + { "%XEVcvts%XD2ss", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, }, /* PREFIX_0F5B */ { - { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE }, - { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE }, - { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE }, + { "Vcvtdq2ps", { XM, EXx }, 0 }, + { "Vcvttps2dq", { XM, EXx }, 0 }, + { "Vcvtps2dq", { XM, EXx }, 0 }, }, /* PREFIX_0F5C */ { - { "subps", { XM, EXx }, PREFIX_OPCODE }, - { "subss", { XM, EXd }, PREFIX_OPCODE }, - { "subpd", { XM, EXx }, PREFIX_OPCODE }, - { "subsd", { XM, EXq }, PREFIX_OPCODE }, + { "%XEVsubpX", { XM, Vex, EXx, EXxEVexR }, 0 }, + { "%XEVsubs%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 }, + { "%XEVsubpX", { XM, Vex, EXx, EXxEVexR }, 0 }, + { "%XEVsubs%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, }, /* PREFIX_0F5D */ { - { "minps", { XM, EXx }, PREFIX_OPCODE }, - { "minss", { XM, EXd }, PREFIX_OPCODE }, - { "minpd", { XM, EXx }, PREFIX_OPCODE }, - { "minsd", { XM, EXq }, PREFIX_OPCODE }, + { "%XEVminpX", { XM, Vex, EXx, EXxEVexS }, 0 }, + { "%XEVmins%XS", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 }, + { "%XEVminpX", { XM, Vex, EXx, EXxEVexS }, 0 }, + { "%XEVmins%XD", { XMScalar, VexScalar, EXq, EXxEVexS }, 0 }, }, /* PREFIX_0F5E */ { - { "divps", { XM, EXx }, PREFIX_OPCODE }, - { "divss", { XM, EXd }, PREFIX_OPCODE }, - { "divpd", { XM, EXx }, PREFIX_OPCODE }, - { "divsd", { XM, EXq }, PREFIX_OPCODE }, + { "%XEVdivpX", { XM, Vex, EXx, EXxEVexR }, 0 }, + { "%XEVdivs%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 }, + { "%XEVdivpX", { XM, Vex, EXx, EXxEVexR }, 0 }, + { "%XEVdivs%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, }, /* PREFIX_0F5F */ { - { "maxps", { XM, EXx }, PREFIX_OPCODE }, - { "maxss", { XM, EXd }, PREFIX_OPCODE }, - { "maxpd", { XM, EXx }, PREFIX_OPCODE }, - { "maxsd", { XM, EXq }, PREFIX_OPCODE }, + { "%XEVmaxpX", { XM, Vex, EXx, EXxEVexS }, 0 }, + { "%XEVmaxs%XS", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 }, + { "%XEVmaxpX", { XM, Vex, EXx, EXxEVexS }, 0 }, + { "%XEVmaxs%XD", { XMScalar, VexScalar, EXq, EXxEVexS }, 0 }, }, /* PREFIX_0F60 */ @@ -3390,32 +3296,32 @@ static const struct dis386 prefix_table[][4] = { { {"vmread", { Em, Gm }, 0 }, { Bad_Opcode }, - {"extrq", { XS, Ib, Ib }, 0 }, - {"insertq", { XM, XS, Ib, Ib }, 0 }, + {"extrq", { Uxmm, Ib, Ib }, 0 }, + {"insertq", { XM, Uxmm, Ib, Ib }, 0 }, }, /* PREFIX_0F79 */ { {"vmwrite", { Gm, Em }, 0 }, { Bad_Opcode }, - {"extrq", { XM, XS }, 0 }, - {"insertq", { XM, XS }, 0 }, + {"extrq", { XM, Uxmm }, 0 }, + {"insertq", { XM, Uxmm }, 0 }, }, /* PREFIX_0F7C */ { { Bad_Opcode }, { Bad_Opcode }, - { "haddpd", { XM, EXx }, PREFIX_OPCODE }, - { "haddps", { XM, EXx }, PREFIX_OPCODE }, + { "Vhaddpd", { XM, Vex, EXx }, 0 }, + { "Vhaddps", { XM, Vex, EXx }, 0 }, }, /* PREFIX_0F7D */ { { Bad_Opcode }, { Bad_Opcode }, - { "hsubpd", { XM, EXx }, PREFIX_OPCODE }, - { "hsubps", { XM, EXx }, PREFIX_OPCODE }, + { "Vhsubpd", { XM, Vex, EXx }, 0 }, + { "Vhsubps", { XM, Vex, EXx }, 0 }, }, /* PREFIX_0F7E */ @@ -3518,10 +3424,10 @@ static const struct dis386 prefix_table[][4] = { /* PREFIX_0FC2 */ { - { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE }, - { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE }, - { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE }, - { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE }, + { "VcmppX", { XM, Vex, EXx, CMP }, 0 }, + { "Vcmpss", { XMScalar, VexScalar, EXd, CMP }, 0 }, + { "VcmppX", { XM, Vex, EXx, CMP }, 0 }, + { "Vcmpsd", { XMScalar, VexScalar, EXq, CMP }, 0 }, }, /* PREFIX_0FC7_REG_6_MOD_0 */ @@ -3549,31 +3455,31 @@ static const struct dis386 prefix_table[][4] = { { { Bad_Opcode }, { Bad_Opcode }, - { "addsubpd", { XM, EXx }, 0 }, - { "addsubps", { XM, EXx }, 0 }, + { "VaddsubpX", { XM, Vex, EXx }, 0 }, + { "VaddsubpX", { XM, Vex, EXx }, 0 }, }, /* PREFIX_0FD6 */ { { Bad_Opcode }, - { "movq2dq",{ XM, MS }, 0 }, + { "movq2dq",{ XM, Nq }, 0 }, { "movq", { EXqS, XM }, 0 }, - { "movdq2q",{ MX, XS }, 0 }, + { "movdq2q",{ MX, Ux }, 0 }, }, /* PREFIX_0FE6 */ { { Bad_Opcode }, - { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE }, - { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE }, - { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE }, + { "Vcvtdq2pd", { XM, EXxmmq }, 0 }, + { "Vcvttpd2dq%XY", { XMM, EXx }, 0 }, + { "Vcvtpd2dq%XY", { XMM, EXx }, 0 }, }, /* PREFIX_0FE7 */ { - { "movntq", { Mq, MX }, PREFIX_OPCODE }, + { "movntq", { Mq, MX }, 0 }, { Bad_Opcode }, - { MOD_TABLE (MOD_0FE7_PREFIX_2) }, + { "movntdq", { Mx, XM }, 0 }, }, /* PREFIX_0FF0 */ @@ -3581,14 +3487,14 @@ static const struct dis386 prefix_table[][4] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { MOD_TABLE (MOD_0FF0_PREFIX_3) }, + { "Vlddqu", { XM, M }, 0 }, }, /* PREFIX_0FF7 */ { - { "maskmovq", { MX, MS }, PREFIX_OPCODE }, + { "maskmovq", { MX, Nq }, PREFIX_OPCODE }, { Bad_Opcode }, - { "maskmovdqu", { XM, XS }, PREFIX_OPCODE }, + { "maskmovdqu", { XM, Ux }, PREFIX_OPCODE }, }, /* PREFIX_0F38D8 */ @@ -3607,21 +3513,21 @@ static const struct dis386 prefix_table[][4] = { /* PREFIX_0F38DD */ { { Bad_Opcode }, - { MOD_TABLE (MOD_0F38DD_PREFIX_1) }, + { "aesdec128kl", { XM, M }, 0 }, { "aesenclast", { XM, EXx }, 0 }, }, /* PREFIX_0F38DE */ { { Bad_Opcode }, - { MOD_TABLE (MOD_0F38DE_PREFIX_1) }, + { "aesenc256kl", { XM, M }, 0 }, { "aesdec", { XM, EXx }, 0 }, }, /* PREFIX_0F38DF */ { { Bad_Opcode }, - { MOD_TABLE (MOD_0F38DF_PREFIX_1) }, + { "aesdec256kl", { XM, M }, 0 }, { "aesdeclast", { XM, EXx }, 0 }, }, @@ -3643,29 +3549,29 @@ static const struct dis386 prefix_table[][4] = { /* PREFIX_0F38F6 */ { - { MOD_TABLE (MOD_0F38F6_PREFIX_0) }, - { "adoxS", { Gdq, Edq}, PREFIX_OPCODE }, - { "adcxS", { Gdq, Edq}, PREFIX_OPCODE }, + { "wrssK", { M, Gdq }, 0 }, + { "adoxS", { Gdq, Edq}, 0 }, + { "adcxS", { Gdq, Edq}, 0 }, { Bad_Opcode }, }, /* PREFIX_0F38F8 */ { { Bad_Opcode }, - { MOD_TABLE (MOD_0F38F8_PREFIX_1) }, - { MOD_TABLE (MOD_0F38F8_PREFIX_2) }, - { MOD_TABLE (MOD_0F38F8_PREFIX_3) }, + { "enqcmds", { Gva, M }, 0 }, + { "movdir64b", { Gva, M }, 0 }, + { "enqcmd", { Gva, M }, 0 }, }, /* PREFIX_0F38FA */ { { Bad_Opcode }, - { MOD_TABLE (MOD_0F38FA_PREFIX_1) }, + { "encodekey128", { Gd, Rd }, 0 }, }, /* PREFIX_0F38FB */ { { Bad_Opcode }, - { MOD_TABLE (MOD_0F38FB_PREFIX_1) }, + { "encodekey256", { Gd, Rd }, 0 }, }, /* PREFIX_0F38FC */ @@ -3679,46 +3585,30 @@ static const struct dis386 prefix_table[][4] = { /* PREFIX_0F3A0F */ { { Bad_Opcode }, - { MOD_TABLE (MOD_0F3A0F_PREFIX_1)}, - }, - - /* PREFIX_VEX_0F10 */ - { - { "%XEvmovupX", { XM, EXEvexXNoBcst }, 0 }, - { "%XEvmovs%XS", { XMScalar, VexScalarR, EXd }, 0 }, - { "%XEvmovupX", { XM, EXEvexXNoBcst }, 0 }, - { "%XEvmovs%XD", { XMScalar, VexScalarR, EXq }, 0 }, - }, - - /* PREFIX_VEX_0F11 */ - { - { "%XEvmovupX", { EXxS, XM }, 0 }, - { "%XEvmovs%XS", { EXdS, VexScalarR, XMScalar }, 0 }, - { "%XEvmovupX", { EXxS, XM }, 0 }, - { "%XEvmovs%XD", { EXqS, VexScalarR, XMScalar }, 0 }, + { REG_TABLE (REG_0F3A0F_P_1) }, }, /* PREFIX_VEX_0F12 */ { - { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F12_P_0) }, { "%XEvmov%XSldup", { XM, EXEvexXNoBcst }, 0 }, - { MOD_TABLE (MOD_VEX_0F12_PREFIX_2) }, + { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) }, { "%XEvmov%XDdup", { XM, EXymmq }, 0 }, }, /* PREFIX_VEX_0F16 */ { - { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F16_P_0) }, { "%XEvmov%XShdup", { XM, EXEvexXNoBcst }, 0 }, - { MOD_TABLE (MOD_VEX_0F16_PREFIX_2) }, + { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) }, }, /* PREFIX_VEX_0F2A */ { { Bad_Opcode }, - { "%XEvcvtsi2ss{%LQ|}", { XMScalar, VexScalar, EXxEVexR, Edq }, 0 }, + { "%XEvcvtsi2ssY{%LQ|}", { XMScalar, VexScalar, EXxEVexR, Edq }, 0 }, { Bad_Opcode }, - { "%XEvcvtsi2sd{%LQ|}", { XMScalar, VexScalar, EXxEVexR64, Edq }, 0 }, + { "%XEvcvtsi2sdY{%LQ|}", { XMScalar, VexScalar, EXxEVexR64, Edq }, 0 }, }, /* PREFIX_VEX_0F2C */ @@ -3737,211 +3627,114 @@ static const struct dis386 prefix_table[][4] = { { "%XEvcvtsd2si", { Gdq, EXq, EXxEVexR }, 0 }, }, - /* PREFIX_VEX_0F2E */ + /* PREFIX_VEX_0F41_L_1_W_0 */ { - { "%XEvucomisX", { XMScalar, EXd, EXxEVexS }, 0 }, + { "kandw", { MaskG, MaskVex, MaskR }, 0 }, { Bad_Opcode }, - { "%XEvucomisX", { XMScalar, EXq, EXxEVexS }, 0 }, + { "kandb", { MaskG, MaskVex, MaskR }, 0 }, }, - /* PREFIX_VEX_0F2F */ + /* PREFIX_VEX_0F41_L_1_W_1 */ { - { "%XEvcomisX", { XMScalar, EXd, EXxEVexS }, 0 }, + { "kandq", { MaskG, MaskVex, MaskR }, 0 }, { Bad_Opcode }, - { "%XEvcomisX", { XMScalar, EXq, EXxEVexS }, 0 }, + { "kandd", { MaskG, MaskVex, MaskR }, 0 }, }, - /* PREFIX_VEX_0F41_L_1_M_1_W_0 */ + /* PREFIX_VEX_0F42_L_1_W_0 */ { - { "kandw", { MaskG, MaskVex, MaskE }, 0 }, + { "kandnw", { MaskG, MaskVex, MaskR }, 0 }, { Bad_Opcode }, - { "kandb", { MaskG, MaskVex, MaskE }, 0 }, + { "kandnb", { MaskG, MaskVex, MaskR }, 0 }, }, - /* PREFIX_VEX_0F41_L_1_M_1_W_1 */ + /* PREFIX_VEX_0F42_L_1_W_1 */ { - { "kandq", { MaskG, MaskVex, MaskE }, 0 }, + { "kandnq", { MaskG, MaskVex, MaskR }, 0 }, { Bad_Opcode }, - { "kandd", { MaskG, MaskVex, MaskE }, 0 }, + { "kandnd", { MaskG, MaskVex, MaskR }, 0 }, }, - /* PREFIX_VEX_0F42_L_1_M_1_W_0 */ + /* PREFIX_VEX_0F44_L_0_W_0 */ { - { "kandnw", { MaskG, MaskVex, MaskE }, 0 }, + { "knotw", { MaskG, MaskR }, 0 }, { Bad_Opcode }, - { "kandnb", { MaskG, MaskVex, MaskE }, 0 }, + { "knotb", { MaskG, MaskR }, 0 }, }, - /* PREFIX_VEX_0F42_L_1_M_1_W_1 */ + /* PREFIX_VEX_0F44_L_0_W_1 */ { - { "kandnq", { MaskG, MaskVex, MaskE }, 0 }, + { "knotq", { MaskG, MaskR }, 0 }, { Bad_Opcode }, - { "kandnd", { MaskG, MaskVex, MaskE }, 0 }, + { "knotd", { MaskG, MaskR }, 0 }, }, - /* PREFIX_VEX_0F44_L_0_M_1_W_0 */ + /* PREFIX_VEX_0F45_L_1_W_0 */ { - { "knotw", { MaskG, MaskE }, 0 }, + { "korw", { MaskG, MaskVex, MaskR }, 0 }, { Bad_Opcode }, - { "knotb", { MaskG, MaskE }, 0 }, + { "korb", { MaskG, MaskVex, MaskR }, 0 }, }, - /* PREFIX_VEX_0F44_L_0_M_1_W_1 */ + /* PREFIX_VEX_0F45_L_1_W_1 */ { - { "knotq", { MaskG, MaskE }, 0 }, + { "korq", { MaskG, MaskVex, MaskR }, 0 }, { Bad_Opcode }, - { "knotd", { MaskG, MaskE }, 0 }, + { "kord", { MaskG, MaskVex, MaskR }, 0 }, }, - /* PREFIX_VEX_0F45_L_1_M_1_W_0 */ + /* PREFIX_VEX_0F46_L_1_W_0 */ { - { "korw", { MaskG, MaskVex, MaskE }, 0 }, + { "kxnorw", { MaskG, MaskVex, MaskR }, 0 }, { Bad_Opcode }, - { "korb", { MaskG, MaskVex, MaskE }, 0 }, + { "kxnorb", { MaskG, MaskVex, MaskR }, 0 }, }, - /* PREFIX_VEX_0F45_L_1_M_1_W_1 */ + /* PREFIX_VEX_0F46_L_1_W_1 */ { - { "korq", { MaskG, MaskVex, MaskE }, 0 }, + { "kxnorq", { MaskG, MaskVex, MaskR }, 0 }, { Bad_Opcode }, - { "kord", { MaskG, MaskVex, MaskE }, 0 }, + { "kxnord", { MaskG, MaskVex, MaskR }, 0 }, }, - /* PREFIX_VEX_0F46_L_1_M_1_W_0 */ + /* PREFIX_VEX_0F47_L_1_W_0 */ { - { "kxnorw", { MaskG, MaskVex, MaskE }, 0 }, + { "kxorw", { MaskG, MaskVex, MaskR }, 0 }, { Bad_Opcode }, - { "kxnorb", { MaskG, MaskVex, MaskE }, 0 }, + { "kxorb", { MaskG, MaskVex, MaskR }, 0 }, }, - /* PREFIX_VEX_0F46_L_1_M_1_W_1 */ + /* PREFIX_VEX_0F47_L_1_W_1 */ { - { "kxnorq", { MaskG, MaskVex, MaskE }, 0 }, + { "kxorq", { MaskG, MaskVex, MaskR }, 0 }, { Bad_Opcode }, - { "kxnord", { MaskG, MaskVex, MaskE }, 0 }, + { "kxord", { MaskG, MaskVex, MaskR }, 0 }, }, - /* PREFIX_VEX_0F47_L_1_M_1_W_0 */ + /* PREFIX_VEX_0F4A_L_1_W_0 */ { - { "kxorw", { MaskG, MaskVex, MaskE }, 0 }, + { "kaddw", { MaskG, MaskVex, MaskR }, 0 }, { Bad_Opcode }, - { "kxorb", { MaskG, MaskVex, MaskE }, 0 }, + { "kaddb", { MaskG, MaskVex, MaskR }, 0 }, }, - /* PREFIX_VEX_0F47_L_1_M_1_W_1 */ + /* PREFIX_VEX_0F4A_L_1_W_1 */ { - { "kxorq", { MaskG, MaskVex, MaskE }, 0 }, + { "kaddq", { MaskG, MaskVex, MaskR }, 0 }, { Bad_Opcode }, - { "kxord", { MaskG, MaskVex, MaskE }, 0 }, + { "kaddd", { MaskG, MaskVex, MaskR }, 0 }, }, - /* PREFIX_VEX_0F4A_L_1_M_1_W_0 */ + /* PREFIX_VEX_0F4B_L_1_W_0 */ { - { "kaddw", { MaskG, MaskVex, MaskE }, 0 }, + { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 }, { Bad_Opcode }, - { "kaddb", { MaskG, MaskVex, MaskE }, 0 }, + { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 }, }, - /* PREFIX_VEX_0F4A_L_1_M_1_W_1 */ + /* PREFIX_VEX_0F4B_L_1_W_1 */ { - { "kaddq", { MaskG, MaskVex, MaskE }, 0 }, - { Bad_Opcode }, - { "kaddd", { MaskG, MaskVex, MaskE }, 0 }, - }, - - /* PREFIX_VEX_0F4B_L_1_M_1_W_0 */ - { - { "kunpckwd", { MaskG, MaskVex, MaskE }, 0 }, - { Bad_Opcode }, - { "kunpckbw", { MaskG, MaskVex, MaskE }, 0 }, - }, - - /* PREFIX_VEX_0F4B_L_1_M_1_W_1 */ - { - { "kunpckdq", { MaskG, MaskVex, MaskE }, 0 }, - }, - - /* PREFIX_VEX_0F51 */ - { - { "%XEvsqrtpX", { XM, EXx, EXxEVexR }, 0 }, - { "%XEvsqrts%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 }, - { "%XEvsqrtpX", { XM, EXx, EXxEVexR }, 0 }, - { "%XEvsqrts%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, - }, - - /* PREFIX_VEX_0F52 */ - { - { "vrsqrtps", { XM, EXx }, 0 }, - { "vrsqrtss", { XMScalar, VexScalar, EXd }, 0 }, - }, - - /* PREFIX_VEX_0F53 */ - { - { "vrcpps", { XM, EXx }, 0 }, - { "vrcpss", { XMScalar, VexScalar, EXd }, 0 }, - }, - - /* PREFIX_VEX_0F58 */ - { - { "%XEvaddpX", { XM, Vex, EXx, EXxEVexR }, 0 }, - { "%XEvadds%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 }, - { "%XEvaddpX", { XM, Vex, EXx, EXxEVexR }, 0 }, - { "%XEvadds%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, - }, - - /* PREFIX_VEX_0F59 */ - { - { "%XEvmulpX", { XM, Vex, EXx, EXxEVexR }, 0 }, - { "%XEvmuls%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 }, - { "%XEvmulpX", { XM, Vex, EXx, EXxEVexR }, 0 }, - { "%XEvmuls%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, - }, - - /* PREFIX_VEX_0F5A */ - { - { "%XEvcvtp%XS2pd", { XM, EXEvexHalfBcstXmmq, EXxEVexS }, 0 }, - { "%XEvcvts%XS2sd", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 }, - { "%XEvcvtp%XD2ps%XY", { XMxmmq, EXx, EXxEVexR }, 0 }, - { "%XEvcvts%XD2ss", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, - }, - - /* PREFIX_VEX_0F5B */ - { - { "vcvtdq2ps", { XM, EXx }, 0 }, - { "vcvttps2dq", { XM, EXx }, 0 }, - { "vcvtps2dq", { XM, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F5C */ - { - { "%XEvsubpX", { XM, Vex, EXx, EXxEVexR }, 0 }, - { "%XEvsubs%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 }, - { "%XEvsubpX", { XM, Vex, EXx, EXxEVexR }, 0 }, - { "%XEvsubs%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, - }, - - /* PREFIX_VEX_0F5D */ - { - { "%XEvminpX", { XM, Vex, EXx, EXxEVexS }, 0 }, - { "%XEvmins%XS", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 }, - { "%XEvminpX", { XM, Vex, EXx, EXxEVexS }, 0 }, - { "%XEvmins%XD", { XMScalar, VexScalar, EXq, EXxEVexS }, 0 }, - }, - - /* PREFIX_VEX_0F5E */ - { - { "%XEvdivpX", { XM, Vex, EXx, EXxEVexR }, 0 }, - { "%XEvdivs%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 }, - { "%XEvdivpX", { XM, Vex, EXx, EXxEVexR }, 0 }, - { "%XEvdivs%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 }, - }, - - /* PREFIX_VEX_0F5F */ - { - { "%XEvmaxpX", { XM, Vex, EXx, EXxEVexS }, 0 }, - { "%XEvmaxs%XS", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 }, - { "%XEvmaxpX", { XM, Vex, EXx, EXxEVexS }, 0 }, - { "%XEvmaxs%XD", { XMScalar, VexScalar, EXq, EXxEVexS }, 0 }, + { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 }, }, /* PREFIX_VEX_0F6F */ @@ -3959,22 +3752,6 @@ static const struct dis386 prefix_table[][4] = { { "vpshuflw", { XM, EXx, Ib }, 0 }, }, - /* PREFIX_VEX_0F7C */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vhaddpd", { XM, Vex, EXx }, 0 }, - { "vhaddps", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F7D */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vhsubpd", { XM, Vex, EXx }, 0 }, - { "vhsubps", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_VEX_0F7E */ { { Bad_Opcode }, @@ -4003,110 +3780,78 @@ static const struct dis386 prefix_table[][4] = { { "kmovd", { MaskG, MaskBDE }, 0 }, }, - /* PREFIX_VEX_0F91_L_0_M_0_W_0 */ + /* PREFIX_VEX_0F91_L_0_W_0 */ { - { "kmovw", { Ew, MaskG }, 0 }, + { "kmovw", { Mw, MaskG }, 0 }, { Bad_Opcode }, - { "kmovb", { Eb, MaskG }, 0 }, + { "kmovb", { Mb, MaskG }, 0 }, }, - /* PREFIX_VEX_0F91_L_0_M_0_W_1 */ + /* PREFIX_VEX_0F91_L_0_W_1 */ { - { "kmovq", { Eq, MaskG }, 0 }, + { "kmovq", { Mq, MaskG }, 0 }, { Bad_Opcode }, - { "kmovd", { Ed, MaskG }, 0 }, + { "kmovd", { Md, MaskG }, 0 }, }, - /* PREFIX_VEX_0F92_L_0_M_1_W_0 */ + /* PREFIX_VEX_0F92_L_0_W_0 */ { - { "kmovw", { MaskG, Edq }, 0 }, + { "kmovw", { MaskG, Rdq }, 0 }, { Bad_Opcode }, - { "kmovb", { MaskG, Edq }, 0 }, - { "kmovd", { MaskG, Edq }, 0 }, + { "kmovb", { MaskG, Rdq }, 0 }, + { "kmovd", { MaskG, Rdq }, 0 }, }, - /* PREFIX_VEX_0F92_L_0_M_1_W_1 */ + /* PREFIX_VEX_0F92_L_0_W_1 */ { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { "kmovK", { MaskG, Edq }, 0 }, + { "kmovK", { MaskG, Rdq }, 0 }, }, - /* PREFIX_VEX_0F93_L_0_M_1_W_0 */ + /* PREFIX_VEX_0F93_L_0_W_0 */ { - { "kmovw", { Gdq, MaskE }, 0 }, + { "kmovw", { Gdq, MaskR }, 0 }, { Bad_Opcode }, - { "kmovb", { Gdq, MaskE }, 0 }, - { "kmovd", { Gdq, MaskE }, 0 }, + { "kmovb", { Gdq, MaskR }, 0 }, + { "kmovd", { Gdq, MaskR }, 0 }, }, - /* PREFIX_VEX_0F93_L_0_M_1_W_1 */ + /* PREFIX_VEX_0F93_L_0_W_1 */ { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { "kmovK", { Gdq, MaskE }, 0 }, + { "kmovK", { Gdq, MaskR }, 0 }, }, - /* PREFIX_VEX_0F98_L_0_M_1_W_0 */ + /* PREFIX_VEX_0F98_L_0_W_0 */ { - { "kortestw", { MaskG, MaskE }, 0 }, + { "kortestw", { MaskG, MaskR }, 0 }, { Bad_Opcode }, - { "kortestb", { MaskG, MaskE }, 0 }, + { "kortestb", { MaskG, MaskR }, 0 }, }, - /* PREFIX_VEX_0F98_L_0_M_1_W_1 */ + /* PREFIX_VEX_0F98_L_0_W_1 */ { - { "kortestq", { MaskG, MaskE }, 0 }, + { "kortestq", { MaskG, MaskR }, 0 }, { Bad_Opcode }, - { "kortestd", { MaskG, MaskE }, 0 }, + { "kortestd", { MaskG, MaskR }, 0 }, }, - /* PREFIX_VEX_0F99_L_0_M_1_W_0 */ + /* PREFIX_VEX_0F99_L_0_W_0 */ { - { "ktestw", { MaskG, MaskE }, 0 }, + { "ktestw", { MaskG, MaskR }, 0 }, { Bad_Opcode }, - { "ktestb", { MaskG, MaskE }, 0 }, + { "ktestb", { MaskG, MaskR }, 0 }, }, - /* PREFIX_VEX_0F99_L_0_M_1_W_1 */ + /* PREFIX_VEX_0F99_L_0_W_1 */ { - { "ktestq", { MaskG, MaskE }, 0 }, + { "ktestq", { MaskG, MaskR }, 0 }, { Bad_Opcode }, - { "ktestd", { MaskG, MaskE }, 0 }, - }, - - /* PREFIX_VEX_0FC2 */ - { - { "vcmpps", { XM, Vex, EXx, CMP }, 0 }, - { "vcmpss", { XMScalar, VexScalar, EXd, CMP }, 0 }, - { "vcmppd", { XM, Vex, EXx, CMP }, 0 }, - { "vcmpsd", { XMScalar, VexScalar, EXq, CMP }, 0 }, - }, - - /* PREFIX_VEX_0FD0 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vaddsubpd", { XM, Vex, EXx }, 0 }, - { "vaddsubps", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FE6 */ - { - { Bad_Opcode }, - { "vcvtdq2pd", { XM, EXxmmq }, 0 }, - { "vcvttpd2dq%XY", { XMM, EXx }, 0 }, - { "vcvtpd2dq%XY", { XMM, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FF0 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) }, + { "ktestd", { MaskG, MaskR }, 0 }, }, /* PREFIX_VEX_0F3849_X86_64_L_0_W_0_M_0 */ @@ -4124,7 +3869,7 @@ static const struct dis386 prefix_table[][4] = { { RM_TABLE (RM_VEX_0F3849_X86_64_L_0_W_0_M_1_P_3) }, }, - /* PREFIX_VEX_0F384B_X86_64_L_0_W_0_M_0 */ + /* PREFIX_VEX_0F384B_X86_64_L_0_W_0 */ { { Bad_Opcode }, { "tilestored", { MVexSIBMEM, TMM }, 0 }, @@ -4147,27 +3892,27 @@ static const struct dis386 prefix_table[][4] = { { "%XVvpdpbusds", { XM, Vex, EXx }, 0 }, { "vpdpbssds", { XM, Vex, EXx }, 0 }, }, - /* PREFIX_VEX_0F385C_X86_64_M_1_L_0_W_0 */ + /* PREFIX_VEX_0F385C_X86_64_L_0_W_0 */ { { Bad_Opcode }, - { "tdpbf16ps", { TMM, EXtmm, VexTmm }, 0 }, + { "tdpbf16ps", { TMM, Rtmm, VexTmm }, 0 }, { Bad_Opcode }, - { "tdpfp16ps", { TMM, EXtmm, VexTmm }, 0 }, + { "tdpfp16ps", { TMM, Rtmm, VexTmm }, 0 }, }, - /* PREFIX_VEX_0F385E_X86_64_M_1_L_0_W_0 */ + /* PREFIX_VEX_0F385E_X86_64_L_0_W_0 */ { - { "tdpbuud", {TMM, EXtmm, VexTmm }, 0 }, - { "tdpbsud", {TMM, EXtmm, VexTmm }, 0 }, - { "tdpbusd", {TMM, EXtmm, VexTmm }, 0 }, - { "tdpbssd", {TMM, EXtmm, VexTmm }, 0 }, + { "tdpbuud", {TMM, Rtmm, VexTmm }, 0 }, + { "tdpbsud", {TMM, Rtmm, VexTmm }, 0 }, + { "tdpbusd", {TMM, Rtmm, VexTmm }, 0 }, + { "tdpbssd", {TMM, Rtmm, VexTmm }, 0 }, }, - /* PREFIX_VEX_0F386C_X86_64_M_1_L_0_W_0 */ + /* PREFIX_VEX_0F386C_X86_64_L_0_W_0 */ { - { "tcmmrlfp16ps", { TMM, EXtmm, VexTmm }, 0 }, + { "tcmmrlfp16ps", { TMM, Rtmm, VexTmm }, 0 }, { Bad_Opcode }, - { "tcmmimfp16ps", { TMM, EXtmm, VexTmm }, 0 }, + { "tcmmimfp16ps", { TMM, Rtmm, VexTmm }, 0 }, }, /* PREFIX_VEX_0F3872 */ @@ -4191,6 +3936,52 @@ static const struct dis386 prefix_table[][4] = { { "vbcstnesh2ps", { XM, Mw }, 0 }, }, + /* PREFIX_VEX_0F38D2_W_0 */ + { + { "vpdpwuud", { XM, Vex, EXx }, 0 }, + { "vpdpwsud", { XM, Vex, EXx }, 0 }, + { "vpdpwusd", { XM, Vex, EXx }, 0 }, + }, + + /* PREFIX_VEX_0F38D3_W_0 */ + { + { "vpdpwuuds", { XM, Vex, EXx }, 0 }, + { "vpdpwsuds", { XM, Vex, EXx }, 0 }, + { "vpdpwusds", { XM, Vex, EXx }, 0 }, + }, + + /* PREFIX_VEX_0F38CB */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F38CB_P_3) }, + }, + + /* PREFIX_VEX_0F38CC */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F38CC_P_3) }, + }, + + /* PREFIX_VEX_0F38CD */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F38CD_P_3) }, + }, + + /* PREFIX_VEX_0F38DA_W_0 */ + { + { VEX_LEN_TABLE (VEX_LEN_0F38DA_W_0_P_0) }, + { "vsm4key4", { XM, Vex, EXx }, 0 }, + { VEX_LEN_TABLE (VEX_LEN_0F38DA_W_0_P_2) }, + { "vsm4rnds4", { XM, Vex, EXx }, 0 }, + }, + /* PREFIX_VEX_0F38F5_L_0 */ { { "bzhiS", { Gdq, Edq, VexGdq }, 0 }, @@ -4295,12 +4086,12 @@ static const struct dis386 x86_64_table[][2] = { /* X86_64_62 */ { { MOD_TABLE (MOD_62_32BIT) }, - { EVEX_TABLE (EVEX_0F) }, + { EVEX_TABLE () }, }, /* X86_64_63 */ { - { "arpl", { Ew, Gw }, 0 }, + { "arplS", { Sv, Gv }, 0 }, { "movs", { Gv, { MOVSXD_Fixup, movsxd_mode } }, 0 }, }, @@ -4342,13 +4133,13 @@ static const struct dis386 x86_64_table[][2] = { /* X86_64_C4 */ { { MOD_TABLE (MOD_C4_32BIT) }, - { VEX_C4_TABLE (VEX_0F) }, + { VEX_C4_TABLE () }, }, /* X86_64_C5 */ { { MOD_TABLE (MOD_C5_32BIT) }, - { VEX_C5_TABLE (VEX_0F) }, + { VEX_C5_TABLE () }, }, /* X86_64_CE */ @@ -4407,6 +4198,12 @@ static const struct dis386 x86_64_table[][2] = { { "rdmsrlist", { Skip_MODRM }, 0 }, }, + /* X86_64_0F01_REG_0_MOD_3_RM_7_P_0 */ + { + { Bad_Opcode }, + { "pbndkb", { Skip_MODRM }, 0 }, + }, + /* X86_64_0F01_REG_1 */ { { "sidt{Q|Q}", { M }, 0 }, @@ -4546,19 +4343,19 @@ static const struct dis386 x86_64_table[][2] = { /* X86_64_VEX_0F385C */ { { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F385C_X86_64) }, + { VEX_LEN_TABLE (VEX_LEN_0F385C_X86_64) }, }, /* X86_64_VEX_0F385E */ { { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F385E_X86_64) }, + { VEX_LEN_TABLE (VEX_LEN_0F385E_X86_64) }, }, /* X86_64_VEX_0F386C */ { { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F386C_X86_64) }, + { VEX_LEN_TABLE (VEX_LEN_0F386C_X86_64) }, }, /* X86_64_VEX_0F38E0 */ @@ -4710,7 +4507,7 @@ static const struct dis386 three_byte_table[][256] = { /* 28 */ { "pmuldq", { XM, EXx }, PREFIX_DATA }, { "pcmpeqq", { XM, EXx }, PREFIX_DATA }, - { MOD_TABLE (MOD_0F382A) }, + { "movntdqa", { XM, Mx }, PREFIX_DATA }, { "packusdw", { XM, EXx }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, @@ -4938,12 +4735,12 @@ static const struct dis386 three_byte_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { MOD_TABLE (MOD_0F38F5) }, + { "wrussK", { M, Gdq }, PREFIX_DATA }, { PREFIX_TABLE (PREFIX_0F38F6) }, { Bad_Opcode }, /* f8 */ { PREFIX_TABLE (PREFIX_0F38F8) }, - { MOD_TABLE (MOD_0F38F9) }, + { "movdiri", { Mdq, Gdq }, PREFIX_OPCODE }, { PREFIX_TABLE (PREFIX_0F38FA) }, { PREFIX_TABLE (PREFIX_0F38FB) }, { PREFIX_TABLE (PREFIX_0F38FC) }, @@ -5397,9 +5194,9 @@ static const struct dis386 xop_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_85) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_86) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_87) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_85) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_86) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_87) }, /* 88 */ { Bad_Opcode }, { Bad_Opcode }, @@ -5407,17 +5204,17 @@ static const struct dis386 xop_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_8E) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_8F) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_8E) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_8F) }, /* 90 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_95) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_96) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_97) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_95) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_96) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_97) }, /* 98 */ { Bad_Opcode }, { Bad_Opcode }, @@ -5425,16 +5222,16 @@ static const struct dis386 xop_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_9E) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_9F) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_9E) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_9F) }, /* a0 */ { Bad_Opcode }, { Bad_Opcode }, { "vpcmov", { XM, Vex, EXx, XMVexI4 }, 0 }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_A3) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_A3) }, { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_A6) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_A6) }, { Bad_Opcode }, /* a8 */ { Bad_Opcode }, @@ -5452,7 +5249,7 @@ static const struct dis386 xop_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_B6) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_B6) }, { Bad_Opcode }, /* b8 */ { Bad_Opcode }, @@ -5464,10 +5261,10 @@ static const struct dis386 xop_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, /* c0 */ - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_C0) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_C1) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_C2) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_C3) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_C0) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_C1) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_C2) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_C3) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -5477,10 +5274,10 @@ static const struct dis386 xop_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_CC) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_CD) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_CE) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_CF) }, /* d0 */ { Bad_Opcode }, { Bad_Opcode }, @@ -5513,10 +5310,10 @@ static const struct dis386 xop_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_EC) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_ED) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_EE) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_08_EF) }, /* f0 */ { Bad_Opcode }, { Bad_Opcode }, @@ -5540,8 +5337,8 @@ static const struct dis386 xop_table[][256] = { { /* 00 */ { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_01) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_02) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_01) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_02) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -5559,7 +5356,7 @@ static const struct dis386 xop_table[][256] = { /* 10 */ { Bad_Opcode }, { Bad_Opcode }, - { MOD_TABLE (MOD_XOP_09_12) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_12) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -5683,10 +5480,10 @@ static const struct dis386 xop_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, /* 80 */ - { VEX_W_TABLE (VEX_W_0FXOP_09_80) }, - { VEX_W_TABLE (VEX_W_0FXOP_09_81) }, - { VEX_W_TABLE (VEX_W_0FXOP_09_82) }, - { VEX_W_TABLE (VEX_W_0FXOP_09_83) }, + { VEX_W_TABLE (VEX_W_XOP_09_80) }, + { VEX_W_TABLE (VEX_W_XOP_09_81) }, + { VEX_W_TABLE (VEX_W_XOP_09_82) }, + { VEX_W_TABLE (VEX_W_XOP_09_83) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -5701,19 +5498,19 @@ static const struct dis386 xop_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, /* 90 */ - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_90) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_91) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_92) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_93) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_94) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_95) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_96) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_97) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_90) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_91) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_92) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_93) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_94) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_95) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_96) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_97) }, /* 98 */ - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_98) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_99) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_9A) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_9B) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_98) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_99) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_9A) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_9B) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -5756,45 +5553,45 @@ static const struct dis386 xop_table[][256] = { { Bad_Opcode }, /* c0 */ { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_C1) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_C2) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_C3) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_C1) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_C2) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_C3) }, { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_C6) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_C7) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_C6) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_C7) }, /* c8 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_CB) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_CB) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, /* d0 */ { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_D1) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_D2) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_D3) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_D1) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_D2) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_D3) }, { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_D6) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_D7) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_D6) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_D7) }, /* d8 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_DB) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_DB) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, /* e0 */ { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_E1) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_E2) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_E3) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_E1) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_E2) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_E3) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -5850,7 +5647,7 @@ static const struct dis386 xop_table[][256] = { /* 10 */ { "bextrS", { Gdq, Edq, Id }, 0 }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_0A_12) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_0A_12) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -6142,14 +5939,14 @@ static const struct dis386 vex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, /* 10 */ - { PREFIX_TABLE (PREFIX_VEX_0F10) }, - { PREFIX_TABLE (PREFIX_VEX_0F11) }, + { PREFIX_TABLE (PREFIX_0F10) }, + { PREFIX_TABLE (PREFIX_0F11) }, { PREFIX_TABLE (PREFIX_VEX_0F12) }, - { MOD_TABLE (MOD_VEX_0F13) }, + { VEX_LEN_TABLE (VEX_LEN_0F13) }, { "vunpcklpX", { XM, Vex, EXx }, PREFIX_OPCODE }, { "vunpckhpX", { XM, Vex, EXx }, PREFIX_OPCODE }, { PREFIX_TABLE (PREFIX_VEX_0F16) }, - { MOD_TABLE (MOD_VEX_0F17) }, + { VEX_LEN_TABLE (VEX_LEN_0F17) }, /* 18 */ { Bad_Opcode }, { Bad_Opcode }, @@ -6172,11 +5969,11 @@ static const struct dis386 vex_table[][256] = { { "vmovapX", { XM, EXx }, PREFIX_OPCODE }, { "vmovapX", { EXxS, XM }, PREFIX_OPCODE }, { PREFIX_TABLE (PREFIX_VEX_0F2A) }, - { MOD_TABLE (MOD_VEX_0F2B) }, + { "vmovntpX", { Mx, XM }, PREFIX_OPCODE }, { PREFIX_TABLE (PREFIX_VEX_0F2C) }, { PREFIX_TABLE (PREFIX_VEX_0F2D) }, - { PREFIX_TABLE (PREFIX_VEX_0F2E) }, - { PREFIX_TABLE (PREFIX_VEX_0F2F) }, + { PREFIX_TABLE (PREFIX_0F2E) }, + { PREFIX_TABLE (PREFIX_0F2F) }, /* 30 */ { Bad_Opcode }, { Bad_Opcode }, @@ -6214,23 +6011,23 @@ static const struct dis386 vex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, /* 50 */ - { MOD_TABLE (MOD_VEX_0F50) }, - { PREFIX_TABLE (PREFIX_VEX_0F51) }, - { PREFIX_TABLE (PREFIX_VEX_0F52) }, - { PREFIX_TABLE (PREFIX_VEX_0F53) }, + { "vmovmskpX", { Gdq, Ux }, PREFIX_OPCODE }, + { PREFIX_TABLE (PREFIX_0F51) }, + { PREFIX_TABLE (PREFIX_0F52) }, + { PREFIX_TABLE (PREFIX_0F53) }, { "vandpX", { XM, Vex, EXx }, PREFIX_OPCODE }, { "vandnpX", { XM, Vex, EXx }, PREFIX_OPCODE }, { "vorpX", { XM, Vex, EXx }, PREFIX_OPCODE }, { "vxorpX", { XM, Vex, EXx }, PREFIX_OPCODE }, /* 58 */ - { PREFIX_TABLE (PREFIX_VEX_0F58) }, - { PREFIX_TABLE (PREFIX_VEX_0F59) }, - { PREFIX_TABLE (PREFIX_VEX_0F5A) }, - { PREFIX_TABLE (PREFIX_VEX_0F5B) }, - { PREFIX_TABLE (PREFIX_VEX_0F5C) }, - { PREFIX_TABLE (PREFIX_VEX_0F5D) }, - { PREFIX_TABLE (PREFIX_VEX_0F5E) }, - { PREFIX_TABLE (PREFIX_VEX_0F5F) }, + { PREFIX_TABLE (PREFIX_0F58) }, + { PREFIX_TABLE (PREFIX_0F59) }, + { PREFIX_TABLE (PREFIX_0F5A) }, + { PREFIX_TABLE (PREFIX_0F5B) }, + { PREFIX_TABLE (PREFIX_0F5C) }, + { PREFIX_TABLE (PREFIX_0F5D) }, + { PREFIX_TABLE (PREFIX_0F5E) }, + { PREFIX_TABLE (PREFIX_0F5F) }, /* 60 */ { "vpunpcklbw", { XM, Vex, EXx }, PREFIX_DATA }, { "vpunpcklwd", { XM, Vex, EXx }, PREFIX_DATA }, @@ -6251,9 +6048,9 @@ static const struct dis386 vex_table[][256] = { { PREFIX_TABLE (PREFIX_VEX_0F6F) }, /* 70 */ { PREFIX_TABLE (PREFIX_VEX_0F70) }, - { MOD_TABLE (MOD_VEX_0F71) }, - { MOD_TABLE (MOD_VEX_0F72) }, - { MOD_TABLE (MOD_VEX_0F73) }, + { REG_TABLE (REG_VEX_0F71) }, + { REG_TABLE (REG_VEX_0F72) }, + { REG_TABLE (REG_VEX_0F73) }, { "vpcmpeqb", { XM, Vex, EXx }, PREFIX_DATA }, { "vpcmpeqw", { XM, Vex, EXx }, PREFIX_DATA }, { "vpcmpeqd", { XM, Vex, EXx }, PREFIX_DATA }, @@ -6263,8 +6060,8 @@ static const struct dis386 vex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F7C) }, - { PREFIX_TABLE (PREFIX_VEX_0F7D) }, + { PREFIX_TABLE (PREFIX_0F7C) }, + { PREFIX_TABLE (PREFIX_0F7D) }, { PREFIX_TABLE (PREFIX_VEX_0F7E) }, { PREFIX_TABLE (PREFIX_VEX_0F7F) }, /* 80 */ @@ -6342,10 +6139,10 @@ static const struct dis386 vex_table[][256] = { /* c0 */ { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0FC2) }, + { PREFIX_TABLE (PREFIX_0FC2) }, { Bad_Opcode }, { VEX_LEN_TABLE (VEX_LEN_0FC4) }, - { VEX_LEN_TABLE (VEX_LEN_0FC5) }, + { "vpextrw", { Gd, Uxmm, Ib }, PREFIX_DATA }, { "vshufpX", { XM, Vex, EXx, Ib }, PREFIX_OPCODE }, { Bad_Opcode }, /* c8 */ @@ -6358,14 +6155,14 @@ static const struct dis386 vex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, /* d0 */ - { PREFIX_TABLE (PREFIX_VEX_0FD0) }, + { PREFIX_TABLE (PREFIX_0FD0) }, { "vpsrlw", { XM, Vex, EXxmm }, PREFIX_DATA }, { "vpsrld", { XM, Vex, EXxmm }, PREFIX_DATA }, { "vpsrlq", { XM, Vex, EXxmm }, PREFIX_DATA }, { "vpaddq", { XM, Vex, EXx }, PREFIX_DATA }, { "vpmullw", { XM, Vex, EXx }, PREFIX_DATA }, { VEX_LEN_TABLE (VEX_LEN_0FD6) }, - { MOD_TABLE (MOD_VEX_0FD7) }, + { "vpmovmskb", { Gdq, Ux }, PREFIX_DATA }, /* d8 */ { "vpsubusb", { XM, Vex, EXx }, PREFIX_DATA }, { "vpsubusw", { XM, Vex, EXx }, PREFIX_DATA }, @@ -6382,8 +6179,8 @@ static const struct dis386 vex_table[][256] = { { "vpavgw", { XM, Vex, EXx }, PREFIX_DATA }, { "vpmulhuw", { XM, Vex, EXx }, PREFIX_DATA }, { "vpmulhw", { XM, Vex, EXx }, PREFIX_DATA }, - { PREFIX_TABLE (PREFIX_VEX_0FE6) }, - { MOD_TABLE (MOD_VEX_0FE7) }, + { PREFIX_TABLE (PREFIX_0FE6) }, + { "vmovntdq", { Mx, XM }, PREFIX_DATA }, /* e8 */ { "vpsubsb", { XM, Vex, EXx }, PREFIX_DATA }, { "vpsubsw", { XM, Vex, EXx }, PREFIX_DATA }, @@ -6394,14 +6191,14 @@ static const struct dis386 vex_table[][256] = { { "vpmaxsw", { XM, Vex, EXx }, PREFIX_DATA }, { "vpxor", { XM, Vex, EXx }, PREFIX_DATA }, /* f0 */ - { PREFIX_TABLE (PREFIX_VEX_0FF0) }, + { PREFIX_TABLE (PREFIX_0FF0) }, { "vpsllw", { XM, Vex, EXxmm }, PREFIX_DATA }, { "vpslld", { XM, Vex, EXxmm }, PREFIX_DATA }, { "vpsllq", { XM, Vex, EXxmm }, PREFIX_DATA }, { "vpmuludq", { XM, Vex, EXx }, PREFIX_DATA }, { "vpmaddwd", { XM, Vex, EXx }, PREFIX_DATA }, { "vpsadbw", { XM, Vex, EXx }, PREFIX_DATA }, - { VEX_LEN_TABLE (VEX_LEN_0FF7) }, + { "vmaskmovdqu", { XM, Uxmm }, PREFIX_DATA }, /* f8 */ { "vpsubb", { XM, Vex, EXx }, PREFIX_DATA }, { "vpsubw", { XM, Vex, EXx }, PREFIX_DATA }, @@ -6444,7 +6241,7 @@ static const struct dis386 vex_table[][256] = { /* 18 */ { VEX_W_TABLE (VEX_W_0F3818) }, { VEX_LEN_TABLE (VEX_LEN_0F3819) }, - { MOD_TABLE (MOD_VEX_0F381A) }, + { VEX_LEN_TABLE (VEX_LEN_0F381A) }, { Bad_Opcode }, { "vpabsb", { XM, EXx }, PREFIX_DATA }, { "vpabsw", { XM, EXx }, PREFIX_DATA }, @@ -6462,12 +6259,12 @@ static const struct dis386 vex_table[][256] = { /* 28 */ { "vpmuldq", { XM, Vex, EXx }, PREFIX_DATA }, { "vpcmpeqq", { XM, Vex, EXx }, PREFIX_DATA }, - { MOD_TABLE (MOD_VEX_0F382A) }, + { "vmovntdqa", { XM, Mx }, PREFIX_DATA }, { "vpackusdw", { XM, Vex, EXx }, PREFIX_DATA }, - { MOD_TABLE (MOD_VEX_0F382C) }, - { MOD_TABLE (MOD_VEX_0F382D) }, - { MOD_TABLE (MOD_VEX_0F382E) }, - { MOD_TABLE (MOD_VEX_0F382F) }, + { VEX_W_TABLE (VEX_W_0F382C) }, + { VEX_W_TABLE (VEX_W_0F382D) }, + { VEX_W_TABLE (VEX_W_0F382E) }, + { VEX_W_TABLE (VEX_W_0F382F) }, /* 30 */ { "vpmovzxbw", { XM, EXxmmq }, PREFIX_DATA }, { "vpmovzxbd", { XM, EXxmmqd }, PREFIX_DATA }, @@ -6516,7 +6313,7 @@ static const struct dis386 vex_table[][256] = { /* 58 */ { VEX_W_TABLE (VEX_W_0F3858) }, { VEX_W_TABLE (VEX_W_0F3859) }, - { MOD_TABLE (MOD_VEX_0F385A) }, + { VEX_LEN_TABLE (VEX_LEN_0F385A) }, { Bad_Opcode }, { X86_64_TABLE (X86_64_VEX_0F385C) }, { Bad_Opcode }, @@ -6572,9 +6369,9 @@ static const struct dis386 vex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F388C) }, + { "vpmaskmov%DQ", { XM, Vex, Mx }, PREFIX_DATA }, { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F388E) }, + { "vpmaskmov%DQ", { Mx, Vex, XM }, PREFIX_DATA }, { Bad_Opcode }, /* 90 */ { "vpgatherd%DQ", { XM, MVexVSIBDWpX, VexGatherD }, PREFIX_DATA }, @@ -6643,16 +6440,16 @@ static const struct dis386 vex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F38CB) }, + { PREFIX_TABLE (PREFIX_VEX_0F38CC) }, + { PREFIX_TABLE (PREFIX_VEX_0F38CD) }, { Bad_Opcode }, { VEX_W_TABLE (VEX_W_0F38CF) }, /* d0 */ { Bad_Opcode }, { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F38D2) }, + { VEX_W_TABLE (VEX_W_0F38D3) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -6660,7 +6457,7 @@ static const struct dis386 vex_table[][256] = { /* d8 */ { Bad_Opcode }, { Bad_Opcode }, - { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F38DA) }, { VEX_LEN_TABLE (VEX_LEN_0F38DB) }, { "vaesenc", { XM, Vex, EXx }, PREFIX_DATA }, { "vaesenclast", { XM, Vex, EXx }, PREFIX_DATA }, @@ -6955,7 +6752,7 @@ static const struct dis386 vex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3ADE) }, { VEX_LEN_TABLE (VEX_LEN_0F3ADF) }, /* e0 */ { Bad_Opcode }, @@ -6999,86 +6796,86 @@ static const struct dis386 vex_table[][256] = { #include "i386-dis-evex.h" static const struct dis386 vex_len_table[][2] = { - /* VEX_LEN_0F12_P_0_M_0 / VEX_LEN_0F12_P_2_M_0 */ + /* VEX_LEN_0F12_P_0 */ { - { "%XEvmovlpX", { XM, Vex, EXq }, 0 }, + { MOD_TABLE (MOD_0F12_PREFIX_0) }, }, - /* VEX_LEN_0F12_P_0_M_1 */ + /* VEX_LEN_0F12_P_2 */ { - { "%XEvmovhlp%XS", { XM, Vex, EXq }, 0 }, + { "%XEVmovlpYX", { XM, Vex, Mq }, 0 }, }, - /* VEX_LEN_0F13_M_0 */ + /* VEX_LEN_0F13 */ { - { "%XEvmovlpX", { EXq, XM }, PREFIX_OPCODE }, + { "%XEVmovlpYX", { Mq, XM }, PREFIX_OPCODE }, }, - /* VEX_LEN_0F16_P_0_M_0 / VEX_LEN_0F16_P_2_M_0 */ + /* VEX_LEN_0F16_P_0 */ { - { "%XEvmovhpX", { XM, Vex, EXq }, 0 }, + { MOD_TABLE (MOD_0F16_PREFIX_0) }, }, - /* VEX_LEN_0F16_P_0_M_1 */ + /* VEX_LEN_0F16_P_2 */ { - { "%XEvmovlhp%XS", { XM, Vex, EXq }, 0 }, + { "%XEVmovhpYX", { XM, Vex, Mq }, 0 }, }, - /* VEX_LEN_0F17_M_0 */ + /* VEX_LEN_0F17 */ { - { "%XEvmovhpX", { EXq, XM }, PREFIX_OPCODE }, + { "%XEVmovhpYX", { Mq, XM }, PREFIX_OPCODE }, }, /* VEX_LEN_0F41 */ { { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F41_L_1) }, + { VEX_W_TABLE (VEX_W_0F41_L_1) }, }, /* VEX_LEN_0F42 */ { { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F42_L_1) }, + { VEX_W_TABLE (VEX_W_0F42_L_1) }, }, /* VEX_LEN_0F44 */ { - { MOD_TABLE (MOD_VEX_0F44_L_0) }, + { VEX_W_TABLE (VEX_W_0F44_L_0) }, }, /* VEX_LEN_0F45 */ { { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F45_L_1) }, + { VEX_W_TABLE (VEX_W_0F45_L_1) }, }, /* VEX_LEN_0F46 */ { { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F46_L_1) }, + { VEX_W_TABLE (VEX_W_0F46_L_1) }, }, /* VEX_LEN_0F47 */ { { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F47_L_1) }, + { VEX_W_TABLE (VEX_W_0F47_L_1) }, }, /* VEX_LEN_0F4A */ { { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F4A_L_1) }, + { VEX_W_TABLE (VEX_W_0F4A_L_1) }, }, /* VEX_LEN_0F4B */ { { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F4B_L_1) }, + { VEX_W_TABLE (VEX_W_0F4B_L_1) }, }, /* VEX_LEN_0F6E */ { - { "%XEvmovK", { XMScalar, Edq }, PREFIX_DATA }, + { "%XEvmovYK", { XMScalar, Edq }, PREFIX_DATA }, }, /* VEX_LEN_0F77 */ @@ -7089,7 +6886,7 @@ static const struct dis386 vex_len_table[][2] = { /* VEX_LEN_0F7E_P_1 */ { - { "%XEvmovq", { XMScalar, EXq }, 0 }, + { "%XEvmovqY", { XMScalar, EXq }, 0 }, }, /* VEX_LEN_0F7E_P_2 */ @@ -7104,57 +6901,47 @@ static const struct dis386 vex_len_table[][2] = { /* VEX_LEN_0F91 */ { - { MOD_TABLE (MOD_VEX_0F91_L_0) }, + { VEX_W_TABLE (VEX_W_0F91_L_0) }, }, /* VEX_LEN_0F92 */ { - { MOD_TABLE (MOD_VEX_0F92_L_0) }, + { VEX_W_TABLE (VEX_W_0F92_L_0) }, }, /* VEX_LEN_0F93 */ { - { MOD_TABLE (MOD_VEX_0F93_L_0) }, + { VEX_W_TABLE (VEX_W_0F93_L_0) }, }, /* VEX_LEN_0F98 */ { - { MOD_TABLE (MOD_VEX_0F98_L_0) }, + { VEX_W_TABLE (VEX_W_0F98_L_0) }, }, /* VEX_LEN_0F99 */ { - { MOD_TABLE (MOD_VEX_0F99_L_0) }, + { VEX_W_TABLE (VEX_W_0F99_L_0) }, }, - /* VEX_LEN_0FAE_R_2_M_0 */ + /* VEX_LEN_0FAE_R_2 */ { { "vldmxcsr", { Md }, 0 }, }, - /* VEX_LEN_0FAE_R_3_M_0 */ + /* VEX_LEN_0FAE_R_3 */ { { "vstmxcsr", { Md }, 0 }, }, /* VEX_LEN_0FC4 */ { - { "%XEvpinsrw", { XM, Vex, Edw, Ib }, PREFIX_DATA }, - }, - - /* VEX_LEN_0FC5 */ - { - { "%XEvpextrw", { Gd, XS, Ib }, PREFIX_DATA }, + { "%XEvpinsrwY", { XM, Vex, Edw, Ib }, PREFIX_DATA }, }, /* VEX_LEN_0FD6 */ { - { "%XEvmovq", { EXqS, XMScalar }, PREFIX_DATA }, - }, - - /* VEX_LEN_0FF7 */ - { - { "vmaskmovdqu", { XM, XS }, PREFIX_DATA }, + { "%XEvmovqY", { EXqS, XMScalar }, PREFIX_DATA }, }, /* VEX_LEN_0F3816 */ @@ -7169,10 +6956,10 @@ static const struct dis386 vex_len_table[][2] = { { VEX_W_TABLE (VEX_W_0F3819_L_1) }, }, - /* VEX_LEN_0F381A_M_0 */ + /* VEX_LEN_0F381A */ { { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F381A_M_0_L_1) }, + { VEX_W_TABLE (VEX_W_0F381A_L_1) }, }, /* VEX_LEN_0F3836 */ @@ -7196,25 +6983,53 @@ static const struct dis386 vex_len_table[][2] = { { VEX_W_TABLE (VEX_W_0F384B_X86_64_L_0) }, }, - /* VEX_LEN_0F385A_M_0 */ + /* VEX_LEN_0F385A */ { { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F385A_M_0_L_0) }, + { VEX_W_TABLE (VEX_W_0F385A_L_0) }, }, - /* VEX_LEN_0F385C_X86_64_M_1 */ + /* VEX_LEN_0F385C_X86_64 */ { - { VEX_W_TABLE (VEX_W_0F385C_X86_64_M_1_L_0) }, + { VEX_W_TABLE (VEX_W_0F385C_X86_64_L_0) }, }, - /* VEX_LEN_0F385E_X86_64_M_1 */ + /* VEX_LEN_0F385E_X86_64 */ { - { VEX_W_TABLE (VEX_W_0F385E_X86_64_M_1_L_0) }, + { VEX_W_TABLE (VEX_W_0F385E_X86_64_L_0) }, }, - /* VEX_LEN_0F386C_X86_64_M_1 */ + /* VEX_LEN_0F386C_X86_64 */ { - { VEX_W_TABLE (VEX_W_0F386C_X86_64_M_1_L_0) }, + { VEX_W_TABLE (VEX_W_0F386C_X86_64_L_0) }, + }, + + /* VEX_LEN_0F38CB_P_3_W_0 */ + { + { Bad_Opcode }, + { "vsha512rnds2", { XM, Vex, Rxmmq }, 0 }, + }, + + /* VEX_LEN_0F38CC_P_3_W_0 */ + { + { Bad_Opcode }, + { "vsha512msg1", { XM, Rxmmq }, 0 }, + }, + + /* VEX_LEN_0F38CD_P_3_W_0 */ + { + { Bad_Opcode }, + { "vsha512msg2", { XM, Rymm }, 0 }, + }, + + /* VEX_LEN_0F38DA_W_0_P_0 */ + { + { "vsm3msg1", { XM, Vex, EXxmm }, 0 }, + }, + + /* VEX_LEN_0F38DA_W_0_P_2 */ + { + { "vsm3msg2", { XM, Vex, EXxmm }, 0 }, }, /* VEX_LEN_0F38DB */ @@ -7299,37 +7114,37 @@ static const struct dis386 vex_len_table[][2] = { /* VEX_LEN_0F3A20 */ { - { "%XEvpinsrb", { XM, Vex, Edb, Ib }, PREFIX_DATA }, + { "%XEvpinsrbY", { XM, Vex, Edb, Ib }, PREFIX_DATA }, }, /* VEX_LEN_0F3A21 */ { - { "%XEvinsertps", { XM, Vex, EXd, Ib }, PREFIX_DATA }, + { "%XEvinsertpsY", { XM, Vex, EXd, Ib }, PREFIX_DATA }, }, /* VEX_LEN_0F3A22 */ { - { "%XEvpinsrK", { XM, Vex, Edq, Ib }, PREFIX_DATA }, + { "%XEvpinsrYK", { XM, Vex, Edq, Ib }, PREFIX_DATA }, }, /* VEX_LEN_0F3A30 */ { - { MOD_TABLE (MOD_VEX_0F3A30_L_0) }, + { "kshiftr%BW", { MaskG, MaskR, Ib }, PREFIX_DATA }, }, /* VEX_LEN_0F3A31 */ { - { MOD_TABLE (MOD_VEX_0F3A31_L_0) }, + { "kshiftr%DQ", { MaskG, MaskR, Ib }, PREFIX_DATA }, }, /* VEX_LEN_0F3A32 */ { - { MOD_TABLE (MOD_VEX_0F3A32_L_0) }, + { "kshiftl%BW", { MaskG, MaskR, Ib }, PREFIX_DATA }, }, /* VEX_LEN_0F3A33 */ { - { MOD_TABLE (MOD_VEX_0F3A33_L_0) }, + { "kshiftl%DQ", { MaskG, MaskR, Ib }, PREFIX_DATA }, }, /* VEX_LEN_0F3A38 */ @@ -7375,6 +7190,11 @@ static const struct dis386 vex_len_table[][2] = { { "vpcmpistri", { XM, EXx, Ib }, PREFIX_DATA }, }, + /* VEX_LEN_0F3ADE_W_0 */ + { + { "vsm3rnds2", { XM, Vex, EXxmm, Ib }, PREFIX_DATA }, + }, + /* VEX_LEN_0F3ADF */ { { "vaeskeygenassist", { XM, EXx, Ib }, PREFIX_DATA }, @@ -7385,292 +7205,292 @@ static const struct dis386 vex_len_table[][2] = { { PREFIX_TABLE (PREFIX_VEX_0F3AF0_L_0) }, }, - /* VEX_LEN_0FXOP_08_85 */ + /* VEX_LEN_XOP_08_85 */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_85_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_85_L_0) }, }, - /* VEX_LEN_0FXOP_08_86 */ + /* VEX_LEN_XOP_08_86 */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_86_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_86_L_0) }, }, - /* VEX_LEN_0FXOP_08_87 */ + /* VEX_LEN_XOP_08_87 */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_87_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_87_L_0) }, }, - /* VEX_LEN_0FXOP_08_8E */ + /* VEX_LEN_XOP_08_8E */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_8E_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_8E_L_0) }, }, - /* VEX_LEN_0FXOP_08_8F */ + /* VEX_LEN_XOP_08_8F */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_8F_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_8F_L_0) }, }, - /* VEX_LEN_0FXOP_08_95 */ + /* VEX_LEN_XOP_08_95 */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_95_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_95_L_0) }, }, - /* VEX_LEN_0FXOP_08_96 */ + /* VEX_LEN_XOP_08_96 */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_96_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_96_L_0) }, }, - /* VEX_LEN_0FXOP_08_97 */ + /* VEX_LEN_XOP_08_97 */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_97_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_97_L_0) }, }, - /* VEX_LEN_0FXOP_08_9E */ + /* VEX_LEN_XOP_08_9E */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_9E_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_9E_L_0) }, }, - /* VEX_LEN_0FXOP_08_9F */ + /* VEX_LEN_XOP_08_9F */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_9F_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_9F_L_0) }, }, - /* VEX_LEN_0FXOP_08_A3 */ + /* VEX_LEN_XOP_08_A3 */ { { "vpperm", { XM, Vex, EXx, XMVexI4 }, 0 }, }, - /* VEX_LEN_0FXOP_08_A6 */ + /* VEX_LEN_XOP_08_A6 */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_A6_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_A6_L_0) }, }, - /* VEX_LEN_0FXOP_08_B6 */ + /* VEX_LEN_XOP_08_B6 */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_B6_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_B6_L_0) }, }, - /* VEX_LEN_0FXOP_08_C0 */ + /* VEX_LEN_XOP_08_C0 */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_C0_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_C0_L_0) }, }, - /* VEX_LEN_0FXOP_08_C1 */ + /* VEX_LEN_XOP_08_C1 */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_C1_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_C1_L_0) }, }, - /* VEX_LEN_0FXOP_08_C2 */ + /* VEX_LEN_XOP_08_C2 */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_C2_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_C2_L_0) }, }, - /* VEX_LEN_0FXOP_08_C3 */ + /* VEX_LEN_XOP_08_C3 */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_C3_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_C3_L_0) }, }, - /* VEX_LEN_0FXOP_08_CC */ + /* VEX_LEN_XOP_08_CC */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_CC_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_CC_L_0) }, }, - /* VEX_LEN_0FXOP_08_CD */ + /* VEX_LEN_XOP_08_CD */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_CD_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_CD_L_0) }, }, - /* VEX_LEN_0FXOP_08_CE */ + /* VEX_LEN_XOP_08_CE */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_CE_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_CE_L_0) }, }, - /* VEX_LEN_0FXOP_08_CF */ + /* VEX_LEN_XOP_08_CF */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_CF_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_CF_L_0) }, }, - /* VEX_LEN_0FXOP_08_EC */ + /* VEX_LEN_XOP_08_EC */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_EC_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_EC_L_0) }, }, - /* VEX_LEN_0FXOP_08_ED */ + /* VEX_LEN_XOP_08_ED */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_ED_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_ED_L_0) }, }, - /* VEX_LEN_0FXOP_08_EE */ + /* VEX_LEN_XOP_08_EE */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_EE_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_EE_L_0) }, }, - /* VEX_LEN_0FXOP_08_EF */ + /* VEX_LEN_XOP_08_EF */ { - { VEX_W_TABLE (VEX_W_0FXOP_08_EF_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_08_EF_L_0) }, }, - /* VEX_LEN_0FXOP_09_01 */ + /* VEX_LEN_XOP_09_01 */ { { REG_TABLE (REG_XOP_09_01_L_0) }, }, - /* VEX_LEN_0FXOP_09_02 */ + /* VEX_LEN_XOP_09_02 */ { { REG_TABLE (REG_XOP_09_02_L_0) }, }, - /* VEX_LEN_0FXOP_09_12_M_1 */ + /* VEX_LEN_XOP_09_12 */ { - { REG_TABLE (REG_XOP_09_12_M_1_L_0) }, + { REG_TABLE (REG_XOP_09_12_L_0) }, }, - /* VEX_LEN_0FXOP_09_82_W_0 */ + /* VEX_LEN_XOP_09_82_W_0 */ { { "vfrczss", { XM, EXd }, 0 }, }, - /* VEX_LEN_0FXOP_09_83_W_0 */ + /* VEX_LEN_XOP_09_83_W_0 */ { { "vfrczsd", { XM, EXq }, 0 }, }, - /* VEX_LEN_0FXOP_09_90 */ + /* VEX_LEN_XOP_09_90 */ { { "vprotb", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0FXOP_09_91 */ + /* VEX_LEN_XOP_09_91 */ { { "vprotw", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0FXOP_09_92 */ + /* VEX_LEN_XOP_09_92 */ { { "vprotd", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0FXOP_09_93 */ + /* VEX_LEN_XOP_09_93 */ { { "vprotq", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0FXOP_09_94 */ + /* VEX_LEN_XOP_09_94 */ { { "vpshlb", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0FXOP_09_95 */ + /* VEX_LEN_XOP_09_95 */ { { "vpshlw", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0FXOP_09_96 */ + /* VEX_LEN_XOP_09_96 */ { { "vpshld", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0FXOP_09_97 */ + /* VEX_LEN_XOP_09_97 */ { { "vpshlq", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0FXOP_09_98 */ + /* VEX_LEN_XOP_09_98 */ { { "vpshab", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0FXOP_09_99 */ + /* VEX_LEN_XOP_09_99 */ { { "vpshaw", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0FXOP_09_9A */ + /* VEX_LEN_XOP_09_9A */ { { "vpshad", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0FXOP_09_9B */ + /* VEX_LEN_XOP_09_9B */ { { "vpshaq", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0FXOP_09_C1 */ + /* VEX_LEN_XOP_09_C1 */ { - { VEX_W_TABLE (VEX_W_0FXOP_09_C1_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_09_C1_L_0) }, }, - /* VEX_LEN_0FXOP_09_C2 */ + /* VEX_LEN_XOP_09_C2 */ { - { VEX_W_TABLE (VEX_W_0FXOP_09_C2_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_09_C2_L_0) }, }, - /* VEX_LEN_0FXOP_09_C3 */ + /* VEX_LEN_XOP_09_C3 */ { - { VEX_W_TABLE (VEX_W_0FXOP_09_C3_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_09_C3_L_0) }, }, - /* VEX_LEN_0FXOP_09_C6 */ + /* VEX_LEN_XOP_09_C6 */ { - { VEX_W_TABLE (VEX_W_0FXOP_09_C6_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_09_C6_L_0) }, }, - /* VEX_LEN_0FXOP_09_C7 */ + /* VEX_LEN_XOP_09_C7 */ { - { VEX_W_TABLE (VEX_W_0FXOP_09_C7_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_09_C7_L_0) }, }, - /* VEX_LEN_0FXOP_09_CB */ + /* VEX_LEN_XOP_09_CB */ { - { VEX_W_TABLE (VEX_W_0FXOP_09_CB_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_09_CB_L_0) }, }, - /* VEX_LEN_0FXOP_09_D1 */ + /* VEX_LEN_XOP_09_D1 */ { - { VEX_W_TABLE (VEX_W_0FXOP_09_D1_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_09_D1_L_0) }, }, - /* VEX_LEN_0FXOP_09_D2 */ + /* VEX_LEN_XOP_09_D2 */ { - { VEX_W_TABLE (VEX_W_0FXOP_09_D2_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_09_D2_L_0) }, }, - /* VEX_LEN_0FXOP_09_D3 */ + /* VEX_LEN_XOP_09_D3 */ { - { VEX_W_TABLE (VEX_W_0FXOP_09_D3_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_09_D3_L_0) }, }, - /* VEX_LEN_0FXOP_09_D6 */ + /* VEX_LEN_XOP_09_D6 */ { - { VEX_W_TABLE (VEX_W_0FXOP_09_D6_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_09_D6_L_0) }, }, - /* VEX_LEN_0FXOP_09_D7 */ + /* VEX_LEN_XOP_09_D7 */ { - { VEX_W_TABLE (VEX_W_0FXOP_09_D7_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_09_D7_L_0) }, }, - /* VEX_LEN_0FXOP_09_DB */ + /* VEX_LEN_XOP_09_DB */ { - { VEX_W_TABLE (VEX_W_0FXOP_09_DB_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_09_DB_L_0) }, }, - /* VEX_LEN_0FXOP_09_E1 */ + /* VEX_LEN_XOP_09_E1 */ { - { VEX_W_TABLE (VEX_W_0FXOP_09_E1_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_09_E1_L_0) }, }, - /* VEX_LEN_0FXOP_09_E2 */ + /* VEX_LEN_XOP_09_E2 */ { - { VEX_W_TABLE (VEX_W_0FXOP_09_E2_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_09_E2_L_0) }, }, - /* VEX_LEN_0FXOP_09_E3 */ + /* VEX_LEN_XOP_09_E3 */ { - { VEX_W_TABLE (VEX_W_0FXOP_09_E3_L_0) }, + { VEX_W_TABLE (VEX_W_XOP_09_E3_L_0) }, }, - /* VEX_LEN_0FXOP_0A_12 */ + /* VEX_LEN_XOP_0A_12 */ { { REG_TABLE (REG_XOP_0A_12_L_0) }, }, @@ -7681,43 +7501,43 @@ static const struct dis386 vex_len_table[][2] = { static const struct dis386 vex_w_table[][2] = { { /* VEX_W_0F41_L_1_M_1 */ - { PREFIX_TABLE (PREFIX_VEX_0F41_L_1_M_1_W_0) }, - { PREFIX_TABLE (PREFIX_VEX_0F41_L_1_M_1_W_1) }, + { PREFIX_TABLE (PREFIX_VEX_0F41_L_1_W_0) }, + { PREFIX_TABLE (PREFIX_VEX_0F41_L_1_W_1) }, }, { /* VEX_W_0F42_L_1_M_1 */ - { PREFIX_TABLE (PREFIX_VEX_0F42_L_1_M_1_W_0) }, - { PREFIX_TABLE (PREFIX_VEX_0F42_L_1_M_1_W_1) }, + { PREFIX_TABLE (PREFIX_VEX_0F42_L_1_W_0) }, + { PREFIX_TABLE (PREFIX_VEX_0F42_L_1_W_1) }, }, { /* VEX_W_0F44_L_0_M_1 */ - { PREFIX_TABLE (PREFIX_VEX_0F44_L_0_M_1_W_0) }, - { PREFIX_TABLE (PREFIX_VEX_0F44_L_0_M_1_W_1) }, + { PREFIX_TABLE (PREFIX_VEX_0F44_L_0_W_0) }, + { PREFIX_TABLE (PREFIX_VEX_0F44_L_0_W_1) }, }, { /* VEX_W_0F45_L_1_M_1 */ - { PREFIX_TABLE (PREFIX_VEX_0F45_L_1_M_1_W_0) }, - { PREFIX_TABLE (PREFIX_VEX_0F45_L_1_M_1_W_1) }, + { PREFIX_TABLE (PREFIX_VEX_0F45_L_1_W_0) }, + { PREFIX_TABLE (PREFIX_VEX_0F45_L_1_W_1) }, }, { /* VEX_W_0F46_L_1_M_1 */ - { PREFIX_TABLE (PREFIX_VEX_0F46_L_1_M_1_W_0) }, - { PREFIX_TABLE (PREFIX_VEX_0F46_L_1_M_1_W_1) }, + { PREFIX_TABLE (PREFIX_VEX_0F46_L_1_W_0) }, + { PREFIX_TABLE (PREFIX_VEX_0F46_L_1_W_1) }, }, { /* VEX_W_0F47_L_1_M_1 */ - { PREFIX_TABLE (PREFIX_VEX_0F47_L_1_M_1_W_0) }, - { PREFIX_TABLE (PREFIX_VEX_0F47_L_1_M_1_W_1) }, + { PREFIX_TABLE (PREFIX_VEX_0F47_L_1_W_0) }, + { PREFIX_TABLE (PREFIX_VEX_0F47_L_1_W_1) }, }, { /* VEX_W_0F4A_L_1_M_1 */ - { PREFIX_TABLE (PREFIX_VEX_0F4A_L_1_M_1_W_0) }, - { PREFIX_TABLE (PREFIX_VEX_0F4A_L_1_M_1_W_1) }, + { PREFIX_TABLE (PREFIX_VEX_0F4A_L_1_W_0) }, + { PREFIX_TABLE (PREFIX_VEX_0F4A_L_1_W_1) }, }, { /* VEX_W_0F4B_L_1_M_1 */ - { PREFIX_TABLE (PREFIX_VEX_0F4B_L_1_M_1_W_0) }, - { PREFIX_TABLE (PREFIX_VEX_0F4B_L_1_M_1_W_1) }, + { PREFIX_TABLE (PREFIX_VEX_0F4B_L_1_W_0) }, + { PREFIX_TABLE (PREFIX_VEX_0F4B_L_1_W_1) }, }, { /* VEX_W_0F90_L_0 */ @@ -7726,28 +7546,28 @@ static const struct dis386 vex_w_table[][2] = { }, { /* VEX_W_0F91_L_0_M_0 */ - { PREFIX_TABLE (PREFIX_VEX_0F91_L_0_M_0_W_0) }, - { PREFIX_TABLE (PREFIX_VEX_0F91_L_0_M_0_W_1) }, + { PREFIX_TABLE (PREFIX_VEX_0F91_L_0_W_0) }, + { PREFIX_TABLE (PREFIX_VEX_0F91_L_0_W_1) }, }, { /* VEX_W_0F92_L_0_M_1 */ - { PREFIX_TABLE (PREFIX_VEX_0F92_L_0_M_1_W_0) }, - { PREFIX_TABLE (PREFIX_VEX_0F92_L_0_M_1_W_1) }, + { PREFIX_TABLE (PREFIX_VEX_0F92_L_0_W_0) }, + { PREFIX_TABLE (PREFIX_VEX_0F92_L_0_W_1) }, }, { /* VEX_W_0F93_L_0_M_1 */ - { PREFIX_TABLE (PREFIX_VEX_0F93_L_0_M_1_W_0) }, - { PREFIX_TABLE (PREFIX_VEX_0F93_L_0_M_1_W_1) }, + { PREFIX_TABLE (PREFIX_VEX_0F93_L_0_W_0) }, + { PREFIX_TABLE (PREFIX_VEX_0F93_L_0_W_1) }, }, { /* VEX_W_0F98_L_0_M_1 */ - { PREFIX_TABLE (PREFIX_VEX_0F98_L_0_M_1_W_0) }, - { PREFIX_TABLE (PREFIX_VEX_0F98_L_0_M_1_W_1) }, + { PREFIX_TABLE (PREFIX_VEX_0F98_L_0_W_0) }, + { PREFIX_TABLE (PREFIX_VEX_0F98_L_0_W_1) }, }, { /* VEX_W_0F99_L_0_M_1 */ - { PREFIX_TABLE (PREFIX_VEX_0F99_L_0_M_1_W_0) }, - { PREFIX_TABLE (PREFIX_VEX_0F99_L_0_M_1_W_1) }, + { PREFIX_TABLE (PREFIX_VEX_0F99_L_0_W_0) }, + { PREFIX_TABLE (PREFIX_VEX_0F99_L_0_W_1) }, }, { /* VEX_W_0F380C */ @@ -7782,23 +7602,23 @@ static const struct dis386 vex_w_table[][2] = { { "vbroadcastsd", { XM, EXq }, PREFIX_DATA }, }, { - /* VEX_W_0F381A_M_0_L_1 */ + /* VEX_W_0F381A_L_1 */ { "vbroadcastf128", { XM, Mxmm }, PREFIX_DATA }, }, { - /* VEX_W_0F382C_M_0 */ + /* VEX_W_0F382C */ { "vmaskmovps", { XM, Vex, Mx }, PREFIX_DATA }, }, { - /* VEX_W_0F382D_M_0 */ + /* VEX_W_0F382D */ { "vmaskmovpd", { XM, Vex, Mx }, PREFIX_DATA }, }, { - /* VEX_W_0F382E_M_0 */ + /* VEX_W_0F382E */ { "vmaskmovps", { Mx, Vex, XM }, PREFIX_DATA }, }, { - /* VEX_W_0F382F_M_0 */ + /* VEX_W_0F382F */ { "vmaskmovpd", { Mx, Vex, XM }, PREFIX_DATA }, }, { @@ -7815,7 +7635,7 @@ static const struct dis386 vex_w_table[][2] = { }, { /* VEX_W_0F384B_X86_64_L_0 */ - { MOD_TABLE (MOD_VEX_0F384B_X86_64_L_0_W_0) }, + { PREFIX_TABLE (PREFIX_VEX_0F384B_X86_64_L_0_W_0) }, }, { /* VEX_W_0F3850 */ @@ -7842,20 +7662,20 @@ static const struct dis386 vex_w_table[][2] = { { "vpbroadcastq", { XM, EXq }, PREFIX_DATA }, }, { - /* VEX_W_0F385A_M_0_L_0 */ + /* VEX_W_0F385A_L_0 */ { "vbroadcasti128", { XM, Mxmm }, PREFIX_DATA }, }, { - /* VEX_W_0F385C_X86_64_M_1_L_0 */ - { PREFIX_TABLE (PREFIX_VEX_0F385C_X86_64_M_1_L_0_W_0) }, + /* VEX_W_0F385C_X86_64_L_0 */ + { PREFIX_TABLE (PREFIX_VEX_0F385C_X86_64_L_0_W_0) }, }, { - /* VEX_W_0F385E_X86_64_M_1_L_0 */ - { PREFIX_TABLE (PREFIX_VEX_0F385E_X86_64_M_1_L_0_W_0) }, + /* VEX_W_0F385E_X86_64_L_0 */ + { PREFIX_TABLE (PREFIX_VEX_0F385E_X86_64_L_0_W_0) }, }, { - /* VEX_W_0F386C_X86_64_M_1_L_0 */ - { PREFIX_TABLE (PREFIX_VEX_0F386C_X86_64_M_1_L_0_W_0) }, + /* VEX_W_0F386C_X86_64_L_0 */ + { PREFIX_TABLE (PREFIX_VEX_0F386C_X86_64_L_0_W_0) }, }, { /* VEX_W_0F3872_P_1 */ @@ -7887,10 +7707,34 @@ static const struct dis386 vex_w_table[][2] = { { Bad_Opcode }, { "%XVvpmadd52huq", { XM, Vex, EXx }, PREFIX_DATA }, }, + { + /* VEX_W_0F38CB_P_3 */ + { VEX_LEN_TABLE (VEX_LEN_0F38CB_P_3_W_0) }, + }, + { + /* VEX_W_0F38CC_P_3 */ + { VEX_LEN_TABLE (VEX_LEN_0F38CC_P_3_W_0) }, + }, + { + /* VEX_W_0F38CD_P_3 */ + { VEX_LEN_TABLE (VEX_LEN_0F38CD_P_3_W_0) }, + }, { /* VEX_W_0F38CF */ { "%XEvgf2p8mulb", { XM, Vex, EXx }, PREFIX_DATA }, }, + { + /* VEX_W_0F38D2 */ + { PREFIX_TABLE (PREFIX_VEX_0F38D2_W_0) }, + }, + { + /* VEX_W_0F38D3 */ + { PREFIX_TABLE (PREFIX_VEX_0F38D3_W_0) }, + }, + { + /* VEX_W_0F38DA */ + { PREFIX_TABLE (PREFIX_VEX_0F38DA_W_0) }, + }, { /* VEX_W_0F3A00_L_1 */ { Bad_Opcode }, @@ -7963,175 +7807,179 @@ static const struct dis386 vex_w_table[][2] = { { Bad_Opcode }, { "%XEvgf2p8affineinvqb", { XM, Vex, EXx, Ib }, PREFIX_DATA }, }, - /* VEX_W_0FXOP_08_85_L_0 */ + { + /* VEX_W_0F3ADE */ + { VEX_LEN_TABLE (VEX_LEN_0F3ADE_W_0) }, + }, + /* VEX_W_XOP_08_85_L_0 */ { { "vpmacssww", { XM, Vex, EXx, XMVexI4 }, 0 }, }, - /* VEX_W_0FXOP_08_86_L_0 */ + /* VEX_W_XOP_08_86_L_0 */ { { "vpmacsswd", { XM, Vex, EXx, XMVexI4 }, 0 }, }, - /* VEX_W_0FXOP_08_87_L_0 */ + /* VEX_W_XOP_08_87_L_0 */ { { "vpmacssdql", { XM, Vex, EXx, XMVexI4 }, 0 }, }, - /* VEX_W_0FXOP_08_8E_L_0 */ + /* VEX_W_XOP_08_8E_L_0 */ { { "vpmacssdd", { XM, Vex, EXx, XMVexI4 }, 0 }, }, - /* VEX_W_0FXOP_08_8F_L_0 */ + /* VEX_W_XOP_08_8F_L_0 */ { { "vpmacssdqh", { XM, Vex, EXx, XMVexI4 }, 0 }, }, - /* VEX_W_0FXOP_08_95_L_0 */ + /* VEX_W_XOP_08_95_L_0 */ { { "vpmacsww", { XM, Vex, EXx, XMVexI4 }, 0 }, }, - /* VEX_W_0FXOP_08_96_L_0 */ + /* VEX_W_XOP_08_96_L_0 */ { { "vpmacswd", { XM, Vex, EXx, XMVexI4 }, 0 }, }, - /* VEX_W_0FXOP_08_97_L_0 */ + /* VEX_W_XOP_08_97_L_0 */ { { "vpmacsdql", { XM, Vex, EXx, XMVexI4 }, 0 }, }, - /* VEX_W_0FXOP_08_9E_L_0 */ + /* VEX_W_XOP_08_9E_L_0 */ { { "vpmacsdd", { XM, Vex, EXx, XMVexI4 }, 0 }, }, - /* VEX_W_0FXOP_08_9F_L_0 */ + /* VEX_W_XOP_08_9F_L_0 */ { { "vpmacsdqh", { XM, Vex, EXx, XMVexI4 }, 0 }, }, - /* VEX_W_0FXOP_08_A6_L_0 */ + /* VEX_W_XOP_08_A6_L_0 */ { { "vpmadcsswd", { XM, Vex, EXx, XMVexI4 }, 0 }, }, - /* VEX_W_0FXOP_08_B6_L_0 */ + /* VEX_W_XOP_08_B6_L_0 */ { { "vpmadcswd", { XM, Vex, EXx, XMVexI4 }, 0 }, }, - /* VEX_W_0FXOP_08_C0_L_0 */ + /* VEX_W_XOP_08_C0_L_0 */ { { "vprotb", { XM, EXx, Ib }, 0 }, }, - /* VEX_W_0FXOP_08_C1_L_0 */ + /* VEX_W_XOP_08_C1_L_0 */ { { "vprotw", { XM, EXx, Ib }, 0 }, }, - /* VEX_W_0FXOP_08_C2_L_0 */ + /* VEX_W_XOP_08_C2_L_0 */ { { "vprotd", { XM, EXx, Ib }, 0 }, }, - /* VEX_W_0FXOP_08_C3_L_0 */ + /* VEX_W_XOP_08_C3_L_0 */ { { "vprotq", { XM, EXx, Ib }, 0 }, }, - /* VEX_W_0FXOP_08_CC_L_0 */ + /* VEX_W_XOP_08_CC_L_0 */ { { "vpcomb", { XM, Vex, EXx, VPCOM }, 0 }, }, - /* VEX_W_0FXOP_08_CD_L_0 */ + /* VEX_W_XOP_08_CD_L_0 */ { { "vpcomw", { XM, Vex, EXx, VPCOM }, 0 }, }, - /* VEX_W_0FXOP_08_CE_L_0 */ + /* VEX_W_XOP_08_CE_L_0 */ { { "vpcomd", { XM, Vex, EXx, VPCOM }, 0 }, }, - /* VEX_W_0FXOP_08_CF_L_0 */ + /* VEX_W_XOP_08_CF_L_0 */ { { "vpcomq", { XM, Vex, EXx, VPCOM }, 0 }, }, - /* VEX_W_0FXOP_08_EC_L_0 */ + /* VEX_W_XOP_08_EC_L_0 */ { { "vpcomub", { XM, Vex, EXx, VPCOM }, 0 }, }, - /* VEX_W_0FXOP_08_ED_L_0 */ + /* VEX_W_XOP_08_ED_L_0 */ { { "vpcomuw", { XM, Vex, EXx, VPCOM }, 0 }, }, - /* VEX_W_0FXOP_08_EE_L_0 */ + /* VEX_W_XOP_08_EE_L_0 */ { { "vpcomud", { XM, Vex, EXx, VPCOM }, 0 }, }, - /* VEX_W_0FXOP_08_EF_L_0 */ + /* VEX_W_XOP_08_EF_L_0 */ { { "vpcomuq", { XM, Vex, EXx, VPCOM }, 0 }, }, - /* VEX_W_0FXOP_09_80 */ + /* VEX_W_XOP_09_80 */ { { "vfrczps", { XM, EXx }, 0 }, }, - /* VEX_W_0FXOP_09_81 */ + /* VEX_W_XOP_09_81 */ { { "vfrczpd", { XM, EXx }, 0 }, }, - /* VEX_W_0FXOP_09_82 */ + /* VEX_W_XOP_09_82 */ { - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_82_W_0) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_82_W_0) }, }, - /* VEX_W_0FXOP_09_83 */ + /* VEX_W_XOP_09_83 */ { - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_83_W_0) }, + { VEX_LEN_TABLE (VEX_LEN_XOP_09_83_W_0) }, }, - /* VEX_W_0FXOP_09_C1_L_0 */ + /* VEX_W_XOP_09_C1_L_0 */ { { "vphaddbw", { XM, EXxmm }, 0 }, }, - /* VEX_W_0FXOP_09_C2_L_0 */ + /* VEX_W_XOP_09_C2_L_0 */ { { "vphaddbd", { XM, EXxmm }, 0 }, }, - /* VEX_W_0FXOP_09_C3_L_0 */ + /* VEX_W_XOP_09_C3_L_0 */ { { "vphaddbq", { XM, EXxmm }, 0 }, }, - /* VEX_W_0FXOP_09_C6_L_0 */ + /* VEX_W_XOP_09_C6_L_0 */ { { "vphaddwd", { XM, EXxmm }, 0 }, }, - /* VEX_W_0FXOP_09_C7_L_0 */ + /* VEX_W_XOP_09_C7_L_0 */ { { "vphaddwq", { XM, EXxmm }, 0 }, }, - /* VEX_W_0FXOP_09_CB_L_0 */ + /* VEX_W_XOP_09_CB_L_0 */ { { "vphadddq", { XM, EXxmm }, 0 }, }, - /* VEX_W_0FXOP_09_D1_L_0 */ + /* VEX_W_XOP_09_D1_L_0 */ { { "vphaddubw", { XM, EXxmm }, 0 }, }, - /* VEX_W_0FXOP_09_D2_L_0 */ + /* VEX_W_XOP_09_D2_L_0 */ { { "vphaddubd", { XM, EXxmm }, 0 }, }, - /* VEX_W_0FXOP_09_D3_L_0 */ + /* VEX_W_XOP_09_D3_L_0 */ { { "vphaddubq", { XM, EXxmm }, 0 }, }, - /* VEX_W_0FXOP_09_D6_L_0 */ + /* VEX_W_XOP_09_D6_L_0 */ { { "vphadduwd", { XM, EXxmm }, 0 }, }, - /* VEX_W_0FXOP_09_D7_L_0 */ + /* VEX_W_XOP_09_D7_L_0 */ { { "vphadduwq", { XM, EXxmm }, 0 }, }, - /* VEX_W_0FXOP_09_DB_L_0 */ + /* VEX_W_XOP_09_DB_L_0 */ { { "vphaddudq", { XM, EXxmm }, 0 }, }, - /* VEX_W_0FXOP_09_E1_L_0 */ + /* VEX_W_XOP_09_E1_L_0 */ { { "vphsubbw", { XM, EXxmm }, 0 }, }, - /* VEX_W_0FXOP_09_E2_L_0 */ + /* VEX_W_XOP_09_E2_L_0 */ { { "vphsubwd", { XM, EXxmm }, 0 }, }, - /* VEX_W_0FXOP_09_E3_L_0 */ + /* VEX_W_XOP_09_E3_L_0 */ { { "vphsubdq", { XM, EXxmm }, 0 }, }, @@ -8143,39 +7991,17 @@ static const struct dis386 mod_table[][2] = { { /* MOD_62_32BIT */ { "bound{S|}", { Gv, Ma }, 0 }, - { EVEX_TABLE (EVEX_0F) }, - }, - { - /* MOD_8D */ - { "leaS", { Gv, M }, 0 }, + { EVEX_TABLE () }, }, { /* MOD_C4_32BIT */ { "lesS", { Gv, Mp }, 0 }, - { VEX_C4_TABLE (VEX_0F) }, + { VEX_C4_TABLE () }, }, { /* MOD_C5_32BIT */ { "ldsS", { Gv, Mp }, 0 }, - { VEX_C5_TABLE (VEX_0F) }, - }, - { - /* MOD_C6_REG_7 */ - { Bad_Opcode }, - { RM_TABLE (RM_C6_REG_7) }, - }, - { - /* MOD_C7_REG_7 */ - { Bad_Opcode }, - { RM_TABLE (RM_C7_REG_7) }, - }, - { - /* MOD_FF_REG_3 */ - { "{l|}call^", { indirEp }, 0 }, - }, - { - /* MOD_FF_REG_5 */ - { "{l|}jmp^", { indirEp }, 0 }, + { VEX_C5_TABLE () }, }, { /* MOD_0F01_REG_0 */ @@ -8207,41 +8033,15 @@ static const struct dis386 mod_table[][2] = { { "invlpg", { Mb }, 0 }, { RM_TABLE (RM_0F01_REG_7_MOD_3) }, }, - { - /* MOD_0F02 */ - { "larS", { Gv, Mw }, 0 }, - { "larS", { Gv, Ev }, 0 }, - }, - { - /* MOD_0F03 */ - { "lslS", { Gv, Mw }, 0 }, - { "lslS", { Gv, Ev }, 0 }, - }, { /* MOD_0F12_PREFIX_0 */ - { "movlpX", { XM, EXq }, 0 }, - { "movhlps", { XM, EXq }, 0 }, - }, - { - /* MOD_0F12_PREFIX_2 */ - { "movlpX", { XM, EXq }, 0 }, - }, - { - /* MOD_0F13 */ - { "movlpX", { EXq, XM }, PREFIX_OPCODE }, + { "%XEVmovlpYX", { XM, Vex, EXq }, 0 }, + { "%XEVmovhlpY%XS", { XM, Vex, EXq }, 0 }, }, { /* MOD_0F16_PREFIX_0 */ - { "movhpX", { XM, EXq }, 0 }, - { "movlhps", { XM, EXq }, 0 }, - }, - { - /* MOD_0F16_PREFIX_2 */ - { "movhpX", { XM, EXq }, 0 }, - }, - { - /* MOD_0F17 */ - { "movhpX", { EXq, XM }, PREFIX_OPCODE }, + { "%XEVmovhpYX", { XM, Vex, EXq }, 0 }, + { "%XEVmovlhpY%XS", { XM, Vex, EXq }, 0 }, }, { /* MOD_0F18_REG_0 */ @@ -8298,42 +8098,6 @@ static const struct dis386 mod_table[][2] = { { "nopQ", { Ev }, PREFIX_IGNORED }, { REG_TABLE (REG_0F1E_P_1_MOD_3) }, }, - { - /* MOD_0F2B_PREFIX_0 */ - {"movntps", { Mx, XM }, PREFIX_OPCODE }, - }, - { - /* MOD_0F2B_PREFIX_1 */ - {"movntss", { Md, XM }, PREFIX_OPCODE }, - }, - { - /* MOD_0F2B_PREFIX_2 */ - {"movntpd", { Mx, XM }, PREFIX_OPCODE }, - }, - { - /* MOD_0F2B_PREFIX_3 */ - {"movntsd", { Mq, XM }, PREFIX_OPCODE }, - }, - { - /* MOD_0F50 */ - { Bad_Opcode }, - { "movmskpX", { Gdq, XS }, PREFIX_OPCODE }, - }, - { - /* MOD_0F71 */ - { Bad_Opcode }, - { REG_TABLE (REG_0F71_MOD_0) }, - }, - { - /* MOD_0F72 */ - { Bad_Opcode }, - { REG_TABLE (REG_0F72_MOD_0) }, - }, - { - /* MOD_0F73 */ - { Bad_Opcode }, - { REG_TABLE (REG_0F73_MOD_0) }, - }, { /* MOD_0FAE_REG_0 */ { "fxsave", { FXSAVE }, 0 }, @@ -8374,34 +8138,6 @@ static const struct dis386 mod_table[][2] = { { PREFIX_TABLE (PREFIX_0FAE_REG_7_MOD_0) }, { RM_TABLE (RM_0FAE_REG_7_MOD_3) }, }, - { - /* MOD_0FB2 */ - { "lssS", { Gv, Mp }, 0 }, - }, - { - /* MOD_0FB4 */ - { "lfsS", { Gv, Mp }, 0 }, - }, - { - /* MOD_0FB5 */ - { "lgsS", { Gv, Mp }, 0 }, - }, - { - /* MOD_0FC3 */ - { "movntiS", { Edq, Gdq }, PREFIX_OPCODE }, - }, - { - /* MOD_0FC7_REG_3 */ - { "xrstors", { FXSAVE }, 0 }, - }, - { - /* MOD_0FC7_REG_4 */ - { "xsavec", { FXSAVE }, 0 }, - }, - { - /* MOD_0FC7_REG_5 */ - { "xsaves", { FXSAVE }, 0 }, - }, { /* MOD_0FC7_REG_6 */ { PREFIX_TABLE (PREFIX_0FC7_REG_6_MOD_0) }, @@ -8412,299 +8148,16 @@ static const struct dis386 mod_table[][2] = { { "vmptrst", { Mq }, 0 }, { PREFIX_TABLE (PREFIX_0FC7_REG_7_MOD_3) } }, - { - /* MOD_0FD7 */ - { Bad_Opcode }, - { "pmovmskb", { Gdq, MS }, 0 }, - }, - { - /* MOD_0FE7_PREFIX_2 */ - { "movntdq", { Mx, XM }, 0 }, - }, - { - /* MOD_0FF0_PREFIX_3 */ - { "lddqu", { XM, M }, 0 }, - }, - { - /* MOD_0F382A */ - { "movntdqa", { XM, Mx }, PREFIX_DATA }, - }, { /* MOD_0F38DC_PREFIX_1 */ { "aesenc128kl", { XM, M }, 0 }, { "loadiwkey", { XM, EXx }, 0 }, }, - { - /* MOD_0F38DD_PREFIX_1 */ - { "aesdec128kl", { XM, M }, 0 }, - }, - { - /* MOD_0F38DE_PREFIX_1 */ - { "aesenc256kl", { XM, M }, 0 }, - }, - { - /* MOD_0F38DF_PREFIX_1 */ - { "aesdec256kl", { XM, M }, 0 }, - }, - { - /* MOD_0F38F5 */ - { "wrussK", { M, Gdq }, PREFIX_DATA }, - }, - { - /* MOD_0F38F6_PREFIX_0 */ - { "wrssK", { M, Gdq }, PREFIX_OPCODE }, - }, - { - /* MOD_0F38F8_PREFIX_1 */ - { "enqcmds", { Gva, M }, PREFIX_OPCODE }, - }, - { - /* MOD_0F38F8_PREFIX_2 */ - { "movdir64b", { Gva, M }, PREFIX_OPCODE }, - }, - { - /* MOD_0F38F8_PREFIX_3 */ - { "enqcmd", { Gva, M }, PREFIX_OPCODE }, - }, - { - /* MOD_0F38F9 */ - { "movdiri", { Edq, Gdq }, PREFIX_OPCODE }, - }, - { - /* MOD_0F38FA_PREFIX_1 */ - { Bad_Opcode }, - { "encodekey128", { Gd, Ed }, 0 }, - }, - { - /* MOD_0F38FB_PREFIX_1 */ - { Bad_Opcode }, - { "encodekey256", { Gd, Ed }, 0 }, - }, - { - /* MOD_0F3A0F_PREFIX_1 */ - { Bad_Opcode }, - { REG_TABLE (REG_0F3A0F_PREFIX_1_MOD_3) }, - }, - { - /* MOD_VEX_0F12_PREFIX_0 */ - { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) }, - { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) }, - }, - { - /* MOD_VEX_0F12_PREFIX_2 */ - { VEX_LEN_TABLE (VEX_LEN_0F12_P_2_M_0) }, - }, - { - /* MOD_VEX_0F13 */ - { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) }, - }, - { - /* MOD_VEX_0F16_PREFIX_0 */ - { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) }, - { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) }, - }, - { - /* MOD_VEX_0F16_PREFIX_2 */ - { VEX_LEN_TABLE (VEX_LEN_0F16_P_2_M_0) }, - }, - { - /* MOD_VEX_0F17 */ - { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) }, - }, - { - /* MOD_VEX_0F2B */ - { "%XEvmovntpX", { Mx, XM }, PREFIX_OPCODE }, - }, - { - /* MOD_VEX_0F41_L_1 */ - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F41_L_1_M_1) }, - }, - { - /* MOD_VEX_0F42_L_1 */ - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F42_L_1_M_1) }, - }, - { - /* MOD_VEX_0F44_L_0 */ - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F44_L_0_M_1) }, - }, - { - /* MOD_VEX_0F45_L_1 */ - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F45_L_1_M_1) }, - }, - { - /* MOD_VEX_0F46_L_1 */ - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F46_L_1_M_1) }, - }, - { - /* MOD_VEX_0F47_L_1 */ - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F47_L_1_M_1) }, - }, - { - /* MOD_VEX_0F4A_L_1 */ - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F4A_L_1_M_1) }, - }, - { - /* MOD_VEX_0F4B_L_1 */ - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F4B_L_1_M_1) }, - }, - { - /* MOD_VEX_0F50 */ - { Bad_Opcode }, - { "vmovmskpX", { Gdq, XS }, PREFIX_OPCODE }, - }, - { - /* MOD_VEX_0F71 */ - { Bad_Opcode }, - { REG_TABLE (REG_VEX_0F71_M_0) }, - }, - { - /* MOD_VEX_0F72 */ - { Bad_Opcode }, - { REG_TABLE (REG_VEX_0F72_M_0) }, - }, - { - /* MOD_VEX_0F73 */ - { Bad_Opcode }, - { REG_TABLE (REG_VEX_0F73_M_0) }, - }, - { - /* MOD_VEX_0F91_L_0 */ - { VEX_W_TABLE (VEX_W_0F91_L_0_M_0) }, - }, - { - /* MOD_VEX_0F92_L_0 */ - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F92_L_0_M_1) }, - }, - { - /* MOD_VEX_0F93_L_0 */ - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F93_L_0_M_1) }, - }, - { - /* MOD_VEX_0F98_L_0 */ - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F98_L_0_M_1) }, - }, - { - /* MOD_VEX_0F99_L_0 */ - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F99_L_0_M_1) }, - }, - { - /* MOD_VEX_0FAE_REG_2 */ - { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) }, - }, - { - /* MOD_VEX_0FAE_REG_3 */ - { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) }, - }, - { - /* MOD_VEX_0FD7 */ - { Bad_Opcode }, - { "vpmovmskb", { Gdq, XS }, PREFIX_DATA }, - }, - { - /* MOD_VEX_0FE7 */ - { "vmovntdq", { Mx, XM }, PREFIX_DATA }, - }, - { - /* MOD_VEX_0FF0_PREFIX_3 */ - { "vlddqu", { XM, M }, 0 }, - }, - { - /* MOD_VEX_0F381A */ - { VEX_LEN_TABLE (VEX_LEN_0F381A_M_0) }, - }, - { - /* MOD_VEX_0F382A */ - { "vmovntdqa", { XM, Mx }, PREFIX_DATA }, - }, - { - /* MOD_VEX_0F382C */ - { VEX_W_TABLE (VEX_W_0F382C_M_0) }, - }, - { - /* MOD_VEX_0F382D */ - { VEX_W_TABLE (VEX_W_0F382D_M_0) }, - }, - { - /* MOD_VEX_0F382E */ - { VEX_W_TABLE (VEX_W_0F382E_M_0) }, - }, - { - /* MOD_VEX_0F382F */ - { VEX_W_TABLE (VEX_W_0F382F_M_0) }, - }, { /* MOD_VEX_0F3849_X86_64_L_0_W_0 */ { PREFIX_TABLE (PREFIX_VEX_0F3849_X86_64_L_0_W_0_M_0) }, { PREFIX_TABLE (PREFIX_VEX_0F3849_X86_64_L_0_W_0_M_1) }, }, - { - /* MOD_VEX_0F384B_X86_64_L_0_W_0 */ - { PREFIX_TABLE (PREFIX_VEX_0F384B_X86_64_L_0_W_0_M_0) }, - }, - { - /* MOD_VEX_0F385A */ - { VEX_LEN_TABLE (VEX_LEN_0F385A_M_0) }, - }, - { - /* MOD_VEX_0F385C_X86_64 */ - { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F385C_X86_64_M_1) }, - }, - { - /* MOD_VEX_0F385E_X86_64 */ - { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F385E_X86_64_M_1) }, - }, - { - /* MOD_VEX_0F386C_X86_64 */ - { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F386C_X86_64_M_1) }, - }, - { - /* MOD_VEX_0F388C */ - { "vpmaskmov%DQ", { XM, Vex, Mx }, PREFIX_DATA }, - }, - { - /* MOD_VEX_0F388E */ - { "vpmaskmov%DQ", { Mx, Vex, XM }, PREFIX_DATA }, - }, - { - /* MOD_VEX_0F3A30_L_0 */ - { Bad_Opcode }, - { "kshiftr%BW", { MaskG, MaskE, Ib }, PREFIX_DATA }, - }, - { - /* MOD_VEX_0F3A31_L_0 */ - { Bad_Opcode }, - { "kshiftr%DQ", { MaskG, MaskE, Ib }, PREFIX_DATA }, - }, - { - /* MOD_VEX_0F3A32_L_0 */ - { Bad_Opcode }, - { "kshiftl%BW", { MaskG, MaskE, Ib }, PREFIX_DATA }, - }, - { - /* MOD_VEX_0F3A33_L_0 */ - { Bad_Opcode }, - { "kshiftl%DQ", { MaskG, MaskE, Ib }, PREFIX_DATA }, - }, - { - /* MOD_XOP_09_12 */ - { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_12_M_1) }, - }, #include "i386-dis-evex-mod.h" }; @@ -8727,6 +8180,7 @@ static const struct dis386 rm_table[][8] = { { "vmxoff", { Skip_MODRM }, 0 }, { "pconfig", { Skip_MODRM }, 0 }, { PREFIX_TABLE (PREFIX_0F01_REG_0_MOD_3_RM_6) }, + { PREFIX_TABLE (PREFIX_0F01_REG_0_MOD_3_RM_7) }, }, { /* RM_0F01_REG_1 */ @@ -8803,7 +8257,7 @@ static const struct dis386 rm_table[][8] = { { "sfence", { Skip_MODRM }, 0 }, }, { - /* RM_0F3A0F_P_1_MOD_3_REG_0 */ + /* RM_0F3A0F_P_1_R_0 */ { "hreset", { Skip_MODRM, Ib }, 0 }, }, { @@ -9281,7 +8735,7 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins) ins->vex.prefix = REPNE_PREFIX_OPCODE; break; } - ins->need_vex = true; + ins->need_vex = 3; ins->codep++; vindex = *ins->codep++; dp = &xop_table[vex_table_index][vindex]; @@ -9346,7 +8800,7 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins) ins->vex.prefix = REPNE_PREFIX_OPCODE; break; } - ins->need_vex = true; + ins->need_vex = 3; ins->codep++; vindex = *ins->codep++; dp = &vex_table[vex_table_index][vindex]; @@ -9381,10 +8835,10 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins) ins->vex.prefix = REPNE_PREFIX_OPCODE; break; } - ins->need_vex = true; + ins->need_vex = 2; ins->codep++; vindex = *ins->codep++; - dp = &vex_table[dp->op[1].bytemode][vindex]; + dp = &vex_table[VEX_0F][vindex]; ins->end_codep = ins->codep; /* There is no MODRM byte for VEX 77. */ if (vindex != 0x77 && !fetch_modrm (ins)) @@ -9473,7 +8927,7 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins) ins->vex.r = true; } - ins->need_vex = true; + ins->need_vex = 4; ins->codep++; vindex = *ins->codep++; dp = &evex_table[vex_table_index][vindex]; @@ -9905,9 +9359,21 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) oappend (&ins, "{"); oappend_register (&ins, reg_name); oappend (&ins, "}"); + + if (ins.vex.zeroing) + oappend (&ins, "{z}"); } - if (ins.vex.zeroing) - oappend (&ins, "{z}"); + else if (ins.vex.zeroing) + { + oappend (&ins, "{bad}"); + continue; + } + + /* Instructions with a mask register destination allow for + zeroing-masking only (if any masking at all), which is + _not_ expressed by EVEX.z. */ + if (ins.vex.zeroing && dp->op[0].bytemode == mask_mode) + ins.illegal_masking = true; /* S/G insns require a mask and don't allow zeroing-masking. */ @@ -9915,6 +9381,9 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) || dp->op[0].bytemode == vex_vsib_q_w_dq_mode) && (ins.vex.mask_register_specifier == 0 || ins.vex.zeroing)) + ins.illegal_masking = true; + + if (ins.illegal_masking) oappend (&ins, "/(bad)"); } } @@ -9985,14 +9454,6 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) goto out; } - /* If EVEX.z is set, there must be an actual mask register in use. */ - if (ins.vex.zeroing && ins.vex.mask_register_specifier == 0) - { - i386_dis_printf (info, dis_style_text, "(bad)"); - ret = ins.end_codep - priv.the_buffer; - goto out; - } - switch (dp->prefix_requirement) { case PREFIX_DATA: @@ -10539,16 +10000,6 @@ swap_operand (instr_info *ins) ins->mnemonicendp += 2; } -static bool -OP_Skip_MODRM (instr_info *ins, int bytemode ATTRIBUTE_UNUSED, - int sizeflag ATTRIBUTE_UNUSED) -{ - /* Skip mod/rm byte. */ - MODRM_CHECK; - ins->codep++; - return true; -} - static bool dofloat (instr_info *ins, int sizeflag) { @@ -11039,7 +10490,10 @@ putop (instr_info *ins, const char *in_template, int sizeflag) break; case 'V': if (l == 0) - abort (); + { + if (ins->need_vex) + *ins->obufp++ = 'v'; + } else if (l == 1) { switch (last[0]) @@ -11116,10 +10570,15 @@ putop (instr_info *ins, const char *in_template, int sizeflag) *ins->obufp++ = 's'; break; case 'Y': - if (l == 1 && last[0] == 'X') + if (l == 0) + { + if (ins->vex.mask_register_specifier) + ins->illegal_masking = true; + } + else if (l == 1 && last[0] == 'X') { if (!ins->need_vex) - abort (); + break; if (ins->intel_syntax || ((ins->modrm.mod == 3 || ins->vex.b) && !(sizeflag & SUFFIX_ALWAYS))) @@ -11296,14 +10755,6 @@ append_seg (instr_info *ins) oappend_char (ins, ':'); } -static bool -OP_indirE (instr_info *ins, int bytemode, int sizeflag) -{ - if (!ins->intel_syntax) - oappend (ins, "*"); - return OP_E (ins, bytemode, sizeflag); -} - static void print_operand_value (instr_info *ins, bfd_vma disp, enum disassembler_style style) @@ -11514,11 +10965,9 @@ intel_operand_size (instr_info *ins, int bytemode, int sizeflag) case xmmq_mode: case evex_half_bcst_xmmqh_mode: case evex_half_bcst_xmmq_mode: - if (!ins->need_vex) - abort (); - switch (ins->vex.length) { + case 0: case 128: oappend (ins, "QWORD PTR "); break; @@ -11631,6 +11080,11 @@ print_register (instr_info *ins, unsigned int reg, unsigned int rexmask, { const char (*names)[8]; + /* Masking is invalid for insns with GPR destination. Set the flag uniformly, + as the consumer will inspect it only for the destination operand. */ + if (bytemode != mask_mode && ins->vex.mask_register_specifier) + ins->illegal_masking = true; + USED_REX (rexmask); if (ins->rex & rexmask) reg += 8; @@ -11831,11 +11285,24 @@ BadOp (instr_info *ins) /* Throw away prefixes and 1st. opcode byte. */ struct dis_private *priv = ins->info->private_data; - ins->codep = priv->the_buffer + ins->nr_prefixes + 1; + ins->codep = priv->the_buffer + ins->nr_prefixes + ins->need_vex + 1; ins->obufp = stpcpy (ins->obufp, "(bad)"); return true; } +static bool +OP_Skip_MODRM (instr_info *ins, int bytemode ATTRIBUTE_UNUSED, + int sizeflag ATTRIBUTE_UNUSED) +{ + if (ins->modrm.mod != 3) + return BadOp (ins); + + /* Skip mod/rm byte. */ + MODRM_CHECK; + ins->codep++; + return true; +} + static bool OP_E_memory (instr_info *ins, int bytemode, int sizeflag) { @@ -11845,6 +11312,13 @@ OP_E_memory (instr_info *ins, int bytemode, int sizeflag) if (ins->vex.evex) { + + /* Zeroing-masking is invalid for memory destinations. Set the flag + uniformly, as the consumer will inspect it only for the destination + operand. */ + if (ins->vex.zeroing) + ins->illegal_masking = true; + switch (bytemode) { case dw_mode: @@ -12358,9 +11832,26 @@ OP_E (instr_info *ins, int bytemode, int sizeflag) return true; } + /* Masking is invalid for insns with GPR-like memory destination. Set the + flag uniformly, as the consumer will inspect it only for the destination + operand. */ + if (ins->vex.mask_register_specifier) + ins->illegal_masking = true; + return OP_E_memory (ins, bytemode, sizeflag); } +static bool +OP_indirE (instr_info *ins, int bytemode, int sizeflag) +{ + if (ins->modrm.mod == 3 && bytemode == f_mode) + /* bad lcall/ljmp */ + return BadOp (ins); + if (!ins->intel_syntax) + oappend (ins, "*"); + return OP_E (ins, bytemode, sizeflag); +} + static bool OP_G (instr_info *ins, int bytemode, int sizeflag) { @@ -12921,6 +12412,7 @@ print_vector_reg (instr_info *ins, unsigned int reg, int bytemode) { switch (ins->vex.length) { + case 0: case 128: case 256: names = att_names_xmm; @@ -13122,28 +12614,43 @@ OP_EX (instr_info *ins, int bytemode, int sizeflag) } static bool -OP_MS (instr_info *ins, int bytemode, int sizeflag) +OP_R (instr_info *ins, int bytemode, int sizeflag) { - if (ins->modrm.mod == 3) - return OP_EM (ins, bytemode, sizeflag); - return BadOp (ins); -} + if (ins->modrm.mod != 3) + return BadOp (ins); -static bool -OP_XS (instr_info *ins, int bytemode, int sizeflag) -{ - if (ins->modrm.mod == 3) - return OP_EX (ins, bytemode, sizeflag); - return BadOp (ins); + switch (bytemode) + { + case d_mode: + case dq_mode: + case mask_mode: + return OP_E (ins, bytemode, sizeflag); + case q_mode: + return OP_EM (ins, x_mode, sizeflag); + case xmm_mode: + if (ins->vex.length <= 128) + break; + return BadOp (ins); + } + + return OP_EX (ins, bytemode, sizeflag); } static bool OP_M (instr_info *ins, int bytemode, int sizeflag) { + /* Skip mod/rm byte. */ + MODRM_CHECK; + ins->codep++; + if (ins->modrm.mod == 3) /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */ return BadOp (ins); - return OP_E (ins, bytemode, sizeflag); + + if (bytemode == x_mode) + ins->vex.no_broadcast = true; + + return OP_E_memory (ins, bytemode, sizeflag); } static bool @@ -13586,7 +13093,7 @@ OP_VEX (instr_info *ins, int bytemode, int sizeflag ATTRIBUTE_UNUSED) const char (*names)[8]; if (!ins->need_vex) - abort (); + return true; reg = ins->vex.register_specifier; ins->vex.register_specifier = 0; diff --git a/opcodes/i386-gen.c b/opcodes/i386-gen.c index 1db555d8615..91c22c9e873 100644 --- a/opcodes/i386-gen.c +++ b/opcodes/i386-gen.c @@ -162,6 +162,8 @@ static const dependency isa_dependencies[] = "AVX2" }, { "AVX_VNNI_INT8", "AVX2" }, + { "AVX_VNNI_INT16", + "AVX2" }, { "AVX_NE_CONVERT", "AVX2" }, { "FRED", @@ -212,6 +214,12 @@ static const dependency isa_dependencies[] = "XSAVE" }, { "SHA", "SSE2" }, + { "SHA512", + "AVX2" }, + { "SM3", + "AVX" }, + { "SM4", + "AVX2" }, { "XSAVES", "XSAVEC" }, { "XSAVEC", @@ -336,6 +344,9 @@ static bitfield cpu_flags[] = BITFIELD (PRFCHW), BITFIELD (SMAP), BITFIELD (SHA), + BITFIELD (SHA512), + BITFIELD (SM3), + BITFIELD (SM4), BITFIELD (ClflushOpt), BITFIELD (XSAVES), BITFIELD (XSAVEC), @@ -359,6 +370,7 @@ static bitfield cpu_flags[] = BITFIELD (PREFETCHI), BITFIELD (AVX_IFMA), BITFIELD (AVX_VNNI_INT8), + BITFIELD (AVX_VNNI_INT16), BITFIELD (CMPCCXADD), BITFIELD (WRMSRNS), BITFIELD (MSRLIST), @@ -378,6 +390,7 @@ static bitfield cpu_flags[] = BITFIELD (VPCLMULQDQ), BITFIELD (WBNOINVD), BITFIELD (PCONFIG), + BITFIELD (PBNDKB), BITFIELD (WAITPKG), BITFIELD (UINTR), BITFIELD (CLDEMOTE), diff --git a/opcodes/i386-init.h b/opcodes/i386-init.h index 4d8db4c0810..b0262736b47 100644 --- a/opcodes/i386-init.h +++ b/opcodes/i386-init.h @@ -25,7 +25,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, 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_286_FLAGS \ { { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -34,7 +35,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, 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_386_FLAGS \ { { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -43,7 +45,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, 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_486_FLAGS \ { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -52,7 +55,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, 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_586_FLAGS \ { { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \ @@ -61,7 +65,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, 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_686_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, \ @@ -70,7 +75,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, 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, \ @@ -79,7 +85,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, 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, \ @@ -88,7 +95,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, 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, \ @@ -97,7 +105,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, 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, \ @@ -106,7 +115,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, 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, \ @@ -115,7 +125,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, 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, \ @@ -124,7 +135,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, 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, \ @@ -133,7 +145,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, 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, \ @@ -142,7 +155,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, 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, \ @@ -151,7 +165,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, 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_FISTTP_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, \ @@ -160,7 +175,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, 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, \ @@ -169,7 +185,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \ @@ -178,7 +195,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -187,7 +205,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, 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, \ @@ -196,7 +215,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, 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, \ @@ -205,7 +225,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -214,7 +235,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, 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, \ @@ -223,7 +245,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, 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, \ @@ -232,7 +255,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, 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, \ @@ -241,7 +265,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, 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, \ @@ -250,7 +275,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -259,7 +285,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -268,7 +295,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, 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, \ @@ -277,7 +305,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, 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, \ @@ -286,7 +315,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, 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_MONITOR_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -295,7 +325,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -304,7 +335,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -313,7 +345,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -322,7 +355,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -331,7 +365,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -340,7 +375,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -349,7 +385,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -358,7 +395,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -367,7 +405,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -376,7 +415,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -385,7 +425,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -394,7 +435,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, 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_IAMCU_FLAGS \ { { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -403,7 +445,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, 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, \ @@ -412,7 +455,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, 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, \ @@ -421,7 +465,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -430,7 +475,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -439,7 +485,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -448,7 +495,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -457,7 +505,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -466,7 +515,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, 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, \ @@ -475,7 +525,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, 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, \ @@ -484,7 +535,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, 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, \ @@ -493,7 +545,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, 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, \ @@ -502,7 +555,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, 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, \ @@ -511,7 +565,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, 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_LAHF_SAHF_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -520,7 +575,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, 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, \ @@ -529,7 +585,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, 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, \ @@ -538,7 +595,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, 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, \ @@ -547,7 +605,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, 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, \ @@ -556,7 +615,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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -565,7 +625,8 @@ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -574,7 +635,8 @@ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -583,7 +645,8 @@ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -592,7 +655,8 @@ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -601,7 +665,8 @@ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -610,7 +675,8 @@ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -619,7 +685,8 @@ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_LM_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -628,7 +695,8 @@ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -637,7 +705,8 @@ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -646,7 +715,8 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -655,7 +725,8 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -664,7 +735,8 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -673,250 +745,318 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ +#define CPU_SHA512_FLAGS \ + { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0 } } + +#define CPU_SM3_FLAGS \ + { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 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, 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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ +#define CPU_SM4_FLAGS \ + { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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 \ +#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, 0, 0, 0, 1, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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, 0, 0, 0, 1, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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, 0, 0, 0, 0, 0, \ + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 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, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 1, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, \ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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 \ +#define CPU_AVX512IFMA_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 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 \ +#define CPU_AVX512VBMI_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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 \ +#define CPU_AVX512_4VNNIW_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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 \ +#define CPU_AVX512_VPOPCNTDQ_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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 \ +#define CPU_AVX512_VBMI2_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_VP2INTERSECT_FLAGS \ +#define CPU_AVX512_VNNI_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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_VP2INTERSECT_FLAGS \ + { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_PREFETCHI_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, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_IFMA_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_INT8_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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_CMPCCXADD_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, 0, 0, 0, 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_WRMSRNS_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, 0, 0, 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_MSRLIST_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, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_NE_CONVERT_FLAGS \ +#define CPU_AVX_VNNI_INT16_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_RAO_INT_FLAGS \ +#define CPU_CMPCCXADD_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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_WRMSRNS_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, 0, \ + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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_MSRLIST_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, 0, \ + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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_NE_CONVERT_FLAGS \ + { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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_RAO_INT_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, 0, \ + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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_FRED_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -924,8 +1064,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, 0, 0, 0, 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, 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 } } #define CPU_LKGS_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -933,8 +1074,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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, \ @@ -942,8 +1084,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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, \ @@ -951,8 +1094,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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, \ @@ -960,8 +1104,9 @@ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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, \ @@ -969,8 +1114,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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, \ @@ -978,8 +1124,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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, \ @@ -987,8 +1134,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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, \ @@ -996,8 +1144,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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_INT8_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1005,8 +1154,9 @@ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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 } } #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, \ @@ -1014,8 +1164,9 @@ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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 } } #define CPU_AMX_FP16_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1023,8 +1174,9 @@ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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 } } #define CPU_AMX_COMPLEX_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1032,8 +1184,9 @@ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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 } } #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, \ @@ -1041,8 +1194,9 @@ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \ + 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -1050,8 +1204,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \ + 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -1059,8 +1214,9 @@ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \ + 0, 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_VPCLMULQDQ_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -1068,8 +1224,9 @@ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 1, 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_WBNOINVD_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1077,8 +1234,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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_PCONFIG_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1086,8 +1244,19 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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_PBNDKB_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, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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_WAITPKG_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1095,8 +1264,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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_UINTR_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1105,7 +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, \ - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_CLDEMOTE_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1114,7 +1285,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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_MOVDIRI_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1123,7 +1295,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 } } #define CPU_MOVDIR64B_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1132,7 +1305,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 } } #define CPU_ENQCMD_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1141,7 +1315,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 } } #define CPU_SERIALIZE_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1150,7 +1325,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 } } #define CPU_RDPRU_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1159,7 +1335,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 } } #define CPU_MCOMMIT_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1168,7 +1345,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 } } #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, \ @@ -1177,7 +1355,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 } } #define CPU_TSXLDTRK_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1186,7 +1365,8 @@ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_KL_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -1195,7 +1375,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 } } #define CPU_WIDEKL_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -1204,7 +1385,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, 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, 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, \ @@ -1213,7 +1395,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 } } #define CPU_INVLPGB_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1222,7 +1405,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, 1, 0, 0, 0, 0, 0, 0 } } + 0, 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_TLBSYNC_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1231,7 +1415,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 } } #define CPU_SNP_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1240,7 +1425,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, 1, 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 } } #define CPU_RMPQUERY_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1249,7 +1435,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, 1, 1, 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 } } #define CPU_UNKNOWN_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ @@ -1258,7 +1445,8 @@ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 0 } } + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, \ @@ -1267,7 +1455,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, 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, \ @@ -1276,7 +1465,8 @@ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -1285,7 +1475,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, 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, \ @@ -1294,7 +1485,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, 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, \ @@ -1303,7 +1495,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, 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, \ @@ -1312,7 +1505,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, 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, \ @@ -1321,7 +1515,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, 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, \ @@ -1330,7 +1525,8 @@ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -1339,7 +1535,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, 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, \ @@ -1348,7 +1545,8 @@ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -1357,7 +1555,8 @@ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -1366,7 +1565,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, 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, \ @@ -1375,7 +1575,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, 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, \ @@ -1384,7 +1585,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, 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, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, \ @@ -1393,7 +1595,8 @@ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, \ @@ -1402,7 +1605,8 @@ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -1411,7 +1615,8 @@ 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, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -1420,7 +1625,8 @@ 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, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -1429,7 +1635,8 @@ 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, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -1437,44 +1644,49 @@ 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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, 1, 0, 0, 0, 0, 0, \ 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 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, \ + 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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, 1, 0, 0, 0, 0, 0, \ 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 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, 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, 1, 0, 0, \ - 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 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, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 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, 1, 0, 0, 0, 0, 0, \ 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, \ - 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0 } } + 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \ + 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, \ + 1, 0, 0, 0, 0 } } #define CPU_ZNVER4_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, 1, 1, 1, 0, 0, 1, \ 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 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, 1, \ - 1, 0, 0, 1, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, \ - 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0 } } + 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, \ + 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 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, 1, 1, \ + 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 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, \ @@ -1483,7 +1695,8 @@ 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, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -1492,7 +1705,8 @@ 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, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -1501,7 +1715,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, 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_TSX_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1510,7 +1725,8 @@ 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 } } #define CPU_ANY_FXSR_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -1518,8 +1734,9 @@ 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, 1, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, \ + 0, 0, 0, 0, 0 } } #define CPU_ANY_8087_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, \ @@ -1528,7 +1745,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, 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, \ @@ -1537,7 +1755,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, 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, \ @@ -1546,7 +1765,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, 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, \ @@ -1555,7 +1775,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, 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_FISTTP_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \ @@ -1564,7 +1785,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, 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, \ @@ -1573,7 +1795,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, 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, \ @@ -1581,8 +1804,9 @@ 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, 1, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, \ @@ -1590,8 +1814,9 @@ 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, 1, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, \ + 0, 0, 0, 0, 0 } } #define CPU_ANY_3DNOW_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \ @@ -1600,7 +1825,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, 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_3DNOWA_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1609,7 +1835,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, 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, \ @@ -1618,7 +1845,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, 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_SVME_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1627,7 +1855,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, 1, 1, 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 } } #define CPU_ANY_VMX_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1636,7 +1865,8 @@ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ @@ -1645,7 +1875,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, 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, \ @@ -1654,7 +1885,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, 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, \ @@ -1663,7 +1895,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, 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, \ @@ -1672,34 +1905,38 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, 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, \ - 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, 1, 1, 0, 1, 1, 0, 0, 0, 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 } } + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, \ + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, \ + 0, 0, 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 } } #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, 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, 1, \ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, \ + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, \ + 0, 0, 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 } } #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, 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, 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, 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, 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, \ @@ -1708,7 +1945,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, 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, \ @@ -1717,7 +1955,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, 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, \ @@ -1726,7 +1965,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, 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, \ @@ -1735,7 +1975,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, 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, \ @@ -1744,16 +1985,18 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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, \ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 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, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 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 } } #define CPU_ANY_IAMCU_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1762,16 +2005,18 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_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, 1, 1, 1, 1, 1, 1, 1, \ 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, \ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, \ - 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, \ + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, \ + 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 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 } } #define CPU_ANY_XSAVEOPT_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1780,7 +2025,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, 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_AES_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1789,7 +2035,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, 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_PCLMUL_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1798,7 +2045,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, 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_FMA_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1807,7 +2055,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, 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_FMA4_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1816,7 +2065,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, 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_XOP_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1825,7 +2075,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, 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_LWP_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1834,7 +2085,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, 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_EPT_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1843,7 +2095,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, 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_F16C_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1852,7 +2105,8 @@ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_RTM_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1861,7 +2115,8 @@ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_ANY_VMFUNC_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1870,7 +2125,8 @@ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_MPX_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1879,7 +2135,8 @@ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_SHA_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1888,160 +2145,218 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_XSAVES_FLAGS \ +#define CPU_ANY_SHA512_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, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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_SM3_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, 1, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_SM4_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, 1, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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_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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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_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, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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 } } #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, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, \ - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, \ - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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 \ +#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, 0, 0, \ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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 \ +#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, 0, \ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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 \ +#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, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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 \ +#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, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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 \ +#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, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_VP2INTERSECT_FLAGS \ +#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, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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 \ +#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, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_FP16_FLAGS \ +#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, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_IFMA_FLAGS \ +#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, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_INT8_FLAGS \ +#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, 0, 0, 0, 1, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_NE_CONVERT_FLAGS \ +#define CPU_ANY_AVX_IFMA_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, 0, 0, 0, 0, 0, 0, \ + 0, 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_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, 1, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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_INT16_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, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_NE_CONVERT_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, 0, \ + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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_FRED_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -2049,8 +2364,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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_LKGS_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -2058,8 +2374,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, 0, 0, 0, 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, 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 } } #define CPU_ANY_OSPKE_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -2067,8 +2384,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 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, \ @@ -2076,8 +2394,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \ + 0, 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, \ @@ -2085,8 +2404,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, \ + 0, 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_FP16_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -2094,8 +2414,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \ + 0, 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_COMPLEX_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -2103,8 +2424,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \ + 0, 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, \ @@ -2112,8 +2434,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, \ + 0, 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_GFNI_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -2121,8 +2444,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \ + 0, 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_VAES_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -2130,8 +2454,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \ + 0, 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_VPCLMULQDQ_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -2139,8 +2464,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 1, 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_SEV_ES_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -2149,7 +2475,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, 1, 1, 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 } } #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, \ @@ -2158,7 +2485,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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 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_ANY_KL_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -2167,7 +2495,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, 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, 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, \ @@ -2176,7 +2505,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 } } #define CPU_ANY_SNP_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -2185,7 +2515,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, 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 } } #define CPU_ANY_RMPQUERY_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -2194,5 +2525,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, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0 } } diff --git a/opcodes/i386-mnem.h b/opcodes/i386-mnem.h index 96bf2d2565d..5d0b4d10469 100644 --- a/opcodes/i386-mnem.h +++ b/opcodes/i386-mnem.h @@ -27,2321 +27,2336 @@ extern const char i386_mnemonics[]; #define MN_fld1 0x22 #define MN_ud1 0x27 #define MN_sha1msg1 0x2b -#define MN_sha256msg1 0x34 -#define MN_fprem1 0x3f -#define MN_f2xm1 0x46 -#define MN_fyl2xp1 0x4c -#define MN_tileloaddt1 0x54 -#define MN_prefetcht1 0x60 -#define MN_prefetchit1 0x6b -#define MN_pfrcpit1 0x77 -#define MN_pfrsqit1 0x80 -#define MN_int1 0x89 -#define MN_prefetchwt1 0x8e -#define MN_vmovdqa32 0x9a -#define MN_data32 0xa4 -#define MN_crc32 0xab -#define MN_endbr32 0xb1 -#define MN_addr32 0xb9 -#define MN_vmovdqu32 0xc0 -#define MN_ud2 0xca -#define MN_fldlg2 0xce -#define MN_sha1msg2 0xd5 -#define MN_sha256msg2 0xde -#define MN_fldln2 0xe9 -#define MN_sha256rnds2 0xf0 -#define MN_prefetcht2 0xfc -#define MN_pfrcpit2 0x107 -#define MN_vbroadcastf32x2 0x110 -#define MN_vbroadcasti32x2 0x120 -#define MN_vshuff64x2 0x130 -#define MN_vextractf64x2 0x13b -#define MN_vinsertf64x2 0x149 -#define MN_vbroadcastf64x2 0x156 -#define MN_vshufi64x2 0x166 -#define MN_vextracti64x2 0x171 -#define MN_vinserti64x2 0x17f -#define MN_vbroadcasti64x2 0x18c -#define MN_int3 0x19c -#define MN_vmovdqa64 0x1a1 -#define MN_xsavec64 0x1ab +#define MN_vsha512msg1 0x34 +#define MN_vsm3msg1 0x40 +#define MN_sha256msg1 0x49 +#define MN_fprem1 0x54 +#define MN_f2xm1 0x5b +#define MN_fyl2xp1 0x61 +#define MN_tileloaddt1 0x69 +#define MN_prefetcht1 0x75 +#define MN_prefetchit1 0x80 +#define MN_pfrcpit1 0x8c +#define MN_pfrsqit1 0x95 +#define MN_int1 0x9e +#define MN_prefetchwt1 0xa3 +#define MN_vmovdqa32 0xaf +#define MN_data32 0xb9 +#define MN_crc32 0xc0 +#define MN_endbr32 0xc6 +#define MN_addr32 0xce +#define MN_vmovdqu32 0xd5 +#define MN_ud2 0xdf +#define MN_fldlg2 0xe3 +#define MN_sha1msg2 0xea +#define MN_vsha512msg2 0xf3 +#define MN_vsm3msg2 0xff +#define MN_sha256msg2 0x108 +#define MN_fldln2 0x113 +#define MN_vsha512rnds2 0x11a +#define MN_vsm3rnds2 0x127 +#define MN_sha256rnds2 0x131 +#define MN_prefetcht2 0x13d +#define MN_pfrcpit2 0x148 +#define MN_vbroadcastf32x2 0x151 +#define MN_vbroadcasti32x2 0x161 +#define MN_vshuff64x2 0x171 +#define MN_vextractf64x2 0x17c +#define MN_vinsertf64x2 0x18a +#define MN_vbroadcastf64x2 0x197 +#define MN_vshufi64x2 0x1a7 +#define MN_vextracti64x2 0x1b2 +#define MN_vinserti64x2 0x1c0 +#define MN_vbroadcasti64x2 0x1cd +#define MN_int3 0x1dd +#define MN_vmovdqa64 0x1e2 +#define MN_xsavec64 0x1ec #define MN_xsave64 (MN_fxsave64 + 1) -#define MN_fxsave64 0x1b4 -#define MN_endbr64 0x1bd +#define MN_fxsave64 0x1f5 +#define MN_endbr64 0x1fe #define MN_xrstor64 (MN_fxrstor64 + 1) -#define MN_fxrstor64 0x1c5 -#define MN_xsaves64 0x1cf -#define MN_xrstors64 0x1d8 -#define MN_xsaveopt64 0x1e2 -#define MN_vmovdqu64 0x1ed -#define MN_rex64 0x1f7 -#define MN_sha1rnds4 0x1fd -#define MN_vshuff32x4 0x207 -#define MN_vextractf32x4 0x212 -#define MN_vinsertf32x4 0x220 -#define MN_vbroadcastf32x4 0x22d -#define MN_vshufi32x4 0x23d -#define MN_vextracti32x4 0x248 -#define MN_vinserti32x4 0x256 -#define MN_vbroadcasti32x4 0x263 -#define MN_vextractf64x4 0x273 -#define MN_vinsertf64x4 0x281 -#define MN_vbroadcastf64x4 0x28e -#define MN_vextracti64x4 0x29e -#define MN_vinserti64x4 0x2ac -#define MN_vbroadcasti64x4 0x2b9 -#define MN_data16 0x2c9 -#define MN_vcvtne2ps2bf16 0x2d0 -#define MN_vcvtneps2bf16 0x2df -#define MN_addr16 0x2ed -#define MN_vmovdqu16 0x2f4 -#define MN_xsha256 0x2fe -#define MN_encodekey256 0x306 -#define MN_vperm2f128 0x313 -#define MN_vextractf128 0x31e -#define MN_vinsertf128 0x32b -#define MN_vbroadcastf128 0x337 -#define MN_vperm2i128 0x346 -#define MN_vextracti128 0x351 -#define MN_vinserti128 0x35e -#define MN_vbroadcasti128 0x36a -#define MN_encodekey128 0x379 -#define MN_vmovdqu8 0x386 -#define MN_vextractf32x8 0x38f -#define MN_vinsertf32x8 0x39d -#define MN_vbroadcastf32x8 0x3aa -#define MN_vextracti32x8 0x3ba -#define MN_vinserti32x8 0x3c8 -#define MN_vbroadcasti32x8 0x3d5 -#define MN_ud2a 0x3e5 -#define MN_aaa 0x3ea -#define MN_daa 0x3ee -#define MN_ssca 0x3f2 -#define MN_lea 0x3f7 -#define MN_invlpga 0x3fb -#define MN_pusha 0x403 -#define MN_ja 0x409 -#define MN_jna 0x40c -#define MN_setna 0x410 +#define MN_fxrstor64 0x206 +#define MN_xsaves64 0x210 +#define MN_xrstors64 0x219 +#define MN_xsaveopt64 0x223 +#define MN_vmovdqu64 0x22e +#define MN_rex64 0x238 +#define MN_sha1rnds4 0x23e +#define MN_vsm4rnds4 0x248 +#define MN_vshuff32x4 0x252 +#define MN_vextractf32x4 0x25d +#define MN_vinsertf32x4 0x26b +#define MN_vbroadcastf32x4 0x278 +#define MN_vshufi32x4 0x288 +#define MN_vextracti32x4 0x293 +#define MN_vinserti32x4 0x2a1 +#define MN_vbroadcasti32x4 0x2ae +#define MN_vextractf64x4 0x2be +#define MN_vinsertf64x4 0x2cc +#define MN_vbroadcastf64x4 0x2d9 +#define MN_vextracti64x4 0x2e9 +#define MN_vinserti64x4 0x2f7 +#define MN_vbroadcasti64x4 0x304 +#define MN_vsm4key4 0x314 +#define MN_data16 0x31d +#define MN_vcvtne2ps2bf16 0x324 +#define MN_vcvtneps2bf16 0x333 +#define MN_addr16 0x341 +#define MN_vmovdqu16 0x348 +#define MN_xsha256 0x352 +#define MN_encodekey256 0x35a +#define MN_vperm2f128 0x367 +#define MN_vextractf128 0x372 +#define MN_vinsertf128 0x37f +#define MN_vbroadcastf128 0x38b +#define MN_vperm2i128 0x39a +#define MN_vextracti128 0x3a5 +#define MN_vinserti128 0x3b2 +#define MN_vbroadcasti128 0x3be +#define MN_encodekey128 0x3cd +#define MN_vmovdqu8 0x3da +#define MN_vextractf32x8 0x3e3 +#define MN_vinsertf32x8 0x3f1 +#define MN_vbroadcastf32x8 0x3fe +#define MN_vextracti32x8 0x40e +#define MN_vinserti32x8 0x41c +#define MN_vbroadcasti32x8 0x429 +#define MN_ud2a 0x439 +#define MN_aaa 0x43e +#define MN_daa 0x442 +#define MN_ssca 0x446 +#define MN_lea 0x44b +#define MN_invlpga 0x44f +#define MN_pusha 0x457 +#define MN_ja 0x45d +#define MN_jna 0x460 +#define MN_setna 0x464 #define MN_cmovna (MN_fcmovna + 1) -#define MN_fcmovna 0x416 -#define MN_popa 0x41e +#define MN_fcmovna 0x46a +#define MN_popa 0x472 #define MN_movntdqa (MN_vmovntdqa + 1) -#define MN_vmovntdqa 0x423 +#define MN_vmovntdqa 0x477 #define MN_movdqa (MN_vmovdqa + 1) -#define MN_vmovdqa 0x42d -#define MN_seta 0x435 -#define MN_prefetchnta 0x43a +#define MN_vmovdqa 0x481 +#define MN_seta 0x489 +#define MN_prefetchnta 0x48e #define MN_cmova (MN_fcmova + 1) -#define MN_fcmova 0x446 -#define MN_rex_b 0x44d -#define MN_ud2b 0x453 -#define MN_vpermi2b 0x458 -#define MN_vpmovm2b 0x461 -#define MN_vpermt2b 0x46a -#define MN_movdir64b 0x473 -#define MN_cmpxchg16b 0x47d -#define MN_cmpxchg8b 0x488 -#define MN_vpshab 0x492 -#define MN_sbb 0x499 +#define MN_fcmova 0x49a +#define MN_rex_b 0x4a1 +#define MN_ud2b 0x4a7 +#define MN_vpermi2b 0x4ac +#define MN_vpmovm2b 0x4b5 +#define MN_vpermt2b 0x4be +#define MN_movdir64b 0x4c7 +#define MN_cmpxchg16b 0x4d1 +#define MN_cmpxchg8b 0x4dc +#define MN_vpshab 0x4e6 +#define MN_sbb 0x4ed #define MN_psubb (MN_vpsubb + 1) -#define MN_vpsubb 0x49d -#define MN_xcrypt_ecb 0x4a4 -#define MN_xcryptecb 0x4af -#define MN_llwpcb 0x4b9 -#define MN_slwpcb 0x4c0 -#define MN_kaddb 0x4c7 +#define MN_vpsubb 0x4f1 +#define MN_xcrypt_ecb 0x4f8 +#define MN_xcryptecb 0x503 +#define MN_llwpcb 0x50d +#define MN_slwpcb 0x514 +#define MN_kaddb 0x51b #define MN_paddb (MN_vpaddb + 1) -#define MN_vpaddb 0x4cd -#define MN_kandb 0x4d4 -#define MN_vpexpandb 0x4da -#define MN_vpmovusdb 0x4e4 -#define MN_vpmovsdb 0x4ee -#define MN_vpmovdb 0x4f7 -#define MN_vpcomgeb 0x4ff -#define MN_vpcomleb 0x508 -#define MN_vpcmpnleb 0x511 -#define MN_vpcmpleb 0x51b -#define MN_vpcomfalseb 0x524 -#define MN_vpcomtrueb 0x530 -#define MN_xcrypt_cfb 0x53b -#define MN_xcryptcfb 0x546 -#define MN_xcrypt_ofb 0x550 -#define MN_xcryptofb 0x55b +#define MN_vpaddb 0x521 +#define MN_kandb 0x528 +#define MN_vpexpandb 0x52e +#define MN_vpmovusdb 0x538 +#define MN_vpmovsdb 0x542 +#define MN_vpmovdb 0x54b +#define MN_vpcomgeb 0x553 +#define MN_vpcomleb 0x55c +#define MN_vpcmpnleb 0x565 +#define MN_vpcmpleb 0x56f +#define MN_vpcomfalseb 0x578 +#define MN_vpcomtrueb 0x584 +#define MN_xcrypt_cfb 0x58f +#define MN_xcryptcfb 0x59a +#define MN_xcrypt_ofb 0x5a4 +#define MN_xcryptofb 0x5af #define MN_pshufb (MN_vpshufb + 1) -#define MN_vpshufb 0x565 -#define MN_invlpgb 0x56d +#define MN_vpshufb 0x5b9 +#define MN_invlpgb 0x5c1 #define MN_pavgb (MN_vpavgb + 1) -#define MN_vpavgb 0x575 -#define MN_jb 0x57c +#define MN_vpavgb 0x5c9 +#define MN_jb 0x5d0 +#define MN_pbndkb 0x5d3 #define MN_pmovmskb (MN_vpmovmskb + 1) -#define MN_vpmovmskb 0x57f -#define MN_vpshlb 0x589 -#define MN_kshiftlb 0x590 +#define MN_vpmovmskb 0x5da +#define MN_vpshlb 0x5e4 +#define MN_kshiftlb 0x5eb #define MN_gf2p8mulb (MN_vgf2p8mulb + 1) -#define MN_vgf2p8mulb 0x599 -#define MN_vpblendmb 0x5a4 -#define MN_vptestnmb 0x5ae -#define MN_vpcomb 0x5b8 -#define MN_vpshufbitqmb 0x5bf -#define MN_vpermb 0x5cc -#define MN_vptestmb 0x5d3 -#define MN_kandnb 0x5dc +#define MN_vgf2p8mulb 0x5f4 +#define MN_vpblendmb 0x5ff +#define MN_vptestnmb 0x609 +#define MN_vpcomb 0x613 +#define MN_vpshufbitqmb 0x61a +#define MN_vpermb 0x627 +#define MN_vptestmb 0x62e +#define MN_kandnb 0x637 #define MN_psignb (MN_vpsignb + 1) -#define MN_vpsignb 0x5e3 -#define MN_jnb 0x5eb -#define MN_setnb 0x5ef +#define MN_vpsignb 0x63e +#define MN_jnb 0x646 +#define MN_setnb 0x64a #define MN_cmovnb (MN_fcmovnb + 1) -#define MN_fcmovnb 0x5f5 -#define MN_vpcmpb 0x5fd -#define MN_vpcomeqb 0x604 +#define MN_fcmovnb 0x650 +#define MN_vpcmpb 0x658 +#define MN_vpcomeqb 0x65f #define MN_gf2p8affineqb (MN_vgf2p8affineqb + 1) -#define MN_vgf2p8affineqb 0x60d -#define MN_vpcomneqb 0x61c -#define MN_vpcmpneqb 0x626 +#define MN_vgf2p8affineqb 0x668 +#define MN_vpcomneqb 0x677 +#define MN_vpcmpneqb 0x681 #define MN_pcmpeqb (MN_vpcmpeqb + 1) -#define MN_vpcmpeqb 0x630 -#define MN_vpmovusqb 0x639 -#define MN_vpmovsqb 0x643 -#define MN_vpmultishiftqb 0x64c +#define MN_vpcmpeqb 0x68b +#define MN_vpmovusqb 0x694 +#define MN_vpmovsqb 0x69e +#define MN_vpmultishiftqb 0x6a7 #define MN_gf2p8affineinvqb (MN_vgf2p8affineinvqb + 1) -#define MN_vgf2p8affineinvqb 0x65b -#define MN_vpmovqb 0x66d -#define MN_rex_rb 0x675 -#define MN_korb 0x67c -#define MN_kxnorb 0x681 -#define MN_kxorb 0x688 +#define MN_vgf2p8affineinvqb 0x6b6 +#define MN_vpmovqb 0x6c8 +#define MN_rex_rb 0x6d0 +#define MN_korb 0x6d7 +#define MN_kxnorb 0x6dc +#define MN_kxorb 0x6e3 #define MN_pinsrb (MN_vpinsrb + 1) -#define MN_vpinsrb 0x68e -#define MN_kshiftrb 0x696 +#define MN_vpinsrb 0x6e9 +#define MN_kshiftrb 0x6f1 #define MN_pextrb (MN_vpextrb + 1) -#define MN_vpextrb 0x69f -#define MN_rex_wrb 0x6a7 +#define MN_vpextrb 0x6fa +#define MN_rex_wrb 0x702 #define MN_pabsb (MN_vpabsb + 1) -#define MN_vpabsb 0x6af +#define MN_vpabsb 0x70a #define MN_psubsb (MN_vpsubsb + 1) -#define MN_vpsubsb 0x6b6 +#define MN_vpsubsb 0x711 #define MN_paddsb (MN_vpaddsb + 1) -#define MN_vpaddsb 0x6be +#define MN_vpaddsb 0x719 #define MN_pminsb (MN_vpminsb + 1) -#define MN_vpminsb 0x6c6 -#define MN_vpcompressb 0x6ce +#define MN_vpminsb 0x721 +#define MN_vpcompressb 0x729 #define MN_psubusb (MN_vpsubusb + 1) -#define MN_vpsubusb 0x6da +#define MN_vpsubusb 0x735 #define MN_paddusb (MN_vpaddusb + 1) -#define MN_vpaddusb 0x6e3 -#define MN_pavgusb 0x6ec -#define MN_movsb 0x6f4 +#define MN_vpaddusb 0x73e +#define MN_pavgusb 0x747 +#define MN_movsb 0x74f #define MN_pmaxsb (MN_vpmaxsb + 1) -#define MN_vpmaxsb 0x6fa -#define MN_setb 0x702 -#define MN_vpcomgtb 0x707 +#define MN_vpmaxsb 0x755 +#define MN_setb 0x75d +#define MN_vpcomgtb 0x762 #define MN_pcmpgtb (MN_vpcmpgtb + 1) -#define MN_vpcmpgtb 0x710 -#define MN_vpcomltb 0x719 -#define MN_vpcmpnltb 0x722 -#define MN_vpcmpltb 0x72c -#define MN_vpopcntb 0x735 -#define MN_knotb 0x73e -#define MN_vprotb 0x744 -#define MN_vpbroadcastb 0x74b -#define MN_ktestb 0x758 -#define MN_kortestb 0x75f -#define MN_vpcomgeub 0x768 -#define MN_vpcomleub 0x772 -#define MN_vpcmpnleub 0x77c -#define MN_vpcmpleub 0x787 -#define MN_vpcomfalseub 0x791 -#define MN_vpcomtrueub 0x79e -#define MN_vpcomub 0x7aa +#define MN_vpcmpgtb 0x76b +#define MN_vpcomltb 0x774 +#define MN_vpcmpnltb 0x77d +#define MN_vpcmpltb 0x787 +#define MN_vpopcntb 0x790 +#define MN_knotb 0x799 +#define MN_vprotb 0x79f +#define MN_vpbroadcastb 0x7a6 +#define MN_ktestb 0x7b3 +#define MN_kortestb 0x7ba +#define MN_vpcomgeub 0x7c3 +#define MN_vpcomleub 0x7cd +#define MN_vpcmpnleub 0x7d7 +#define MN_vpcmpleub 0x7e2 +#define MN_vpcomfalseub 0x7ec +#define MN_vpcomtrueub 0x7f9 +#define MN_vpcomub 0x805 #define MN_pminub (MN_vpminub + 1) -#define MN_vpminub 0x7b2 -#define MN_vpcmpub 0x7ba -#define MN_vpcomequb 0x7c2 -#define MN_vpcomnequb 0x7cc -#define MN_vpcmpnequb 0x7d7 -#define MN_vpcmpequb 0x7e2 +#define MN_vpminub 0x80d +#define MN_vpcmpub 0x815 +#define MN_vpcomequb 0x81d +#define MN_vpcomnequb 0x827 +#define MN_vpcmpnequb 0x832 +#define MN_vpcmpequb 0x83d #define MN_sub (MN_fsub + 1) #define MN_fsub (MN_pfsub + 1) -#define MN_pfsub 0x7ec -#define MN_fisub 0x7f2 -#define MN_vpcomgtub 0x7f8 -#define MN_vpcomltub 0x802 -#define MN_vpcmpnltub 0x80c -#define MN_vpcmpltub 0x817 +#define MN_pfsub 0x847 +#define MN_fisub 0x84d +#define MN_vpcomgtub 0x853 +#define MN_vpcomltub 0x85d +#define MN_vpcmpnltub 0x867 +#define MN_vpcmpltub 0x872 #define MN_pmaxub (MN_vpmaxub + 1) -#define MN_vpmaxub 0x821 +#define MN_vpmaxub 0x87c #define MN_pblendvb (MN_vpblendvb + 1) -#define MN_vpblendvb 0x829 +#define MN_vpblendvb 0x884 #define MN_cmovb (MN_fcmovb + 1) -#define MN_fcmovb 0x833 -#define MN_kmovb 0x83a -#define MN_rex_wb 0x840 -#define MN_clwb 0x847 +#define MN_fcmovb 0x88e +#define MN_kmovb 0x895 +#define MN_rex_wb 0x89b +#define MN_clwb 0x8a2 #define MN_packsswb (MN_vpacksswb + 1) -#define MN_vpacksswb 0x84c +#define MN_vpacksswb 0x8a7 #define MN_packuswb (MN_vpackuswb + 1) -#define MN_vpackuswb 0x856 -#define MN_vpmovuswb 0x860 -#define MN_vpmovswb 0x86a -#define MN_vpmovwb 0x873 -#define MN_rex_xb 0x87b -#define MN_rex_rxb 0x882 -#define MN_rex_wrxb 0x88a -#define MN_rex_wxb 0x893 -#define MN_movzb 0x89b -#define MN_clac 0x8a1 -#define MN_stac 0x8a6 -#define MN_xcrypt_cbc 0x8ab -#define MN_xcryptcbc 0x8b6 -#define MN_pfacc 0x8c0 -#define MN_pfnacc 0x8c6 -#define MN_pfpnacc 0x8cd -#define MN_adc 0x8d5 +#define MN_vpackuswb 0x8b1 +#define MN_vpmovuswb 0x8bb +#define MN_vpmovswb 0x8c5 +#define MN_vpmovwb 0x8ce +#define MN_rex_xb 0x8d6 +#define MN_rex_rxb 0x8dd +#define MN_rex_wrxb 0x8e5 +#define MN_rex_wxb 0x8ee +#define MN_movzb 0x8f6 +#define MN_clac 0x8fc +#define MN_stac 0x901 +#define MN_xcrypt_cbc 0x906 +#define MN_xcryptcbc 0x911 +#define MN_pfacc 0x91b +#define MN_pfnacc 0x921 +#define MN_pfpnacc 0x928 +#define MN_adc 0x930 #define MN_dec (MN_aesdec + 3) #define MN_aesdec (MN_vaesdec + 1) -#define MN_vaesdec 0x8d9 -#define MN_getsec 0x8e1 -#define MN_xsavec 0x8e8 -#define MN_blcic 0x8ef -#define MN_blsic 0x8f5 -#define MN_jc 0x8fb -#define MN_t1mskc 0x8fe -#define MN_clc 0x905 -#define MN_cmc 0x909 +#define MN_vaesdec 0x934 +#define MN_getsec 0x93c +#define MN_xsavec 0x943 +#define MN_blcic 0x94a +#define MN_blsic 0x950 +#define MN_jc 0x956 +#define MN_t1mskc 0x959 +#define MN_clc 0x960 +#define MN_cmc 0x964 #define MN_aesimc (MN_vaesimc + 1) -#define MN_vaesimc 0x90d -#define MN_rdpmc 0x915 +#define MN_vaesimc 0x968 +#define MN_rdpmc 0x970 #define MN_aesenc (MN_vaesenc + 1) -#define MN_vaesenc 0x91b -#define MN_inc 0x923 -#define MN_jnc 0x927 -#define MN_setnc 0x92b -#define MN_vmfunc 0x931 -#define MN_cmovnc 0x938 -#define MN_tlbsync 0x93f -#define MN_rdtsc 0x947 -#define MN_btc 0x94d -#define MN_setc 0x951 -#define MN_stc 0x956 -#define MN_cmovc 0x95a -#define MN_vpermi2d 0x960 -#define MN_vpmovm2d 0x969 -#define MN_vpermt2d 0x972 -#define MN_vpbroadcastmw2d 0x97b -#define MN_aad 0x98b -#define MN_vmread 0x98f -#define MN_vpshad 0x996 -#define MN_vmload 0x99d +#define MN_vaesenc 0x976 +#define MN_inc 0x97e +#define MN_jnc 0x982 +#define MN_setnc 0x986 +#define MN_vmfunc 0x98c +#define MN_cmovnc 0x993 +#define MN_tlbsync 0x99a +#define MN_rdtsc 0x9a2 +#define MN_btc 0x9a8 +#define MN_setc 0x9ac +#define MN_stc 0x9b1 +#define MN_cmovc 0x9b5 +#define MN_vpermi2d 0x9bb +#define MN_vpmovm2d 0x9c4 +#define MN_vpermt2d 0x9cd +#define MN_vpbroadcastmw2d 0x9d6 +#define MN_aad 0x9e6 +#define MN_vmread 0x9ea +#define MN_vpshad 0x9f1 +#define MN_vmload 0x9f8 #define MN_psrad (MN_vpsrad + 1) -#define MN_vpsrad 0x9a4 -#define MN_vphaddbd 0x9ab -#define MN_vphaddubd 0x9b4 +#define MN_vpsrad 0x9ff +#define MN_vphaddbd 0xa06 +#define MN_vphaddubd 0xa0f #define MN_phsubd (MN_vphsubd + 1) -#define MN_vphsubd 0x9be +#define MN_vphsubd 0xa19 #define MN_psubd (MN_vpsubd + 1) -#define MN_vpsubd 0x9c6 +#define MN_vpsubd 0xa21 #define MN_pmovsxbd (MN_vpmovsxbd + 1) -#define MN_vpmovsxbd 0x9cd +#define MN_vpmovsxbd 0xa28 #define MN_pmovzxbd (MN_vpmovzxbd + 1) -#define MN_vpmovzxbd 0x9d7 +#define MN_vpmovzxbd 0xa32 #define MN_add (MN_aadd + 1) -#define MN_aadd 0x9e1 +#define MN_aadd 0xa3c #define MN_fadd (MN_pfadd + 1) -#define MN_pfadd 0x9e6 -#define MN_fiadd 0x9ec -#define MN_tileloadd 0x9f2 +#define MN_pfadd 0xa41 +#define MN_fiadd 0xa47 +#define MN_tileloadd 0xa4d #define MN_xadd (MN_cmpnaxadd + 5) -#define MN_cmpnaxadd 0x9fc -#define MN_cmpaxadd 0xa06 -#define MN_cmpnbxadd 0xa0f -#define MN_cmpbxadd 0xa19 -#define MN_cmpncxadd 0xa22 -#define MN_cmpcxadd 0xa2c -#define MN_cmpnaexadd 0xa35 -#define MN_cmpaexadd 0xa40 -#define MN_cmpnbexadd 0xa4a -#define MN_cmpbexadd 0xa55 -#define MN_cmpngexadd 0xa5f -#define MN_cmpgexadd 0xa6a -#define MN_cmpnlexadd 0xa74 -#define MN_cmplexadd 0xa7f -#define MN_cmpnexadd 0xa89 -#define MN_cmpexadd 0xa93 -#define MN_cmppexadd 0xa9c -#define MN_cmpngxadd 0xaa6 -#define MN_cmpgxadd 0xab0 -#define MN_cmpnlxadd 0xab9 -#define MN_cmplxadd 0xac3 -#define MN_cmpnoxadd 0xacc -#define MN_cmpoxadd 0xad6 -#define MN_cmppoxadd 0xadf -#define MN_cmpnpxadd 0xae9 -#define MN_cmppxadd 0xaf3 -#define MN_cmpnsxadd 0xafc -#define MN_cmpsxadd 0xb06 -#define MN_cmpnzxadd 0xb0f -#define MN_cmpzxadd 0xb19 +#define MN_cmpnaxadd 0xa57 +#define MN_cmpaxadd 0xa61 +#define MN_cmpnbxadd 0xa6a +#define MN_cmpbxadd 0xa74 +#define MN_cmpncxadd 0xa7d +#define MN_cmpcxadd 0xa87 +#define MN_cmpnaexadd 0xa90 +#define MN_cmpaexadd 0xa9b +#define MN_cmpnbexadd 0xaa5 +#define MN_cmpbexadd 0xab0 +#define MN_cmpngexadd 0xaba +#define MN_cmpgexadd 0xac5 +#define MN_cmpnlexadd 0xacf +#define MN_cmplexadd 0xada +#define MN_cmpnexadd 0xae4 +#define MN_cmpexadd 0xaee +#define MN_cmppexadd 0xaf7 +#define MN_cmpngxadd 0xb01 +#define MN_cmpgxadd 0xb0b +#define MN_cmpnlxadd 0xb14 +#define MN_cmplxadd 0xb1e +#define MN_cmpnoxadd 0xb27 +#define MN_cmpoxadd 0xb31 +#define MN_cmppoxadd 0xb3a +#define MN_cmpnpxadd 0xb44 +#define MN_cmppxadd 0xb4e +#define MN_cmpnsxadd 0xb57 +#define MN_cmpsxadd 0xb61 +#define MN_cmpnzxadd 0xb6a +#define MN_cmpzxadd 0xb74 #define MN_phaddd (MN_vphaddd + 1) -#define MN_vphaddd 0xb22 -#define MN_kaddd 0xb2a +#define MN_vphaddd 0xb7d +#define MN_kaddd 0xb85 #define MN_paddd (MN_vpaddd + 1) -#define MN_vpaddd 0xb30 -#define MN_vpshldd 0xb37 -#define MN_kandd 0xb3f -#define MN_vpandd 0xb45 -#define MN_vpexpandd 0xb4c -#define MN_vpblendd 0xb56 -#define MN_vpgatherdd 0xb5f -#define MN_vpscatterdd 0xb6a -#define MN_vpshrdd 0xb76 -#define MN_vpmacsdd 0xb7e -#define MN_vpmacssdd 0xb87 -#define MN_rdseed 0xb91 -#define MN_vpcomged 0xb98 -#define MN_vpcomled 0xba1 -#define MN_vpcmpnled 0xbaa -#define MN_vpcmpled 0xbb4 -#define MN_tilestored 0xbbd -#define MN_vpcomfalsed 0xbc8 -#define MN_vpcomtrued 0xbd4 -#define MN_pi2fd 0xbdf +#define MN_vpaddd 0xb8b +#define MN_vpshldd 0xb92 +#define MN_kandd 0xb9a +#define MN_vpandd 0xba0 +#define MN_vpexpandd 0xba7 +#define MN_vpblendd 0xbb1 +#define MN_vpgatherdd 0xbba +#define MN_vpscatterdd 0xbc5 +#define MN_vpshrdd 0xbd1 +#define MN_vpmacsdd 0xbd9 +#define MN_vpmacssdd 0xbe2 +#define MN_rdseed 0xbec +#define MN_vpcomged 0xbf3 +#define MN_vpcomled 0xbfc +#define MN_vpcmpnled 0xc05 +#define MN_vpcmpled 0xc0f +#define MN_tilestored 0xc18 +#define MN_vpcomfalsed 0xc23 +#define MN_vpcomtrued 0xc2f +#define MN_pi2fd 0xc3a #define MN_pshufd (MN_vpshufd + 1) -#define MN_vpshufd 0xbe5 -#define MN_vpternlogd 0xbed -#define MN_pf2id 0xbf8 -#define MN_invpcid 0xbfe -#define MN_rdpid 0xc06 -#define MN_invvpid 0xc0c -#define MN_cpuid 0xc14 -#define MN_fbld 0xc1a -#define MN_cld 0xc1f -#define MN_fld 0xc23 +#define MN_vpshufd 0xc40 +#define MN_vpternlogd 0xc48 +#define MN_pf2id 0xc53 +#define MN_invpcid 0xc59 +#define MN_rdpid 0xc61 +#define MN_invvpid 0xc67 +#define MN_cpuid 0xc6f +#define MN_fbld 0xc75 +#define MN_cld 0xc7a +#define MN_fld 0xc7e #define MN_shld (MN_vpshld + 2) -#define MN_vpshld 0xc27 -#define MN_fild 0xc2e +#define MN_vpshld 0xc82 +#define MN_fild 0xc89 #define MN_pslld (MN_vpslld + 1) -#define MN_vpslld 0xc33 +#define MN_vpslld 0xc8e #define MN_pmulld (MN_vpmulld + 1) -#define MN_vpmulld 0xc3a -#define MN_vprold 0xc42 +#define MN_vpmulld 0xc95 +#define MN_vprold 0xc9d #define MN_psrld (MN_vpsrld + 1) -#define MN_vpsrld 0xc49 -#define MN_vmptrld 0xc50 -#define MN_kshiftld 0xc58 -#define MN_enqcmd 0xc61 -#define MN_vpblendmd 0xc68 -#define MN_vptestnmd 0xc72 -#define MN_vpcomd 0xc7c -#define MN_vpermd 0xc83 -#define MN_vptestmd 0xc8a +#define MN_vpsrld 0xca4 +#define MN_vmptrld 0xcab +#define MN_kshiftld 0xcb3 +#define MN_enqcmd 0xcbc +#define MN_vpblendmd 0xcc3 +#define MN_vptestnmd 0xccd +#define MN_vpcomd 0xcd7 +#define MN_vpermd 0xcde +#define MN_vptestmd 0xce5 #define MN_and (MN_aand + 1) -#define MN_aand 0xc93 +#define MN_aand 0xcee #define MN_pand (MN_vpand + 1) -#define MN_vpand 0xc98 -#define MN_rdrand 0xc9e -#define MN_bnd 0xca5 -#define MN_kandnd 0xca9 -#define MN_vpandnd 0xcb0 -#define MN_xend 0xcb8 -#define MN_valignd 0xcbd +#define MN_vpand 0xcf3 +#define MN_rdrand 0xcf9 +#define MN_bnd 0xd00 +#define MN_kandnd 0xd04 +#define MN_vpandnd 0xd0b +#define MN_xend 0xd13 +#define MN_valignd 0xd18 #define MN_psignd (MN_vpsignd + 1) -#define MN_vpsignd 0xcc5 -#define MN_bound 0xccd -#define MN_slod 0xcd3 -#define MN_vfmaddsub231pd 0xcd8 -#define MN_vfmsub231pd 0xce7 -#define MN_vfnmsub231pd 0xcf3 -#define MN_vfmsubadd231pd 0xd00 -#define MN_vfmadd231pd 0xd0f -#define MN_vfnmadd231pd 0xd1b -#define MN_vfmaddsub132pd 0xd28 -#define MN_vfmsub132pd 0xd37 -#define MN_vfnmsub132pd 0xd43 -#define MN_vfmsubadd132pd 0xd50 -#define MN_vfmadd132pd 0xd5f -#define MN_vfnmadd132pd 0xd6b -#define MN_vcvtph2pd 0xd78 -#define MN_vpermi2pd 0xd82 -#define MN_cvtpi2pd 0xd8c -#define MN_vpermil2pd 0xd95 -#define MN_vexp2pd 0xda0 +#define MN_vpsignd 0xd20 +#define MN_bound 0xd28 +#define MN_slod 0xd2e +#define MN_vfmaddsub231pd 0xd33 +#define MN_vfmsub231pd 0xd42 +#define MN_vfnmsub231pd 0xd4e +#define MN_vfmsubadd231pd 0xd5b +#define MN_vfmadd231pd 0xd6a +#define MN_vfnmadd231pd 0xd76 +#define MN_vfmaddsub132pd 0xd83 +#define MN_vfmsub132pd 0xd92 +#define MN_vfnmsub132pd 0xd9e +#define MN_vfmsubadd132pd 0xdab +#define MN_vfmadd132pd 0xdba +#define MN_vfnmadd132pd 0xdc6 +#define MN_vcvtph2pd 0xdd3 +#define MN_vpermi2pd 0xddd +#define MN_cvtpi2pd 0xde7 +#define MN_vpermil2pd 0xdf0 +#define MN_vexp2pd 0xdfb #define MN_cvtdq2pd (MN_vcvtdq2pd + 1) -#define MN_vcvtdq2pd 0xda8 -#define MN_vcvtudq2pd 0xdb2 -#define MN_vcvtqq2pd 0xdbd -#define MN_vcvtuqq2pd 0xdc7 +#define MN_vcvtdq2pd 0xe03 +#define MN_vcvtudq2pd 0xe0d +#define MN_vcvtqq2pd 0xe18 +#define MN_vcvtuqq2pd 0xe22 #define MN_cvtps2pd (MN_vcvtps2pd + 1) -#define MN_vcvtps2pd 0xdd2 -#define MN_vpermt2pd 0xddc -#define MN_vfmaddsub213pd 0xde6 -#define MN_vfmsub213pd 0xdf5 -#define MN_vfnmsub213pd 0xe01 -#define MN_vfmsubadd213pd 0xe0e -#define MN_vfmadd213pd 0xe1d -#define MN_vfnmadd213pd 0xe29 -#define MN_vrcp14pd 0xe36 -#define MN_vrsqrt14pd 0xe3f -#define MN_vrcp28pd 0xe4a -#define MN_vrsqrt28pd 0xe53 +#define MN_vcvtps2pd 0xe2d +#define MN_vpermt2pd 0xe37 +#define MN_vfmaddsub213pd 0xe41 +#define MN_vfmsub213pd 0xe50 +#define MN_vfnmsub213pd 0xe5c +#define MN_vfmsubadd213pd 0xe69 +#define MN_vfmadd213pd 0xe78 +#define MN_vfnmadd213pd 0xe84 +#define MN_vrcp14pd 0xe91 +#define MN_vrsqrt14pd 0xe9a +#define MN_vrcp28pd 0xea5 +#define MN_vrsqrt28pd 0xeae #define MN_movapd (MN_vmovapd + 1) -#define MN_vmovapd 0xe5e -#define MN_pswapd 0xe66 +#define MN_vmovapd 0xeb9 +#define MN_pswapd 0xec1 #define MN_subpd (MN_addsubpd + 3) #define MN_addsubpd (MN_vfmaddsubpd + 3) -#define MN_vfmaddsubpd 0xe6d -#define MN_vaddsubpd 0xe79 +#define MN_vfmaddsubpd 0xec8 +#define MN_vaddsubpd 0xed4 #define MN_hsubpd (MN_vhsubpd + 1) -#define MN_vhsubpd 0xe83 -#define MN_vfmsubpd 0xe8b -#define MN_vfnmsubpd 0xe94 -#define MN_vsubpd 0xe9e -#define MN_vgatherpf0dpd 0xea5 -#define MN_vscatterpf0dpd 0xeb3 -#define MN_vgatherpf1dpd 0xec2 -#define MN_vscatterpf1dpd 0xed0 +#define MN_vhsubpd 0xede +#define MN_vfmsubpd 0xee6 +#define MN_vfnmsubpd 0xeef +#define MN_vsubpd 0xef9 +#define MN_vgatherpf0dpd 0xf00 +#define MN_vscatterpf0dpd 0xf0e +#define MN_vgatherpf1dpd 0xf1d +#define MN_vscatterpf1dpd 0xf2b #define MN_addpd (MN_vfmsubaddpd + 6) -#define MN_vfmsubaddpd 0xedf +#define MN_vfmsubaddpd 0xf3a #define MN_haddpd (MN_vhaddpd + 1) -#define MN_vhaddpd 0xeeb -#define MN_vfmaddpd 0xef3 -#define MN_vfnmaddpd 0xefc -#define MN_vaddpd 0xf06 +#define MN_vhaddpd 0xf46 +#define MN_vfmaddpd 0xf4e +#define MN_vfnmaddpd 0xf57 +#define MN_vaddpd 0xf61 #define MN_andpd (MN_vexpandpd + 4) -#define MN_vexpandpd 0xf0d -#define MN_vandpd 0xf17 +#define MN_vexpandpd 0xf68 +#define MN_vandpd 0xf72 #define MN_blendpd (MN_vblendpd + 1) -#define MN_vblendpd 0xf1e +#define MN_vblendpd 0xf79 #define MN_roundpd (MN_vroundpd + 1) -#define MN_vroundpd 0xf27 -#define MN_vgatherdpd 0xf30 -#define MN_vscatterdpd 0xf3b +#define MN_vroundpd 0xf82 +#define MN_vgatherdpd 0xf8b +#define MN_vscatterdpd 0xf96 #define MN_cmpunordpd (MN_vcmpunordpd + 1) -#define MN_vcmpunordpd 0xf47 +#define MN_vcmpunordpd 0xfa2 #define MN_cmpordpd (MN_vcmpordpd + 1) -#define MN_vcmpordpd 0xf53 -#define MN_vreducepd 0xf5d -#define MN_vrangepd 0xf67 -#define MN_vcmpngepd 0xf70 -#define MN_vcmpgepd 0xf7a -#define MN_vrndscalepd 0xf83 +#define MN_vcmpordpd 0xfae +#define MN_vreducepd 0xfb8 +#define MN_vrangepd 0xfc2 +#define MN_vcmpngepd 0xfcb +#define MN_vcmpgepd 0xfd5 +#define MN_vrndscalepd 0xfde #define MN_cmpnlepd (MN_vcmpnlepd + 1) -#define MN_vcmpnlepd 0xf8f +#define MN_vcmpnlepd 0xfea #define MN_cmplepd (MN_vcmplepd + 1) -#define MN_vcmplepd 0xf99 -#define MN_vcmpfalsepd 0xfa2 -#define MN_vcmptruepd 0xfae -#define MN_vscalefpd 0xfb9 +#define MN_vcmplepd 0xff4 +#define MN_vcmpfalsepd 0xffd +#define MN_vcmptruepd 0x1009 +#define MN_vscalefpd 0x1014 #define MN_shufpd (MN_vshufpd + 1) -#define MN_vshufpd 0xfc3 +#define MN_vshufpd 0x101e #define MN_unpckhpd (MN_vunpckhpd + 1) -#define MN_vunpckhpd 0xfcb +#define MN_vunpckhpd 0x1026 #define MN_movhpd (MN_vmovhpd + 1) -#define MN_vmovhpd 0xfd5 +#define MN_vmovhpd 0x1030 #define MN_movmskpd (MN_vmovmskpd + 1) -#define MN_vmovmskpd 0xfdd -#define MN_vpermilpd 0xfe7 +#define MN_vmovmskpd 0x1038 +#define MN_vpermilpd 0x1042 #define MN_unpcklpd (MN_vunpcklpd + 1) -#define MN_vunpcklpd 0xff1 +#define MN_vunpcklpd 0x104c #define MN_mulpd (MN_vmulpd + 1) -#define MN_vmulpd 0xffb +#define MN_vmulpd 0x1056 #define MN_movlpd (MN_vmovlpd + 1) -#define MN_vmovlpd 0x1002 -#define MN_vpcmpd 0x100a -#define MN_vblendmpd 0x1011 -#define MN_vfixupimmpd 0x101b -#define MN_vpermpd 0x1027 +#define MN_vmovlpd 0x105d +#define MN_vpcmpd 0x1065 +#define MN_vblendmpd 0x106c +#define MN_vfixupimmpd 0x1076 +#define MN_vpermpd 0x1082 #define MN_andnpd (MN_vandnpd + 1) -#define MN_vandnpd 0x102f +#define MN_vandnpd 0x108a #define MN_minpd (MN_vminpd + 1) -#define MN_vminpd 0x1037 +#define MN_vminpd 0x1092 #define MN_dppd (MN_vdppd + 1) -#define MN_vdppd 0x103e +#define MN_vdppd 0x1099 #define MN_cmppd (MN_vcmppd + 1) -#define MN_vcmppd 0x1044 -#define MN_vgetexppd 0x104b -#define MN_vgatherpf0qpd 0x1055 -#define MN_vscatterpf0qpd 0x1063 -#define MN_vgatherpf1qpd 0x1072 -#define MN_vscatterpf1qpd 0x1080 -#define MN_vcmpunord_qpd 0x108f -#define MN_vcmpord_qpd 0x109d +#define MN_vcmppd 0x109f +#define MN_vgetexppd 0x10a6 +#define MN_vgatherpf0qpd 0x10b0 +#define MN_vscatterpf0qpd 0x10be +#define MN_vgatherpf1qpd 0x10cd +#define MN_vscatterpf1qpd 0x10db +#define MN_vcmpunord_qpd 0x10ea +#define MN_vcmpord_qpd 0x10f8 #define MN_cmpneqpd (MN_vcmpneqpd + 1) -#define MN_vcmpneqpd 0x10a9 +#define MN_vcmpneqpd 0x1104 #define MN_cmpeqpd (MN_vcmpeqpd + 1) -#define MN_vcmpeqpd 0x10b3 -#define MN_vcmpge_oqpd 0x10bc -#define MN_vcmple_oqpd 0x10c8 -#define MN_vcmpfalse_oqpd 0x10d4 -#define MN_vcmpneq_oqpd 0x10e3 -#define MN_vcmpeq_oqpd 0x10f0 -#define MN_vcmpgt_oqpd 0x10fc -#define MN_vcmplt_oqpd 0x1108 -#define MN_vgatherqpd 0x1114 -#define MN_vscatterqpd 0x111f -#define MN_vcmpnge_uqpd 0x112b -#define MN_vcmpnle_uqpd 0x1138 -#define MN_vcmptrue_uqpd 0x1145 -#define MN_vcmpneq_uqpd 0x1153 -#define MN_vcmpeq_uqpd 0x1160 -#define MN_vcmpngt_uqpd 0x116c -#define MN_vcmpnlt_uqpd 0x1179 +#define MN_vcmpeqpd 0x110e +#define MN_vcmpge_oqpd 0x1117 +#define MN_vcmple_oqpd 0x1123 +#define MN_vcmpfalse_oqpd 0x112f +#define MN_vcmpneq_oqpd 0x113e +#define MN_vcmpeq_oqpd 0x114b +#define MN_vcmpgt_oqpd 0x1157 +#define MN_vcmplt_oqpd 0x1163 +#define MN_vgatherqpd 0x116f +#define MN_vscatterqpd 0x117a +#define MN_vcmpnge_uqpd 0x1186 +#define MN_vcmpnle_uqpd 0x1193 +#define MN_vcmptrue_uqpd 0x11a0 +#define MN_vcmpneq_uqpd 0x11ae +#define MN_vcmpeq_uqpd 0x11bb +#define MN_vcmpngt_uqpd 0x11c7 +#define MN_vcmpnlt_uqpd 0x11d4 #define MN_orpd (MN_vorpd + 1) -#define MN_vorpd 0x1186 +#define MN_vorpd 0x11e1 #define MN_xorpd (MN_vxorpd + 1) -#define MN_vxorpd 0x118c -#define MN_vcmpunord_spd 0x1193 -#define MN_vcmpord_spd 0x11a1 -#define MN_vcmpge_ospd 0x11ad -#define MN_vcmple_ospd 0x11b9 -#define MN_vcmpfalse_ospd 0x11c5 -#define MN_vcmpneq_ospd 0x11d4 -#define MN_vcmpeq_ospd 0x11e1 -#define MN_vcmpgt_ospd 0x11ed -#define MN_vcmplt_ospd 0x11f9 -#define MN_vfpclasspd 0x1205 -#define MN_incsspd 0x1210 -#define MN_rdsspd 0x1218 -#define MN_vcompresspd 0x121f -#define MN_vcmpnge_uspd 0x122b -#define MN_vcmpnle_uspd 0x1238 -#define MN_vcmptrue_uspd 0x1245 -#define MN_vcmpneq_uspd 0x1253 -#define MN_vcmpeq_uspd 0x1260 -#define MN_vcmpngt_uspd 0x126c -#define MN_vcmpnlt_uspd 0x1279 -#define MN_vcmpngtpd 0x1286 -#define MN_vcmpgtpd 0x1290 +#define MN_vxorpd 0x11e7 +#define MN_vcmpunord_spd 0x11ee +#define MN_vcmpord_spd 0x11fc +#define MN_vcmpge_ospd 0x1208 +#define MN_vcmple_ospd 0x1214 +#define MN_vcmpfalse_ospd 0x1220 +#define MN_vcmpneq_ospd 0x122f +#define MN_vcmpeq_ospd 0x123c +#define MN_vcmpgt_ospd 0x1248 +#define MN_vcmplt_ospd 0x1254 +#define MN_vfpclasspd 0x1260 +#define MN_incsspd 0x126b +#define MN_rdsspd 0x1273 +#define MN_vcompresspd 0x127a +#define MN_vcmpnge_uspd 0x1286 +#define MN_vcmpnle_uspd 0x1293 +#define MN_vcmptrue_uspd 0x12a0 +#define MN_vcmpneq_uspd 0x12ae +#define MN_vcmpeq_uspd 0x12bb +#define MN_vcmpngt_uspd 0x12c7 +#define MN_vcmpnlt_uspd 0x12d4 +#define MN_vcmpngtpd 0x12e1 +#define MN_vcmpgtpd 0x12eb #define MN_cmpnltpd (MN_vcmpnltpd + 1) -#define MN_vcmpnltpd 0x1299 +#define MN_vcmpnltpd 0x12f4 #define MN_cmpltpd (MN_vcmpltpd + 1) -#define MN_vcmpltpd 0x12a3 -#define MN_vgetmantpd 0x12ac +#define MN_vcmpltpd 0x12fe +#define MN_vgetmantpd 0x1307 #define MN_movntpd (MN_vmovntpd + 1) -#define MN_vmovntpd 0x12b7 +#define MN_vmovntpd 0x1312 #define MN_sqrtpd (MN_vsqrtpd + 1) -#define MN_vsqrtpd 0x12c0 -#define MN_vtestpd 0x12c8 +#define MN_vsqrtpd 0x131b +#define MN_vtestpd 0x1323 #define MN_movupd (MN_vmovupd + 1) -#define MN_vmovupd 0x12d0 +#define MN_vmovupd 0x132b #define MN_blendvpd (MN_vblendvpd + 1) -#define MN_vblendvpd 0x12d8 +#define MN_vblendvpd 0x1333 #define MN_divpd (MN_vdivpd + 1) -#define MN_vdivpd 0x12e2 -#define MN_vmaskmovpd 0x12e9 +#define MN_vdivpd 0x133d +#define MN_vmaskmovpd 0x1344 #define MN_maxpd (MN_vmaxpd + 1) -#define MN_vmaxpd 0x12f4 -#define MN_vfrczpd 0x12fb -#define MN_vpcomeqd 0x1303 -#define MN_vpcomneqd 0x130c -#define MN_vpcmpneqd 0x1316 +#define MN_vmaxpd 0x134f +#define MN_vfrczpd 0x1356 +#define MN_vpcomeqd 0x135e +#define MN_vpcomneqd 0x1367 +#define MN_vpcmpneqd 0x1371 #define MN_pcmpeqd (MN_vpcmpeqd + 1) -#define MN_vpcmpeqd 0x1320 -#define MN_vpgatherqd 0x1329 -#define MN_vpscatterqd 0x1334 -#define MN_vpmovusqd 0x1340 -#define MN_vpmovsqd 0x134a -#define MN_vpmovqd 0x1353 -#define MN_shrd 0x135b -#define MN_kord 0x1360 -#define MN_kxnord 0x1365 -#define MN_vpord 0x136c -#define MN_vprord 0x1372 +#define MN_vpcmpeqd 0x137b +#define MN_vpgatherqd 0x1384 +#define MN_vpscatterqd 0x138f +#define MN_vpmovusqd 0x139b +#define MN_vpmovsqd 0x13a5 +#define MN_vpmovqd 0x13ae +#define MN_shrd 0x13b6 +#define MN_kord 0x13bb +#define MN_kxnord 0x13c0 +#define MN_vpord 0x13c7 +#define MN_vprord 0x13cd #define MN_word (MN_aword + 1) -#define MN_aword 0x1379 +#define MN_aword 0x13d4 #define MN_dword (MN_adword + 1) -#define MN_adword 0x137f -#define MN_kxord 0x1386 -#define MN_vpxord 0x138c +#define MN_adword 0x13da +#define MN_kxord 0x13e1 +#define MN_vpxord 0x13e7 #define MN_pinsrd (MN_vpinsrd + 1) -#define MN_vpinsrd 0x1393 -#define MN_kshiftrd 0x139b +#define MN_vpinsrd 0x13ee +#define MN_kshiftrd 0x13f6 #define MN_pextrd (MN_vpextrd + 1) -#define MN_vpextrd 0x13a4 -#define MN_vfmsub231sd 0x13ac -#define MN_vfnmsub231sd 0x13b8 -#define MN_vfmadd231sd 0x13c5 -#define MN_vfnmadd231sd 0x13d1 -#define MN_vfmsub132sd 0x13de -#define MN_vfnmsub132sd 0x13ea -#define MN_vfmadd132sd 0x13f7 -#define MN_vfnmadd132sd 0x1403 -#define MN_vcvtsh2sd 0x1410 +#define MN_vpextrd 0x13ff +#define MN_vfmsub231sd 0x1407 +#define MN_vfnmsub231sd 0x1413 +#define MN_vfmadd231sd 0x1420 +#define MN_vfnmadd231sd 0x142c +#define MN_vfmsub132sd 0x1439 +#define MN_vfnmsub132sd 0x1445 +#define MN_vfmadd132sd 0x1452 +#define MN_vfnmadd132sd 0x145e +#define MN_vcvtsh2sd 0x146b #define MN_cvtsi2sd (MN_vcvtsi2sd + 1) -#define MN_vcvtsi2sd 0x141a -#define MN_vcvtusi2sd 0x1424 +#define MN_vcvtsi2sd 0x1475 +#define MN_vcvtusi2sd 0x147f #define MN_cvtss2sd (MN_vcvtss2sd + 1) -#define MN_vcvtss2sd 0x142f -#define MN_vfmsub213sd 0x1439 -#define MN_vfnmsub213sd 0x1445 -#define MN_vfmadd213sd 0x1452 -#define MN_vfnmadd213sd 0x145e -#define MN_vrcp14sd 0x146b -#define MN_vrsqrt14sd 0x1474 -#define MN_vrcp28sd 0x147f -#define MN_vrsqrt28sd 0x1488 +#define MN_vcvtss2sd 0x148a +#define MN_vfmsub213sd 0x1494 +#define MN_vfnmsub213sd 0x14a0 +#define MN_vfmadd213sd 0x14ad +#define MN_vfnmadd213sd 0x14b9 +#define MN_vrcp14sd 0x14c6 +#define MN_vrsqrt14sd 0x14cf +#define MN_vrcp28sd 0x14da +#define MN_vrsqrt28sd 0x14e3 #define MN_pabsd (MN_vpabsd + 1) -#define MN_vpabsd 0x1493 +#define MN_vpabsd 0x14ee #define MN_subsd (MN_vfmsubsd + 3) -#define MN_vfmsubsd 0x149a -#define MN_vfnmsubsd 0x14a3 -#define MN_vsubsd 0x14ad +#define MN_vfmsubsd 0x14f5 +#define MN_vfnmsubsd 0x14fe +#define MN_vsubsd 0x1508 #define MN_addsd (MN_vfmaddsd + 3) -#define MN_vfmaddsd 0x14b4 -#define MN_vfnmaddsd 0x14bd -#define MN_vaddsd 0x14c7 +#define MN_vfmaddsd 0x150f +#define MN_vfnmaddsd 0x1518 +#define MN_vaddsd 0x1522 #define MN_roundsd (MN_vroundsd + 1) -#define MN_vroundsd 0x14ce +#define MN_vroundsd 0x1529 #define MN_cmpunordsd (MN_vcmpunordsd + 1) -#define MN_vcmpunordsd 0x14d7 +#define MN_vcmpunordsd 0x1532 #define MN_cmpordsd (MN_vcmpordsd + 1) -#define MN_vcmpordsd 0x14e3 -#define MN_vreducesd 0x14ed -#define MN_vrangesd 0x14f7 -#define MN_vcmpngesd 0x1500 -#define MN_vcmpgesd 0x150a -#define MN_vrndscalesd 0x1513 +#define MN_vcmpordsd 0x153e +#define MN_vreducesd 0x1548 +#define MN_vrangesd 0x1552 +#define MN_vcmpngesd 0x155b +#define MN_vcmpgesd 0x1565 +#define MN_vrndscalesd 0x156e #define MN_cmpnlesd (MN_vcmpnlesd + 1) -#define MN_vcmpnlesd 0x151f +#define MN_vcmpnlesd 0x157a #define MN_cmplesd (MN_vcmplesd + 1) -#define MN_vcmplesd 0x1529 -#define MN_vcmpfalsesd 0x1532 -#define MN_vcmptruesd 0x153e -#define MN_vscalefsd 0x1549 +#define MN_vcmplesd 0x1584 +#define MN_vcmpfalsesd 0x158d +#define MN_vcmptruesd 0x1599 +#define MN_vscalefsd 0x15a4 #define MN_comisd (MN_ucomisd + 1) #define MN_ucomisd (MN_vucomisd + 1) -#define MN_vucomisd 0x1553 -#define MN_vcomisd 0x155c +#define MN_vucomisd 0x15ae +#define MN_vcomisd 0x15b7 #define MN_mulsd (MN_vmulsd + 1) -#define MN_vmulsd 0x1564 -#define MN_vfixupimmsd 0x156b +#define MN_vmulsd 0x15bf +#define MN_vfixupimmsd 0x15c6 #define MN_minsd (MN_pminsd + 1) #define MN_pminsd (MN_vpminsd + 1) -#define MN_vpminsd 0x1577 -#define MN_vminsd 0x157f +#define MN_vpminsd 0x15d2 +#define MN_vminsd 0x15da #define MN_cmpsd (MN_vcmpsd + 1) -#define MN_vcmpsd 0x1586 -#define MN_vgetexpsd 0x158d -#define MN_vcmpunord_qsd 0x1597 -#define MN_vcmpord_qsd 0x15a5 +#define MN_vcmpsd 0x15e1 +#define MN_vgetexpsd 0x15e8 +#define MN_vcmpunord_qsd 0x15f2 +#define MN_vcmpord_qsd 0x1600 #define MN_cmpneqsd (MN_vcmpneqsd + 1) -#define MN_vcmpneqsd 0x15b1 +#define MN_vcmpneqsd 0x160c #define MN_cmpeqsd (MN_vcmpeqsd + 1) -#define MN_vcmpeqsd 0x15bb -#define MN_vcmpge_oqsd 0x15c4 -#define MN_vcmple_oqsd 0x15d0 -#define MN_vcmpfalse_oqsd 0x15dc -#define MN_vcmpneq_oqsd 0x15eb -#define MN_vcmpeq_oqsd 0x15f8 -#define MN_vcmpgt_oqsd 0x1604 -#define MN_vcmplt_oqsd 0x1610 -#define MN_vcmpnge_uqsd 0x161c -#define MN_vcmpnle_uqsd 0x1629 -#define MN_vcmptrue_uqsd 0x1636 -#define MN_vcmpneq_uqsd 0x1644 -#define MN_vcmpeq_uqsd 0x1651 -#define MN_vcmpngt_uqsd 0x165d -#define MN_vcmpnlt_uqsd 0x166a -#define MN_vcmpunord_ssd 0x1677 -#define MN_vcmpord_ssd 0x1685 -#define MN_vpdpbssd 0x1691 -#define MN_tdpbssd 0x169a -#define MN_vpcompressd 0x16a2 -#define MN_vcmpge_ossd 0x16ae -#define MN_vcmple_ossd 0x16ba -#define MN_vcmpfalse_ossd 0x16c6 -#define MN_vcmpneq_ossd 0x16d5 -#define MN_vcmpeq_ossd 0x16e2 -#define MN_vcmpgt_ossd 0x16ee -#define MN_vcmplt_ossd 0x16fa -#define MN_wrssd 0x1706 -#define MN_vfpclasssd 0x170c -#define MN_vcmpnge_ussd 0x1717 -#define MN_vcmpnle_ussd 0x1724 -#define MN_vcmptrue_ussd 0x1731 -#define MN_vcmpneq_ussd 0x173f -#define MN_vcmpeq_ussd 0x174c -#define MN_vcmpngt_ussd 0x1758 -#define MN_vcmpnlt_ussd 0x1765 -#define MN_wrussd 0x1772 -#define MN_vp4dpwssd 0x1779 -#define MN_vpdpwssd 0x1783 -#define MN_vcmpngtsd 0x178c -#define MN_vcmpgtsd 0x1796 +#define MN_vcmpeqsd 0x1616 +#define MN_vcmpge_oqsd 0x161f +#define MN_vcmple_oqsd 0x162b +#define MN_vcmpfalse_oqsd 0x1637 +#define MN_vcmpneq_oqsd 0x1646 +#define MN_vcmpeq_oqsd 0x1653 +#define MN_vcmpgt_oqsd 0x165f +#define MN_vcmplt_oqsd 0x166b +#define MN_vcmpnge_uqsd 0x1677 +#define MN_vcmpnle_uqsd 0x1684 +#define MN_vcmptrue_uqsd 0x1691 +#define MN_vcmpneq_uqsd 0x169f +#define MN_vcmpeq_uqsd 0x16ac +#define MN_vcmpngt_uqsd 0x16b8 +#define MN_vcmpnlt_uqsd 0x16c5 +#define MN_vcmpunord_ssd 0x16d2 +#define MN_vcmpord_ssd 0x16e0 +#define MN_vpdpbssd 0x16ec +#define MN_tdpbssd 0x16f5 +#define MN_vpcompressd 0x16fd +#define MN_vcmpge_ossd 0x1709 +#define MN_vcmple_ossd 0x1715 +#define MN_vcmpfalse_ossd 0x1721 +#define MN_vcmpneq_ossd 0x1730 +#define MN_vcmpeq_ossd 0x173d +#define MN_vcmpgt_ossd 0x1749 +#define MN_vcmplt_ossd 0x1755 +#define MN_wrssd 0x1761 +#define MN_vfpclasssd 0x1767 +#define MN_vcmpnge_ussd 0x1772 +#define MN_vcmpnle_ussd 0x177f +#define MN_vcmptrue_ussd 0x178c +#define MN_vcmpneq_ussd 0x179a +#define MN_vcmpeq_ussd 0x17a7 +#define MN_vcmpngt_ussd 0x17b3 +#define MN_vcmpnlt_ussd 0x17c0 +#define MN_wrussd 0x17cd +#define MN_vp4dpwssd 0x17d4 +#define MN_vpdpwssd 0x17de +#define MN_vcmpngtsd 0x17e7 +#define MN_vcmpgtsd 0x17f1 #define MN_cmpnltsd (MN_vcmpnltsd + 1) -#define MN_vcmpnltsd 0x179f +#define MN_vcmpnltsd 0x17fa #define MN_cmpltsd (MN_vcmpltsd + 1) -#define MN_vcmpltsd 0x17a9 -#define MN_vgetmantsd 0x17b2 -#define MN_movntsd 0x17bd +#define MN_vcmpltsd 0x1804 +#define MN_vgetmantsd 0x180d +#define MN_movntsd 0x1818 #define MN_sqrtsd (MN_vsqrtsd + 1) -#define MN_vsqrtsd 0x17c5 -#define MN_vbroadcastsd 0x17cd -#define MN_vpdpbusd 0x17da -#define MN_tdpbusd 0x17e3 +#define MN_vsqrtsd 0x1820 +#define MN_vbroadcastsd 0x1828 +#define MN_vpdpbusd 0x1835 +#define MN_tdpbusd 0x183e +#define MN_vpdpwusd 0x1846 #define MN_divsd (MN_vdivsd + 1) -#define MN_vdivsd 0x17eb +#define MN_vdivsd 0x184f #define MN_movsd (MN_vmovsd + 1) -#define MN_vmovsd 0x17f2 +#define MN_vmovsd 0x1856 #define MN_maxsd (MN_pmaxsd + 1) #define MN_pmaxsd (MN_vpmaxsd + 1) -#define MN_vpmaxsd 0x17f9 -#define MN_vmaxsd 0x1801 -#define MN_vfrczsd 0x1808 -#define MN_vp2intersectd 0x1810 -#define MN_vpconflictd 0x181e -#define MN_vpcomgtd 0x182a +#define MN_vpmaxsd 0x185d +#define MN_vmaxsd 0x1865 +#define MN_vfrczsd 0x186c +#define MN_vp2intersectd 0x1874 +#define MN_vpconflictd 0x1882 +#define MN_vpcomgtd 0x188e #define MN_pcmpgtd (MN_vpcmpgtd + 1) -#define MN_vpcmpgtd 0x1833 -#define MN_cltd 0x183c -#define MN_vpcomltd 0x1841 -#define MN_vpcmpnltd 0x184a -#define MN_vpcmpltd 0x1854 -#define MN_vpopcntd 0x185d -#define MN_vplzcntd 0x1866 -#define MN_knotd 0x186f -#define MN_vprotd 0x1875 +#define MN_vpcmpgtd 0x1897 +#define MN_cltd 0x18a0 +#define MN_vpcomltd 0x18a5 +#define MN_vpcmpnltd 0x18ae +#define MN_vpcmpltd 0x18b8 +#define MN_vpopcntd 0x18c1 +#define MN_vplzcntd 0x18ca +#define MN_knotd 0x18d3 +#define MN_vprotd 0x18d9 #define MN_std (MN_vpbroadcastd + 9) -#define MN_vpbroadcastd 0x187c -#define MN_ktestd 0x1889 -#define MN_kortestd 0x1890 -#define MN_cwtd 0x1899 -#define MN_vpcomgeud 0x189e -#define MN_vpcomleud 0x18a8 -#define MN_vpcmpnleud 0x18b2 -#define MN_vpcmpleud 0x18bd -#define MN_vpcomfalseud 0x18c7 -#define MN_vpcomtrueud 0x18d4 -#define MN_vpcomud 0x18e0 +#define MN_vpbroadcastd 0x18e0 +#define MN_ktestd 0x18ed +#define MN_kortestd 0x18f4 +#define MN_cwtd 0x18fd +#define MN_vpcomgeud 0x1902 +#define MN_vpcomleud 0x190c +#define MN_vpcmpnleud 0x1916 +#define MN_vpcmpleud 0x1921 +#define MN_vpcomfalseud 0x192b +#define MN_vpcomtrueud 0x1938 +#define MN_vpcomud 0x1944 #define MN_pminud (MN_vpminud + 1) -#define MN_vpminud 0x18e8 -#define MN_vpcmpud 0x18f0 -#define MN_vpcomequd 0x18f8 -#define MN_vpcomnequd 0x1902 -#define MN_vpcmpnequd 0x190d -#define MN_vpcmpequd 0x1918 -#define MN_vpdpbsud 0x1922 -#define MN_tdpbsud 0x192b -#define MN_vpcomgtud 0x1933 -#define MN_vpcomltud 0x193d -#define MN_vpcmpnltud 0x1947 -#define MN_vpcmpltud 0x1952 -#define MN_vpdpbuud 0x195c -#define MN_tdpbuud 0x1965 +#define MN_vpminud 0x194c +#define MN_vpcmpud 0x1954 +#define MN_vpcomequd 0x195c +#define MN_vpcomnequd 0x1966 +#define MN_vpcmpnequd 0x1971 +#define MN_vpcmpequd 0x197c +#define MN_vpdpbsud 0x1986 +#define MN_tdpbsud 0x198f +#define MN_vpdpwsud 0x1997 +#define MN_vpcomgtud 0x19a0 +#define MN_vpcomltud 0x19aa +#define MN_vpcmpnltud 0x19b4 +#define MN_vpcmpltud 0x19bf +#define MN_vpdpbuud 0x19c9 +#define MN_tdpbuud 0x19d2 +#define MN_vpdpwuud 0x19da #define MN_pmaxud (MN_vpmaxud + 1) -#define MN_vpmaxud 0x196d -#define MN_vpsravd 0x1975 -#define MN_vpshldvd 0x197d -#define MN_vpshrdvd 0x1986 -#define MN_vpsllvd 0x198f -#define MN_vprolvd 0x1997 -#define MN_vpsrlvd 0x199f +#define MN_vpmaxud 0x19e3 +#define MN_vpsravd 0x19eb +#define MN_vpshldvd 0x19f3 +#define MN_vpshrdvd 0x19fc +#define MN_vpsllvd 0x1a05 +#define MN_vprolvd 0x1a0d +#define MN_vpsrlvd 0x1a15 #define MN_invd (MN_wbinvd + 2) -#define MN_wbinvd 0x19a7 -#define MN_wbnoinvd 0x19ae +#define MN_wbinvd 0x1a1d +#define MN_wbnoinvd 0x1a24 #define MN_movd (MN_kmovd + 1) #define MN_kmovd (MN_vpmaskmovd + 5) -#define MN_vpmaskmovd 0x19b7 -#define MN_vmovd 0x19c2 -#define MN_vprorvd 0x19c8 -#define MN_vphsubwd 0x19d0 -#define MN_cwd 0x19d9 -#define MN_vphaddwd 0x19dd +#define MN_vpmaskmovd 0x1a2d +#define MN_vmovd 0x1a38 +#define MN_vprorvd 0x1a3e +#define MN_vphsubwd 0x1a46 +#define MN_cwd 0x1a4f +#define MN_vphaddwd 0x1a53 #define MN_pmaddwd (MN_vpmaddwd + 1) -#define MN_vpmaddwd 0x19e6 +#define MN_vpmaddwd 0x1a5c #define MN_punpckhwd (MN_vpunpckhwd + 1) -#define MN_vpunpckhwd 0x19ef -#define MN_kunpckwd 0x19fa +#define MN_vpunpckhwd 0x1a65 +#define MN_kunpckwd 0x1a70 #define MN_punpcklwd (MN_vpunpcklwd + 1) -#define MN_vpunpcklwd 0x1a03 -#define MN_vpmacswd 0x1a0e -#define MN_vpmadcswd 0x1a17 -#define MN_vpmacsswd 0x1a21 -#define MN_vpmadcsswd 0x1a2b -#define MN_vphadduwd 0x1a36 +#define MN_vpunpcklwd 0x1a79 +#define MN_vpmacswd 0x1a84 +#define MN_vpmadcswd 0x1a8d +#define MN_vpmacsswd 0x1a97 +#define MN_vpmadcsswd 0x1aa1 +#define MN_vphadduwd 0x1aac #define MN_pmovsxwd (MN_vpmovsxwd + 1) -#define MN_vpmovsxwd 0x1a40 +#define MN_vpmovsxwd 0x1ab6 #define MN_pmovzxwd (MN_vpmovzxwd + 1) -#define MN_vpmovzxwd 0x1a4a -#define MN_movsxd 0x1a54 -#define MN_fldl2e 0x1a5b -#define MN_jae 0x1a62 -#define MN_jnae 0x1a66 -#define MN_setnae 0x1a6b +#define MN_vpmovzxwd 0x1ac0 +#define MN_movsxd 0x1aca +#define MN_fldl2e 0x1ad1 +#define MN_jae 0x1ad8 +#define MN_jnae 0x1adc +#define MN_setnae 0x1ae1 #define MN_cmovnae (MN_fcmovnae + 1) -#define MN_fcmovnae 0x1a72 -#define MN_setae 0x1a7b +#define MN_fcmovnae 0x1ae8 +#define MN_setae 0x1af1 #define MN_cmovae (MN_fcmovae + 1) -#define MN_fcmovae 0x1a81 -#define MN_jbe 0x1a89 -#define MN_jnbe 0x1a8d -#define MN_setnbe 0x1a92 +#define MN_fcmovae 0x1af7 +#define MN_jbe 0x1aff +#define MN_jnbe 0x1b03 +#define MN_setnbe 0x1b08 #define MN_cmovnbe (MN_fcmovnbe + 1) -#define MN_fcmovnbe 0x1a99 -#define MN_setbe 0x1aa2 +#define MN_fcmovnbe 0x1b0f +#define MN_setbe 0x1b18 #define MN_movbe (MN_cmovbe + 1) #define MN_cmovbe (MN_fcmovbe + 1) -#define MN_fcmovbe 0x1aa8 -#define MN_lfence 0x1ab0 -#define MN_mfence 0x1ab7 -#define MN_sfence 0x1abe -#define MN_cwde 0x1ac5 -#define MN_ffree 0x1aca -#define MN_jge 0x1ad0 -#define MN_jnge 0x1ad4 -#define MN_setnge 0x1ad9 -#define MN_cmovnge 0x1ae0 -#define MN_pfcmpge 0x1ae8 -#define MN_setge 0x1af0 -#define MN_cmovge 0x1af6 -#define MN_je 0x1afd -#define MN_fscale 0x1b00 -#define MN_jle 0x1b07 -#define MN_jnle 0x1b0b -#define MN_setnle 0x1b10 -#define MN_cmovnle 0x1b17 -#define MN_setle 0x1b1f -#define MN_cmovle 0x1b25 -#define MN_vmresume 0x1b2c -#define MN_jne 0x1b35 -#define MN_repne 0x1b39 -#define MN_loopne 0x1b3f -#define MN_setne 0x1b46 +#define MN_fcmovbe 0x1b1e +#define MN_lfence 0x1b26 +#define MN_mfence 0x1b2d +#define MN_sfence 0x1b34 +#define MN_cwde 0x1b3b +#define MN_ffree 0x1b40 +#define MN_jge 0x1b46 +#define MN_jnge 0x1b4a +#define MN_setnge 0x1b4f +#define MN_cmovnge 0x1b56 +#define MN_pfcmpge 0x1b5e +#define MN_setge 0x1b66 +#define MN_cmovge 0x1b6c +#define MN_je 0x1b73 +#define MN_fscale 0x1b76 +#define MN_jle 0x1b7d +#define MN_jnle 0x1b81 +#define MN_setnle 0x1b86 +#define MN_cmovnle 0x1b8d +#define MN_setle 0x1b95 +#define MN_cmovle 0x1b9b +#define MN_vmresume 0x1ba2 +#define MN_jne 0x1bab +#define MN_repne 0x1baf +#define MN_loopne 0x1bb5 +#define MN_setne 0x1bbc #define MN_cmovne (MN_fcmovne + 1) -#define MN_fcmovne 0x1b4c -#define MN_repe 0x1b54 -#define MN_jpe 0x1b59 -#define MN_loope 0x1b5d -#define MN_setpe 0x1b63 -#define MN_cmovpe 0x1b69 -#define MN_cdqe 0x1b70 -#define MN_xacquire 0x1b75 -#define MN_xstore 0x1b7e -#define MN_rdfsbase 0x1b85 -#define MN_wrfsbase 0x1b8e -#define MN_rdgsbase 0x1b97 -#define MN_wrgsbase 0x1ba0 -#define MN_tilerelease 0x1ba9 -#define MN_xrelease 0x1bb5 +#define MN_fcmovne 0x1bc2 +#define MN_repe 0x1bca +#define MN_jpe 0x1bcf +#define MN_loope 0x1bd3 +#define MN_setpe 0x1bd9 +#define MN_cmovpe 0x1bdf +#define MN_cdqe 0x1be6 +#define MN_xacquire 0x1beb +#define MN_xstore 0x1bf4 +#define MN_rdfsbase 0x1bfb +#define MN_wrfsbase 0x1c04 +#define MN_rdgsbase 0x1c0d +#define MN_wrgsbase 0x1c16 +#define MN_tilerelease 0x1c1f +#define MN_xrelease 0x1c2b #define MN_pause (MN_tpause + 1) -#define MN_tpause 0x1bbe -#define MN_pvalidate 0x1bc5 -#define MN_rmpupdate 0x1bcf -#define MN_sete 0x1bd9 -#define MN_vmwrite 0x1bde -#define MN_ptwrite 0x1be6 -#define MN_cldemote 0x1bee -#define MN_sha1nexte 0x1bf7 -#define MN_leave 0x1c01 -#define MN_fsave 0x1c07 -#define MN_vmsave 0x1c0d -#define MN_fnsave 0x1c14 +#define MN_tpause 0x1c34 +#define MN_pvalidate 0x1c3b +#define MN_rmpupdate 0x1c45 +#define MN_sete 0x1c4f +#define MN_vmwrite 0x1c54 +#define MN_ptwrite 0x1c5c +#define MN_cldemote 0x1c64 +#define MN_sha1nexte 0x1c6d +#define MN_leave 0x1c77 +#define MN_fsave 0x1c7d +#define MN_vmsave 0x1c83 +#define MN_fnsave 0x1c8a #define MN_xsave (MN_fxsave + 1) -#define MN_fxsave 0x1c1b +#define MN_fxsave 0x1c91 #define MN_cmove (MN_fcmove + 1) -#define MN_fcmove 0x1c22 -#define MN_serialize 0x1c29 -#define MN_vmxoff 0x1c33 -#define MN_lahf 0x1c3a -#define MN_sahf 0x1c3f -#define MN_pushf 0x1c44 -#define MN_popf 0x1c4a -#define MN_bsf 0x1c4f -#define MN_retf 0x1c53 -#define MN_neg 0x1c58 -#define MN_ldtilecfg 0x1c5c -#define MN_sttilecfg 0x1c66 +#define MN_fcmove 0x1c98 +#define MN_serialize 0x1c9f +#define MN_vmxoff 0x1ca9 +#define MN_lahf 0x1cb0 +#define MN_sahf 0x1cb5 +#define MN_pushf 0x1cba +#define MN_popf 0x1cc0 +#define MN_bsf 0x1cc5 +#define MN_retf 0x1cc9 +#define MN_neg 0x1cce +#define MN_ldtilecfg 0x1cd2 +#define MN_sttilecfg 0x1cdc #define MN_xchg (MN_cmpxchg + 3) -#define MN_cmpxchg 0x1c70 -#define MN_pconfig 0x1c78 -#define MN_jg 0x1c80 -#define MN_jng 0x1c83 -#define MN_xstore_rng 0x1c87 -#define MN_xstorerng 0x1c92 -#define MN_setng 0x1c9c -#define MN_cmovng 0x1ca2 -#define MN_invlpg 0x1ca9 -#define MN_setg 0x1cb0 -#define MN_cmovg 0x1cb5 -#define MN_vmlaunch 0x1cbb -#define MN_prefetch 0x1cc4 -#define MN_fxch 0x1ccd -#define MN_vfmaddsub231ph 0x1cd2 -#define MN_vfmsub231ph 0x1ce1 -#define MN_vfnmsub231ph 0x1ced -#define MN_vfmsubadd231ph 0x1cfa -#define MN_vfmadd231ph 0x1d09 -#define MN_vfnmadd231ph 0x1d15 -#define MN_vfmaddsub132ph 0x1d22 -#define MN_vfmsub132ph 0x1d31 -#define MN_vfnmsub132ph 0x1d3d -#define MN_vfmsubadd132ph 0x1d4a -#define MN_vfmadd132ph 0x1d59 -#define MN_vfnmadd132ph 0x1d65 -#define MN_vcvtpd2ph 0x1d72 -#define MN_vcvtdq2ph 0x1d7c -#define MN_vcvtudq2ph 0x1d86 -#define MN_vcvtqq2ph 0x1d91 -#define MN_vcvtuqq2ph 0x1d9b -#define MN_vcvtps2ph 0x1da6 -#define MN_vcvtw2ph 0x1db0 -#define MN_vcvtuw2ph 0x1db9 -#define MN_vfmaddsub213ph 0x1dc3 -#define MN_vfmsub213ph 0x1dd2 -#define MN_vfnmsub213ph 0x1dde -#define MN_vfmsubadd213ph 0x1deb -#define MN_vfmadd213ph 0x1dfa -#define MN_vfnmadd213ph 0x1e06 -#define MN_vsubph 0x1e13 -#define MN_vfcmaddcph 0x1e1a -#define MN_vfmaddcph 0x1e25 -#define MN_vfcmulcph 0x1e2f -#define MN_vfmulcph 0x1e39 -#define MN_vaddph 0x1e42 -#define MN_vcmpunordph 0x1e49 -#define MN_vcmpordph 0x1e55 -#define MN_vreduceph 0x1e5f -#define MN_vcmpngeph 0x1e69 -#define MN_vcmpgeph 0x1e73 -#define MN_vrndscaleph 0x1e7c -#define MN_vcmpnleph 0x1e88 -#define MN_vcmpleph 0x1e92 -#define MN_vcmpfalseph 0x1e9b -#define MN_vcmptrueph 0x1ea7 -#define MN_vscalefph 0x1eb2 -#define MN_vmulph 0x1ebc -#define MN_vminph 0x1ec3 -#define MN_vrcpph 0x1eca -#define MN_vcmpph 0x1ed1 -#define MN_vgetexpph 0x1ed8 -#define MN_vcmpunord_qph 0x1ee2 -#define MN_vcmpord_qph 0x1ef0 -#define MN_vcmpneqph 0x1efc -#define MN_vcmpeqph 0x1f06 -#define MN_vcmpge_oqph 0x1f0f -#define MN_vcmple_oqph 0x1f1b -#define MN_vcmpfalse_oqph 0x1f27 -#define MN_vcmpneq_oqph 0x1f36 -#define MN_vcmpeq_oqph 0x1f43 -#define MN_vcmpgt_oqph 0x1f4f -#define MN_vcmplt_oqph 0x1f5b -#define MN_vcmpnge_uqph 0x1f67 -#define MN_vcmpnle_uqph 0x1f74 -#define MN_vcmptrue_uqph 0x1f81 -#define MN_vcmpneq_uqph 0x1f8f -#define MN_vcmpeq_uqph 0x1f9c -#define MN_vcmpngt_uqph 0x1fa8 -#define MN_vcmpnlt_uqph 0x1fb5 -#define MN_vcmpunord_sph 0x1fc2 -#define MN_vcmpord_sph 0x1fd0 -#define MN_vcmpge_osph 0x1fdc -#define MN_vcmple_osph 0x1fe8 -#define MN_vcmpfalse_osph 0x1ff4 -#define MN_vcmpneq_osph 0x2003 -#define MN_vcmpeq_osph 0x2010 -#define MN_vcmpgt_osph 0x201c -#define MN_vcmplt_osph 0x2028 -#define MN_vfpclassph 0x2034 -#define MN_vcmpnge_usph 0x203f -#define MN_vcmpnle_usph 0x204c -#define MN_vcmptrue_usph 0x2059 -#define MN_vcmpneq_usph 0x2067 -#define MN_vcmpeq_usph 0x2074 -#define MN_vcmpngt_usph 0x2080 -#define MN_vcmpnlt_usph 0x208d -#define MN_vcmpngtph 0x209a -#define MN_vcmpgtph 0x20a4 -#define MN_vcmpnltph 0x20ad -#define MN_vcmpltph 0x20b7 -#define MN_vgetmantph 0x20c0 -#define MN_vrsqrtph 0x20cb -#define MN_vsqrtph 0x20d4 -#define MN_vdivph 0x20dc -#define MN_vmaxph 0x20e3 -#define MN_vpmacsdqh 0x20ea -#define MN_vpmacssdqh 0x20f4 -#define MN_vfmsub231sh 0x20ff -#define MN_vfnmsub231sh 0x210b -#define MN_vfmadd231sh 0x2118 -#define MN_vfnmadd231sh 0x2124 -#define MN_vfmsub132sh 0x2131 -#define MN_vfnmsub132sh 0x213d -#define MN_vfmadd132sh 0x214a -#define MN_vfnmadd132sh 0x2156 -#define MN_vcvtsd2sh 0x2163 -#define MN_vcvtsi2sh 0x216d -#define MN_vcvtusi2sh 0x2177 -#define MN_vcvtss2sh 0x2182 -#define MN_vfmsub213sh 0x218c -#define MN_vfnmsub213sh 0x2198 -#define MN_vfmadd213sh 0x21a5 -#define MN_vfnmadd213sh 0x21b1 -#define MN_psmash 0x21be -#define MN_vsubsh 0x21c5 -#define MN_vfcmaddcsh 0x21cc -#define MN_vfmaddcsh 0x21d7 -#define MN_vfcmulcsh 0x21e1 -#define MN_vfmulcsh 0x21eb -#define MN_vaddsh 0x21f4 -#define MN_vcmpunordsh 0x21fb -#define MN_vcmpordsh 0x2207 -#define MN_vreducesh 0x2211 -#define MN_vcmpngesh 0x221b -#define MN_vcmpgesh 0x2225 -#define MN_vrndscalesh 0x222e -#define MN_vcmpnlesh 0x223a -#define MN_vcmplesh 0x2244 -#define MN_vcmpfalsesh 0x224d -#define MN_vcmptruesh 0x2259 -#define MN_vscalefsh 0x2264 -#define MN_vucomish 0x226e -#define MN_vcomish 0x2277 -#define MN_vmulsh 0x227f -#define MN_vminsh 0x2286 -#define MN_vrcpsh 0x228d -#define MN_vcmpsh 0x2294 -#define MN_vgetexpsh 0x229b -#define MN_vcmpunord_qsh 0x22a5 -#define MN_vcmpord_qsh 0x22b3 -#define MN_vcmpneqsh 0x22bf -#define MN_vcmpeqsh 0x22c9 -#define MN_vcmpge_oqsh 0x22d2 -#define MN_vcmple_oqsh 0x22de -#define MN_vcmpfalse_oqsh 0x22ea -#define MN_vcmpneq_oqsh 0x22f9 -#define MN_vcmpeq_oqsh 0x2306 -#define MN_vcmpgt_oqsh 0x2312 -#define MN_vcmplt_oqsh 0x231e -#define MN_vcmpnge_uqsh 0x232a -#define MN_vcmpnle_uqsh 0x2337 -#define MN_vcmptrue_uqsh 0x2344 -#define MN_vcmpneq_uqsh 0x2352 -#define MN_vcmpeq_uqsh 0x235f -#define MN_vcmpngt_uqsh 0x236b -#define MN_vcmpnlt_uqsh 0x2378 -#define MN_vcmpunord_ssh 0x2385 -#define MN_vcmpord_ssh 0x2393 -#define MN_vcmpge_ossh 0x239f -#define MN_vcmple_ossh 0x23ab -#define MN_vcmpfalse_ossh 0x23b7 -#define MN_vcmpneq_ossh 0x23c6 -#define MN_vcmpeq_ossh 0x23d3 -#define MN_vcmpgt_ossh 0x23df -#define MN_vcmplt_ossh 0x23eb -#define MN_vfpclasssh 0x23f7 -#define MN_vcmpnge_ussh 0x2402 -#define MN_vcmpnle_ussh 0x240f -#define MN_vcmptrue_ussh 0x241c -#define MN_vcmpneq_ussh 0x242a -#define MN_vcmpeq_ussh 0x2437 -#define MN_vcmpngt_ussh 0x2443 -#define MN_vcmpnlt_ussh 0x2450 -#define MN_vcmpngtsh 0x245d -#define MN_vcmpgtsh 0x2467 -#define MN_vcmpnltsh 0x2470 -#define MN_vcmpltsh 0x247a -#define MN_vgetmantsh 0x2483 -#define MN_vrsqrtsh 0x248e -#define MN_vsqrtsh 0x2497 -#define MN_clflush 0x249f -#define MN_push 0x24a7 -#define MN_vdivsh 0x24ac -#define MN_vmovsh 0x24b3 -#define MN_vmaxsh 0x24ba -#define MN_blci 0x24c1 -#define MN_clgi 0x24c6 -#define MN_stgi 0x24cb -#define MN_bzhi 0x24d0 -#define MN_cli 0x24d5 -#define MN_fcomi 0x24d9 -#define MN_fucomi 0x24df -#define MN_feni 0x24e6 -#define MN_fneni 0x24eb -#define MN_cvttpd2pi 0x24f1 -#define MN_cvtpd2pi 0x24fb -#define MN_cvttps2pi 0x2504 -#define MN_cvtps2pi 0x250e -#define MN_fldpi 0x2517 -#define MN_senduipi 0x251d -#define MN_fcompi 0x2526 -#define MN_fucompi 0x252d -#define MN_movdiri 0x2535 +#define MN_cmpxchg 0x1ce6 +#define MN_pconfig 0x1cee +#define MN_jg 0x1cf6 +#define MN_jng 0x1cf9 +#define MN_xstore_rng 0x1cfd +#define MN_xstorerng 0x1d08 +#define MN_setng 0x1d12 +#define MN_cmovng 0x1d18 +#define MN_invlpg 0x1d1f +#define MN_setg 0x1d26 +#define MN_cmovg 0x1d2b +#define MN_vmlaunch 0x1d31 +#define MN_prefetch 0x1d3a +#define MN_fxch 0x1d43 +#define MN_vfmaddsub231ph 0x1d48 +#define MN_vfmsub231ph 0x1d57 +#define MN_vfnmsub231ph 0x1d63 +#define MN_vfmsubadd231ph 0x1d70 +#define MN_vfmadd231ph 0x1d7f +#define MN_vfnmadd231ph 0x1d8b +#define MN_vfmaddsub132ph 0x1d98 +#define MN_vfmsub132ph 0x1da7 +#define MN_vfnmsub132ph 0x1db3 +#define MN_vfmsubadd132ph 0x1dc0 +#define MN_vfmadd132ph 0x1dcf +#define MN_vfnmadd132ph 0x1ddb +#define MN_vcvtpd2ph 0x1de8 +#define MN_vcvtdq2ph 0x1df2 +#define MN_vcvtudq2ph 0x1dfc +#define MN_vcvtqq2ph 0x1e07 +#define MN_vcvtuqq2ph 0x1e11 +#define MN_vcvtps2ph 0x1e1c +#define MN_vcvtw2ph 0x1e26 +#define MN_vcvtuw2ph 0x1e2f +#define MN_vfmaddsub213ph 0x1e39 +#define MN_vfmsub213ph 0x1e48 +#define MN_vfnmsub213ph 0x1e54 +#define MN_vfmsubadd213ph 0x1e61 +#define MN_vfmadd213ph 0x1e70 +#define MN_vfnmadd213ph 0x1e7c +#define MN_vsubph 0x1e89 +#define MN_vfcmaddcph 0x1e90 +#define MN_vfmaddcph 0x1e9b +#define MN_vfcmulcph 0x1ea5 +#define MN_vfmulcph 0x1eaf +#define MN_vaddph 0x1eb8 +#define MN_vcmpunordph 0x1ebf +#define MN_vcmpordph 0x1ecb +#define MN_vreduceph 0x1ed5 +#define MN_vcmpngeph 0x1edf +#define MN_vcmpgeph 0x1ee9 +#define MN_vrndscaleph 0x1ef2 +#define MN_vcmpnleph 0x1efe +#define MN_vcmpleph 0x1f08 +#define MN_vcmpfalseph 0x1f11 +#define MN_vcmptrueph 0x1f1d +#define MN_vscalefph 0x1f28 +#define MN_vmulph 0x1f32 +#define MN_vminph 0x1f39 +#define MN_vrcpph 0x1f40 +#define MN_vcmpph 0x1f47 +#define MN_vgetexpph 0x1f4e +#define MN_vcmpunord_qph 0x1f58 +#define MN_vcmpord_qph 0x1f66 +#define MN_vcmpneqph 0x1f72 +#define MN_vcmpeqph 0x1f7c +#define MN_vcmpge_oqph 0x1f85 +#define MN_vcmple_oqph 0x1f91 +#define MN_vcmpfalse_oqph 0x1f9d +#define MN_vcmpneq_oqph 0x1fac +#define MN_vcmpeq_oqph 0x1fb9 +#define MN_vcmpgt_oqph 0x1fc5 +#define MN_vcmplt_oqph 0x1fd1 +#define MN_vcmpnge_uqph 0x1fdd +#define MN_vcmpnle_uqph 0x1fea +#define MN_vcmptrue_uqph 0x1ff7 +#define MN_vcmpneq_uqph 0x2005 +#define MN_vcmpeq_uqph 0x2012 +#define MN_vcmpngt_uqph 0x201e +#define MN_vcmpnlt_uqph 0x202b +#define MN_vcmpunord_sph 0x2038 +#define MN_vcmpord_sph 0x2046 +#define MN_vcmpge_osph 0x2052 +#define MN_vcmple_osph 0x205e +#define MN_vcmpfalse_osph 0x206a +#define MN_vcmpneq_osph 0x2079 +#define MN_vcmpeq_osph 0x2086 +#define MN_vcmpgt_osph 0x2092 +#define MN_vcmplt_osph 0x209e +#define MN_vfpclassph 0x20aa +#define MN_vcmpnge_usph 0x20b5 +#define MN_vcmpnle_usph 0x20c2 +#define MN_vcmptrue_usph 0x20cf +#define MN_vcmpneq_usph 0x20dd +#define MN_vcmpeq_usph 0x20ea +#define MN_vcmpngt_usph 0x20f6 +#define MN_vcmpnlt_usph 0x2103 +#define MN_vcmpngtph 0x2110 +#define MN_vcmpgtph 0x211a +#define MN_vcmpnltph 0x2123 +#define MN_vcmpltph 0x212d +#define MN_vgetmantph 0x2136 +#define MN_vrsqrtph 0x2141 +#define MN_vsqrtph 0x214a +#define MN_vdivph 0x2152 +#define MN_vmaxph 0x2159 +#define MN_vpmacsdqh 0x2160 +#define MN_vpmacssdqh 0x216a +#define MN_vfmsub231sh 0x2175 +#define MN_vfnmsub231sh 0x2181 +#define MN_vfmadd231sh 0x218e +#define MN_vfnmadd231sh 0x219a +#define MN_vfmsub132sh 0x21a7 +#define MN_vfnmsub132sh 0x21b3 +#define MN_vfmadd132sh 0x21c0 +#define MN_vfnmadd132sh 0x21cc +#define MN_vcvtsd2sh 0x21d9 +#define MN_vcvtsi2sh 0x21e3 +#define MN_vcvtusi2sh 0x21ed +#define MN_vcvtss2sh 0x21f8 +#define MN_vfmsub213sh 0x2202 +#define MN_vfnmsub213sh 0x220e +#define MN_vfmadd213sh 0x221b +#define MN_vfnmadd213sh 0x2227 +#define MN_psmash 0x2234 +#define MN_vsubsh 0x223b +#define MN_vfcmaddcsh 0x2242 +#define MN_vfmaddcsh 0x224d +#define MN_vfcmulcsh 0x2257 +#define MN_vfmulcsh 0x2261 +#define MN_vaddsh 0x226a +#define MN_vcmpunordsh 0x2271 +#define MN_vcmpordsh 0x227d +#define MN_vreducesh 0x2287 +#define MN_vcmpngesh 0x2291 +#define MN_vcmpgesh 0x229b +#define MN_vrndscalesh 0x22a4 +#define MN_vcmpnlesh 0x22b0 +#define MN_vcmplesh 0x22ba +#define MN_vcmpfalsesh 0x22c3 +#define MN_vcmptruesh 0x22cf +#define MN_vscalefsh 0x22da +#define MN_vucomish 0x22e4 +#define MN_vcomish 0x22ed +#define MN_vmulsh 0x22f5 +#define MN_vminsh 0x22fc +#define MN_vrcpsh 0x2303 +#define MN_vcmpsh 0x230a +#define MN_vgetexpsh 0x2311 +#define MN_vcmpunord_qsh 0x231b +#define MN_vcmpord_qsh 0x2329 +#define MN_vcmpneqsh 0x2335 +#define MN_vcmpeqsh 0x233f +#define MN_vcmpge_oqsh 0x2348 +#define MN_vcmple_oqsh 0x2354 +#define MN_vcmpfalse_oqsh 0x2360 +#define MN_vcmpneq_oqsh 0x236f +#define MN_vcmpeq_oqsh 0x237c +#define MN_vcmpgt_oqsh 0x2388 +#define MN_vcmplt_oqsh 0x2394 +#define MN_vcmpnge_uqsh 0x23a0 +#define MN_vcmpnle_uqsh 0x23ad +#define MN_vcmptrue_uqsh 0x23ba +#define MN_vcmpneq_uqsh 0x23c8 +#define MN_vcmpeq_uqsh 0x23d5 +#define MN_vcmpngt_uqsh 0x23e1 +#define MN_vcmpnlt_uqsh 0x23ee +#define MN_vcmpunord_ssh 0x23fb +#define MN_vcmpord_ssh 0x2409 +#define MN_vcmpge_ossh 0x2415 +#define MN_vcmple_ossh 0x2421 +#define MN_vcmpfalse_ossh 0x242d +#define MN_vcmpneq_ossh 0x243c +#define MN_vcmpeq_ossh 0x2449 +#define MN_vcmpgt_ossh 0x2455 +#define MN_vcmplt_ossh 0x2461 +#define MN_vfpclasssh 0x246d +#define MN_vcmpnge_ussh 0x2478 +#define MN_vcmpnle_ussh 0x2485 +#define MN_vcmptrue_ussh 0x2492 +#define MN_vcmpneq_ussh 0x24a0 +#define MN_vcmpeq_ussh 0x24ad +#define MN_vcmpngt_ussh 0x24b9 +#define MN_vcmpnlt_ussh 0x24c6 +#define MN_vcmpngtsh 0x24d3 +#define MN_vcmpgtsh 0x24dd +#define MN_vcmpnltsh 0x24e6 +#define MN_vcmpltsh 0x24f0 +#define MN_vgetmantsh 0x24f9 +#define MN_vrsqrtsh 0x2504 +#define MN_vsqrtsh 0x250d +#define MN_clflush 0x2515 +#define MN_push 0x251d +#define MN_vdivsh 0x2522 +#define MN_vmovsh 0x2529 +#define MN_vmaxsh 0x2530 +#define MN_blci 0x2537 +#define MN_clgi 0x253c +#define MN_stgi 0x2541 +#define MN_bzhi 0x2546 +#define MN_cli 0x254b +#define MN_fcomi 0x254f +#define MN_fucomi 0x2555 +#define MN_feni 0x255c +#define MN_fneni 0x2561 +#define MN_cvttpd2pi 0x2567 +#define MN_cvtpd2pi 0x2571 +#define MN_cvttps2pi 0x257a +#define MN_cvtps2pi 0x2584 +#define MN_fldpi 0x258d +#define MN_senduipi 0x2593 +#define MN_fcompi 0x259c +#define MN_fucompi 0x25a3 +#define MN_movdiri 0x25ab #define MN_pcmpestri (MN_vpcmpestri + 1) -#define MN_vpcmpestri 0x253d +#define MN_vpcmpestri 0x25b3 #define MN_pcmpistri (MN_vpcmpistri + 1) -#define MN_vpcmpistri 0x2548 +#define MN_vpcmpistri 0x25be #define MN_cvttsd2si (MN_vcvttsd2si + 1) -#define MN_vcvttsd2si 0x2553 +#define MN_vcvttsd2si 0x25c9 #define MN_cvtsd2si (MN_vcvtsd2si + 1) -#define MN_vcvtsd2si 0x255e -#define MN_vcvttsh2si 0x2568 -#define MN_vcvtsh2si 0x2573 +#define MN_vcvtsd2si 0x25d4 +#define MN_vcvttsh2si 0x25de +#define MN_vcvtsh2si 0x25e9 #define MN_cvttss2si (MN_vcvttss2si + 1) -#define MN_vcvttss2si 0x257d +#define MN_vcvttss2si 0x25f3 #define MN_cvtss2si (MN_vcvtss2si + 1) -#define MN_vcvtss2si 0x2588 -#define MN_fdisi 0x2592 -#define MN_fndisi 0x2598 -#define MN_blsi 0x259f -#define MN_vcvttsd2usi 0x25a4 -#define MN_vcvtsd2usi 0x25b0 -#define MN_vcvttsh2usi 0x25bb -#define MN_vcvtsh2usi 0x25c7 -#define MN_vcvttss2usi 0x25d2 -#define MN_vcvtss2usi 0x25de -#define MN_movnti 0x25e9 -#define MN_sti 0x25f0 -#define MN_clui 0x25f4 +#define MN_vcvtss2si 0x25fe +#define MN_fdisi 0x2608 +#define MN_fndisi 0x260e +#define MN_blsi 0x2615 +#define MN_vcvttsd2usi 0x261a +#define MN_vcvtsd2usi 0x2626 +#define MN_vcvttsh2usi 0x2631 +#define MN_vcvtsh2usi 0x263d +#define MN_vcvttss2usi 0x2648 +#define MN_vcvtss2usi 0x2654 +#define MN_movnti 0x265f +#define MN_sti 0x2666 +#define MN_clui 0x266a #define MN_stui (MN_testui + 2) -#define MN_testui 0x25f9 -#define MN_notrack 0x2600 -#define MN_lock 0x2608 -#define MN_bndmk 0x260d -#define MN_xresldtrk 0x2613 -#define MN_xsusldtrk 0x261d -#define MN_blcmsk 0x2627 -#define MN_blsmsk 0x262e -#define MN_tzmsk 0x2635 -#define MN_sal 0x263b -#define MN_lwpval 0x263f -#define MN_bndcl 0x2646 -#define MN_rcl 0x264c -#define MN_shl 0x2650 -#define MN_jl 0x2654 -#define MN_aesdec256kl 0x2657 -#define MN_aesenc256kl 0x2663 -#define MN_aesdecwide256kl 0x266f -#define MN_aesencwide256kl 0x267f -#define MN_aesdec128kl 0x268f -#define MN_aesenc128kl 0x269b -#define MN_aesdecwide128kl 0x26a7 -#define MN_aesencwide128kl 0x26b7 +#define MN_testui 0x266f +#define MN_notrack 0x2676 +#define MN_lock 0x267e +#define MN_bndmk 0x2683 +#define MN_xresldtrk 0x2689 +#define MN_xsusldtrk 0x2693 +#define MN_blcmsk 0x269d +#define MN_blsmsk 0x26a4 +#define MN_tzmsk 0x26ab +#define MN_sal 0x26b1 +#define MN_lwpval 0x26b5 +#define MN_bndcl 0x26bc +#define MN_rcl 0x26c2 +#define MN_shl 0x26c6 +#define MN_jl 0x26ca +#define MN_aesdec256kl 0x26cd +#define MN_aesenc256kl 0x26d9 +#define MN_aesdecwide256kl 0x26e5 +#define MN_aesencwide256kl 0x26f5 +#define MN_aesdec128kl 0x2705 +#define MN_aesenc128kl 0x2711 +#define MN_aesdecwide128kl 0x271d +#define MN_aesencwide128kl 0x272d #define MN_call (MN_tdcall + 2) -#define MN_tdcall 0x26c7 -#define MN_lcall 0x26ce -#define MN_seamcall 0x26d4 -#define MN_vmmcall 0x26dd -#define MN_vmcall 0x26e5 -#define MN_syscall 0x26ec -#define MN_vzeroall 0x26f4 -#define MN_fildll 0x26fd -#define MN_blcfill 0x2704 -#define MN_blsfill 0x270c -#define MN_fistpll 0x2714 -#define MN_fisttpll 0x271c -#define MN_jnl 0x2725 -#define MN_setnl 0x2729 -#define MN_cmovnl 0x272f -#define MN_rol 0x2736 -#define MN_arpl 0x273a -#define MN_vpmacsdql 0x273f -#define MN_vpmacssdql 0x2749 -#define MN_lsl 0x2754 -#define MN_movsl 0x2758 -#define MN_setl 0x275e -#define MN_cwtl 0x2763 +#define MN_tdcall 0x273d +#define MN_lcall 0x2744 +#define MN_seamcall 0x274a +#define MN_vmmcall 0x2753 +#define MN_vmcall 0x275b +#define MN_syscall 0x2762 +#define MN_vzeroall 0x276a +#define MN_fildll 0x2773 +#define MN_blcfill 0x277a +#define MN_blsfill 0x2782 +#define MN_fistpll 0x278a +#define MN_fisttpll 0x2792 +#define MN_jnl 0x279b +#define MN_setnl 0x279f +#define MN_cmovnl 0x27a5 +#define MN_rol 0x27ac +#define MN_arpl 0x27b0 +#define MN_vpmacsdql 0x27b5 +#define MN_vpmacssdql 0x27bf +#define MN_lsl 0x27ca +#define MN_movsl 0x27ce +#define MN_setl 0x27d4 +#define MN_cwtl 0x27d9 #define MN_mul (MN_fmul + 1) #define MN_fmul (MN_pfmul + 1) -#define MN_pfmul 0x2768 +#define MN_pfmul 0x27de #define MN_imul (MN_fimul + 1) -#define MN_fimul 0x276e -#define MN_montmul 0x2774 -#define MN_cmovl 0x277c -#define MN_vpmovb2m 0x2782 -#define MN_vpmovd2m 0x278b -#define MN_vpmovq2m 0x2794 -#define MN_vpmovw2m 0x279d -#define MN_aam 0x27a6 -#define MN_fxam 0x27aa -#define MN_fprem 0x27af -#define MN_fcom 0x27b5 -#define MN_ficom 0x27ba -#define MN_fucom 0x27c0 -#define MN_fsetpm 0x27c6 -#define MN_fnsetpm 0x27cd -#define MN_frstpm 0x27d5 -#define MN_vpperm 0x27dc +#define MN_fimul 0x27e4 +#define MN_montmul 0x27ea +#define MN_cmovl 0x27f2 +#define MN_vpmovb2m 0x27f8 +#define MN_vpmovd2m 0x2801 +#define MN_vpmovq2m 0x280a +#define MN_vpmovw2m 0x2813 +#define MN_aam 0x281c +#define MN_fxam 0x2820 +#define MN_fprem 0x2825 +#define MN_fcom 0x282b +#define MN_ficom 0x2830 +#define MN_fucom 0x2836 +#define MN_fsetpm 0x283c +#define MN_fnsetpm 0x2843 +#define MN_frstpm 0x284b +#define MN_vpperm 0x2852 #define MN_pcmpestrm (MN_vpcmpestrm + 1) -#define MN_vpcmpestrm 0x27e3 +#define MN_vpcmpestrm 0x2859 #define MN_pcmpistrm (MN_vpcmpistrm + 1) -#define MN_vpcmpistrm 0x27ee -#define MN_rsm 0x27f9 -#define MN_fpatan 0x27fd -#define MN_fptan 0x2804 -#define MN_bndcn 0x280a +#define MN_vpcmpistrm 0x2864 +#define MN_rsm 0x286f +#define MN_fpatan 0x2873 +#define MN_fptan 0x287a +#define MN_bndcn 0x2880 #define MN_andn (MN_pandn + 1) #define MN_pandn (MN_vpandn + 1) -#define MN_vpandn 0x2810 +#define MN_vpandn 0x2886 #define MN_in (MN_xbegin + 4) -#define MN_xbegin 0x2817 -#define MN_pfmin 0x281e -#define MN_fsin 0x2824 -#define MN_vmxon 0x2829 -#define MN_vmrun 0x282f -#define MN_jo 0x2835 -#define MN_jno 0x2838 -#define MN_setno 0x283c -#define MN_cmovno 0x2842 -#define MN_jpo 0x2849 -#define MN_setpo 0x284d -#define MN_cmovpo 0x2853 -#define MN_cqo 0x285a -#define MN_tilezero 0x285e -#define MN_clzero 0x2867 -#define MN_seto 0x286e -#define MN_into 0x2873 -#define MN_cqto 0x2878 -#define MN_ssto 0x287d -#define MN_cmovo 0x2882 -#define MN_bswap 0x2888 -#define MN_fsubp 0x288e -#define MN_pfrcp 0x2894 -#define MN_rdtscp 0x289a -#define MN_faddp 0x28a1 -#define MN_pdep 0x28a7 -#define MN_ffreep 0x28ac -#define MN_rep 0x28b3 -#define MN_fcomip 0x28b7 -#define MN_fucomip 0x28be -#define MN_jp 0x28c6 -#define MN_fmulp 0x28c9 +#define MN_xbegin 0x288d +#define MN_pfmin 0x2894 +#define MN_fsin 0x289a +#define MN_vmxon 0x289f +#define MN_vmrun 0x28a5 +#define MN_jo 0x28ab +#define MN_jno 0x28ae +#define MN_setno 0x28b2 +#define MN_cmovno 0x28b8 +#define MN_jpo 0x28bf +#define MN_setpo 0x28c3 +#define MN_cmovpo 0x28c9 +#define MN_cqo 0x28d0 +#define MN_tilezero 0x28d4 +#define MN_clzero 0x28dd +#define MN_seto 0x28e4 +#define MN_into 0x28e9 +#define MN_cqto 0x28ee +#define MN_ssto 0x28f3 +#define MN_cmovo 0x28f8 +#define MN_bswap 0x28fe +#define MN_fsubp 0x2904 +#define MN_pfrcp 0x290a +#define MN_rdtscp 0x2910 +#define MN_faddp 0x2917 +#define MN_pdep 0x291d +#define MN_ffreep 0x2922 +#define MN_rep 0x2929 +#define MN_fcomip 0x292d +#define MN_fucomip 0x2934 +#define MN_jp 0x293c +#define MN_fmulp 0x293f #define MN_cmp (MN_scmp + 1) -#define MN_scmp 0x28cf +#define MN_scmp 0x2945 #define MN_jmp (MN_ljmp + 1) -#define MN_ljmp 0x28d4 -#define MN_fcomp 0x28d9 -#define MN_ficomp 0x28df -#define MN_fucomp 0x28e6 -#define MN_jnp 0x28ed -#define MN_setnp 0x28f1 -#define MN_cmovnp 0x28f7 +#define MN_ljmp 0x294a +#define MN_fcomp 0x294f +#define MN_ficomp 0x2955 +#define MN_fucomp 0x295c +#define MN_jnp 0x2963 +#define MN_setnp 0x2967 +#define MN_cmovnp 0x296d #define MN_nop (MN_fnop + 1) -#define MN_fnop 0x28fe -#define MN_loop 0x2903 -#define MN_pop 0x2908 -#define MN_fcompp 0x290c -#define MN_fucompp 0x2913 -#define MN_fsubrp 0x291b -#define MN_fdivrp 0x2922 -#define MN_rstorssp 0x2929 -#define MN_saveprevssp 0x2932 -#define MN_setp 0x293e -#define MN_fbstp 0x2943 -#define MN_fdecstp 0x2949 -#define MN_fincstp 0x2951 -#define MN_fstp 0x2959 -#define MN_fistp 0x295e -#define MN_fisttp 0x2964 +#define MN_fnop 0x2974 +#define MN_loop 0x2979 +#define MN_pop 0x297e +#define MN_fcompp 0x2982 +#define MN_fucompp 0x2989 +#define MN_fsubrp 0x2991 +#define MN_fdivrp 0x2998 +#define MN_rstorssp 0x299f +#define MN_saveprevssp 0x29a8 +#define MN_setp 0x29b4 +#define MN_fbstp 0x29b9 +#define MN_fdecstp 0x29bf +#define MN_fincstp 0x29c7 +#define MN_fstp 0x29cf +#define MN_fistp 0x29d4 +#define MN_fisttp 0x29da #define MN_movddup (MN_vmovddup + 1) -#define MN_vmovddup 0x296b +#define MN_vmovddup 0x29e1 #define MN_movshdup (MN_vmovshdup + 1) -#define MN_vmovshdup 0x2974 +#define MN_vmovshdup 0x29ea #define MN_movsldup (MN_vmovsldup + 1) -#define MN_vmovsldup 0x297e -#define MN_fdivp 0x2988 -#define MN_cmovp 0x298e -#define MN_vpbroadcastmb2q 0x2994 -#define MN_vpermi2q 0x29a4 -#define MN_vpmovm2q 0x29ad -#define MN_movdq2q 0x29b6 -#define MN_vpermt2q 0x29be -#define MN_vpshaq 0x29c7 -#define MN_vpsraq 0x29ce -#define MN_vphaddbq 0x29d5 -#define MN_vphaddubq 0x29de +#define MN_vmovsldup 0x29f4 +#define MN_fdivp 0x29fe +#define MN_cmovp 0x2a04 +#define MN_vpbroadcastmb2q 0x2a0a +#define MN_vpermi2q 0x2a1a +#define MN_vpmovm2q 0x2a23 +#define MN_movdq2q 0x2a2c +#define MN_vpermt2q 0x2a34 +#define MN_vpshaq 0x2a3d +#define MN_vpsraq 0x2a44 +#define MN_vphaddbq 0x2a4b +#define MN_vphaddubq 0x2a54 #define MN_psubq (MN_vpsubq + 1) -#define MN_vpsubq 0x29e8 +#define MN_vpsubq 0x2a5e #define MN_pmovsxbq (MN_vpmovsxbq + 1) -#define MN_vpmovsxbq 0x29ef +#define MN_vpmovsxbq 0x2a65 #define MN_pmovzxbq (MN_vpmovzxbq + 1) -#define MN_vpmovzxbq 0x29f9 +#define MN_vpmovzxbq 0x2a6f #define MN_cvttpd2dq (MN_vcvttpd2dq + 1) -#define MN_vcvttpd2dq 0x2a03 +#define MN_vcvttpd2dq 0x2a79 #define MN_cvtpd2dq (MN_vcvtpd2dq + 1) -#define MN_vcvtpd2dq 0x2a0e -#define MN_vcvttph2dq 0x2a18 -#define MN_vcvtph2dq 0x2a23 -#define MN_movq2dq 0x2a2d +#define MN_vcvtpd2dq 0x2a84 +#define MN_vcvttph2dq 0x2a8e +#define MN_vcvtph2dq 0x2a99 +#define MN_movq2dq 0x2aa3 #define MN_cvttps2dq (MN_vcvttps2dq + 1) -#define MN_vcvttps2dq 0x2a35 +#define MN_vcvttps2dq 0x2aab #define MN_cvtps2dq (MN_vcvtps2dq + 1) -#define MN_vcvtps2dq 0x2a40 -#define MN_vphsubdq 0x2a4a -#define MN_cdq 0x2a53 -#define MN_kaddq 0x2a57 +#define MN_vcvtps2dq 0x2ab6 +#define MN_vphsubdq 0x2ac0 +#define MN_cdq 0x2ac9 +#define MN_kaddq 0x2acd #define MN_paddq (MN_vpaddq + 1) -#define MN_vpaddq 0x2a5d -#define MN_vphadddq 0x2a64 +#define MN_vpaddq 0x2ad3 +#define MN_vphadddq 0x2ada #define MN_punpckhdq (MN_vpunpckhdq + 1) -#define MN_vpunpckhdq 0x2a6d -#define MN_kunpckdq 0x2a78 -#define MN_vpshldq 0x2a81 +#define MN_vpunpckhdq 0x2ae3 +#define MN_kunpckdq 0x2aee +#define MN_vpshldq 0x2af7 #define MN_punpckldq (MN_vpunpckldq + 1) -#define MN_vpunpckldq 0x2a89 +#define MN_vpunpckldq 0x2aff #define MN_pslldq (MN_vpslldq + 1) -#define MN_vpslldq 0x2a94 +#define MN_vpslldq 0x2b0a #define MN_psrldq (MN_vpsrldq + 1) -#define MN_vpsrldq 0x2a9c +#define MN_vpsrldq 0x2b12 #define MN_pmuldq (MN_vpmuldq + 1) -#define MN_vpmuldq 0x2aa4 -#define MN_kandq 0x2aac -#define MN_vpandq 0x2ab2 -#define MN_vpexpandq 0x2ab9 +#define MN_vpmuldq 0x2b1a +#define MN_kandq 0x2b22 +#define MN_vpandq 0x2b28 +#define MN_vpexpandq 0x2b2f #define MN_punpckhqdq (MN_vpunpckhqdq + 1) -#define MN_vpunpckhqdq 0x2ac3 +#define MN_vpunpckhqdq 0x2b39 #define MN_pclmulhqhqdq (MN_vpclmulhqhqdq + 1) -#define MN_vpclmulhqhqdq 0x2acf +#define MN_vpclmulhqhqdq 0x2b45 #define MN_pclmullqhqdq (MN_vpclmullqhqdq + 1) -#define MN_vpclmullqhqdq 0x2add +#define MN_vpclmullqhqdq 0x2b53 #define MN_punpcklqdq (MN_vpunpcklqdq + 1) -#define MN_vpunpcklqdq 0x2aeb +#define MN_vpunpcklqdq 0x2b61 #define MN_pclmulhqlqdq (MN_vpclmulhqlqdq + 1) -#define MN_vpclmulhqlqdq 0x2af7 +#define MN_vpclmulhqlqdq 0x2b6d #define MN_pclmullqlqdq (MN_vpclmullqlqdq + 1) -#define MN_vpclmullqlqdq 0x2b05 +#define MN_vpclmullqlqdq 0x2b7b #define MN_pclmulqdq (MN_vpclmulqdq + 1) -#define MN_vpclmulqdq 0x2b13 -#define MN_vpgatherdq 0x2b1e -#define MN_vpscatterdq 0x2b29 -#define MN_vpshrdq 0x2b35 +#define MN_vpclmulqdq 0x2b89 +#define MN_vpgatherdq 0x2b94 +#define MN_vpscatterdq 0x2b9f +#define MN_vpshrdq 0x2bab #define MN_movntdq (MN_vmovntdq + 1) -#define MN_vmovntdq 0x2b3d -#define MN_vcvttpd2udq 0x2b46 -#define MN_vcvtpd2udq 0x2b52 -#define MN_vcvttph2udq 0x2b5d -#define MN_vcvtph2udq 0x2b69 -#define MN_vcvttps2udq 0x2b74 -#define MN_vcvtps2udq 0x2b80 -#define MN_vphaddudq 0x2b8b +#define MN_vmovntdq 0x2bb3 +#define MN_vcvttpd2udq 0x2bbc +#define MN_vcvtpd2udq 0x2bc8 +#define MN_vcvttph2udq 0x2bd3 +#define MN_vcvtph2udq 0x2bdf +#define MN_vcvttps2udq 0x2bea +#define MN_vcvtps2udq 0x2bf6 +#define MN_vphaddudq 0x2c01 #define MN_pmuludq (MN_vpmuludq + 1) -#define MN_vpmuludq 0x2b95 +#define MN_vpmuludq 0x2c0b #define MN_pmovsxdq (MN_vpmovsxdq + 1) -#define MN_vpmovsxdq 0x2b9e +#define MN_vpmovsxdq 0x2c14 #define MN_pmovzxdq (MN_vpmovzxdq + 1) -#define MN_vpmovzxdq 0x2ba8 -#define MN_vpcomgeq 0x2bb2 -#define MN_vpcomleq 0x2bbb -#define MN_vpcmpnleq 0x2bc4 -#define MN_vpcmpleq 0x2bce -#define MN_pfcmpeq 0x2bd7 -#define MN_vpcomfalseq 0x2bdf -#define MN_vpcomtrueq 0x2beb -#define MN_vpternlogq 0x2bf6 -#define MN_vpshlq 0x2c01 +#define MN_vpmovzxdq 0x2c1e +#define MN_vpcomgeq 0x2c28 +#define MN_vpcomleq 0x2c31 +#define MN_vpcmpnleq 0x2c3a +#define MN_vpcmpleq 0x2c44 +#define MN_pfcmpeq 0x2c4d +#define MN_vpcomfalseq 0x2c55 +#define MN_vpcomtrueq 0x2c61 +#define MN_vpternlogq 0x2c6c +#define MN_vpshlq 0x2c77 #define MN_psllq (MN_vpsllq + 1) -#define MN_vpsllq 0x2c08 -#define MN_vpmullq 0x2c0f -#define MN_vprolq 0x2c17 +#define MN_vpsllq 0x2c7e +#define MN_vpmullq 0x2c85 +#define MN_vprolq 0x2c8d #define MN_psrlq (MN_vpsrlq + 1) -#define MN_vpsrlq 0x2c1e -#define MN_kshiftlq 0x2c25 -#define MN_vpblendmq 0x2c2e -#define MN_vptestnmq 0x2c38 -#define MN_vpcomq 0x2c42 -#define MN_vpermq 0x2c49 -#define MN_vptestmq 0x2c50 -#define MN_kandnq 0x2c59 -#define MN_vpandnq 0x2c60 -#define MN_valignq 0x2c68 -#define MN_vpcmpq 0x2c70 -#define MN_incsspq 0x2c77 -#define MN_rdsspq 0x2c7f -#define MN_vcvttpd2qq 0x2c86 -#define MN_vcvtpd2qq 0x2c91 -#define MN_vcvttph2qq 0x2c9b -#define MN_vcvtph2qq 0x2ca6 -#define MN_vcvttps2qq 0x2cb0 -#define MN_vcvtps2qq 0x2cbb -#define MN_vpcomeqq 0x2cc5 -#define MN_vpcomneqq 0x2cce -#define MN_vpcmpneqq 0x2cd8 +#define MN_vpsrlq 0x2c94 +#define MN_kshiftlq 0x2c9b +#define MN_vpblendmq 0x2ca4 +#define MN_vptestnmq 0x2cae +#define MN_vpcomq 0x2cb8 +#define MN_vpermq 0x2cbf +#define MN_vptestmq 0x2cc6 +#define MN_kandnq 0x2ccf +#define MN_vpandnq 0x2cd6 +#define MN_valignq 0x2cde +#define MN_vpcmpq 0x2ce6 +#define MN_incsspq 0x2ced +#define MN_rdsspq 0x2cf5 +#define MN_vcvttpd2qq 0x2cfc +#define MN_vcvtpd2qq 0x2d07 +#define MN_vcvttph2qq 0x2d11 +#define MN_vcvtph2qq 0x2d1c +#define MN_vcvttps2qq 0x2d26 +#define MN_vcvtps2qq 0x2d31 +#define MN_vpcomeqq 0x2d3b +#define MN_vpcomneqq 0x2d44 +#define MN_vpcmpneqq 0x2d4e #define MN_pcmpeqq (MN_vpcmpeqq + 1) -#define MN_vpcmpeqq 0x2ce2 -#define MN_vpgatherqq 0x2ceb -#define MN_vpscatterqq 0x2cf6 -#define MN_vcvttpd2uqq 0x2d02 -#define MN_vcvtpd2uqq 0x2d0e -#define MN_vcvttph2uqq 0x2d19 -#define MN_vcvtph2uqq 0x2d25 -#define MN_vcvttps2uqq 0x2d30 -#define MN_vcvtps2uqq 0x2d3c -#define MN_korq 0x2d47 -#define MN_kxnorq 0x2d4c -#define MN_vporq 0x2d53 -#define MN_vprorq 0x2d59 -#define MN_kxorq 0x2d60 -#define MN_vpxorq 0x2d66 +#define MN_vpcmpeqq 0x2d58 +#define MN_vpgatherqq 0x2d61 +#define MN_vpscatterqq 0x2d6c +#define MN_vcvttpd2uqq 0x2d78 +#define MN_vcvtpd2uqq 0x2d84 +#define MN_vcvttph2uqq 0x2d8f +#define MN_vcvtph2uqq 0x2d9b +#define MN_vcvttps2uqq 0x2da6 +#define MN_vcvtps2uqq 0x2db2 +#define MN_korq 0x2dbd +#define MN_kxnorq 0x2dc2 +#define MN_vporq 0x2dc9 +#define MN_vprorq 0x2dcf +#define MN_kxorq 0x2dd6 +#define MN_vpxorq 0x2ddc #define MN_pinsrq (MN_vpinsrq + 1) -#define MN_vpinsrq 0x2d6d -#define MN_kshiftrq 0x2d75 +#define MN_vpinsrq 0x2de3 +#define MN_kshiftrq 0x2deb #define MN_extrq (MN_pextrq + 1) #define MN_pextrq (MN_vpextrq + 1) -#define MN_vpextrq 0x2d7e -#define MN_vpabsq 0x2d86 -#define MN_vpminsq 0x2d8d -#define MN_vpcompressq 0x2d95 -#define MN_wrssq 0x2da1 -#define MN_wrussq 0x2da7 -#define MN_vpmaxsq 0x2dae -#define MN_vp2intersectq 0x2db6 -#define MN_vpconflictq 0x2dc4 -#define MN_vpcomgtq 0x2dd0 +#define MN_vpextrq 0x2df4 +#define MN_vpabsq 0x2dfc +#define MN_vpminsq 0x2e03 +#define MN_vpcompressq 0x2e0b +#define MN_wrssq 0x2e17 +#define MN_wrussq 0x2e1d +#define MN_vpmaxsq 0x2e24 +#define MN_vp2intersectq 0x2e2c +#define MN_vpconflictq 0x2e3a +#define MN_vpcomgtq 0x2e46 #define MN_pcmpgtq (MN_vpcmpgtq + 1) -#define MN_vpcmpgtq 0x2dd9 -#define MN_cltq 0x2de2 -#define MN_vpcomltq 0x2de7 -#define MN_vpcmpnltq 0x2df0 -#define MN_vpcmpltq 0x2dfa -#define MN_vpopcntq 0x2e03 -#define MN_vplzcntq 0x2e0c -#define MN_movntq 0x2e15 -#define MN_knotq 0x2e1c -#define MN_vprotq 0x2e22 -#define MN_insertq 0x2e29 -#define MN_vpbroadcastq 0x2e31 -#define MN_ktestq 0x2e3e -#define MN_kortestq 0x2e45 -#define MN_vpcomgeuq 0x2e4e -#define MN_vpcomleuq 0x2e58 -#define MN_vpcmpnleuq 0x2e62 -#define MN_vpcmpleuq 0x2e6d -#define MN_vpcomfalseuq 0x2e77 -#define MN_vpcomtrueuq 0x2e84 -#define MN_vpmadd52huq 0x2e90 -#define MN_vpmadd52luq 0x2e9c -#define MN_vpcomuq 0x2ea8 -#define MN_vpminuq 0x2eb0 -#define MN_vpcmpuq 0x2eb8 -#define MN_vpcomequq 0x2ec0 -#define MN_vpcomnequq 0x2eca -#define MN_vpcmpnequq 0x2ed5 -#define MN_vpcmpequq 0x2ee0 -#define MN_vpcomgtuq 0x2eea -#define MN_vpcomltuq 0x2ef4 -#define MN_vpcmpnltuq 0x2efe -#define MN_vpcmpltuq 0x2f09 -#define MN_vpmaxuq 0x2f13 -#define MN_vpsravq 0x2f1b -#define MN_vpshldvq 0x2f23 -#define MN_vpshrdvq 0x2f2c -#define MN_vpsllvq 0x2f35 -#define MN_vprolvq 0x2f3d -#define MN_vpsrlvq 0x2f45 +#define MN_vpcmpgtq 0x2e4f +#define MN_cltq 0x2e58 +#define MN_vpcomltq 0x2e5d +#define MN_vpcmpnltq 0x2e66 +#define MN_vpcmpltq 0x2e70 +#define MN_vpopcntq 0x2e79 +#define MN_vplzcntq 0x2e82 +#define MN_movntq 0x2e8b +#define MN_knotq 0x2e92 +#define MN_vprotq 0x2e98 +#define MN_insertq 0x2e9f +#define MN_vpbroadcastq 0x2ea7 +#define MN_ktestq 0x2eb4 +#define MN_kortestq 0x2ebb +#define MN_vpcomgeuq 0x2ec4 +#define MN_vpcomleuq 0x2ece +#define MN_vpcmpnleuq 0x2ed8 +#define MN_vpcmpleuq 0x2ee3 +#define MN_vpcomfalseuq 0x2eed +#define MN_vpcomtrueuq 0x2efa +#define MN_vpmadd52huq 0x2f06 +#define MN_vpmadd52luq 0x2f12 +#define MN_vpcomuq 0x2f1e +#define MN_vpminuq 0x2f26 +#define MN_vpcmpuq 0x2f2e +#define MN_vpcomequq 0x2f36 +#define MN_vpcomnequq 0x2f40 +#define MN_vpcmpnequq 0x2f4b +#define MN_vpcmpequq 0x2f56 +#define MN_vpcomgtuq 0x2f60 +#define MN_vpcomltuq 0x2f6a +#define MN_vpcmpnltuq 0x2f74 +#define MN_vpcmpltuq 0x2f7f +#define MN_vpmaxuq 0x2f89 +#define MN_vpsravq 0x2f91 +#define MN_vpshldvq 0x2f99 +#define MN_vpshrdvq 0x2fa2 +#define MN_vpsllvq 0x2fab +#define MN_vprolvq 0x2fb3 +#define MN_vpsrlvq 0x2fbb #define MN_movq (MN_kmovq + 1) #define MN_kmovq (MN_maskmovq + 3) #define MN_maskmovq (MN_vpmaskmovq + 2) -#define MN_vpmaskmovq 0x2f4d -#define MN_vmovq 0x2f58 -#define MN_vprorvq 0x2f5e -#define MN_vphaddwq 0x2f66 -#define MN_vphadduwq 0x2f6f +#define MN_vpmaskmovq 0x2fc3 +#define MN_vmovq 0x2fce +#define MN_vprorvq 0x2fd4 +#define MN_vphaddwq 0x2fdc +#define MN_vphadduwq 0x2fe5 #define MN_pmovsxwq (MN_vpmovsxwq + 1) -#define MN_vpmovsxwq 0x2f79 +#define MN_vpmovsxwq 0x2fef #define MN_pmovzxwq (MN_vpmovzxwq + 1) -#define MN_vpmovzxwq 0x2f83 -#define MN_rex_r 0x2f8d -#define MN_vmclear 0x2f93 -#define MN_lar 0x2f9b -#define MN_sar 0x2f9f +#define MN_vpmovzxwq 0x2ff9 +#define MN_rex_r 0x3003 +#define MN_vmclear 0x3009 +#define MN_lar 0x3011 +#define MN_sar 0x3015 #define MN_fsubr (MN_pfsubr + 1) -#define MN_pfsubr 0x2fa3 -#define MN_fisubr 0x2faa -#define MN_rcr 0x2fb1 -#define MN_vzeroupper 0x2fb5 +#define MN_pfsubr 0x3019 +#define MN_fisubr 0x3020 +#define MN_rcr 0x3027 +#define MN_vzeroupper 0x302b #define MN_enter (MN_sysenter + 3) -#define MN_sysenter 0x2fc0 -#define MN_shr 0x2fc9 -#define MN_clr 0x2fcd +#define MN_sysenter 0x3036 +#define MN_shr 0x303f +#define MN_clr 0x3043 #define MN_palignr (MN_vpalignr + 1) -#define MN_vpalignr 0x2fd1 +#define MN_vpalignr 0x3047 #define MN_or (MN_aor + 1) -#define MN_aor 0x2fda +#define MN_aor 0x3050 #define MN_por (MN_vpor + 1) -#define MN_vpor 0x2fde -#define MN_ror 0x2fe3 +#define MN_vpor 0x3054 +#define MN_ror 0x3059 #define MN_monitor (MN_umonitor + 1) -#define MN_umonitor 0x2fe7 -#define MN_frstor 0x2ff0 +#define MN_umonitor 0x305d +#define MN_frstor 0x3066 #define MN_xrstor (MN_fxrstor + 1) -#define MN_fxrstor 0x2ff7 +#define MN_fxrstor 0x306d #define MN_xor (MN_axor + 1) -#define MN_axor 0x2fff +#define MN_axor 0x3075 #define MN_pxor (MN_vpxor + 1) -#define MN_vpxor 0x3004 -#define MN_verr 0x300a -#define MN_bsr 0x300f +#define MN_vpxor 0x307a +#define MN_verr 0x3080 +#define MN_bsr 0x3085 #define MN_ldmxcsr (MN_vldmxcsr + 1) -#define MN_vldmxcsr 0x3013 +#define MN_vldmxcsr 0x3089 #define MN_stmxcsr (MN_vstmxcsr + 1) -#define MN_vstmxcsr 0x301c -#define MN_blsr 0x3025 -#define MN_rdmsr 0x302a -#define MN_wrmsr 0x3030 -#define MN_btr 0x3036 -#define MN_xcrypt_ctr 0x303a -#define MN_xcryptctr 0x3045 -#define MN_ltr 0x304f -#define MN_str 0x3053 -#define MN_bextr 0x3057 -#define MN_fdivr 0x305d -#define MN_fidivr 0x3063 -#define MN_rex_wr 0x306a -#define MN_aas 0x3071 -#define MN_scas 0x3075 -#define MN_das 0x307a -#define MN_fabs 0x307e -#define MN_movabs 0x3083 +#define MN_vstmxcsr 0x3092 +#define MN_blsr 0x309b +#define MN_rdmsr 0x30a0 +#define MN_wrmsr 0x30a6 +#define MN_btr 0x30ac +#define MN_xcrypt_ctr 0x30b0 +#define MN_xcryptctr 0x30bb +#define MN_ltr 0x30c5 +#define MN_str 0x30c9 +#define MN_bextr 0x30cd +#define MN_fdivr 0x30d3 +#define MN_fidivr 0x30d9 +#define MN_rex_wr 0x30e0 +#define MN_aas 0x30e7 +#define MN_scas 0x30eb +#define MN_das 0x30f0 +#define MN_fabs 0x30f4 +#define MN_movabs 0x30f9 #define MN_cs (MN_blcs + 2) -#define MN_blcs 0x308a +#define MN_blcs 0x3100 #define MN_ds (MN_lds + 1) -#define MN_lds 0x308f -#define MN_enqcmds 0x3093 -#define MN_lods 0x309b -#define MN_vpdpbssds 0x30a0 -#define MN_vp4dpwssds 0x30aa -#define MN_vpdpwssds 0x30b5 -#define MN_vpdpbusds 0x30bf -#define MN_vpdpbsuds 0x30c9 -#define MN_vpdpbuuds 0x30d3 +#define MN_lds 0x3105 +#define MN_enqcmds 0x3109 +#define MN_lods 0x3111 +#define MN_vpdpbssds 0x3116 +#define MN_vp4dpwssds 0x3120 +#define MN_vpdpwssds 0x312b +#define MN_vpdpbusds 0x3135 +#define MN_vpdpwusds 0x313f +#define MN_vpdpbsuds 0x3149 +#define MN_vpdpwsuds 0x3153 +#define MN_vpdpbuuds 0x315d +#define MN_vpdpwuuds 0x3167 #define MN_es (MN_les + 1) -#define MN_les 0x30dd -#define MN_xsaves 0x30e1 +#define MN_les 0x3171 +#define MN_xsaves 0x3175 #define MN_fs (MN_lfs + 1) -#define MN_lfs 0x30e8 +#define MN_lfs 0x317c #define MN_gs (MN_lkgs + 2) -#define MN_lkgs 0x30ec -#define MN_lgs 0x30f1 -#define MN_swapgs 0x30f5 -#define MN_fchs 0x30fc -#define MN_js 0x3101 -#define MN_encls 0x3104 +#define MN_lkgs 0x3180 +#define MN_lgs 0x3185 +#define MN_swapgs 0x3189 +#define MN_fchs 0x3190 +#define MN_js 0x3195 +#define MN_encls 0x3198 #define MN_emms (MN_femms + 1) -#define MN_femms 0x310a +#define MN_femms 0x319e #define MN_ins (MN_lwpins + 3) -#define MN_lwpins 0x3110 -#define MN_jns 0x3117 -#define MN_wrmsrns 0x311b -#define MN_setns 0x3123 -#define MN_cmovns 0x3129 -#define MN_fcos 0x3130 -#define MN_fsincos 0x3135 -#define MN_stos 0x313d -#define MN_vfmaddsub231ps 0x3142 -#define MN_vfmsub231ps 0x3151 -#define MN_vfnmsub231ps 0x315d -#define MN_vfmsubadd231ps 0x316a -#define MN_vfmadd231ps 0x3179 -#define MN_vfnmadd231ps 0x3185 -#define MN_vfmaddsub132ps 0x3192 -#define MN_vfmsub132ps 0x31a1 -#define MN_vfnmsub132ps 0x31ad -#define MN_vfmsubadd132ps 0x31ba -#define MN_vfmadd132ps 0x31c9 -#define MN_vfnmadd132ps 0x31d5 -#define MN_vcvtneebf162ps 0x31e2 -#define MN_vbcstnebf162ps 0x31f1 -#define MN_vcvtneobf162ps 0x3200 +#define MN_lwpins 0x31a4 +#define MN_jns 0x31ab +#define MN_wrmsrns 0x31af +#define MN_setns 0x31b7 +#define MN_cmovns 0x31bd +#define MN_fcos 0x31c4 +#define MN_fsincos 0x31c9 +#define MN_stos 0x31d1 +#define MN_vfmaddsub231ps 0x31d6 +#define MN_vfmsub231ps 0x31e5 +#define MN_vfnmsub231ps 0x31f1 +#define MN_vfmsubadd231ps 0x31fe +#define MN_vfmadd231ps 0x320d +#define MN_vfnmadd231ps 0x3219 +#define MN_vfmaddsub132ps 0x3226 +#define MN_vfmsub132ps 0x3235 +#define MN_vfnmsub132ps 0x3241 +#define MN_vfmsubadd132ps 0x324e +#define MN_vfmadd132ps 0x325d +#define MN_vfnmadd132ps 0x3269 +#define MN_vcvtneebf162ps 0x3276 +#define MN_vbcstnebf162ps 0x3285 +#define MN_vcvtneobf162ps 0x3294 #define MN_cvtpd2ps (MN_vcvtpd2ps + 1) -#define MN_vcvtpd2ps 0x320f -#define MN_vcvtneeph2ps 0x3219 -#define MN_vcvtneoph2ps 0x3226 -#define MN_vcvtph2ps 0x3233 -#define MN_vbcstnesh2ps 0x323d -#define MN_vpermi2ps 0x324a -#define MN_cvtpi2ps 0x3254 -#define MN_vpermil2ps 0x325d -#define MN_vexp2ps 0x3268 +#define MN_vcvtpd2ps 0x32a3 +#define MN_vcvtneeph2ps 0x32ad +#define MN_vcvtneoph2ps 0x32ba +#define MN_vcvtph2ps 0x32c7 +#define MN_vbcstnesh2ps 0x32d1 +#define MN_vpermi2ps 0x32de +#define MN_cvtpi2ps 0x32e8 +#define MN_vpermil2ps 0x32f1 +#define MN_vexp2ps 0x32fc #define MN_cvtdq2ps (MN_vcvtdq2ps + 1) -#define MN_vcvtdq2ps 0x3270 -#define MN_vcvtudq2ps 0x327a -#define MN_vcvtqq2ps 0x3285 -#define MN_vcvtuqq2ps 0x328f -#define MN_vpermt2ps 0x329a -#define MN_vfmaddsub213ps 0x32a4 -#define MN_vfmsub213ps 0x32b3 -#define MN_vfnmsub213ps 0x32bf -#define MN_vfmsubadd213ps 0x32cc -#define MN_vfmadd213ps 0x32db -#define MN_vfnmadd213ps 0x32e7 -#define MN_vrcp14ps 0x32f4 -#define MN_vrsqrt14ps 0x32fd -#define MN_tdpbf16ps 0x3308 -#define MN_vdpbf16ps 0x3312 -#define MN_tcmmrlfp16ps 0x331c -#define MN_tcmmimfp16ps 0x3329 -#define MN_tdpfp16ps 0x3336 -#define MN_vrcp28ps 0x3340 -#define MN_vrsqrt28ps 0x3349 +#define MN_vcvtdq2ps 0x3304 +#define MN_vcvtudq2ps 0x330e +#define MN_vcvtqq2ps 0x3319 +#define MN_vcvtuqq2ps 0x3323 +#define MN_vpermt2ps 0x332e +#define MN_vfmaddsub213ps 0x3338 +#define MN_vfmsub213ps 0x3347 +#define MN_vfnmsub213ps 0x3353 +#define MN_vfmsubadd213ps 0x3360 +#define MN_vfmadd213ps 0x336f +#define MN_vfnmadd213ps 0x337b +#define MN_vrcp14ps 0x3388 +#define MN_vrsqrt14ps 0x3391 +#define MN_tdpbf16ps 0x339c +#define MN_vdpbf16ps 0x33a6 +#define MN_tcmmrlfp16ps 0x33b0 +#define MN_tcmmimfp16ps 0x33bd +#define MN_tdpfp16ps 0x33ca +#define MN_vrcp28ps 0x33d4 +#define MN_vrsqrt28ps 0x33dd #define MN_movaps (MN_vmovaps + 1) -#define MN_vmovaps 0x3354 +#define MN_vmovaps 0x33e8 #define MN_subps (MN_addsubps + 3) #define MN_addsubps (MN_vfmaddsubps + 3) -#define MN_vfmaddsubps 0x335c -#define MN_vaddsubps 0x3368 +#define MN_vfmaddsubps 0x33f0 +#define MN_vaddsubps 0x33fc #define MN_hsubps (MN_vhsubps + 1) -#define MN_vhsubps 0x3372 -#define MN_vfmsubps 0x337a -#define MN_vfnmsubps 0x3383 -#define MN_vsubps 0x338d -#define MN_vgatherpf0dps 0x3394 -#define MN_vscatterpf0dps 0x33a2 -#define MN_vgatherpf1dps 0x33b1 -#define MN_vscatterpf1dps 0x33bf +#define MN_vhsubps 0x3406 +#define MN_vfmsubps 0x340e +#define MN_vfnmsubps 0x3417 +#define MN_vsubps 0x3421 +#define MN_vgatherpf0dps 0x3428 +#define MN_vscatterpf0dps 0x3436 +#define MN_vgatherpf1dps 0x3445 +#define MN_vscatterpf1dps 0x3453 #define MN_addps (MN_vfmsubaddps + 6) -#define MN_vfmsubaddps 0x33ce +#define MN_vfmsubaddps 0x3462 #define MN_haddps (MN_vhaddps + 1) -#define MN_vhaddps 0x33da -#define MN_v4fmaddps 0x33e2 -#define MN_vfmaddps 0x33ec -#define MN_v4fnmaddps 0x33f5 -#define MN_vfnmaddps 0x3400 -#define MN_vaddps 0x340a +#define MN_vhaddps 0x346e +#define MN_v4fmaddps 0x3476 +#define MN_vfmaddps 0x3480 +#define MN_v4fnmaddps 0x3489 +#define MN_vfnmaddps 0x3494 +#define MN_vaddps 0x349e #define MN_andps (MN_vexpandps + 4) -#define MN_vexpandps 0x3411 -#define MN_vandps 0x341b +#define MN_vexpandps 0x34a5 +#define MN_vandps 0x34af #define MN_blendps (MN_vblendps + 1) -#define MN_vblendps 0x3422 +#define MN_vblendps 0x34b6 #define MN_roundps (MN_vroundps + 1) -#define MN_vroundps 0x342b -#define MN_vgatherdps 0x3434 -#define MN_vscatterdps 0x343f +#define MN_vroundps 0x34bf +#define MN_vgatherdps 0x34c8 +#define MN_vscatterdps 0x34d3 #define MN_cmpunordps (MN_vcmpunordps + 1) -#define MN_vcmpunordps 0x344b +#define MN_vcmpunordps 0x34df #define MN_cmpordps (MN_vcmpordps + 1) -#define MN_vcmpordps 0x3457 -#define MN_vreduceps 0x3461 -#define MN_vrangeps 0x346b -#define MN_vcmpngeps 0x3474 -#define MN_vcmpgeps 0x347e -#define MN_vrndscaleps 0x3487 +#define MN_vcmpordps 0x34eb +#define MN_vreduceps 0x34f5 +#define MN_vrangeps 0x34ff +#define MN_vcmpngeps 0x3508 +#define MN_vcmpgeps 0x3512 +#define MN_vrndscaleps 0x351b #define MN_cmpnleps (MN_vcmpnleps + 1) -#define MN_vcmpnleps 0x3493 +#define MN_vcmpnleps 0x3527 #define MN_cmpleps (MN_vcmpleps + 1) -#define MN_vcmpleps 0x349d -#define MN_vcmpfalseps 0x34a6 -#define MN_vcmptrueps 0x34b2 -#define MN_vscalefps 0x34bd +#define MN_vcmpleps 0x3531 +#define MN_vcmpfalseps 0x353a +#define MN_vcmptrueps 0x3546 +#define MN_vscalefps 0x3551 #define MN_shufps (MN_vshufps + 1) -#define MN_vshufps 0x34c7 +#define MN_vshufps 0x355b #define MN_unpckhps (MN_vunpckhps + 1) -#define MN_vunpckhps 0x34cf +#define MN_vunpckhps 0x3563 #define MN_movlhps (MN_vmovlhps + 1) -#define MN_vmovlhps 0x34d9 +#define MN_vmovlhps 0x356d #define MN_movhps (MN_vmovhps + 1) -#define MN_vmovhps 0x34e2 +#define MN_vmovhps 0x3576 #define MN_movmskps (MN_vmovmskps + 1) -#define MN_vmovmskps 0x34ea +#define MN_vmovmskps 0x357e #define MN_movhlps (MN_vmovhlps + 1) -#define MN_vmovhlps 0x34f4 -#define MN_vpermilps 0x34fd +#define MN_vmovhlps 0x3588 +#define MN_vpermilps 0x3591 #define MN_unpcklps (MN_vunpcklps + 1) -#define MN_vunpcklps 0x3507 +#define MN_vunpcklps 0x359b #define MN_mulps (MN_vmulps + 1) -#define MN_vmulps 0x3511 +#define MN_vmulps 0x35a5 #define MN_movlps (MN_vmovlps + 1) -#define MN_vmovlps 0x3518 -#define MN_cmps 0x3520 -#define MN_vblendmps 0x3525 -#define MN_vfixupimmps 0x352f -#define MN_vpermps 0x353b +#define MN_vmovlps 0x35ac +#define MN_cmps 0x35b4 +#define MN_vblendmps 0x35b9 +#define MN_vfixupimmps 0x35c3 +#define MN_vpermps 0x35cf #define MN_andnps (MN_vandnps + 1) -#define MN_vandnps 0x3543 +#define MN_vandnps 0x35d7 #define MN_minps (MN_vminps + 1) -#define MN_vminps 0x354b -#define MN_seamops 0x3552 +#define MN_vminps 0x35df +#define MN_seamops 0x35e6 #define MN_rcpps (MN_vrcpps + 1) -#define MN_vrcpps 0x355a +#define MN_vrcpps 0x35ee #define MN_dpps (MN_vdpps + 1) -#define MN_vdpps 0x3561 +#define MN_vdpps 0x35f5 #define MN_cmpps (MN_vcmpps + 1) -#define MN_vcmpps 0x3567 -#define MN_vgetexpps 0x356e -#define MN_vgatherpf0qps 0x3578 -#define MN_vscatterpf0qps 0x3586 -#define MN_vgatherpf1qps 0x3595 -#define MN_vscatterpf1qps 0x35a3 -#define MN_vcmpunord_qps 0x35b2 -#define MN_vcmpord_qps 0x35c0 +#define MN_vcmpps 0x35fb +#define MN_vgetexpps 0x3602 +#define MN_vgatherpf0qps 0x360c +#define MN_vscatterpf0qps 0x361a +#define MN_vgatherpf1qps 0x3629 +#define MN_vscatterpf1qps 0x3637 +#define MN_vcmpunord_qps 0x3646 +#define MN_vcmpord_qps 0x3654 #define MN_cmpneqps (MN_vcmpneqps + 1) -#define MN_vcmpneqps 0x35cc +#define MN_vcmpneqps 0x3660 #define MN_cmpeqps (MN_vcmpeqps + 1) -#define MN_vcmpeqps 0x35d6 -#define MN_vcmpge_oqps 0x35df -#define MN_vcmple_oqps 0x35eb -#define MN_vcmpfalse_oqps 0x35f7 -#define MN_vcmpneq_oqps 0x3606 -#define MN_vcmpeq_oqps 0x3613 -#define MN_vcmpgt_oqps 0x361f -#define MN_vcmplt_oqps 0x362b -#define MN_vgatherqps 0x3637 -#define MN_vscatterqps 0x3642 -#define MN_vcmpnge_uqps 0x364e -#define MN_vcmpnle_uqps 0x365b -#define MN_vcmptrue_uqps 0x3668 -#define MN_vcmpneq_uqps 0x3676 -#define MN_vcmpeq_uqps 0x3683 -#define MN_vcmpngt_uqps 0x368f -#define MN_vcmpnlt_uqps 0x369c +#define MN_vcmpeqps 0x366a +#define MN_vcmpge_oqps 0x3673 +#define MN_vcmple_oqps 0x367f +#define MN_vcmpfalse_oqps 0x368b +#define MN_vcmpneq_oqps 0x369a +#define MN_vcmpeq_oqps 0x36a7 +#define MN_vcmpgt_oqps 0x36b3 +#define MN_vcmplt_oqps 0x36bf +#define MN_vgatherqps 0x36cb +#define MN_vscatterqps 0x36d6 +#define MN_vcmpnge_uqps 0x36e2 +#define MN_vcmpnle_uqps 0x36ef +#define MN_vcmptrue_uqps 0x36fc +#define MN_vcmpneq_uqps 0x370a +#define MN_vcmpeq_uqps 0x3717 +#define MN_vcmpngt_uqps 0x3723 +#define MN_vcmpnlt_uqps 0x3730 #define MN_orps (MN_vorps + 1) -#define MN_vorps 0x36a9 +#define MN_vorps 0x373d #define MN_xorps (MN_vxorps + 1) -#define MN_vxorps 0x36af -#define MN_vcmpunord_sps 0x36b6 -#define MN_vcmpord_sps 0x36c4 -#define MN_vcmpge_osps 0x36d0 -#define MN_vcmple_osps 0x36dc -#define MN_vcmpfalse_osps 0x36e8 -#define MN_vcmpneq_osps 0x36f7 -#define MN_vcmpeq_osps 0x3704 -#define MN_vcmpgt_osps 0x3710 -#define MN_vcmplt_osps 0x371c -#define MN_vfpclassps 0x3728 -#define MN_vcompressps 0x3733 -#define MN_vcmpnge_usps 0x373f -#define MN_vcmpnle_usps 0x374c -#define MN_vcmptrue_usps 0x3759 -#define MN_vcmpneq_usps 0x3767 -#define MN_vcmpeq_usps 0x3774 -#define MN_vcmpngt_usps 0x3780 -#define MN_vcmpnlt_usps 0x378d +#define MN_vxorps 0x3743 +#define MN_vcmpunord_sps 0x374a +#define MN_vcmpord_sps 0x3758 +#define MN_vcmpge_osps 0x3764 +#define MN_vcmple_osps 0x3770 +#define MN_vcmpfalse_osps 0x377c +#define MN_vcmpneq_osps 0x378b +#define MN_vcmpeq_osps 0x3798 +#define MN_vcmpgt_osps 0x37a4 +#define MN_vcmplt_osps 0x37b0 +#define MN_vfpclassps 0x37bc +#define MN_vcompressps 0x37c7 +#define MN_vcmpnge_usps 0x37d3 +#define MN_vcmpnle_usps 0x37e0 +#define MN_vcmptrue_usps 0x37ed +#define MN_vcmpneq_usps 0x37fb +#define MN_vcmpeq_usps 0x3808 +#define MN_vcmpngt_usps 0x3814 +#define MN_vcmpnlt_usps 0x3821 #define MN_extractps (MN_vextractps + 1) -#define MN_vextractps 0x379a -#define MN_vcmpngtps 0x37a5 -#define MN_vcmpgtps 0x37af +#define MN_vextractps 0x382e +#define MN_vcmpngtps 0x3839 +#define MN_vcmpgtps 0x3843 #define MN_cmpnltps (MN_vcmpnltps + 1) -#define MN_vcmpnltps 0x37b8 +#define MN_vcmpnltps 0x384c #define MN_cmpltps (MN_vcmpltps + 1) -#define MN_vcmpltps 0x37c2 -#define MN_vgetmantps 0x37cb +#define MN_vcmpltps 0x3856 +#define MN_vgetmantps 0x385f #define MN_movntps (MN_vmovntps + 1) -#define MN_vmovntps 0x37d6 +#define MN_vmovntps 0x386a #define MN_insertps (MN_vinsertps + 1) -#define MN_vinsertps 0x37df +#define MN_vinsertps 0x3873 #define MN_sqrtps (MN_rsqrtps + 1) #define MN_rsqrtps (MN_vrsqrtps + 1) -#define MN_vrsqrtps 0x37e9 -#define MN_vsqrtps 0x37f2 -#define MN_vtestps 0x37fa +#define MN_vrsqrtps 0x387d +#define MN_vsqrtps 0x3886 +#define MN_vtestps 0x388e #define MN_movups (MN_vmovups + 1) -#define MN_vmovups 0x3802 +#define MN_vmovups 0x3896 #define MN_blendvps (MN_vblendvps + 1) -#define MN_vblendvps 0x380a +#define MN_vblendvps 0x389e #define MN_divps (MN_vdivps + 1) -#define MN_vdivps 0x3814 -#define MN_vmaskmovps 0x381b +#define MN_vdivps 0x38a8 +#define MN_vmaskmovps 0x38af #define MN_maxps (MN_vmaxps + 1) -#define MN_vmaxps 0x3826 -#define MN_vfrczps 0x382d -#define MN_xrstors 0x3835 +#define MN_vmaxps 0x38ba +#define MN_vfrczps 0x38c1 +#define MN_xrstors 0x38c9 #define MN_ss (MN_vfmsub231ss + 9) -#define MN_vfmsub231ss 0x383d -#define MN_vfnmsub231ss 0x3849 -#define MN_vfmadd231ss 0x3856 -#define MN_vfnmadd231ss 0x3862 -#define MN_vfmsub132ss 0x386f -#define MN_vfnmsub132ss 0x387b -#define MN_vfmadd132ss 0x3888 -#define MN_vfnmadd132ss 0x3894 +#define MN_vfmsub231ss 0x38d1 +#define MN_vfnmsub231ss 0x38dd +#define MN_vfmadd231ss 0x38ea +#define MN_vfnmadd231ss 0x38f6 +#define MN_vfmsub132ss 0x3903 +#define MN_vfnmsub132ss 0x390f +#define MN_vfmadd132ss 0x391c +#define MN_vfnmadd132ss 0x3928 #define MN_cvtsd2ss (MN_vcvtsd2ss + 1) -#define MN_vcvtsd2ss 0x38a1 -#define MN_vcvtsh2ss 0x38ab +#define MN_vcvtsd2ss 0x3935 +#define MN_vcvtsh2ss 0x393f #define MN_cvtsi2ss (MN_vcvtsi2ss + 1) -#define MN_vcvtsi2ss 0x38b5 -#define MN_vcvtusi2ss 0x38bf -#define MN_vfmsub213ss 0x38ca -#define MN_vfnmsub213ss 0x38d6 -#define MN_vfmadd213ss 0x38e3 -#define MN_vfnmadd213ss 0x38ef -#define MN_vrcp14ss 0x38fc -#define MN_vrsqrt14ss 0x3905 -#define MN_vrcp28ss 0x3910 -#define MN_vrsqrt28ss 0x3919 +#define MN_vcvtsi2ss 0x3949 +#define MN_vcvtusi2ss 0x3953 +#define MN_vfmsub213ss 0x395e +#define MN_vfnmsub213ss 0x396a +#define MN_vfmadd213ss 0x3977 +#define MN_vfnmadd213ss 0x3983 +#define MN_vrcp14ss 0x3990 +#define MN_vrsqrt14ss 0x3999 +#define MN_vrcp28ss 0x39a4 +#define MN_vrsqrt28ss 0x39ad #define MN_subss (MN_vfmsubss + 3) -#define MN_vfmsubss 0x3924 -#define MN_vfnmsubss 0x392d -#define MN_vsubss 0x3937 +#define MN_vfmsubss 0x39b8 +#define MN_vfnmsubss 0x39c1 +#define MN_vsubss 0x39cb #define MN_addss (MN_v4fmaddss + 4) -#define MN_v4fmaddss 0x393e -#define MN_vfmaddss 0x3948 -#define MN_v4fnmaddss 0x3951 -#define MN_vfnmaddss 0x395c -#define MN_vaddss 0x3966 +#define MN_v4fmaddss 0x39d2 +#define MN_vfmaddss 0x39dc +#define MN_v4fnmaddss 0x39e5 +#define MN_vfnmaddss 0x39f0 +#define MN_vaddss 0x39fa #define MN_roundss (MN_vroundss + 1) -#define MN_vroundss 0x396d +#define MN_vroundss 0x3a01 #define MN_cmpunordss (MN_vcmpunordss + 1) -#define MN_vcmpunordss 0x3976 +#define MN_vcmpunordss 0x3a0a #define MN_cmpordss (MN_vcmpordss + 1) -#define MN_vcmpordss 0x3982 -#define MN_vreducess 0x398c -#define MN_vrangess 0x3996 -#define MN_vcmpngess 0x399f -#define MN_vcmpgess 0x39a9 -#define MN_vrndscaless 0x39b2 +#define MN_vcmpordss 0x3a16 +#define MN_vreducess 0x3a20 +#define MN_vrangess 0x3a2a +#define MN_vcmpngess 0x3a33 +#define MN_vcmpgess 0x3a3d +#define MN_vrndscaless 0x3a46 #define MN_cmpnless (MN_vcmpnless + 1) -#define MN_vcmpnless 0x39be +#define MN_vcmpnless 0x3a52 #define MN_cmpless (MN_vcmpless + 1) -#define MN_vcmpless 0x39c8 -#define MN_vcmpfalsess 0x39d1 -#define MN_vcmptruess 0x39dd -#define MN_vscalefss 0x39e8 +#define MN_vcmpless 0x3a5c +#define MN_vcmpfalsess 0x3a65 +#define MN_vcmptruess 0x3a71 +#define MN_vscalefss 0x3a7c #define MN_comiss (MN_ucomiss + 1) #define MN_ucomiss (MN_vucomiss + 1) -#define MN_vucomiss 0x39f2 -#define MN_vcomiss 0x39fb +#define MN_vucomiss 0x3a86 +#define MN_vcomiss 0x3a8f #define MN_lss (MN_mulss + 2) #define MN_mulss (MN_vmulss + 1) -#define MN_vmulss 0x3a03 -#define MN_vfixupimmss 0x3a0a +#define MN_vmulss 0x3a97 +#define MN_vfixupimmss 0x3a9e #define MN_minss (MN_vminss + 1) -#define MN_vminss 0x3a16 +#define MN_vminss 0x3aaa #define MN_rcpss (MN_vrcpss + 1) -#define MN_vrcpss 0x3a1d +#define MN_vrcpss 0x3ab1 #define MN_cmpss (MN_vcmpss + 1) -#define MN_vcmpss 0x3a24 -#define MN_vgetexpss 0x3a2b -#define MN_vcmpunord_qss 0x3a35 -#define MN_vcmpord_qss 0x3a43 +#define MN_vcmpss 0x3ab8 +#define MN_vgetexpss 0x3abf +#define MN_vcmpunord_qss 0x3ac9 +#define MN_vcmpord_qss 0x3ad7 #define MN_cmpneqss (MN_vcmpneqss + 1) -#define MN_vcmpneqss 0x3a4f +#define MN_vcmpneqss 0x3ae3 #define MN_cmpeqss (MN_vcmpeqss + 1) -#define MN_vcmpeqss 0x3a59 -#define MN_vcmpge_oqss 0x3a62 -#define MN_vcmple_oqss 0x3a6e -#define MN_vcmpfalse_oqss 0x3a7a -#define MN_vcmpneq_oqss 0x3a89 -#define MN_vcmpeq_oqss 0x3a96 -#define MN_vcmpgt_oqss 0x3aa2 -#define MN_vcmplt_oqss 0x3aae -#define MN_vcmpnge_uqss 0x3aba -#define MN_vcmpnle_uqss 0x3ac7 -#define MN_vcmptrue_uqss 0x3ad4 -#define MN_vcmpneq_uqss 0x3ae2 -#define MN_vcmpeq_uqss 0x3aef -#define MN_vcmpngt_uqss 0x3afb -#define MN_vcmpnlt_uqss 0x3b08 -#define MN_vcmpunord_sss 0x3b15 -#define MN_vcmpord_sss 0x3b23 -#define MN_vcmpge_osss 0x3b2f -#define MN_vcmple_osss 0x3b3b -#define MN_vcmpfalse_osss 0x3b47 -#define MN_vcmpneq_osss 0x3b56 -#define MN_vcmpeq_osss 0x3b63 -#define MN_vcmpgt_osss 0x3b6f -#define MN_vcmplt_osss 0x3b7b -#define MN_vfpclassss 0x3b87 -#define MN_vcmpnge_usss 0x3b92 -#define MN_vcmpnle_usss 0x3b9f -#define MN_vcmptrue_usss 0x3bac -#define MN_vcmpneq_usss 0x3bba -#define MN_vcmpeq_usss 0x3bc7 -#define MN_vcmpngt_usss 0x3bd3 -#define MN_vcmpnlt_usss 0x3be0 -#define MN_vcmpngtss 0x3bed -#define MN_vcmpgtss 0x3bf7 +#define MN_vcmpeqss 0x3aed +#define MN_vcmpge_oqss 0x3af6 +#define MN_vcmple_oqss 0x3b02 +#define MN_vcmpfalse_oqss 0x3b0e +#define MN_vcmpneq_oqss 0x3b1d +#define MN_vcmpeq_oqss 0x3b2a +#define MN_vcmpgt_oqss 0x3b36 +#define MN_vcmplt_oqss 0x3b42 +#define MN_vcmpnge_uqss 0x3b4e +#define MN_vcmpnle_uqss 0x3b5b +#define MN_vcmptrue_uqss 0x3b68 +#define MN_vcmpneq_uqss 0x3b76 +#define MN_vcmpeq_uqss 0x3b83 +#define MN_vcmpngt_uqss 0x3b8f +#define MN_vcmpnlt_uqss 0x3b9c +#define MN_vcmpunord_sss 0x3ba9 +#define MN_vcmpord_sss 0x3bb7 +#define MN_vcmpge_osss 0x3bc3 +#define MN_vcmple_osss 0x3bcf +#define MN_vcmpfalse_osss 0x3bdb +#define MN_vcmpneq_osss 0x3bea +#define MN_vcmpeq_osss 0x3bf7 +#define MN_vcmpgt_osss 0x3c03 +#define MN_vcmplt_osss 0x3c0f +#define MN_vfpclassss 0x3c1b +#define MN_vcmpnge_usss 0x3c26 +#define MN_vcmpnle_usss 0x3c33 +#define MN_vcmptrue_usss 0x3c40 +#define MN_vcmpneq_usss 0x3c4e +#define MN_vcmpeq_usss 0x3c5b +#define MN_vcmpngt_usss 0x3c67 +#define MN_vcmpnlt_usss 0x3c74 +#define MN_vcmpngtss 0x3c81 +#define MN_vcmpgtss 0x3c8b #define MN_cmpnltss (MN_vcmpnltss + 1) -#define MN_vcmpnltss 0x3c00 +#define MN_vcmpnltss 0x3c94 #define MN_cmpltss (MN_vcmpltss + 1) -#define MN_vcmpltss 0x3c0a -#define MN_vgetmantss 0x3c13 -#define MN_movntss 0x3c1e +#define MN_vcmpltss 0x3c9e +#define MN_vgetmantss 0x3ca7 +#define MN_movntss 0x3cb2 #define MN_sqrtss (MN_rsqrtss + 1) #define MN_rsqrtss (MN_vrsqrtss + 1) -#define MN_vrsqrtss 0x3c26 -#define MN_vsqrtss 0x3c2f -#define MN_vbroadcastss 0x3c37 +#define MN_vrsqrtss 0x3cba +#define MN_vsqrtss 0x3cc3 +#define MN_vbroadcastss 0x3ccb #define MN_divss (MN_vdivss + 1) -#define MN_vdivss 0x3c44 +#define MN_vdivss 0x3cd8 #define MN_movss (MN_vmovss + 1) -#define MN_vmovss 0x3c4b +#define MN_vmovss 0x3cdf #define MN_maxss (MN_vmaxss + 1) -#define MN_vmaxss 0x3c52 -#define MN_vfrczss 0x3c59 -#define MN_bts 0x3c61 -#define MN_erets 0x3c65 -#define MN_sets 0x3c6b -#define MN_clts 0x3c70 -#define MN_outs 0x3c75 +#define MN_vmaxss 0x3ce6 +#define MN_vfrczss 0x3ced +#define MN_bts 0x3cf5 +#define MN_erets 0x3cf9 +#define MN_sets 0x3cff +#define MN_clts 0x3d04 +#define MN_outs 0x3d09 #define MN_movs (MN_cmovs + 1) -#define MN_cmovs 0x3c7a -#define MN_fldl2t 0x3c80 -#define MN_xlat 0x3c87 -#define MN_bt 0x3c8c -#define MN_fxtract 0x3c8f -#define MN_lgdt 0x3c97 -#define MN_sgdt 0x3c9c -#define MN_lidt 0x3ca1 -#define MN_sidt 0x3ca6 -#define MN_fldt 0x3cab -#define MN_lldt 0x3cb0 -#define MN_sldt 0x3cb5 +#define MN_cmovs 0x3d0e +#define MN_fldl2t 0x3d14 +#define MN_xlat 0x3d1b +#define MN_bt 0x3d20 +#define MN_fxtract 0x3d23 +#define MN_lgdt 0x3d2b +#define MN_sgdt 0x3d30 +#define MN_lidt 0x3d35 +#define MN_sidt 0x3d3a +#define MN_fldt 0x3d3f +#define MN_lldt 0x3d44 +#define MN_sldt 0x3d49 #define MN_ret (MN_iret + 1) #define MN_iret (MN_uiret + 1) -#define MN_uiret 0x3cba -#define MN_lret 0x3cc0 -#define MN_seamret 0x3cc5 -#define MN_sysret 0x3ccd -#define MN_hreset 0x3cd4 -#define MN_pfcmpgt 0x3cdb -#define MN_ht 0x3ce3 +#define MN_uiret 0x3d4e +#define MN_lret 0x3d54 +#define MN_seamret 0x3d59 +#define MN_sysret 0x3d61 +#define MN_hreset 0x3d68 +#define MN_pfcmpgt 0x3d6f +#define MN_ht 0x3d77 #define MN_wait (MN_fwait + 1) -#define MN_fwait 0x3ce6 +#define MN_fwait 0x3d7a #define MN_mwait (MN_umwait + 1) -#define MN_umwait 0x3cec -#define MN_mcommit 0x3cf3 -#define MN_finit 0x3cfb -#define MN_skinit 0x3d01 -#define MN_fninit 0x3d08 -#define MN_vmgexit 0x3d0f -#define MN_sysexit 0x3d17 -#define MN_hlt 0x3d1f -#define MN_popcnt 0x3d23 -#define MN_lzcnt 0x3d2a -#define MN_tzcnt 0x3d30 -#define MN_hnt 0x3d36 +#define MN_umwait 0x3d80 +#define MN_mcommit 0x3d87 +#define MN_finit 0x3d8f +#define MN_skinit 0x3d95 +#define MN_fninit 0x3d9c +#define MN_vmgexit 0x3da3 +#define MN_sysexit 0x3dab +#define MN_hlt 0x3db3 +#define MN_popcnt 0x3db7 +#define MN_lzcnt 0x3dbe +#define MN_tzcnt 0x3dc4 +#define MN_hnt 0x3dca #define MN_int (MN_frndint + 4) -#define MN_frndint 0x3d3a -#define MN_not 0x3d42 -#define MN_invept 0x3d46 -#define MN_xsaveopt 0x3d4d -#define MN_clflushopt 0x3d56 -#define MN_fstpt 0x3d61 -#define MN_xabort 0x3d67 -#define MN_fsqrt 0x3d6e -#define MN_pfrsqrt 0x3d74 +#define MN_frndint 0x3dce +#define MN_not 0x3dd6 +#define MN_invept 0x3dda +#define MN_xsaveopt 0x3de1 +#define MN_clflushopt 0x3dea +#define MN_fstpt 0x3df5 +#define MN_xabort 0x3dfb +#define MN_fsqrt 0x3e02 +#define MN_pfrsqrt 0x3e08 #define MN_aesdeclast (MN_vaesdeclast + 1) -#define MN_vaesdeclast 0x3d7c +#define MN_vaesdeclast 0x3e10 #define MN_aesenclast (MN_vaesenclast + 1) -#define MN_vaesenclast 0x3d88 +#define MN_vaesenclast 0x3e1c #define MN_test (MN_ptest + 1) #define MN_ptest (MN_vptest + 1) -#define MN_vptest 0x3d94 -#define MN_xtest 0x3d9b -#define MN_fst 0x3da1 -#define MN_fist 0x3da5 -#define MN_rdmsrlist 0x3daa -#define MN_wrmsrlist 0x3db4 +#define MN_vptest 0x3e28 +#define MN_xtest 0x3e2f +#define MN_fst 0x3e35 +#define MN_fist 0x3e39 +#define MN_rdmsrlist 0x3e3e +#define MN_wrmsrlist 0x3e48 #define MN_aeskeygenassist (MN_vaeskeygenassist + 1) -#define MN_vaeskeygenassist 0x3dbe -#define MN_vmptrst 0x3dcf -#define MN_ftst 0x3dd7 -#define MN_rmpadjust 0x3ddc -#define MN_out 0x3de6 -#define MN_pext 0x3dea -#define MN_bndcu 0x3def -#define MN_enclu 0x3df5 -#define MN_fcmovnu 0x3dfb +#define MN_vaeskeygenassist 0x3e52 +#define MN_vmptrst 0x3e63 +#define MN_ftst 0x3e6b +#define MN_rmpadjust 0x3e70 +#define MN_out 0x3e7a +#define MN_pext 0x3e7e +#define MN_bndcu 0x3e83 +#define MN_enclu 0x3e89 +#define MN_fcmovnu 0x3e8f #define MN_lddqu (MN_vlddqu + 1) -#define MN_vlddqu 0x3e03 +#define MN_vlddqu 0x3e97 #define MN_movdqu (MN_maskmovdqu + 4) #define MN_maskmovdqu (MN_vmaskmovdqu + 1) -#define MN_vmaskmovdqu 0x3e0a -#define MN_vmovdqu 0x3e16 -#define MN_rdpkru 0x3e1e -#define MN_wrpkru 0x3e25 -#define MN_rdpru 0x3e2c -#define MN_eretu 0x3e32 -#define MN_fcmovu 0x3e38 -#define MN_xgetbv 0x3e3f -#define MN_xsetbv 0x3e46 +#define MN_vmaskmovdqu 0x3e9e +#define MN_vmovdqu 0x3eaa +#define MN_rdpkru 0x3eb2 +#define MN_wrpkru 0x3eb9 +#define MN_rdpru 0x3ec0 +#define MN_eretu 0x3ec6 +#define MN_fcmovu 0x3ecc +#define MN_xgetbv 0x3ed3 +#define MN_xsetbv 0x3eda #define MN_div (MN_fdiv + 1) -#define MN_fdiv 0x3e4d +#define MN_fdiv 0x3ee1 #define MN_idiv (MN_fidiv + 1) -#define MN_fidiv 0x3e52 -#define MN_enclv 0x3e58 -#define MN_fldenv 0x3e5e -#define MN_fstenv 0x3e65 -#define MN_fnstenv 0x3e6c +#define MN_fidiv 0x3ee6 +#define MN_enclv 0x3eec +#define MN_fldenv 0x3ef2 +#define MN_fstenv 0x3ef9 +#define MN_fnstenv 0x3f00 #define MN_mov (MN_vpcmov + 3) -#define MN_vpcmov 0x3e74 -#define MN_bndmov 0x3e7b -#define MN_smov 0x3e82 -#define MN_rex_w 0x3e87 -#define MN_vcvttph2w 0x3e8d -#define MN_vcvtph2w 0x3e97 -#define MN_vpermi2w 0x3ea0 -#define MN_vpmovm2w 0x3ea9 -#define MN_vpermt2w 0x3eb2 -#define MN_vpshaw 0x3ebb +#define MN_vpcmov 0x3f08 +#define MN_bndmov 0x3f0f +#define MN_smov 0x3f16 +#define MN_rex_w 0x3f1b +#define MN_vcvttph2w 0x3f21 +#define MN_vcvtph2w 0x3f2b +#define MN_vpermi2w 0x3f34 +#define MN_vpmovm2w 0x3f3d +#define MN_vpermt2w 0x3f46 +#define MN_vpshaw 0x3f4f #define MN_psraw (MN_vpsraw + 1) -#define MN_vpsraw 0x3ec2 -#define MN_vphsubbw 0x3ec9 -#define MN_cbw 0x3ed2 +#define MN_vpsraw 0x3f56 +#define MN_vphsubbw 0x3f5d +#define MN_cbw 0x3f66 #define MN_psadbw (MN_vdbpsadbw + 3) -#define MN_vdbpsadbw 0x3ed6 +#define MN_vdbpsadbw 0x3f6a #define MN_mpsadbw (MN_vmpsadbw + 1) -#define MN_vmpsadbw 0x3ee0 -#define MN_vpsadbw 0x3ee9 -#define MN_vphaddbw 0x3ef1 +#define MN_vmpsadbw 0x3f74 +#define MN_vpsadbw 0x3f7d +#define MN_vphaddbw 0x3f85 #define MN_punpckhbw (MN_vpunpckhbw + 1) -#define MN_vpunpckhbw 0x3efa -#define MN_kunpckbw 0x3f05 +#define MN_vpunpckhbw 0x3f8e +#define MN_kunpckbw 0x3f99 #define MN_punpcklbw (MN_vpunpcklbw + 1) -#define MN_vpunpcklbw 0x3f0e -#define MN_vphaddubw 0x3f19 +#define MN_vpunpcklbw 0x3fa2 +#define MN_vphaddubw 0x3fad #define MN_phsubw (MN_vphsubw + 1) -#define MN_vphsubw 0x3f23 +#define MN_vphsubw 0x3fb7 #define MN_psubw (MN_vpsubw + 1) -#define MN_vpsubw 0x3f2b +#define MN_vpsubw 0x3fbf #define MN_pmovsxbw (MN_vpmovsxbw + 1) -#define MN_vpmovsxbw 0x3f32 +#define MN_vpmovsxbw 0x3fc6 #define MN_pmovzxbw (MN_vpmovzxbw + 1) -#define MN_vpmovzxbw 0x3f3c -#define MN_fldcw 0x3f46 -#define MN_fstcw 0x3f4c -#define MN_fnstcw 0x3f52 +#define MN_vpmovzxbw 0x3fd0 +#define MN_fldcw 0x3fda +#define MN_fstcw 0x3fe0 +#define MN_fnstcw 0x3fe6 #define MN_phaddw (MN_vphaddw + 1) -#define MN_vphaddw 0x3f59 -#define MN_kaddw 0x3f61 +#define MN_vphaddw 0x3fed +#define MN_kaddw 0x3ff5 #define MN_paddw (MN_vpaddw + 1) -#define MN_vpaddw 0x3f67 -#define MN_vpshldw 0x3f6e -#define MN_kandw 0x3f76 -#define MN_vpexpandw 0x3f7c +#define MN_vpaddw 0x3ffb +#define MN_vpshldw 0x4002 +#define MN_kandw 0x400a +#define MN_vpexpandw 0x4010 #define MN_pblendw (MN_vpblendw + 1) -#define MN_vpblendw 0x3f86 -#define MN_vpshrdw 0x3f8f +#define MN_vpblendw 0x401a +#define MN_vpshrdw 0x4023 #define MN_packssdw (MN_vpackssdw + 1) -#define MN_vpackssdw 0x3f97 +#define MN_vpackssdw 0x402b #define MN_packusdw (MN_vpackusdw + 1) -#define MN_vpackusdw 0x3fa1 -#define MN_vpmovusdw 0x3fab -#define MN_vpmovsdw 0x3fb5 -#define MN_vpmovdw 0x3fbe -#define MN_vpcomgew 0x3fc6 -#define MN_vpcomlew 0x3fcf -#define MN_vpcmpnlew 0x3fd8 -#define MN_vpcmplew 0x3fe2 -#define MN_vpcomfalsew 0x3feb -#define MN_vpcomtruew 0x3ff7 -#define MN_pi2fw 0x4002 -#define MN_pshufw 0x4008 +#define MN_vpackusdw 0x4035 +#define MN_vpmovusdw 0x403f +#define MN_vpmovsdw 0x4049 +#define MN_vpmovdw 0x4052 +#define MN_vpcomgew 0x405a +#define MN_vpcomlew 0x4063 +#define MN_vpcmpnlew 0x406c +#define MN_vpcmplew 0x4076 +#define MN_vpcomfalsew 0x407f +#define MN_vpcomtruew 0x408b +#define MN_pi2fw 0x4096 +#define MN_pshufw 0x409c #define MN_pavgw (MN_vpavgw + 1) -#define MN_vpavgw 0x400f -#define MN_prefetchw 0x4016 +#define MN_vpavgw 0x40a3 +#define MN_prefetchw 0x40aa #define MN_pshufhw (MN_vpshufhw + 1) -#define MN_vpshufhw 0x4020 +#define MN_vpshufhw 0x40b4 #define MN_pmulhw (MN_vpmulhw + 1) -#define MN_vpmulhw 0x4029 -#define MN_pf2iw 0x4031 +#define MN_vpmulhw 0x40bd +#define MN_pf2iw 0x40c5 #define MN_pshuflw (MN_vpshuflw + 1) -#define MN_vpshuflw 0x4037 -#define MN_vpshlw 0x4040 +#define MN_vpshuflw 0x40cb +#define MN_vpshlw 0x40d4 #define MN_psllw (MN_vpsllw + 1) -#define MN_vpsllw 0x4047 +#define MN_vpsllw 0x40db #define MN_pmullw (MN_vpmullw + 1) -#define MN_vpmullw 0x404e +#define MN_vpmullw 0x40e2 #define MN_psrlw (MN_vpsrlw + 1) -#define MN_vpsrlw 0x4056 -#define MN_kshiftlw 0x405d -#define MN_vpblendmw 0x4066 -#define MN_vptestnmw 0x4070 -#define MN_vpcomw 0x407a -#define MN_vpermw 0x4081 -#define MN_vptestmw 0x4088 -#define MN_kandnw 0x4091 +#define MN_vpsrlw 0x40ea +#define MN_kshiftlw 0x40f1 +#define MN_vpblendmw 0x40fa +#define MN_vptestnmw 0x4104 +#define MN_vpcomw 0x410e +#define MN_vpermw 0x4115 +#define MN_vptestmw 0x411c +#define MN_kandnw 0x4125 #define MN_psignw (MN_vpsignw + 1) -#define MN_vpsignw 0x4098 -#define MN_vpcmpw 0x40a0 -#define MN_vpcomeqw 0x40a7 -#define MN_vpcomneqw 0x40b0 -#define MN_vpcmpneqw 0x40ba +#define MN_vpsignw 0x412c +#define MN_vpcmpw 0x4134 +#define MN_vpcomeqw 0x413b +#define MN_vpcomneqw 0x4144 +#define MN_vpcmpneqw 0x414e #define MN_pcmpeqw (MN_vpcmpeqw + 1) -#define MN_vpcmpeqw 0x40c4 -#define MN_vpmovusqw 0x40cd -#define MN_vpmovsqw 0x40d7 -#define MN_vpmovqw 0x40e0 -#define MN_verw 0x40e8 -#define MN_pmulhrw 0x40ed -#define MN_korw 0x40f5 -#define MN_kxnorw 0x40fa -#define MN_kxorw 0x4101 +#define MN_vpcmpeqw 0x4158 +#define MN_vpmovusqw 0x4161 +#define MN_vpmovsqw 0x416b +#define MN_vpmovqw 0x4174 +#define MN_verw 0x417c +#define MN_pmulhrw 0x4181 +#define MN_korw 0x4189 +#define MN_kxnorw 0x418e +#define MN_kxorw 0x4195 #define MN_pinsrw (MN_vpinsrw + 1) -#define MN_vpinsrw 0x4107 -#define MN_kshiftrw 0x410f +#define MN_vpinsrw 0x419b +#define MN_kshiftrw 0x41a3 #define MN_pextrw (MN_vpextrw + 1) -#define MN_vpextrw 0x4118 +#define MN_vpextrw 0x41ac #define MN_pabsw (MN_vpabsw + 1) -#define MN_vpabsw 0x4120 +#define MN_vpabsw 0x41b4 #define MN_pmaddubsw (MN_vpmaddubsw + 1) -#define MN_vpmaddubsw 0x4127 +#define MN_vpmaddubsw 0x41bb #define MN_phsubsw (MN_vphsubsw + 1) -#define MN_vphsubsw 0x4132 +#define MN_vphsubsw 0x41c6 #define MN_psubsw (MN_vpsubsw + 1) -#define MN_vpsubsw 0x413b +#define MN_vpsubsw 0x41cf #define MN_phaddsw (MN_vphaddsw + 1) -#define MN_vphaddsw 0x4143 +#define MN_vphaddsw 0x41d7 #define MN_paddsw (MN_vpaddsw + 1) -#define MN_vpaddsw 0x414c -#define MN_lmsw 0x4154 -#define MN_smsw 0x4159 +#define MN_vpaddsw 0x41e0 +#define MN_lmsw 0x41e8 +#define MN_smsw 0x41ed #define MN_pminsw (MN_vpminsw + 1) -#define MN_vpminsw 0x415e +#define MN_vpminsw 0x41f2 #define MN_pmulhrsw (MN_vpmulhrsw + 1) -#define MN_vpmulhrsw 0x4166 -#define MN_vpcompressw 0x4170 -#define MN_fstsw 0x417c -#define MN_fnstsw 0x4182 +#define MN_vpmulhrsw 0x41fa +#define MN_vpcompressw 0x4204 +#define MN_fstsw 0x4210 +#define MN_fnstsw 0x4216 #define MN_psubusw (MN_vpsubusw + 1) -#define MN_vpsubusw 0x4189 +#define MN_vpsubusw 0x421d #define MN_paddusw (MN_vpaddusw + 1) -#define MN_vpaddusw 0x4192 -#define MN_movsw 0x419b +#define MN_vpaddusw 0x4226 +#define MN_movsw 0x422f #define MN_pmaxsw (MN_vpmaxsw + 1) -#define MN_vpmaxsw 0x41a1 -#define MN_cbtw 0x41a9 -#define MN_vpcomgtw 0x41ae +#define MN_vpmaxsw 0x4235 +#define MN_cbtw 0x423d +#define MN_vpcomgtw 0x4242 #define MN_pcmpgtw (MN_vpcmpgtw + 1) -#define MN_vpcmpgtw 0x41b7 -#define MN_vpcomltw 0x41c0 -#define MN_vpcmpnltw 0x41c9 -#define MN_vpcmpltw 0x41d3 -#define MN_vpopcntw 0x41dc -#define MN_knotw 0x41e5 -#define MN_vprotw 0x41eb -#define MN_vpbroadcastw 0x41f2 -#define MN_ktestw 0x41ff -#define MN_kortestw 0x4206 -#define MN_vcvttph2uw 0x420f -#define MN_vcvtph2uw 0x421a -#define MN_vpcomgeuw 0x4224 -#define MN_vpcomleuw 0x422e -#define MN_vpcmpnleuw 0x4238 -#define MN_vpcmpleuw 0x4243 -#define MN_vpcomfalseuw 0x424d -#define MN_vpcomtrueuw 0x425a +#define MN_vpcmpgtw 0x424b +#define MN_vpcomltw 0x4254 +#define MN_vpcmpnltw 0x425d +#define MN_vpcmpltw 0x4267 +#define MN_vpopcntw 0x4270 +#define MN_knotw 0x4279 +#define MN_vprotw 0x427f +#define MN_vpbroadcastw 0x4286 +#define MN_ktestw 0x4293 +#define MN_kortestw 0x429a +#define MN_vcvttph2uw 0x42a3 +#define MN_vcvtph2uw 0x42ae +#define MN_vpcomgeuw 0x42b8 +#define MN_vpcomleuw 0x42c2 +#define MN_vpcmpnleuw 0x42cc +#define MN_vpcmpleuw 0x42d7 +#define MN_vpcomfalseuw 0x42e1 +#define MN_vpcomtrueuw 0x42ee #define MN_pmulhuw (MN_vpmulhuw + 1) -#define MN_vpmulhuw 0x4266 -#define MN_vpcomuw 0x426f +#define MN_vpmulhuw 0x42fa +#define MN_vpcomuw 0x4303 #define MN_pminuw (MN_vpminuw + 1) -#define MN_vpminuw 0x4277 -#define MN_vpcmpuw 0x427f -#define MN_vpcomequw 0x4287 -#define MN_vpcomnequw 0x4291 -#define MN_vpcmpnequw 0x429c -#define MN_vpcmpequw 0x42a7 +#define MN_vpminuw 0x430b +#define MN_vpcmpuw 0x4313 +#define MN_vpcomequw 0x431b +#define MN_vpcomnequw 0x4325 +#define MN_vpcmpnequw 0x4330 +#define MN_vpcmpequw 0x433b #define MN_phminposuw (MN_vphminposuw + 1) -#define MN_vphminposuw 0x42b1 -#define MN_vpcomgtuw 0x42bd -#define MN_vpcomltuw 0x42c7 -#define MN_vpcmpnltuw 0x42d1 -#define MN_vpcmpltuw 0x42dc +#define MN_vphminposuw 0x4345 +#define MN_vpcomgtuw 0x4351 +#define MN_vpcomltuw 0x435b +#define MN_vpcmpnltuw 0x4365 +#define MN_vpcmpltuw 0x4370 #define MN_pmaxuw (MN_vpmaxuw + 1) -#define MN_vpmaxuw 0x42e6 -#define MN_vpsravw 0x42ee -#define MN_vpshldvw 0x42f6 -#define MN_vpshrdvw 0x42ff -#define MN_vpsllvw 0x4308 -#define MN_vpsrlvw 0x4310 -#define MN_kmovw 0x4318 -#define MN_vmovw 0x431e -#define MN_vpmacsww 0x4324 -#define MN_vpmacssww 0x432d -#define MN_movzw 0x4337 -#define MN_rex_x 0x433d -#define MN_fyl2x 0x4343 -#define MN_rex64x 0x4349 -#define MN_vcvtneps2bf16x 0x4350 -#define MN_pfmax 0x435f -#define MN_adcx 0x4365 -#define MN_bndldx 0x436a -#define MN_vfpclasspdx 0x4371 -#define MN_fclex 0x437d -#define MN_fnclex 0x4383 -#define MN_rex 0x438a -#define MN_vcvtpd2phx 0x438e -#define MN_vcvtdq2phx 0x4399 -#define MN_vcvtudq2phx 0x43a4 -#define MN_vcvtqq2phx 0x43b0 -#define MN_vcvtuqq2phx 0x43bb -#define MN_vcvtps2phx 0x43c7 -#define MN_vfpclassphx 0x43d2 -#define MN_shlx 0x43de -#define MN_mulx 0x43e3 -#define MN_adox 0x43e8 -#define MN_vcvttpd2dqx 0x43ed -#define MN_vcvtpd2dqx 0x43f9 -#define MN_vcvttpd2udqx 0x4404 -#define MN_vcvtpd2udqx 0x4411 -#define MN_rex_rx 0x441d -#define MN_sarx 0x4424 -#define MN_shrx 0x4429 -#define MN_rorx 0x442e -#define MN_monitorx 0x4433 -#define MN_rex_wrx 0x443c -#define MN_vcvtpd2psx 0x4444 -#define MN_vcvtph2psx 0x444f -#define MN_vcvtqq2psx 0x445a -#define MN_vcvtuqq2psx 0x4465 -#define MN_vfpclasspsx 0x4471 -#define MN_movsx 0x447d -#define MN_mwaitx 0x4483 -#define MN_bndstx 0x448a -#define MN_rex_wx 0x4491 -#define MN_rexx 0x4498 -#define MN_vcvtps2phxx 0x449d -#define MN_movzx 0x44a9 -#define MN_rex64y 0x44af -#define MN_vcvtneps2bf16y 0x44b6 -#define MN_vfpclasspdy 0x44c5 -#define MN_loadiwkey 0x44d1 -#define MN_vcvtpd2phy 0x44db -#define MN_vcvtdq2phy 0x44e6 -#define MN_vcvtudq2phy 0x44f1 -#define MN_vcvtqq2phy 0x44fd -#define MN_vcvtuqq2phy 0x4508 -#define MN_vfpclassphy 0x4514 -#define MN_vcvttpd2dqy 0x4520 -#define MN_vcvtpd2dqy 0x452c -#define MN_vcvttpd2udqy 0x4537 -#define MN_vcvtpd2udqy 0x4544 -#define MN_rmpquery 0x4550 -#define MN_clrssbsy 0x4559 -#define MN_setssbsy 0x4562 -#define MN_vcvtpd2psy 0x456b -#define MN_vcvtqq2psy 0x4576 -#define MN_vcvtuqq2psy 0x4581 -#define MN_vfpclasspsy 0x458d -#define MN_rex64xy 0x4599 -#define MN_rexy 0x45a1 -#define MN_vcvtps2phxy 0x45a6 -#define MN_rexxy 0x45b2 -#define MN_rex64z 0x45b8 -#define MN_fldz 0x45bf -#define MN_vfpclasspdz 0x45c4 -#define MN_vcvtpd2phz 0x45d0 -#define MN_vcvtqq2phz 0x45db -#define MN_vcvtuqq2phz 0x45e6 -#define MN_vfpclassphz 0x45f2 -#define MN_jz 0x45fe -#define MN_jnz 0x4601 -#define MN_repnz 0x4605 -#define MN_loopnz 0x460b -#define MN_setnz 0x4612 -#define MN_cmovnz 0x4618 -#define MN_repz 0x461f -#define MN_loopz 0x4624 -#define MN_vfpclasspsz 0x462a -#define MN_setz 0x4636 -#define MN_cmovz 0x463b -#define MN_rex64xz 0x4641 -#define MN_jecxz 0x4649 -#define MN_jcxz 0x464f -#define MN_jrcxz 0x4654 -#define MN_rexz 0x465a -#define MN_rexxz 0x465f -#define MN_rex64yz 0x4665 -#define MN_rex64xyz 0x466d -#define MN_rexyz 0x4676 -#define MN_rexxyz 0x467c -#define MN__disp32_ 0x4683 -#define MN__vex2_ 0x468c -#define MN__vex3_ 0x4693 -#define MN__disp16_ 0x469a -#define MN__disp8_ 0x46a3 -#define MN__load_ 0x46ab -#define MN__store_ 0x46b2 -#define MN__nooptimize_ 0x46ba -#define MN__rex_ 0x46c7 -#define MN__evex_ 0x46cd -#define MN__vex_ 0x46d4 -#define MN__insn 0x46da +#define MN_vpmaxuw 0x437a +#define MN_vpsravw 0x4382 +#define MN_vpshldvw 0x438a +#define MN_vpshrdvw 0x4393 +#define MN_vpsllvw 0x439c +#define MN_vpsrlvw 0x43a4 +#define MN_kmovw 0x43ac +#define MN_vmovw 0x43b2 +#define MN_vpmacsww 0x43b8 +#define MN_vpmacssww 0x43c1 +#define MN_movzw 0x43cb +#define MN_rex_x 0x43d1 +#define MN_fyl2x 0x43d7 +#define MN_rex64x 0x43dd +#define MN_vcvtneps2bf16x 0x43e4 +#define MN_pfmax 0x43f3 +#define MN_adcx 0x43f9 +#define MN_bndldx 0x43fe +#define MN_vfpclasspdx 0x4405 +#define MN_fclex 0x4411 +#define MN_fnclex 0x4417 +#define MN_rex 0x441e +#define MN_vcvtpd2phx 0x4422 +#define MN_vcvtdq2phx 0x442d +#define MN_vcvtudq2phx 0x4438 +#define MN_vcvtqq2phx 0x4444 +#define MN_vcvtuqq2phx 0x444f +#define MN_vcvtps2phx 0x445b +#define MN_vfpclassphx 0x4466 +#define MN_shlx 0x4472 +#define MN_mulx 0x4477 +#define MN_adox 0x447c +#define MN_vcvttpd2dqx 0x4481 +#define MN_vcvtpd2dqx 0x448d +#define MN_vcvttpd2udqx 0x4498 +#define MN_vcvtpd2udqx 0x44a5 +#define MN_rex_rx 0x44b1 +#define MN_sarx 0x44b8 +#define MN_shrx 0x44bd +#define MN_rorx 0x44c2 +#define MN_monitorx 0x44c7 +#define MN_rex_wrx 0x44d0 +#define MN_vcvtpd2psx 0x44d8 +#define MN_vcvtph2psx 0x44e3 +#define MN_vcvtqq2psx 0x44ee +#define MN_vcvtuqq2psx 0x44f9 +#define MN_vfpclasspsx 0x4505 +#define MN_movsx 0x4511 +#define MN_mwaitx 0x4517 +#define MN_bndstx 0x451e +#define MN_rex_wx 0x4525 +#define MN_rexx 0x452c +#define MN_vcvtps2phxx 0x4531 +#define MN_movzx 0x453d +#define MN_rex64y 0x4543 +#define MN_vcvtneps2bf16y 0x454a +#define MN_vfpclasspdy 0x4559 +#define MN_loadiwkey 0x4565 +#define MN_vcvtpd2phy 0x456f +#define MN_vcvtdq2phy 0x457a +#define MN_vcvtudq2phy 0x4585 +#define MN_vcvtqq2phy 0x4591 +#define MN_vcvtuqq2phy 0x459c +#define MN_vfpclassphy 0x45a8 +#define MN_vcvttpd2dqy 0x45b4 +#define MN_vcvtpd2dqy 0x45c0 +#define MN_vcvttpd2udqy 0x45cb +#define MN_vcvtpd2udqy 0x45d8 +#define MN_rmpquery 0x45e4 +#define MN_clrssbsy 0x45ed +#define MN_setssbsy 0x45f6 +#define MN_vcvtpd2psy 0x45ff +#define MN_vcvtqq2psy 0x460a +#define MN_vcvtuqq2psy 0x4615 +#define MN_vfpclasspsy 0x4621 +#define MN_rex64xy 0x462d +#define MN_rexy 0x4635 +#define MN_vcvtps2phxy 0x463a +#define MN_rexxy 0x4646 +#define MN_rex64z 0x464c +#define MN_fldz 0x4653 +#define MN_vfpclasspdz 0x4658 +#define MN_vcvtpd2phz 0x4664 +#define MN_vcvtqq2phz 0x466f +#define MN_vcvtuqq2phz 0x467a +#define MN_vfpclassphz 0x4686 +#define MN_jz 0x4692 +#define MN_jnz 0x4695 +#define MN_repnz 0x4699 +#define MN_loopnz 0x469f +#define MN_setnz 0x46a6 +#define MN_cmovnz 0x46ac +#define MN_repz 0x46b3 +#define MN_loopz 0x46b8 +#define MN_vfpclasspsz 0x46be +#define MN_setz 0x46ca +#define MN_cmovz 0x46cf +#define MN_rex64xz 0x46d5 +#define MN_jecxz 0x46dd +#define MN_jcxz 0x46e3 +#define MN_jrcxz 0x46e8 +#define MN_rexz 0x46ee +#define MN_rexxz 0x46f3 +#define MN_rex64yz 0x46f9 +#define MN_rex64xyz 0x4701 +#define MN_rexyz 0x470a +#define MN_rexxyz 0x4710 +#define MN__disp32_ 0x4717 +#define MN__vex2_ 0x4720 +#define MN__vex3_ 0x4727 +#define MN__disp16_ 0x472e +#define MN__disp8_ 0x4737 +#define MN__load_ 0x473f +#define MN__store_ 0x4746 +#define MN__nooptimize_ 0x474e +#define MN__rex_ 0x475b +#define MN__evex_ 0x4761 +#define MN__vex_ 0x4768 +#define MN__insn 0x476e diff --git a/opcodes/i386-opc.h b/opcodes/i386-opc.h index 3318bcfec33..284475076a1 100644 --- a/opcodes/i386-opc.h +++ b/opcodes/i386-opc.h @@ -175,6 +175,12 @@ enum CpuSMAP, /* SHA instructions required. */ CpuSHA, + /* SHA512 instructions required. */ + CpuSHA512, + /* SM3 instructions required. */ + CpuSM3, + /* SM4 instructions required. */ + CpuSM4, /* CLFLUSHOPT instruction required */ CpuClflushOpt, /* XSAVES/XRSTORS instruction required */ @@ -219,6 +225,8 @@ enum CpuAVX_IFMA, /* Intel AVX VNNI-INT8 Instructions support required. */ CpuAVX_VNNI_INT8, + /* Intel AVX VNNI-INT16 Instructions support required. */ + CpuAVX_VNNI_INT16, /* Intel CMPccXADD instructions support required. */ CpuCMPCCXADD, /* Intel WRMSRNS Instructions support required */ @@ -266,6 +274,8 @@ enum CpuWBNOINVD, /* PCONFIG instructions required */ CpuPCONFIG, + /* PBNDKB instructions required. */ + CpuPBNDKB, /* WAITPKG instructions required */ CpuWAITPKG, /* UINTR instructions required */ @@ -401,6 +411,9 @@ typedef union i386_cpu_flags unsigned int cpuprfchw:1; unsigned int cpusmap:1; unsigned int cpusha:1; + unsigned int cpusha512:1; + unsigned int cpusm3:1; + unsigned int cpusm4:1; unsigned int cpuclflushopt:1; unsigned int cpuxsaves:1; unsigned int cpuxsavec:1; @@ -423,6 +436,7 @@ typedef union i386_cpu_flags unsigned int cpuprefetchi:1; unsigned int cpuavx_ifma:1; unsigned int cpuavx_vnni_int8:1; + unsigned int cpuavx_vnni_int16:1; unsigned int cpucmpccxadd:1; unsigned int cpuwrmsrns:1; unsigned int cpumsrlist:1; @@ -447,6 +461,7 @@ typedef union i386_cpu_flags unsigned int cpuvpclmulqdq:1; unsigned int cpuwbnoinvd:1; unsigned int cpupconfig:1; + unsigned int cpupbndkb:1; unsigned int cpuwaitpkg:1; unsigned int cpuuintr:1; unsigned int cpucldemote:1; diff --git a/opcodes/i386-opc.tbl b/opcodes/i386-opc.tbl index 26fee21d10d..00967522371 100644 --- a/opcodes/i386-opc.tbl +++ b/opcodes/i386-opc.tbl @@ -1025,8 +1025,8 @@ pand, 0x0fdb, , Modrm||C|NoSuf, { |, 0x0fdf, , Modrm||NoSuf, { ||Unspecified|BaseIndex, } pcmpeq, 0x0f74 | , , Modrm||C|NoSuf, { ||Unspecified|BaseIndex, } pcmpeqd, 0x0f76, , Modrm||C|NoSuf, { ||Unspecified|BaseIndex, } -pcmpgt, 0x0f64 | , , Modrm||NoSuf, { ||Unspecified|BaseIndex, } -pcmpgtd, 0x0f66, , Modrm||NoSuf, { ||Unspecified|BaseIndex, } +pcmpgt, 0x0f64 | , , Modrm||NoSuf|Optimize, { ||Unspecified|BaseIndex, } +pcmpgtd, 0x0f66, , Modrm||NoSuf|Optimize, { ||Unspecified|BaseIndex, } pmaddwd, 0x0ff5, , Modrm||C|NoSuf, { ||Unspecified|BaseIndex, } pmulhw, 0x0fe5, , Modrm||C|NoSuf, { ||Unspecified|BaseIndex, } pmullw, 0x0fd5, , Modrm||C|NoSuf, { ||Unspecified|BaseIndex, } @@ -1363,7 +1363,7 @@ pblendvb, 0x664c, AVX, Modrm|Vex128|Space0F3A|VexVVVV|VexW0|NoSuf|Implicit1stXmm pblendvb, 0x660f3810, SSE4_1, Modrm|NoSuf, { Acc|Xmmword, RegXMM|Unspecified|BaseIndex, RegXMM } pblendvb, 0x660f3810, SSE4_1, Modrm|NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } pblendw, 0x660f3a0e, , Modrm|||NoSuf, { Imm8|Imm8S, RegXMM|Unspecified|BaseIndex, RegXMM } -pcmpeqq, 0x660f3829, , Modrm|||NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } +pcmpeqq, 0x660f3829, , Modrm|||NoSuf|Optimize, { RegXMM|Unspecified|BaseIndex, RegXMM } pextr, 0x660f3a14 | , , RegMem||NoSuf|IgnoreSize|NoRex64, { Imm8, RegXMM, Reg32|Reg64 } pextr, 0x660f3a14 | , , Modrm||NoSuf, { Imm8, RegXMM, |Unspecified|BaseIndex } pextrd, 0x660f3a16, , Modrm||NoSuf|IgnoreSize, { Imm8, RegXMM, Reg32|Unspecified|BaseIndex } @@ -1405,7 +1405,7 @@ rounds, 0x660f3a0a | , , Modrm|| -pcmpgtq, 0x660f3837, , Modrm|||NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } +pcmpgtq, 0x660f3837, , Modrm|||NoSuf|Optimize, { RegXMM|Unspecified|BaseIndex, RegXMM } pcmpestri, 0x660f3a61, |No64, Modrm||NoSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } pcmpestri, 0x6661, AVX|x64, Modrm|Vex|Space0F3A|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|SSE2AVX, { Imm8, Xmmword|Unspecified|BaseIndex|RegXMM, RegXMM } pcmpestri, 0x660f3a61, SSE4_2|x64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf, { Imm8, Xmmword|Unspecified|BaseIndex|RegXMM, RegXMM } @@ -1592,14 +1592,14 @@ vpblendvb, 0x664c, AVX|AVX2, Modrm|Vex|Space0F3A|VexVVVV|VexWIG|CheckOperandSize vpblendw, 0x660e, AVX|AVX2, Modrm|Vex|Space0F3A|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpcmpeq, 0x6674 | , AVX|AVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpcmpeqd, 0x6676, AVX|AVX2, Modrm|C|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpcmpeqq, 0x6629, AVX|AVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } +vpcmpeqq, 0x6629, AVX|AVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf|Optimize, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpcmpestri, 0x6661, AVX|No64, Modrm|Vex|Space0F3A|NoSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM } vpcmpestri, 0x6661, AVX|x64, Modrm|Vex|Space0F3A|IgnoreSize|No_bSuf|No_wSuf|No_sSuf, { Imm8, Xmmword|Unspecified|BaseIndex|RegXMM, RegXMM } vpcmpestrm, 0x6660, AVX|No64, Modrm|Vex|Space0F3A|NoSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM } vpcmpestrm, 0x6660, AVX|x64, Modrm|Vex|Space0F3A|IgnoreSize|No_bSuf|No_wSuf|No_sSuf, { Imm8, Xmmword|Unspecified|BaseIndex|RegXMM, RegXMM } -vpcmpgt, 0x6664 | , AVX|AVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpcmpgtd, 0x6666, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpcmpgtq, 0x6637, AVX|AVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } +vpcmpgt, 0x6664 | , AVX|AVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf|Optimize, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } +vpcmpgtd, 0x6666, AVX|AVX2, Modrm|Vex|Space0F|VexVVVV|VexWIG|CheckOperandSize|NoSuf|Optimize, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } +vpcmpgtq, 0x6637, AVX|AVX2, Modrm|Vex|Space0F38|VexVVVV|VexWIG|CheckOperandSize|NoSuf|Optimize, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpcmpistri, 0x6663, AVX, Modrm|Vex|Space0F3A|VexWIG|NoSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM } vpcmpistrm, 0x6662, AVX, Modrm|Vex|Space0F3A|VexWIG|NoSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM } vperm2f128, 0x6606, AVX, Modrm|Vex256|Space0F3A|VexVVVV|VexW0|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } @@ -1734,7 +1734,7 @@ vbroadcastsd, 0x6619, AVX2, Modrm|Vex=2|Space0F38|VexW=1|NoSuf, { RegXMM, RegYMM vbroadcastss, 0x6618, AVX2, Modrm|Vex|Space0F38|VexW=1|NoSuf, { RegXMM, RegXMM|RegYMM } vpblendd, 0x6602, AVX2, Modrm|Vex|Space0F3A|VexVVVV|VexW0|CheckOperandSize|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpbroadcast, 0x6678 | , AVX2, Modrm|Vex|Space0F38|VexW0|NoSuf, { |Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM } -vpbroadcast, 0x6658 | , AVX2, Modrm|Vex|Space0F38|VexW0|NoSuf, { |Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM } +vpbroadcast, 0x6658 | , AVX2, Modrm|Vex|Space0F38|VexW0|NoSuf|Optimize, { |Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM } vperm2i128, 0x6646, AVX2, Modrm|Vex=2|Space0F3A|VexVVVV|VexW0|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } vpermd, 0x6636, AVX2, Modrm|Vex256|Space0F38|VexVVVV|VexW0|NoSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } vpermpd, 0x6601, AVX2, Modrm|Vex=2|Space0F3A|VexW1|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegYMM, RegYMM } @@ -2043,6 +2043,28 @@ sha256rnds2, 0xf38cb, SHA, Modrm|NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } sha256msg1, 0xf38cc, SHA, Modrm|NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } sha256msg2, 0xf38cd, SHA, Modrm|NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } +// SHA512 instructions. + +vsha512rnds2, 0xf2cb, SHA512, Modrm|Vex256|Space0F38|VexVVVV|VexW0|NoSuf, { RegXMM, RegYMM, RegYMM } +vsha512msg1, 0xf2cc, SHA512, Modrm|Vex256|Space0F38|VexW0|NoSuf, { RegXMM, RegYMM } +vsha512msg2, 0xf2cd, SHA512, Modrm|Vex256|Space0F38|VexW0|NoSuf, { RegYMM, RegYMM } + +// SHA512 instructions end. + +// SM3 instructions. +vsm3rnds2, 0x66de, SM3, Modrm|Space0F3A|Vex128|VexVVVV|VexW0|NoSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } +vsm3msg1, 0xda, SM3, Modrm|Space0F38|Vex128|VexVVVV|VexW0|NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } +vsm3msg2, 0x66da, SM3, Modrm|Space0F38|Vex128|VexVVVV|VexW0|NoSuf, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } + +// SM3 instructions end. + +// SM4 instructions. + +vsm4key4, 0xf3da, SM4, Modrm|Space0F38|Vex|VexVVVV|VexW0|CheckOperandSize|NoSuf, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM } +vsm4rnds4, 0xf2da, SM4, Modrm|Space0F38|Vex|VexVVVV|VexW0|CheckOperandSize|NoSuf, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM } + +// SM4 instructions end. + // VPCLMULQDQ instructions vpclmulqdq, 0x6644, VPCLMULQDQ, Modrm|Vex256|Space0F3A|VexWIG|VexVVVV|NoSuf, { Imm8|Imm8S, Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } @@ -2910,6 +2932,17 @@ vpdpbsuds, 0xf351, AVX_VNNI_INT8, Modrm|Vex|Space0F38|VexVVVV|VexW0|CheckOperand // AVX-VNNI-INT8 instructions end. +// AVX-VNNI-INT16 instructions. + +vpdpwuud, 0xd2, AVX_VNNI_INT16, Modrm|Vex|Space0F38|VexVVVV|VexW0|CheckOperandSize|NoSuf, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM } +vpdpwuuds, 0xd3, AVX_VNNI_INT16, Modrm|Vex|Space0F38|VexVVVV|VexW0|CheckOperandSize|NoSuf, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM } +vpdpwusd, 0x66d2, AVX_VNNI_INT16, Modrm|Vex|Space0F38|VexVVVV|VexW0|CheckOperandSize|NoSuf, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM } +vpdpwusds, 0x66d3, AVX_VNNI_INT16, Modrm|Vex|Space0F38|VexVVVV|VexW0|CheckOperandSize|NoSuf, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM } +vpdpwsud, 0xf3d2, AVX_VNNI_INT16, Modrm|Vex|Space0F38|VexVVVV|VexW0|CheckOperandSize|NoSuf, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM } +vpdpwsuds, 0xf3d3, AVX_VNNI_INT16, Modrm|Vex|Space0F38|VexVVVV|VexW0|CheckOperandSize|NoSuf, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM } + +// AVX-VNNI-INT16 instructions end. + // AVX512_BITALG instructions vpopcnt, 0x6654, AVX512_BITALG, Modrm|Masking|Space0F38||Disp8ShiftVL|CheckOperandSize|NoSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } @@ -3033,6 +3066,12 @@ pconfig, 0x0f01c5, PCONFIG, NoSuf, {} // PCONFIG instruction end. +// PBNDKB instruction. + +pbndkb, 0x0f01c7, PBNDKB|x64, NoSuf, {} + +// PBNDKB instruction end. + // WAITPKG instructions. umonitor, 0xf30fae/6, WAITPKG, Modrm|AddrPrefixOpReg|NoSuf, { Reg16|Reg32|Reg64 } diff --git a/opcodes/i386-tbl.h b/opcodes/i386-tbl.h index cecb084a335..35af836b251 100644 --- a/opcodes/i386-tbl.h +++ b/opcodes/i386-tbl.h @@ -33,7 +33,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, @@ -47,7 +48,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 1, 0, 1, 0, @@ -61,7 +63,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -75,7 +78,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, @@ -89,7 +93,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -103,7 +108,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, @@ -117,7 +123,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, @@ -131,7 +138,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, @@ -145,7 +153,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -159,7 +168,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, @@ -173,7 +183,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, @@ -187,7 +198,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, @@ -201,7 +213,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, @@ -215,7 +228,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, @@ -229,7 +243,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 1, 0, 1, 0, @@ -243,7 +258,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, @@ -257,7 +273,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -271,7 +288,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -285,7 +303,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, @@ -299,7 +318,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, 1, 0, @@ -313,7 +333,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -327,7 +348,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, 1, 0, @@ -341,7 +363,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, 1, 0, @@ -355,7 +378,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, 1, 0, 0, 0, 0, @@ -369,7 +393,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, 1, 0, 0, 0, 0, @@ -383,7 +408,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -397,7 +423,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, @@ -411,7 +438,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -425,7 +453,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_push, 0xff, 1, SPACE_BASE, 6, @@ -437,7 +466,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 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, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_push, 0x6a, 1, SPACE_BASE, None, @@ -449,7 +479,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 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, 0, 0, 0 } } } }, { MN_push, 0x68, 1, SPACE_BASE, None, @@ -461,7 +492,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_push, 0x06, 1, SPACE_BASE, None, @@ -473,7 +505,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_push, 0x50, 1, SPACE_BASE, None, @@ -485,7 +518,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_push, 0xff, 1, SPACE_BASE, 6, @@ -497,7 +531,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_push, 0x6a, 1, SPACE_BASE, None, @@ -509,7 +544,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 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 } } } }, { MN_push, 0x68, 1, SPACE_BASE, None, @@ -521,7 +557,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_push, 0xa0, 1, SPACE_0F, None, @@ -533,7 +570,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_pusha, 0x60, 0, SPACE_BASE, None, @@ -545,7 +583,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_pop, 0x58, 1, SPACE_BASE, None, @@ -557,7 +596,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_pop, 0x8f, 1, SPACE_BASE, 0, @@ -569,7 +609,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 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, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_pop, 0x07, 1, SPACE_BASE, None, @@ -581,7 +622,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_pop, 0x58, 1, SPACE_BASE, None, @@ -593,7 +635,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_pop, 0x8f, 1, SPACE_BASE, 0, @@ -605,7 +648,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_pop, 0xa1, 1, SPACE_0F, None, @@ -617,7 +661,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_popa, 0x61, 0, SPACE_BASE, None, @@ -629,7 +674,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xchg, 0x90, 2, SPACE_BASE, None, @@ -641,7 +687,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, @@ -655,7 +702,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -669,7 +717,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 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, 1, 1, 1, 0, 0, 0, @@ -683,7 +732,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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, 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, 1, 1, 1, 0, 0, 0, @@ -697,7 +747,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_in, 0xec, 1, SPACE_BASE, None, @@ -709,7 +760,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_out, 0xe6, 2, SPACE_BASE, None, @@ -721,7 +773,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -735,7 +788,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, @@ -749,7 +803,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_out, 0xee, 1, SPACE_BASE, None, @@ -761,7 +816,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_lea, 0x8d, 2, SPACE_BASE, None, @@ -773,7 +829,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -787,7 +844,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 0, 0, @@ -801,7 +859,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 0, 0, @@ -815,7 +874,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 0, 0, @@ -829,7 +889,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -843,7 +904,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 0, 0, @@ -857,7 +919,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -871,7 +934,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 0, 0, @@ -885,7 +949,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -899,7 +964,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_cld, 0xfc, 0, SPACE_BASE, None, @@ -911,7 +977,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_cli, 0xfa, 0, SPACE_BASE, None, @@ -923,7 +990,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_clts, 0x06, 0, SPACE_0F, None, @@ -935,7 +1003,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_cmc, 0xf5, 0, SPACE_BASE, None, @@ -947,7 +1016,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_lahf, 0x9f, 0, SPACE_BASE, None, @@ -959,7 +1029,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_lahf, 0x9f, 0, SPACE_BASE, None, @@ -971,7 +1042,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_sahf, 0x9e, 0, SPACE_BASE, None, @@ -983,7 +1055,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_sahf, 0x9e, 0, SPACE_BASE, None, @@ -995,7 +1068,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_pushf, 0x9c, 0, SPACE_BASE, None, @@ -1007,7 +1081,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_pushf, 0x9c, 0, SPACE_BASE, None, @@ -1019,7 +1094,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_popf, 0x9d, 0, SPACE_BASE, None, @@ -1031,7 +1107,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_popf, 0x9d, 0, SPACE_BASE, None, @@ -1043,7 +1120,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_stc, 0xf9, 0, SPACE_BASE, None, @@ -1055,7 +1133,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_std, 0xfd, 0, SPACE_BASE, None, @@ -1067,7 +1146,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_sti, 0xfb, 0, SPACE_BASE, None, @@ -1079,7 +1159,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_add, 0x00, 2, SPACE_BASE, None, @@ -1091,7 +1172,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -1105,7 +1187,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, @@ -1119,7 +1202,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, @@ -1133,7 +1217,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -1147,7 +1232,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_inc, 0xfe, 1, SPACE_BASE, 0, @@ -1159,7 +1245,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_sub, 0x28, 2, SPACE_BASE, None, @@ -1171,7 +1258,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -1185,7 +1273,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, @@ -1199,7 +1288,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, @@ -1213,7 +1303,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -1227,7 +1318,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_dec, 0xfe, 1, SPACE_BASE, 1, @@ -1239,7 +1331,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_sbb, 0x18, 2, SPACE_BASE, None, @@ -1251,7 +1344,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -1265,7 +1359,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, @@ -1279,7 +1374,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, @@ -1293,7 +1389,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -1307,7 +1404,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -1321,7 +1419,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, @@ -1335,7 +1434,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, @@ -1349,7 +1449,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -1363,7 +1464,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -1377,7 +1479,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, @@ -1391,7 +1494,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -1405,7 +1509,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -1419,7 +1524,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, @@ -1433,7 +1539,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, @@ -1447,7 +1554,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -1461,7 +1569,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -1475,7 +1584,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, @@ -1489,7 +1599,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, @@ -1503,7 +1614,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -1517,7 +1629,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -1531,7 +1644,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, @@ -1545,7 +1659,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, @@ -1559,7 +1674,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -1573,7 +1689,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_adc, 0x10, 2, SPACE_BASE, None, @@ -1585,7 +1702,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -1599,7 +1717,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, @@ -1613,7 +1732,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, @@ -1627,7 +1747,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -1641,7 +1762,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_not, 0xf6, 1, SPACE_BASE, 2, @@ -1653,7 +1775,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_aaa, 0x37, 0, SPACE_BASE, None, @@ -1665,7 +1788,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_aas, 0x3f, 0, SPACE_BASE, None, @@ -1677,7 +1801,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_daa, 0x27, 0, SPACE_BASE, None, @@ -1689,7 +1814,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_das, 0x2f, 0, SPACE_BASE, None, @@ -1701,7 +1827,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_aad, 0xd50a, 0, SPACE_BASE, None, @@ -1713,7 +1840,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_aad, 0xd5, 1, SPACE_BASE, None, @@ -1725,7 +1853,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_aam, 0xd40a, 0, SPACE_BASE, None, @@ -1737,7 +1866,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_aam, 0xd4, 1, SPACE_BASE, None, @@ -1749,7 +1879,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_cbw, 0x98, 0, SPACE_BASE, None, @@ -1761,7 +1892,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_cwde, 0x98, 0, SPACE_BASE, None, @@ -1773,7 +1905,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_cdqe, 0x98, 0, SPACE_BASE, None, @@ -1785,7 +1918,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_cwd, 0x99, 0, SPACE_BASE, None, @@ -1797,7 +1931,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_cdq, 0x99, 0, SPACE_BASE, None, @@ -1809,7 +1944,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_cqo, 0x99, 0, SPACE_BASE, None, @@ -1821,7 +1957,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_cbtw, 0x98, 0, SPACE_BASE, None, @@ -1833,7 +1970,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_cwtl, 0x98, 0, SPACE_BASE, None, @@ -1845,7 +1983,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_cltq, 0x98, 0, SPACE_BASE, None, @@ -1857,7 +1996,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_cwtd, 0x99, 0, SPACE_BASE, None, @@ -1869,7 +2009,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_cltd, 0x99, 0, SPACE_BASE, None, @@ -1881,7 +2022,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_cqto, 0x99, 0, SPACE_BASE, None, @@ -1893,7 +2035,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_mul, 0xf6, 1, SPACE_BASE, 4, @@ -1905,7 +2048,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_imul, 0xf6, 1, SPACE_BASE, 5, @@ -1917,7 +2061,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_imul, 0xaf, 2, SPACE_0F, None, @@ -1929,7 +2074,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -1943,7 +2089,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, @@ -1959,7 +2106,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, @@ -1975,7 +2123,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 1, 1, 0, 1, 0, @@ -1989,7 +2138,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, @@ -2003,7 +2153,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_div, 0xf6, 2, SPACE_BASE, 6, @@ -2015,7 +2166,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 1, 0, 1, 0, @@ -2029,7 +2181,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_idiv, 0xf6, 2, SPACE_BASE, 7, @@ -2041,7 +2194,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 1, 0, 1, 0, @@ -2055,7 +2209,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2069,7 +2224,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2083,7 +2239,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2097,7 +2254,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_ror, 0xd0, 2, SPACE_BASE, 1, @@ -2109,7 +2267,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2123,7 +2282,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2137,7 +2297,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2151,7 +2312,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_rcl, 0xd0, 2, SPACE_BASE, 2, @@ -2163,7 +2325,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2177,7 +2340,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2191,7 +2355,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2205,7 +2370,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_rcr, 0xd0, 2, SPACE_BASE, 3, @@ -2217,7 +2383,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2231,7 +2398,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2245,7 +2413,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2259,7 +2428,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_sal, 0xd0, 2, SPACE_BASE, 4, @@ -2271,7 +2441,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2285,7 +2456,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2299,7 +2471,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2313,7 +2486,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_shl, 0xd0, 2, SPACE_BASE, 4, @@ -2325,7 +2499,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2339,7 +2514,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2353,7 +2529,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2367,7 +2544,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_shr, 0xd0, 2, SPACE_BASE, 5, @@ -2379,7 +2557,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2393,7 +2572,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2407,7 +2587,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2421,7 +2602,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_sar, 0xd0, 2, SPACE_BASE, 7, @@ -2433,7 +2615,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2447,7 +2630,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2461,7 +2645,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -2475,7 +2660,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_shld, 0xa4, 3, SPACE_0F, None, @@ -2487,7 +2673,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 1, 1, 0, 1, 0, @@ -2503,7 +2690,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -2519,7 +2707,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, @@ -2533,7 +2722,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 1, 1, 0, 1, 0, @@ -2549,7 +2739,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -2565,7 +2756,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, @@ -2579,7 +2771,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_call, 0xe8, 1, SPACE_BASE, None, @@ -2591,7 +2784,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_call, 0xe8, 1, SPACE_BASE, None, @@ -2603,7 +2797,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_call, 0xff, 1, SPACE_BASE, 2, @@ -2615,7 +2810,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 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, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_call, 0xff, 1, SPACE_BASE, 2, @@ -2627,7 +2823,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_call, 0xff, 1, SPACE_BASE, 2, @@ -2639,7 +2836,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_call, 0x9a, 2, SPACE_BASE, None, @@ -2651,7 +2849,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2665,7 +2864,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_call, 0xff, 1, SPACE_BASE, 3, @@ -2677,7 +2877,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0 } } } }, { MN_lcall, 0x9a, 2, SPACE_BASE, None, @@ -2689,7 +2890,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2703,7 +2905,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_lcall, 0xff, 1, SPACE_BASE, 3, @@ -2715,7 +2918,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_jmp, 0xeb, 1, SPACE_BASE, None, @@ -2727,7 +2931,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jmp, 0xeb, 1, SPACE_BASE, None, @@ -2739,7 +2944,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_jmp, 0xff, 1, SPACE_BASE, 4, @@ -2751,7 +2957,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 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, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_jmp, 0xff, 1, SPACE_BASE, 4, @@ -2763,7 +2970,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_jmp, 0xff, 1, SPACE_BASE, 4, @@ -2775,7 +2983,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_jmp, 0xea, 2, SPACE_BASE, None, @@ -2787,7 +2996,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2801,7 +3011,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_jmp, 0xff, 1, SPACE_BASE, 5, @@ -2813,7 +3024,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0 } } } }, { MN_ljmp, 0xea, 2, SPACE_BASE, None, @@ -2825,7 +3037,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2839,7 +3052,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_ljmp, 0xff, 1, SPACE_BASE, 5, @@ -2851,7 +3065,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_ret, 0xc3, 0, SPACE_BASE, None, @@ -2863,7 +3078,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_ret, 0xc2, 1, SPACE_BASE, None, @@ -2875,7 +3091,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_ret, 0xc3, 0, SPACE_BASE, None, @@ -2887,7 +3104,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_ret, 0xc2, 1, SPACE_BASE, None, @@ -2899,7 +3117,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_ret, 0xc3, 0, SPACE_BASE, None, @@ -2911,7 +3130,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_ret, 0xc2, 1, SPACE_BASE, None, @@ -2923,7 +3143,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_lret, 0xcb, 0, SPACE_BASE, None, @@ -2935,7 +3156,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_lret, 0xca, 1, SPACE_BASE, None, @@ -2947,7 +3169,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_retf, 0xcb, 0, SPACE_BASE, None, @@ -2959,7 +3182,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_retf, 0xca, 1, SPACE_BASE, None, @@ -2971,7 +3195,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_enter, 0xc8, 2, SPACE_BASE, None, @@ -2983,7 +3208,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2997,7 +3223,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3011,7 +3238,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_leave, 0xc9, 0, SPACE_BASE, None, @@ -3023,7 +3251,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_jo, 0x70, 1, SPACE_BASE, None, @@ -3035,7 +3264,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jno, 0x71, 1, SPACE_BASE, None, @@ -3047,7 +3277,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jb, 0x72, 1, SPACE_BASE, None, @@ -3059,7 +3290,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jc, 0x72, 1, SPACE_BASE, None, @@ -3071,7 +3303,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jnae, 0x72, 1, SPACE_BASE, None, @@ -3083,7 +3316,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jnb, 0x73, 1, SPACE_BASE, None, @@ -3095,7 +3329,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jnc, 0x73, 1, SPACE_BASE, None, @@ -3107,7 +3342,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jae, 0x73, 1, SPACE_BASE, None, @@ -3119,7 +3355,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_je, 0x74, 1, SPACE_BASE, None, @@ -3131,7 +3368,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jz, 0x74, 1, SPACE_BASE, None, @@ -3143,7 +3381,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jne, 0x75, 1, SPACE_BASE, None, @@ -3155,7 +3394,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jnz, 0x75, 1, SPACE_BASE, None, @@ -3167,7 +3407,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jbe, 0x76, 1, SPACE_BASE, None, @@ -3179,7 +3420,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jna, 0x76, 1, SPACE_BASE, None, @@ -3191,7 +3433,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jnbe, 0x77, 1, SPACE_BASE, None, @@ -3203,7 +3446,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_ja, 0x77, 1, SPACE_BASE, None, @@ -3215,7 +3459,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_js, 0x78, 1, SPACE_BASE, None, @@ -3227,7 +3472,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jns, 0x79, 1, SPACE_BASE, None, @@ -3239,7 +3485,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jp, 0x7a, 1, SPACE_BASE, None, @@ -3251,7 +3498,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jpe, 0x7a, 1, SPACE_BASE, None, @@ -3263,7 +3511,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jnp, 0x7b, 1, SPACE_BASE, None, @@ -3275,7 +3524,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jpo, 0x7b, 1, SPACE_BASE, None, @@ -3287,7 +3537,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jl, 0x7c, 1, SPACE_BASE, None, @@ -3299,7 +3550,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jnge, 0x7c, 1, SPACE_BASE, None, @@ -3311,7 +3563,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jnl, 0x7d, 1, SPACE_BASE, None, @@ -3323,7 +3576,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jge, 0x7d, 1, SPACE_BASE, None, @@ -3335,7 +3589,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jle, 0x7e, 1, SPACE_BASE, None, @@ -3347,7 +3602,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jng, 0x7e, 1, SPACE_BASE, None, @@ -3359,7 +3615,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jnle, 0x7f, 1, SPACE_BASE, None, @@ -3371,7 +3628,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jg, 0x7f, 1, SPACE_BASE, None, @@ -3383,7 +3641,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jcxz, 0xe3, 1, SPACE_BASE, None, @@ -3395,7 +3654,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_jecxz, 0xe3, 1, SPACE_BASE, None, @@ -3407,7 +3667,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_jrcxz, 0xe3, 1, SPACE_BASE, None, @@ -3419,7 +3680,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_loop, 0xe2, 1, SPACE_BASE, None, @@ -3431,7 +3693,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_loop, 0xe2, 1, SPACE_BASE, None, @@ -3443,7 +3706,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_loopz, 0xe1, 1, SPACE_BASE, None, @@ -3455,7 +3719,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_loopz, 0xe1, 1, SPACE_BASE, None, @@ -3467,7 +3732,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_loope, 0xe1, 1, SPACE_BASE, None, @@ -3479,7 +3745,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_loope, 0xe1, 1, SPACE_BASE, None, @@ -3491,7 +3758,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_loopnz, 0xe0, 1, SPACE_BASE, None, @@ -3503,7 +3771,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_loopnz, 0xe0, 1, SPACE_BASE, None, @@ -3515,7 +3784,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_loopne, 0xe0, 1, SPACE_BASE, None, @@ -3527,7 +3797,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_loopne, 0xe0, 1, SPACE_BASE, None, @@ -3539,7 +3810,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_seto, 0x90, 1, SPACE_0F, 0, @@ -3551,7 +3823,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setno, 0x91, 1, SPACE_0F, 0, @@ -3563,7 +3836,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setb, 0x92, 1, SPACE_0F, 0, @@ -3575,7 +3849,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setc, 0x92, 1, SPACE_0F, 0, @@ -3587,7 +3862,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setnae, 0x92, 1, SPACE_0F, 0, @@ -3599,7 +3875,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setnb, 0x93, 1, SPACE_0F, 0, @@ -3611,7 +3888,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setnc, 0x93, 1, SPACE_0F, 0, @@ -3623,7 +3901,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setae, 0x93, 1, SPACE_0F, 0, @@ -3635,7 +3914,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_sete, 0x94, 1, SPACE_0F, 0, @@ -3647,7 +3927,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setz, 0x94, 1, SPACE_0F, 0, @@ -3659,7 +3940,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setne, 0x95, 1, SPACE_0F, 0, @@ -3671,7 +3953,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setnz, 0x95, 1, SPACE_0F, 0, @@ -3683,7 +3966,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setbe, 0x96, 1, SPACE_0F, 0, @@ -3695,7 +3979,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setna, 0x96, 1, SPACE_0F, 0, @@ -3707,7 +3992,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setnbe, 0x97, 1, SPACE_0F, 0, @@ -3719,7 +4005,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_seta, 0x97, 1, SPACE_0F, 0, @@ -3731,7 +4018,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_sets, 0x98, 1, SPACE_0F, 0, @@ -3743,7 +4031,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setns, 0x99, 1, SPACE_0F, 0, @@ -3755,7 +4044,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setp, 0x9a, 1, SPACE_0F, 0, @@ -3767,7 +4057,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setpe, 0x9a, 1, SPACE_0F, 0, @@ -3779,7 +4070,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setnp, 0x9b, 1, SPACE_0F, 0, @@ -3791,7 +4083,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setpo, 0x9b, 1, SPACE_0F, 0, @@ -3803,7 +4096,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setl, 0x9c, 1, SPACE_0F, 0, @@ -3815,7 +4109,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setnge, 0x9c, 1, SPACE_0F, 0, @@ -3827,7 +4122,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setnl, 0x9d, 1, SPACE_0F, 0, @@ -3839,7 +4135,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setge, 0x9d, 1, SPACE_0F, 0, @@ -3851,7 +4148,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setle, 0x9e, 1, SPACE_0F, 0, @@ -3863,7 +4161,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setng, 0x9e, 1, SPACE_0F, 0, @@ -3875,7 +4174,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setnle, 0x9f, 1, SPACE_0F, 0, @@ -3887,7 +4187,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_setg, 0x9f, 1, SPACE_0F, 0, @@ -3899,7 +4200,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_cmps, 0xa6, 0, SPACE_BASE, None, @@ -3911,7 +4213,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_cmps, 0xa6, 2, SPACE_BASE, None, @@ -3923,7 +4226,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 1, 1, 1, 1, 0, 1, 0, @@ -3937,7 +4241,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_scmp, 0xa6, 2, SPACE_BASE, None, @@ -3949,7 +4254,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 1, 1, 1, 1, 0, 1, 0, @@ -3963,7 +4269,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_ins, 0x6c, 2, SPACE_BASE, None, @@ -3975,7 +4282,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, @@ -3989,7 +4297,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_outs, 0x6e, 2, SPACE_BASE, None, @@ -4001,7 +4310,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, @@ -4015,7 +4325,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_lods, 0xac, 1, SPACE_BASE, None, @@ -4027,7 +4338,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_lods, 0xac, 2, SPACE_BASE, None, @@ -4039,7 +4351,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, @@ -4053,7 +4366,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_slod, 0xac, 1, SPACE_BASE, None, @@ -4065,7 +4379,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_slod, 0xac, 2, SPACE_BASE, None, @@ -4077,7 +4392,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, @@ -4091,7 +4407,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_movs, 0xa4, 2, SPACE_BASE, None, @@ -4103,7 +4420,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 1, 1, 1, 1, 0, 1, 0, @@ -4117,7 +4435,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_smov, 0xa4, 2, SPACE_BASE, None, @@ -4129,7 +4448,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 1, 1, 1, 1, 0, 1, 0, @@ -4143,7 +4463,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_scas, 0xae, 1, SPACE_BASE, None, @@ -4155,7 +4476,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_scas, 0xae, 2, SPACE_BASE, None, @@ -4167,7 +4489,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 1, 0, 1, 0, @@ -4181,7 +4504,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_ssca, 0xae, 1, SPACE_BASE, None, @@ -4193,7 +4517,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_ssca, 0xae, 2, SPACE_BASE, None, @@ -4205,7 +4530,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 1, 0, 1, 0, @@ -4219,7 +4545,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_stos, 0xaa, 1, SPACE_BASE, None, @@ -4231,7 +4558,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_stos, 0xaa, 2, SPACE_BASE, None, @@ -4243,7 +4571,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -4257,7 +4586,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_ssto, 0xaa, 1, SPACE_BASE, None, @@ -4269,7 +4599,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_ssto, 0xaa, 2, SPACE_BASE, None, @@ -4281,7 +4612,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -4295,7 +4627,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xlat, 0xd7, 1, SPACE_BASE, None, @@ -4307,7 +4640,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_bsf, 0xbc, 2, SPACE_0F, None, @@ -4319,7 +4653,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -4333,7 +4668,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -4347,7 +4683,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, @@ -4361,7 +4698,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 1, 1, 0, 1, 0, @@ -4375,7 +4713,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, @@ -4389,7 +4728,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 1, 1, 0, 1, 0, @@ -4403,7 +4743,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, @@ -4417,7 +4758,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 1, 1, 0, 1, 0, @@ -4431,7 +4773,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, @@ -4445,7 +4788,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 1, 1, 0, 1, 0, @@ -4459,7 +4803,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_int1, 0xf1, 0, SPACE_BASE, None, @@ -4471,7 +4816,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_int3, 0xcc, 0, SPACE_BASE, None, @@ -4483,7 +4829,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_into, 0xce, 0, SPACE_BASE, None, @@ -4495,7 +4842,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_iret, 0xcf, 0, SPACE_BASE, None, @@ -4507,7 +4855,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rsm, 0xaa, 0, SPACE_0F, None, @@ -4519,7 +4868,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_bound, 0x62, 2, SPACE_BASE, None, @@ -4531,7 +4881,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, @@ -4545,7 +4896,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_nop, 0x1f, 1, SPACE_0F, 0, @@ -4557,7 +4909,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_nop, 0x90, 0, SPACE_BASE, None, @@ -4569,7 +4922,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_arpl, 0x63, 2, SPACE_BASE, None, @@ -4581,7 +4935,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 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, 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, 1, 1, 0, 0, 0, @@ -4595,7 +4950,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, @@ -4609,7 +4965,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, @@ -4623,7 +4980,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -4637,7 +4995,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_lgdt, 0x01, 1, SPACE_0F, 2, @@ -4649,7 +5008,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 } } } }, { MN_lidt, 0x01, 1, SPACE_0F, 3, @@ -4661,7 +5021,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_lidt, 0x01, 1, SPACE_0F, 3, @@ -4673,7 +5034,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 } } } }, { MN_lldt, 0x00, 1, SPACE_0F, 2, @@ -4685,7 +5047,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_lldt, 0x00, 1, SPACE_0F, 2, @@ -4697,7 +5060,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_lmsw, 0x01, 1, SPACE_0F, 6, @@ -4709,7 +5073,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_lsl, 0x03, 2, SPACE_0F, None, @@ -4721,7 +5086,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, @@ -4735,7 +5101,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -4749,7 +5116,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_ltr, 0x00, 1, SPACE_0F, 3, @@ -4761,7 +5129,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_sgdt, 0x01, 1, SPACE_0F, 0, @@ -4773,7 +5142,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_sgdt, 0x01, 1, SPACE_0F, 0, @@ -4785,7 +5155,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 } } } }, { MN_sidt, 0x01, 1, SPACE_0F, 1, @@ -4797,7 +5168,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_sidt, 0x01, 1, SPACE_0F, 1, @@ -4809,7 +5181,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 } } } }, { MN_sldt, 0x00, 1, SPACE_0F, 0, @@ -4821,7 +5194,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_sldt, 0x00, 1, SPACE_0F, 0, @@ -4833,7 +5207,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_smsw, 0x01, 1, SPACE_0F, 4, @@ -4845,7 +5220,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_smsw, 0x01, 1, SPACE_0F, 4, @@ -4857,7 +5233,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_str, 0x00, 1, SPACE_0F, 1, @@ -4869,7 +5246,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_str, 0x00, 1, SPACE_0F, 1, @@ -4881,7 +5259,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_verr, 0x00, 1, SPACE_0F, 4, @@ -4893,7 +5272,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_verr, 0x00, 1, SPACE_0F, 4, @@ -4905,7 +5285,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_verw, 0x00, 1, SPACE_0F, 5, @@ -4917,7 +5298,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_verw, 0x00, 1, SPACE_0F, 5, @@ -4929,7 +5311,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fld, 0xd9, 1, SPACE_BASE, 0, @@ -4941,7 +5324,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fld, 0xd9, 1, SPACE_BASE, 0, @@ -4953,7 +5337,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fld, 0xd9, 1, SPACE_BASE, 0, @@ -4965,7 +5350,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fld, 0xdb, 1, SPACE_BASE, 5, @@ -4977,7 +5363,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 } } } }, { MN_fild, 0xdf, 1, SPACE_BASE, 0, @@ -4989,7 +5376,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fild, 0xdf, 1, SPACE_BASE, 5, @@ -5001,7 +5389,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fildll, 0xdf, 1, SPACE_BASE, 5, @@ -5013,7 +5402,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fldt, 0xdb, 1, SPACE_BASE, 5, @@ -5025,7 +5415,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fbld, 0xdf, 1, SPACE_BASE, 4, @@ -5037,7 +5428,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 } } } }, { MN_fst, 0xdd, 1, SPACE_BASE, 2, @@ -5049,7 +5441,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fst, 0xd9, 1, SPACE_BASE, 2, @@ -5061,7 +5454,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fst, 0xdd, 1, SPACE_BASE, 2, @@ -5073,7 +5467,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fist, 0xdf, 1, SPACE_BASE, 2, @@ -5085,7 +5480,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fstp, 0xdd, 1, SPACE_BASE, 3, @@ -5097,7 +5493,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fstp, 0xd9, 1, SPACE_BASE, 3, @@ -5109,7 +5506,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fstp, 0xdd, 1, SPACE_BASE, 3, @@ -5121,7 +5519,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fstp, 0xdb, 1, SPACE_BASE, 7, @@ -5133,7 +5532,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 } } } }, { MN_fistp, 0xdf, 1, SPACE_BASE, 3, @@ -5145,7 +5545,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fistp, 0xdf, 1, SPACE_BASE, 7, @@ -5157,7 +5558,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fistpll, 0xdf, 1, SPACE_BASE, 7, @@ -5169,7 +5571,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fstpt, 0xdb, 1, SPACE_BASE, 7, @@ -5181,7 +5584,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fbstp, 0xdf, 1, SPACE_BASE, 6, @@ -5193,7 +5597,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 } } } }, { MN_fxch, 0xd9, 1, SPACE_BASE, 1, @@ -5205,7 +5610,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fxch, 0xd9c9, 0, SPACE_BASE, None, @@ -5217,7 +5623,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fcom, 0xd8, 1, SPACE_BASE, 2, @@ -5229,7 +5636,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fcom, 0xd8d1, 0, SPACE_BASE, None, @@ -5241,7 +5649,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fcom, 0xd8, 1, SPACE_BASE, 2, @@ -5253,7 +5662,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fcom, 0xd8, 1, SPACE_BASE, 2, @@ -5265,7 +5675,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_ficom, 0xde, 1, SPACE_BASE, 2, @@ -5277,7 +5688,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fcomp, 0xd8, 1, SPACE_BASE, 3, @@ -5289,7 +5701,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fcomp, 0xd8d9, 0, SPACE_BASE, None, @@ -5301,7 +5714,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fcomp, 0xd8, 1, SPACE_BASE, 3, @@ -5313,7 +5727,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fcomp, 0xd8, 1, SPACE_BASE, 3, @@ -5325,7 +5740,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_ficomp, 0xde, 1, SPACE_BASE, 3, @@ -5337,7 +5753,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fcompp, 0xded9, 0, SPACE_BASE, None, @@ -5349,7 +5766,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fucom, 0xdd, 1, SPACE_BASE, 4, @@ -5361,7 +5779,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fucom, 0xdde1, 0, SPACE_BASE, None, @@ -5373,7 +5792,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fucomp, 0xdd, 1, SPACE_BASE, 5, @@ -5385,7 +5805,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fucomp, 0xdde9, 0, SPACE_BASE, None, @@ -5397,7 +5818,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fucompp, 0xdae9, 0, SPACE_BASE, None, @@ -5409,7 +5831,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_ftst, 0xd9e4, 0, SPACE_BASE, None, @@ -5421,7 +5844,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fxam, 0xd9e5, 0, SPACE_BASE, None, @@ -5433,7 +5857,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fld1, 0xd9e8, 0, SPACE_BASE, None, @@ -5445,7 +5870,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fldl2t, 0xd9e9, 0, SPACE_BASE, None, @@ -5457,7 +5883,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fldl2e, 0xd9ea, 0, SPACE_BASE, None, @@ -5469,7 +5896,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fldpi, 0xd9eb, 0, SPACE_BASE, None, @@ -5481,7 +5909,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fldlg2, 0xd9ec, 0, SPACE_BASE, None, @@ -5493,7 +5922,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fldln2, 0xd9ed, 0, SPACE_BASE, None, @@ -5505,7 +5935,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fldz, 0xd9ee, 0, SPACE_BASE, None, @@ -5517,7 +5948,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fadd, 0xd8, 2, SPACE_BASE, 0, @@ -5529,7 +5961,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -5543,7 +5976,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fadd, 0xdec1, 0, SPACE_BASE, None, @@ -5555,7 +5989,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fadd, 0xd8, 1, SPACE_BASE, 0, @@ -5567,7 +6002,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fiadd, 0xde, 1, SPACE_BASE, 0, @@ -5579,7 +6015,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_faddp, 0xde, 2, SPACE_BASE, 0, @@ -5591,7 +6028,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 1, 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, 1, @@ -5605,7 +6043,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_faddp, 0xdec1, 0, SPACE_BASE, None, @@ -5617,7 +6056,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fsub, 0xd8, 1, SPACE_BASE, 4, @@ -5629,7 +6069,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fsub, 0xd8, 2, SPACE_BASE, 4, @@ -5641,7 +6082,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -5655,7 +6097,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fsub, 0xdee9, 0, SPACE_BASE, None, @@ -5667,7 +6110,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fsub, 0xd8, 1, SPACE_BASE, 4, @@ -5679,7 +6123,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fisub, 0xde, 1, SPACE_BASE, 4, @@ -5691,7 +6136,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fsubp, 0xde, 2, SPACE_BASE, 4, @@ -5703,7 +6149,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 1, 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, 1, @@ -5717,7 +6164,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fsubp, 0xdee1, 0, SPACE_BASE, None, @@ -5729,7 +6177,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fsubp, 0xde, 2, SPACE_BASE, 5, @@ -5741,7 +6190,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 1, 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, 1, @@ -5755,7 +6205,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fsubp, 0xdee9, 0, SPACE_BASE, None, @@ -5767,7 +6218,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fsubr, 0xd8, 1, SPACE_BASE, 5, @@ -5779,7 +6231,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fsubr, 0xd8, 2, SPACE_BASE, 5, @@ -5791,7 +6244,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -5805,7 +6259,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fsubr, 0xdee1, 0, SPACE_BASE, None, @@ -5817,7 +6272,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fsubr, 0xd8, 1, SPACE_BASE, 5, @@ -5829,7 +6285,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fisubr, 0xde, 1, SPACE_BASE, 5, @@ -5841,7 +6298,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fsubrp, 0xde, 2, SPACE_BASE, 5, @@ -5853,7 +6311,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 1, 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, 1, @@ -5867,7 +6326,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fsubrp, 0xdee9, 0, SPACE_BASE, None, @@ -5879,7 +6339,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fsubrp, 0xde, 2, SPACE_BASE, 4, @@ -5891,7 +6352,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 1, 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, 1, @@ -5905,7 +6367,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fsubrp, 0xdee1, 0, SPACE_BASE, None, @@ -5917,7 +6380,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fmul, 0xd8, 2, SPACE_BASE, 1, @@ -5929,7 +6393,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -5943,7 +6408,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fmul, 0xdec9, 0, SPACE_BASE, None, @@ -5955,7 +6421,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fmul, 0xd8, 1, SPACE_BASE, 1, @@ -5967,7 +6434,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fimul, 0xde, 1, SPACE_BASE, 1, @@ -5979,7 +6447,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fmulp, 0xde, 2, SPACE_BASE, 1, @@ -5991,7 +6460,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 1, 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, 1, @@ -6005,7 +6475,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fmulp, 0xdec9, 0, SPACE_BASE, None, @@ -6017,7 +6488,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fdiv, 0xd8, 1, SPACE_BASE, 6, @@ -6029,7 +6501,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fdiv, 0xd8, 2, SPACE_BASE, 6, @@ -6041,7 +6514,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -6055,7 +6529,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fdiv, 0xdef9, 0, SPACE_BASE, None, @@ -6067,7 +6542,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fdiv, 0xd8, 1, SPACE_BASE, 6, @@ -6079,7 +6555,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fidiv, 0xde, 1, SPACE_BASE, 6, @@ -6091,7 +6568,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fdivp, 0xde, 2, SPACE_BASE, 6, @@ -6103,7 +6581,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 1, 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, 1, @@ -6117,7 +6596,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fdivp, 0xdef1, 0, SPACE_BASE, None, @@ -6129,7 +6609,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fdivp, 0xde, 2, SPACE_BASE, 7, @@ -6141,7 +6622,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 1, 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, 1, @@ -6155,7 +6637,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fdivp, 0xdef9, 0, SPACE_BASE, None, @@ -6167,7 +6650,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fdivr, 0xd8, 1, SPACE_BASE, 7, @@ -6179,7 +6663,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fdivr, 0xd8, 2, SPACE_BASE, 7, @@ -6191,7 +6676,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -6205,7 +6691,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fdivr, 0xdef1, 0, SPACE_BASE, None, @@ -6217,7 +6704,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fdivr, 0xd8, 1, SPACE_BASE, 7, @@ -6229,7 +6717,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fidivr, 0xde, 1, SPACE_BASE, 7, @@ -6241,7 +6730,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fdivrp, 0xde, 2, SPACE_BASE, 7, @@ -6253,7 +6743,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 1, 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, 1, @@ -6267,7 +6758,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fdivrp, 0xdef9, 0, SPACE_BASE, None, @@ -6279,7 +6771,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fdivrp, 0xde, 2, SPACE_BASE, 6, @@ -6291,7 +6784,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 1, 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, 1, @@ -6305,7 +6799,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fdivrp, 0xdef1, 0, SPACE_BASE, None, @@ -6317,7 +6812,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_f2xm1, 0xd9f0, 0, SPACE_BASE, None, @@ -6329,7 +6825,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fyl2x, 0xd9f1, 0, SPACE_BASE, None, @@ -6341,7 +6838,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fptan, 0xd9f2, 0, SPACE_BASE, None, @@ -6353,7 +6851,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fpatan, 0xd9f3, 0, SPACE_BASE, None, @@ -6365,7 +6864,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fxtract, 0xd9f4, 0, SPACE_BASE, None, @@ -6377,7 +6877,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fprem1, 0xd9f5, 0, SPACE_BASE, None, @@ -6389,7 +6890,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fdecstp, 0xd9f6, 0, SPACE_BASE, None, @@ -6401,7 +6903,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fincstp, 0xd9f7, 0, SPACE_BASE, None, @@ -6413,7 +6916,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fprem, 0xd9f8, 0, SPACE_BASE, None, @@ -6425,7 +6929,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fyl2xp1, 0xd9f9, 0, SPACE_BASE, None, @@ -6437,7 +6942,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fsqrt, 0xd9fa, 0, SPACE_BASE, None, @@ -6449,7 +6955,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fsincos, 0xd9fb, 0, SPACE_BASE, None, @@ -6461,7 +6968,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_frndint, 0xd9fc, 0, SPACE_BASE, None, @@ -6473,7 +6981,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fscale, 0xd9fd, 0, SPACE_BASE, None, @@ -6485,7 +6994,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fsin, 0xd9fe, 0, SPACE_BASE, None, @@ -6497,7 +7007,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fcos, 0xd9ff, 0, SPACE_BASE, None, @@ -6509,7 +7020,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fchs, 0xd9e0, 0, SPACE_BASE, None, @@ -6521,7 +7033,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fabs, 0xd9e1, 0, SPACE_BASE, None, @@ -6533,7 +7046,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fninit, 0xdbe3, 0, SPACE_BASE, None, @@ -6545,7 +7059,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_finit, 0xdbe3, 0, SPACE_BASE, None, @@ -6557,7 +7072,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fldcw, 0xd9, 1, SPACE_BASE, 5, @@ -6569,7 +7085,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fnstcw, 0xd9, 1, SPACE_BASE, 7, @@ -6581,7 +7098,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fstcw, 0xd9, 1, SPACE_BASE, 7, @@ -6593,7 +7111,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fnstsw, 0xdfe0, 1, SPACE_BASE, None, @@ -6605,7 +7124,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_fnstsw, 0xdd, 1, SPACE_BASE, 7, @@ -6617,7 +7137,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fnstsw, 0xdfe0, 0, SPACE_BASE, None, @@ -6629,7 +7150,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fstsw, 0xdfe0, 1, SPACE_BASE, None, @@ -6641,7 +7163,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_fstsw, 0xdd, 1, SPACE_BASE, 7, @@ -6653,7 +7176,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fstsw, 0xdfe0, 0, SPACE_BASE, None, @@ -6665,7 +7189,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fnclex, 0xdbe2, 0, SPACE_BASE, None, @@ -6677,7 +7202,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fclex, 0xdbe2, 0, SPACE_BASE, None, @@ -6689,7 +7215,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fnstenv, 0xd9, 1, SPACE_BASE, 6, @@ -6701,7 +7228,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fstenv, 0xd9, 1, SPACE_BASE, 6, @@ -6713,7 +7241,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fldenv, 0xd9, 1, SPACE_BASE, 4, @@ -6725,7 +7254,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fnsave, 0xdd, 1, SPACE_BASE, 6, @@ -6737,7 +7267,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fsave, 0xdd, 1, SPACE_BASE, 6, @@ -6749,7 +7280,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_frstor, 0xdd, 1, SPACE_BASE, 4, @@ -6761,7 +7293,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fneni, 0xdbe0, 0, SPACE_BASE, None, @@ -6773,7 +7306,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_feni, 0xdbe0, 0, SPACE_BASE, None, @@ -6785,7 +7319,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fndisi, 0xdbe1, 0, SPACE_BASE, None, @@ -6797,7 +7332,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fdisi, 0xdbe1, 0, SPACE_BASE, None, @@ -6809,7 +7345,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fnsetpm, 0xdbe4, 0, SPACE_BASE, None, @@ -6821,7 +7358,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fsetpm, 0xdbe4, 0, SPACE_BASE, None, @@ -6833,7 +7371,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_frstpm, 0xdbe5, 0, SPACE_BASE, None, @@ -6845,7 +7384,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_ffree, 0xdd, 1, SPACE_BASE, 0, @@ -6857,7 +7397,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_ffreep, 0xdf, 1, SPACE_BASE, 0, @@ -6869,7 +7410,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fnop, 0xd9d0, 0, SPACE_BASE, None, @@ -6881,7 +7423,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fwait, 0x9b, 0, SPACE_BASE, None, @@ -6893,7 +7436,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_addr16, 0x67, 0, SPACE_BASE, None, @@ -6905,7 +7449,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_addr32, 0x67, 0, SPACE_BASE, None, @@ -6917,7 +7462,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_aword, 0x67, 0, SPACE_BASE, None, @@ -6929,7 +7475,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_adword, 0x67, 0, SPACE_BASE, None, @@ -6941,7 +7488,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_data16, 0x66, 0, SPACE_BASE, None, @@ -6953,7 +7501,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_data32, 0x66, 0, SPACE_BASE, None, @@ -6965,7 +7514,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_word, 0x66, 0, SPACE_BASE, None, @@ -6977,7 +7527,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_dword, 0x66, 0, SPACE_BASE, None, @@ -6989,7 +7540,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_lock, 0xf0, 0, SPACE_BASE, None, @@ -7001,7 +7553,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_wait, 0x9b, 0, SPACE_BASE, None, @@ -7013,7 +7566,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_cs, 0x2e, 0, SPACE_BASE, None, @@ -7025,7 +7579,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_ds, 0x3e, 0, SPACE_BASE, None, @@ -7037,7 +7592,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_es, 0x26, 0, SPACE_BASE, None, @@ -7049,7 +7605,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fs, 0x64, 0, SPACE_BASE, None, @@ -7061,7 +7618,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_gs, 0x65, 0, SPACE_BASE, None, @@ -7073,7 +7631,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_ss, 0x36, 0, SPACE_BASE, None, @@ -7085,7 +7644,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rep, 0xf3, 0, SPACE_BASE, None, @@ -7097,7 +7657,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_repe, 0xf3, 0, SPACE_BASE, None, @@ -7109,7 +7670,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_repz, 0xf3, 0, SPACE_BASE, None, @@ -7121,7 +7683,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_repne, 0xf2, 0, SPACE_BASE, None, @@ -7133,7 +7696,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_repnz, 0xf2, 0, SPACE_BASE, None, @@ -7145,7 +7709,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_ht, 0x3e, 0, SPACE_BASE, None, @@ -7157,7 +7722,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_hnt, 0x2e, 0, SPACE_BASE, None, @@ -7169,7 +7735,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex, 0x40, 0, SPACE_BASE, None, @@ -7181,7 +7748,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rexz, 0x41, 0, SPACE_BASE, None, @@ -7193,7 +7761,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rexy, 0x42, 0, SPACE_BASE, None, @@ -7205,7 +7774,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rexyz, 0x43, 0, SPACE_BASE, None, @@ -7217,7 +7787,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rexx, 0x44, 0, SPACE_BASE, None, @@ -7229,7 +7800,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rexxz, 0x45, 0, SPACE_BASE, None, @@ -7241,7 +7813,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rexxy, 0x46, 0, SPACE_BASE, None, @@ -7253,7 +7826,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rexxyz, 0x47, 0, SPACE_BASE, None, @@ -7265,7 +7839,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex64, 0x48, 0, SPACE_BASE, None, @@ -7277,7 +7852,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex64z, 0x49, 0, SPACE_BASE, None, @@ -7289,7 +7865,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex64y, 0x4a, 0, SPACE_BASE, None, @@ -7301,7 +7878,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex64yz, 0x4b, 0, SPACE_BASE, None, @@ -7313,7 +7891,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex64x, 0x4c, 0, SPACE_BASE, None, @@ -7325,7 +7904,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex64xz, 0x4d, 0, SPACE_BASE, None, @@ -7337,7 +7917,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex64xy, 0x4e, 0, SPACE_BASE, None, @@ -7349,7 +7930,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex64xyz, 0x4f, 0, SPACE_BASE, None, @@ -7361,7 +7943,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex_b, 0x41, 0, SPACE_BASE, None, @@ -7373,7 +7956,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex_x, 0x42, 0, SPACE_BASE, None, @@ -7385,7 +7969,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex_xb, 0x43, 0, SPACE_BASE, None, @@ -7397,7 +7982,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex_r, 0x44, 0, SPACE_BASE, None, @@ -7409,7 +7995,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex_rb, 0x45, 0, SPACE_BASE, None, @@ -7421,7 +8008,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex_rx, 0x46, 0, SPACE_BASE, None, @@ -7433,7 +8021,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex_rxb, 0x47, 0, SPACE_BASE, None, @@ -7445,7 +8034,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex_w, 0x48, 0, SPACE_BASE, None, @@ -7457,7 +8047,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex_wb, 0x49, 0, SPACE_BASE, None, @@ -7469,7 +8060,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex_wx, 0x4a, 0, SPACE_BASE, None, @@ -7481,7 +8073,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex_wxb, 0x4b, 0, SPACE_BASE, None, @@ -7493,7 +8086,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex_wr, 0x4c, 0, SPACE_BASE, None, @@ -7505,7 +8099,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex_wrb, 0x4d, 0, SPACE_BASE, None, @@ -7517,7 +8112,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex_wrx, 0x4e, 0, SPACE_BASE, None, @@ -7529,7 +8125,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rex_wrxb, 0x4f, 0, SPACE_BASE, None, @@ -7541,7 +8138,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN__disp8_, 0x00, 0, SPACE_BASE, Prefix_Disp8, @@ -7553,7 +8151,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN__disp16_, 0x00, 0, SPACE_BASE, Prefix_Disp16, @@ -7565,7 +8164,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN__disp32_, 0x00, 0, SPACE_BASE, Prefix_Disp32, @@ -7577,7 +8177,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN__load_, 0x00, 0, SPACE_BASE, Prefix_Load, @@ -7589,7 +8190,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN__store_, 0x00, 0, SPACE_BASE, Prefix_Store, @@ -7601,7 +8203,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN__vex_, 0x00, 0, SPACE_BASE, Prefix_VEX, @@ -7613,7 +8216,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN__vex2_, 0x00, 0, SPACE_BASE, Prefix_VEX, @@ -7625,7 +8229,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN__vex3_, 0x00, 0, SPACE_BASE, Prefix_VEX3, @@ -7637,7 +8242,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN__evex_, 0x00, 0, SPACE_BASE, Prefix_EVEX, @@ -7649,7 +8255,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN__rex_, 0x00, 0, SPACE_BASE, Prefix_REX, @@ -7661,7 +8268,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN__nooptimize_, 0x00, 0, SPACE_BASE, Prefix_NoOptimize, @@ -7673,7 +8281,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_bswap, 0xc8, 1, SPACE_0F, None, @@ -7685,7 +8294,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_xadd, 0xc0, 2, SPACE_0F, None, @@ -7697,7 +8307,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -7711,7 +8322,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, @@ -7725,7 +8337,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_wbinvd, 0x09, 0, SPACE_0F, None, @@ -7737,7 +8350,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_invlpg, 0x01, 1, SPACE_0F, 7, @@ -7749,7 +8363,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_cpuid, 0xa2, 0, SPACE_0F, None, @@ -7761,7 +8376,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_wrmsr, 0x30, 0, SPACE_0F, None, @@ -7773,7 +8389,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rdtsc, 0x31, 0, SPACE_0F, None, @@ -7785,7 +8402,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rdmsr, 0x32, 0, SPACE_0F, None, @@ -7797,7 +8415,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_cmpxchg8b, 0xc7, 1, SPACE_0F, 1, @@ -7809,7 +8428,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_sysenter, 0x34, 0, SPACE_0F, None, @@ -7821,7 +8441,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_sysenter, 0x34, 0, SPACE_0F, None, @@ -7833,7 +8454,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_sysexit, 0x35, 0, SPACE_0F, None, @@ -7845,7 +8467,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_sysexit, 0x35, 0, SPACE_0F, None, @@ -7857,7 +8480,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fxsave, 0xae, 1, SPACE_0F, 0, @@ -7869,7 +8493,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fxsave64, 0xae, 1, SPACE_0F, 0, @@ -7881,7 +8506,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fxrstor, 0xae, 1, SPACE_0F, 1, @@ -7893,7 +8519,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fxrstor64, 0xae, 1, SPACE_0F, 1, @@ -7905,7 +8532,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_rdpmc, 0x33, 0, SPACE_0F, None, @@ -7917,7 +8545,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_ud2, 0x0b, 0, SPACE_0F, None, @@ -7929,7 +8558,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_ud2a, 0x0b, 0, SPACE_0F, None, @@ -7941,7 +8571,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_ud1, 0xb9, 2, SPACE_0F, None, @@ -7953,7 +8584,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -7967,7 +8599,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -7981,7 +8614,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -7995,7 +8629,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8009,7 +8644,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8023,7 +8659,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8037,7 +8674,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8051,7 +8689,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8065,7 +8704,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8079,7 +8719,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8093,7 +8734,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8107,7 +8749,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8121,7 +8764,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8135,7 +8779,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8149,7 +8794,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8163,7 +8809,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8177,7 +8824,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8191,7 +8839,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8205,7 +8854,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8219,7 +8869,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8233,7 +8884,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8247,7 +8899,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8261,7 +8914,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8275,7 +8929,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8289,7 +8944,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8303,7 +8959,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8317,7 +8974,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8331,7 +8989,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8345,7 +9004,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8359,7 +9019,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8373,7 +9034,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8387,7 +9049,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8401,7 +9064,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -8415,7 +9079,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -8429,7 +9094,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -8443,7 +9109,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -8457,7 +9124,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -8471,7 +9139,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -8485,7 +9154,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -8499,7 +9169,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -8513,7 +9184,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -8527,7 +9199,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -8541,7 +9214,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -8555,7 +9229,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -8569,7 +9244,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -8583,7 +9259,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -8597,7 +9274,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fcomi, 0xdb, 1, SPACE_BASE, 6, @@ -8609,7 +9287,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fucomi, 0xdb, 2, SPACE_BASE, 5, @@ -8621,7 +9300,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -8635,7 +9315,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fucomi, 0xdb, 1, SPACE_BASE, 5, @@ -8647,7 +9328,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fcomip, 0xdf, 2, SPACE_BASE, 6, @@ -8659,7 +9341,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -8673,7 +9356,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fcomip, 0xdf, 1, SPACE_BASE, 6, @@ -8685,7 +9369,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fcompi, 0xdf, 2, SPACE_BASE, 6, @@ -8697,7 +9382,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -8711,7 +9397,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fcompi, 0xdf, 1, SPACE_BASE, 6, @@ -8723,7 +9410,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fucomip, 0xdf, 2, SPACE_BASE, 5, @@ -8735,7 +9423,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -8749,7 +9438,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fucomip, 0xdf, 1, SPACE_BASE, 5, @@ -8761,7 +9451,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_fucompi, 0xdf, 2, SPACE_BASE, 5, @@ -8773,7 +9464,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, @@ -8787,7 +9479,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_fucompi, 0xdf, 1, SPACE_BASE, 5, @@ -8799,7 +9492,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, { MN_movnti, 0xc3, 2, SPACE_0F, None, @@ -8811,7 +9505,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, @@ -8825,7 +9520,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_lfence, 0xaee8, 0, SPACE_0F, None, @@ -8837,7 +9533,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_mfence, 0xaef0, 0, SPACE_0F, None, @@ -8849,7 +9546,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_pause, 0x90, 0, SPACE_BASE, None, @@ -8861,7 +9559,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_emms, 0x77, 0, SPACE_0F, None, @@ -8873,7 +9572,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_movd, 0x6e, 2, SPACE_0F, None, @@ -8885,7 +9585,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -8899,7 +9600,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, @@ -8913,7 +9615,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -8927,7 +9630,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, @@ -8941,7 +9645,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -8955,7 +9660,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, @@ -8969,7 +9675,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -8983,7 +9690,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -8997,7 +9705,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, @@ -9011,7 +9720,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -9025,7 +9735,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -9039,7 +9750,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, @@ -9053,7 +9765,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -9067,7 +9780,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, @@ -9081,7 +9795,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9095,7 +9810,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9109,7 +9825,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -9123,7 +9840,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9137,7 +9855,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9151,7 +9870,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -9165,7 +9885,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9179,7 +9900,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9193,7 +9915,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -9207,7 +9930,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9221,7 +9945,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9235,7 +9960,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -9249,7 +9975,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9263,7 +9990,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9277,7 +10005,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -9291,7 +10020,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9305,7 +10035,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9319,7 +10050,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -9333,7 +10065,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9347,7 +10080,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9361,7 +10095,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -9375,7 +10110,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9389,7 +10125,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9403,7 +10140,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -9417,7 +10155,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9431,7 +10170,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9445,7 +10185,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -9459,7 +10200,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9473,7 +10215,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9487,7 +10230,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -9501,7 +10245,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9515,7 +10260,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9529,7 +10275,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -9543,7 +10290,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9557,7 +10305,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9571,7 +10320,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -9585,7 +10335,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9599,7 +10350,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9613,7 +10365,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -9627,7 +10380,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9641,7 +10395,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9655,7 +10410,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -9669,7 +10425,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9683,7 +10440,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9697,7 +10455,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -9711,7 +10470,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9725,7 +10485,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9739,133 +10500,143 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, 0, 0, 0, 0, 0, 0 } } } }, { MN_pcmpgtb, 0x64 | 0, 2, SPACE_0F, None, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 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, 0, 0, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } } } }, { MN_pcmpgtb, 0x64 | 0, 2, SPACE_0F, None, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 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, 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, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } } } }, { MN_pcmpgtb, 0x64 | 0, 2, SPACE_0F, None, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, 0, 0, 0, 0, 0, 0 } } } }, { MN_pcmpgtw, 0x64 | 1, 2, SPACE_0F, None, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 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, 0, 0, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } } } }, { MN_pcmpgtw, 0x64 | 1, 2, SPACE_0F, None, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 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, 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, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } } } }, { MN_pcmpgtw, 0x64 | 1, 2, SPACE_0F, None, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, 0, 0, 0, 0, 0, 0 } } } }, { MN_pcmpgtd, 0x66, 2, SPACE_0F, None, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 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, 0, 0, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } } } }, { MN_pcmpgtd, 0x66, 2, SPACE_0F, None, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 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, 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, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } } } }, { MN_pcmpgtd, 0x66, 2, SPACE_0F, None, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -9879,7 +10650,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9893,7 +10665,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9907,7 +10680,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -9921,7 +10695,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9935,7 +10710,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9949,7 +10725,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -9963,7 +10740,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9977,7 +10755,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9991,7 +10770,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -10005,7 +10785,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10019,7 +10800,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10033,7 +10815,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -10047,7 +10830,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10061,7 +10845,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10075,7 +10860,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -10089,7 +10875,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10103,7 +10890,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10117,7 +10905,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 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, @@ -10131,7 +10920,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10145,7 +10935,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10159,7 +10950,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -10173,7 +10965,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10187,7 +10980,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10201,7 +10995,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 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, @@ -10215,7 +11010,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10229,7 +11025,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10243,7 +11040,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -10257,7 +11055,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10271,7 +11070,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10285,7 +11085,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 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, @@ -10299,7 +11100,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10313,7 +11115,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10327,7 +11130,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -10341,7 +11145,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10355,7 +11160,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10369,7 +11175,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 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, @@ -10383,7 +11190,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10397,7 +11205,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10411,7 +11220,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -10425,7 +11235,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10439,7 +11250,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10453,7 +11265,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 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, @@ -10467,7 +11280,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +11295,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10495,7 +11310,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -10509,7 +11325,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10523,7 +11340,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10537,7 +11355,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 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, @@ -10551,7 +11370,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10565,7 +11385,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10579,7 +11400,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -10593,7 +11415,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10607,7 +11430,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10621,7 +11445,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 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, @@ -10635,7 +11460,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10649,7 +11475,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10663,7 +11490,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -10677,7 +11505,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10691,7 +11520,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10705,7 +11535,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 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, @@ -10719,7 +11550,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10733,7 +11565,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10747,7 +11580,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -10761,7 +11595,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10775,7 +11610,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10789,7 +11625,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -10803,7 +11640,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10817,7 +11655,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10831,7 +11670,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -10845,7 +11685,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10859,7 +11700,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10873,7 +11715,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -10887,7 +11730,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10901,7 +11745,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10915,7 +11760,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -10929,7 +11775,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10943,7 +11790,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10957,7 +11805,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -10971,7 +11820,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10985,7 +11835,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -10999,7 +11850,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -11013,7 +11865,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11027,7 +11880,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11041,7 +11895,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -11055,7 +11910,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11069,7 +11925,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11083,7 +11940,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -11097,7 +11955,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +11970,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11125,7 +11985,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -11139,7 +12000,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11153,7 +12015,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11167,7 +12030,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -11181,7 +12045,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11195,7 +12060,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11209,7 +12075,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -11223,7 +12090,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11237,7 +12105,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11251,7 +12120,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -11265,7 +12135,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11279,7 +12150,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11293,7 +12165,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -11307,7 +12180,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +12195,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11335,7 +12210,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -11349,7 +12225,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11363,7 +12240,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11377,7 +12255,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -11391,7 +12270,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -11405,7 +12285,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11419,7 +12300,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11433,7 +12315,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11447,7 +12330,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11461,7 +12345,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11475,7 +12360,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11489,7 +12375,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11503,7 +12390,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11517,7 +12405,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11531,7 +12420,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11545,7 +12435,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11559,7 +12450,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11573,7 +12465,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11587,7 +12480,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11601,7 +12495,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11615,7 +12510,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11629,7 +12525,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11643,7 +12540,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11657,7 +12555,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11671,7 +12570,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11685,7 +12585,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -11699,7 +12600,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -11713,7 +12615,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -11727,7 +12630,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -11741,7 +12645,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -11755,7 +12660,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -11769,7 +12675,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -11783,7 +12690,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -11797,7 +12705,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -11811,7 +12720,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -11825,7 +12735,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -11839,7 +12750,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -11853,7 +12765,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -11867,7 +12780,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -11881,7 +12795,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -11895,7 +12810,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -11909,7 +12825,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -11925,7 +12842,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -11941,7 +12859,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -11957,7 +12876,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -11973,7 +12893,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -11987,7 +12908,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -12001,7 +12923,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -12015,7 +12938,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -12029,7 +12953,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 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, 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, @@ -12043,7 +12968,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 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, 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, @@ -12057,7 +12983,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, @@ -12071,7 +12998,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, @@ -12085,7 +13013,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, @@ -12099,7 +13028,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, @@ -12113,7 +13043,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -12127,7 +13058,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -12141,7 +13073,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -12155,7 +13088,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -12169,7 +13103,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -12183,7 +13118,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12197,7 +13133,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12211,7 +13148,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -12225,7 +13163,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -12239,7 +13178,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_ldmxcsr, 0xae, 1, SPACE_0F, 2, @@ -12251,7 +13191,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_maskmovq, 0xf7, 2, SPACE_0F, None, @@ -12263,7 +13204,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12277,7 +13219,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12291,7 +13234,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12305,7 +13249,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -12319,7 +13264,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -12333,7 +13279,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12347,7 +13294,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12361,7 +13309,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -12375,7 +13324,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -12389,7 +13339,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12403,7 +13354,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12417,7 +13369,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -12431,7 +13384,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -12445,7 +13399,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -12459,7 +13414,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, @@ -12473,7 +13429,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -12487,7 +13444,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -12501,7 +13459,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -12515,7 +13474,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -12529,7 +13489,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, @@ -12543,7 +13504,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -12557,7 +13519,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 1, 0, 1, 0, @@ -12571,7 +13534,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 1, 0, 1, 0, @@ -12585,7 +13549,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, @@ -12599,7 +13564,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, @@ -12613,7 +13579,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -12627,7 +13594,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, @@ -12641,7 +13609,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, @@ -12655,7 +13624,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -12669,7 +13639,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -12683,7 +13654,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -12697,7 +13669,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12711,7 +13684,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12725,7 +13699,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12739,7 +13714,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12753,7 +13729,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -12767,7 +13744,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -12781,7 +13759,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12795,7 +13774,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12809,7 +13789,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -12823,7 +13804,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12837,7 +13819,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +13834,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -12865,7 +13849,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12879,7 +13864,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12893,7 +13879,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12909,7 +13896,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12925,7 +13913,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 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, @@ -12941,7 +13930,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12957,7 +13947,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12973,7 +13964,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -12989,7 +13981,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13005,7 +13998,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, @@ -13021,7 +14015,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, @@ -13037,7 +14032,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, @@ -13053,7 +14049,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, @@ -13069,7 +14066,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, @@ -13085,7 +14083,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, @@ -13101,7 +14100,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13115,7 +14115,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13129,7 +14130,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -13143,7 +14145,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13157,7 +14160,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13171,7 +14175,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -13185,7 +14190,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13199,7 +14205,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13213,7 +14220,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -13227,7 +14235,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13241,7 +14250,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13255,7 +14265,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -13269,7 +14280,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 1, 0, 1, 0, @@ -13283,7 +14295,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 1, 0, 1, 0, @@ -13297,7 +14310,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, @@ -13311,7 +14325,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13325,7 +14340,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +14355,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -13353,7 +14370,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_prefetcht0, 0x18, 1, SPACE_0F, 1, @@ -13365,7 +14383,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_prefetcht1, 0x18, 1, SPACE_0F, 2, @@ -13377,7 +14396,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_prefetcht2, 0x18, 1, SPACE_0F, 3, @@ -13389,7 +14409,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_psadbw, 0xf6, 2, SPACE_0F, None, @@ -13401,7 +14422,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -13415,7 +14437,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +14452,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13443,7 +14467,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -13459,7 +14484,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13473,7 +14499,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13487,7 +14514,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -13501,7 +14529,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -13515,7 +14544,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13529,7 +14559,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13543,7 +14574,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -13557,7 +14589,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -13571,7 +14604,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_shufps, 0xc6, 3, SPACE_0F, None, @@ -13583,7 +14617,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -13599,7 +14634,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -13615,7 +14651,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13629,7 +14666,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13643,7 +14681,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -13657,7 +14696,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -13671,7 +14711,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_stmxcsr, 0xae, 1, SPACE_0F, 3, @@ -13683,7 +14724,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_subps, 0x5c, 2, SPACE_0F, None, @@ -13695,7 +14737,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13709,7 +14752,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13723,7 +14767,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -13737,7 +14782,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -13751,7 +14797,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -13765,7 +14812,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -13779,7 +14827,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13793,7 +14842,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13807,7 +14857,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13821,7 +14872,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13835,7 +14887,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13849,7 +14902,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13863,7 +14917,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13877,7 +14932,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13891,7 +14947,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -13905,7 +14962,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -13919,7 +14977,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13933,7 +14992,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13947,7 +15007,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13961,7 +15022,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13975,7 +15037,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -13989,7 +15052,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14003,7 +15067,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14017,7 +15082,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14031,7 +15097,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14045,7 +15112,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14059,7 +15127,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14073,7 +15142,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14087,7 +15157,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14101,7 +15172,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +15187,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14129,7 +15202,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14143,7 +15217,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14157,7 +15232,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14171,7 +15247,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14185,7 +15262,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14199,7 +15277,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14213,7 +15292,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14227,7 +15307,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14241,7 +15322,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14255,7 +15337,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14269,7 +15352,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14283,7 +15367,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14297,7 +15382,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14311,7 +15397,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14325,7 +15412,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14339,7 +15427,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14353,7 +15442,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14367,7 +15457,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14381,7 +15472,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14395,7 +15487,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14409,7 +15502,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14423,7 +15517,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -14439,7 +15534,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -14455,7 +15551,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -14471,7 +15568,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -14487,7 +15585,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14501,7 +15600,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14515,7 +15615,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14529,7 +15630,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14543,7 +15645,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14557,7 +15660,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 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, 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, @@ -14571,7 +15675,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 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, 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, @@ -14585,7 +15690,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, @@ -14599,7 +15705,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, @@ -14613,7 +15720,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, @@ -14627,7 +15735,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, @@ -14641,7 +15750,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14655,7 +15765,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14669,7 +15780,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14683,7 +15795,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14697,7 +15810,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14711,7 +15825,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14725,7 +15840,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14739,7 +15855,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14753,7 +15870,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14767,7 +15885,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14781,7 +15900,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14795,7 +15915,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14809,7 +15930,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14823,7 +15945,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -14837,7 +15960,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14851,7 +15975,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, @@ -14865,7 +15990,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14879,7 +16005,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14893,7 +16020,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, @@ -14907,7 +16035,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14921,7 +16050,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 1, 0, 1, 0, @@ -14935,7 +16065,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 1, 0, 1, 0, @@ -14949,7 +16080,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, @@ -14963,7 +16095,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, @@ -14977,7 +16110,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -14991,7 +16125,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -15005,7 +16140,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -15019,7 +16155,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15033,7 +16170,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15047,7 +16185,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15061,7 +16200,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15075,7 +16215,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -15089,7 +16230,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -15103,7 +16245,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15117,7 +16260,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15131,7 +16275,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -15147,7 +16292,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -15163,7 +16309,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15177,7 +16324,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15191,7 +16339,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -15205,7 +16354,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -15219,7 +16369,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15233,7 +16384,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15247,7 +16399,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -15261,7 +16414,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -15275,7 +16429,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -15289,7 +16444,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -15303,7 +16459,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15317,7 +16474,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15331,7 +16489,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15345,7 +16504,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15359,7 +16519,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15373,7 +16534,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15387,7 +16549,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -15401,7 +16564,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -15415,7 +16579,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15429,7 +16594,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15443,7 +16609,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15457,7 +16624,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15471,7 +16639,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -15485,7 +16654,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15499,7 +16669,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +16684,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -15527,7 +16699,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -15541,7 +16714,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15555,7 +16729,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15569,7 +16744,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -15583,7 +16759,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -15597,7 +16774,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -15611,7 +16789,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -15625,7 +16804,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -15639,7 +16819,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -15653,7 +16834,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -15667,7 +16849,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -15681,7 +16864,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -15695,7 +16879,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15709,7 +16894,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +16909,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15737,7 +16924,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15751,7 +16939,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -15765,7 +16954,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -15779,7 +16969,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15793,7 +16984,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15807,7 +16999,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15821,7 +17014,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15835,7 +17029,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -15849,7 +17044,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15863,7 +17059,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +17074,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -15891,7 +17089,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -15905,7 +17104,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -15921,7 +17121,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -15937,7 +17138,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -15953,7 +17155,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -15969,7 +17172,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -15985,7 +17189,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -16001,7 +17206,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16015,7 +17221,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16029,7 +17236,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16043,7 +17251,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16057,7 +17266,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16071,7 +17281,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16085,7 +17296,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16099,7 +17311,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16113,7 +17326,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16127,7 +17341,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16141,7 +17356,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16155,7 +17371,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16169,7 +17386,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16183,7 +17401,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16197,7 +17416,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16211,7 +17431,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16225,7 +17446,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16239,7 +17461,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16253,7 +17476,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +17491,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16281,7 +17506,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16295,7 +17521,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16309,7 +17536,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -16323,7 +17551,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -16337,7 +17566,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16351,7 +17581,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16365,7 +17596,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16379,7 +17611,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16393,7 +17626,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fisttp, 0xdd, 1, SPACE_BASE, 1, @@ -16405,7 +17639,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_fisttpll, 0xdd, 1, SPACE_BASE, 1, @@ -16417,7 +17652,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_cmpxchg16b, 0xc7, 1, SPACE_0F, 1, @@ -16429,7 +17665,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } } } }, { MN_monitor, 0x01c8, 0, SPACE_0F, None, @@ -16441,7 +17678,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_monitor, 0x01c8, 3, SPACE_0F, None, @@ -16453,7 +17691,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, @@ -16469,7 +17708,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 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, 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, 1, 0, @@ -16485,7 +17725,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_mwait, 0x01c9, 2, SPACE_0F, None, @@ -16497,7 +17738,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, @@ -16511,7 +17753,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_vmclear, 0xc7, 1, SPACE_0F, 6, @@ -16523,7 +17766,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vmlaunch, 0x01c2, 0, SPACE_0F, None, @@ -16535,7 +17779,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_vmresume, 0x01c3, 0, SPACE_0F, None, @@ -16547,7 +17792,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_vmptrld, 0xc7, 1, SPACE_0F, 6, @@ -16559,7 +17805,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vmptrst, 0xc7, 1, SPACE_0F, 7, @@ -16571,7 +17818,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vmread, 0x78, 2, SPACE_0F, None, @@ -16583,7 +17831,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -16597,7 +17846,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -16611,7 +17861,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 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, 1, 1, 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, @@ -16625,7 +17876,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, 1, 0, @@ -16639,7 +17891,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_vmxon, 0xc7, 1, SPACE_0F, 6, @@ -16651,7 +17904,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vmfunc, 0x01d4, 0, SPACE_0F, None, @@ -16663,7 +17917,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_getsec, 0x37, 0, SPACE_0F, None, @@ -16675,7 +17930,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_invept, 0x80, 2, SPACE_0F38, None, @@ -16687,7 +17943,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, @@ -16701,7 +17958,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, @@ -16715,7 +17973,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, @@ -16729,7 +17988,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, @@ -16743,7 +18003,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, @@ -16757,7 +18018,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, @@ -16771,7 +18033,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16785,7 +18048,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16799,7 +18063,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -16813,7 +18078,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16827,7 +18093,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +18108,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -16855,7 +18123,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16869,7 +18138,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16883,7 +18153,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -16897,7 +18168,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16911,7 +18183,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16925,7 +18198,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -16939,7 +18213,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16953,7 +18228,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16967,7 +18243,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -16981,7 +18258,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -16995,7 +18273,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17009,7 +18288,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -17023,7 +18303,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17037,7 +18318,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +18333,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -17065,7 +18348,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17079,7 +18363,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17093,7 +18378,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -17107,7 +18393,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17121,7 +18408,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17135,7 +18423,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -17149,7 +18438,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17163,7 +18453,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17177,7 +18468,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -17191,7 +18483,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17205,7 +18498,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17219,7 +18513,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -17233,7 +18528,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17247,7 +18543,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17261,7 +18558,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -17275,7 +18573,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -17291,7 +18590,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -17307,7 +18607,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -17323,7 +18624,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17337,7 +18639,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17351,7 +18654,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -17365,7 +18669,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17379,7 +18684,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17393,7 +18699,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -17407,7 +18714,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17421,7 +18729,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17435,7 +18744,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -17449,7 +18759,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -17465,7 +18776,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -17481,7 +18793,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -17497,7 +18810,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -17513,7 +18827,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -17529,7 +18844,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +18859,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -17559,7 +18876,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +18891,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -17589,7 +18908,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +18923,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -17619,7 +18940,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +18955,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -17649,7 +18972,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -17665,7 +18989,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -17681,7 +19006,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -17697,7 +19023,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17713,7 +19040,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17729,7 +19057,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17745,7 +19074,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17761,7 +19091,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -17777,7 +19108,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -17793,7 +19125,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17807,7 +19140,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17821,7 +19155,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -17837,7 +19172,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -17853,7 +19189,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17867,7 +19204,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17881,7 +19219,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -17897,7 +19236,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17911,7 +19251,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -17927,7 +19268,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -17941,7 +19283,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -17957,7 +19300,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -17966,28 +19310,30 @@ static const insn_template i386_optab[] = 1, 0, 0, 0, 0, 0 } } } }, { MN_pcmpeqq, 0x29, 2, SPACE_0F38, None, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 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, 0, 0, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } } } }, { MN_pcmpeqq, 0x29, 2, SPACE_0F38, None, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18001,7 +19347,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18017,7 +19364,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18033,7 +19381,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18049,7 +19398,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18065,7 +19415,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18081,7 +19432,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18097,7 +19449,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18113,7 +19466,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18129,7 +19483,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18143,7 +19498,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18157,7 +19513,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, @@ -18173,7 +19530,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, @@ -18189,7 +19547,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 0, 0, 0, 0, @@ -18205,7 +19564,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 0, 0, 0, 0, @@ -18221,7 +19581,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -18237,7 +19598,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -18253,7 +19615,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -18269,7 +19632,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -18285,7 +19649,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18299,7 +19664,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18313,7 +19679,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18327,7 +19694,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18341,7 +19709,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +19724,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18369,7 +19739,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18383,7 +19754,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18397,7 +19769,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18411,7 +19784,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18425,7 +19799,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18439,7 +19814,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18453,7 +19829,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18467,7 +19844,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18481,7 +19859,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18495,7 +19874,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18509,7 +19889,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18523,7 +19904,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18537,7 +19919,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18551,7 +19934,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18565,7 +19949,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18579,7 +19964,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18593,7 +19979,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18607,7 +19994,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18621,7 +20009,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18635,7 +20024,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18649,7 +20039,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18663,7 +20054,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18677,7 +20069,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18691,7 +20084,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18705,7 +20099,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18719,7 +20114,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18733,7 +20129,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18747,7 +20144,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18761,7 +20159,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18775,7 +20174,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18789,7 +20189,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18803,7 +20204,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18817,7 +20219,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18831,7 +20234,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -18845,7 +20249,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18859,7 +20264,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18873,7 +20279,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18887,7 +20294,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +20309,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18915,7 +20324,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -18929,7 +20339,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -18945,7 +20356,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -18961,7 +20373,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -18977,7 +20390,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -18993,7 +20407,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -19009,7 +20424,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -19025,7 +20441,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -19041,7 +20458,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -19050,28 +20468,30 @@ static const insn_template i386_optab[] = 1, 0, 0, 0, 0, 0 } } } }, { MN_pcmpgtq, 0x37, 2, SPACE_0F38, None, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 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, 0, 0, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } } } }, { MN_pcmpgtq, 0x37, 2, SPACE_0F38, None, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19085,7 +20505,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -19101,7 +20522,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -19117,7 +20539,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -19133,7 +20556,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -19149,7 +20573,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -19165,7 +20590,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -19181,7 +20607,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -19197,7 +20624,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -19213,7 +20641,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -19229,7 +20658,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -19245,7 +20675,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -19261,7 +20692,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -19277,7 +20709,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, @@ -19291,7 +20724,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, 1, 0, @@ -19305,7 +20739,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_xsave64, 0xae, 1, SPACE_0F, 4, @@ -19317,7 +20752,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_xrstor, 0xae, 1, SPACE_0F, 5, @@ -19329,7 +20765,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_xrstor64, 0xae, 1, SPACE_0F, 5, @@ -19341,7 +20778,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_xgetbv, 0x01d0, 0, SPACE_0F, None, @@ -19353,7 +20791,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xsetbv, 0x01d1, 0, SPACE_0F, None, @@ -19365,7 +20804,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xsaveopt, 0xae, 1, SPACE_0F, 6, @@ -19377,7 +20817,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_xsaveopt64, 0xae, 1, SPACE_0F, 6, @@ -19389,7 +20830,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_aesdec, 0xde, 2, SPACE_0F38, None, @@ -19401,7 +20843,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19415,7 +20858,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19429,7 +20873,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19443,7 +20888,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19457,7 +20903,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19471,7 +20918,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19485,7 +20933,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19499,7 +20948,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19513,7 +20963,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19527,7 +20978,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19541,7 +20993,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -19557,7 +21010,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -19572,8 +21026,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -19589,7 +21044,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19604,8 +21060,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -19620,8 +21077,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -19637,7 +21095,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19652,8 +21111,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -19668,8 +21128,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -19685,7 +21146,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19700,8 +21162,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -19716,8 +21179,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -19733,7 +21197,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19748,8 +21213,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -19765,7 +21231,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -19781,7 +21248,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -19797,7 +21265,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19811,7 +21280,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19825,7 +21295,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19839,7 +21310,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19853,7 +21325,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19867,7 +21340,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +21355,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19895,7 +21370,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -19908,8 +21384,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -19924,8 +21401,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -19940,8 +21418,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -19956,8 +21435,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -19972,8 +21452,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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,8 +21467,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +21483,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20017,7 +21500,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20033,7 +21517,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20049,7 +21534,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20065,7 +21551,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20081,7 +21568,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20097,7 +21585,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20113,7 +21602,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20129,7 +21619,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20145,7 +21636,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20161,7 +21653,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20177,7 +21670,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20193,7 +21687,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20209,7 +21704,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20225,7 +21721,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20241,7 +21738,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20257,7 +21755,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20273,7 +21772,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20289,7 +21789,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -20307,7 +21808,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -20325,7 +21827,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -20343,7 +21846,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -20361,7 +21865,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -20375,7 +21880,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20389,7 +21895,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -20403,7 +21910,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20417,7 +21925,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20431,7 +21940,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -20445,7 +21955,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20459,7 +21970,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20475,7 +21987,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20491,7 +22004,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20507,7 +22021,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20523,7 +22038,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20539,7 +22055,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20555,7 +22072,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20571,7 +22089,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20587,7 +22106,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20603,7 +22123,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20619,7 +22140,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20635,7 +22157,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20651,7 +22174,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20667,7 +22191,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20683,7 +22208,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20699,7 +22225,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20715,7 +22242,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20731,7 +22259,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20747,7 +22276,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20763,7 +22293,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20779,7 +22310,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20795,7 +22327,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20811,7 +22344,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20827,7 +22361,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20843,7 +22378,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20859,7 +22395,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20875,7 +22412,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20891,7 +22429,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20907,7 +22446,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20923,7 +22463,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20939,7 +22480,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20955,7 +22497,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20971,7 +22514,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -20987,7 +22531,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21003,7 +22548,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21019,7 +22565,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21035,7 +22582,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21051,7 +22599,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21067,7 +22616,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21083,7 +22633,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21099,7 +22650,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21115,7 +22667,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21131,7 +22684,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21147,7 +22701,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21163,7 +22718,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21179,7 +22735,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21195,7 +22752,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21211,7 +22769,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21227,7 +22786,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21243,7 +22803,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21259,7 +22820,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21275,7 +22837,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21291,7 +22854,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21307,7 +22871,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21323,7 +22888,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21339,7 +22905,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21355,7 +22922,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21371,7 +22939,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21387,7 +22956,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21403,7 +22973,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21419,7 +22990,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21435,7 +23007,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21451,7 +23024,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21467,7 +23041,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21483,7 +23058,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21499,7 +23075,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21515,7 +23092,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21531,7 +23109,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21547,7 +23126,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21563,7 +23143,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21579,7 +23160,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21595,7 +23177,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21611,7 +23194,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21627,7 +23211,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21643,7 +23228,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21659,7 +23245,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21675,7 +23262,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21691,7 +23279,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21707,7 +23296,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21723,7 +23313,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21739,7 +23330,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21755,7 +23347,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21771,7 +23364,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21787,7 +23381,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21803,7 +23398,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21819,7 +23415,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21835,7 +23432,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21851,7 +23449,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21867,7 +23466,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21883,7 +23483,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21899,7 +23500,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21915,7 +23517,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21931,7 +23534,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21947,7 +23551,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21963,7 +23568,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21979,7 +23585,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -21995,7 +23602,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22011,7 +23619,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22027,7 +23636,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22043,7 +23653,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22059,7 +23670,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22075,7 +23687,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22091,7 +23704,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22107,7 +23721,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22123,7 +23738,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22139,7 +23755,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22155,7 +23772,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22171,7 +23789,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22187,7 +23806,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22203,7 +23823,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22219,7 +23840,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22235,7 +23857,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22251,7 +23874,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22267,7 +23891,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22283,7 +23908,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22299,7 +23925,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22315,7 +23942,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22331,7 +23959,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22347,7 +23976,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22363,7 +23993,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22379,7 +24010,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22395,7 +24027,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22411,7 +24044,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22427,7 +24061,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22443,7 +24078,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22459,7 +24095,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22475,7 +24112,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22491,7 +24129,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22507,7 +24146,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22523,7 +24163,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22539,7 +24180,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22555,7 +24197,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22571,7 +24214,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22587,7 +24231,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22603,7 +24248,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22619,7 +24265,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22635,7 +24282,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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 +24299,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22667,7 +24316,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22683,7 +24333,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22699,7 +24350,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22715,7 +24367,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22731,7 +24384,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22747,7 +24401,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22763,7 +24418,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22779,7 +24435,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22795,7 +24452,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22811,7 +24469,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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 +24486,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22843,7 +24503,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22859,7 +24520,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22875,7 +24537,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22891,7 +24554,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22907,7 +24571,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22923,7 +24588,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22939,7 +24605,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22955,7 +24622,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22971,7 +24639,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -22987,7 +24656,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23003,7 +24673,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23019,7 +24690,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23035,7 +24707,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23051,7 +24724,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23067,7 +24741,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23083,7 +24758,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23099,7 +24775,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23115,7 +24792,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23131,7 +24809,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23147,7 +24826,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23163,7 +24843,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23179,7 +24860,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23195,7 +24877,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23211,7 +24894,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23227,7 +24911,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23243,7 +24928,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23259,7 +24945,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23275,7 +24962,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23291,7 +24979,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23307,7 +24996,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23323,7 +25013,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23339,7 +25030,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23355,7 +25047,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23371,7 +25064,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23387,7 +25081,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23403,7 +25098,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23419,7 +25115,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23435,7 +25132,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23451,7 +25149,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23467,7 +25166,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23483,7 +25183,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23499,7 +25200,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23515,7 +25217,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23531,7 +25234,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23547,7 +25251,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23563,7 +25268,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23579,7 +25285,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23595,7 +25302,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23611,7 +25319,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23627,7 +25336,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23643,7 +25353,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23659,7 +25370,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23675,7 +25387,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23691,7 +25404,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23707,7 +25421,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23723,7 +25438,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23739,7 +25455,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23755,7 +25472,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23771,7 +25489,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23787,7 +25506,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23803,7 +25523,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23819,7 +25540,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23835,7 +25557,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23851,7 +25574,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23867,7 +25591,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23883,7 +25608,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23899,7 +25625,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23915,7 +25642,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23931,7 +25659,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23947,7 +25676,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23963,7 +25693,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23979,7 +25710,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -23995,7 +25727,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24011,7 +25744,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24027,7 +25761,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24043,7 +25778,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24059,7 +25795,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24075,7 +25812,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24091,7 +25829,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24107,7 +25846,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24123,7 +25863,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24139,7 +25880,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24155,7 +25897,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24171,7 +25914,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24187,7 +25931,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24203,7 +25948,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24219,7 +25965,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24235,7 +25982,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24251,7 +25999,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24267,7 +26016,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24283,7 +26033,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24299,7 +26050,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24315,7 +26067,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24331,7 +26084,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24347,7 +26101,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24363,7 +26118,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24379,7 +26135,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24395,7 +26152,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24411,7 +26169,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24427,7 +26186,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24443,7 +26203,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24459,7 +26220,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24475,7 +26237,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24491,7 +26254,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24507,7 +26271,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24523,7 +26288,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24539,7 +26305,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24555,7 +26322,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24571,7 +26339,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24587,7 +26356,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24603,7 +26373,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24619,7 +26390,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24635,7 +26407,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24651,7 +26424,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24667,7 +26441,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24683,7 +26458,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24699,7 +26475,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24715,7 +26492,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24731,7 +26509,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24747,7 +26526,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24763,7 +26543,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24779,7 +26560,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24795,7 +26577,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24811,7 +26594,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24827,7 +26611,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24843,7 +26628,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24859,7 +26645,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24875,7 +26662,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24891,7 +26679,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24907,7 +26696,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24923,7 +26713,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24939,7 +26730,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24955,7 +26747,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24971,7 +26764,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -24987,7 +26781,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25003,7 +26798,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25019,7 +26815,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25035,7 +26832,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25051,7 +26849,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25067,7 +26866,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25083,7 +26883,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25099,7 +26900,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25115,7 +26917,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25131,7 +26934,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25147,7 +26951,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25163,7 +26968,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25179,7 +26985,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25195,7 +27002,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25211,7 +27019,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25227,7 +27036,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25243,7 +27053,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25259,7 +27070,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25275,7 +27087,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25291,7 +27104,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25307,7 +27121,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25323,7 +27138,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25339,7 +27155,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25355,7 +27172,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25371,7 +27189,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25387,7 +27206,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25403,7 +27223,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25419,7 +27240,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25435,7 +27257,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25451,7 +27274,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25467,7 +27291,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25483,7 +27308,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25499,7 +27325,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25515,7 +27342,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25531,7 +27359,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25547,7 +27376,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25563,7 +27393,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25579,7 +27410,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25595,7 +27427,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25611,7 +27444,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25627,7 +27461,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25643,7 +27478,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25659,7 +27495,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25675,7 +27512,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25691,7 +27529,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25707,7 +27546,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25723,7 +27563,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25739,7 +27580,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25755,7 +27597,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25771,7 +27614,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25787,7 +27631,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25803,7 +27648,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25819,7 +27665,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25835,7 +27682,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25851,7 +27699,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25867,7 +27716,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25883,7 +27733,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25899,7 +27750,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25915,7 +27767,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25931,7 +27784,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25947,7 +27801,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25963,7 +27818,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25979,7 +27835,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -25995,7 +27852,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26011,7 +27869,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26027,7 +27886,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26043,7 +27903,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26059,7 +27920,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26075,7 +27937,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26091,7 +27954,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26107,7 +27971,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26123,7 +27988,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26139,7 +28005,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26155,7 +28022,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26171,7 +28039,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26187,7 +28056,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26203,7 +28073,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26219,7 +28090,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26235,7 +28107,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26251,7 +28124,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26267,7 +28141,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26283,7 +28158,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26299,7 +28175,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26315,7 +28192,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26331,7 +28209,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26347,7 +28226,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -26365,7 +28245,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -26383,7 +28264,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -26401,7 +28283,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -26419,7 +28302,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -26437,7 +28321,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -26455,7 +28340,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -26473,7 +28359,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -26491,7 +28378,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26505,7 +28393,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26519,7 +28408,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26533,7 +28423,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26547,7 +28438,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26561,7 +28453,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -26575,7 +28468,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26589,7 +28483,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26603,7 +28498,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26617,7 +28513,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26631,7 +28528,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26645,7 +28543,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26659,7 +28558,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, @@ -26673,7 +28573,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26687,7 +28588,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26701,7 +28603,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26715,7 +28618,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -26729,7 +28633,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26743,7 +28648,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26757,7 +28663,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26771,7 +28678,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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 +28693,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, @@ -26799,7 +28708,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26813,7 +28723,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26827,7 +28738,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26841,7 +28753,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 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 +28768,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26869,7 +28783,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26883,7 +28798,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26897,7 +28813,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26911,7 +28828,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26925,7 +28843,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26939,7 +28858,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -26953,7 +28873,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26967,7 +28888,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26981,7 +28903,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -26995,7 +28918,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -27009,7 +28933,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -27023,7 +28948,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -27037,7 +28963,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -27051,7 +28978,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27067,7 +28995,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27083,7 +29012,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27099,7 +29029,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27115,7 +29046,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27131,7 +29063,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27147,7 +29080,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27163,7 +29097,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27179,7 +29114,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27195,7 +29131,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27211,7 +29148,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27227,7 +29165,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27243,7 +29182,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27259,7 +29199,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27275,7 +29216,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27289,7 +29231,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, @@ -27303,7 +29246,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27317,7 +29261,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27331,7 +29276,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27345,7 +29291,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -27359,7 +29306,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27373,7 +29321,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27387,7 +29336,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27401,7 +29351,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27415,7 +29366,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27429,7 +29381,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -27443,7 +29396,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -27457,7 +29411,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -27471,7 +29426,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -27485,7 +29441,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27501,7 +29458,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27517,7 +29475,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27533,7 +29492,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27549,7 +29509,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27565,7 +29526,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27581,7 +29543,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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 +29560,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27613,7 +29577,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -27631,7 +29596,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -27649,7 +29615,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -27665,7 +29632,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -27681,7 +29649,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -27697,7 +29666,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -27713,7 +29683,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -27729,7 +29700,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27745,7 +29717,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27761,7 +29734,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27777,7 +29751,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27793,7 +29768,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -27811,7 +29787,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -27829,7 +29806,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -27847,7 +29825,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27861,7 +29840,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vmaskmovdqu, 0xf7, 2, SPACE_0F, None, @@ -27873,7 +29853,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -27887,7 +29868,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, @@ -27903,7 +29885,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27919,7 +29902,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, @@ -27935,7 +29919,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27951,7 +29936,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27967,7 +29953,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27983,7 +29970,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -27999,7 +29987,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28015,7 +30004,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28031,7 +30021,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28047,7 +30038,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28063,7 +30055,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28079,7 +30072,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28095,7 +30089,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28111,7 +30106,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28127,7 +30123,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28143,7 +30140,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28159,7 +30157,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28175,7 +30174,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28191,7 +30191,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28207,7 +30208,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28221,7 +30223,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28235,7 +30238,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28249,7 +30253,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28263,7 +30268,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28277,7 +30283,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, @@ -28291,7 +30298,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28305,7 +30313,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28319,7 +30328,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28333,7 +30343,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28347,7 +30358,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28361,7 +30373,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28375,7 +30388,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28389,7 +30403,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -28405,7 +30420,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -28421,7 +30437,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28437,7 +30454,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, @@ -28451,7 +30469,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28467,7 +30486,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, @@ -28481,7 +30501,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28497,7 +30518,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, @@ -28511,7 +30533,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28527,7 +30550,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, @@ -28541,7 +30565,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -28557,7 +30582,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -28573,7 +30599,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28589,7 +30616,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, @@ -28603,7 +30631,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28619,7 +30648,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, @@ -28633,7 +30663,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28649,7 +30680,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, @@ -28663,7 +30695,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28679,7 +30712,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, @@ -28693,7 +30727,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 1, 0, 1, 0, @@ -28707,7 +30742,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 1, 0, 1, 0, @@ -28721,7 +30757,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -28735,7 +30772,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -28749,7 +30787,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28763,7 +30802,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28777,7 +30817,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -28791,7 +30832,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -28805,7 +30847,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -28819,7 +30862,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -28833,7 +30877,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28847,7 +30892,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -28861,7 +30907,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, @@ -28875,7 +30922,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, @@ -28889,7 +30937,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28903,7 +30952,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -28917,7 +30967,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28931,7 +30982,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -28947,7 +30999,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28961,7 +31014,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -28977,7 +31031,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -28991,7 +31046,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -29007,7 +31063,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29021,7 +31078,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -29037,7 +31095,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29051,7 +31110,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29065,7 +31125,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29079,7 +31140,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29093,7 +31155,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29107,7 +31170,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29121,7 +31185,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29135,7 +31200,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29149,7 +31215,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -29167,7 +31234,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29183,7 +31251,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29199,7 +31268,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29215,7 +31285,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29231,7 +31302,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29247,7 +31319,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29263,7 +31336,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29279,7 +31353,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29295,7 +31370,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29311,7 +31387,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29327,7 +31404,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29343,7 +31421,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29359,7 +31438,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29373,7 +31453,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29387,7 +31468,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29401,7 +31483,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29415,7 +31498,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29429,7 +31513,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29443,7 +31528,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29459,7 +31545,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29475,7 +31562,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29491,7 +31579,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29507,7 +31596,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29523,7 +31613,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29539,7 +31630,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29555,7 +31647,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29571,7 +31664,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29587,7 +31681,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29603,7 +31698,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29619,7 +31715,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29635,7 +31732,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29651,7 +31749,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29667,7 +31766,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29683,7 +31783,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29699,7 +31800,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29715,7 +31817,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29731,7 +31834,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29747,7 +31851,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29763,7 +31868,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29779,7 +31885,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29795,7 +31902,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29811,7 +31919,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29827,7 +31936,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -29845,7 +31955,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -29863,7 +31974,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29879,7 +31991,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29895,7 +32008,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29911,7 +32025,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29927,7 +32042,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29943,7 +32059,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -29959,7 +32076,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -29977,7 +32095,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -29995,7 +32114,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30011,7 +32131,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30027,7 +32148,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30043,7 +32165,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30059,7 +32182,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30075,7 +32199,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30091,7 +32216,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30107,7 +32233,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30123,7 +32250,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30132,14 +32260,15 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0 } } } }, { MN_vpcmpeqq, 0x29, 3, SPACE_0F38, None, { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 1, 1, 3, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30155,7 +32284,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30171,7 +32301,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30187,7 +32318,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -30203,7 +32335,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -30219,7 +32352,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -30235,7 +32369,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -30244,14 +32379,15 @@ static const insn_template i386_optab[] = 1, 0, 0, 0, 0, 0 } } } }, { MN_vpcmpgtb, 0x64 | 0, 3, SPACE_0F, None, { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 1, 1, 3, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30267,7 +32403,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30276,14 +32413,15 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0 } } } }, { MN_vpcmpgtw, 0x64 | 1, 3, SPACE_0F, None, { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 1, 1, 3, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30299,7 +32437,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30308,14 +32447,15 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0 } } } }, { MN_vpcmpgtd, 0x66, 3, SPACE_0F, None, { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 1, 1, 3, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30331,7 +32471,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30340,14 +32481,15 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0 } } } }, { MN_vpcmpgtq, 0x37, 3, SPACE_0F38, None, { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 1, 1, 3, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30363,7 +32505,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30379,7 +32522,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -30395,7 +32539,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -30411,7 +32556,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -30429,7 +32575,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30445,7 +32592,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -30461,7 +32609,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -30477,7 +32626,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30493,7 +32643,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30509,7 +32660,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -30525,7 +32677,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -30541,7 +32694,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30557,7 +32711,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -30573,7 +32728,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -30589,7 +32745,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -30605,7 +32762,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -30621,7 +32779,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -30637,7 +32796,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -30653,7 +32813,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -30669,7 +32830,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -30685,7 +32847,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -30701,7 +32864,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -30717,7 +32881,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -30733,7 +32898,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -30749,7 +32915,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -30765,7 +32932,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -30781,7 +32949,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30797,7 +32966,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30813,7 +32983,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30829,7 +33000,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -30843,7 +33015,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30859,7 +33032,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30875,7 +33049,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -30891,7 +33066,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, @@ -30909,7 +33085,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 0, 0, 0, 0, @@ -30927,7 +33104,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, @@ -30945,7 +33123,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 0, 0, 0, 0, @@ -30963,7 +33142,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -30981,7 +33161,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -30999,7 +33180,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -31017,7 +33199,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -31035,7 +33218,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, @@ -31053,7 +33237,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, @@ -31071,7 +33256,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, @@ -31089,7 +33275,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, @@ -31107,7 +33294,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31123,7 +33311,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31139,7 +33328,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31155,7 +33345,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31171,7 +33362,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31187,7 +33379,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31203,7 +33396,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31219,7 +33413,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31235,7 +33430,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31251,7 +33447,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31267,7 +33464,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31283,7 +33481,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31299,7 +33498,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31315,7 +33515,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31331,7 +33532,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31347,7 +33549,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31363,7 +33566,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31379,7 +33583,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31395,7 +33600,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31411,7 +33617,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31427,7 +33634,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31443,7 +33651,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31459,7 +33668,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31475,7 +33685,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31491,7 +33702,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31507,7 +33719,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31523,7 +33736,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31539,7 +33753,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31555,7 +33770,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 1, 0, 1, 0, @@ -31569,7 +33785,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31583,7 +33800,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31597,7 +33815,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -31611,7 +33830,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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 +33845,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31639,7 +33860,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31653,7 +33875,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31667,7 +33890,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31681,7 +33905,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31695,7 +33920,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31709,7 +33935,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31723,7 +33950,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -31737,7 +33965,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31751,7 +33980,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31765,7 +33995,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -31779,7 +34010,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31793,7 +34025,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -31807,7 +34040,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31821,7 +34055,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31835,7 +34070,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -31849,7 +34085,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31863,7 +34100,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -31877,7 +34115,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31891,7 +34130,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31905,7 +34145,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -31919,7 +34160,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31933,7 +34175,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31947,7 +34190,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -31961,7 +34205,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31975,7 +34220,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -31989,7 +34235,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32003,7 +34250,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32017,7 +34265,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -32031,7 +34280,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32045,7 +34295,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32059,7 +34310,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32073,7 +34325,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32087,7 +34340,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32101,7 +34355,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32115,7 +34370,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32129,7 +34385,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32143,7 +34400,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -32157,7 +34415,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32171,7 +34430,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32185,7 +34445,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -32199,7 +34460,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32213,7 +34475,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -32227,7 +34490,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32241,7 +34505,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32255,7 +34520,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -32269,7 +34535,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32283,7 +34550,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -32297,7 +34565,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32311,7 +34580,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32325,7 +34595,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -32339,7 +34610,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32353,7 +34625,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32367,7 +34640,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -32381,7 +34655,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32395,7 +34670,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32409,7 +34685,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32425,7 +34702,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32441,7 +34719,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32457,7 +34736,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32473,7 +34753,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32489,7 +34770,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32505,7 +34787,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32521,7 +34804,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32537,7 +34821,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32553,7 +34838,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32569,7 +34855,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32585,7 +34872,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32601,7 +34889,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32617,7 +34906,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32633,7 +34923,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32649,7 +34940,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32665,7 +34957,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32681,7 +34974,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32697,7 +34991,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32713,7 +35008,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -32729,7 +35025,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -32745,7 +35042,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -32761,7 +35059,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -32777,7 +35076,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -32793,7 +35093,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -32809,7 +35110,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32825,7 +35127,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32841,7 +35144,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -32857,7 +35161,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -32873,7 +35178,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -32889,7 +35195,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -32905,7 +35212,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -32921,7 +35229,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -32937,7 +35246,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -32953,7 +35263,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -32969,7 +35280,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -32985,7 +35297,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -33001,7 +35314,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -33017,7 +35331,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -33033,7 +35348,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -33049,7 +35365,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -33065,7 +35382,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -33081,7 +35399,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -33097,7 +35416,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -33113,7 +35433,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -33129,7 +35450,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -33145,7 +35467,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -33161,7 +35484,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -33177,7 +35501,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -33193,7 +35518,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -33209,7 +35535,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -33225,7 +35552,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -33241,7 +35569,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -33257,7 +35586,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -33273,7 +35603,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -33289,7 +35620,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -33305,7 +35637,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -33321,7 +35654,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -33337,7 +35671,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -33353,7 +35688,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -33369,7 +35705,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -33385,7 +35722,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -33401,7 +35739,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -33417,7 +35756,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -33433,7 +35773,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33449,7 +35790,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33465,7 +35807,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33481,7 +35824,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33497,7 +35841,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33513,7 +35858,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33529,7 +35875,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33545,7 +35892,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33561,7 +35909,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33577,7 +35926,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33593,7 +35943,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33609,7 +35960,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33625,7 +35977,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33641,7 +35994,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33657,7 +36011,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33673,7 +36028,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33689,7 +36045,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33703,7 +36060,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33719,7 +36077,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33735,7 +36094,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33751,7 +36111,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33767,7 +36128,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33783,7 +36145,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33799,7 +36162,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33815,7 +36179,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33831,7 +36196,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33847,7 +36213,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33863,7 +36230,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33879,7 +36247,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33895,7 +36264,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33911,7 +36281,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33927,7 +36298,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33943,7 +36315,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33959,7 +36332,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33975,7 +36349,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -33989,7 +36364,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34005,7 +36381,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -34021,7 +36398,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -34037,7 +36415,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -34055,7 +36434,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -34073,7 +36453,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34087,7 +36468,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34103,7 +36485,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -34121,7 +36504,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -34139,7 +36523,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -34157,7 +36542,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -34175,7 +36561,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34189,7 +36576,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34203,7 +36591,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34217,7 +36606,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34231,7 +36621,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34247,7 +36638,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34263,7 +36655,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34279,7 +36672,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34295,7 +36689,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vsubps, 0x5c, 3, SPACE_0F, None, @@ -34307,7 +36702,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34323,7 +36719,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34339,7 +36736,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34355,7 +36753,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34371,7 +36770,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34387,7 +36787,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34403,7 +36804,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34419,7 +36821,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34435,7 +36838,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34449,7 +36853,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34463,7 +36868,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34477,7 +36883,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34491,7 +36898,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34505,7 +36913,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34519,7 +36928,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34535,7 +36945,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34551,7 +36962,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34567,7 +36979,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34583,7 +36996,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34599,7 +37013,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34615,7 +37030,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34631,7 +37047,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34647,7 +37064,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34663,7 +37081,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34679,7 +37098,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34695,7 +37115,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34711,7 +37132,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_vzeroupper, 0x77, 0, SPACE_0F, None, @@ -34723,7 +37145,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_vbroadcasti128, 0x5a, 2, SPACE_0F38, None, @@ -34735,7 +37158,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -34749,7 +37173,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -34767,7 +37192,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34781,7 +37207,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34795,7 +37222,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -34809,7 +37237,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34823,7 +37252,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34837,21 +37267,23 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 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 } } } }, { MN_vpbroadcastd, 0x58 | 0, 2, SPACE_0F38, None, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34865,7 +37297,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34879,21 +37312,23 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 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 } } } }, { MN_vpbroadcastq, 0x58 | 1, 2, SPACE_0F38, None, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34907,7 +37342,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34921,7 +37357,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 1, 0, 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, @@ -34935,7 +37372,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -34953,7 +37391,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34969,7 +37408,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -34985,7 +37425,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -35001,7 +37442,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -35017,7 +37459,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35033,7 +37476,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35049,7 +37493,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35065,7 +37510,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -35081,7 +37527,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -35097,7 +37544,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35113,7 +37561,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -35129,7 +37578,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -35147,7 +37597,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, @@ -35163,7 +37614,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35179,7 +37631,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, @@ -35195,7 +37648,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35211,7 +37665,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35227,7 +37682,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35243,7 +37699,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35259,7 +37716,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35275,7 +37733,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35291,7 +37750,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35307,7 +37767,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35323,7 +37784,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35339,7 +37801,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35355,7 +37818,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35371,7 +37835,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -35387,7 +37852,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35401,7 +37867,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35415,7 +37882,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, @@ -35431,7 +37899,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -35447,7 +37916,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35461,7 +37931,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35475,7 +37946,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35489,7 +37961,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, @@ -35505,7 +37978,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, @@ -35521,7 +37995,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35535,7 +38010,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35549,7 +38025,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35563,7 +38040,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, @@ -35579,7 +38057,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -35595,7 +38074,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35609,7 +38089,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35623,7 +38104,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35637,7 +38119,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, @@ -35653,7 +38136,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -35669,7 +38153,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35683,7 +38168,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35697,7 +38183,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35711,7 +38198,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -35727,7 +38215,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35741,7 +38230,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35755,7 +38245,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, @@ -35771,7 +38262,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, @@ -35787,7 +38279,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35801,7 +38294,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35815,7 +38309,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35829,7 +38324,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, @@ -35845,7 +38341,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -35861,7 +38358,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35875,7 +38373,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35889,7 +38388,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -35903,7 +38403,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -35917,7 +38418,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -35933,7 +38435,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -35950,8 +38453,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -35968,8 +38472,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -35987,7 +38492,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -36002,8 +38508,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36018,8 +38525,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36035,7 +38543,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -36050,8 +38559,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36066,8 +38576,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36083,7 +38594,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -36098,8 +38610,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36114,8 +38627,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36131,7 +38645,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -36146,8 +38661,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36162,8 +38678,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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,8 +38695,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -36196,8 +38714,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -36214,8 +38733,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -36232,8 +38752,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -36250,8 +38771,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36266,8 +38788,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36283,7 +38806,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_rdgsbase, 0xae, 1, SPACE_0F, 1, @@ -36295,7 +38819,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_rdrand, 0xc7, 1, SPACE_0F, 6, @@ -36307,7 +38832,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_wrfsbase, 0xae, 1, SPACE_0F, 2, @@ -36319,7 +38845,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_wrgsbase, 0xae, 1, SPACE_0F, 3, @@ -36331,7 +38858,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_vcvtph2ps, 0x13, 2, SPACE_0F38, None, @@ -36343,7 +38871,8 @@ static 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36357,7 +38886,8 @@ static 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -36371,7 +38901,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36385,7 +38916,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36399,7 +38931,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -36413,7 +38946,8 @@ static 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -36429,7 +38963,8 @@ static 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -36445,7 +38980,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -36461,7 +38997,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -36477,7 +39014,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -36493,7 +39031,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36509,7 +39048,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36525,7 +39065,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36541,7 +39082,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36557,7 +39099,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36573,7 +39116,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36589,7 +39133,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36605,7 +39150,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36621,7 +39167,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36637,7 +39184,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36653,7 +39201,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36669,7 +39218,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36685,7 +39235,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36701,7 +39252,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36717,7 +39269,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36733,7 +39286,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36749,7 +39303,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36765,7 +39320,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36781,7 +39337,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36797,7 +39354,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36813,7 +39371,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36829,7 +39388,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36845,7 +39405,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36861,7 +39422,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36877,7 +39439,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36893,7 +39456,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36909,7 +39473,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36925,7 +39490,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36941,7 +39507,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36957,7 +39524,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36973,7 +39541,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -36989,7 +39558,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37005,7 +39575,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37021,7 +39592,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37037,7 +39609,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37053,7 +39626,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37069,7 +39643,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37085,7 +39660,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37101,7 +39677,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37117,7 +39694,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37133,7 +39711,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37149,7 +39728,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37165,7 +39745,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37181,7 +39762,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37197,7 +39779,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37213,7 +39796,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37229,7 +39813,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37245,7 +39830,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37261,7 +39847,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37277,7 +39864,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37293,7 +39881,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37309,7 +39898,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37325,7 +39915,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37341,7 +39932,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37357,7 +39949,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37373,7 +39966,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37389,7 +39983,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37405,7 +40000,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37421,7 +40017,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37437,7 +40034,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37453,7 +40051,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37469,7 +40068,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37485,7 +40085,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37501,7 +40102,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37517,7 +40119,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37533,7 +40136,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37549,7 +40153,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37565,7 +40170,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37581,7 +40187,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37597,7 +40204,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37613,7 +40221,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37629,7 +40238,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37645,7 +40255,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37661,7 +40272,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37677,7 +40289,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37693,7 +40306,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37709,7 +40323,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37725,7 +40340,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37741,7 +40357,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37757,7 +40374,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37773,7 +40391,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37789,7 +40408,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37805,7 +40425,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37821,7 +40442,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37837,7 +40459,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37853,7 +40476,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37869,7 +40493,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37885,7 +40510,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37901,7 +40527,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37917,7 +40544,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37933,7 +40561,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37949,7 +40578,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37965,7 +40595,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37981,7 +40612,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -37997,7 +40629,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38013,7 +40646,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38029,7 +40663,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38045,7 +40680,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38061,7 +40697,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38077,7 +40714,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38093,7 +40731,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38109,7 +40748,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38125,7 +40765,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38141,7 +40782,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38157,7 +40799,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38173,7 +40816,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38189,7 +40833,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38205,7 +40850,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38221,7 +40867,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38237,7 +40884,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38253,7 +40901,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38269,7 +40918,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38285,7 +40935,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38301,7 +40952,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38317,7 +40969,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38333,7 +40986,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38349,7 +41003,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38365,7 +41020,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38381,7 +41037,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38397,7 +41054,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38413,7 +41071,8 @@ static const insn_template i386_optab[] = 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xrelease, 0xf3, 0, SPACE_BASE, None, @@ -38425,7 +41084,8 @@ static const insn_template i386_optab[] = 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xabort, 0xc6f8, 1, SPACE_BASE, None, @@ -38437,7 +41097,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xbegin, 0xc7f8, 1, SPACE_BASE, None, @@ -38449,7 +41110,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_xend, 0x01d5, 0, SPACE_0F, None, @@ -38461,7 +41123,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xtest, 0x01d6, 0, SPACE_0F, None, @@ -38473,7 +41136,8 @@ static const insn_template i386_optab[] = 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_bzhi, 0xf5, 3, SPACE_0F38, None, @@ -38485,7 +41149,8 @@ static const insn_template i386_optab[] = 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, @@ -38501,7 +41166,8 @@ static const insn_template i386_optab[] = 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -38517,7 +41183,8 @@ static const insn_template i386_optab[] = 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -38533,7 +41200,8 @@ static const insn_template i386_optab[] = 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -38549,7 +41217,8 @@ static const insn_template i386_optab[] = 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, @@ -38565,7 +41234,8 @@ static const insn_template i386_optab[] = 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, @@ -38581,7 +41251,8 @@ static const insn_template i386_optab[] = 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, @@ -38597,7 +41268,8 @@ static const insn_template i386_optab[] = 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, @@ -38613,7 +41285,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38631,7 +41304,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38649,7 +41323,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38667,7 +41342,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38685,7 +41361,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38703,7 +41380,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38721,7 +41399,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38739,7 +41418,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38757,7 +41437,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38775,7 +41456,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38793,7 +41475,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38811,7 +41494,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38829,7 +41513,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38847,7 +41532,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38865,7 +41551,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38883,7 +41570,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38901,7 +41589,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38919,7 +41608,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38937,7 +41627,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38955,7 +41646,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38973,7 +41665,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -38987,7 +41680,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -39001,7 +41695,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -39015,7 +41710,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -39029,7 +41725,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -39047,7 +41744,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -39065,7 +41763,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -39083,7 +41782,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -39101,7 +41801,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -39119,7 +41820,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -39137,7 +41839,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -39155,7 +41858,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -39173,7 +41877,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -39191,7 +41896,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +41913,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39223,7 +41930,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39239,7 +41947,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39255,7 +41964,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39271,7 +41981,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39287,7 +41998,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39303,7 +42015,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39319,7 +42032,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39335,7 +42049,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39351,7 +42066,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39367,7 +42083,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39383,7 +42100,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39399,7 +42117,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39415,7 +42134,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39431,7 +42151,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +42168,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39463,7 +42185,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39479,7 +42202,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39495,7 +42219,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39511,7 +42236,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39527,7 +42253,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39543,7 +42270,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39559,7 +42287,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39575,7 +42304,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39591,7 +42321,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39607,7 +42338,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39623,7 +42355,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39639,7 +42372,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39655,7 +42389,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39671,7 +42406,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +42423,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39703,7 +42440,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39719,7 +42457,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39735,7 +42474,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39751,7 +42491,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39767,7 +42508,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39783,7 +42525,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39799,7 +42542,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39815,7 +42559,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39831,7 +42576,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39847,7 +42593,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39863,7 +42610,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39879,7 +42627,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39895,7 +42644,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39911,7 +42661,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +42678,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39943,7 +42695,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39959,7 +42712,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39975,7 +42729,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -39991,7 +42746,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40007,7 +42763,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40023,7 +42780,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40039,7 +42797,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40055,7 +42814,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40071,7 +42831,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40087,7 +42848,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40103,7 +42865,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40119,7 +42882,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40135,7 +42899,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40151,7 +42916,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40167,7 +42933,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40183,7 +42950,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40199,7 +42967,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40215,7 +42984,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40235,7 +43005,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40255,7 +43026,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40275,7 +43047,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40295,7 +43068,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40309,7 +43083,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40323,7 +43098,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40337,7 +43113,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40351,7 +43128,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40365,7 +43143,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40379,7 +43158,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40393,7 +43173,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40407,7 +43188,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40421,7 +43203,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40435,7 +43218,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40449,7 +43233,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40463,7 +43248,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40477,7 +43263,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40491,7 +43278,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40505,7 +43293,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40523,7 +43312,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40541,7 +43331,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40559,7 +43350,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40577,7 +43369,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40595,7 +43388,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40613,7 +43407,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40631,7 +43426,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40649,7 +43445,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40667,7 +43464,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40685,7 +43483,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40703,7 +43502,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40721,7 +43521,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40739,7 +43540,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40755,7 +43557,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40771,7 +43574,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40787,7 +43591,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40803,7 +43608,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40819,7 +43625,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40835,7 +43642,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40851,7 +43659,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40867,7 +43676,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40883,7 +43693,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40899,7 +43710,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40915,7 +43727,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40931,7 +43744,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40947,7 +43761,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40963,7 +43778,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40979,7 +43795,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -40995,7 +43812,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_slwpcb, 0x12, 1, SPACE_XOP09, 1, @@ -41007,7 +43825,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_lwpval, 0x12, 3, SPACE_XOP0A, 1, @@ -41019,7 +43838,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -41035,7 +43855,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -41051,7 +43872,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -41067,7 +43889,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, @@ -41083,7 +43906,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, @@ -41099,7 +43923,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -41113,7 +43938,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -41127,7 +43953,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -41141,7 +43968,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -41155,7 +43983,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -41169,7 +43998,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -41183,7 +44013,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -41197,7 +44028,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -41211,7 +44043,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -41225,7 +44058,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -41239,7 +44073,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -41253,7 +44088,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -41267,7 +44103,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -41281,7 +44118,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_prefetchw, 0x0d, 1, SPACE_0F, 1, @@ -41293,7 +44131,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_femms, 0x0e, 0, SPACE_0F, None, @@ -41305,7 +44144,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_pavgusb, 0x0f, 2, SPACE_0F, 0xbf, @@ -41317,7 +44157,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41331,7 +44172,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41345,7 +44187,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41359,7 +44202,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41373,7 +44217,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41387,7 +44232,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41401,7 +44247,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41415,7 +44262,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41429,7 +44277,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41443,7 +44292,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41457,7 +44307,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41471,7 +44322,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41485,7 +44337,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41499,7 +44352,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41513,7 +44367,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41527,7 +44382,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41541,7 +44397,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41555,7 +44412,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41569,7 +44427,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41583,7 +44442,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41597,7 +44457,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41611,7 +44472,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41625,7 +44487,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41639,7 +44502,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -41653,7 +44517,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_sysret, 0x07, 0, SPACE_0F, None, @@ -41665,7 +44530,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_swapgs, 0x01f8, 0, SPACE_0F, None, @@ -41677,7 +44543,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rdtscp, 0x01f9, 0, SPACE_0F, None, @@ -41689,7 +44556,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_clgi, 0x01dd, 0, SPACE_0F, None, @@ -41701,7 +44569,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_invlpga, 0x01df, 0, SPACE_0F, None, @@ -41713,7 +44582,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_invlpga, 0x01df, 2, SPACE_0F, None, @@ -41725,7 +44595,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, @@ -41739,7 +44610,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_skinit, 0x01de, 1, SPACE_0F, None, @@ -41751,7 +44623,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_stgi, 0x01dc, 0, SPACE_0F, None, @@ -41763,7 +44636,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_vmgexit, 0x01d9, 0, SPACE_0F, None, @@ -41775,7 +44649,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_vmload, 0x01da, 0, SPACE_0F, None, @@ -41787,7 +44662,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_vmload, 0x01da, 1, SPACE_0F, None, @@ -41799,7 +44675,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_vmmcall, 0x01d9, 0, SPACE_0F, None, @@ -41811,7 +44688,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_vmrun, 0x01d8, 0, SPACE_0F, None, @@ -41823,7 +44701,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_vmrun, 0x01d8, 1, SPACE_0F, None, @@ -41835,7 +44714,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_vmsave, 0x01db, 0, SPACE_0F, None, @@ -41847,7 +44727,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_vmsave, 0x01db, 1, SPACE_0F, None, @@ -41859,7 +44740,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_movntsd, 0x2b, 2, SPACE_0F, None, @@ -41871,7 +44753,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, @@ -41885,7 +44768,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, @@ -41899,7 +44783,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -41915,7 +44800,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -41929,7 +44815,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -41943,7 +44830,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -41961,7 +44849,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -41975,7 +44864,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -41989,7 +44879,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xcrypt_ecb, 0xa7c8, 0, SPACE_0F, None, @@ -42001,7 +44892,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xcrypt_cbc, 0xa7d0, 0, SPACE_0F, None, @@ -42013,7 +44905,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xcrypt_ctr, 0xa7d8, 0, SPACE_0F, None, @@ -42025,7 +44918,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xcrypt_cfb, 0xa7e0, 0, SPACE_0F, None, @@ -42037,7 +44931,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xcrypt_ofb, 0xa7e8, 0, SPACE_0F, None, @@ -42049,7 +44944,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_montmul, 0xa6c0, 0, SPACE_0F, None, @@ -42061,7 +44957,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xsha1, 0xa6c8, 0, SPACE_0F, None, @@ -42073,7 +44970,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xsha256, 0xa6d0, 0, SPACE_0F, None, @@ -42085,7 +44983,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xstorerng, 0xa7c0, 0, SPACE_0F, None, @@ -42097,7 +44996,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xcryptecb, 0xa7c8, 0, SPACE_0F, None, @@ -42109,7 +45009,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xcryptcbc, 0xa7d0, 0, SPACE_0F, None, @@ -42121,7 +45022,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xcryptctr, 0xa7d8, 0, SPACE_0F, None, @@ -42133,7 +45035,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xcryptcfb, 0xa7e0, 0, SPACE_0F, None, @@ -42145,7 +45048,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xcryptofb, 0xa7e8, 0, SPACE_0F, None, @@ -42157,7 +45061,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xstore, 0xa7c0, 0, SPACE_0F, None, @@ -42169,7 +45074,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_adcx, 0xf6, 2, SPACE_0F38, None, @@ -42181,7 +45087,8 @@ static 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, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -42195,7 +45102,8 @@ static 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, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -42209,7 +45117,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_clac, 0x01ca, 0, SPACE_0F, None, @@ -42221,7 +45130,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_stac, 0x01cb, 0, SPACE_0F, None, @@ -42233,7 +45143,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_bnd, 0xf2, 0, SPACE_BASE, None, @@ -42245,7 +45156,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_bndmk, 0x1b, 2, SPACE_0F, None, @@ -42257,7 +45169,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -42271,7 +45184,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -42285,7 +45199,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 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, 1, 0, 1, 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, @@ -42299,7 +45214,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, @@ -42313,7 +45229,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 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, 1, 0, 1, 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, @@ -42327,7 +45244,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, @@ -42341,7 +45259,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + 0, 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, 1, 0, 1, 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, @@ -42355,7 +45274,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 1, 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, @@ -42369,7 +45289,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -42383,7 +45304,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -42397,7 +45319,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -42413,7 +45336,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42427,7 +45351,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42441,7 +45366,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42455,7 +45381,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -42471,7 +45398,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42485,7 +45413,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42499,11 +45428,146 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } } } }, + { MN_vsha512rnds2, 0xcb, 3, SPACE_0F38, None, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 1, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, + { { { 7, 0, 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 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0 } } } }, + { MN_vsha512msg1, 0xcc, 2, SPACE_0F38, None, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, + { { { 7, 0, 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 } } } }, + { MN_vsha512msg2, 0xcd, 2, SPACE_0F38, None, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0 } } } }, + { MN_vsm3rnds2, 0xde, 4, SPACE_0F3A, None, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, + { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 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, + 1, 0, 0, 0, 0, 0 } } } }, + { MN_vsm3msg1, 0xda, 3, SPACE_0F38, None, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 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, + 1, 0, 0, 0, 0, 0 } } } }, + { MN_vsm3msg2, 0xda, 3, SPACE_0F38, None, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 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, + 1, 0, 0, 0, 0, 0 } } } }, + { MN_vsm4key4, 0xda, 3, SPACE_0F38, None, + { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, + 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, + 1, 1, 0, 0, 0, 0 } } } }, + { MN_vsm4rnds4, 0xda, 3, SPACE_0F38, None, + { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, + 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, + 1, 1, 0, 0, 0, 0 } } } }, { MN_kandb, 0x41, 3, SPACE_0F, None, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, @@ -42513,7 +45577,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42529,7 +45594,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42545,7 +45611,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42561,7 +45628,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42577,7 +45645,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42593,7 +45662,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42609,7 +45679,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42625,7 +45696,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42641,7 +45713,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42657,7 +45730,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42673,7 +45747,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -42687,7 +45762,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, @@ -42701,7 +45777,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42715,7 +45792,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -42729,7 +45807,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, @@ -42743,7 +45822,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42757,7 +45837,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42771,7 +45852,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42785,7 +45867,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42799,7 +45882,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42813,7 +45897,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 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, @@ -42829,7 +45914,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 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, @@ -42845,7 +45931,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 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, @@ -42861,7 +45948,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 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, @@ -42877,7 +45965,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -42891,9 +45980,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -42907,9 +45997,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -42923,9 +46014,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -42939,9 +46031,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -42953,9 +46046,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -42969,9 +46063,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -42985,9 +46080,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43001,9 +46097,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43017,9 +46114,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43033,9 +46131,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43051,7 +46150,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -43069,7 +46169,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -43087,7 +46188,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43103,7 +46205,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43119,7 +46222,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43135,7 +46239,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43151,7 +46256,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43167,7 +46273,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43183,7 +46290,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43199,7 +46307,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43215,7 +46324,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43231,7 +46341,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43247,7 +46358,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43263,7 +46375,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43279,7 +46392,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43295,7 +46409,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43311,7 +46426,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43327,7 +46443,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43343,7 +46460,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43359,7 +46477,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43375,7 +46494,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43391,7 +46511,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43407,7 +46528,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43423,7 +46545,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -43441,7 +46564,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -43459,7 +46583,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 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 +46598,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -43487,7 +46613,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43501,7 +46628,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43513,9 +46641,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43527,9 +46656,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43543,7 +46673,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -43557,7 +46688,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -43571,7 +46703,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -43585,7 +46718,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -43599,7 +46733,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -43613,7 +46748,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, @@ -43627,7 +46763,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -43641,7 +46778,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -43655,7 +46793,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -43669,7 +46808,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -43683,7 +46823,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, @@ -43697,7 +46838,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, @@ -43711,7 +46853,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -43725,7 +46868,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, @@ -43739,7 +46883,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -43753,7 +46898,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -43767,7 +46913,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -43781,7 +46928,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -43795,7 +46943,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, @@ -43809,7 +46958,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -43823,7 +46973,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -43837,7 +46988,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, @@ -43851,7 +47003,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -43865,7 +47018,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -43879,7 +47033,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, @@ -43893,7 +47048,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, @@ -43907,7 +47063,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43921,7 +47078,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43935,7 +47093,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43949,7 +47108,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43963,7 +47123,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43977,7 +47138,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -43991,7 +47153,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44005,7 +47168,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44019,7 +47183,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44033,7 +47198,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -44047,7 +47213,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -44059,9 +47226,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -44075,7 +47243,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44091,7 +47260,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44107,7 +47277,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44123,7 +47294,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44139,7 +47311,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44155,7 +47328,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44171,7 +47345,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44185,7 +47360,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44199,7 +47375,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44213,7 +47390,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44227,7 +47405,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44241,7 +47420,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44255,7 +47435,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -44269,7 +47450,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -44281,9 +47463,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -44297,7 +47480,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44311,7 +47495,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44325,7 +47510,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44339,7 +47525,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44353,7 +47540,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44367,7 +47555,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -44383,7 +47572,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -44399,7 +47589,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -44415,7 +47606,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -44431,7 +47623,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -44449,7 +47642,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -44467,7 +47661,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -44485,7 +47680,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -44503,7 +47699,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -44519,7 +47716,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -44533,9 +47731,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 1, 0, 0, 0, 0, @@ -44551,7 +47750,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -44569,7 +47769,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -44585,9 +47786,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 1, 0, 0, 0, 0, @@ -44605,7 +47807,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -44621,7 +47824,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -44635,9 +47839,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 1, 0, 0, 0, 0, @@ -44653,7 +47858,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -44671,7 +47877,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -44687,9 +47894,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 1, 0, 0, 0, 0, @@ -44705,9 +47913,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44721,9 +47930,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44737,9 +47947,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44753,9 +47964,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44769,9 +47981,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44785,9 +47998,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44801,9 +48015,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44817,9 +48032,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44833,9 +48049,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44849,9 +48066,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44865,9 +48083,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44881,9 +48100,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44897,9 +48117,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44913,9 +48134,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44929,9 +48151,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44945,9 +48168,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44961,9 +48185,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44977,9 +48202,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -44993,9 +48219,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45009,9 +48236,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45025,9 +48253,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45041,9 +48270,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45057,9 +48287,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45073,9 +48304,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45089,9 +48321,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45105,9 +48338,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45121,9 +48355,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45137,9 +48372,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45153,9 +48389,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45169,9 +48406,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45187,7 +48425,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45203,7 +48442,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45217,9 +48457,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45235,7 +48476,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45251,7 +48493,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45265,9 +48508,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45283,7 +48527,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45297,7 +48542,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45309,9 +48555,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45325,7 +48572,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45341,7 +48589,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45355,9 +48604,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45373,7 +48623,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -45391,7 +48642,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -45409,7 +48661,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -45427,7 +48680,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -45443,9 +48697,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45459,9 +48714,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45475,9 +48731,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45491,9 +48748,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45509,7 +48767,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45523,7 +48782,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45537,7 +48797,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45551,7 +48812,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45563,9 +48825,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45577,9 +48840,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, @@ -45595,7 +48859,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45609,7 +48874,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45625,7 +48891,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45641,7 +48908,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45657,7 +48925,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45673,7 +48942,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45689,7 +48959,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45705,7 +48976,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45721,7 +48993,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45737,7 +49010,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -45755,7 +49029,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -45773,7 +49048,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -45791,7 +49067,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -45809,7 +49086,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45825,7 +49103,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45841,7 +49120,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45857,7 +49137,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45873,7 +49154,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45889,7 +49171,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45905,7 +49188,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45921,7 +49205,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45937,7 +49222,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45953,7 +49239,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45969,7 +49256,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -45985,7 +49273,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -46001,7 +49290,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -46017,7 +49307,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -46033,7 +49324,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -46049,7 +49341,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -46065,7 +49358,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -46081,7 +49375,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -46097,7 +49392,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -46113,7 +49409,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -46129,7 +49426,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -46145,7 +49443,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -46161,7 +49460,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -46177,7 +49477,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -46193,7 +49494,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -46209,7 +49511,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -46225,7 +49528,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -46239,7 +49543,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -46253,7 +49558,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -46267,7 +49573,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -46281,7 +49588,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -46295,7 +49603,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -46309,7 +49618,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -46323,7 +49633,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -46337,7 +49648,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -46351,7 +49663,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -46365,7 +49678,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -46379,7 +49693,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -46393,7 +49708,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -46407,7 +49723,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -46421,7 +49738,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -46435,7 +49753,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -46449,7 +49768,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -46463,7 +49783,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -46477,7 +49798,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -46491,7 +49813,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 1, 0, 0, 0, 0, @@ -46505,7 +49828,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -46519,7 +49843,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -46533,7 +49858,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 1, 0, 0, 0, 0, @@ -46547,7 +49873,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -46561,7 +49888,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -46575,7 +49903,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 1, 0, 0, 0, 0, @@ -46589,7 +49918,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -46603,7 +49933,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -46617,7 +49948,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -46631,7 +49963,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -46645,7 +49978,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -46659,7 +49993,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -46673,7 +50008,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -46687,7 +50023,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -46701,7 +50038,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -46715,7 +50053,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -46729,7 +50068,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -46743,7 +50083,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -46757,7 +50098,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -46771,7 +50113,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -46785,7 +50128,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -46799,7 +50143,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -46813,7 +50158,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -46827,7 +50173,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -46841,7 +50188,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -46855,7 +50203,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -46871,7 +50220,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -46887,7 +50237,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -46903,7 +50254,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -46919,7 +50271,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -46935,7 +50288,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -46951,7 +50305,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -46965,7 +50320,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -46979,7 +50335,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -46995,7 +50352,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -47011,7 +50369,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -47025,7 +50384,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -47039,7 +50399,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -47055,7 +50416,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -47071,7 +50433,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -47089,7 +50452,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -47107,7 +50471,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -47125,7 +50490,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -47143,7 +50509,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -47157,7 +50524,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -47171,7 +50539,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -47185,7 +50554,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -47199,7 +50569,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -47213,7 +50584,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -47227,7 +50599,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -47241,7 +50614,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -47255,7 +50629,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -47269,7 +50644,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -47283,7 +50659,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -47299,7 +50676,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -47315,7 +50693,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -47329,7 +50708,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -47343,7 +50723,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -47359,7 +50740,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -47375,7 +50757,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vgatherpf0dps, 0xc6, 1, SPACE_0F38, 1, @@ -47387,7 +50770,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vgatherpf0qps, 0xc7, 1, SPACE_0F38, 1, @@ -47399,7 +50783,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vgatherpf0qpd, 0xc7, 1, SPACE_0F38, 1, @@ -47411,7 +50796,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vgatherpf1dpd, 0xc6, 1, SPACE_0F38, 2, @@ -47423,7 +50809,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vgatherpf1dps, 0xc6, 1, SPACE_0F38, 2, @@ -47435,7 +50822,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vgatherpf1qps, 0xc7, 1, SPACE_0F38, 2, @@ -47447,7 +50835,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vgatherpf1qpd, 0xc7, 1, SPACE_0F38, 2, @@ -47459,7 +50848,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vscatterpf0dpd, 0xc6, 1, SPACE_0F38, 5, @@ -47471,7 +50861,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vscatterpf0dps, 0xc6, 1, SPACE_0F38, 5, @@ -47483,7 +50874,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vscatterpf0qps, 0xc7, 1, SPACE_0F38, 5, @@ -47495,7 +50887,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vscatterpf0qpd, 0xc7, 1, SPACE_0F38, 5, @@ -47507,7 +50900,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vscatterpf1dpd, 0xc6, 1, SPACE_0F38, 6, @@ -47519,7 +50913,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vscatterpf1dps, 0xc6, 1, SPACE_0F38, 6, @@ -47531,7 +50926,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vscatterpf1qps, 0xc7, 1, SPACE_0F38, 6, @@ -47543,7 +50939,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_vscatterpf1qpd, 0xc7, 1, SPACE_0F38, 6, @@ -47555,7 +50952,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_prefetchwt1, 0x0d, 1, SPACE_0F, 2, @@ -47564,10 +50962,11 @@ static const insn_template i386_optab[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_clflushopt, 0xae, 1, SPACE_0F, 7, @@ -47576,10 +50975,11 @@ static const insn_template i386_optab[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xrstors, 0xc7, 1, SPACE_0F, 3, @@ -47588,10 +50988,11 @@ static const insn_template i386_optab[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_xrstors64, 0xc7, 1, SPACE_0F, 3, @@ -47600,10 +51001,11 @@ static const insn_template i386_optab[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_xsaves, 0xc7, 1, SPACE_0F, 5, @@ -47612,10 +51014,11 @@ static const insn_template i386_optab[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_xsaves64, 0xc7, 1, SPACE_0F, 5, @@ -47624,10 +51027,11 @@ static const insn_template i386_optab[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_xsavec, 0xc7, 1, SPACE_0F, 4, @@ -47636,10 +51040,11 @@ static const insn_template i386_optab[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_xsavec64, 0xc7, 1, SPACE_0F, 4, @@ -47648,10 +51053,11 @@ static const insn_template i386_optab[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_encls, 0x01cf, 0, SPACE_0F, None, @@ -47660,10 +51066,11 @@ static const insn_template i386_optab[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_enclu, 0x01d7, 0, SPACE_0F, None, @@ -47672,10 +51079,11 @@ static const insn_template i386_optab[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_enclv, 0x01c0, 0, SPACE_0F, None, @@ -47684,10 +51092,11 @@ static const insn_template i386_optab[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_kaddd, 0x4a, 3, SPACE_0F, None, @@ -47699,7 +51108,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -47715,7 +51125,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -47731,7 +51142,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -47747,7 +51159,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -47763,7 +51176,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -47779,7 +51193,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -47795,7 +51210,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -47809,7 +51225,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -47823,7 +51240,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -47837,7 +51255,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -47851,7 +51270,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -47865,7 +51285,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 1, 0, 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, @@ -47879,7 +51300,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -47893,7 +51315,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -47907,7 +51330,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -47923,7 +51347,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -47939,7 +51364,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -47953,7 +51379,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -47967,7 +51394,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -47981,7 +51409,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -47995,7 +51424,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -48011,7 +51441,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -48027,7 +51458,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -48043,7 +51475,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -48059,7 +51492,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -48075,7 +51509,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -48091,7 +51526,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 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, @@ -48107,7 +51543,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 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, @@ -48123,7 +51560,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 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, @@ -48139,7 +51577,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 1, 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, @@ -48155,7 +51594,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -48173,7 +51613,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48187,7 +51628,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48201,7 +51643,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48217,7 +51660,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48231,9 +51675,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48249,7 +51694,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48263,9 +51709,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48281,7 +51728,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48295,9 +51743,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48313,7 +51762,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48329,7 +51779,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48345,7 +51796,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48361,7 +51813,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48377,7 +51830,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -48395,7 +51849,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -48413,7 +51868,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -48431,7 +51887,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -48449,7 +51906,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48465,7 +51923,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48481,7 +51940,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48497,7 +51957,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48513,7 +51974,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48529,7 +51991,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48545,7 +52008,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48561,7 +52025,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48577,7 +52042,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48593,7 +52059,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48609,7 +52076,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48625,7 +52093,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48641,7 +52110,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48657,7 +52127,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48673,7 +52144,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48689,7 +52161,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48705,7 +52178,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48721,7 +52195,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48737,7 +52212,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48753,7 +52229,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48769,7 +52246,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48785,7 +52263,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48801,7 +52280,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, @@ -48815,7 +52295,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, @@ -48829,7 +52310,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -48843,7 +52325,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -48857,7 +52340,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -48871,7 +52355,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -48885,7 +52370,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -48899,7 +52385,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -48913,7 +52400,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -48927,7 +52415,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -48941,7 +52430,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -48955,7 +52445,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -48969,7 +52460,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -48983,7 +52475,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -48999,7 +52492,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49015,7 +52509,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49031,7 +52526,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49047,7 +52543,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -49063,7 +52560,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -49079,7 +52577,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -49093,7 +52592,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -49107,7 +52607,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49121,7 +52622,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49135,7 +52637,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49149,7 +52652,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49163,7 +52667,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -49177,7 +52682,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -49191,7 +52697,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49205,7 +52712,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49219,7 +52727,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49233,7 +52742,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49247,7 +52757,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49261,7 +52772,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49275,7 +52787,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49289,7 +52802,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49303,7 +52817,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49317,7 +52832,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49331,7 +52847,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49345,7 +52862,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49359,7 +52877,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49373,7 +52892,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49387,7 +52907,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49401,7 +52922,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49415,7 +52937,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49429,7 +52952,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49443,7 +52967,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49457,7 +52982,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49471,7 +52997,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49485,7 +53012,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49499,7 +53027,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49513,7 +53042,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49527,7 +53057,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49541,7 +53072,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49555,7 +53087,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49569,7 +53102,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49583,7 +53117,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -49599,7 +53134,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -49615,7 +53151,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -49633,7 +53170,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -49651,7 +53189,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -49667,7 +53206,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -49683,7 +53223,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -49701,7 +53242,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -49719,7 +53261,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -49735,7 +53278,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -49751,7 +53295,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -49767,7 +53312,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -49783,7 +53329,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -49799,7 +53346,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -49815,7 +53363,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -49831,7 +53380,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -49847,7 +53397,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -49863,7 +53414,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -49879,7 +53431,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -49895,7 +53448,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -49909,9 +53463,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, @@ -49927,7 +53482,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, @@ -49941,7 +53497,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, @@ -49955,7 +53512,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -49969,7 +53527,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -49983,7 +53542,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -49999,7 +53559,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -50017,7 +53578,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -50035,7 +53597,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -50053,7 +53616,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -50071,7 +53635,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -50087,7 +53652,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -50101,9 +53667,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 1, 0, 0, 0, 0, @@ -50119,7 +53686,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -50137,7 +53705,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -50153,9 +53722,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 1, 0, 0, 0, 0, @@ -50170,10 +53740,11 @@ static const insn_template i386_optab[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_vpmadd52huq, 0xb5, 3, SPACE_0F38, None, @@ -50182,10 +53753,11 @@ static const insn_template i386_optab[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50199,9 +53771,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50214,10 +53787,11 @@ static const insn_template i386_optab[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50231,9 +53805,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50247,9 +53822,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50263,9 +53839,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -50279,9 +53856,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -50295,9 +53873,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -50311,9 +53890,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -50327,9 +53907,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -50343,9 +53924,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -50359,9 +53941,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50373,9 +53956,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50387,9 +53971,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -50401,9 +53986,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -50415,9 +54001,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50429,9 +54016,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50443,9 +54031,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50459,9 +54048,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50475,9 +54065,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50491,9 +54082,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50507,9 +54099,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50523,9 +54116,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50539,9 +54133,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -50557,9 +54152,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -50575,9 +54171,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -50593,9 +54190,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 1, 0, 0, 0, @@ -50611,9 +54209,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 1, 0, @@ -50629,9 +54228,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, @@ -50647,9 +54247,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50663,9 +54264,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50679,9 +54281,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50695,9 +54298,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50711,9 +54315,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50727,9 +54332,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50743,9 +54349,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50759,9 +54366,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50775,9 +54383,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50791,9 +54400,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50807,9 +54417,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50823,9 +54434,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50839,9 +54451,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50855,9 +54468,112 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, + 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, + 1, 1, 0, 0, 0, 0 } } } }, + { MN_vpdpwuud, 0xd2, 3, SPACE_0F38, None, + { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, + 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, + 1, 1, 0, 0, 0, 0 } } } }, + { MN_vpdpwuuds, 0xd3, 3, SPACE_0F38, None, + { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, + 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, + 1, 1, 0, 0, 0, 0 } } } }, + { MN_vpdpwusd, 0xd2, 3, SPACE_0F38, None, + { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, + 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, + 1, 1, 0, 0, 0, 0 } } } }, + { MN_vpdpwusds, 0xd3, 3, SPACE_0F38, None, + { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, + 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, + 1, 1, 0, 0, 0, 0 } } } }, + { MN_vpdpwsud, 0xd2, 3, SPACE_0F38, None, + { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, + 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, + 1, 1, 0, 0, 0, 0 } } } }, + { MN_vpdpwsuds, 0xd3, 3, SPACE_0F38, None, + { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50871,9 +54587,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50885,9 +54602,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50899,9 +54617,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -50917,7 +54636,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_invlpgb, 0x01fe, 3, SPACE_0F, None, @@ -50929,7 +54649,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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, 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, 1, 0, 0, 0, @@ -50945,7 +54666,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_clzero, 0x01fc, 0, SPACE_0F, None, @@ -50956,8 +54678,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_clzero, 0x01fc, 1, SPACE_0F, None, @@ -50968,8 +54691,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_monitorx, 0x01fa, 0, SPACE_0F, None, @@ -50980,8 +54704,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_monitorx, 0x01fa, 3, SPACE_0F, None, @@ -50992,8 +54717,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, @@ -51008,8 +54734,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 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, 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, 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, 1, 0, @@ -51024,8 +54751,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_mwaitx, 0x01fb, 3, SPACE_0F, None, @@ -51036,8 +54764,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, @@ -51052,8 +54781,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_wrpkru, 0x01ef, 0, SPACE_0F, None, @@ -51064,8 +54794,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rdpid, 0xc7, 1, SPACE_0F, 7, @@ -51076,8 +54807,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rdpid, 0xc7, 1, SPACE_0F, 7, @@ -51088,8 +54820,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, 1, 0, 0 } }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_ptwrite, 0xae, 1, SPACE_0F, 4, @@ -51100,8 +54833,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 1, 0 } }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_ptwrite, 0xae, 1, SPACE_0F, 4, @@ -51112,8 +54846,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 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, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_incsspd, 0xae, 1, SPACE_0F, 5, @@ -51124,8 +54859,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_incsspq, 0xae, 1, SPACE_0F, 5, @@ -51136,8 +54872,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rdsspd, 0x1e, 1, SPACE_0F, 1, @@ -51148,8 +54885,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { MN_rdsspq, 0x1e, 1, SPACE_0F, 1, @@ -51160,8 +54898,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_saveprevssp, 0x01ea, 0, SPACE_0F, None, @@ -51172,8 +54911,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rstorssp, 0x01, 1, SPACE_0F, 5, @@ -51184,8 +54924,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_wrssd, 0xf6, 2, SPACE_0F38, None, @@ -51196,8 +54937,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -51210,8 +54952,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -51224,8 +54967,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, @@ -51238,8 +54982,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, @@ -51252,8 +54997,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_clrssbsy, 0xae, 1, SPACE_0F, 6, @@ -51264,8 +55010,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_endbr64, 0x1efa, 0, SPACE_0F, None, @@ -51276,8 +55023,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_endbr32, 0x1efb, 0, SPACE_0F, None, @@ -51288,8 +55036,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_notrack, 0x3e, 0, SPACE_BASE, None, @@ -51300,8 +55049,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_wbnoinvd, 0x09, 0, SPACE_0F, None, @@ -51312,8 +55062,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_pconfig, 0x01c5, 0, SPACE_0F, None, @@ -51324,8 +55075,22 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0 } } } }, + { MN_pbndkb, 0x01c7, 0, SPACE_0F, None, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_umonitor, 0xae, 1, SPACE_0F, 6, @@ -51336,8 +55101,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_tpause, 0xae, 1, SPACE_0F, 6, @@ -51348,8 +55114,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_tpause, 0xae, 3, SPACE_0F, 6, @@ -51360,8 +55127,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, @@ -51376,8 +55144,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_umwait, 0xae, 3, SPACE_0F, 6, @@ -51388,8 +55157,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, @@ -51405,7 +55175,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_movdiri, 0xf9, 2, SPACE_0F38, None, @@ -51417,7 +55188,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, @@ -51431,7 +55203,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -51443,9 +55216,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -51459,9 +55233,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -51473,9 +55248,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -51487,9 +55263,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -51501,9 +55278,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -51515,9 +55293,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 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, @@ -51529,9 +55308,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -51543,9 +55323,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -51557,9 +55338,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -51571,9 +55353,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -51585,9 +55368,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -51601,9 +55385,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -51615,9 +55400,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -51629,9 +55415,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -51643,9 +55430,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -51657,9 +55445,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -51671,9 +55460,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -51687,7 +55477,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -51701,7 +55492,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 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, 1, 1, 0, 1, 0, @@ -51713,9 +55505,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -51729,9 +55522,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -51747,7 +55541,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_psmash, 0x01ff, 0, SPACE_0F, None, @@ -51759,7 +55554,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 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 } } } }, { MN_psmash, 0x01ff, 1, SPACE_0F, None, @@ -51771,7 +55567,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 1, 0, 1, 0, 0 } }, { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_pvalidate, 0x01ff, 0, SPACE_0F, None, @@ -51783,7 +55580,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_pvalidate, 0x01ff, 3, SPACE_0F, None, @@ -51795,7 +55593,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 } }, + 0, 0, 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, 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, 1, 0, 0, 0, @@ -51811,7 +55610,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 } }, + 0, 0, 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, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rmpupdate, 0x01fe, 0, SPACE_0F, None, @@ -51823,7 +55623,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 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 } } } }, { MN_rmpupdate, 0x01fe, 2, SPACE_0F, None, @@ -51835,7 +55636,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 1, 0, 1, 0, 0 } }, { { { 0, 1, 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, 1, 0, @@ -51849,7 +55651,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 1, 0, 1, 0, 0 } }, { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rmpadjust, 0x01fe, 0, SPACE_0F, None, @@ -51861,7 +55664,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 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 } } } }, { MN_rmpadjust, 0x01fe, 3, SPACE_0F, None, @@ -51873,7 +55677,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 1, 0, 1, 0, 0 } }, { { { 0, 1, 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, 1, 0, @@ -51889,7 +55694,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 1, 0, 1, 0, 0 } }, { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rmpquery, 0x01fd, 0, SPACE_0F, None, @@ -51901,7 +55707,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rmpquery, 0x01fd, 3, SPACE_0F, None, @@ -51913,7 +55720,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, @@ -51929,7 +55737,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_serialize, 0x01e8, 0, SPACE_0F, None, @@ -51941,7 +55750,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xsusldtrk, 0x01e8, 0, SPACE_0F, None, @@ -51953,7 +55763,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_xresldtrk, 0x01e9, 0, SPACE_0F, None, @@ -51965,7 +55776,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_ldtilecfg, 0x49, 1, SPACE_0F38, 0, @@ -51976,8 +55788,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_sttilecfg, 0x49, 1, SPACE_0F38, 0, @@ -51988,8 +55801,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_tcmmimfp16ps, 0x6c, 3, SPACE_0F38, None, @@ -52000,8 +55814,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, @@ -52016,8 +55831,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, @@ -52032,8 +55848,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, @@ -52048,8 +55865,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 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, 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, @@ -52064,8 +55882,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -52080,8 +55899,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -52096,8 +55916,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -52112,8 +55933,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -52128,8 +55950,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52142,8 +55965,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52156,8 +55980,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, + 0, 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, 0, 0, 0, 1, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, @@ -52170,8 +55995,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_tilezero, 0x49, 1, SPACE_0F38, None, @@ -52182,8 +56008,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, + 0, 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, 0, 0, 0, 1, 0, 0 } } } }, { MN_loadiwkey, 0xdc, 2, SPACE_0F38, None, @@ -52195,7 +56022,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, @@ -52209,7 +56037,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, 1, 0, 0, 0, @@ -52223,7 +56052,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 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, 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, 1, 0, 0, 0, @@ -52237,7 +56067,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52251,7 +56082,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52265,7 +56097,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52279,7 +56112,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52293,7 +56127,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_aesdecwide128kl, 0xd8, 1, SPACE_0F38, 1, @@ -52305,7 +56140,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_aesencwide256kl, 0xd8, 1, SPACE_0F38, 2, @@ -52317,7 +56153,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_aesdecwide256kl, 0xd8, 1, SPACE_0F38, 3, @@ -52329,7 +56166,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_tdcall, 0x01cc, 0, SPACE_0F, None, @@ -52339,9 +56177,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_seamret, 0x01cd, 0, SPACE_0F, None, @@ -52351,9 +56190,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_seamops, 0x01ce, 0, SPACE_0F, None, @@ -52363,9 +56203,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_seamcall, 0x01cf, 0, SPACE_0F, None, @@ -52375,9 +56216,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_uiret, 0x01ec, 0, SPACE_0F, None, @@ -52389,7 +56231,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_clui, 0x01ee, 0, SPACE_0F, None, @@ -52401,7 +56244,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_stui, 0x01ef, 0, SPACE_0F, None, @@ -52413,7 +56257,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_testui, 0x01ed, 0, SPACE_0F, None, @@ -52425,7 +56270,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_senduipi, 0xc7, 1, SPACE_0F, 6, @@ -52437,7 +56283,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_hreset, 0xf0c0, 1, SPACE_0F3A, None, @@ -52449,7 +56296,8 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0 } } } }, { MN_vfcmaddcph, 0x56, 3, SPACE_EVEXMAP6, None, @@ -52459,9 +56307,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52475,9 +56324,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52491,9 +56341,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52507,9 +56358,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52523,9 +56375,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52539,9 +56392,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52555,9 +56409,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52571,9 +56426,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52587,9 +56443,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52603,9 +56460,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52619,9 +56477,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52635,9 +56494,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52651,9 +56511,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52667,9 +56528,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52683,9 +56545,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52699,9 +56562,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52715,9 +56579,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52731,9 +56596,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52747,9 +56613,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52763,9 +56630,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52779,9 +56647,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52795,9 +56664,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52811,9 +56681,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52827,9 +56698,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52843,9 +56715,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52859,9 +56732,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52875,9 +56749,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52891,9 +56766,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52907,9 +56783,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52923,9 +56800,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52939,9 +56817,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52955,9 +56834,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52971,9 +56851,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -52987,9 +56868,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53003,9 +56885,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53019,9 +56902,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53035,9 +56919,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53051,9 +56936,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53067,9 +56953,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53083,9 +56970,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53099,9 +56987,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53115,9 +57004,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53131,9 +57021,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53147,9 +57038,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53163,9 +57055,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53179,9 +57072,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53195,9 +57089,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53211,9 +57106,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53227,9 +57123,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53243,9 +57140,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53259,9 +57157,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53275,9 +57174,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53291,9 +57191,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53307,9 +57208,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53323,9 +57225,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 1, 0, 0, 0, 0, @@ -53341,9 +57244,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53357,9 +57261,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53373,9 +57278,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53389,9 +57295,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53405,9 +57312,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53421,9 +57329,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53437,9 +57346,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53453,9 +57363,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53469,9 +57380,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53485,9 +57397,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53501,9 +57414,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53517,9 +57431,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53533,9 +57448,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53549,9 +57465,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53565,9 +57482,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53581,9 +57499,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53597,9 +57516,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53613,9 +57533,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53629,9 +57550,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53645,9 +57567,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53661,9 +57584,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53677,9 +57601,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53693,9 +57618,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53709,9 +57635,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53725,9 +57652,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53741,9 +57669,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53757,9 +57686,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53773,9 +57703,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53789,9 +57720,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53805,9 +57737,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53821,9 +57754,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53837,9 +57771,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53853,9 +57788,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53869,9 +57805,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53885,9 +57822,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53901,9 +57839,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53917,9 +57856,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53933,9 +57873,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53949,9 +57890,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53965,9 +57907,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53981,9 +57924,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -53997,9 +57941,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54013,9 +57958,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54029,9 +57975,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54045,9 +57992,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54061,9 +58009,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54077,9 +58026,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 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, 0, 1, 0, 1, 0, 0, 0, 0, @@ -54095,9 +58045,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54109,9 +58060,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54123,9 +58075,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54137,9 +58090,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54151,9 +58105,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54165,9 +58120,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54179,9 +58135,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54193,9 +58150,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54207,9 +58165,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54221,9 +58180,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54235,9 +58195,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54249,9 +58210,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54263,9 +58225,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54277,9 +58240,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54291,9 +58255,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54305,9 +58270,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54319,9 +58285,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54333,9 +58300,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54347,9 +58315,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54361,9 +58330,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54375,9 +58345,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54389,9 +58360,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54403,9 +58375,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54417,9 +58390,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54431,9 +58405,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54445,9 +58420,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54459,9 +58435,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54473,9 +58450,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54487,9 +58465,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54501,9 +58480,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54515,9 +58495,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54529,9 +58510,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54543,9 +58525,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54557,9 +58540,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54571,9 +58555,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54585,9 +58570,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54599,9 +58585,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54613,9 +58600,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54627,9 +58615,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54641,9 +58630,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54655,9 +58645,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54669,9 +58660,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54683,9 +58675,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54697,9 +58690,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54711,9 +58705,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54725,9 +58720,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54739,9 +58735,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54753,9 +58750,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54767,9 +58765,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54781,9 +58780,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54797,9 +58797,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54813,9 +58814,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54829,9 +58831,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54845,9 +58848,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54861,9 +58865,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54877,9 +58882,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54893,9 +58899,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54909,9 +58916,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -54923,9 +58931,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54937,9 +58946,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54951,9 +58961,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54965,9 +58976,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54979,9 +58991,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -54993,9 +59006,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -55007,9 +59021,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -55021,9 +59036,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -55035,9 +59051,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -55049,9 +59066,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -55063,9 +59081,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -55077,9 +59096,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -55091,9 +59111,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -55105,9 +59126,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -55119,9 +59141,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -55133,9 +59156,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -55147,9 +59171,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -55161,9 +59186,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 1, 0, @@ -55175,9 +59201,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, @@ -55191,9 +59218,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, @@ -55207,9 +59235,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, @@ -55223,9 +59252,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, @@ -55239,9 +59269,10 @@ static 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, @@ -55255,9 +59286,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -55269,9 +59301,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 7, 0, 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, 1, 0, 0, 0, @@ -55283,9 +59316,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -55297,9 +59331,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -55313,9 +59348,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -55327,9 +59363,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -55343,9 +59380,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_prefetchit1, 0x18, 1, SPACE_0F, 6, @@ -55355,9 +59393,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_cmpoxadd, 0xe0, 3, SPACE_0F38, None, @@ -55367,9 +59406,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55383,9 +59423,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55399,9 +59440,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55415,9 +59457,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55431,9 +59474,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55447,9 +59491,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55463,9 +59508,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55479,9 +59525,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55495,9 +59542,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55511,9 +59559,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55527,9 +59576,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55543,9 +59593,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55559,9 +59610,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55575,9 +59627,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55591,9 +59644,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55607,9 +59661,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55623,9 +59678,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55639,9 +59695,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55655,9 +59712,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55671,9 +59729,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55687,9 +59746,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55703,9 +59763,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55719,9 +59780,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55735,9 +59797,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55751,9 +59814,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55767,9 +59831,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55783,9 +59848,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55799,9 +59865,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55815,9 +59882,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55831,9 +59899,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + 0, 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, 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, 0, 1, 0, @@ -55847,9 +59916,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_rdmsrlist, 0x01c6, 0, SPACE_0F, None, @@ -55859,9 +59929,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_wrmsrlist, 0x01c6, 0, SPACE_0F, None, @@ -55871,9 +59942,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_aadd, 0xfc, 2, SPACE_0F38, None, @@ -55883,9 +59955,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, @@ -55897,9 +59970,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, @@ -55911,9 +59985,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, @@ -55925,9 +60000,10 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, @@ -55940,8 +60016,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_lkgs, 0x00, 1, SPACE_0F, 6, @@ -55952,8 +60029,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } } } }, { MN_erets, 0x01ca, 0, SPACE_0F, None, @@ -55964,8 +60042,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, { MN_eretu, 0x01ca, 0, SPACE_0F, None, @@ -55976,8 +60055,9 @@ static const insn_template i386_optab[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0 } }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } }, }; @@ -57567,15 +61647,15 @@ static const insn_template *const i386_op_sets[] = i386_optab + 2938, i386_optab + 2939, i386_optab + 2940, + i386_optab + 2941, + i386_optab + 2942, i386_optab + 2943, + i386_optab + 2944, + i386_optab + 2945, i386_optab + 2946, i386_optab + 2947, i386_optab + 2948, - i386_optab + 2949, - i386_optab + 2950, i386_optab + 2951, - i386_optab + 2952, - i386_optab + 2953, i386_optab + 2954, i386_optab + 2955, i386_optab + 2956, @@ -57623,32 +61703,32 @@ static const insn_template *const i386_op_sets[] = i386_optab + 2998, i386_optab + 2999, i386_optab + 3000, + i386_optab + 3001, + i386_optab + 3002, i386_optab + 3003, + i386_optab + 3004, i386_optab + 3005, + i386_optab + 3006, + i386_optab + 3007, i386_optab + 3008, i386_optab + 3011, i386_optab + 3013, i386_optab + 3016, i386_optab + 3019, - i386_optab + 3022, - i386_optab + 3025, - i386_optab + 3026, - i386_optab + 3029, + i386_optab + 3021, + i386_optab + 3024, + i386_optab + 3027, i386_optab + 3030, - i386_optab + 3031, - i386_optab + 3032, i386_optab + 3033, i386_optab + 3034, + i386_optab + 3037, i386_optab + 3038, + i386_optab + 3039, i386_optab + 3040, - i386_optab + 3043, - i386_optab + 3044, - i386_optab + 3045, + i386_optab + 3041, + i386_optab + 3042, i386_optab + 3046, - i386_optab + 3047, i386_optab + 3048, - i386_optab + 3049, - i386_optab + 3050, i386_optab + 3051, i386_optab + 3052, i386_optab + 3053, @@ -57727,6 +61807,7 @@ static const insn_template *const i386_op_sets[] = i386_optab + 3126, i386_optab + 3127, i386_optab + 3128, + i386_optab + 3129, i386_optab + 3130, i386_optab + 3131, i386_optab + 3132, @@ -57734,7 +61815,6 @@ static const insn_template *const i386_op_sets[] = i386_optab + 3134, i386_optab + 3135, i386_optab + 3136, - i386_optab + 3137, i386_optab + 3138, i386_optab + 3139, i386_optab + 3140, @@ -57767,33 +61847,33 @@ static const insn_template *const i386_op_sets[] = i386_optab + 3167, i386_optab + 3168, i386_optab + 3169, + i386_optab + 3170, + i386_optab + 3171, i386_optab + 3172, + i386_optab + 3173, + i386_optab + 3174, i386_optab + 3175, - i386_optab + 3178, - i386_optab + 3181, - i386_optab + 3184, - i386_optab + 3187, - i386_optab + 3190, - i386_optab + 3193, - i386_optab + 3196, - i386_optab + 3199, - i386_optab + 3202, - i386_optab + 3205, - i386_optab + 3208, - i386_optab + 3211, - i386_optab + 3214, - i386_optab + 3215, + i386_optab + 3176, + i386_optab + 3177, + i386_optab + 3180, + i386_optab + 3183, + i386_optab + 3186, + i386_optab + 3189, + i386_optab + 3192, + i386_optab + 3195, + i386_optab + 3198, + i386_optab + 3201, + i386_optab + 3204, + i386_optab + 3207, + i386_optab + 3210, + i386_optab + 3213, i386_optab + 3216, - i386_optab + 3217, - i386_optab + 3218, - i386_optab + 3220, - i386_optab + 3221, + i386_optab + 3219, i386_optab + 3222, i386_optab + 3223, i386_optab + 3224, i386_optab + 3225, i386_optab + 3226, - i386_optab + 3227, i386_optab + 3228, i386_optab + 3229, i386_optab + 3230, @@ -57848,15 +61928,15 @@ static const insn_template *const i386_op_sets[] = i386_optab + 3279, i386_optab + 3280, i386_optab + 3281, + i386_optab + 3282, + i386_optab + 3283, i386_optab + 3284, + i386_optab + 3285, + i386_optab + 3286, i386_optab + 3287, i386_optab + 3288, i386_optab + 3289, - i386_optab + 3290, - i386_optab + 3291, i386_optab + 3292, - i386_optab + 3293, - i386_optab + 3294, i386_optab + 3295, i386_optab + 3296, i386_optab + 3297, @@ -57912,16 +61992,16 @@ static const insn_template *const i386_op_sets[] = i386_optab + 3347, i386_optab + 3348, i386_optab + 3349, + i386_optab + 3350, + i386_optab + 3351, i386_optab + 3352, + i386_optab + 3353, + i386_optab + 3354, i386_optab + 3355, - i386_optab + 3358, - i386_optab + 3359, + i386_optab + 3356, + i386_optab + 3357, i386_optab + 3360, - i386_optab + 3361, - i386_optab + 3362, i386_optab + 3363, - i386_optab + 3364, - i386_optab + 3365, i386_optab + 3366, i386_optab + 3367, i386_optab + 3368, @@ -57931,37 +62011,37 @@ static const insn_template *const i386_op_sets[] = i386_optab + 3372, i386_optab + 3373, i386_optab + 3374, + i386_optab + 3375, + i386_optab + 3376, i386_optab + 3377, + i386_optab + 3378, + i386_optab + 3379, i386_optab + 3380, i386_optab + 3381, i386_optab + 3382, i386_optab + 3385, - i386_optab + 3386, - i386_optab + 3387, i386_optab + 3388, i386_optab + 3389, - i386_optab + 3392, + i386_optab + 3390, + i386_optab + 3393, + i386_optab + 3394, i386_optab + 3395, - i386_optab + 3398, - i386_optab + 3399, + i386_optab + 3396, + i386_optab + 3397, i386_optab + 3400, - i386_optab + 3401, - i386_optab + 3402, i386_optab + 3403, - i386_optab + 3404, - i386_optab + 3405, i386_optab + 3406, i386_optab + 3407, i386_optab + 3408, + i386_optab + 3409, i386_optab + 3410, + i386_optab + 3411, i386_optab + 3412, i386_optab + 3413, i386_optab + 3414, i386_optab + 3415, i386_optab + 3416, - i386_optab + 3417, i386_optab + 3418, - i386_optab + 3419, i386_optab + 3420, i386_optab + 3421, i386_optab + 3422, @@ -57980,15 +62060,15 @@ static const insn_template *const i386_op_sets[] = i386_optab + 3435, i386_optab + 3436, i386_optab + 3437, + i386_optab + 3438, i386_optab + 3439, + i386_optab + 3440, i386_optab + 3441, i386_optab + 3442, i386_optab + 3443, i386_optab + 3444, i386_optab + 3445, - i386_optab + 3446, i386_optab + 3447, - i386_optab + 3448, i386_optab + 3449, i386_optab + 3450, i386_optab + 3451, @@ -58007,86 +62087,86 @@ static const insn_template *const i386_op_sets[] = i386_optab + 3464, i386_optab + 3465, i386_optab + 3466, + i386_optab + 3467, i386_optab + 3468, + i386_optab + 3469, i386_optab + 3470, + i386_optab + 3471, i386_optab + 3472, + i386_optab + 3473, i386_optab + 3474, - i386_optab + 3475, i386_optab + 3476, - i386_optab + 3477, i386_optab + 3478, - i386_optab + 3479, i386_optab + 3480, - i386_optab + 3481, i386_optab + 3482, i386_optab + 3483, + i386_optab + 3484, i386_optab + 3485, i386_optab + 3486, + i386_optab + 3487, i386_optab + 3488, + i386_optab + 3489, + i386_optab + 3490, i386_optab + 3491, + i386_optab + 3492, i386_optab + 3493, i386_optab + 3494, i386_optab + 3495, + i386_optab + 3496, i386_optab + 3497, i386_optab + 3499, i386_optab + 3500, - i386_optab + 3501, i386_optab + 3502, - i386_optab + 3503, - i386_optab + 3504, i386_optab + 3505, - i386_optab + 3506, i386_optab + 3507, i386_optab + 3508, i386_optab + 3509, - i386_optab + 3510, i386_optab + 3511, - i386_optab + 3512, i386_optab + 3513, i386_optab + 3514, i386_optab + 3515, i386_optab + 3516, i386_optab + 3517, + i386_optab + 3518, i386_optab + 3519, + i386_optab + 3520, i386_optab + 3521, i386_optab + 3522, i386_optab + 3523, i386_optab + 3524, i386_optab + 3525, + i386_optab + 3526, + i386_optab + 3527, + i386_optab + 3528, + i386_optab + 3529, i386_optab + 3530, + i386_optab + 3531, i386_optab + 3532, i386_optab + 3534, - i386_optab + 3535, i386_optab + 3536, i386_optab + 3537, i386_optab + 3538, i386_optab + 3539, i386_optab + 3540, - i386_optab + 3541, - i386_optab + 3542, - i386_optab + 3543, - i386_optab + 3544, i386_optab + 3545, - i386_optab + 3546, - i386_optab + 3548, + i386_optab + 3547, + i386_optab + 3549, + i386_optab + 3550, i386_optab + 3551, + i386_optab + 3552, + i386_optab + 3553, i386_optab + 3554, + i386_optab + 3555, + i386_optab + 3556, i386_optab + 3557, + i386_optab + 3558, i386_optab + 3559, i386_optab + 3560, i386_optab + 3561, - i386_optab + 3562, i386_optab + 3563, - i386_optab + 3564, - i386_optab + 3565, i386_optab + 3566, - i386_optab + 3567, - i386_optab + 3568, i386_optab + 3569, - i386_optab + 3570, - i386_optab + 3571, i386_optab + 3572, - i386_optab + 3573, i386_optab + 3574, i386_optab + 3575, i386_optab + 3576, @@ -58215,70 +62295,70 @@ static const insn_template *const i386_op_sets[] = i386_optab + 3699, i386_optab + 3700, i386_optab + 3701, + i386_optab + 3702, + i386_optab + 3703, i386_optab + 3704, i386_optab + 3705, i386_optab + 3706, + i386_optab + 3707, + i386_optab + 3708, i386_optab + 3709, i386_optab + 3710, i386_optab + 3711, + i386_optab + 3712, i386_optab + 3713, i386_optab + 3714, i386_optab + 3715, i386_optab + 3716, - i386_optab + 3718, i386_optab + 3719, i386_optab + 3720, i386_optab + 3721, - i386_optab + 3723, i386_optab + 3724, i386_optab + 3725, i386_optab + 3726, + i386_optab + 3728, i386_optab + 3729, i386_optab + 3730, i386_optab + 3731, - i386_optab + 3732, i386_optab + 3733, + i386_optab + 3734, + i386_optab + 3735, i386_optab + 3736, + i386_optab + 3738, i386_optab + 3739, - i386_optab + 3742, + i386_optab + 3740, + i386_optab + 3741, + i386_optab + 3744, i386_optab + 3745, + i386_optab + 3746, + i386_optab + 3747, i386_optab + 3748, - i386_optab + 3749, - i386_optab + 3750, i386_optab + 3751, - i386_optab + 3752, i386_optab + 3754, - i386_optab + 3756, i386_optab + 3757, - i386_optab + 3758, - i386_optab + 3759, - i386_optab + 3762, + i386_optab + 3760, + i386_optab + 3763, + i386_optab + 3764, i386_optab + 3765, - i386_optab + 3768, + i386_optab + 3766, + i386_optab + 3767, + i386_optab + 3769, i386_optab + 3771, + i386_optab + 3772, + i386_optab + 3773, i386_optab + 3774, - i386_optab + 3775, - i386_optab + 3776, i386_optab + 3777, - i386_optab + 3779, i386_optab + 3780, - i386_optab + 3781, - i386_optab + 3782, - i386_optab + 3784, - i386_optab + 3785, + i386_optab + 3783, i386_optab + 3786, - i386_optab + 3787, - i386_optab + 3788, i386_optab + 3789, i386_optab + 3790, i386_optab + 3791, i386_optab + 3792, - i386_optab + 3793, i386_optab + 3794, i386_optab + 3795, i386_optab + 3796, i386_optab + 3797, - i386_optab + 3798, i386_optab + 3799, i386_optab + 3800, i386_optab + 3801, @@ -58308,9 +62388,24 @@ static const insn_template *const i386_op_sets[] = i386_optab + 3825, i386_optab + 3826, i386_optab + 3827, + i386_optab + 3828, i386_optab + 3829, i386_optab + 3830, i386_optab + 3831, + i386_optab + 3832, + i386_optab + 3833, + i386_optab + 3834, + i386_optab + 3835, + i386_optab + 3836, + i386_optab + 3837, + i386_optab + 3838, + i386_optab + 3839, + i386_optab + 3840, + i386_optab + 3841, + i386_optab + 3842, + i386_optab + 3844, + i386_optab + 3845, + i386_optab + 3846, }; /* i386 mnemonics table. */ @@ -58323,6 +62418,8 @@ const char i386_mnemonics[] = "\0""fld1" "\0""ud1" "\0""sha1msg1" + "\0""vsha512msg1" + "\0""vsm3msg1" "\0""sha256msg1" "\0""fprem1" "\0""f2xm1" @@ -58343,8 +62440,12 @@ const char i386_mnemonics[] = "\0""ud2" "\0""fldlg2" "\0""sha1msg2" + "\0""vsha512msg2" + "\0""vsm3msg2" "\0""sha256msg2" "\0""fldln2" + "\0""vsha512rnds2" + "\0""vsm3rnds2" "\0""sha256rnds2" "\0""prefetcht2" "\0""pfrcpit2" @@ -58370,6 +62471,7 @@ const char i386_mnemonics[] = "\0""vmovdqu64" "\0""rex64" "\0""sha1rnds4" + "\0""vsm4rnds4" "\0""vshuff32x4" "\0""vextractf32x4" "\0""vinsertf32x4" @@ -58384,6 +62486,7 @@ const char i386_mnemonics[] = "\0""vextracti64x4" "\0""vinserti64x4" "\0""vbroadcasti64x4" + "\0""vsm4key4" "\0""data16" "\0""vcvtne2ps2bf16" "\0""vcvtneps2bf16" @@ -58460,6 +62563,7 @@ const char i386_mnemonics[] = "\0""invlpgb" "\0""vpavgb" "\0""jb" + "\0""pbndkb" "\0""vpmovmskb" "\0""vpshlb" "\0""kshiftlb" @@ -58954,6 +63058,7 @@ const char i386_mnemonics[] = "\0""vbroadcastsd" "\0""vpdpbusd" "\0""tdpbusd" + "\0""vpdpwusd" "\0""vdivsd" "\0""vmovsd" "\0""vpmaxsd" @@ -58990,12 +63095,14 @@ const char i386_mnemonics[] = "\0""vpcmpequd" "\0""vpdpbsud" "\0""tdpbsud" + "\0""vpdpwsud" "\0""vpcomgtud" "\0""vpcomltud" "\0""vpcmpnltud" "\0""vpcmpltud" "\0""vpdpbuud" "\0""tdpbuud" + "\0""vpdpwuud" "\0""vpmaxud" "\0""vpsravd" "\0""vpshldvd" @@ -59679,8 +63786,11 @@ const char i386_mnemonics[] = "\0""vp4dpwssds" "\0""vpdpwssds" "\0""vpdpbusds" + "\0""vpdpwusds" "\0""vpdpbsuds" + "\0""vpdpwsuds" "\0""vpdpbuuds" + "\0""vpdpwuuds" "\0""les" "\0""xsaves" "\0""lfs" diff --git a/opcodes/po/POTFILES.in b/opcodes/po/POTFILES.in index c303d98f1f1..0167a879f79 100644 --- a/opcodes/po/POTFILES.in +++ b/opcodes/po/POTFILES.in @@ -16,13 +16,8 @@ arc-opc.c arm-dis.c avr-dis.c bfin-dis.c -bpf-asm.c -bpf-desc.c -bpf-desc.h bpf-dis.c -bpf-ibld.c bpf-opc.c -bpf-opc.h cgen-asm.c cgen-bitset.c cgen-dis.c diff --git a/opcodes/po/opcodes.pot b/opcodes/po/opcodes.pot index 7f4b825b017..6c24831958b 100644 --- a/opcodes/po/opcodes.pot +++ b/opcodes/po/opcodes.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2023-07-30 14:35+0100\n" +"POT-Creation-Date: 2023-07-03 11:41+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/opcodes/riscv-dis.c b/opcodes/riscv-dis.c index 827d9b67437..138eed8d31f 100644 --- a/opcodes/riscv-dis.c +++ b/opcodes/riscv-dis.c @@ -614,6 +614,20 @@ print_insn_args (const char *oparg, insn_t l, bfd_vma pc, disassemble_info *info goto undefined_modifier; } break; + case 'c': /* Zcb extension 16 bits length instruction fields. */ + switch (*++oparg) + { + case 'b': + print (info->stream, dis_style_immediate, "%d", + (int)EXTRACT_ZCB_BYTE_UIMM (l)); + break; + case 'h': + print (info->stream, dis_style_immediate, "%d", + (int)EXTRACT_ZCB_HALFWORD_UIMM (l)); + break; + default: break; + } + break; default: goto undefined_modifier; } @@ -925,7 +939,7 @@ riscv_search_mapping_symbol (bfd_vma memaddr, } /* We can not find the suitable mapping symbol above. Therefore, we - look forwards and try to find it again, but don't go pass the start + look forwards and try to find it again, but don't go past the start of the section. Otherwise a data section without mapping symbols can pick up a text mapping symbol of a preceeding section. */ if (!found) diff --git a/opcodes/riscv-opc.c b/opcodes/riscv-opc.c index 533e3f4a079..6a854736fec 100644 --- a/opcodes/riscv-opc.c +++ b/opcodes/riscv-opc.c @@ -380,12 +380,14 @@ const struct riscv_opcode riscv_opcodes[] = {"mv", 0, INSN_CLASS_I, "d,s", MATCH_ADDI, MASK_ADDI|MASK_IMM, match_opcode, INSN_ALIAS }, {"move", 0, INSN_CLASS_C, "d,CV", MATCH_C_MV, MASK_C_MV, match_c_add, INSN_ALIAS }, {"move", 0, INSN_CLASS_I, "d,s", MATCH_ADDI, MASK_ADDI|MASK_IMM, match_opcode, INSN_ALIAS }, +{"zext.b", 0, INSN_CLASS_ZCB, "Cs,Cw", MATCH_C_ZEXT_B, MASK_C_ZEXT_B, match_opcode, INSN_ALIAS }, {"zext.b", 0, INSN_CLASS_I, "d,s", MATCH_ANDI|ENCODE_ITYPE_IMM (255), MASK_ANDI | MASK_IMM, match_opcode, INSN_ALIAS }, {"and", 0, INSN_CLASS_C, "Cs,Cw,Ct", MATCH_C_AND, MASK_C_AND, match_opcode, INSN_ALIAS }, {"and", 0, INSN_CLASS_C, "Cs,Ct,Cw", MATCH_C_AND, MASK_C_AND, match_opcode, INSN_ALIAS }, {"and", 0, INSN_CLASS_C, "Cs,Cw,Co", MATCH_C_ANDI, MASK_C_ANDI, match_opcode, INSN_ALIAS }, {"and", 0, INSN_CLASS_I, "d,s,t", MATCH_AND, MASK_AND, match_opcode, 0 }, {"and", 0, INSN_CLASS_I, "d,s,j", MATCH_ANDI, MASK_ANDI, match_opcode, INSN_ALIAS }, +{"andi", 0, INSN_CLASS_ZCB, "Cs,Cw,Wcf",MATCH_C_ZEXT_B, MASK_C_ZEXT_B, match_opcode, INSN_ALIAS }, {"andi", 0, INSN_CLASS_C, "Cs,Cw,Co", MATCH_C_ANDI, MASK_C_ANDI, match_opcode, INSN_ALIAS }, {"andi", 0, INSN_CLASS_I, "d,s,j", MATCH_ANDI, MASK_ANDI, match_opcode, 0 }, {"beqz", 0, INSN_CLASS_C, "Cs,Cp", MATCH_C_BEQZ, MASK_C_BEQZ, match_opcode, INSN_ALIAS|INSN_CONDBRANCH }, @@ -449,16 +451,20 @@ const struct riscv_opcode riscv_opcodes[] = {"sub", 0, INSN_CLASS_I, "d,s,t", MATCH_SUB, MASK_SUB, match_opcode, 0 }, {"lb", 0, INSN_CLASS_I, "d,o(s)", MATCH_LB, MASK_LB, match_opcode, INSN_DREF|INSN_1_BYTE }, {"lb", 0, INSN_CLASS_I, "d,A", 0, (int) M_LB, match_never, INSN_MACRO }, +{"lbu", 0, INSN_CLASS_ZCB, "Ct,Wcb(Cs)", MATCH_C_LBU, MASK_C_LBU, match_opcode, INSN_ALIAS|INSN_DREF|INSN_1_BYTE }, {"lbu", 0, INSN_CLASS_I, "d,o(s)", MATCH_LBU, MASK_LBU, match_opcode, INSN_DREF|INSN_1_BYTE }, {"lbu", 0, INSN_CLASS_I, "d,A", 0, (int) M_LBU, match_never, INSN_MACRO }, +{"lh", 0, INSN_CLASS_ZCB, "Ct,Wch(Cs)", MATCH_C_LH, MASK_C_LH, match_opcode, INSN_ALIAS|INSN_DREF|INSN_2_BYTE }, {"lh", 0, INSN_CLASS_I, "d,o(s)", MATCH_LH, MASK_LH, match_opcode, INSN_DREF|INSN_2_BYTE }, {"lh", 0, INSN_CLASS_I, "d,A", 0, (int) M_LH, match_never, INSN_MACRO }, +{"lhu", 0, INSN_CLASS_ZCB, "Ct,Wch(Cs)", MATCH_C_LHU, MASK_C_LHU, match_opcode, INSN_ALIAS|INSN_DREF|INSN_2_BYTE }, {"lhu", 0, INSN_CLASS_I, "d,o(s)", MATCH_LHU, MASK_LHU, match_opcode, INSN_DREF|INSN_2_BYTE }, {"lhu", 0, INSN_CLASS_I, "d,A", 0, (int) M_LHU, match_never, INSN_MACRO }, {"lw", 0, INSN_CLASS_C, "d,Cm(Cc)", MATCH_C_LWSP, MASK_C_LWSP, match_rd_nonzero, INSN_ALIAS|INSN_DREF|INSN_4_BYTE }, {"lw", 0, INSN_CLASS_C, "Ct,Ck(Cs)", MATCH_C_LW, MASK_C_LW, match_opcode, INSN_ALIAS|INSN_DREF|INSN_4_BYTE }, {"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_ZCB, "Cs,Cw", MATCH_C_NOT, MASK_C_NOT, match_opcode, INSN_ALIAS }, {"not", 0, INSN_CLASS_I, "d,s", MATCH_XORI|MASK_IMM, MASK_XORI|MASK_IMM, match_opcode, INSN_ALIAS }, {"or", 0, INSN_CLASS_I, "d,s,j", MATCH_ORI, MASK_ORI, match_opcode, INSN_ALIAS }, {"or", 0, INSN_CLASS_C, "Cs,Cw,Ct", MATCH_C_OR, MASK_C_OR, match_opcode, INSN_ALIAS }, @@ -478,8 +484,10 @@ const struct riscv_opcode riscv_opcodes[] = {"sltu", 0, INSN_CLASS_I, "d,s,j", MATCH_SLTIU, MASK_SLTIU, match_opcode, INSN_ALIAS }, {"sgt", 0, INSN_CLASS_I, "d,t,s", MATCH_SLT, MASK_SLT, match_opcode, INSN_ALIAS }, {"sgtu", 0, INSN_CLASS_I, "d,t,s", MATCH_SLTU, MASK_SLTU, match_opcode, INSN_ALIAS }, +{"sb", 0, INSN_CLASS_ZCB, "Ct,Wcb(Cs)", MATCH_C_SB, MASK_C_SB, match_opcode, INSN_DREF|INSN_1_BYTE|INSN_ALIAS }, {"sb", 0, INSN_CLASS_I, "t,q(s)", MATCH_SB, MASK_SB, match_opcode, INSN_DREF|INSN_1_BYTE }, {"sb", 0, INSN_CLASS_I, "t,A,s", 0, (int) M_SB, match_never, INSN_MACRO }, +{"sh", 0, INSN_CLASS_ZCB, "Ct,Wch(Cs)", MATCH_C_SH, MASK_C_SH, match_opcode, INSN_DREF|INSN_2_BYTE|INSN_ALIAS }, {"sh", 0, INSN_CLASS_I, "t,q(s)", MATCH_SH, MASK_SH, match_opcode, INSN_DREF|INSN_2_BYTE }, {"sh", 0, INSN_CLASS_I, "t,A,s", 0, (int) M_SH, match_never, INSN_MACRO }, {"sw", 0, INSN_CLASS_C, "CV,CM(Cc)", MATCH_C_SWSP, MASK_C_SWSP, match_opcode, INSN_ALIAS|INSN_DREF|INSN_4_BYTE }, @@ -626,6 +634,7 @@ const struct riscv_opcode riscv_opcodes[] = {"amominu.d.aqrl", 64, INSN_CLASS_A, "d,t,0(s)", MATCH_AMOMINU_D|MASK_AQRL, MASK_AMOMINU_D|MASK_AQRL, match_opcode, INSN_DREF|INSN_8_BYTE }, /* Multiply/Divide instruction subset. */ +{"mul", 0, INSN_CLASS_ZCB_AND_ZMMUL, "Cs,Cw,Ct", MATCH_C_MUL, MASK_C_MUL, match_opcode, INSN_ALIAS }, {"mul", 0, INSN_CLASS_ZMMUL, "d,s,t", MATCH_MUL, MASK_MUL, match_opcode, 0 }, {"mulh", 0, INSN_CLASS_ZMMUL, "d,s,t", MATCH_MULH, MASK_MULH, match_opcode, 0 }, {"mulhu", 0, INSN_CLASS_ZMMUL, "d,s,t", MATCH_MULHU, MASK_MULHU, match_opcode, 0 }, @@ -1016,10 +1025,13 @@ const struct riscv_opcode riscv_opcodes[] = {"max", 0, INSN_CLASS_ZBB, "d,s,t", MATCH_MAX, MASK_MAX, match_opcode, 0 }, {"minu", 0, INSN_CLASS_ZBB, "d,s,t", MATCH_MINU, MASK_MINU, match_opcode, 0 }, {"maxu", 0, INSN_CLASS_ZBB, "d,s,t", MATCH_MAXU, MASK_MAXU, match_opcode, 0 }, +{"sext.b", 0, INSN_CLASS_ZCB_AND_ZBB, "Cs,Cw", MATCH_C_SEXT_B, MASK_C_SEXT_B, match_opcode, INSN_ALIAS }, {"sext.b", 0, INSN_CLASS_ZBB, "d,s", MATCH_SEXT_B, MASK_SEXT_B, match_opcode, 0 }, {"sext.b", 0, INSN_CLASS_I, "d,s", 0, (int) M_SEXTB, match_never, INSN_MACRO }, +{"sext.h", 0, INSN_CLASS_ZCB_AND_ZBB, "Cs,Cw", MATCH_C_SEXT_H, MASK_C_SEXT_H, match_opcode, INSN_ALIAS }, {"sext.h", 0, INSN_CLASS_ZBB, "d,s", MATCH_SEXT_H, MASK_SEXT_H, match_opcode, 0 }, {"sext.h", 0, INSN_CLASS_I, "d,s", 0, (int) M_SEXTH, match_never, INSN_MACRO }, +{"zext.h", 0, INSN_CLASS_ZCB_AND_ZBB, "Cs,Cw", MATCH_C_ZEXT_H, MASK_C_ZEXT_H, match_opcode, INSN_ALIAS }, {"zext.h", 32, INSN_CLASS_ZBB, "d,s", MATCH_PACK, MASK_PACK | MASK_RS2, match_opcode, 0 }, {"zext.h", 64, INSN_CLASS_ZBB, "d,s", MATCH_PACKW, MASK_PACKW | MASK_RS2, match_opcode, 0 }, {"zext.h", 0, INSN_CLASS_I, "d,s", 0, (int) M_ZEXTH, match_never, INSN_MACRO }, @@ -1055,6 +1067,7 @@ const struct riscv_opcode riscv_opcodes[] = {"sh1add.uw", 64, INSN_CLASS_ZBA, "d,s,t", MATCH_SH1ADD_UW, MASK_SH1ADD_UW, match_opcode, 0 }, {"sh2add.uw", 64, INSN_CLASS_ZBA, "d,s,t", MATCH_SH2ADD_UW, MASK_SH2ADD_UW, match_opcode, 0 }, {"sh3add.uw", 64, INSN_CLASS_ZBA, "d,s,t", MATCH_SH3ADD_UW, MASK_SH3ADD_UW, match_opcode, 0 }, +{"zext.w", 64, INSN_CLASS_ZCB_AND_ZBA, "Cs,Cw", MATCH_C_ZEXT_W, MASK_C_ZEXT_W, match_opcode, INSN_ALIAS }, {"zext.w", 64, INSN_CLASS_ZBA, "d,s", MATCH_ADD_UW, MASK_ADD_UW | MASK_RS2, match_opcode, INSN_ALIAS }, {"zext.w", 64, INSN_CLASS_I, "d,s", 0, (int) M_ZEXTW, match_never, INSN_MACRO }, {"add.uw", 64, INSN_CLASS_ZBA, "d,s,t", MATCH_ADD_UW, MASK_ADD_UW, match_opcode, 0 }, @@ -1939,6 +1952,21 @@ const struct riscv_opcode riscv_opcodes[] = {"vsm3c.vi", 0, INSN_CLASS_ZVKSH, "Vd,Vt,Vj", MATCH_VSM3C_VI, MASK_VSM3C_VI, match_opcode, 0}, {"vsm3me.vv", 0, INSN_CLASS_ZVKSH, "Vd,Vt,Vs", MATCH_VSM3ME_VV, MASK_VSM3ME_VV, match_opcode, 0}, +/* ZCB instructions. */ +{"c.lbu", 0, INSN_CLASS_ZCB, "Ct,Wcb(Cs)", MATCH_C_LBU, MASK_C_LBU, match_opcode, INSN_DREF|INSN_1_BYTE }, +{"c.lhu", 0, INSN_CLASS_ZCB, "Ct,Wch(Cs)", MATCH_C_LHU, MASK_C_LHU, match_opcode, INSN_DREF|INSN_2_BYTE }, +{"c.lh", 0, INSN_CLASS_ZCB, "Ct,Wch(Cs)", MATCH_C_LH, MASK_C_LH, match_opcode, INSN_DREF|INSN_2_BYTE }, +{"c.sb", 0, INSN_CLASS_ZCB, "Ct,Wcb(Cs)", MATCH_C_SB, MASK_C_SB, match_opcode, INSN_DREF|INSN_1_BYTE }, +{"c.sh", 0, INSN_CLASS_ZCB, "Ct,Wch(Cs)", MATCH_C_SH, MASK_C_SH, match_opcode, INSN_DREF|INSN_2_BYTE }, +{"c.not", 0, INSN_CLASS_ZCB, "Cs", MATCH_C_NOT, MASK_C_NOT, match_opcode, 0 }, +{"c.mul", 0, INSN_CLASS_ZCB_AND_ZMMUL, "Cs,Ct", MATCH_C_MUL, MASK_C_MUL, match_opcode, 0 }, +{"c.sext.b", 0, INSN_CLASS_ZCB_AND_ZBB, "Cs", MATCH_C_SEXT_B, MASK_C_SEXT_B, match_opcode, 0 }, +{"c.sext.h", 0, INSN_CLASS_ZCB_AND_ZBB, "Cs", MATCH_C_SEXT_H, MASK_C_SEXT_H, match_opcode, 0 }, +{"c.zext.h", 0, INSN_CLASS_ZCB_AND_ZBB, "Cs", MATCH_C_ZEXT_H, MASK_C_ZEXT_H, match_opcode, 0 }, +{"c.zext.w", 64, INSN_CLASS_ZCB_AND_ZBA, "Cs", MATCH_C_ZEXT_W, MASK_C_ZEXT_W, match_opcode, 0 }, +{"c.zext.b", 0, INSN_CLASS_ZCB, "Cs", MATCH_C_ZEXT_B, MASK_C_ZEXT_B, match_opcode, 0 }, +{"c.sext.w", 64, INSN_CLASS_ZCB, "d", MATCH_C_ADDIW, MASK_C_ADDIW|MASK_RVC_IMM, match_rd_nonzero, INSN_ALIAS }, + /* Supervisor instructions. */ {"csrr", 0, INSN_CLASS_ZICSR, "d,E", MATCH_CSRRS, MASK_CSRRS|MASK_RS1, match_opcode, INSN_ALIAS }, {"csrw", 0, INSN_CLASS_ZICSR, "E,s", MATCH_CSRRW, MASK_CSRRW|MASK_RD, match_opcode, INSN_ALIAS }, diff --git a/src-release.sh b/src-release.sh index 10078fcda06..c974ea05473 100755 --- a/src-release.sh +++ b/src-release.sh @@ -39,7 +39,7 @@ MAKEINFOFLAGS=--split-size=5000000 # Support for building net releases # Files in root used in any net release. -DEVO_SUPPORT="ar-lib ChangeLog ChangeLog.git compile config config-ml.in config.guess \ +DEVO_SUPPORT="ar-lib ChangeLog compile config config-ml.in config.guess \ config.rpath config.sub configure configure.ac COPYING COPYING.LIB \ COPYING3 COPYING3.LIB depcomp install-sh libtool.m4 ltgcc.m4 \ ltmain.sh ltoptions.m4 ltsugar.m4 ltversion.m4 lt~obsolete.m4 \